Fix Guinness' reviews

This commit is contained in:
Théophile Bastian 2018-08-20 15:38:10 +02:00
parent df7252238e
commit 0dcfe40838

View file

@ -8,12 +8,13 @@
\subsection*{The general context} \subsection*{The general context}
The standard debugging data format, DWARF, contains tables that, for a given The standard debugging data format, DWARF (Debugging With Attributed Record
instruction pointer (IP), permit to understand how the assembly instruction Formats), contains tables permitting, for a given instruction pointer (IP), to
relates to the source code, where variables are currently allocated in memory understand how instructions from the assembly code relates to the original
or if they are stored in a register, what are their type and how to unwind the source code, where are variables currently allocated in memory or if they are
current stack frame. This information is generated when passing \eg{} the stored in a register, what are their type and how to unwind the current stack
switch \lstbash{-g} to \prog{gcc} or equivalents. frame. This information is generated when passing \eg{} the switch \lstbash{-g}
to \prog{gcc} or equivalents.
Even in stripped (non-debug) binaries, a small portion of DWARF data remains: Even in stripped (non-debug) binaries, a small portion of DWARF data remains:
the stack unwinding data. This information is necessary to unwind stack the stack unwinding data. This information is necessary to unwind stack
@ -28,7 +29,7 @@ Section~\ref{ssec:instr_cov}~\textendash, consisting in offsets from memory
addresses stored in registers (such as \reg{rbp} or \reg{rsp}). Yet, the addresses stored in registers (such as \reg{rbp} or \reg{rsp}). Yet, the
standard defines rules that take the form of a stack-machine expression that standard defines rules that take the form of a stack-machine expression that
can access virtually all the process's memory and perform Turing-complete can access virtually all the process's memory and perform Turing-complete
computation~\cite{oakley2011exploiting}. computations~\cite{oakley2011exploiting}.
\subsection*{The research problem} \subsection*{The research problem}
@ -83,8 +84,8 @@ few samples (around $10\,\mu s$ per frame) to avoid statistical errors. Having
enough samples for this purpose --~at least a few thousands~-- is not easy, enough samples for this purpose --~at least a few thousands~-- is not easy,
since one must avoid unwinding the same frame over and over again, which would since one must avoid unwinding the same frame over and over again, which would
only benchmark the caching mechanism. The other problem is to distribute only benchmark the caching mechanism. The other problem is to distribute
evenly the unwinding measures across the various IPs, including directly into evenly the unwinding measures across the various IPs, among which those
the loaded libraries (\eg{} the \prog{libc}). directly located into the loaded libraries (\eg{} the \prog{libc}).
The solution eventually chosen was to modify \prog{perf}, the standard The solution eventually chosen was to modify \prog{perf}, the standard
profiling program for Linux, in order to gather statistics and benchmarks of profiling program for Linux, in order to gather statistics and benchmarks of
its unwindings. Modifying \prog{perf} was an additional challenge that turned its unwindings. Modifying \prog{perf} was an additional challenge that turned
@ -131,7 +132,7 @@ the compiled DWARF version (see Section~\ref{ssec:timeperf}).
The implementation, however, is not yet production-ready: it only supports the The implementation, however, is not yet production-ready: it only supports the
x86\_64 architecture, and relies to some extent on the Linux operating system. x86\_64 architecture, and relies to some extent on the Linux operating system.
None of these pose a fundamental problem. Supporting other processor None of these pose a fundamental problem. Supporting other processor
architectures and ABIs are only a matter of engineering,. The operating system architectures and ABIs are only a matter of engineering. The operating system
dependency is only present in the libraries developed in order to interact with dependency is only present in the libraries developed in order to interact with
the compiled unwinding data, which can be developed for virtually any operating the compiled unwinding data, which can be developed for virtually any operating
system. system.