[Wisp-cvs] wisp/users/dig elf.py,1.21,1.22 makehello.py,1.21,1.22 tran.py,1.2,1.3
Status: Alpha
Brought to you by:
digg
From: <di...@us...> - 2003-04-13 08:47:56
|
Update of /cvsroot/wisp/wisp/users/dig In directory sc8-pr-cvs1:/tmp/cvs-serv24388 Modified Files: elf.py makehello.py tran.py Log Message: preparations for relocatable object generation Index: elf.py =================================================================== RCS file: /cvsroot/wisp/wisp/users/dig/elf.py,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- elf.py 12 Apr 2003 18:48:22 -0000 1.21 +++ elf.py 13 Apr 2003 08:47:49 -0000 1.22 @@ -393,11 +393,13 @@ symstr.emit_byte(0) return ofs +# Returns index of the entry added. def emit_ELF32_symtab_entry (symtab, symstr, pname, value = None, section = SHN.ABS): + ofs = emit_ELF32_symstr_entry(symstr, pname[1:]) # No explicit alignment. .symtab doesn't bear padding; if # you get it out of align, you're out of luck anyway. - ofs = emit_ELF32_symstr_entry (symstr, pname[1:]) + i = symtab.memsz() / 16 symtab.emit_tetra(ofs) if value == None: symtab.emit_tetra_sum([pname]) else: symtab.emit_tetra(value) @@ -405,14 +407,18 @@ symtab.emit_byte(STB.GLOBAL << 4 | STT.NOTYPE) symtab.emit_byte(0) # st_other; reserved symtab.emit_wyde(section) + return i # Note: all entries in a single relocation section # must either have or not have explicit addends. -def emit_ELF32_reloc_entry (rel, offset, type, symind, addend = None): - # No explicit alignment. .rel* doesn't bear padding; if +def emit_ELF32_reloc_entry (rel, symtab, symstr, offset, type, pname, + addend = None): + i = emit_ELF32_symtab_entry(symtab, symstr, pname, + value = 0, section = SHN.UNDEF) + # No explicit alignment. .rel* don't bear padding; if # you get it out of align, you're out of luck anyway. rel.emit_tetra(offset) - rel.emit_tetra((symind << 8) | type) + rel.emit_tetra((i << 8) | type) if addend <> None: rel.emit_tetra(addend) def infer_by_prefix (name, dict): @@ -469,9 +475,9 @@ if 'x' in flags: p_flags |= PF.X return p_flags -def make_ELF32_executable (text = None, data = None, - memory_bottom = 0x08048000, - want_symbols = 0): +def make_ELF32_object (text = None, data = None, flags = '', + memory_bottom = 0x08048000): + want_symbols = 's' in flags # Will set given sections' origins. sections = {} sections['.text'] = text Index: makehello.py =================================================================== RCS file: /cvsroot/wisp/wisp/users/dig/makehello.py,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- makehello.py 8 Apr 2003 22:24:02 -0000 1.21 +++ makehello.py 13 Apr 2003 08:47:50 -0000 1.22 @@ -25,7 +25,7 @@ data.emit_string('Hello, world!\n') print 'With symbols' -hello = make_ELF32_executable(text = code, data = data, want_symbols = 1) +hello = make_ELF32_object(text = code, data = data, flags = 's') hello.dump() f = open('hello', 'w') @@ -33,7 +33,7 @@ f.close() print 'Without symbols' -hellowosym = make_ELF32_executable(text = code, data = data, want_symbols = 0) +hellowosym = make_ELF32_object(text = code, data = data, flags = '') hellowosym.dump() f = open('hellowosym', 'w') Index: tran.py =================================================================== RCS file: /cvsroot/wisp/wisp/users/dig/tran.py,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- tran.py 12 Apr 2003 17:46:24 -0000 1.2 +++ tran.py 13 Apr 2003 08:47:50 -0000 1.3 @@ -252,8 +252,7 @@ print 'DATA'; Data.dump() if Regstack: raise 'Regstack not empty after parsing ended', Regstack - binary = elf.make_ELF32_executable(text = Text, data = Data, - want_symbols = 1) + binary = elf.make_ELF32_object(text = Text, data = Data, flags = 's') f = open(output_name, 'w') binary.get_file().tofile(f) f.close() |