• Tim Abbott's avatar
    vmlinux.lds.h: restructure BSS linker script macros · 04e448d9
    Tim Abbott authored
    The BSS section macros in vmlinux.lds.h currently place the .sbss
    input section outside the bounds of [__bss_start, __bss_end].  On all
    architectures except for microblaze that handle both .sbss and
    __bss_start/__bss_end, this is wrong: the .sbss input section is
    within the range [__bss_start, __bss_end].  Relatedly, the example
    code at the top of the file actually has __bss_start/__bss_end defined
    twice; I believe the right fix here is to define them in the
    BSS_SECTION macro but not in the BSS macro.
    
    Another problem with the current macros is that several
    architectures have an ALIGN(4) or some other small number just before
    __bss_stop in their linker scripts.  The BSS_SECTION macro currently
    hardcodes this to 4; while it should really be an argument.  It also
    ignores its sbss_align argument; fix that.
    
    mn10300 is the only user at present of any of the macros touched by
    this patch.  It looks like mn10300 actually was incorrectly converted
    to use the new BSS() macro (the alignment of 4 prior to conversion was
    a __bss_stop alignment, but the argument to the BSS macro is a start
    alignment).  So fix this as well.
    
    I'd like acks from Sam and David on this one.  Also CCing Paul, since
    he has a patch from me which will need to be updated to use
    BSS_SECTION(0, PAGE_SIZE, 4) once this gets merged.
    Signed-off-by: default avatarTim Abbott <tabbott@ksplice.com>
    Cc: Paul Mundt <lethal@linux-sh.org>
    Cc: David Howells <dhowells@redhat.com>
    Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
    04e448d9
vmlinux.lds.h 21.4 KB