Added necessary support structure for the beginnings of the binary rewriter
authorDaniel McNulty <mcnulty@wasabi.cs.wisc.edu>
Thu, 1 Oct 2009 19:52:53 +0000 (14:52 -0500)
committerDaniel McNulty <mcnulty@cs.wisc.edu>
Thu, 11 Feb 2010 16:54:25 +0000 (10:54 -0600)
commitc9807b2ff8197d2e858062d1dc9e5686e23ff2d4
treed31326ef4d48e9dfcec6c6547c12dae4e060b8c1
parent985aa895c62fcac0140d6cda099f38c220d780c6
Added necessary support structure for the beginnings of the binary rewriter
for static executables.
=============================================================================

dyninstAPI/src/binaryEdit.C

While writing out a binary, calls made by instrumentation to libraries are
stored as dependent relocations. In the dynamic binary case, these eventually
get added to the .dynamic section. In the static case, the dependent
relocations needed to be added to a seperate map stored with the Symtab object.

dyninstAPI/src/linux.C

Added case for when the mutatee is a static executable, currently doesn't do
anything special. To be expanded to handle static libraries (.a's)

symtabAPI/h/Archive.h
symtabAPI/src/Archive*

Re-worked almost all of this code. Exposed interface remains unchanged. Added
method to search the global symbol table in an archive. Also, added internal
data structures to get an Archive member given its offset, a global symbol it
defines, or its name. The only linker format dependent code is the parsing of
members, the parsing the global symbol table and the constructor.

symtabAPI/h/Symtab.h

Added support for storing inter-module Symbol references. Added methods for
retrieving a member name and member offset if it is a member of an Archive.
Added constructor for relocationEntry so it would be easier to subclass.

symtabAPI/h/symutil.h

Added new ObjectType for object files. Added new SymtabError for when there is
a symbol collision when attempting to resolve symbols used by instrumentation
(indirectly or directly).

symtabAPI/src/Elf_X.h

Added error check for when opening a in-memory image fails.

symtabAPI/src/Object-elf.*

Added/removed code to allow a .o to parsed correctly

Added ability to parse ELF relocations in full. Defines class ELFRelocation
that is a derived class of relocationEntry. Adds some extra fields not
available in relocationEntry. Got rid of some magic constants

symtabAPI/src/Object.*

Added a SymtabError field so Symtab constructors can tell when there is an
error creating the underlying Object.

testsuite/src/symtab...

Added unit test for Archive class. Involved added some other classes for
integration into the test suite. Not set up to run with testsuite.
19 files changed:
dyninstAPI/src/binaryEdit.C
dyninstAPI/src/linux.C
symtabAPI/h/Archive.h
symtabAPI/h/Symtab.h
symtabAPI/h/symutil.h
symtabAPI/src/Archive-elf.C
symtabAPI/src/Archive-xcoff.C
symtabAPI/src/Archive.C
symtabAPI/src/Elf_X.h
symtabAPI/src/Object-elf.C
symtabAPI/src/Object-elf.h
symtabAPI/src/Object.h
symtabAPI/src/Symbol.C
symtabAPI/src/Symtab.C
symtabAPI/src/emitElf.C
symtabAPI/src/staticRewrite.C
testsuite/src/symtab/symtab_comp.C
testsuite/src/symtab/symtab_comp.h
testsuite/src/symtab/test_archive.C [new file with mode: 0644]