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:
		| @@ -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!) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user