arch/x86: Link walkcbfs.S instead on including it in bootblock.S
The code flow doesn't fall through to walkcbfs, as it does in the rest of bootblock.S. Instead, walkcbfs is called (albeit via a jmp). The linker cannot know this when walkcbfs.S is included directly. When we use a CAR bootblock, we lose several hundred bytes because walkcbfs is not garbage-collected, yet it isn't used. This problem is solved by assembling walkcbfs.S separately, and linking it. Change-Id: Ib3a976db09b9ff270b7677cb4f9db80b0b025e22 Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com> Reviewed-on: http://review.coreboot.org/11785 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
parent
dbeedbef70
commit
c46a39237a
|
@ -85,6 +85,7 @@ endif
|
||||||
# the right order. Make sure the auto generated bootblock.inc is a proper
|
# the right order. Make sure the auto generated bootblock.inc is a proper
|
||||||
# dependency. Make the same true for the linker sript.
|
# dependency. Make the same true for the linker sript.
|
||||||
bootblock-y += bootblock.S
|
bootblock-y += bootblock.S
|
||||||
|
bootblock-y += walkcbfs.S
|
||||||
$(obj)/arch/x86/bootblock.bootblock.o: $(objgenerated)/bootblock.inc
|
$(obj)/arch/x86/bootblock.bootblock.o: $(objgenerated)/bootblock.inc
|
||||||
|
|
||||||
bootblock-y += bootblock.ld
|
bootblock-y += bootblock.ld
|
||||||
|
|
|
@ -47,5 +47,3 @@
|
||||||
* needs to come after bootblock.inc.
|
* needs to come after bootblock.inc.
|
||||||
*/
|
*/
|
||||||
#include <generated/bootblock.inc>
|
#include <generated/bootblock.inc>
|
||||||
|
|
||||||
#include <arch/x86/walkcbfs.S>
|
|
||||||
|
|
|
@ -18,6 +18,9 @@
|
||||||
|
|
||||||
#define CBFS_FILE_STRUCTSIZE (CBFS_FILE_OFFSET + 4)
|
#define CBFS_FILE_STRUCTSIZE (CBFS_FILE_OFFSET + 4)
|
||||||
|
|
||||||
|
.section .text
|
||||||
|
.global walkcbfs_asm
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* input %esi: filename
|
* input %esi: filename
|
||||||
* input %esp: return address (not pointer to return address!)
|
* input %esp: return address (not pointer to return address!)
|
||||||
|
|
Loading…
Reference in New Issue