[Wisp-cvs] wisp/users/dig elf.py,1.27,1.28
Status: Alpha
Brought to you by:
digg
From: <di...@us...> - 2003-04-14 00:40:26
|
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() |