From 76d0a001d0acc3a414f3626c4364af048beac9a7 Mon Sep 17 00:00:00 2001
From: Jan Altenberg <jan@bender.lan>
Date: Thu, 29 Apr 2010 10:10:26 +0200
Subject: Added some contents to the Toolchain / Embedded-Devel chapter: - gcc
 options: Wall, Werror - gcc: useful options - ld-linux.so: Search order,
 environment variables

---
 .../embedded-devel/pres_embedded-devel_de.tex      | 127 +++++++++++++++++++--
 1 file changed, 115 insertions(+), 12 deletions(-)

(limited to 'application-devel/embedded-devel/pres_embedded-devel_de.tex')

diff --git a/application-devel/embedded-devel/pres_embedded-devel_de.tex b/application-devel/embedded-devel/pres_embedded-devel_de.tex
index 95357c5..889d49a 100644
--- a/application-devel/embedded-devel/pres_embedded-devel_de.tex
+++ b/application-devel/embedded-devel/pres_embedded-devel_de.tex
@@ -21,9 +21,8 @@
 \tableofcontents
 \end{frame}
 
-\section{Toolchain}
-\subsection{Der GNU Compiler}
-\subsubsection{Hello world}
+\section{Der GNU Compiler}
+\subsection{Hello world}
 \begin{frame}[fragile]
 \frametitle{Der GNU Compiler}
 \begin{lstlisting}[language=c]
@@ -42,7 +41,7 @@ gcc -o hello hello.c
 \end{lstlisting}
 \end{frame}
 
-\subsubsection{Wichtige Optionen}
+\subsection{Wichtige Optionen}
 \begin{frame}[fragile]
 \frametitle{Wichtige gcc Optionen}
 \begin{lstlisting}[language=bash]
@@ -72,8 +71,112 @@ gcc -I /mypath -o hello hello.c
 \end{lstlisting}
 \end{frame}
 
-\subsection{Die Binutils}
-\subsubsection{Übersicht}
+\begin{frame}[fragile]
+\frametitle{Wichtige gcc Optionen}
+\begin{lstlisting}[language=bash]
+# Alle Warnings ausgeben
+gcc -Wall -o hello hello.c
+
+# Warnings als Fehler behandeln
+gcc -Werror -o hello hello.c
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{GCC: Nützliches}
+\begin{lstlisting}[language=bash]
+# Vordefinierte / Interne Makros ausgeben
+$ gcc -E -dM - < /dev/null | cut -c 9- | sort
+[...]
+__SIZEOF_DOUBLE__ 8
+__SIZEOF_FLOAT__ 4
+__SIZEOF_INT__ 4
+__SIZEOF_LONG__ 8
+[...]
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{GCC: Nützliches}
+\begin{lstlisting}[language=bash]
+# Nur Pre-Prozessor ausfuehren
+$ gcc -C -E hello.c -o hello_pre
+
+# Woher kommt welches Symbol?
+$ gcc -Wl,-y,printf hello.c
+/lib/libc.so.6: definition of printf
+\end{lstlisting}
+Quelle und weitere nuetzliche Tipps: http://elinux.org/GCC\_Tips
+\end{frame}
+
+\section{Der Dynamic Loader}
+\begin{frame}
+\frametitle{Der Dynamic Loader: ld-linux.so}
+\begin{alertblock}{Was ist der Dynamic Loader?}
+Der Dynamic Loader: ld-linux.so lädt die dynamischen Bibliotheken, die von einem Programm
+benötigt werden. Er ist Bestandteil der C Bibliothek.
+\end{alertblock}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{Der Dynamic Loader: ld-linux.so}
+\begin{lstlisting}[language=bash]
+# Entweder
+./hello
+
+# oder
+/lib/ld-linux-x86-64.so.2 ./hello
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{Der Dynamic Loader: Umgebungsvariablen}
+\begin{tabular}{|l|p{5cm}|}
+\hline
+\textbf{Umgebungsvariable} & \textbf{Abkürzung}  \\
+\hline
+LD\_LIBRARY\_PATH & Suchpfad für Bibliotheken \\
+\hline
+LD\_PRELOAD & Liste von Bibliotheken, die vor allen anderen zu laden sind \\
+\hline
+LD\_DEBUG & Debug Ausgaben \\
+\hline
+\end{tabular}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{Der Dynamic Loader: Umgebungsvariablen}
+\begin{lstlisting}[basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
+$ LD_DEBUG=help ./hello
+Valid options for the LD_DEBUG environment
+variable are:
+
+  libs        display library search paths
+  reloc       display relocation processing
+  files       display progress for input file
+  symbols     display symbol table processing
+  bindings    display information about symbol binding
+  versions    display version dependencies
+  all         all previous options combined
+  statistics  display relocation statistics
+  unused      determined unused DSOs
+  help        display this help message and exit
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}
+\frametitle{Der Dynamic Loader: Suchreihenfolge}
+\begin{enumerate}
+\item DT\_RPATH dynamic section (ELF)
+\item LD\_LIBRARY\_PATH
+\item DT\_RUNPATH dynamic section (ELF)
+\item ld.so.cache
+\item /lib bzw. /usr/lib
+\end{enumerate}
+\end{frame}
+
+\section{Die Binutils}
+\subsection{Übersicht}
 \begin{frame}
 \frametitle{Die Binutils}
 Eine Sammlung von Programmen zum Erstellen / Bearbeiten von Binaries.
@@ -105,7 +208,7 @@ Die wichtigsten Tools sind:
 \end{itemize}
 \end{frame}
 
-\subsubsection{objdump}
+\subsection{objdump}
 \begin{frame}[containsverbatim]
 \frametitle{Untersuchen von Binaries mit Objdump}
 \begin{lstlisting}[language=bash]
@@ -154,7 +257,7 @@ jan@hopfropf:~$ objdump -x /bin/ls | grep NEEDED
 \end{lstlisting}
 \end{frame}
 
-\subsubsection{objcopy}
+\subsection{objcopy}
 \begin{frame}[fragile]
 \frametitle{Binaries bearbeiten mit objcopy}
 \begin{lstlisting}[language=bash]
@@ -165,7 +268,7 @@ objcopy -I srec -O elf64-x86-64 hello.srec hello
 \end{lstlisting}
 \end{frame}
 
-\subsubsection{addr2line}
+\subsection{addr2line}
 \begin{frame}[containsverbatim]
 \frametitle{Adressen zuordnen mit addr2line}
 \begin{lstlisting}[language=bash]
@@ -184,8 +287,8 @@ $ addr2line -e hello 40050c
 \end{lstlisting}
 \end{frame}
 
-\subsection{Buildprozess automatisieren (GNU make)}
-\subsubsection{Übersicht}
+\section{Buildprozess automatisieren}
+\subsection{Übersicht}
 \begin{frame}
 \frametitle{GNU make}
 \begin{alertblock}{Was ist GNU make?}
@@ -193,7 +296,7 @@ GNU make kontrolliert und automatisiert Buildprozesse.
 \end{alertblock}
 \end{frame}
 
-\subsubsection{Anwendungsbeispiele}
+\subsection{Anwendungsbeispiele}
 \begin{frame}[containsverbatim]
 \frametitle{Einfaches Beispiel}
 \begin{lstlisting}[language=make,showtabs=true,tabsize=4,tab=\rightarrowfill]
-- 
cgit v1.2.3

