x86: link ramstage the same way regardless of RELOCATABLE_RAMSTAGE
Previously there were 2 paths in linking ramstage. One was used for RELOCATABLE_RAMSTAGE while the other was fixed location. Now that rmodtool can handle multiple secitons for a single proram segment there's no need for linking ramstage using lib/rmodule.ld. That also means true rmodules don't have symbols required for ramstage purposes so fix memlayout.h. Lastly add default rules for creating rmod files from the known file names and locations. BUG=chrome-os-partner:44827 BRANCH=None TEST=Built rambi. Inspected ramstage.debug as well as rmodules created during the build. Change-Id: I98d249036c27cb4847512ab8bca5ea7b02ce04bd Signed-off-by: Aaron Durbin <adubin@chromium.org> Reviewed-on: http://review.coreboot.org/11524 Tested-by: build bot (Jenkins) Tested-by: Raptor Engineering Automated Test Stand <noreply@raptorengineeringinc.com> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
parent
c9b053d07d
commit
83bc0db777
|
@ -282,17 +282,11 @@ ramstage-libs ?=
|
||||||
|
|
||||||
ifeq ($(CONFIG_RELOCATABLE_RAMSTAGE),y)
|
ifeq ($(CONFIG_RELOCATABLE_RAMSTAGE),y)
|
||||||
|
|
||||||
ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_32),y)
|
|
||||||
$(eval $(call rmodule_link,$(objcbfs)/ramstage.debug, $(objgenerated)/ramstage.o, $(CONFIG_HEAP_SIZE),x86_32))
|
|
||||||
else
|
|
||||||
$(eval $(call rmodule_link,$(objcbfs)/ramstage.debug, $(objgenerated)/ramstage.o, $(CONFIG_HEAP_SIZE),x86_64))
|
|
||||||
endif
|
|
||||||
|
|
||||||
# The rmodule_link defintion creates an elf file with .rmod extension.
|
# The rmodule_link defintion creates an elf file with .rmod extension.
|
||||||
$(objcbfs)/ramstage.elf: $(objcbfs)/ramstage.debug.rmod
|
$(objcbfs)/ramstage.elf: $(objcbfs)/ramstage.debug.rmod
|
||||||
cp $< $@
|
cp $< $@
|
||||||
|
|
||||||
else
|
endif
|
||||||
|
|
||||||
ramstage-y += memlayout.ld
|
ramstage-y += memlayout.ld
|
||||||
|
|
||||||
|
@ -300,8 +294,6 @@ $(objcbfs)/ramstage.debug: $(objgenerated)/ramstage.o $(obj)/arch/x86/memlayout.
|
||||||
@printf " CC $(subst $(obj)/,,$(@))\n"
|
@printf " CC $(subst $(obj)/,,$(@))\n"
|
||||||
$(LD_ramstage) $(CPPFLAGS) $(LDFLAGS_ramstage) -o $@ -L$(obj) $< -T $(obj)/arch/x86/memlayout.ramstage.ld
|
$(LD_ramstage) $(CPPFLAGS) $(LDFLAGS_ramstage) -o $@ -L$(obj) $< -T $(obj)/arch/x86/memlayout.ramstage.ld
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(objgenerated)/ramstage.o: $$(ramstage-objs) $(COMPILER_RT_ramstage) $$(ramstage-libs)
|
$(objgenerated)/ramstage.o: $$(ramstage-objs) $(COMPILER_RT_ramstage) $$(ramstage-libs)
|
||||||
@printf " CC $(subst $(obj)/,,$(@))\n"
|
@printf " CC $(subst $(obj)/,,$(@))\n"
|
||||||
ifeq ($(CONFIG_ARCH_ROMSTAGE_X86_32),y)
|
ifeq ($(CONFIG_ARCH_ROMSTAGE_X86_32),y)
|
||||||
|
|
|
@ -218,9 +218,12 @@ define rmodule_link
|
||||||
$(strip $(1)): $(strip $(2)) $$(COMPILER_RT_rmodules_$(4)) $(obj)/lib/rmodule.rmodules_$(4).ld | $$(RMODTOOL)
|
$(strip $(1)): $(strip $(2)) $$(COMPILER_RT_rmodules_$(4)) $(obj)/lib/rmodule.rmodules_$(4).ld | $$(RMODTOOL)
|
||||||
$$(LD_rmodules_$(4)) $$(LDFLAGS_rmodules_$(4)) $(RMODULE_LDFLAGS) -T $(obj)/lib/rmodule.rmodules_$(4).ld --defsym=__heap_size=$(strip $(3)) -o $$@ --whole-archive --start-group $(filter-out %.ld,$(2)) --end-group
|
$$(LD_rmodules_$(4)) $$(LDFLAGS_rmodules_$(4)) $(RMODULE_LDFLAGS) -T $(obj)/lib/rmodule.rmodules_$(4).ld --defsym=__heap_size=$(strip $(3)) -o $$@ --whole-archive --start-group $(filter-out %.ld,$(2)) --end-group
|
||||||
$$(NM_rmodules_$(4)) -n $$@ > $$(basename $$@).map
|
$$(NM_rmodules_$(4)) -n $$@ > $$(basename $$@).map
|
||||||
|
|
||||||
$(strip $(1)).rmod: $(strip $(1))
|
|
||||||
$$(RMODTOOL) -i $$^ -o $$@
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
$(objcbfs)/%.debug.rmod: $(objcbfs)/%.debug | $(RMODTOOL)
|
||||||
|
$(RMODTOOL) -i $< -o $@
|
||||||
|
|
||||||
|
$(obj)/%.elf.rmod: $(obj)/%.elf | $(RMODTOOL)
|
||||||
|
$(RMODTOOL) -i $< -o $@
|
||||||
|
|
|
@ -38,14 +38,14 @@
|
||||||
*(.text);
|
*(.text);
|
||||||
*(.text.*);
|
*(.text.*);
|
||||||
|
|
||||||
#if ENV_RAMSTAGE || ENV_ROMSTAGE || ENV_RMODULE
|
#if ENV_RAMSTAGE || ENV_ROMSTAGE
|
||||||
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
|
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
|
||||||
_cbmem_init_hooks = .;
|
_cbmem_init_hooks = .;
|
||||||
KEEP(*(.rodata.cbmem_init_hooks));
|
KEEP(*(.rodata.cbmem_init_hooks));
|
||||||
_ecbmem_init_hooks = .;
|
_ecbmem_init_hooks = .;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENV_RAMSTAGE || ENV_RMODULE
|
#if ENV_RAMSTAGE
|
||||||
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
|
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
|
||||||
_pci_drivers = .;
|
_pci_drivers = .;
|
||||||
KEEP(*(.rodata.pci_driver));
|
KEEP(*(.rodata.pci_driver));
|
||||||
|
@ -92,7 +92,7 @@
|
||||||
#ifdef __PRE_RAM__
|
#ifdef __PRE_RAM__
|
||||||
PROVIDE(_preram_cbmem_console = .);
|
PROVIDE(_preram_cbmem_console = .);
|
||||||
PROVIDE(_epreram_cbmem_console = _preram_cbmem_console);
|
PROVIDE(_epreram_cbmem_console = _preram_cbmem_console);
|
||||||
#elif ENV_RAMSTAGE || ENV_RMODULE
|
#elif ENV_RAMSTAGE
|
||||||
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
|
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
|
||||||
_bs_init_begin = .;
|
_bs_init_begin = .;
|
||||||
KEEP(*(.bs_init));
|
KEEP(*(.bs_init));
|
||||||
|
|
Loading…
Reference in New Issue