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()
|