• Linus Torvalds's avatar
    runtime constants: deal with old decrepit linkers · b6547e54
    Linus Torvalds authored
    The runtime constants linker script depended on documented linker
    behavior [1]:
    
     "If an output section’s name is the same as the input section’s name
      and is representable as a C identifier, then the linker will
      automatically PROVIDE two symbols: __start_SECNAME and __stop_SECNAME,
      where SECNAME is the name of the section. These indicate the start
      address and end address of the output section respectively"
    
    to just automatically define the symbol names for the bounds of the
    runtime constant arrays.
    
    It turns out that this isn't actually something we can rely on, with old
    linkers not generating these automatic symbols.  It looks to have been
    introduced in binutils-2.29 back in 2017, and we still support building
    with versions all the way back to binutils-2.25 (from 2015).
    
    And yes, Oleg actually seems to be using such ancient versions of
    binutils.
    
    So instead of depending on the implicit symbols from "section names
    match and are representable C identifiers", just do this all manually.
    It's not like it causes us any extra pain, we already have to do that
    for all the other sections that we use that often have special
    characters in them.
    Reported-and-tested-by: default avatarOleg Nesterov <oleg@redhat.com>
    Link: https://sourceware.org/binutils/docs/ld/Input-Section-Example.html [1]
    Link: https://lore.kernel.org/all/20240802114518.GA20924@redhat.com/Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b6547e54
vmlinux.lds.h 32.5 KB