From 7c1a3e63e398755de0c77524a0483e6f1019aac0 Mon Sep 17 00:00:00 2001 From: Aaron Durbin Date: Thu, 10 Jul 2014 12:32:17 -0500 Subject: [PATCH] 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 Reviewed-on: https://chromium-review.googlesource.com/207261 Reviewed-by: Stefan Reinauer Reviewed-by: Furquan Shaikh --- src/arch/arm64/ramstage.ld | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/arch/arm64/ramstage.ld b/src/arch/arm64/ramstage.ld index e878820352..5dc55bae52 100644 --- a/src/arch/arm64/ramstage.ld +++ b/src/arch/arm64/ramstage.ld @@ -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.*)