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>
50 lines
1.6 KiB
ArmAsm
50 lines
1.6 KiB
ArmAsm
/*
|
|
* This file is part of the coreboot project.
|
|
*
|
|
* Copyright 2015 Google Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; version 2 of the License.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc.
|
|
*/
|
|
|
|
/* This file assembles the bootblock program by the order of the includes. Thus,
|
|
* it's extremely important that one pays very careful attention to the order
|
|
* of the includes. */
|
|
|
|
#include <arch/x86/prologue.inc>
|
|
#include <cpu/x86/16bit/entry16.inc>
|
|
#include <cpu/x86/16bit/reset16.inc>
|
|
#include <cpu/x86/32bit/entry32.inc>
|
|
#include <arch/x86/id.inc>
|
|
|
|
#if IS_ENABLED(CONFIG_CPU_INTEL_FIRMWARE_INTERFACE_TABLE)
|
|
#include <cpu/intel/fit/fit.inc>
|
|
#endif
|
|
|
|
#ifdef CONFIG_CHIPSET_BOOTBLOCK_INCLUDE
|
|
#include CONFIG_CHIPSET_BOOTBLOCK_INCLUDE
|
|
#endif
|
|
|
|
#if IS_ENABLED(CONFIG_SSE)
|
|
#include <cpu/x86/sse_enable.inc>
|
|
#endif
|
|
|
|
/*
|
|
* This bootblock.inc file is generated by ROMCC. The above program flow
|
|
* falls through to this point. ROMCC assumes the last function it parsed
|
|
* is the main function and it places its instructions at the beginning of
|
|
* the generated file. Moreover, any library/common code needed in bootblock
|
|
* needs to come after bootblock.inc.
|
|
*/
|
|
#include <generated/bootblock.inc>
|