[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.
|
---|