diff --git a/slides.tex b/slides.tex index 910277d..af96226 100644 --- a/slides.tex +++ b/slides.tex @@ -17,6 +17,7 @@ \usepackage{multirow} \usepackage[many]{tcolorbox} \usepackage[absolute,overlay]{textpos} +\usetikzlibrary{arrows.meta} \usepackage{texlib/my_listings} \usepackage{texlib/specific} @@ -435,31 +436,52 @@ Segmentation fault. \subsection{Compilation ahead-of-time} -\begin{frame} - \begin{itemize} - \item Compiled to \alert{C code} - \item C code then \alert{compiled to native binary} (gcc) - \begin{itemize} - \item[$\leadsto$] gcc optimisations for free - \end{itemize} - \item Compiled as \alert{separate \texttt{.so} files}, called \ehelfs{} - \bigskip{} - \item Morally a \alert{monolithic switch} on IPs - \item Each case contains assembly that computes a \alert{row of the - table} - \end{itemize} -\end{frame} - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[shrink] - \lstinputlisting[language=C]{src/fib7/fib7.eh_elf_basic.c} + \vspace{0.5cm} + \begin{tikzpicture} + \begin{scope}[every node/.style={rectangle,thick,draw,scale=0.95}] + \node (dwarf) at (0, 0) { + \lstinputlisting[basicstyle=\tiny,numbers=none,language=]{src/dw_plt_abbr} + }; - \pause{} - \vspace{1em} - \begin{center} - The real code is optimised, but boils down to this. - \end{center} + \only<2->{ + \node (table) at (0.5\textwidth, -0.23\textheight) { + \tiny\tt + \begin{tabular}{ + >{\columncolor{YellowGreen}}l + >{\columncolor{Thistle}}l + l l + >{\columncolor{Apricot}}l} + LOC & CFA & rbx & rbp & ra \\ + 0084950 & rsp+8 & u & u & c-8 \\ + 0084952 & rsp+16 & u & u & c-8 \\ + 0084954 & rsp+24 & u & u & c-8 \\ + 0084956 & rsp+32 & u & u & c-8 \\ + \end{tabular} + }; + } + \only<3->{ + \node (csrc) at (0, -0.6\textheight) { + \lstinputlisting[basicstyle=\tiny,numbers=none,language=C]{src/fib7/fib7.eh_elf_basic.c} + }; + \node (ehelf) at (0.55\textwidth, -0.75\textheight) { + ELF file: + ``\ehelf{}'' + }; + } + \end{scope} + + \begin{scope}[>={Stealth[black]}, + every node/.style={fill=white,rectangle}, + every path/.style={draw=black,very thick}] + \only<2->{\path [->] (dwarf) -| node {runtime} (table);} + \only<3->{ + \path [->] (dwarf) edge node {ahead of time} (csrc); + \path [->] (csrc) -| node {gcc, AoT} (ehelf); + } + \end{scope} + \end{tikzpicture} \end{frame} diff --git a/src/dw_plt b/src/dw_plt new file mode 100644 index 0000000..2297091 --- /dev/null +++ b/src/dw_plt @@ -0,0 +1,7 @@ +30 24 34 FDE pc=004020..004040 + DW_CFA_def_cfa_offset: 16 + DW_CFA_advance_loc: 6 to 0000000000004026 + DW_CFA_def_cfa_offset: 24 + DW_CFA_advance_loc: 10 to 0000000000004030 + DW_CFA_def_cfa_expression (DW_OP_breg7 (rsp): 8; DW_OP_breg16 (rip): 0; DW_OP_lit15; DW_OP_and; DW_OP_lit11; DW_OP_ge; DW_OP_lit3; DW_OP_shl; DW_OP_plus) + [...] diff --git a/src/dw_plt_abbr b/src/dw_plt_abbr new file mode 100644 index 0000000..aee14a0 --- /dev/null +++ b/src/dw_plt_abbr @@ -0,0 +1,7 @@ +30 24 34 FDE pc=004020..004040 + DW_CFA_def_cfa_offset: 16 + DW_CFA_advance_loc: 6 to 0000000000004026 + DW_CFA_def_cfa_offset: 24 + DW_CFA_advance_loc: 10 to 0000000000004030 + DW_CFA_def_cfa_expression (DW_OP_breg7 (rsp): 8; + DW_OP_breg16 (rip): 0; ...)