Add reference to git.tobast.fr
This commit is contained in:
parent
31efc6b32a
commit
0c7350ff95
1 changed files with 32 additions and 12 deletions
|
@ -55,8 +55,8 @@ Under supervision of Francesco Zappa-Nardelli\\
|
||||||
\subsection*{Source code}\label{ssec:source_code}
|
\subsection*{Source code}\label{ssec:source_code}
|
||||||
|
|
||||||
The source code of all the implementations made during this internship is
|
The source code of all the implementations made during this internship is
|
||||||
available at \url{https://git.tobast.fr/m2-internship/} under free software
|
available at \url{https://git.tobast.fr/m2-internship/}. See
|
||||||
licenses, in various repositories.
|
Section~\ref{ssec:code_avail} for details.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
@ -679,6 +679,16 @@ The tentative approach that was chosen to try to get better unwinding speeds at
|
||||||
a reasonable space loss was to compile directly the \ehframe{} into native
|
a reasonable space loss was to compile directly the \ehframe{} into native
|
||||||
machine code on the x86\_64 platform.
|
machine code on the x86\_64 platform.
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
\subsection{Code availability}\label{ssec:code_avail}
|
||||||
|
|
||||||
|
All the code produced during this internship is available on the various
|
||||||
|
repositories from \url{https://git.tobast.fr/m2-internship/}. The repositories
|
||||||
|
contain \texttt{README} files describing them; a summary and global description
|
||||||
|
can be found in the \texttt{abstract} repository. This should be detailed
|
||||||
|
enough to run the project. The source code is entirely under free software
|
||||||
|
licenses.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{Compilation: \ehelfs}\label{ssec:ehelfs}
|
\subsection{Compilation: \ehelfs}\label{ssec:ehelfs}
|
||||||
|
|
||||||
|
@ -748,6 +758,16 @@ imagine, in a future environment production, packaging \ehelfs{} files
|
||||||
separately, so that people interested in heavy computation can have the choice
|
separately, so that people interested in heavy computation can have the choice
|
||||||
to install them.
|
to install them.
|
||||||
|
|
||||||
|
This, in particular, means that each ELF file has its unwinding data in a
|
||||||
|
separate \ehelf{} file --~just like with DWARF, where each ELF retains its own
|
||||||
|
DWARF data. Thus, an unwinder must first acquire a \emph{memory map}, a table
|
||||||
|
listing the various ELF files loaded and \emph{mapped} in memory, and on which
|
||||||
|
memory segment. This memory map is provided by the operating system --~for
|
||||||
|
instance, on Linux, it is available as a file in \texttt{/proc}. Once this map
|
||||||
|
is acquired, when unwinding from a given IP, the unwinder must identify the
|
||||||
|
memory segment from which it comes, deduce the source ELF file, and deduce the
|
||||||
|
corresponding \ehelf.
|
||||||
|
|
||||||
\medskip
|
\medskip
|
||||||
|
|
||||||
\lstinputlisting[language=C, caption={\ehelf{} for the previous example},
|
\lstinputlisting[language=C, caption={\ehelf{} for the previous example},
|
||||||
|
@ -922,14 +942,13 @@ Interfacing \ehelfs{} with \prog{perf} required, in a first place, to fork
|
||||||
turned out necessary to slightly modify \prog{libunwind}'s interface to add a
|
turned out necessary to slightly modify \prog{libunwind}'s interface to add a
|
||||||
parameter to an initialisation function, since \prog{libunwind} is made to be
|
parameter to an initialisation function, since \prog{libunwind} is made to be
|
||||||
agnostic of the system and process as much as possible, to be able to unwind in
|
agnostic of the system and process as much as possible, to be able to unwind in
|
||||||
any context. This very restricted information lacked a \emph{memory map}, a
|
any context. This very restricted information lacked a memory map (see
|
||||||
table indicating which shared object is mapped at which address in memory, in
|
Section~\ref{ssec:ehelfs}) in order to use \ehelfs. Apart from this, the
|
||||||
order to use \ehelfs. Apart from this, the modified version of \prog{libunwind}
|
modified version of \prog{libunwind} produced is entirely compatible with the
|
||||||
produced is entirely compatible with the vanilla version. This means that the
|
vanilla version. This means that the only modifications required to use
|
||||||
only modifications required to use \ehelfs{} within any project using
|
\ehelfs{} within any project using \prog{libunwind} should be changing one line
|
||||||
\prog{libunwind} should be changing one line of code to add one parameter to a
|
of code to add one parameter to a function call and linking against the
|
||||||
function call and linking against the modified version of \prog{libunwind}
|
modified version of \prog{libunwind} instead of the system version.
|
||||||
instead of the system version.
|
|
||||||
|
|
||||||
Once this was done, plugging it in \prog{perf} was the matter of a few lines of
|
Once this was done, plugging it in \prog{perf} was the matter of a few lines of
|
||||||
code only, left apart the benchmarking code. The major problem encountered was
|
code only, left apart the benchmarking code. The major problem encountered was
|
||||||
|
@ -1212,8 +1231,9 @@ some unsupported instruction at all.
|
||||||
\hfill \begin{minipage}{0.7\textwidth}
|
\hfill \begin{minipage}{0.7\textwidth}
|
||||||
\begin{flushright}
|
\begin{flushright}
|
||||||
\itshape{} \small{}
|
\itshape{} \small{}
|
||||||
Unless otherwise explicitly stated, any image, source code snippet or
|
Unless otherwise explicitly stated, any image from the present document
|
||||||
table from the present document can be reused freely by anyone.
|
is distributed under Creative Commons BY-SA license, and any code
|
||||||
|
snippet is distributed under 3-clause BSD license.
|
||||||
\end{flushright}
|
\end{flushright}
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue