[1b34b87] | 1 | \chapter{Introduction} \label{introduction} |
---|
| 2 | Computer programming languages provide humans a means to instruct computers to |
---|
| 3 | perform a particular task. New programming languages are |
---|
| 4 | invented to simplify the task, or provide additional features, enhance |
---|
| 5 | performance, and improve developer productivity. |
---|
| 6 | |
---|
| 7 | A crucial companion tool to a programming language is a debugger. A debugger is a productivity tool to aid developers in testing |
---|
| 8 | and finding bugs in a program. By definition, a debugger executes |
---|
| 9 | any program written in one of a supported set of languages and allows developers |
---|
| 10 | to stop, monitor and examine state in the program for further investigation. |
---|
| 11 | |
---|
| 12 | Specifically, this report talks about how to add GNU Debugger (GDB) support for the |
---|
| 13 | concurrent programming-languages \uC and \CFA. |
---|
| 14 | Both languages provide an $M$:$N$ concurrency model, where $M$ user-level threads |
---|
| 15 | execute on $N$ kernel-level threads. |
---|
| 16 | Often debuggers either do not know about concurrency or only provide a simple |
---|
| 17 | understanding of concurrency provided by the operating system (kernel threads). |
---|
| 18 | For \CFA, new hooks are also added to allow GDB to understand that |
---|
| 19 | \CFA is a new source language that requires invocation of a demangler for |
---|
| 20 | variable and function names. |
---|
| 21 | |
---|
| 22 | Because \uC is a translator, all the code written in \uC is eventually |
---|
| 23 | compiled down to \CC code. This transformation gives \uC an advantage with |
---|
| 24 | GDB because GDB already understands \CC. However, since \uC introduced new objects |
---|
| 25 | and high-level execution constructs into the language, GDB does not understand |
---|
| 26 | these objects or the runtime environment. One objective of this |
---|
| 27 | project is to write new GDB extensions to understand concurrency among tasks, a new high-level execution construct that is discussed more in Chapter \ref{uC}. |
---|
| 28 | |
---|
| 29 | Additionally, if a programming language provides overloading functionality, |
---|
| 30 | which allows functions or variables in the same scope with the |
---|
| 31 | same identifier, then each of these entities must be assigned a unique name, otherwise, |
---|
| 32 | there are name collisions. |
---|
| 33 | |
---|
| 34 | However, uniquely numbering (naming) overloads is impossible with separate |
---|
| 35 | compilation, because the compiler does not have access to all translation |
---|
| 36 | units. Therefore, it is necessary to adopt a scheme related to the overloading |
---|
| 37 | mechanism for unique naming. For example, if a language uses the number and |
---|
| 38 | types of function parameters to disambiguate function names, than the number |
---|
| 39 | and parameter types are encoded into the name: |
---|
| 40 | \begin{lstlisting}[basicstyle=\normalfont\tt] |
---|
| 41 | void f( int i, double d, char c ); // f_3_i_d_c |
---|
| 42 | void f( int i, char c ); // f_2_i_c |
---|
| 43 | \end{lstlisting} |
---|
| 44 | Here, the mangled names for \lstinline@f@ contain the number of parameters and a code for |
---|
| 45 | each parameter type. For a complex type-system, the type codes become |
---|
| 46 | correspondingly complex, e.g., a generic structure. These names are now unique |
---|
| 47 | across all translation units. |
---|
| 48 | |
---|
| 49 | Unfortunately, a debugger only has access to the mangled names in a compiled |
---|
| 50 | translation units, versus the unmangled names in the program. Therefore, the |
---|
| 51 | debugger can only look up mangled names versus original program names, which |
---|
| 52 | makes debugging extremely difficult for programmers. To solve this program, the |
---|
| 53 | language must provide the debugger with a "demangled" so it can convert |
---|
| 54 | mangled names back to program names, and correspondingly retrieve the type of |
---|
| 55 | the name~\cite{Reference9}. |
---|
| 56 | |
---|
| 57 | \CFA, a new language being developed at the University of Waterloo, has |
---|
| 58 | overloading, so names resolved by the debugger are mangled names. Therefore, |
---|
| 59 | another objective of this project is to add a \CFA demangler to GDB. |
---|
| 60 | |
---|
| 61 | % Name mangling is a technique used in compilers to resolve this |
---|
| 62 | % problem. This technique provides a mechanism to encode additional information in the |
---|
| 63 | % name of a function, or a variable to supply more semantic information from |
---|
| 64 | % compiler to debugger \cite{Reference9}. \CFA, a new language being developed at the University of |
---|
| 65 | % Waterloo, has overloading, so names resolved from |
---|
| 66 | % the debugger are mangled names. As with early versions of \CC, it is not user-friendly to debug a program using |
---|
| 67 | % mangled names. Therefore, another objective of this project is to add a \CFA demangler in GDB. |
---|