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 liner 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.

Change-Id: Iaa0fd428bf975c82d4e6b0e75a17e6fd231fbaa9
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/207261
Reviewed-by: Stefan Reinauer <reinauer@google.com>
Reviewed-by: Furquan Shaikh <furquan@chromium.org>
This commit is contained in:
Aaron Durbin 2014-07-10 12:32:17 -05:00 committed by chrome-internal-fetch
commit 7c1a3e63e3

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.*)