diff options
-rwxr-xr-x | scripts/layoutrom.py | 27 | ||||
-rw-r--r-- | src/entryfuncs.S | 6 | ||||
-rw-r--r-- | src/romlayout.S | 4 |
3 files changed, 17 insertions, 20 deletions
diff --git a/scripts/layoutrom.py b/scripts/layoutrom.py index 1fae72da..7c96cd3b 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) diff --git a/src/entryfuncs.S b/src/entryfuncs.S index ea6f9900..679b1fc4 100644 --- a/src/entryfuncs.S +++ b/src/entryfuncs.S @@ -149,9 +149,3 @@ .section .text.asm.\func .global \func .endm - - // Declare an exported function - .macro EXPORTFUNC func - .section .text.asm.export.\func - .global \func - .endm diff --git a/src/romlayout.S b/src/romlayout.S index 80719630..a931b323 100644 --- a/src/romlayout.S +++ b/src/romlayout.S @@ -440,7 +440,7 @@ entry_bios32: lretl // 32bit elf entry point - EXPORTFUNC entry_elf + DECLFUNC entry_elf entry_elf: cli cld @@ -458,7 +458,7 @@ entry_elf: .code16 // UEFI Compatibility Support Module (CSM) entry point - EXPORTFUNC entry_csm + DECLFUNC entry_csm entry_csm: // Backup register state pushfw |