Skip to content
Snippets Groups Projects
Commit 3ebd1cbc authored by Albert ARIBAUD's avatar Albert ARIBAUD
Browse files

arm: make __bss_start and __bss_end__ compiler-generated


Turn __bss_start and __bss_end__ from linker-generated
to compiler-generated symbols, causing relocations for
these symbols to change type, from R_ARM_ABS32 to
R_ARM_RELATIVE.

This should have no functional impact, as it affects
references to __bss_start and __bss_end__ only before
relocation, and no such references are done.

Signed-off-by: default avatarAlbert ARIBAUD <albert.u.boot@aribaud.net>
parent 65cdd643
No related branches found
No related tags found
No related merge requests found
...@@ -67,11 +67,17 @@ SECTIONS ...@@ -67,11 +67,17 @@ SECTIONS
_end = .; _end = .;
.bss __rel_dyn_start (OVERLAY) : { .bss_start __rel_dyn_start (OVERLAY) : {
__bss_start = .; KEEP(*(.__bss_start));
}
.bss __bss_start (OVERLAY) : {
*(.bss*) *(.bss*)
. = ALIGN(4); . = ALIGN(4);
__bss_end__ = .; ___bssend___ = .;
}
.bss_end ___bssend___ (OVERLAY) : {
KEEP(*(.__bss_end__));
} }
/DISCARD/ : { *(.dynstr*) } /DISCARD/ : { *(.dynstr*) }
......
...@@ -81,11 +81,17 @@ SECTIONS ...@@ -81,11 +81,17 @@ SECTIONS
*(.mmutable) *(.mmutable)
} }
.bss __rel_dyn_start (OVERLAY) : { .bss_start __rel_dyn_start (OVERLAY) : {
__bss_start = .; KEEP(*(.__bss_start));
}
.bss __bss_start (OVERLAY) : {
*(.bss*) *(.bss*)
. = ALIGN(4); . = ALIGN(4);
__bss_end__ = .; ___bssend___ = .;
}
.bss_end ___bssend___ (OVERLAY) : {
KEEP(*(.__bss_end__));
} }
/DISCARD/ : { *(.dynstr*) } /DISCARD/ : { *(.dynstr*) }
......
...@@ -39,6 +39,7 @@ GLCOBJS += div0.o ...@@ -39,6 +39,7 @@ GLCOBJS += div0.o
SOBJS-y += crt0.o SOBJS-y += crt0.o
ifndef CONFIG_SPL_BUILD ifndef CONFIG_SPL_BUILD
COBJS-y += bss.o
COBJS-y += board.o COBJS-y += board.o
COBJS-y += bootm.o COBJS-y += bootm.o
COBJS-$(CONFIG_SYS_L2_PL310) += cache-pl310.o COBJS-$(CONFIG_SYS_L2_PL310) += cache-pl310.o
......
/*
* Copyright 2013 Albert ARIBAUD <albert.u.boot@aribaud.net>
*
* See file CREDITS for list of people who contributed to this
* project.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
/**
* These two symbols are declared in a C file so that the linker
* uses R_ARM_RELATIVE relocation, rather than the R_ARM_ABS32 one
* it would use if the symbols were defined in the linker file.
* Using only R_ARM_RELATIVE relocation ensures that references to
* the symbols are correct after as well as before relocation.
*
* We need a 0-byte-size type for these symbols, and the compiler
* does not allow defining objects of C type 'void'. Using an empty
* struct is allowed by the compiler, but causes gcc versions 4.4 and
* below to complain about aliasing. Therefore we use the next best
* thing: zero-sized arrays, which are both 0-byte-size and exempt from
* aliasing warnings.
*/
char __bss_start[0] __attribute__((used, section(".__bss_start")));
char __bss_end__[0] __attribute__((used, section(".__bss_end__")));
...@@ -41,15 +41,15 @@ SECTIONS ...@@ -41,15 +41,15 @@ SECTIONS
*(.text*) *(.text*)
} }
. = ALIGN (4); . = ALIGN(4);
.rodata : { .rodata : {
*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
} }
. = ALIGN (4); . = ALIGN(4);
.data : { .data : {
*(.data*) *(.data*)
} }
. = ALIGN (4); . = ALIGN(4);
.got : { .got : {
*(.got) *(.got)
} }
...@@ -72,13 +72,21 @@ SECTIONS ...@@ -72,13 +72,21 @@ SECTIONS
*(.dynsym) *(.dynsym)
} }
.bss __rel_dyn_start (OVERLAY) : { _end = .;
__bss_start = .;
.bss_start __rel_dyn_start (OVERLAY) : {
KEEP(*(.__bss_start));
}
.bss __bss_start (OVERLAY) : {
*(.bss*) *(.bss*)
. = ALIGN(4); . = ALIGN(4);
_end = .; ___bssend___ = .;
} }
__bss_end__ =.; .bss_end ___bssend___ (OVERLAY) : {
KEEP(*(.__bss_end__));
}
/DISCARD/ : { *(.dynstr*) } /DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) } /DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) } /DISCARD/ : { *(.plt*) }
......
...@@ -41,15 +41,15 @@ SECTIONS ...@@ -41,15 +41,15 @@ SECTIONS
*(.text*) *(.text*)
} }
. = ALIGN (4); . = ALIGN(4);
.rodata : { .rodata : {
*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
} }
. = ALIGN (4); . = ALIGN(4);
.data : { .data : {
*(.data*) *(.data*)
} }
. = ALIGN (4); . = ALIGN(4);
.got : { .got : {
*(.got) *(.got)
} }
...@@ -72,13 +72,21 @@ SECTIONS ...@@ -72,13 +72,21 @@ SECTIONS
*(.dynsym) *(.dynsym)
} }
.bss __rel_dyn_start (OVERLAY) : { _end = .;
__bss_start = .;
.bss_start __rel_dyn_start (OVERLAY) : {
KEEP(*(.__bss_start));
}
.bss __bss_start (OVERLAY) : {
*(.bss*) *(.bss*)
. = ALIGN(4); . = ALIGN(4);
_end = .; ___bssend___ = .;
} }
__bss_end__ =.; .bss_end ___bssend___ (OVERLAY) : {
KEEP(*(.__bss_end__));
}
/DISCARD/ : { *(.dynstr*) } /DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) } /DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) } /DISCARD/ : { *(.plt*) }
......
...@@ -72,13 +72,21 @@ SECTIONS ...@@ -72,13 +72,21 @@ SECTIONS
*(.dynsym) *(.dynsym)
} }
.bss __rel_dyn_start (OVERLAY) : { _end = .;
__bss_start = .;
.bss_start __rel_dyn_start (OVERLAY) : {
KEEP(*(.__bss_start));
}
.bss __bss_start (OVERLAY) : {
*(.bss*) *(.bss*)
. = ALIGN(4); . = ALIGN(4);
_end = .; ___bssend___ = .;
} }
__bss_end__ =.; .bss_end ___bssend___ (OVERLAY) : {
KEEP(*(.__bss_end__));
}
/DISCARD/ : { *(.dynstr*) } /DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) } /DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) } /DISCARD/ : { *(.plt*) }
......
...@@ -72,13 +72,21 @@ SECTIONS ...@@ -72,13 +72,21 @@ SECTIONS
*(.dynsym) *(.dynsym)
} }
.bss __rel_dyn_start (OVERLAY) : { _end = .;
__bss_start = .;
.bss_start __rel_dyn_start (OVERLAY) : {
KEEP(*(.__bss_start));
}
.bss __bss_start (OVERLAY) : {
*(.bss*) *(.bss*)
. = ALIGN(4); . = ALIGN(4);
_end = .; ___bssend___ = .;
} }
__bss_end__ =.; .bss_end ___bssend___ (OVERLAY) : {
KEEP(*(.__bss_end__));
}
/DISCARD/ : { *(.dynstr*) } /DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) } /DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) } /DISCARD/ : { *(.plt*) }
......
...@@ -80,11 +80,17 @@ SECTIONS ...@@ -80,11 +80,17 @@ SECTIONS
_end = .; _end = .;
.bss __rel_dyn_start (OVERLAY) : { .bss_start __rel_dyn_start (OVERLAY) : {
__bss_start = .; KEEP(*(.__bss_start));
*(.bss) }
.bss __bss_start (OVERLAY) : {
*(.bss*)
. = ALIGN(4); . = ALIGN(4);
__bss_end__ = .; ___bssend___ = .;
}
.bss_end ___bssend___ (OVERLAY) : {
KEEP(*(.__bss_end__));
} }
/DISCARD/ : { *(.bss*) } /DISCARD/ : { *(.bss*) }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment