Update of /cvsroot/wisp/wisp/users/dig
In directory sc8-pr-cvs1:/tmp/cvs-serv12122
Modified Files:
elf.py
Log Message:
explicitly zero entry point address in ELF headers of relocatable object files
Index: elf.py
===================================================================
RCS file: /cvsroot/wisp/wisp/users/dig/elf.py,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- elf.py 14 Apr 2003 00:32:18 -0000 1.27
+++ elf.py 14 Apr 2003 00:40:23 -0000 1.28
@@ -323,7 +323,7 @@
from linkie import Linkie
-def make_ELF32_header (byte_order):
+def make_ELF32_header (byte_order, zero_entry = 0):
h = Linkie(byte_order)
h.align(4)
h.emit_string('\x7F' + 'ELF') # magic
@@ -339,7 +339,8 @@
h.emit_wyde_sum(['#elf/type'])
h.emit_wyde_sum(['#elf/machine'])
h.emit_tetra(EV.CURRENT)
- h.emit_tetra_sum(['&_start'])
+ if zero_entry: h.emit_tetra(0)
+ else: h.emit_tetra_sum(['&_start'])
h.emit_tetra_sum(['!elf/proghdr'])
h.emit_tetra_sum(['!elf/secthdr'])
h.emit_tetra_sum(['#elf/flags'])
@@ -487,7 +488,7 @@
binary = Linkie('<')
memory_boundary = memory_bottom # must be at page boundary
- binary.paste(0, make_ELF32_header('<'))
+ binary.paste(0, make_ELF32_header('<', zero_entry = want_relocatable))
if want_relocatable:
binary.place_symbol('#elf/type', ET.REL)
else:
@@ -536,7 +537,7 @@
offset = binary.filesz()
- if 'r' in flags or p_flags == 0:
+ if want_relocatable or p_flags == 0:
section.set_origin(0)
else:
address = memory_boundary | (offset & 0xFFF)
@@ -560,7 +561,7 @@
# alignment has been processed already
binary.place_symbol('!' + name)
- binary.paste(-1, section, skip_addr = 'r' in flags)
+ binary.paste(-1, section, skip_addr = want_relocatable)
if want_symbols:
symtab = sections['.symtab']
symstr = sections['.symstr']
@@ -574,7 +575,7 @@
# create section header table
section_header_table = make_ELF32_shtable('<', shentnames,
- zero_addresses = 'r' in flags)
+ zero_addresses = want_relocatable)
binary.paste(-4, section_header_table)
binary.place_symbol('#elf/shstrndx', shentnames.index('.shstrtab') + 1)
binary.link()
|