Add space optimisation
This commit is contained in:
parent
be38c2feac
commit
7a4ad4454e
1 changed files with 23 additions and 2 deletions
|
@ -544,6 +544,8 @@ options turned on or off, and it doesn't require to alter the base system by
|
||||||
editing \eg{} \texttt{/usr/lib/libc-*.so}. Instead, when the \ehelf{} data is
|
editing \eg{} \texttt{/usr/lib/libc-*.so}. Instead, when the \ehelf{} data is
|
||||||
required, those files can simply be \lstc{dlopen}'d.
|
required, those files can simply be \lstc{dlopen}'d.
|
||||||
|
|
||||||
|
\todo{Talk about switch structure, considered and ignored registers, etc.}
|
||||||
|
|
||||||
\todo{More details here? Is it necessary or just too technical?}
|
\todo{More details here? Is it necessary or just too technical?}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
@ -602,7 +604,26 @@ the original program size.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{Space optimization}
|
\subsection{Space optimization}
|
||||||
\todo{}
|
|
||||||
|
A lot of small space optimizations, such as filtering out empty FDEs, merging
|
||||||
|
together the rows that are equivalent on all the registers kept, etc.\ were
|
||||||
|
made in order to shrink the \ehelfs.
|
||||||
|
|
||||||
|
\medskip
|
||||||
|
|
||||||
|
The major optimization that most reduced the output size was to use a more
|
||||||
|
flexible if/else if tree implementing a binary search on the program counter
|
||||||
|
relevant intervals, instead of a huge switch. In the process, we also
|
||||||
|
\emph{outline} a lot of code, that is, find out identical code blocks, move
|
||||||
|
them outside of the if/else tree, identify them by a label, and jump to them
|
||||||
|
using a \lstc{goto}, which de-duplicates a lot of code and contributes greatly
|
||||||
|
to the shrinking. In the process, we noticed that the vast majority of FDE rows
|
||||||
|
are actually taken among very few ``common'' FDE rows.
|
||||||
|
|
||||||
|
This makes this optimisation really efficient, as seen later in
|
||||||
|
Section~\ref{ssec:results_size}, but also makes it an interesting question ---
|
||||||
|
not investigated during this internship --- to find out whether standard DWARF
|
||||||
|
data could be efficiently compressed in this way.
|
||||||
|
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
@ -635,7 +656,7 @@ the original program size.
|
||||||
\todo{}
|
\todo{}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\subsection{Measured compactness}
|
\subsection{Measured compactness}\label{ssec:results_size}
|
||||||
\todo{}
|
\todo{}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
Loading…
Reference in a new issue