Skip to content
  • Ivan Kokshaysky's avatar
    alpha: link failure fix · ede42692
    Ivan Kokshaysky authored
    
    
    With built-in scsi disk driver, the final link fails with a following
    error:
    `.exit.text' referenced in section `.rodata' of drivers/built-in.o:
    defined in discarded section `.exit.text' of drivers/built-in.o
    
    This happens with -Os (CONFIG_CC_OPTIMIZE_FOR_SIZE=y) with all gcc-4
    versions, and also with -O2 and gcc-4.3.
    
    The problem is in sd.c:sd_major() being inlined into __exit function
    exit_sd(), and the compiler generating a jump table in .rodata section
    for the 'switch' statement in sd_major(). So we have references to
    discarded section.
    
    Fixed with a big hammer in the form of -fno-jump-tables.
    
    Note that jump tables vs. discarded sections is a generic problem,
    other architectures are just lucky not to suffer from it. But with
    a slightly more complex switch/case statement it can be reproduced
    on x86 as well. So maybe at some point we should consider
    -fno-jump-tables as a generic compile option...
    
    Signed-off-by: default avatarIvan Kokshaysky <ink@jurassic.park.msu.ru>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    ede42692