diff --git a/slides.tex b/slides.tex index b99a4eb..2bbe736 100644 --- a/slides.tex +++ b/slides.tex @@ -56,6 +56,10 @@ morekeywords={gdb}, sensitive=false, } +\lstdefinelanguage{cfiasm}{ + morekeywords={cfi_startproc,cfi_def_cfa_offset,cfi_offset,cfi_def_cfa_register}, + sensitive=false, +} \setbeamertemplate{footline} { @@ -237,14 +241,58 @@ Segmentation fault. \end{lstlisting} \pause{} + \vfill \begin{itemize} \item[\textbf{$\longrightarrow$}] \textbf{\alert{constructed} on-demand by a \alert{Turing-complete stack machine}!} \end{itemize} +\end{frame} + +\begin{frame}{What does this imply?} + Your compiler actually generates codes for \alert{two machines}: your + processor and the DWARF VM\@. + + \vfill{} + \begin{columns} + \begin{column}{0.5\textwidth} + \begin{center} + \begin{tikzpicture} + \begin{scope}[every node/.style={rectangle,thick,draw,scale=0.95}] + \node (cmd) at (0, 2.5) { + \lstbash{\$ gcc -S foo.c} + }; + \node (asm) at (0, 0) { + \lstinputlisting[numbers=none, language=cfiasm]{src/main_cfi.s} + }; + \end{scope} + \begin{scope}[>={Stealth[black]}, + every path/.style={draw=black,very thick}] + \path [->] (cmd) -- (asm); + \end{scope} + \end{tikzpicture} + \medskip{} + + \textbf{The \lstc{.cfi_*} is inline DWARF!} + \end{center} + \end{column} + + \begin{column}{0.5\textwidth} + \begin{center} + \bf + $\implies$ if you write inline asm, you must write inline DWARF! + \end{center} + + In \prog{glibc}, \prog{lowlevellock.h}: + \alert{off by one error in unwinding data}. Result: + + \lstinputlisting[language=gdb,numbers=none]{src/lowlevellock_backtrace} + \end{column} + \end{columns} + \only<2->{ - \begin{textblock*}{0.90\textwidth}[0.5,0](0.5\paperwidth,0.17\paperheight)% + \begin{textblock*}{0.90\textwidth}[0.5,0](0.5\paperwidth,0.10\paperheight)% \begin{tcolorbox}[halign=center, colframe=red, colback=Lavender] \bf \huge Complex \,\& \,slow @@ -253,13 +301,15 @@ Segmentation fault. } \only<3->{ - \begin{textblock*}{0.90\textwidth}[0.5,0](0.5\paperwidth,0.35\paperheight)% + \begin{textblock*}{0.90\textwidth}[0.5,0](0.5\paperwidth,0.30\paperheight)% \begin{tcolorbox}[halign=center, colframe=red, colback=Lavender] \huge - \textbf{Pervasive:}\\ relied upon by debuggers, profilers, C++ - exceptions \\ - \medskip{} - \textbf{$\leadsto$ not only for debuggers!} + \textbf{Pervasive:}\\ relied upon by debuggers, profilers, + aaand\ldots{} + \onslide<4->{ + C++ exceptions. \\ + \medskip{} + \textbf{$\leadsto$ not only for debuggers!}} \end{tcolorbox} \end{textblock*} }