diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2014-06-09 14:37:23 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2014-06-11 14:55:56 -0400 |
commit | ee952534039b32049404f26ccaae1b034f7e876b (patch) | |
tree | c62d3b22673b3997074b2bc732708c4337c11358 /scripts | |
parent | c228d7047331caba6b993a0c5c47bfb508a3396c (diff) | |
download | seabios-ee952534039b32049404f26ccaae1b034f7e876b.zip seabios-ee952534039b32049404f26ccaae1b034f7e876b.tar.gz seabios-ee952534039b32049404f26ccaae1b034f7e876b.tar.bz2 |
build: Use customized entry point for each type of build.
Set an appropriate elf entry point (entry_elf, entry_csm,
reset_vector) for each type of build (coreboot, csm, qemu). Use that
entry point when determining which sections to keep.
Also, remove the '.export.' mechanism to keep a section in the final
binary - it is no longer used.
This allows the build to slightly reduce the overall size as entry_elf
is no longer needed on non-coreboot builds and entry_csm is no longer
needed on non-csm builds.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/layoutrom.py | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/scripts/layoutrom.py b/scripts/layoutrom.py index 1fae72d..7c96cd3 100755 --- a/scripts/layoutrom.py +++ b/scripts/layoutrom.py @@ -166,7 +166,7 @@ class LayoutInfo: zonefseg_start = zonefseg_end = None final_readonly_start = None zonelow_base = final_sec32low_start = None - exportsyms = varlowsyms = None + varlowsyms = entrysym = None # Determine final memory addresses for sections def doLayout(sections, config, genreloc): @@ -394,7 +394,7 @@ def writeLinkerScripts(li, out16, out32seg, out32flat): sec32all_start -= numrelocs * 4 out = outXRefs(li.sections32low, exportsyms=li.varlowsyms , forcedelta=li.final_sec32low_start-li.sec32low_start) - out += outXRefs(sections32all, exportsyms=li.exportsyms) + """ + out += outXRefs(sections32all, exportsyms=[li.entrysym]) + """ _reloc_min_align = 0x%x ; zonefseg_start = 0x%x ; zonefseg_end = 0x%x ; @@ -434,12 +434,12 @@ def writeLinkerScripts(li, out16, out32seg, out32flat): li.sec32seg_start, li.sec16_start) out = COMMONHEADER + out + COMMONTRAILER + """ -ENTRY(entry_elf) +ENTRY(%s) PHDRS { text PT_LOAD AT ( code32flat_start ) ; } -""" +""" % (li.entrysym.name,) outfile = open(out32flat, 'w') outfile.write(out) outfile.close() @@ -480,7 +480,7 @@ def findInit(sections): anchorsections = [ section for section in sections if ('.data.varlow.' in section.name or '.data.varfseg.' in section.name - or '.runtime.' in section.name or '.export.' in section.name)] + or '.runtime.' in section.name)] runtimesections = findReachable(anchorsections, checkRuntime, None) for section in sections: if section.fileid == '32flat' and section not in runtimesections: @@ -660,9 +660,15 @@ def main(): # Figure out which sections to keep. allsections = info16[0] + info32seg[0] + info32flat[0] symbols = {'16': info16[1], '32seg': info32seg[1], '32flat': info32flat[1]} - anchorsections = [section for section in info16[0] - if (section.name.startswith('.fixedaddr.') - or '.export.' in section.name)] + if config.get('CONFIG_COREBOOT'): + entrysym = symbols['16'].get('entry_elf') + elif config.get('CONFIG_CSM'): + entrysym = symbols['16'].get('entry_csm') + else: + entrysym = symbols['16'].get('reset_vector') + anchorsections = [entrysym.section] + [ + section for section in info16[0] + if section.name.startswith('.fixedaddr.')] keepsections = findReachable(anchorsections, checkKeep, symbols) sections = [section for section in allsections if section in keepsections] @@ -680,15 +686,12 @@ def main(): li = doLayout(sections, config, genreloc) # Exported symbols - li.exportsyms = [symbol for symbol in symbols['16'].values() - if (symbol.section is not None - and '.export.' in symbol.section.name - and symbol.name != symbol.section.name)] li.varlowsyms = [symbol for symbol in symbols['32flat'].values() if (symbol.section is not None and symbol.section.finalloc is not None and '.data.varlow.' in symbol.section.name and symbol.name != symbol.section.name)] + li.entrysym = entrysym # Write out linker script files. writeLinkerScripts(li, out16, out32seg, out32flat) |