to the their definition.
The commit shows all these.
In addition I noted an erroneous FIXME (the text was
already complete) and deleted it.
A couple places used the ascii double-quote symbol, those
are now changed to the latex-standard `` and '' symbols.
Modified the python tests very slightly for better coverage
so modified the expected results too.
&DW\_AT\_name \\
&DW\_AT\_sibling \\
-DW\_TAG\_array\_type
+\livelink{chap:DWTAGarraytype}{DW\_TAG\_array\_type}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_accessibility \\
&DW\_AT\_small \\
-DW\_TAG\_catch\_block
+\livelink{chap:DWTAGcatchblock}{DW\_TAG\_catch\_block}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_high\_pc \\
&DW\_AT\_segment \\
&DW\_AT\_sibling \\
-DW\_TAG\_class\_type
+\livelink{chap:DWTAGclasstype}{DW\_TAG\_class\_type}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_visibility \\
-DW\_TAG\_common\_block
+\livelink{chap:DWTAGcommonblock}{DW\_TAG\_common\_block}
&DECL \\
&DW\_AT\_declaration \\
&DW\_AT\_description \\
&DW\_AT\_sibling \\
&DW\_AT\_visibility \\
-DW\_TAG\_common\_inclusion
+\livelink{chap:DWTAGcommoninclusion}{DW\_TAG\_common\_inclusion}
&DECL \\
&DW\_AT\_common\_reference \\
&DW\_AT\_declaration \\
&DW\_AT\_visibility \\
-DW\_TAG\_compile\_unit
+\livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit}
&DW\_AT\_base\_types \\
&DW\_AT\_comp\_dir \\
&DW\_AT\_identifier\_case \\
&DW\_AT\_stmt\_list \\
&DW\_AT\_use\_UTF8 \\
-DW\_TAG\_condition
+\livelink{chap:DWTAGcondition}{DW\_TAG\_condition}
&DECL \\
&DW\_AT\_name \\
&DW\_AT\_sibling \\
-DW\_TAG\_const\_type
+\livelink{chap:DWTAGconsttype}{DW\_TAG\_const\_type}
&DW\_AT\_allocated \\
&DW\_AT\_associated \\
&DW\_AT\_data\_location \\
&DW\_AT\_sibling \\
&DW\_AT\_type \\
-DW\_TAG\_constant
+\livelink{chap:DWTAGconstant}{DW\_TAG\_constant}
&DECL \\
&DW\_AT\_accessibility \\
&DW\_AT\_const\_value \\
&DW\_AT\_type \\
&DW\_AT\_visibility \\
-DW\_TAG\_dwarf\_procedure
+\livelink{chap:DWTAGdwarfprocedure}{DW\_TAG\_dwarf\_procedure}
&DW\_AT\_location \\
-DW\_TAG\_entry\_point
+\livelink{chap:DWTAGentrypoint}{DW\_TAG\_entry\_point}
&DECL \\
&DW\_AT\_address\_class \\
&DW\_AT\_description \\
&DW\_AT\_type \\
-DW\_TAG\_enumeration\_type
+\livelink{chap:DWTAGenumerationtype}{DW\_TAG\_enumeration\_type}
DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_accessibility \\
&DW\_AT\_type \\
&DW\_AT\_visibility \\
-DW\_TAG\_enumerator
+\livelink{chap:DWTAGenumerator}{DW\_TAG\_enumerator}
&DECL \\
&DW\_AT\_const\_value \\
&DW\_AT\_description \\
&DW\_AT\_name \\
&DW\_AT\_sibling \\
-DW\_TAG\_file\_type
+\livelink{chap:DWTAGfiletype}{DW\_TAG\_file\_type}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_allocated \\
&DW\_AT\_type \\
&DW\_AT\_visibility \\
-DW\_TAG\_formal\_parameter
+\livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_artificial \\
&DW\_AT\_type \\
&DW\_AT\_variable\_parameter \\
-DW\_TAG\_friend
+\livelink{chap:DWTAGfriend}{DW\_TAG\_friend}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_friend \\
&DW\_AT\_sibling \\
-DW\_TAG\_imported\_declaration
+\livelink{chap:DWTAGimporteddeclaration}{DW\_TAG\_imported\_declaration}
&DECL \\
&DW\_AT\_accessibility \\
&DW\_AT\_description \\
&DW\_AT\_sibling \\
&DW\_AT\_start\_scope \\
-DW\_TAG\_imported\_module
+\livelink{chap:DWTAGimportedmodule}{DW\_TAG\_imported\_module}
&DECL \\
&DW\_AT\_import \\
&DW\_AT\_sibling \\
&DW\_AT\_start\_scope \\
-DW\_TAG\_imported\_unit
+\livelink{chap:DWTAGimportedunit}{DW\_TAG\_imported\_unit}
&DW\_AT\_import \\
-DW\_TAG\_inheritance
+\livelink{chap:DWTAGinheritance}{DW\_TAG\_inheritance}
&DECL \\
&DW\_AT\_accessibility \\
&DW\_AT\_data\_member\_location \\
&DW\_AT\_type \\
&DW\_AT\_virtuality \\
-DW\_TAG\_inlined\_subroutine
+\livelink{chap:DWTAGinlinedsubroutine}{DW\_TAG\_inlined\_subroutine}
&DW\_AT\_abstract\_origin \\
&DW\_AT\_call\_column \\
&DW\_AT\_call\_file \\
&DW\_AT\_start\_scope \\
&DW\_AT\_trampoline \\
-DW\_TAG\_interface\_type
+\livelink{chap:DWTAGinterfacetype}{DW\_TAG\_interface\_type}
&DECL \\
&DW\_AT\_accessibility \\
&DW\_AT\_description \\
&DW\_AT\_sibling \\
&DW\_AT\_start\_scope \\
-DW\_TAG\_label
+\livelink{chap:DWTAGlabel}{DW\_TAG\_label}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_description \\
&DW\_AT\_start\_scope \\
&DW\_AT\_sibling \\
-DW\_TAG\_lexical\_block
+\livelink{chap:DWTAGlexicalblock}{DW\_TAG\_lexical\_block}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_description \\
&DW\_AT\_segment \\
&DW\_AT\_sibling \\
-DW\_TAG\_member
+\livelink{chap:DWTAGmember}{DW\_TAG\_member}
&DECL \\
&DW\_AT\_accessibility \\
&DW\_AT\_bit\_offset \\
&DW\_AT\_visibility \\
-DW\_TAG\_module
+\livelink{chap:DWTAGmodule}{DW\_TAG\_module}
&DECL \\
&DW\_AT\_accessibility \\
&DW\_AT\_declaration \\
&DW\_AT\_specification \\
&DW\_AT\_visibility \\
-DW\_TAG\_namelist
+\livelink{chap:DWTAGnamelist}{DW\_TAG\_namelist}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_accessibility \\
&DW\_AT\_sibling \\
&DW\_AT\_visibility \\
-DW\_TAG\_namelist\_item
+\livelink{chap:DWTAGnamelistitem}{DW\_TAG\_namelist\_item}
&DECL \\
&DW\_AT\_namelist\_item \\
&DW\_AT\_sibling \\
-DW\_TAG\_namespace
+\livelink{chap:DWTAGnamespace}{DW\_TAG\_namespace}
&DECL \\
&DW\_AT\_description \\
&DW\_AT\_extension \\
&DW\_AT\_sibling \\
&DW\_AT\_start\_scope \\
-DW\_TAG\_packed\_type
+\livelink{chap:DWTAGpackedtype}{DW\_TAG\_packed\_type}
&DW\_AT\_allocated \\
&DW\_AT\_associated \\
&DW\_AT\_data\_location \\
&DW\_AT\_sibling \\
&DW\_AT\_type \\
-DW\_TAG\_partial\_unit
+\livelink{chap:DWTAGpartialunit}{DW\_TAG\_partial\_unit}
&DW\_AT\_base\_types \\
&DW\_AT\_comp\_dir \\
&DW\_AT\_description \\
&DW\_AT\_use\_UTF8 \\
-DW\_TAG\_pointer\_type \\
+\livelink{chap:DWTAGpointertype}{DW\_TAG\_pointer\_type} \\
&DW\_AT\_address\_class \\
&DW\_AT\_allocated \\
&DW\_AT\_associated \\
&DW\_AT\_sibling \\
&DW\_AT\_type \\
-DW\_TAG\_ptr\_to\_member\_type
+\livelink{chap:DWTAGptrtomembertype}{DW\_TAG\_ptr\_to\_member\_type}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_address\_class \\
&DW\_AT\_visibility \\
-DW\_TAG\_reference\_type
+\livelink{chap:DWTAGreferencetype}{DW\_TAG\_reference\_type}
&DW\_AT\_address\_class \\
&DW\_AT\_allocated \\
&DW\_AT\_associated \\
&DW\_AT\_sibling \\
&DW\_AT\_type \\
-DW\_TAG\_restrict\_type
+\livelink{chap:DWTAGrestricttype}{DW\_TAG\_restrict\_type}
&DW\_AT\_allocated \\
&DW\_AT\_associated \\
&DW\_AT\_data\_location \\
&DW\_AT\_sibling \\
&DW\_AT\_type \\
-DW\_TAG\_rvalue\_reference\_type
+\livelink{chap:DWTAGrvaluereferencetype}{DW\_TAG\_rvalue\_reference\_type}
&DECL \\
&DW\_AT\_address\_class \\
&DW\_AT\_allocated \\
&DW\_AT\_type \\
-DW\_TAG\_set\_type
+\livelink{chap:DWTAGsettype}{DW\_TAG\_set\_type}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_accessibility \\
&DW\_AT\_type \\
&DW\_AT\_visibility \\
-DW\_TAG\_shared\_type
+\livelink{chap:DWTAGsharedtype}{DW\_TAG\_shared\_type}
&DW\_AT\_allocated \\
&DW\_AT\_associated \\
&DW\_AT\_count \\
&DW\_AT\_type \\
-DW\_TAG\_string\_type
+\livelink{chap:DWTAGstringtype}{DW\_TAG\_string\_type}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_accessibility \\
&DW\_AT\_string\_length \\
&DW\_AT\_visibility \\
-DW\_TAG\_structure\_type
+\livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_accessibility \\
&DW\_AT\_start\_scope \\
&DW\_AT\_visibility \\
-DW\_TAG\_subprogram
+\livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_accessibility \\
&DW\_AT\_virtuality \\
&DW\_AT\_vtable\_elem\_location \\
-DW\_TAG\_subrange\_type
+\livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_accessibility \\
&DW\_AT\_upper\_bound \\
&DW\_AT\_visibility \\
-DW\_TAG\_subroutine\_type
+\livelink{chap:DWTAGsubroutinetype}{DW\_TAG\_subroutine\_type}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_accessibility \\
&DW\_AT\_type \\
&DW\_AT\_visibility \\
-DW\_TAG\_template\_alias
+\livelink{chap:DWTAGtemplatealias}{DW\_TAG\_template\_alias}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_accessibility \\
&DW\_AT\_type \\
&DW\_AT\_visibility \\
-DW\_TAG\_template\_type\_parameter
+\livelink{chap:DWTAGtemplatetypeparameter}{DW\_TAG\_template\_type\_parameter}
&DECL \\
&DW\_AT\_description \\
&DW\_AT\_name \\
&DW\_AT\_sibling \\
&DW\_AT\_type \\
-DW\_TAG\_template\_value\_parameter
+\livelink{chap:DWTAGtemplatevalueparameter}{DW\_TAG\_template\_value\_parameter}
&DECL \\
&DW\_AT\_const\_value \\
&DW\_AT\_description \\
&DW\_AT\_type \\
-DW\_TAG\_thrown\_type
+\livelink{chap:DWTAGthrowntype}{DW\_TAG\_thrown\_type}
&DECL \\
&DW\_AT\_allocated \\
&DW\_AT\_associated \\
&DW\_AT\_sibling \\
&DW\_AT\_type \\
-DW\_TAG\_try\_block
+\livelink{chap:DWTAGtryblock}{DW\_TAG\_try\_block}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_high\_pc \\
&DW\_AT\_segment \\
&DW\_AT\_sibling \\
-DW\_TAG\_typedef
+\livelink{chap:DWTAGtypedef}{DW\_TAG\_typedef}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_accessibility \\
&DW\_AT\_type \\
&DW\_AT\_visibility \\
-DW\_TAG\_type\_unit
+\livelink{chap:DWTAGtypeunit}{DW\_TAG\_type\_unit}
&DW\_AT\_language \\
-DW\_TAG\_union\_type
+\livelink{chap:DWTAGuniontype}{DW\_TAG\_union\_type}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_accessibility \\
&DW\_AT\_visibility \\
-DW\_TAG\_unspecified\_parameters
+\livelink{chap:DWTAGunspecifiedparameters}{DW\_TAG\_unspecified\_parameters}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_artificial \\
&DW\_AT\_sibling \\
-DW\_TAG\_unspecified\_type
+\livelink{chap:DWTAGunspecifiedtype}{DW\_TAG\_unspecified\_type}
&DECL \\
&DW\_AT\_description \\
&DW\_AT\_name \\
-DW\_TAG\_variable
+\livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_accessibility \\
&DW\_AT\_type \\
&DW\_AT\_visibility \\
-DW\_TAG\_variant
+\livelink{chap:DWTAGvariant}{DW\_TAG\_variant}
&DECL \\
&DW\_AT\_accessibility \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_discr\_value \\
&DW\_AT\_sibling \\
-DW\_TAG\_variant\_part
+\livelink{chap:DWTAGvariantpart}{DW\_TAG\_variant\_part}
&DECL \\
&DW\_AT\_abstract\_origin \\
&DW\_AT\_accessibility \\
&DW\_AT\_sibling \\
&DW\_AT\_type \\
-DW\_TAG\_volatile\_type
+\livelink{chap:DWTAGvolatiletype}{DW\_TAG\_volatile\_type}
&DW\_AT\_allocated \\
&DW\_AT\_associated \\
&DW\_AT\_data\_location \\
&DW\_AT\_sibling \\
&DW\_AT\_type \\
-DW\_TAG\_with\_stmt
+\livelink{chap:DWTAGwithstmt}{DW\_TAG\_with\_stmt}
&DW\_AT\_accessibility \\
&DW\_AT\_address\_class \\
&DW\_AT\_declaration \\
DW\_FORM\_ref\_addr is not necessary
for a local label.)}
-\textbf{Use of DW\_TAG\_compile\_unit versus
-DW\_TAG\_partial\_unit}
+\textbf{Use of \livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit} versus
+\livelink{chap:DWTAGpartialunit}{DW\_TAG\_partial\_unit}}
A section group compilation unit that uses
-DW\_TAG\_compile\_unit
+\livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit}
is like any other compilation unit, in that its contents
are evaluated by consumers as though it were an ordinary
compilation unit.
An \#include directive appearing outside any other
declarations is a good candidate to be represented using
-DW\_TAG\_compile\_unit.
+\livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit}.
However, an \#include appearing inside
a C++ namespace declaration or a function, for example, is
not a good candidate because the entities included are not
This also applies to Fortran INCLUDE lines when declarations
are included into a procedure or module context.
-Consequently a compiler must use DW\_TAG\_partial\_unit (instead
-of DW\_TAG\_compile\_unit) in a section group whenever the section
+Consequently a compiler must use \livelink{chap:DWTAGpartialunit}{DW\_TAG\_partial\_unit} (instead
+of \livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit}) in a section group whenever the section
group contents are not necessarily globally visible. This
directs consumers to ignore that compilation unit when scanning
top level declarations and definitions.
-The DW\_TAG\_partial\_unit compilation unit will be referenced
+The \livelink{chap:DWTAGpartialunit}{DW\_TAG\_partial\_unit} compilation unit will be referenced
from elsewhere and the referencing locations give the
appropriate context for interpreting the partial compilation
unit.
-A DW\_TAG\_partial\_unit entry may have, as appropriate, any of
-the attributes assigned to a DW\_TAG\_compile\_unit.
+A \livelink{chap:DWTAGpartialunit}{DW\_TAG\_partial\_unit} entry may have, as appropriate, any of
+the attributes assigned to a \livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit}.
-\textbf{Use of DW\_TAG\_imported\_unit}
+\textbf{Use of \livelink{chap:DWTAGimportedunit}{DW\_TAG\_imported\_unit}}
-A DW\_TAG\_imported\_unit debugging information entry has an
-DW\_AT\_import attribute referencing a DW\_TAG\_compile\_unit or
-DW\_TAG\_partial\_unit debugging information entry.
+A \livelink{chap:DWTAGimportedunit}{DW\_TAG\_imported\_unit} debugging information entry has an
+DW\_AT\_import attribute referencing a \livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit} or
+\livelink{chap:DWTAGpartialunit}{DW\_TAG\_partial\_unit} debugging information entry.
-A DW\_TAG\_imported\_unit debugging information entry refers
+A \livelink{chap:DWTAGimportedunit}{DW\_TAG\_imported\_unit} debugging information entry refers
to a
-DW\_TAG\_compile\_unit or
-DW\_TAG\_partial\_unit debugging
+\livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit} or
+\livelink{chap:DWTAGpartialunit}{DW\_TAG\_partial\_unit} debugging
information entry to specify that the
-DW\_TAG\_compile\_unit or
-DW\_TAG\_partial\_unit contents logically appear at the point
+\livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit} or
+\livelink{chap:DWTAGpartialunit}{DW\_TAG\_partial\_unit} contents logically appear at the point
of the
-DW\_TAG\_imported\_unit entry.
+\livelink{chap:DWTAGimportedunit}{DW\_TAG\_imported\_unit} entry.
\textbf{Use of DW\_FORM\_ref\_addr}
my.compiler.company.cpp.wa.h.123456
== section .debug\_info
DW.cpp.wa.h.123456.1: ! linker global symbol
- DW\_TAG\_compile\_unit
+ \livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit}
DW\_AT\_language(DW\_LANG\_C\_plus\_plus)
... ! other unit attributes
DW.cpp.wa.h.123456.2: ! linker global symbol
- DW\_TAG\_base\_type
+ \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}
DW\_AT\_name("int")
DW.cpp.wa.h.123456.3: ! linker global symbol
- DW\_TAG\_structure\_type
+ \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}
DW\_AT\_NAME("A")
DW.cpp.wa.h.123456.4: ! linker global symbol
- DW\_TAG\_member
+ \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name("i")
DW\_AT\_type(DW\_FORM\_refn to DW.cpp.wa.h.123456.2)
! (This is a local reference, so the more
== section .text
[generated code for function f]
== section .debug\_info
- DW\_TAG\_compile\_unit
+ \livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit}
.L1: ! local (non-linker) symbol
- DW\_TAG\_reference\_type
+ \livelink{chap:DWTAGreferencetype}{DW\_TAG\_reference\_type}
DW\_AT\_type(reference to DW.cpp.wa.h.123456.3)
- DW\_TAG\_subprogram
+ \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_name("f")
DW\_AT\_type(reference to DW.cpp.wa.h.123456.2)
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("a")
DW\_AT\_type(reference to .L1)
...
\end{alltt}
-This example uses DW\_TAG\_compile\_unit for the section group,
+This example uses \livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit} for the section group,
implying that the contents of the compilation unit are
globally visible (in accordance with C++ language rules).
-DW\_TAG\_partial\_unit is not needed for the same reason.
+\livelink{chap:DWTAGpartialunit}{DW\_TAG\_partial\_unit} is not needed for the same reason.
\subsubsection{Fortran Example}
== section .debug\_info
DW.myf90.CommonStuff.fh.654321.1: ! linker global symbol
- DW\_TAG\_partial\_unit
+ \livelink{chap:DWTAGpartialunit}{DW\_TAG\_partial\_unit}
! ...compilation unit attributes, including...
DW\_AT\_language(DW\_LANG\_Fortran90)
DW\_AT\_identifier\_case(DW\_ID\_case\_insensitive)
DW.myf90.CommonStuff.fh.654321.2: ! linker global symbol
-3\$: DW\_TAG\_array\_type
+3\$: \livelink{chap:DWTAGarraytype}{DW\_TAG\_array\_type}
! unnamed
DW\_AT\_type(reference to DW.f90.F90\$main.f.2)
! base type INTEGER
- DW\_TAG\_subrange\_type
+ \livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type}
DW\_AT\_type(reference to DW.f90.F90\$main.f.2)
! base type INTEGER)
DW\_AT\_lower\_bound(constant 1)
DW\_AT\_upper\_bound(constant 100)
DW.myf90.CommonStuff.fh.654321.3: ! linker global symbol
- DW\_TAG\_common\_block
+ \livelink{chap:DWTAGcommonblock}{DW\_TAG\_common\_block}
DW\_AT\_name("Common1")
DW\_AT\_location(Address of common block Common1)
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("C")
DW\_AT\_type(reference to 3\$)
DW\_AT\_location(address of C)
DW.myf90.CommonStuff.fh.654321.4: ! linker global symbol
- DW\_TAG\_constant
+ \livelink{chap:DWTAGconstant}{DW\_TAG\_constant}
DW\_AT\_name("SEVEN")
DW\_AT\_type(reference to DW.f90.F90\$main.f.2)
! base type INTEGER
[code for function Foo]
== section .debug\_info
- DW\_TAG\_compile\_unit
- DW\_TAG\_subprogram
+ \livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit}
+ \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_name("Foo")
DW\_AT\_type(reference to DW.f90.F90\$main.f.2)
! base type INTEGER
- DW\_TAG\_imported\_unit
+ \livelink{chap:DWTAGimportedunit}{DW\_TAG\_imported\_unit}
DW\_AT\_import(reference to
DW.myf90.CommonStuff.fh.654321.1)
- DW\_TAG\_common\_inclusion ! For Common1
+ \livelink{chap:DWTAGcommoninclusion}{DW\_TAG\_common\_inclusion} ! For Common1
DW\_AT\_common\_reference(reference to
DW.myf90.CommonStuff.fh.654321.3)
- DW\_TAG\_variable ! For function result
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable} ! For function result
DW\_AT\_name("Foo")
DW\_AT\_type(reference to DW.f90.F90\$main.f.2)
! base type INTEGER
\begin{alltt}
== section .debug\_info
- DW\_TAG\_compile\_unit
+ \livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit}
DW\_AT\_name(F90\$main)
- DW\_TAG\_base\_type
+ \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}
DW\_AT\_name("INTEGER")
DW\_AT\_encoding(DW\_ATE\_signed)
DW\_AT\_byte\_size(...)
- DW\_TAG\_base\_type
+ \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}
...
... ! other base types
- DW\_TAG\_subprogram
+ \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_name("F90\$main")
- DW\_TAG\_imported\_unit
+ \livelink{chap:DWTAGimportedunit}{DW\_TAG\_imported\_unit}
DW\_AT\_import(reference to
DW.myf90.CommonStuff.fh.654321.1)
- DW\_TAG\_common\_inclusion ! for Common1
+ \livelink{chap:DWTAGcommoninclusion}{DW\_TAG\_common\_inclusion} ! for Common1
DW\_AT\_common\_reference(reference to
DW.myf90.CommonStuff.fh.654321.3)
...
\end{alltt}
-This example uses DW\_TAG\_partial\_unit for the section group
+This example uses \livelink{chap:DWTAGpartialunit}{DW\_TAG\_partial\_unit} for the section group
because the included declarations are not independently
visible as global entities.
The C++ example in this Section might appear to be equally
valid as a C example. However, it is prudent to include
-a DW\_TAG\_imported\_unit in the primary unit (see Figure 84)
+a \livelink{chap:DWTAGimportedunit}{DW\_TAG\_imported\_unit} in the primary unit (see Figure 84)
with an DW\_AT\_import attribute that refers to the proper unit
in the section group.
\label{app:typesignaturecomputation1dwarfrepresentation}
\begin{alltt}
- DW\_TAG\_type\_unit
+ \livelink{chap:DWTAGtypeunit}{DW\_TAG\_type\_unit}
DW\_AT\_language: DW\_LANG\_C\_plus\_plus (4)
- DW\_TAG\_namespace
+ \livelink{chap:DWTAGnamespace}{DW\_TAG\_namespace}
DW\_AT\_name: "N"
L1:
- DW\_TAG\_structure\_type
+ \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}
DW\_AT\_name: "C"
DW\_AT\_byte\_size: 8
DW\_AT\_decl\_file: 1
DW\_AT\_decl\_line: 5
- DW\_TAG\_member
+ \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name: "x"
DW\_AT\_decl\_file: 1
DW\_AT\_decl\_line: 6
DW\_AT\_type: reference to L2
DW\_AT\_data\_member\_location: 0
- DW\_TAG\_member
+ \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name: "y"
DW\_AT\_decl\_file: 1
DW\_AT\_decl\_line: 7
DW\_AT\_type: reference to L2
DW\_AT\_data\_member\_location: 4
L2:
- DW\_TAG\_base\_type
+ \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}
DW\_AT\_byte\_size: 4
DW\_AT\_encoding: DW\_ATE\_signed
DW\_AT\_name: "int"
\label{app:typesignaturecomputation1flattenedbytestream}
\begin{alltt}
-// Step 2: 'C' DW\_TAG\_namespace "N"
+// Step 2: 'C' \livelink{chap:DWTAGnamespace}{DW\_TAG\_namespace} "N"
0x43 0x39 0x4e 0x00
-// Step 3: 'D' DW\_TAG\_structure\_type
+// Step 3: 'D' \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}
0x44 0x13
// Step 4: 'A' DW\_AT\_name DW\_FORM\_string "C"
0x41 0x03 0x08 0x43 0x00
// Step 4: 'A' DW\_AT\_byte\_size DW\_FORM\_sdata 8
0x41 0x0b 0x0d 0x08
// Step 7: First child ("x")
- // Step 3: 'D' DW\_TAG\_member
+ // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\_TAG\_member}
0x44 0x0d
// Step 4: 'A' DW\_AT\_name DW\_FORM\_string "x"
0x41 0x03 0x08 0x78 0x00
0x41 0x38 0x0d 0x00
// Step 6: 'T' DW\_AT\_type (type \#2)
0x54 0x49
- // Step 3: 'D' DW\_TAG\_base\_type
+ // Step 3: 'D' \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}
0x44 0x24
// Step 4: 'A' DW\_AT\_name DW\_FORM\_string "int"
0x41 0x03 0x08 0x69 0x6e 0x74 0x00
0x41 0x0b 0x0d 0x04
// Step 4: 'A' DW\_AT\_encoding DW\_FORM\_sdata DW\_ATE\_signed
0x41 0x3e 0x0d 0x05
- // Step 7: End of DW\_TAG\_base\_type "int"
+ // Step 7: End of \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type} "int"
0x00
- // Step 7: End of DW\_TAG\_member "x"
+ // Step 7: End of \livelink{chap:DWTAGmember}{DW\_TAG\_member} "x"
0x00
// Step 7: Second child ("y")
- // Step 3: 'D' DW\_TAG\_member
+ // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\_TAG\_member}
0x44 0x0d
// Step 4: 'A' DW\_AT\_name DW\_FORM\_string "y"
0x41 0x03 0x08 0x78 0x00
0x41 0x38 0x0d 0x04
// Step 6: 'R' DW\_AT\_type (type \#2)
0x52 0x49 0x02
- // Step 7: End of DW\_TAG\_member "y"
+ // Step 7: End of \livelink{chap:DWTAGmember}{DW\_TAG\_member} "y"
0x00
-// Step 7: End of DW\_TAG\_structure\_type "C"
+// Step 7: End of \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type} "C"
0x00
\end{alltt}
\label{app:typesignaturecomputation2dwarfrepresentation}
\begin{alltt}
- DW\_TAG\_type\_unit
+ \livelink{chap:DWTAGtypeunit}{DW\_TAG\_type\_unit}
DW\_AT\_language: DW\_LANG\_C\_plus\_plus (4)
- DW\_TAG\_namespace
+ \livelink{chap:DWTAGnamespace}{DW\_TAG\_namespace}
DW\_AT\_name: "N"
L1:
- DW\_TAG\_class\_type
+ \livelink{chap:DWTAGclasstype}{DW\_TAG\_class\_type}
DW\_AT\_name: "A"
DW\_AT\_byte\_size: 20
DW\_AT\_decl\_file: 1
DW\_AT\_decl\_line: 10
- DW\_TAG\_member
+ \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name: "v\_"
DW\_AT\_decl\_file: 1
DW\_AT\_decl\_line: 15
DW\_AT\_type: reference to L2
DW\_AT\_data\_member\_location: 0
DW\_AT\_accessibility: DW\_ACCESS\_private
- DW\_TAG\_member
+ \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name: "next"
DW\_AT\_decl\_file: 1
DW\_AT\_decl\_line: 16
DW\_AT\_type: reference to L3
DW\_AT\_data\_member\_location: 4
DW\_AT\_accessibility: DW\_ACCESS\_private
- DW\_TAG\_member
+ \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name: "bp"
DW\_AT\_decl\_file: 1
DW\_AT\_decl\_line: 17
DW\_AT\_type: reference to L4
DW\_AT\_data\_member\_location: 8
DW\_AT\_accessibility: DW\_ACCESS\_private
- DW\_TAG\_member
+ \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name: "c"
DW\_AT\_decl\_file: 1
DW\_AT\_decl\_line: 18
DW\_AT\_type: 0xd28081e8 dcf5070a (signature for struct C)
DW\_AT\_data\_member\_location: 12
DW\_AT\_accessibility: DW\_ACCESS\_private
- DW\_TAG\_subprogram
+ \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_external: 1
DW\_AT\_name: "A"
DW\_AT\_decl\_file: 1
DW\_AT\_decl\_line: 12
DW\_AT\_declaration: 1
- DW\_TAG\_formal\_parameter
+ \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_type: reference to L3
DW\_AT\_artificial: 1
- DW\_TAG\_formal\_parameter
+ \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_type: reference to L2
- DW\_TAG\_subprogram
+ \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_external: 1
DW\_AT\_name: "v"
DW\_AT\_decl\_file: 1
DW\_AT\_decl\_line: 13
DW\_AT\_type: reference to L2
DW\_AT\_declaration: 1
- DW\_TAG\_formal\_parameter
+ \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_type: reference to L3
DW\_AT\_artificial: 1
L2:
- DW\_TAG\_base\_type
+ \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}
DW\_AT\_byte\_size: 4
DW\_AT\_encoding: DW\_ATE\_signed
DW\_AT\_name: "int"
L3:
- DW\_TAG\_pointer\_type
+ \livelink{chap:DWTAGpointertype}{DW\_TAG\_pointer\_type}
DW\_AT\_type: reference to L1
L4:
- DW\_TAG\_pointer\_type
+ \livelink{chap:DWTAGpointertype}{DW\_TAG\_pointer\_type}
DW\_AT\_type: reference to L5
- DW\_TAG\_namespace
+ \livelink{chap:DWTAGnamespace}{DW\_TAG\_namespace}
DW\_AT\_name: "N"
L5:
- DW\_TAG\_structure\_type
+ \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}
DW\_AT\_name: "B"
DW\_AT\_declaration: 1
\end{alltt}
\label{app:typesignatureexample2flattenedbytestream}
\begin{alltt}
-// Step 2: 'C' DW\_TAG\_namespace "N"
+// Step 2: 'C' \livelink{chap:DWTAGnamespace}{DW\_TAG\_namespace} "N"
0x43 0x39 0x4e 0x00
-// Step 3: 'D' DW\_TAG\_class\_type
+// Step 3: 'D' \livelink{chap:DWTAGclasstype}{DW\_TAG\_class\_type}
0x44 0x02
// Step 4: 'A' DW\_AT\_name DW\_FORM\_string "A"
0x41 0x03 0x08 0x41 0x00
// Step 4: 'A' DW\_AT\_byte\_size DW\_FORM\_sdata 20
0x41 0x0b 0x0d 0x14
// Step 7: First child ("v\_")
- // Step 3: 'D' DW\_TAG\_member
+ // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\_TAG\_member}
0x44 0x0d
// Step 4: 'A' DW\_AT\_name DW\_FORM\_string "v\_"
0x41 0x03 0x08 0x76 0x5f 0x00
0x41 0x38 0x0d 0x00
// Step 6: 'T' DW\_AT\_type (type \#2)
0x54 0x49
- // Step 3: 'D' DW\_TAG\_base\_type
+ // Step 3: 'D' \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}
0x44 0x24
// Step 4: 'A' DW\_AT\_name DW\_FORM\_string "int"
0x41 0x03 0x08 0x69 0x6e 0x74 0x00
0x41 0x0b 0x0d 0x04
// Step 4: 'A' DW\_AT\_encoding DW\_FORM\_sdata DW\_ATE\_signed
0x41 0x3e 0x0d 0x05
- // Step 7: End of DW\_TAG\_base\_type "int"
+ // Step 7: End of \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type} "int"
0x00
- // Step 7: End of DW\_TAG\_member "v\_"
+ // Step 7: End of \livelink{chap:DWTAGmember}{DW\_TAG\_member} "v\_"
0x00
// Step 7: Second child ("next")
- // Step 3: 'D' DW\_TAG\_member
+ // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\_TAG\_member}
0x44 0x0d
// Step 4: 'A' DW\_AT\_name DW\_FORM\_string "next"
0x41 0x03 0x08 0x6e 0x65 0x78 0x74 0x00
0x41 0x38 0x0d 0x04
// Step 6: 'T' DW\_AT\_type (type \#3)
0x54 0x49
- // Step 3: 'D' DW\_TAG\_pointer\_type
+ // Step 3: 'D' \livelink{chap:DWTAGpointertype}{DW\_TAG\_pointer\_type}
0x44 0x0f
// Step 5: 'N' DW\_AT\_type
0x4e 0x49
0x43 0x39 0x4e 0x00 0x45
// Step 5: "A"
0x41 0x00
- // Step 7: End of DW\_TAG\_pointer\_type
+ // Step 7: End of \livelink{chap:DWTAGpointertype}{DW\_TAG\_pointer\_type}
0x00
- // Step 7: End of DW\_TAG\_member "next"
+ // Step 7: End of \livelink{chap:DWTAGmember}{DW\_TAG\_member} "next"
0x00
// Step 7: Third child ("bp")
- // Step 3: 'D' DW\_TAG\_member
+ // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\_TAG\_member}
0x44 0x0d
// Step 4: 'A' DW\_AT\_name DW\_FORM\_string "bp"
0x41 0x03 0x08 0x62 0x70 0x00
0x41 0x38 0x0d 0x08
// Step 6: 'T' DW\_AT\_type (type \#4)
0x54 0x49
- // Step 3: 'D' DW\_TAG\_pointer\_type
+ // Step 3: 'D' \livelink{chap:DWTAGpointertype}{DW\_TAG\_pointer\_type}
0x44 0x0f
// Step 5: 'N' DW\_AT\_type
0x4e 0x49
0x43 0x39 0x4e 0x00 0x45
// Step 5: "B"
0x42 0x00
- // Step 7: End of DW\_TAG\_pointer\_type
+ // Step 7: End of \livelink{chap:DWTAGpointertype}{DW\_TAG\_pointer\_type}
0x00
- // Step 7: End of DW\_TAG\_member "next"
+ // Step 7: End of \livelink{chap:DWTAGmember}{DW\_TAG\_member} "next"
0x00
// Step 7: Fourth child ("c")
- // Step 3: 'D' DW\_TAG\_member
+ // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\_TAG\_member}
0x44 0x0d
// Step 4: 'A' DW\_AT\_name DW\_FORM\_string "c"
0x41 0x03 0x08 0x63 0x00
0x41 0x38 0x0d 0x0c
// Step 6: 'T' DW\_AT\_type (type \#5)
0x54 0x49
- // Step 2: 'C' DW\_TAG\_namespace "N"
+ // Step 2: 'C' \livelink{chap:DWTAGnamespace}{DW\_TAG\_namespace} "N"
0x43 0x39 0x4e 0x00
- // Step 3: 'D' DW\_TAG\_structure\_type
+ // Step 3: 'D' \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}
0x44 0x13
// Step 4: 'A' DW\_AT\_name DW\_FORM\_string "C"
0x41 0x03 0x08 0x43 0x00
// Step 4: 'A' DW\_AT\_byte\_size DW\_FORM\_sdata 8
0x41 0x0b 0x0d 0x08
// Step 7: First child ("x")
- // Step 3: 'D' DW\_TAG\_member
+ // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\_TAG\_member}
0x44 0x0d
// Step 4: 'A' DW\_AT\_name DW\_FORM\_string "x"
0x41 0x03 0x08 0x78 0x00
0x41 0x38 0x0d 0x00
// Step 6: 'R' DW\_AT\_type (type \#2)
0x52 0x49 0x02
- // Step 7: End of DW\_TAG\_member "x"
+ // Step 7: End of \livelink{chap:DWTAGmember}{DW\_TAG\_member} "x"
0x00
// Step 7: Second child ("y")
- // Step 3: 'D' DW\_TAG\_member
+ // Step 3: 'D' \livelink{chap:DWTAGmember}{DW\_TAG\_member}
0x44 0x0d
// Step 4: 'A' DW\_AT\_name DW\_FORM\_string "y"
0x41 0x03 0x08 0x79 0x00
0x41 0x38 0x0d 0x04
// Step 6: 'R' DW\_AT\_type (type \#2)
0x52 0x49 0x02
- // Step 7: End of DW\_TAG\_member "y"
+ // Step 7: End of \livelink{chap:DWTAGmember}{DW\_TAG\_member} "y"
0x00
- // Step 7: End of DW\_TAG\_structure\_type "C"
+ // Step 7: End of \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type} "C"
0x00
- // Step 7: End of DW\_TAG\_member "c"
+ // Step 7: End of \livelink{chap:DWTAGmember}{DW\_TAG\_member} "c"
0x00
// Step 7: Fifth child ("A")
- // Step 3: 'S' DW\_TAG\_subprogram "A"
+ // Step 3: 'S' \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram} "A"
0x53 0x2e 0x41 0x00
// Step 7: Sixth child ("v")
- // Step 3: 'S' DW\_TAG\_subprogram "v"
+ // Step 3: 'S' \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram} "v"
0x53 0x2e 0x76 0x00
-// Step 7: End of DW\_TAG\_structure\_type "A"
+// Step 7: End of \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type} "A"
0x00
\end{alltt}
\label{app:typesignatureexampleusage}
\begin{alltt}
- DW\_TAG\_compile\_unit
+ \livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit}
...
- DW\_TAG\_subprogram
+ \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
...
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name: "a"
DW\_AT\_type: (signature) 0xd6d160f5 5589f6e9
DW\_AT\_location: ...
There will also be a compilation unit that has the file\dash level
declarations and definitions. Other per\dash function compilation
unit DWARF information (.debug\_info) points to this common
-file\dash level compilation unit using DW\_TAG\_imported\_unit.
+file\dash level compilation unit using \livelink{chap:DWTAGimportedunit}{DW\_TAG\_imported\_unit}.
Section groups can use DW\_FORM\_ref\_addr and internal labels
(section\dash relative relocations) to refer to the main object
\livetarg{chap:DWTAGconstant}{DW\_TAG\_constant},
respectively.
-\textit{The tag DW\_TAG\_constant is used for languages that
+\textit{The tag \livelink{chap:DWTAGconstant}{DW\_TAG\_constant} is used for languages that
have true named constants.}
The debugging information entry for a program variable,
the entry has a DW\_AT\_specification attribute, whose value is a
reference to the debugging information entry representing the
declaration of this data member. The referenced entry has the
-tag DW\_TAG\_member and will be a child of some class, structure
+tag \livelink{chap:DWTAGmember}{DW\_TAG\_member} and will be a child of some class, structure
or union type entry. If the variable entry represents a
non-defining declaration, DW\_AT\_specification may be used
to reference the defining declaration of the variable. If
\end{enumerate}
-FIXME incomplete
-
-
\section{Common Block Entries}
\label{chap:commonblockentries}
A Fortran common block may be described by a debugging
DW\_LANG, DW\_LNE, DW\_CC or DW\_CFA respectively) followed by
\_lo\_user or \_hi\_user.
\textit{For example, for entry tags, the special
-labels are DW\_TAG\_lo\_user and DW\_TAG\_hi\_user.}
+labels are \livetarg{chap:DWTAGlouser}{DW\_TAG\_lo\_user} and
+\livetarg{chap:DWTAGhiuser}{DW\_TAG\_hi\_user}.}
Values in the
range between prefix\_lo\_user and prefix\_hi\_user inclusive,
are reserved for vendor specific extensions. Vendors may
compilation unit header
(see Section \refersec{datarep:compilationunitheader})
followed by a
-single DW\_TAG\_compile\_unit or DW\_TAG\_partial\_unit debugging
+single \livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit} or \livelink{chap:DWTAGpartialunit}{DW\_TAG\_partial\_unit} debugging
information entry, together with its children.
For each type defined in a compilation unit, a contribution may
be made to the .debug\_types section of the object file. Each
such contribution consists of a type unit header
(see Section \refersec{datarep:typeunitheader})
-followed by a DW\_TAG\_type\_unit entry, together with
+followed by a \livelink{chap:DWTAGtypeunit}{DW\_TAG\_type\_unit} entry, together with
its children.
Each debugging information entry begins with a code that
\endfoot
\hline
\endlastfoot
-DW\_TAG\_array\_type &0x01 \\
-DW\_TAG\_class\_type&0x02 \\
-DW\_TAG\_entry\_point&0x03 \\
-DW\_TAG\_enumeration\_type&0x04 \\
-DW\_TAG\_formal\_parameter&0x05 \\
-DW\_TAG\_imported\_declaration&0x08 \\
-DW\_TAG\_label&0x0a \\
-DW\_TAG\_lexical\_block&0x0b \\
-DW\_TAG\_member&0x0d \\
-DW\_TAG\_pointer\_type&0x0f \\
-DW\_TAG\_reference\_type&0x10 \\
-DW\_TAG\_compile\_unit&0x11 \\
-DW\_TAG\_string\_type&0x12 \\
-DW\_TAG\_structure\_type&0x13 \\
-DW\_TAG\_subroutine\_type&0x15 \\
-DW\_TAG\_typedef&0x16 \\
-DW\_TAG\_union\_type&0x17 \\
-DW\_TAG\_unspecified\_parameters&0x18 \\
-DW\_TAG\_variant&0x19 \\
-DW\_TAG\_common\_block&0x1a \\
-DW\_TAG\_common\_inclusion&0x1b \\
-DW\_TAG\_inheritance&0x1c \\
-DW\_TAG\_inlined\_subroutine&0x1d \\
-DW\_TAG\_module&0x1e \\
-DW\_TAG\_ptr\_to\_member\_type&0x1f \\
-DW\_TAG\_set\_type&0x20 \\
-DW\_TAG\_subrange\_type&0x21 \\
-DW\_TAG\_with\_stmt&0x22 \\
-DW\_TAG\_access\_declaration&0x23 \\
-DW\_TAG\_base\_type&0x24 \\
-DW\_TAG\_catch\_block&0x25 \\
-DW\_TAG\_const\_type&0x26 \\
-DW\_TAG\_constant&0x27 \\
-DW\_TAG\_enumerator&0x28 \\
-DW\_TAG\_file\_type&0x29 \\
-DW\_TAG\_friend&0x2a \\
-DW\_TAG\_namelist&0x2b \\
-DW\_TAG\_namelist\_item&0x2c \\
-DW\_TAG\_packed\_type&0x2d \\
-DW\_TAG\_subprogram&0x2e \\
-DW\_TAG\_template\_type\_parameter&0x2f \\
-DW\_TAG\_template\_value\_parameter&0x30 \\
-DW\_TAG\_thrown\_type&0x31 \\
-DW\_TAG\_try\_block&0x32 \\
-DW\_TAG\_variant\_part&0x33 \\
-DW\_TAG\_variable&0x34 \\
-DW\_TAG\_volatile\_type&0x35 \\
-DW\_TAG\_dwarf\_procedure&0x36 \\
-DW\_TAG\_restrict\_type&0x37 \\
-DW\_TAG\_interface\_type&0x38 \\
-DW\_TAG\_namespace&0x39 \\
-DW\_TAG\_imported\_module&0x3a \\
-DW\_TAG\_unspecified\_type&0x3b \\
-DW\_TAG\_partial\_unit&0x3c \\
-DW\_TAG\_imported\_unit&0x3d \\
-DW\_TAG\_condition&0x3f \\
-DW\_TAG\_shared\_type&0x40 \\
-DW\_TAG\_type\_unit \ddag &0x41 \\
-DW\_TAG\_rvalue\_reference\_type \ddag &0x42 \\
-DW\_TAG\_template\_alias \ddag &0x43 \\
-DW\_TAG\_lo\_user&0x4080 \\
-DW\_TAG\_hi\_user&0xffff \\
+\livelink{chap:DWTAGarraytype}{DW\_TAG\_array\_type} &0x01 \\
+\livelink{chap:DWTAGclasstype}{DW\_TAG\_class\_type}&0x02 \\
+\livelink{chap:DWTAGentrypoint}{DW\_TAG\_entry\_point}&0x03 \\
+\livelink{chap:DWTAGenumerationtype}{DW\_TAG\_enumeration\_type}&0x04 \\
+\livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}&0x05 \\
+\livelink{chap:DWTAGimporteddeclaration}{DW\_TAG\_imported\_declaration}&0x08 \\
+\livelink{chap:DWTAGlabel}{DW\_TAG\_label}&0x0a \\
+\livelink{chap:DWTAGlexicalblock}{DW\_TAG\_lexical\_block}&0x0b \\
+\livelink{chap:DWTAGmember}{DW\_TAG\_member}&0x0d \\
+\livelink{chap:DWTAGpointertype}{DW\_TAG\_pointer\_type}&0x0f \\
+\livelink{chap:DWTAGreferencetype}{DW\_TAG\_reference\_type}&0x10 \\
+\livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit}&0x11 \\
+\livelink{chap:DWTAGstringtype}{DW\_TAG\_string\_type}&0x12 \\
+\livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}&0x13 \\
+\livelink{chap:DWTAGsubroutinetype}{DW\_TAG\_subroutine\_type}&0x15 \\
+\livelink{chap:DWTAGtypedef}{DW\_TAG\_typedef}&0x16 \\
+\livelink{chap:DWTAGuniontype}{DW\_TAG\_union\_type}&0x17 \\
+\livelink{chap:DWTAGunspecifiedparameters}{DW\_TAG\_unspecified\_parameters}&0x18 \\
+\livelink{chap:DWTAGvariant}{DW\_TAG\_variant}&0x19 \\
+\livelink{chap:DWTAGcommonblock}{DW\_TAG\_common\_block}&0x1a \\
+\livelink{chap:DWTAGcommoninclusion}{DW\_TAG\_common\_inclusion}&0x1b \\
+\livelink{chap:DWTAGinheritance}{DW\_TAG\_inheritance}&0x1c \\
+\livelink{chap:DWTAGinlinedsubroutine}{DW\_TAG\_inlined\_subroutine}&0x1d \\
+\livelink{chap:DWTAGmodule}{DW\_TAG\_module}&0x1e \\
+\livelink{chap:DWTAGptrtomembertype}{DW\_TAG\_ptr\_to\_member\_type}&0x1f \\
+\livelink{chap:DWTAGsettype}{DW\_TAG\_set\_type}&0x20 \\
+\livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type}&0x21 \\
+\livelink{chap:DWTAGwithstmt}{DW\_TAG\_with\_stmt}&0x22 \\
+\livelink{chap:DWTAGaccessdeclaration}{DW\_TAG\_access\_declaration}&0x23 \\
+\livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}&0x24 \\
+\livelink{chap:DWTAGcatchblock}{DW\_TAG\_catch\_block}&0x25 \\
+\livelink{chap:DWTAGconsttype}{DW\_TAG\_const\_type}&0x26 \\
+\livelink{chap:DWTAGconstant}{DW\_TAG\_constant}&0x27 \\
+\livelink{chap:DWTAGenumerator}{DW\_TAG\_enumerator}&0x28 \\
+\livelink{chap:DWTAGfiletype}{DW\_TAG\_file\_type}&0x29 \\
+\livelink{chap:DWTAGfriend}{DW\_TAG\_friend}&0x2a \\
+\livelink{chap:DWTAGnamelist}{DW\_TAG\_namelist}&0x2b \\
+\livelink{chap:DWTAGnamelistitem}{DW\_TAG\_namelist\_item}&0x2c \\
+\livelink{chap:DWTAGpackedtype}{DW\_TAG\_packed\_type}&0x2d \\
+\livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}&0x2e \\
+\livelink{chap:DWTAGtemplatetypeparameter}{DW\_TAG\_template\_type\_parameter}&0x2f \\
+\livelink{chap:DWTAGtemplatevalueparameter}{DW\_TAG\_template\_value\_parameter}&0x30 \\
+\livelink{chap:DWTAGthrowntype}{DW\_TAG\_thrown\_type}&0x31 \\
+\livelink{chap:DWTAGtryblock}{DW\_TAG\_try\_block}&0x32 \\
+\livelink{chap:DWTAGvariantpart}{DW\_TAG\_variant\_part}&0x33 \\
+\livelink{chap:DWTAGvariable}{DW\_TAG\_variable}&0x34 \\
+\livelink{chap:DWTAGvolatiletype}{DW\_TAG\_volatile\_type}&0x35 \\
+\livelink{chap:DWTAGdwarfprocedure}{DW\_TAG\_dwarf\_procedure}&0x36 \\
+\livelink{chap:DWTAGrestricttype}{DW\_TAG\_restrict\_type}&0x37 \\
+\livelink{chap:DWTAGinterfacetype}{DW\_TAG\_interface\_type}&0x38 \\
+\livelink{chap:DWTAGnamespace}{DW\_TAG\_namespace}&0x39 \\
+\livelink{chap:DWTAGimportedmodule}{DW\_TAG\_imported\_module}&0x3a \\
+\livelink{chap:DWTAGunspecifiedtype}{DW\_TAG\_unspecified\_type}&0x3b \\
+\livelink{chap:DWTAGpartialunit}{DW\_TAG\_partial\_unit}&0x3c \\
+\livelink{chap:DWTAGimportedunit}{DW\_TAG\_imported\_unit}&0x3d \\
+\livelink{chap:DWTAGcondition}{DW\_TAG\_condition}&0x3f \\
+\livelink{chap:DWTAGsharedtype}{DW\_TAG\_shared\_type}&0x40 \\
+\livelink{chap:DWTAGtypeunit}{DW\_TAG\_type\_unit} \ddag &0x41 \\
+\livelink{chap:DWTAGrvaluereferencetype}{DW\_TAG\_rvalue\_reference\_type} \ddag &0x42 \\
+\livelink{chap:DWTAGtemplatealias}{DW\_TAG\_template\_alias} \ddag &0x43 \\
+\livelink{chap:DWTAGlouser}{DW\_TAG\_lo\_user}&0x4080 \\
+\livelink{chap:DWTAGhiuser}{DW\_TAG\_hi\_user}&0xffff \\
\end{longtable}
\ddag TAG new in DWARF Version 4
\end{centering}
Table \refersec{tab:languageencodings}
also shows the default lower bound, if any, assumed for
an omitted DW\_AT\_lower\_bound attribute in the context of a
-DW\_TAG\_subrange\_type debugging information entry for each
+\livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type} debugging information entry for each
defined language.
\begin{centering}
DW\_FORM\_string,
and DW\_FORM\_block.
-\item If the tag in Step 3 is one of DW\-\_TAG\-\_pointer\-\_type,
-DW\-\_TAG\-\_reference\-\_type,
-DW\-\_TAG\-\_rvalue\-\_reference\-\_type,
-DW\-\_TAG\-\_ptr\-\_to\-\_member\-\_type,
-or DW\-\_TAG\-\_friend, and the referenced
+\item If the tag in Step 3 is one of \livelink{chap:DWTAGpointertype}{DW\-\_TAG\-\_pointer\-\_type},
+\livelink{chap:DWTAGreferencetype}{DW\-\_TAG\-\_reference\-\_type},
+\livelink{chap:DWTAGrvaluereferencetype}{DW\-\_TAG\-\_rvalue\-\_reference\-\_type},
+\livelink{chap:DWTAGptrtomembertype}{DW\-\_TAG\-\_ptr\-\_to\-\_member\-\_type},
+or \livelink{chap:DWTAGfriend}{DW\-\_TAG\-\_friend}, and the referenced
type (via the DW\-\_AT\-\_type or
DW\-\_AT\-\_friend attribute) has a
DW\-\_AT\-\_name attribute, append to S the letter 'N', the DWARF
attribute code (DW\-\_AT\-\_type or
DW\-\_AT\-\_friend), the context of
the type (according to the method in Step 2), the letter 'E',
-and the name of the type. For DW\-\_TAG\-\_friend, if the referenced
-entry is a DW\-\_TAG\-\_subprogram, the context is omitted and the
+and the name of the type. For \livelink{chap:DWTAGfriend}{DW\-\_TAG\-\_friend}, if the referenced
+entry is a \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}, the context is omitted and the
name to be used is the ABI-specific name of the subprogram
(e.g., the mangled linker name).
-\item 6.If the tag in Step 3 is not one of DW\-\_TAG\-\_pointer\-\_type,
-DW\-\_TAG\-\_reference\-\_type,
-DW\-\_TAG\-\_rvalue\-\_reference\-\_type,
-DW\-\_TAG\-\_ptr\-\_to\-\_member\-\_type, or
-DW\-\_TAG\-\_friend, but has
+\item 6.If the tag in Step 3 is not one of \livelink{chap:DWTAGpointertype}{DW\-\_TAG\-\_pointer\-\_type},
+\livelink{chap:DWTAGreferencetype}{DW\-\_TAG\-\_reference\-\_type},
+\livelink{chap:DWTAGrvaluereferencetype}{DW\-\_TAG\-\_rvalue\-\_reference\-\_type},
+\livelink{chap:DWTAGptrtomembertype}{DW\-\_TAG\-\_ptr\-\_to\-\_member\-\_type}, or
+\livelink{chap:DWTAGfriend}{DW\-\_TAG\-\_friend}, but has
a DW\-\_AT\-\_type attribute, or if the referenced type (via
the DW\-\_AT\-\_type or
DW\-\_AT\-\_friend attribute) does not have a
% use like \livelink{chap:DWOPdup}{DW\_OP\_dup}
\newcommand{\livelink}[2]{\hyperlink{#1}{#2}\index{#2} }
% livetarg is the declaration this is the target of livelinks.
+% FIXME: we might want livetarg and livetargi #2 to be \textbf{#2}
\newcommand{\livetarg}[2]{\hypertarget{#1}{#2}\index{#2}}
% When we want the index entry to look different from the name.
\newcommand{\livetargi}[3]{\hypertarget{#1}{#2}\index{#3}}
\begin{framed}
\scriptsize
\begin{alltt}
-DW\_TAG\_compile\_unit
+\livelink{chap:DWTAGcompileunit}{DW\_TAG\_compile\_unit}
DW\_CHILDREN\_yes
DW\_AT\_name DW\_FORM\_string
DW\_AT\_producer DW\_FORM\_string
\vspace{0.01cm}
\hrule
2
-DW\_TAG\_base\_type
+\livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}
DW\_CHILDREN\_no
DW\_AT\_name DW\_FORM\_string
DW\_AT\_encoding DW\_FORM\_data1
\vspace{0.01cm}
\hrule
3
-DW\_TAG\_pointer\_type
+\livelink{chap:DWTAGpointertype}{DW\_TAG\_pointer\_type}
DW\_CHILDREN\_no
DW\_AT\_type DW\_FORM\_ref4
0
\vspace{0.01cm}
\hrule
4
-DW\_TAG\_typedef
+\livelink{chap:DWTAGtypedef}{DW\_TAG\_typedef}
DW\_CHILDREN\_no
DW\_AT\_name DW\_FORM\_string
DW\_AT\_type DW\_FORM\_ref\_addr
\begin{alltt}
! Description for type of 'ap'
-1\$: \addtoindex{DW\_TAG\_array\_type}
+1\$: \livelink{chap:DWTAGarraytype}{DW\_TAG\_array\_type}
! No name, default (Fortran) ordering, default stride
DW\_AT\_type(reference to REAL)
DW\_AT\_associated(expression= ! Test 'ptr\_assoc' flag
DW\_OP\_lit<n> ! where n == offset(base)
DW\_OP\_plus
DW\_OP\_deref) ! Type of index of array 'ap'
-2\$: \addtoindex{DW\_TAG\_subrange\_type}
+2\$: \livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type}
! No name, default stride
DW\_AT\_type(reference to INTEGER)
DW\_AT\_lower\_bound(expression=
! offset(desc, dims) +
! offset(dims\_str, upper\_bound)
DW\_OP\_plus
- \addtoindex{DW\_OP\_deref})
+ DW\_OP\_deref)
! Note: for the m'th dimension, the second operator becomes
! DW\_OP\_lit<x> where
! x == offset(desc, dims) +
! That is, the expression does not get longer for each
! successive dimension (other than to express the larger
! offsets involved).
-3\$: DW\_TAG\_structure\_type
+3\$: \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}
DW\_AT\_name("array\_ptr")
DW\_AT\_byte\_size(constant sizeof(REAL) + sizeof(desc<1>))
-4\$: DW\_TAG\_member
+4\$: \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name("myvar")
DW\_AT\_type(reference to REAL)
DW\_AT\_data\_member\_location(constant 0)
-5\$: DW\_TAG\_member
+5\$: \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name("ap");
DW\_AT\_type(reference to 1\$)
DW\_AT\_data\_member\_location(constant sizeof(REAL))
-6\$: DW\_TAG\_array\_type
+6\$: \livelink{chap:DWTAGarraytype}{DW\_TAG\_array\_type}
! No name, default (Fortran) ordering, default stride
DW\_AT\_type(reference to 3\$)
DW\_AT\_allocated(expression=
DW\_OP\_plus
DW\_OP\_deref)
-7\$: DW\_TAG\_subrange\_type
+7\$: \livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type}
! No name, default stride
DW\_AT\_type(reference to INTEGER)
DW\_AT\_lower\_bound(expression=
DW\_OP\_plus
DW\_OP\_deref)
-8\$: DW\_TAG\_variable
+8\$: \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("arrays")
DW\_AT\_type(reference to 6\$)
DW\_AT\_location(expression=
\label{app:adaexampledwarfdescription}
\begin{alltt}
-11\$: DW\_TAG\_variable
+11\$: \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("M")
DW\_AT\_type(reference to INTEGER)
-12\$: DW\_TAG\_array\_type
+12\$: \livelink{chap:DWTAGarraytype}{DW\_TAG\_array\_type}
! No name, default (Ada) order, default stride
DW\_AT\_type(reference to INTEGER)
-13\$: DW\_TAG\_subrange\_type
+13\$: \livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type}
DW\_AT\_type(reference to INTEGER)
DW\_AT\_lower\_bound(constant 1)
DW\_AT\_upper\_bound(reference to variable M at 11\$)
-14\$: DW\_TAG\_variable
+14\$: \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("VEC1")
DW\_AT\_type(reference to array type at 12\$)
. . .
-21\$: DW\_TAG\_subrange\_type
+21\$: \livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type}
DW\_AT\_name("TEENY")
DW\_AT\_type(reference to INTEGER)
DW\_AT\_lower\_bound(constant 1)
DW\_AT\_upper\_bound(constant 100)
. . .
-26\$: DW\_TAG\_structure\_type
+26\$: \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}
DW\_AT\_name("REC2")
-27\$: DW\_TAG\_member
+27\$: \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name("N")
DW\_AT\_type(reference to subtype TEENY at 21\$)
DW\_AT\_data\_member\_location(constant 0)
-28\$: DW\_TAG\_array\_type
+28\$: \livelink{chap:DWTAGarraytype}{DW\_TAG\_array\_type}
! No name, default (Ada) order, default stride
! Default data location
DW\_AT\_TYPE(reference to INTEGER)
-29\$: DW\_TAG\_subrange\_type
+29\$: \livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type}
DW\_AT\_type(reference to subrange TEENY at 21\$)
DW\_AT\_lower\_bound(constant 1)
DW\_AT\_upper\_bound(reference to member N at 27\$)
-30\$: DW\_TAG\_member
+30\$: \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name("VEC2")
DW\_AT\_type(reference to array “subtype” at 28\$)
DW\_AT\_data\_member\_location(machine=
DW\_OP\_lit<n> ! where n == offset(REC2, VEC2)
DW\_OP\_plus)
. . .
-41\$: DW\_TAG\_variable
+41\$: \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("OBJ2B")
DW\_AT\_type(reference to REC2 at 26\$)
DW\_AT\_location(...as appropriate...)
Section \refersec{app:packedrecordexampledwarfdescription}
is
appropriate.
-DW\_TAG\_packed\_type entries could be added to
+\livelink{chap:DWTAGpackedtype}{DW\_TAG\_packed\_type} entries could be added to
better represent the source, but these do not otherwise affect
the example and are omitted for clarity. Note that this same
representation applies to both typical big\dash \ and
\label{app:packedrecordexampledwarfdescription}
\begin{alltt}
-21\$: DW\_TAG\_structure\_type ! anonymous type for F2
- DW\_TAG\_member
+21\$: \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type} ! anonymous type for F2
+ \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name("F3")
DW\_AT\_type(reference to 11\$)
-22\$: DW\_TAG\_array\_type ! anonymous type for F4
+22\$: \livelink{chap:DWTAGarraytype}{DW\_TAG\_array\_type} ! anonymous type for F4
DW\_AT\_type(reference to 20\$)
- DW\_TAG\_subrange\_type
+ \livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type}
DW\_AT\_type(reference to 11\$)
DW\_AT\_lower\_bound(0)
DW\_AT\_upper\_bound(1)
DW\_AT\_bit\_stride(2)
DW\_AT\_bit\_size(4)
-23\$: DW\_TAG\_structure\_type ! anonymous type for V
+23\$: \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type} ! anonymous type for V
DW\_AT\_bit\_size(39)
- DW\_TAG\_member
+ \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name("F1")
DW\_AT\_type(reference to 10\$)
DW\_AT\_data\_bit\_offset(0)! may be omitted
DW\_AT\_type(reference to 20\$) ! type T
DW\_AT\_data\_bit\_offset(37)
DW\_AT\_bit\_size(2) ! may be omitted
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("V")
DW\_AT\_type(reference to 23\$)
DW\_AT\_location(...)
\label{app:namespaceexampledwarfdescription}
\begin{alltt}
-1\$: DW\_TAG\_base\_type
+1\$: \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}
DW\_AT\_name("int")
...
-2\$: DW\_TAG\_base\_type
+2\$: \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}
DW\_AT\_name("float")
...
-6\$: DW\_TAG\_namespace
+6\$: \livelink{chap:DWTAGnamespace}{DW\_TAG\_namespace}
! no DW\_AT\_name attribute
7\$:
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("i")
DW\_AT\_type(reference to 1\$)
DW\_AT\_location ...
...
-10\$: DW\_TAG\_namespace
+10\$: \livelink{chap:DWTAGnamespace}{DW\_TAG\_namespace}
DW\_AT\_name("A")
-20\$: DW\_TAG\_namespace
+20\$: \livelink{chap:DWTAGnamespace}{DW\_TAG\_namespace}
DW\_AT\_name("B")
-30\$: DW\_TAG\_variable
+30\$: \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("j")
DW\_AT\_type(reference to 1\$)
DW\_AT\_location ...
...
-34\$: DW\_TAG\_subprogram
+34\$: \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_name("myfunc")
DW\_AT\_type(reference to 1\$)
...
-36\$: DW\_TAG\_subprogram
+36\$: \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_name("myfunc")
DW\_AT\_type(reference to 2\$)
...
-38\$: DW\_TAG\_subprogram
+38\$: \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_name("myfunc2")
DW\_AT\_low\_pc ...
DW\_AT\_high\_pc ...
- \addtoindex{DW\_AT\_type}(reference to 1\$)
+ DW\_AT\_type(reference to 1\$)
...
-40\$: DW\_TAG\_namespace
+40\$: \livelink{chap:DWTAGnamespace}{DW\_TAG\_namespace}
DW\_AT\_name("Y")
- DW\_TAG\_imported\_declaration ! (1) using-declaration
+ \livelink{chap:DWTAGimporteddeclaration}{DW\_TAG\_imported\_declaration} ! (1) using-declaration
DW\_AT\_import(reference to 30\$)
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("foo")
DW\_AT\_type(reference to 1\$)
DW\_AT\_location ...
...
- DW\_TAG\_imported\_declaration ! (2) using declaration
+ \livelink{chap:DWTAGimporteddeclaration}{DW\_TAG\_imported\_declaration} ! (2) using declaration
DW\_AT\_import(reference to 30\$)
- DW\_TAG\_imported\_declaration ! (3) namespace alias
+ \livelink{chap:DWTAGimporteddeclaration}{DW\_TAG\_imported\_declaration} ! (3) namespace alias
DW\_AT\_name("Foo")
DW\_AT\_import(reference to 20\$)
- DW\_TAG\_imported\_declaration ! (4) using declaration
+ \livelink{chap:DWTAGimporteddeclaration}{DW\_TAG\_imported\_declaration} ! (4) using declaration
DW\_AT\_import(reference to 34\$) ! - part 1
- DW\_TAG\_imported\_declaration ! (4) using declaration
+ \livelink{chap:DWTAGimporteddeclaration}{DW\_TAG\_imported\_declaration} ! (4) using declaration
DW\_AT\_import(reference to 36\$) ! - part 2
- DW\_TAG\_imported\_module ! (5) using directive
+ \livelink{chap:DWTAGimportedmodule}{DW\_TAG\_imported\_module} ! (5) using directive
DW\_AT\_import(reference to 20\$)
- DW\_TAG\_namespace
+ \livelink{chap:DWTAGnamespace}{DW\_TAG\_namespace}
DW\_AT\_extension(reference to 10\$)
- DW\_TAG\_namespace
+ \livelink{chap:DWTAGnamespace}{DW\_TAG\_namespace}
DW\_AT\_extension(reference to 20\$)
- DW\_TAG\_imported\_module ! (6) using directive
+ \livelink{chap:DWTAGimportedmodule}{DW\_TAG\_imported\_module} ! (6) using directive
DW\_AT\_import(reference to 40\$)
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("k")
DW\_AT\_type(reference to 1\$)
DW\_AT\_location ...
...
-60\$: DW\_TAG\_subprogram
+60\$: \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_specification(reference to 34\$)
DW\_AT\_low\_pc ...
DW\_AT\_high\_pc ...
\begin{alltt}
-1\$: DW\_TAG\_unspecified\_type
+1\$: \livelink{chap:DWTAGunspecifiedtype}{DW\_TAG\_unspecified\_type}
DW\_AT\_name("void")
...
-2\$ DW\_TAG\_base\_type
+2\$ \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}
DW\_AT\_name("int")
...
-3\$: DW\_TAG\_class\_type
+3\$: \livelink{chap:DWTAGclasstype}{DW\_TAG\_class\_type}
DW\_AT\_name("A")
...
-4\$: DW\_TAG\_pointer\_type
+4\$: \livelink{chap:DWTAGpointertype}{DW\_TAG\_pointer\_type}
DW\_AT\_type(reference to 3\$)
...
-5\$: DW\_TAG\_const\_type
+5\$: \livelink{chap:DWTAGconsttype}{DW\_TAG\_const\_type}
DW\_AT\_type(reference to 3\$)
...
-6\$: DW\_TAG\_pointer\_type
+6\$: \livelink{chap:DWTAGpointertype}{DW\_TAG\_pointer\_type}
DW\_AT\_type(reference to 5\$)
...
-7\$: DW\_TAG\_subprogram
+7\$: \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_declaration
DW\_AT\_name("func1")
DW\_AT\_type(reference to 1\$)
! References a formal parameter in this
! member function
...
-8\$: DW\_TAG\_formal\_parameter
+8\$: \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_artificial(true)
DW\_AT\_name("this")
DW\_AT\_type(reference to 4\$)
! or volatile
DW\_AT\_location ...
...
-9\$: DW\_TAG\_formal\_parameter
+9\$: \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_name(x1)
DW\_AT\_type(reference to 2\$)
...
-10\$: DW\_TAG\_subprogram
+10\$: \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_declaration
DW\_AT\_name("func2")
DW\_AT\_type(reference to 1\$)
! References a formal parameter in this
! member function
...
-11\$: DW\_TAG\_formal\_parameter
+11\$: \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_artificial(true)
DW\_AT\_name("this")
DW\_AT\_type(reference to 6\$)
! func2 marked as const
DW\_AT\_location ...
...
-12\$: DW\_TAG\_subprogram
+12\$: \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_declaration
DW\_AT\_name("func3")
DW\_AT\_type(reference to 1\$)
...
! No object pointer reference formal parameter
! implies func3 is static
-13\$: DW\_TAG\_formal\_parameter
+13\$: \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_name(x3)
DW\_AT\_type(reference to 2\$)
...
! Abstract instance for OUTER
!
OUTER.AI.1.1:
- DW\_TAG\_subprogram
+ \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_name("OUTER")
DW\_AT\_inline(DW\_INL\_declared\_inlined)
! No low/high PCs
OUTER.AI.1.2:
- DW\_TAG\_formal\_parameter
+ \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_name("OUTER\_FORMAL")
DW\_AT\_type(reference to integer)
! No location
OUTER.AI.1.3:
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("OUTER\_LOCAL")
DW\_AT\_type(reference to integer)
! No location
! Abstract instance for INNER
!
INNER.AI.1.1:
- DW\_TAG\_subprogram
+ \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_name("INNER")
DW\_AT\_inline(DW\_INL\_declared\_inlined)
! No low/high PCs
INNER.AI.1.2:
- DW\_TAG\_formal\_parameter
+ \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_name("INNER\_FORMAL")
DW\_AT\_type(reference to integer)
! No location
INNER.AI.1.3:
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("INNER\_LOCAL")
DW\_AT\_type(reference to integer)
! No location
...
0
- ! No DW\_TAG\_inlined\_subroutine (concrete instance)
+ ! No \livelink{chap:DWTAGinlinedsubroutine}{DW\_TAG\_inlined\_subroutine} (concrete instance)
! for INNER corresponding to calls of INNER
...
0
! Concrete instance for call "OUTER(7)"
!
OUTER.CI.1.1:
- DW\_TAG\_inlined\_subroutine
+ \livelink{chap:DWTAGinlinedsubroutine}{DW\_TAG\_inlined\_subroutine}
! No name
DW\_AT\_abstract\_origin(reference to OUTER.AI.1.1)
DW\_AT\_low\_pc(...)
DW\_AT\_high\_pc(...)
OUTER.CI.1.2:
- DW\_TAG\_formal\_parameter
+ \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
! No name
DW\_AT\_abstract\_origin(reference to OUTER.AI.1.2)
DW\_AT\_const\_value(7)
OUTER.CI.1.3:
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
! No name
DW\_AT\_abstract\_origin(reference to OUTER.AI.1.3)
DW\_AT\_location(...)
!
- ! No DW\_TAG\_subprogram (abstract instance) for INNER
+ ! No \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram} (abstract instance) for INNER
!
! Concrete instance for call INNER(OUTER\_LOCAL)
!
INNER.CI.1.1:
- DW\_TAG\_inlined\_subroutine
+ \livelink{chap:DWTAGinlinedsubroutine}{DW\_TAG\_inlined\_subroutine}
! No name
DW\_AT\_abstract\_origin(reference to INNER.AI.1.1)
DW\_AT\_low\_pc(...)
DW\_AT\_high\_pc(...)
DW\_AT\_static\_link(...)
INNER.CI.1.2:
- DW\_TAG\_formal\_parameter
+ \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
! No name
DW\_AT\_abstract\_origin(reference to INNER.AI.1.2)
DW\_AT\_location(...)
INNER.CI.1.3:
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
! No name
DW\_AT\_abstract\_origin(reference to INNER.AI.1.3)
DW\_AT\_location(...)
! Abstract instance for OUTER
!
OUTER.AI.2.1:
- DW\_TAG\_subprogram
+ \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_name("OUTER")
DW\_AT\_inline(DW\_INL\_declared\_inlined)
! No low/high PCs
OUTER.AI.2.2:
- DW\_TAG\_formal\_parameter
+ \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_name("OUTER\_FORMAL")
DW\_AT\_type(reference to integer)
! No location
OUTER.AI.2.3:
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("OUTER\_LOCAL")
DW\_AT\_type(reference to integer)
! No location
! Nested out-of-line INNER subprogram
!
OUTER.AI.2.4:
- DW\_TAG\_subprogram
+ \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_name("INNER")
! No DW\_AT\_inline
! No low/high PCs, frame\_base, etc.
OUTER.AI.2.5:
- DW\_TAG\_formal\_parameter
+ \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_name("INNER\_FORMAL")
DW\_AT\_type(reference to integer)
! No location
OUTER.AI.2.6:
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("INNER\_LOCAL")
DW\_AT\_type(reference to integer)
! No location
! Concrete instance for call "OUTER(7)"
!
OUTER.CI.2.1:
- DW\_TAG\_inlined\_subroutine
+ \livelink{chap:DWTAGinlinedsubroutine}{DW\_TAG\_inlined\_subroutine}
! No name
DW\_AT\_abstract\_origin(reference to OUTER.AI.2.1)
DW\_AT\_low\_pc(...)
DW\_AT\_high\_pc(...)
OUTER.CI.2.2:
- DW\_TAG\_formal\_parameter
+ \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
! No name
DW\_AT\_abstract\_origin(reference to OUTER.AI.2.2)
DW\_AT\_location(...)
OUTER.CI.2.3:
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
! No name
DW\_AT\_abstract\_origin(reference to OUTER.AI.2.3)
DW\_AT\_location(...)
! Nested out-of-line INNER subprogram
!
OUTER.CI.2.4:
- DW\_TAG\_subprogram
+ \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
! No name
DW\_AT\_abstract\_origin(reference to OUTER.AI.2.4)
DW\_AT\_low\_pc(...)
DW\_AT\_frame\_base(...)
DW\_AT\_static\_link(...)
OUTER.CI.2.5:
- DW\_TAG\_formal\_parameter
+ \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
! No name
DW\_AT\_abstract\_origin(reference to OUTER.AI.2.5)
DW\_AT\_location(...)
OUTER.CI.2.6:
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
! No name
DW\_AT\_abstract\_origin(reference to OUTER.AT.2.6)
DW\_AT\_location(...)
! Abstract instance for OUTER
!
OUTER.AI.3.1:
- DW\_TAG\_subprogram
+ \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_name("OUTER")
DW\_AT\_inline(DW\_INL\_declared\_inlined)
! No low/high PCs
OUTER.AI.3.2:
- DW\_TAG\_formal\_parameter
+ \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_name("OUTER\_FORMAL")
DW\_AT\_type(reference to integer)
! No location
OUTER.AI.3.3:
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("OUTER\_LOCAL")
DW\_AT\_type(reference to integer)
! No location
! Normal INNER
!
OUTER.AI.3.4:
- DW\_TAG\_subprogram
+ \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_name("INNER")
DW\_AT\_low\_pc(...)
DW\_AT\_high\_pc(...)
DW\_AT\_frame\_base(...)
DW\_AT\_static\_link(...)
OUTER.AI.3.5:
- DW\_TAG\_formal\_parameter
+ \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_name("INNER\_FORMAL")
DW\_AT\_type(reference to integer)
DW\_AT\_location(...)
OUTER.AI.3.6:
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("INNER\_LOCAL")
DW\_AT\_type(reference to integer)
DW\_AT\_location(...)
! Concrete instance for call "OUTER(7)"
!
OUTER.CI.3.1:
- DW\_TAG\_inlined\_subroutine
+ \livelink{chap:DWTAGinlinedsubroutine}{DW\_TAG\_inlined\_subroutine}
! No name
DW\_AT\_abstract\_origin(reference to OUTER.AI.3.1)
DW\_AT\_low\_pc(...)
DW\_AT\_high\_pc(...)
DW\_AT\_frame\_base(...)
OUTER.CI.3.2:
- DW\_TAG\_formal\_parameter
+ \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
! No name
DW\_AT\_abstract\_origin(reference to OUTER.AI.3.2)
! No type
DW\_AT\_location(...)
OUTER.CI.3.3:
- DW\_TAG\_variable
+ \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
! No name
DW\_AT\_abstract\_origin(reference to OUTER.AI.3.3)
! No type
DW\_AT\_location(...)
- ! No DW\_TAG\_subprogram for "INNER"
+ ! No \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram} for "INNER"
...
0
\end{alltt}
! For variable mass
!
-1\$: DW\_TAG\_const\_type
+1\$: \livelink{chap:DWTAGconsttype}{DW\_TAG\_const\_type}
DW\_AT\_type(reference to "double")
-2\$: DW\_TAG\_variable
+2\$: \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("mass")
DW\_AT\_type(reference to 1\$)
DW\_AT\_const\_expr(true)
DW\_AT\_const\_value(9.8)
! Abstract instance for square
!
-10\$: DW\_TAG\_subprogram
+10\$: \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_name("square")
DW\_AT\_type(reference to "int")
DW\_AT\_inline(DW\_INL\_inlined)
-11\$: DW\_TAG\_formal\_parameter
+11\$: \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_name("x")
DW\_AT\_type(reference to "int")
! Concrete instance for square(9)
!
-20\$: DW\_TAG\_inlined\_subroutine
+20\$: \livelink{chap:DWTAGinlinedsubroutine}{DW\_TAG\_inlined\_subroutine}
DW\_AT\_abstract\_origin(reference to 10\$)
DW\_AT\_const\_expr(present)
DW\_AT\_const\_value(81)
- DW\_TAG\_formal\_parameter
+ \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_abstract\_origin(reference to 11\$)
DW\_AT\_const\_value(9)
! Anonymous array type for arr
!
-30\$: DW\_TAG\_array\_type
+30\$: \livelink{chap:DWTAGarraytype}{DW\_TAG\_array\_type}
DW\_AT\_type(reference to "float")
DW\_AT\_byte\_size(324) ! 81*4
- DW\_TAG\_subrange\_type
+ \livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type}
DW\_AT\_type(reference to "int")
DW\_AT\_upper\_bound(reference to 20\$)
! Variable arr
!
-40\$: DW\_TAG\_variable
+40\$: \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("arr")
DW\_AT\_type(reference to 30\$)
\end{alltt}
! DWARF description
!
-1\$: DW\_TAG\_base\_type
+1\$: \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}
DW\_AT\_name("char16\_t")
DW\_AT\_encoding(DW\_ATE\_UTF)
DW\_AT\_byte\_size(2)
-2\$: DW\_TAG\_base\_type
+2\$: \livelink{chap:DWTAGbasetype}{DW\_TAG\_base\_type}
DW\_AT\_name("char32\_t")
DW\_AT\_encoding(DW\_ATE\_UTF)
DW\_AT\_byte\_size(4)
-3\$: DW\_TAG\_variable
+3\$: \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("chr\_a")
DW\_AT\_type(reference to 1\$)
-4\$: DW\_TAG\_variable
+4\$: \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("chr\_b")
DW\_AT\_type(reference to 2\$)
\end{alltt}
\begin{alltt}
! DWARF description
!
-11\$: DW\_TAG\_enumeration\_type
+11\$: \livelink{chap:DWTAGenumerationtype}{DW\_TAG\_enumeration\_type}
DW\_AT\_name("E")
DW\_AT\_type(reference to "int")
DW\_AT\_enum\_class(present)
-12\$: DW\_TAG\_enumerator
+12\$: \livelink{chap:DWTAGenumerator}{DW\_TAG\_enumerator}
DW\_AT\_name("E1")
DW\_AT\_const\_value(0)
13\$:
- DW\_TAG\_enumerator
+ \livelink{chap:DWTAGenumerator}{DW\_TAG\_enumerator}
DW\_AT\_name("E2")
DW\_AT\_const\_value(100)
-14\$: DW\_TAG\_variable
+14\$: \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("e1")
DW\_AT\_type(reference to 11\$)
\end{alltt}
\begin{alltt}
! DWARF description
!
-11\$: DW\_TAG\_structure\_type
+11\$: \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}
DW\_AT\_name("wrapper")
-12\$: DW\_TAG\_template\_type\_parameter
+12\$: \livelink{chap:DWTAGtemplatetypeparameter}{DW\_TAG\_template\_type\_parameter}
DW\_AT\_name("T")
DW\_AT\_type(reference to "int")
-13\$ DW\_TAG\_member
+13\$ \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name("comp")
DW\_AT\_type(reference to 12\$)
-14\$: DW\_TAG\_variable
+14\$: \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("obj")
DW\_AT\_type(reference to 11\$)
\end{alltt}
The actual type of the component comp is int, but in the DWARF
-the type references the DW\_TAG\_template\_type\_parameter for
+the type references the \livelink{chap:DWTAGtemplatetypeparameter}{DW\_TAG\_template\_type\_parameter} for
T, which in turn references int. This implies that in the
original template comp was of type T and that was replaced
with int in the instance. There exist situations where it is
\begin{alltt}
! DWARF description
!
-11\$: DW\_TAG\_structure\_type
+11\$: \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}
DW\_AT\_name("wrapper")
-12\$: DW\_TAG\_template\_type\_parameter
+12\$: \livelink{chap:DWTAGtemplatetypeparameter}{DW\_TAG\_template\_type\_parameter}
DW\_AT\_name("T")
DW\_AT\_type(reference to "int")
-13\$ DW\_TAG\_member
+13\$ \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name("comp")
DW\_AT\_type(reference to 12\$)
-14\$: DW\_TAG\_variable
+14\$: \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("obj")
DW\_AT\_type(reference to 11\$)
-21\$: DW\_TAG\_subprogram
+21\$: \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}
DW\_AT\_name("consume")
-22\$: DW\_TAG\_template\_type\_parameter
+22\$: \livelink{chap:DWTAGtemplatetypeparameter}{DW\_TAG\_template\_type\_parameter}
DW\_AT\_name("U")
DW\_AT\_type(reference to "int")
-23\$: DW\_TAG\_formal\_parameter
+23\$: \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}
DW\_AT\_name("formal")
DW\_AT\_type(reference to 11\$)
\end{alltt}
-In the DW\_TAG\_subprogram entry for the instance of consume,
+In the \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram} entry for the instance of consume,
U is described as
int.
The type of formal is
\begin{alltt}
! DWARF representation for variable 'b'
!
-20\$: DW\_TAG\_structure\_type
+20\$: \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}
DW\_AT\_name("Alpha")
-21\$: DW\_TAG\_template\_type\_parameter
+21\$: \livelink{chap:DWTAGtemplatetypeparameter}{DW\_TAG\_template\_type\_parameter}
DW\_AT\_name("T")
DW\_AT\_type(reference to "long")
-22\$: DW\_TAG\_template\_type\_parameter
+22\$: \livelink{chap:DWTAGtemplatetypeparameter}{DW\_TAG\_template\_type\_parameter}
DW\_AT\_name("U")
DW\_AT\_type(reference to "long")
-23\$: DW\_TAG\_member
+23\$: \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name("tango")
DW\_AT\_type(reference to 21\$)
-24\$: DW\_TAG\_member
+24\$: \livelink{chap:DWTAGmember}{DW\_TAG\_member}
DW\_AT\_name("uniform")
DW\_AT\_type(reference to 22\$)
-25\$: DW\_TAG\_template\_alias
+25\$: \livelink{chap:DWTAGtemplatealias}{DW\_TAG\_template\_alias}
DW\_AT\_name("Beta")
DW\_AT\_type(reference to 20\$)
-26\$: DW\_TAG\_template\_type\_parameter
+26\$: \livelink{chap:DWTAGtemplatetypeparameter}{DW\_TAG\_template\_type\_parameter}
DW\_AT\_name("V")
DW\_AT\_type(reference to "long")
-27\$: DW\_TAG\_variable
+27\$: \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("b")
DW\_AT\_type(reference to 25\$)
\end{alltt}
\begin{alltt}
! DWARF representation for X<Y<int>>
!
-30\$: DW\_TAG\_structure\_type
+30\$: \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}
DW\_AT\_name("Y")
-31\$: DW\_TAG\_template\_type\_parameter
+31\$: \livelink{chap:DWTAGtemplatetypeparameter}{DW\_TAG\_template\_type\_parameter}
DW\_AT\_name("TY")
DW\_AT\_type(reference to "int")
-32\$: DW\_TAG\_structure\_type
+32\$: \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}
DW\_AT\_name("X")
-33\$: DW\_TAG\_template\_type\_parameter
+33\$: \livelink{chap:DWTAGtemplatetypeparameter}{DW\_TAG\_template\_type\_parameter}
DW\_AT\_name("TX")
DW\_AT\_type(reference to 30\$)
! DWARF representation for X<Z<int>>
!
-40\$: DW\_TAG\_template\_alias
+40\$: \livelink{chap:DWTAGtemplatealias}{DW\_TAG\_template\_alias}
using Z = Y<int>;
DW\_AT\_name("Z")
DW\_AT\_type(reference to 30\$)
-41\$: DW\_TAG\_template\_type\_parameter
+41\$: \livelink{chap:DWTAGtemplatetypeparameter}{DW\_TAG\_template\_type\_parameter}
DW\_AT\_name("T")
DW\_AT\_type(reference to "int")
-42\$: DW\_TAG\_structure\_type
+42\$: \livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type}
DW\_AT\_name("X")
-43\$: DW\_TAG\_template\_type\_parameter
+43\$: \livelink{chap:DWTAGtemplatetypeparameter}{DW\_TAG\_template\_type\_parameter}
DW\_AT\_name("TX")
DW\_AT\_type(reference to 40\$)
! Note that 32\$ and 42\$ are actually the same type
!
-50\$: DW\_TAG\_variable
+50\$: \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("y")
DW\_AT\_type(reference to \$32)
-51\$: DW\_TAG\_variable
+51\$: \livelink{chap:DWTAGvariable}{DW\_TAG\_variable}
DW\_AT\_name("z")
DW\_AT\_type(reference to \$42)
\end{alltt}
% Some trouble here with hbox full, so we try optional word breaks.
\textit{Debugging information entries to which DW\-\_AT\-\_linkage\-\_name
-may apply include: DW\-\_TAG\-\_common\-\_block, DW\-\_TAG\-\_constant,
-DW\-\_TAG\-\_entry\-\_point, DW\-\_TAG\-\_subprogram
-and DW\-\_TAG\-\_variable.
+may apply include: \livelink{chap:DWTAGcommonblock}{DW\-\_TAG\-\_common\-\_block}, \livelink{chap:DWTAGconstant}{DW\-\_TAG\-\_constant},
+\livelink{chap:DWTAGentrypoint}{DW\-\_TAG\-\_entry\-\_point}, \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}
+and \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}.
}
In a simple normal compilation, a single compilation unit with
the tag
-DW\-\_TAG\-\_compile\-\_unit represents a complete object file
+\livelink{chap:DWTAGcompileunit}{DW\-\_TAG\-\_compile\-\_unit} represents a complete object file
and the tag
-DW\-\_TAG\-\_partial\-\_unit is not used.
+\livelink{chap:DWTAGpartialunit}{DW\-\_TAG\-\_partial\-\_unit} is not used.
In a compilation
employing the DWARF space compression and duplicate elimination
techniques from
Appendix \refersec{app:usingcompilationunits},
multiple compilation units using
the tags
-DW\-\_TAG\-\_compile\-\_unit and/or
-DW\-\_TAG\-\_partial\-\_unit are
+\livelink{chap:DWTAGcompileunit}{DW\-\_TAG\-\_compile\-\_unit} and/or
+\livelink{chap:DWTAGpartialunit}{DW\-\_TAG\-\_partial\-\_unit} are
used to represent portions of an object file.
\textit{A normal compilation unit typically represents the text and
with the
tag \livetarg{chap:DWTAGnamespace}{DW\-\_TAG\-\_namespace}.
A namespace extension is
-represented by a DW\-\_TAG\-\_namespace entry
+represented by a \livelink{chap:DWTAGnamespace}{DW\-\_TAG\-\_namespace} entry
with a DW\-\_AT\-\_extension
attribute referring to the previous extension, or if there
is no previous extension, to the original
-DW\-\_TAG\-\_namespace
+\livelink{chap:DWTAGnamespace}{DW\-\_TAG\-\_namespace}
entry. A namespace extension entry does not need to duplicate
information in a previous extension entry of the namespace
nor need it duplicate information in the original namespace
entry. (Thus, for a namespace with a name,
a DW\_AT\_name
attribute need only be attached directly to the original
-DW\-\_TAG\-\_namespace entry.)
+\livelink{chap:DWTAGnamespace}{DW\-\_TAG\-\_namespace} entry.)
Namespace and namespace extension entries may own other
debugging information entries describing program entities
\begin{tabular}{lp{9.0cm}}
\livetarg{chap:DWTAGsubprogram}{DW\_TAG\_subprogram} & A subroutine or function. \\
-DW\_TAG\_inlined\_subroutine & A particular inlined
+\livelink{chap:DWTAGinlinedsubroutine}{DW\_TAG\_inlined\_subroutine} & A particular inlined
instance of a subroutine or function. \\
\livetarg{chap:DWTAGentrypoint}{DW\_TAG\_entry\_point} & An alternate entry point. \\
\end{tabular}
described in Section \refersec{chap:linkagenames}.
If the name of the subroutine described by an entry with the
-tag DW\_TAG\_subprogram is visible outside of its containing
+tag \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram} is visible outside of its containing
compilation unit, that entry has a DW\_AT\_external attribute,
which is a flag.
template definition, but does represent each instantiation.}
A template instantiation is represented by a debugging
-information entry with the tag DW\_TAG\_subprogram. With four
+information entry with the tag \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}. With four
exceptions, such an entry will contain the same attributes and
will have the same types of child entries as would an entry
for a subroutine defined explicitly using the instantiation
\subsection{Inlinable and Inlined Subroutines}
A declaration or a definition of an inlinable subroutine
is represented by a debugging information entry with the
-tag DW\_TAG\_subprogram. The entry for a subroutine that is
+tag \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}. The entry for a subroutine that is
explicitly declared to be available for inline expansion or
that was expanded inline implicitly by the compiler has a
DW\_AT\_inline attribute whose value is an integer constant. The
\textit{In C++, a function or a constructor declared with
constexpr is implicitly declared inline. The abstract inline
instance (see below) is represented by a debugging information
-entry with the tag DW\_TAG\_subprogram. Such an entry has a
+entry with the tag \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}. Such an entry has a
DW\_AT\_inline attribute whose value is DW\_INL\_inlined.}
Any debugging information entry that is owned (either
directly or indirectly) by a debugging information entry
-with the tag DW\_TAG\_inlined\_subroutine is referred to as a
-“concrete inlined instance entry.” Any entry that has
-the tag DW\_TAG\_inlined\_subroutine is known as a “concrete
-inlined instance root.” Any set of concrete inlined instance
+with the tag \livelink{chap:DWTAGinlinedsubroutine}{DW\_TAG\_inlined\_subroutine} is referred to as a
+``concrete inlined instance entry.'' Any entry that has
+the tag \livelink{chap:DWTAGinlinedsubroutine}{DW\_TAG\_inlined\_subroutine}
+is known as a ``concrete inlined instance root.'' Any set of concrete inlined instance
entries that are all children (either directly or indirectly)
of some concrete inlined instance root, together with the root
itself, is known as a ``concrete inlined instance tree.''
For each pair of entries that are associated via a
DW\-\_AT\-\_abstract\-\_origin attribute, both members of the pair
have the same tag. So, for example, an entry with the tag
-DW\-\_TAG\-\_variable can only be associated with another entry
-that also has the tag DW\-\_TAG\-\_variable. The only exception
+\livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable} can only be associated with another entry
+that also has the tag \livelink{chap:DWTAGvariable}{DW\-\_TAG\-\_variable}. The only exception
to this rule is that the root of a concrete instance tree
-(which must always have the tag DW\-\_TAG\-\_\-inlined\_subroutine)
+(which must always have the tag \livelink{chap:DWTAGinlinedsubroutine}{DW\-\_TAG\-\_\-inlined\_subroutine})
can only be associated with the root of its associated abstract
-instance tree (which must have the tag DW\-\_TAG\-\_subprogram).
+instance tree (which must have the tag \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram}).
In general, the structure and content of any given concrete
inlined instance tree will be closely analogous to the
\item The root entry for a concrete out\dash of\dash line instance
of a given inlined subroutine has the same tag as does its
associated (abstract) inlined subroutine entry (that is, tag
-DW\_TAG\_subprogram rather than DW\_TAG\_inlined\_subroutine).
+\livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram} rather than \livelink{chap:DWTAGinlinedsubroutine}{DW\_TAG\_inlined\_subroutine}).
\item The root entry for a concrete out\dash of\dash line instance tree
is normally owned by the same parent entry that also owns
to the combined calling and called execution contexts.}
A trampoline is represented by a debugging information entry
-with the tag DW\-\_TAG\-\_subprogram or DW\-\_TAG\-\_inlined\-\_subroutine
+with the tag \livelink{chap:DWTAGsubprogram}{DW\-\_TAG\-\_subprogram} or \livelink{chap:DWTAGinlinedsubroutine}{DW\-\_TAG\-\_inlined\-\_subroutine}
that has a DW\_AT\_trampoline attribute. The value of that
attribute indicates the target subroutine of the trampoline,
that is, the subroutine to which the trampoline passes
Catch block entries have at least one child entry, an
entry representing the type of exception accepted by
that catch block. This child entry has one of the tags
-DW\_TAG\_formal\_parameter or DW\_TAG\_unspecified\_parameters,
+\livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter} or \livelink{chap:DWTAGunspecifiedparameters}{DW\_TAG\_unspecified\_parameters},
and will have the same form as other parameter entries.
The siblings immediately following a try block entry are its
For a data type with a non\dash decimal and non\dash binary scale factor,
the fixed binary type entry has a DW\_AT\_small attribute which
-references a DW\_TAG\_constant entry. The scale factor value
+references a \livelink{chap:DWTAGconstant}{DW\_TAG\_constant} entry. The scale factor value
is interpreted in accordance with the value defined by the
-DW\_TAG\_constant entry. The value represented is the product
+\livelink{chap:DWTAGconstant}{DW\_TAG\_constant} entry. The value represented is the product
of the integer value in memory and the associated constant
entry for the type.
modifier.
A modified type entry describing a pointer or reference
-type (using DW\_TAG\_pointer\_type, DW\_TAG\_reference\_type or
-DW\_TAG\_rvalue\_reference\_type) may have a DW\_AT\_address\_class
+type (using \livelink{chap:DWTAGpointertype}{DW\_TAG\_pointer\_type}, \livelink{chap:DWTAGreferencetype}{DW\_TAG\_reference\_type} or
+\livelink{chap:DWTAGrvaluereferencetype}{DW\_TAG\_rvalue\_reference\_type}) may have a DW\_AT\_address\_class
attribute to describe how objects having the given pointer
or reference type ought to be dereferenced.
A modified type entry describing a shared qualified type
-(using DW\_TAG\_shared\_type) may have a DW\_AT\_count attribute
+(using \livelink{chap:DWTAGsharedtype}{DW\_TAG\_shared\_type}) may have a DW\_AT\_count attribute
whose value is a constant expressing the blocksize of the
type. If no count attribute is present, then the “infinite”
blocksize is assumed.
const unsigned char * volatile p;
which represents a volatile pointer to a constant
character. This is encoded in DWARF as:
- DW_TAG_variable(p) -->
- DW_TAG_volatile_type -->
- DW_TAG_pointer_type -->
- DW_TAG_const_type -->
- DW_TAG_base_type(unsigned char)
+ \livelink{chap:DWTAGvariable}{DW_TAG_variable}(p) -->
+ \livelink{chap:DWTAGvolatiletype}{DW_TAG_volatile_type} -->
+ \livelink{chap:DWTAGpointertype}{DW_TAG_pointer_type} -->
+ \livelink{chap:DWTAGconsttype}{DW_TAG_const_type} -->
+ \livelink{chap:DWTAGbasetype}{DW_TAG_base_type}(unsigned char)
volatile unsigned char * const restrict p;
on the other hand, represents a restricted constant
pointer to a volatile character. This is encoded as:
- DW_TAG_variable(p) -->
- DW_TAG_restrict_type -->
- DW_TAG_const_type -->
- DW_TAG_pointer_type -->
- DW_TAG_volatile_type -->
- DW_TAG_base_type(unsigned char)
+ \livelink{chap:DWTAGvariable}{DW_TAG_variable}(p) -->
+ \livelink{chap:DWTAGrestricttype}{DW_TAG_restrict_type} -->
+ \livelink{chap:DWTAGconsttype}{DW_TAG_const_type} -->
+ \livelink{chap:DWTAGpointertype}{DW_TAG_pointer_type} -->
+ \livelink{chap:DWTAGvolatiletype}{DW_TAG_volatile_type} -->
+ \livelink{chap:DWTAGbasetype}{DW_TAG_base_type}(unsigned char)
\end{verbatim}
terms of another type may be called a type alias, a subtype,
a constrained type and other terms. A type name declared with
no defining details may be termed an incomplete, forward
-or hidden type. While the DWARF DW\_TAG\_typedef entry was
+or hidden type. While the DWARF \livelink{chap:DWTAGtypedef}{DW\_TAG\_typedef} entry was
originally inspired by the like named construct in C and C++,
it is broadly suitable for similar constructs (by whatever
source syntax) in other languages.}
Each array dimension is described by a debugging information
-entry with either the tag DW\_TAG\_subrange\_type or the tag
-DW\_TAG\_enumeration\_type. These entries are children of the
+entry with either the tag \livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type} or the tag
+\livelink{chap:DWTAGenumerationtype}{DW\_TAG\_enumeration\_type}. These entries are children of the
array type entry and are ordered to reflect the appearance of
the dimensions in the source program (i.e., leftmost dimension
first, next to leftmost second, and so on).
\label{chap:memberfunctionentries}
A member function is represented by a debugging information
-entry with the tag DW\_TAG\_subprogram. The member function entry
+entry with the tag \livelink{chap:DWTAGsubprogram}{DW\_TAG\_subprogram}. The member function entry
may contain the same attributes and follows the same rules
as non\dash member global subroutine entries
(see Section \refersec{chap:subroutineandentrypointentries}).
definition, but does represent each instantiation.}
A class template instantiation is represented by a
-debugging information entry with the tag DW\_TAG\_class\_type,
-DW\_TAG\_structure\_type or DW\_TAG\_union\_type. With five
+debugging information entry with the tag \livelink{chap:DWTAGclasstype}{DW\_TAG\_class\_type},
+\livelink{chap:DWTAGstructuretype}{DW\_TAG\_structure\_type} or \livelink{chap:DWTAGuniontype}{DW\_TAG\_union\_type}. With five
exceptions, such an entry will contain the same attributes
and have the same types of child entries as would an entry
for a class type defined explicitly using the instantiation
\begin{enumerate}[1.]
\item Each formal parameterized type declaration appearing in the
template definition is represented by a debugging information
-entry with the tag DW\_TAG\_template\_type\_parameter. Each
+entry with the tag \livelink{chap:DWTAGtemplatetypeparameter}{DW\_TAG\_template\_type\_parameter}. Each
such entry may have a DW\_AT\_name attribute, whose value is
a null\dash terminated string containing the name of the formal
type parameter as it appears in the source program. The
giving the condition name as it appears in the source program.
The condition entry's parent entry describes the conditional
-variable; normally this will be a DW\_TAG\_variable,
-DW\_TAG\_member or DW\_TAG\_formal\_parameter entry. If the parent
+variable; normally this will be a \livelink{chap:DWTAGvariable}{DW\_TAG\_variable},
+\livelink{chap:DWTAGmember}{DW\_TAG\_member} or \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter} entry. If the parent
entry has an array type, the condition can test any individual
element, but not the array as a whole. The condition entry
implicitly specifies a “comparison type” that is the
type of an array element if the parent has an array type;
otherwise it is the type of the parent entry.
-The condition entry owns DW\_TAG\_constant and/or
-DW\_TAG\_subrange\_type entries that describe the constant
+The condition entry owns \livelink{chap:DWTAGconstant}{DW\_TAG\_constant} and/or
+\livelink{chap:DWTAGsubrangetype}{DW\_TAG\_subrange\_type} entries that describe the constant
values associated with the condition. If any child entry has
a DW\_AT\_type attribute, that attribute should describe a type
compatible with the comparison type (according to the source
integral type determined by the compiler from the properties of
the enumeration literal values. A C++ type declaration written
using enum class declares a strongly typed enumeration and
-is represented using DW\_TAG\_enumeration\_type in combination
+is represented using \livelink{chap:DWTAGenumerationtype}{DW\_TAG\_enumeration\_type} in combination
with DW\_AT\_enum\_class.}
Each enumeration literal is represented by a debugging
\begin{enumerate}[1.]
\item The formal parameters of a parameter list (that have a
specific type) are represented by a debugging information entry
-with the tag DW\_TAG\_formal\_parameter. Each formal parameter
+with the tag \livelink{chap:DWTAGformalparameter}{DW\_TAG\_formal\_parameter}. Each formal parameter
entry has a DW\_AT\_type attribute that refers to the type of
the formal parameter.
\item The unspecified parameters of a variable parameter list
are represented by a debugging information entry with the
-tag DW\_TAG\_unspecified\_parameters.
+tag \livelink{chap:DWTAGunspecifiedparameters}{DW\_TAG\_unspecified\_parameters}.
\end{enumerate}
A file type is represented by a debugging information entry
with the
-\livetarg{chap:DWTAGfiletype}{tag DW\_TAG\_file\_type}.
+\livetarg{chap:DWTAGfiletype}{DW\_TAG\_file\_type}.
If the file type has a name,
the file type entry has a DW\_AT\_name attribute, whose value
is a null\dash terminated string containing the type name as it
\item Each formal parameterized type declaration appearing
in the template alias declaration is represented
by a debugging information entry with the tag
-DW\-\_TAG\-\_template\-\_type\-\_parameter. Each such entry may have
+\livelink{chap:DWTAGtemplatetypeparameter}{DW\-\_TAG\-\_template\-\_type\-\_parameter}. Each such entry may have
a DW\_AT\_name attribute, whose value is a null\dash terminated
string containing the name of the formal type parameter as it
appears in the source program. The template type parameter
\item Each formal parameterized value declaration
appearing in the template alias declaration is
represented by a debugging information entry with the tag
-DW\-\_TAG\-\_template\-\_value\-\_parameter. Each such entry may have
+\livelink{chap:DWTAGtemplatevalueparameter}{DW\-\_TAG\-\_template\-\_value\-\_parameter}. Each such entry may have
a DW\-\_AT\-\_name attribute, whose value is a null\dash terminated
string containing the name of the formal value parameter
as it appears in the source program. The template value
# Makefile which tests the python internals for sanity.
+all:
+ echo 'make clean' and 'make test' do something.
+ echo default does nothing
clean:
-rm -f *.pyc
-rm -f *.tmp
--- /dev/null
+# Copyright 2012 DWARF Debugging Information Format Committee
+#
+# All DW_TAG_* entries not in {} are turned into \livelink.
+
+import sys
+import fileio
+
+def ischar(tok,c):
+ if tok._class != "ind":
+ return "n"
+ if len(tok._tex) != 1:
+ return "n"
+ if tok._tex[0] != c:
+ return "n"
+ return "y"
+
+def transformone(tok,stdname,labelname):
+
+ # output is \livelink{label}{string}
+ t1=fileio.dwtoken()
+ t1.insertid("\livelink")
+ t2=fileio.dwtoken()
+ t2.setIndivid("{")
+ t3=fileio.dwtoken()
+ t3.insertid(labelname)
+ t4=fileio.dwtoken()
+ t4.setIndivid("}")
+ t5 = t2
+ t6=fileio.dwtoken()
+ t6.insertid(''.join(tok._tex))
+ t7 = t4
+ return [t1,t2,t3,t4,t5,t6,t7]
+
+def append_to_out(out,addthese):
+ for a in addthese:
+ out += [a]
+
+def isdesiredname(stdname):
+ """ If it is DW_TAG_* we return "y".
+ Else return "n"
+ We don't want something like plain DW_TAG or
+ plain DW_TAG_ to get modified.
+ """
+ if stdname.startswith("DW_TAG_"):
+ if len(stdname) > 7:
+ return "y"
+ return "n"
+
+def dwspace(tok):
+ if ischar(tok," ") == "y":
+ return "y"
+ if ischar(tok,"\t") == "y":
+ return "y"
+ return "n"
+
+# Here we are a bit careful, in that accidental spaces
+# after { or before } should not be confused with
+# not having a {} around a name.
+def leaderislbrace(linetoks,num):
+ cnum = num - 1
+ while cnum >= 1:
+ tok = linetoks[cnum]
+ if dwspace(tok) == "y":
+ cnum = cnum - 1
+ continue
+ if ischar(tok,"{") == "y":
+ return "y"
+ return "n"
+ return "n"
+
+def trailerisrbrace(linetoks,num):
+ cnum = num + 1
+ while cnum < len(linetoks) :
+ tok = linetoks[cnum]
+ if dwspace(tok) == "y":
+ cnum = cnum + 1
+ continue
+ if ischar(tok,"}") == "y":
+ return "y"
+ return "n"
+ return "n"
+
+def transfunc(linetoks):
+ if len(linetoks) < 1:
+ return linetoks
+ tnumin = 0
+ changes = 0
+ lasttoknum = len(linetoks) -1
+ outtoks = []
+ for t in linetoks:
+ rawtok = ''.join(t._tex)
+ stdname= ''.join(t._std)
+ linkname = "chap:" + ''.join(t._label)
+ if isdesiredname(stdname) == "y":
+ #Look past spaces when looking for { or }
+ if leaderislbrace(linetoks,tnumin) == "n" or trailerisrbrace(linetoks,tnumin) == "n":
+ tmp = transformone(t,stdname,linkname);
+ append_to_out(outtoks,tmp)
+ changes = changes + 1
+ else:
+ outtoks += [t]
+ else:
+ outtoks += [t]
+ tnumin = tnumin+ 1
+ # End of for loop.
+ return outtoks
+
+def read_args():
+ cur = 1
+ filelist = []
+ while len(sys.argv) > cur:
+ v = sys.argv[cur]
+ filelist += [v]
+ cur = int(cur) + 1
+
+ dwf = fileio.readFilelist(filelist)
+ dwf.dwtransformline(transfunc)
+ dwf.dwwrite()
+
+if __name__ == '__main__':
+ read_args()
+
+
+
Number of files: 1
-Number of lines in test1.in : 16
+Number of lines in test1.in : 18
Number of tokens in line 1 : 0
Number of tokens in line 2 : 14
id ' prefix ' ' prefix ' ' prefix ' ' prefix '
ind ' '
other ' ( ' ' ( ' ' ( ' ' ( '
-id ' DW\_TAG_foo ' ' DW\_TAG_foo ' ' DW_TAG_foo ' ' DWTAGfoo '
+id ' DW\_TAG\_foo ' ' DW\_TAG\_foo ' ' DW_TAG_foo ' ' DWTAGfoo '
other ' , ' ' , ' ' , ' ' , '
ind ' '
-id ' DW\_AT_foo ' ' DW\_AT_foo ' ' DW_AT_foo ' ' DWATfoo '
+id ' DW\_AT\_foo ' ' DW\_AT\_foo ' ' DW_AT_foo ' ' DWATfoo '
other ' , ' ' , ' ' , ' ' , '
ind ' '
Number of tokens in line 3 : 8
ind ' '
id ' DW\_OP_foo ' ' DW\_OP_foo ' ' DW_OP_foo ' ' DWOPfoo '
other ' , ' ' , ' ' , ' ' , '
-Number of tokens in line 4 : 18
+Number of tokens in line 4 : 1
+id ' DW\_TAG ' ' DW\_TAG ' ' DW_TAG ' ' DWTAG '
+Number of tokens in line 5 : 1
+id ' DW\_TAG_ ' ' DW\_TAG_ ' ' DW_TAG_ ' ' DWTAG '
+Number of tokens in line 6 : 18
id ' DW\_LANG ' ' DW\_LANG ' ' DW_LANG ' ' DWLANG '
other ' , ' ' , ' ' , ' ' , '
ind ' '
id ' followed ' ' followed ' ' followed ' ' followed '
ind ' '
id ' by ' ' by ' ' by ' ' by '
-Number of tokens in line 5 : 6
+Number of tokens in line 7 : 6
id ' \_lo\_user ' ' \_lo\_user ' ' _lo_user ' ' louser '
ind ' '
id ' or ' ' or ' ' or ' ' or '
ind ' '
id ' \_hi\_user ' ' \_hi\_user ' ' _hi_user ' ' hiuser '
other ' . ' ' . ' ' . ' ' . '
-Number of tokens in line 6 : 0
+Number of tokens in line 8 : 0
-Number of tokens in line 7 : 1
+Number of tokens in line 9 : 1
id ' \endlastfoot ' ' \endlastfoot ' ' \endlastfoot ' ' \endlastfoot '
-Number of tokens in line 8 : 7
+Number of tokens in line 10 : 9
id ' \livelink ' ' \livelink ' ' \livelink ' ' \livelink '
ind ' { '
id ' chap:DWTAGaccessdeclaration ' ' chap:DWTAGaccessdeclaration ' ' chap:DWTAGaccessdeclaration ' ' chap:DWTAGaccessdeclaration '
ind ' } '
ind ' { '
+ind ' '
+ind ' '
id ' DW\-\_TAG\-\_access\-\_declaration ' ' DW\_TAG\_access\_declaration ' ' DW_TAG_access_declaration ' ' DWTAGaccessdeclaration '
ind ' } '
-Number of tokens in line 9 : 5
+Number of tokens in line 11 : 5
other ' & ' ' & ' ' & ' ' & '
ind ' '
id ' DECL ' ' DECL ' ' DECL ' ' DECL '
ind ' '
id ' \\ ' ' \\ ' ' \\ ' ' \\ '
-Number of tokens in line 10 : 0
+Number of tokens in line 12 : 0
-Number of tokens in line 11 : 0
+Number of tokens in line 13 : 0
-Number of tokens in line 12 : 9
+Number of tokens in line 14 : 9
id ' information ' ' information ' ' information ' ' information '
ind ' '
id ' entry ' ' entry ' ' entry ' ' entry '
id ' the ' ' the ' ' the ' ' the '
ind ' '
id ' tag ' ' tag ' ' tag ' ' tag '
-Number of tokens in line 13 : 8
+Number of tokens in line 15 : 8
id ' \livetarg ' ' \livetarg ' ' \livetarg ' ' \livetarg '
ind ' { '
id ' chap:DWTAGaccessdeclaration ' ' chap:DWTAGaccessdeclaration ' ' chap:DWTAGaccessdeclaration ' ' chap:DWTAGaccessdeclaration '
id ' DW\_TAG\_access\_declaration ' ' DW\_TAG\_access\_declaration ' ' DW_TAG_access_declaration ' ' DWTAGaccessdeclaration '
ind ' } '
other ' . ' ' . ' ' . ' ' . '
-Number of tokens in line 14 : 1
+Number of tokens in line 16 : 1
id ' Each ' ' Each ' ' Each ' ' Each '
-Number of tokens in line 15 : 24
+Number of tokens in line 17 : 24
id ' such ' ' such ' ' such ' ' such '
ind ' '
id ' entry ' ' entry ' ' entry ' ' entry '
ind ' '
id ' entry ' ' entry ' ' entry ' ' entry '
other ' . ' ' . ' ' . ' ' . '
-Number of tokens in line 16 : 0
+Number of tokens in line 18 : 0
-appropriate prefix (DW\_TAG_foo, DW\_AT_foo,
+appropriate prefix (DW\_TAG\_foo, DW\_AT\_foo,
DW\_END_line, DW\_ATE_x, DW\_OP_foo,
+DW\_TAG
+DW\_TAG_
DW\_LANG, DW\_LNE, DW\_CC or DW\_CFA respectively) followed by
\_lo\_user or \_hi\_user.
\endlastfoot
-\livelink{chap:DWTAGaccessdeclaration}{DW\-\_TAG\-\_access\-\_declaration}
+\livelink{chap:DWTAGaccessdeclaration}{ DW\-\_TAG\-\_access\-\_declaration}
& DECL \\
DW\_END_line, DW\_ATE_x, DW\_OP_foo,
DW\_LANG, DW\_LNE, DW\_CC or DW\_CFA respectively) followed by
\_lo\_user or \_hi\_user.
-this is \livelink{chap:macptr}{macptr} and \livelink{chap:block}{block} . Which should transform.
-this is \livelink{chap:address}{address} and \livelink{chap:string}{string} . Which should transform.
+this is \livelink{chap:macptr}{macptr} and block . Which should transform.
+this is address and string . Which should transform.
this should be untouched \livelink{chap:reference}{reference} for example.
this should be untouched \livetarg{chap:block}{block} for example.
this should be untouched \livetargi{chap:address}{address} for example.