arm64: ensure vital sections aren't garbage collected

The driver structures live in special sections which have no
direct reference to the symbols. Therefore, when garbage
collecting sections in the linker the drivers are tossed out
resulting in no drivers being linked into ramstage. Fix this
by adding the KEEP() directive to those special sections.

BUG=chrome-os-partner:29923
BRANCH=None
TEST=Built and noted console starts working in ramstage.

Original-Change-Id: Iaa0fd428bf975c82d4e6b0e75a17e6fd231fbaa9
Original-Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/207261
Original-Reviewed-by: Stefan Reinauer <reinauer@google.com>
Original-Reviewed-by: Furquan Shaikh <furquan@chromium.org>
(cherry picked from commit 7c1a3e63e398755de0c77524a0483e6f1019aac0)
Signed-off-by: Marc Jones <marc.jones@se-eng.com>

Change-Id: I1e30e73be754ec849cb3cfac3bcb12e95b0f60d4
Reviewed-on: http://review.coreboot.org/8584
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
Aaron Durbin 2014-07-10 12:32:17 -05:00 committed by Marc Jones
parent e5d014c29a
commit 6ba1b628ee
1 changed files with 5 additions and 5 deletions

View File

@ -49,7 +49,7 @@ SECTIONS
.ctors : {
. = ALIGN(0x100);
__CTOR_LIST__ = .;
*(.ctors);
KEEP(*(.ctors));
LONG(0);
__CTOR_END__ = .;
}
@ -58,17 +58,17 @@ SECTIONS
_rodata = .;
. = ALIGN(4);
console_drivers = .;
*(.rodata.console_drivers)
KEEP(*(.rodata.console_drivers));
econsole_drivers = . ;
. = ALIGN(4);
pci_drivers = . ;
*(.rodata.pci_driver)
KEEP(*(.rodata.pci_driver));
epci_drivers = . ;
cpu_drivers = . ;
*(.rodata.cpu_driver)
KEEP(*(.rodata.cpu_driver));
ecpu_drivers = . ;
_bs_init_begin = .;
*(.bs_init)
KEEP(*(.bs_init));
_bs_init_end = .;
*(.rodata)
*(.rodata.*)