From: David Woodhouse David.Woodhouse@intel.com
This removes 25KiB of unused cruft from the image, crucially making the difference between a 128KiB image (which works with OVMF) and a 256KiB image (which doesn't).
Not-yet-signed-off-by: David Woodhouse David.Woodhouse@intel.com --- src/pirtable.c | 2 +- src/romlayout.S | 6 ++++++ tools/layoutrom.py | 20 ++++++++++++-------- 3 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/src/pirtable.c b/src/pirtable.c index 2ba70ee..3c06db1 100644 --- a/src/pirtable.c +++ b/src/pirtable.c @@ -94,7 +94,7 @@ struct pir_table PIR_TABLE __aligned(16) VAR16EXPORT = { void pirtable_setup(void) { - if (! CONFIG_PIRTABLE || CONFIG_CSM) + if (! CONFIG_PIRTABLE) return;
dprintf(3, "init PIR table\n"); diff --git a/src/romlayout.S b/src/romlayout.S index 0c1cfb4..3176067 100644 --- a/src/romlayout.S +++ b/src/romlayout.S @@ -366,6 +366,7 @@ entry_bios32: 2: popfl lretl
+#if !CONFIG_CSM // 32bit elf entry point EXPORTFUNC entry_elf entry_elf: @@ -381,6 +382,7 @@ entry_elf: movw %ax, %ss movl $BUILD_STACK_ADDR, %esp ljmpl $SEG32_MODE32_CS, $_cfunc32flat_handle_post +#endif
.code16gcc
@@ -526,9 +528,13 @@ entry_18:
ORG 0xe05b entry_post: +#if CONFIG_CSM + jmp entry_resume +#else cmpl $0, %cs:HaveRunPost // Check for resume/reboot jnz entry_resume ENTRY_INTO32 _cfunc32flat_handle_post // Normal entry point +#endif
ORG 0xe2c3 IRQ_ENTRY 02 diff --git a/tools/layoutrom.py b/tools/layoutrom.py index 75c49be..eecb141 100755 --- a/tools/layoutrom.py +++ b/tools/layoutrom.py @@ -353,7 +353,6 @@ def writeLinkerScripts(li, entrysym, genreloc, exportsyms, out16, out32seg, out3 # Write 32flat linker script sections32all = li.sections32flat + li.sections32init + li.sections32low sec32all_start = li.sec32low_start - entrysympos = entrysym.section.finalloc + entrysym.offset relocstr = "" if genreloc: # Generate relocations @@ -371,8 +370,10 @@ def writeLinkerScripts(li, entrysym, genreloc, exportsyms, out16, out32seg, out3 + strRelocs("_reloc_datalow", "code32flat_start", lowrelocs)) numrelocs = len(absrelocs + relrelocs + initrelocs + lowrelocs) sec32all_start -= numrelocs * 4 - out = outXRefs(sections32all, exportsyms=exportsyms) + """ - %s = 0x%x ; + out = outXRefs(sections32all, exportsyms=exportsyms) + if entrysym is not None: + out = out + "%s = 0x%x ;\n" % ( entrysym.name, entrysym.section.finalloc + entrysym.offset ) + out = out + """ _reloc_min_align = 0x%x ; datalow_base = 0x%x ; final_datalow_start = 0x%x ; @@ -393,8 +394,7 @@ def writeLinkerScripts(li, entrysym, genreloc, exportsyms, out16, out32seg, out3 *(.text16) code32flat_end = ABSOLUTE(.) ; } :text -""" % (entrysym.name, entrysympos, - li.sec32init_align, +""" % (li.sec32init_align, li.datalow_base, li.final_sec32low_start, sec32all_start, @@ -405,12 +405,13 @@ def writeLinkerScripts(li, entrysym, genreloc, exportsyms, out16, out32seg, out3 li.sec32seg_start, li.sec16_start) out = COMMONHEADER + out + COMMONTRAILER + """ -ENTRY(%s) PHDRS { text PT_LOAD AT ( code32flat_start ) ; } -""" % (entrysym.name,) +""" + if entrysym is not None: + out = out + "\nENTRY(%s)\n" % entrysym.name outfile = open(out32flat, 'wb') outfile.write(out) outfile.close() @@ -638,7 +639,10 @@ def main(): li = doLayout(sections, genreloc)
# Write out linker script files. - entrysym = info16[1]['entry_elf'] + if 'entry_elf' in info16[1]: + entrysym = info16[1]['entry_elf'] + else: + entrysym = None writeLinkerScripts(li, entrysym, genreloc, exportsyms, out16, out32seg, out32flat)
if __name__ == '__main__':