3.7 KiB
General considerations about this internship
The goal of this internship was to investigate and implement a compiler from DWARF unwinding data to native assembly code. The various repositories listed on the git summary page are the various components of the project, plus some off-topic (at various degrees) code I wrote during the internship.
Each repository includes a README.md
file with detailed information about
what it does, how it is supposed to be used, etc.
List of repositories
-
abstract
: this repository, provides a description/summary of the projects, and gives insights of how they interact with each other. -
report
: the internship report repository, including.tex
files, images, source codes, etc. -
libunwind-eh_elf
: a fork of libunwind working with eh_elfs, with only a slight interface change (an additional parameter to an initialisation function). -
dwarf-assembly
: the compiler itself, along with benchmarking, stats and various helper scripts. -
dwarf-semantics
: a subset ofreport
that describes the semantics of the compiled DWARF. Outdated. -
pkgbuilds
: containsPKGBUILD
files for various uncommon libraries on whichdwarf-assembly
depends. APKGBUILD
is a package building script made for Archlinux. -
perf-eh_elf
: a fork of perf working withlibunwind-eh_elf
. Sinceperf
is originally developed within the Linux kernel source tree, this repository was rerooted to only includetools/perf
. However, to be compiled,perf
needs the other files from the Linux source tree. See this repository'sREADME.md
for more details. -
dwarfinterpret
: a first project, providing features close tolibunwind
. This was made as an exercise with DWARF, to better understand how it works, at the beginning of the internship. -
frame-machine
: a fork of Stephen Kell'sframe-machine.c
. This was also made to better understand DWARF, and is a C++ template-based unwinder. -
libdwarfpp-tests
: some more training codes regarding DWARF. These codes uselibdwarfpp
, a library by Stephen Kell that acts as a C++ wrapper for libdwarf. -
eh_frame_check_setup
: a collection of scripts to automate and ease the use ofeh_frame_check
, a tool developed by Francesco Zappa Nardelli, my advisor, to check the consistency and correctness of the DWARF unwinding data of arbitrary binaries. Outdated, as the up-to-date version can be found in the above-mentioned Github repository.
Dependency graph
Steps to setup the DWARF to assembly compiler
-
If you use Archlinux, install the three
PKGBUILD
s frompkgbuilds
. If not, install the three librarieslibsrk31cxx
,libcxxfileno
andlibdwarfpp
, all three by Stephen Kell. This can be tricky. -
Clone the repository
dwarf-assembly
and runmake
. If the libraries from the previous step are installed and available in standard directories, this step should work without any particular problem. -
From now on, you can compile
ELF
s toeh_elf
. Follow the instructions fromdwarf-assembly
'sREADME.md
. -
To use those
eh_elf
s, clone and buildlibunwind-eh_elf
. Follow the instructions from theREADME.md
. -
To also use
perf
, clone and buildperf-eh_elf
and follow the instructions from theREADME.md
.