This is the mail archive of the dwarf2@corp.sgi.com mailing list for the dwarf2 project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

New Proposal: Global Types section


The Problem
-----------

Although not true in C, in C++ all types with the same name in a
program must (by definition of the standard) represent the same type.

Some compilers (notably CompaQ C++ on Linux/Alpha) exploit this to
achieve compression of the DWARF by only emitting the full definition
of a type into the DWARF once. In all other places they emit an opaque
type, whose only useful content is a name and a byte size.

There is currently no simple way within DWARF of finding the concrete
definitions of types, so one is forced to scan all of the top level
entities in every compilation unit and parse the type definitions (at
least to the level of knowing their names).

This is exactly the same problem as is addressed for global data and
function symbols by the ".debug_pubnames" section.

The Solution
------------

By analogy with the ".debug_pubnames" section, I propose an optional
".debug_pubtypes" section. This is identical to the ".debug_pubnames"
section in format, but the names are the names of global types defined
in the relevant .debug_info section.

This section would only be be generated by DWARF producers which were
exploiting the optimisation described above to reduce DWARF size.

Edits
-----
(Working from the PDF document of 01/11/2000 4:38:43 pm)

Section 6.1 on page 37.

Add a third italicised paragraph.

  Similarly in languages in which the name of a type is guaranteed
  always to refer to the same concrete type (such as C++), a compiler
  may choose to elide type definitions in all compilation units except
  one. In this case the debugger needs a rapid way of locating the
  concrete type definition by name. As with the definition of global
  data objects this would require a search of all the top level type
  definitions in all of the compilation units in a program.

In the fourth paragraph change
  "To make lookup of program objects by name" => "To make lookup of
  program objects or types by name"

  Change "two different types" to "three different types"

In 6.1.1
  Change the first sentence of first para
  "For lookup by name," => "For lookup of global symbols by name"

  Before 6.1.2 add a new para

  For lookup of global types by name a table is maintained in a
  spearate object file section called ".debug_pubtypes". This table is
  identical in format to the ".debug_pubnames" section described
  above, however it describes global top level type definitions,
  rather than program objects.


That's all folks ;-)

-- Jim 

James Cownie	<jcownie@etnus.com>
Etnus, Inc.     +44 117 9071438
http://www.etnus.com







Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]