A somewhat working version of the binary rewriter for static executables
authorDaniel McNulty <mcnulty@cs.wisc.edu>
Tue, 27 Oct 2009 21:13:16 +0000 (16:13 -0500)
committerDaniel McNulty <mcnulty@cs.wisc.edu>
Thu, 11 Feb 2010 16:54:38 +0000 (10:54 -0600)
commit75c6f91e0b8259f5ca97cd7ed5d3d7065fc8f80d
treea643ba9923c4a0482c9698dc4a36d3c1d2705ff5
parentbeba7757fdeee4619272e396e7036ec580d83d2f
A somewhat working version of the binary rewriter for static executables
and associated changes. The rewriter works on basic cases.
=========================================================================

dyninstAPI/src/BPatch_binaryEdit.C(loadLibraryInt)
dyninstAPI/src/binaryEdit.C(getDependencies)

Modified (function) to process a map of BinaryEdits as returned from
openResolvedLibraryName instead of a single pair. This adds support for
processing Archives which can be thought of as a collection of BinaryEdits.

dyninstAPI/src/binaryEdit.*

Added new parameter to openFile that allows one to specify the member name.
This parameter is not required and its default value is the empty string.  If
the parameter is set, the fileDescriptor's member field is set with the member
name

Changed code in writeFile for creating references to external symbols. It now
uses the new function in Symtab to specify that the Symtab has an external
symbol reference to the a specified Symbol

dyninstAPI/src/linux.C

Refactored openResolvedLibraryName to handle static and dynamic executable
cases differently. Libraries (static or dynamic) are searched for in the exact
same way. Also, now returns map of BinaryEdits, instead of a single pair.

dyninstAPI/src/symtab.*
Can now open a Symtab via an Archive or the Symtab factory function, depending
on the state of the passed fileDescriptor object.

symtabAPI/h/Archive*
It is no longer an error to have duplicate symbols in the global symbol table.
Also, Symtab's store a reference to their parent Archive.

symtabAPI/h/Region.*
Added ability to add relocationEntry to Region given a reference to a
relocationEntry

symtabAPI/src/Symtab*
Symtab now stores a collection of Archive's that could be used for symbol
resolution during static linking. Also, it stores other Symtab's that are
referenced by a new undefined Symbol. Also, dtor now frees underlying
Object instance. Added getters/setters for these data structures.

symtabAPI/src/Object*
symtabAPI/src/Symtab*
Moved definition of relocationEntry to be completely inside Symtab* files.
Also, do not need a special type  of relocationEntry for ELF because
relocationEntries are now stored with a Region.

symtabAPI/src/Object-elf.C
Fixed a bug where a C++ .o had a zero length text section due to use
of GROUPs. Just choose a executable section with a non-zero size to
replace the .text section.

Also, in dtor, free'd resources used by libelf.

symtabAPI/src/Symtab-edit.C
Changed addSymbol to be different for static case

symtabAPI/src/emitElf-static.C
Lots of changes related to the above changes. Also, relocations
processed in generic way instead of in two separate functions.
22 files changed:
dyninstAPI/src/BPatch_binaryEdit.C
dyninstAPI/src/binaryEdit.C
dyninstAPI/src/binaryEdit.h
dyninstAPI/src/linux.C
dyninstAPI/src/linux.h
dyninstAPI/src/symtab.C
dyninstAPI/src/symtab.h
symtabAPI/h/Archive.h
symtabAPI/h/Region.h
symtabAPI/h/Symtab.h
symtabAPI/src/Archive-elf.C
symtabAPI/src/Archive-xcoff.C
symtabAPI/src/Archive.C
symtabAPI/src/Object-elf.C
symtabAPI/src/Object-elf.h
symtabAPI/src/Region.C
symtabAPI/src/Symbol.C
symtabAPI/src/Symtab-edit.C
symtabAPI/src/Symtab.C
symtabAPI/src/emitElf-static.C
symtabAPI/src/emitElf.C
symtabAPI/src/emitElf.h