]> xenbits.xensource.com Git - seabios.git/commitdiff
build: Use customized entry point for each type of build.
authorKevin O'Connor <kevin@koconnor.net>
Mon, 9 Jun 2014 18:37:23 +0000 (14:37 -0400)
committerKevin O'Connor <kevin@koconnor.net>
Wed, 11 Jun 2014 18:55:56 +0000 (14:55 -0400)
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>
scripts/layoutrom.py
src/entryfuncs.S
src/romlayout.S

index 1fae72da6062670f23c603441e162421e43376de..7c96cd3bf932fa251a85b1e48534cde4c535a069 100755 (executable)
@@ -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)
index ea6f9900bf0b1c1f6940fcd4743e3af8778a0bd8..679b1fc41a2c4b80487e7f69218585c00650b770 100644 (file)
         .section .text.asm.\func
         .global \func
         .endm
-
-        // Declare an exported function
-        .macro EXPORTFUNC func
-        .section .text.asm.export.\func
-        .global \func
-        .endm
index 807196305d34711b357040b36159cebd38558ff5..a931b3235e24aa4cc7962b2ee7c5693d092c38a2 100644 (file)
@@ -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