Commit Graph

1064 Commits

Author SHA1 Message Date
Arnaldo Carvalho de Melo c178f4698d dwarves: Remove some more DWARF details from the core
Had to be a big sweeping change, but the regression tests shows just
improvements :-)

Now we stop using an id in struct tag, only storing the type, that now
uses 16 bits only, as CTF does.

Each format loader has to go on adding the types to the core, that
figures out if it is a tag that can be on the tag->type field
(tag__is_tag_type).

Formats that already have the types separated and in sequence, such as
CTF, just ask the core to insert in the types_table directly with its
original ID.

For DWARF, we ask the core to put it on the table, in sequence, and return the
index, that is then stashed with the DWARF specific info (original id, type,
decl_line, etc) and hashed by the original id. Later we recode everything,
looking up via the original type, getting the small_id to put on the tag->type.

The underlying debugging info not needed by the core is stashed in tag->priv,
and the DWARF loader now just allocates sizeof(struct dwarf_tag) at the end of
the core tag and points it there, and makes that info available thru
cu->orig_info. In the future we can ask, when loading a cu, that this info be
trown away, so that we reduce the memory footprint for big multi-cu files such
as the Linux kernel.

There is also a routine to ask for inserting a NULL, as we still have
bugs in the CTF decoding and thus some entries are being lost, to avoid
using an undefined pointer when traversing the types_table the ctf
loader puts a NULL there via cu__table_nullify_type_entry() and then
cu__for_each_type skips those.

There is some more cleanups for leftovers that I avoided cleaning to
reduce this changeset.

And also while doing this I saw that enums can appear without any
enumerators and that an array with DW_TAG_GNU_vector is actually a
different tag, encoded this way till we get to DWARF4 ;-)

So now we don't have to lookup on a hash table looking for DWARF
offsets, we can do the more sensible thing of just indexing the
types_tags array.

Now to do some cleanups and try to get the per cu encoder done. Then
order all the cus per number of type entries, pick the one with more,
then go on merging/recoding the types of the others and putting the
parent linkage in place.

Just to show the extent of the changes:

$ codiff /tmp/libdwarves.so.1.0.0 build/libdwarves.so.1.0.0
/home/acme/git/pahole/dwarves.c:
  struct cu                                      | -4048
  struct tag                                     |  -32
  struct ptr_to_member_type                      |  -32
  struct namespace                               |  -32
  struct type                                    |  -32
  struct class                                   |  -32
  struct base_type                               |  -32
  struct array_type                              |  -32
  struct class_member                            |  -32
  struct lexblock                                |  -32
  struct ftype                                   |  -32
  struct function                                |  -64
  struct parameter                               |  -32
  struct variable                                |  -32
  struct inline_expansion                        |  -32
  struct label                                   |  -32
  struct enumerator                              |  -32
 17 structs changed
  tag__follow_typedef                            |   +3
  tag__fprintf_decl_info                         |  +25
  array_type__fprintf                            |   +6
  type__name                                     | -126
  type__find_first_biggest_size_base_type_member |   -3
  typedef__fprintf                               |  +16
  imported_declaration__fprintf                  |   +6
  imported_module__fprintf                       |   +3
  cu__new                                        |  +26
  cu__delete                                     |  +26
  hashtags__hash                                 |  -65
  hash_64                                        | -124
  hlist_add_head                                 |  -78
  hashtags__find                                 | -157
  cu__hash                                       |  -80
  cu__add_tag                                    |  +20
  tag__prefix                                    |   -3
  cu__find_tag_by_id                             |   -2
  cu__find_type_by_id                            |   -3
  cu__find_first_typedef_of_type                 |  +38
  cu__find_base_type_by_name                     |  +68
  cu__find_base_type_by_name_and_size            |  +72
  cu__find_struct_by_name                        |  +59
  cus__find_struct_by_name                       |   +8
  cus__find_tag_by_id                            |   +5
  cus__find_cu_by_name                           |   -6
  lexblock__find_tag_by_id                       | -173
  cu__find_variable_by_id                        | -197
  list__find_tag_by_id                           | -308
  cu__find_parameter_by_id                       |  -60
  tag__ptr_name                                  |   +6
  tag__name                                      |  +15
  variable__type                                 |  +13
  variable__name                                 |   +7
  class_member__size                             |   +6
  parameter__name                                | -119
  tag__parameter                                 |  -14
  parameter__type                                | -143
  type__fprintf                                  |  -29
  union__fprintf                                 |   +6
  class__add_vtable_entry                        |   -9
  type__add_member                               |   -6
  type__clone_members                            |   -3
  enumeration__add                               |   -6
  function__name                                 | -156
  ftype__has_parm_of_type                        |  -39
  class__find_holes                              |  -27
  class__has_hole_ge                             |   -3
  type__nr_members_of_type                       |   +3
  lexblock__account_inline_expansions            |   +3
  cu__account_inline_expansions                  |  -18
  ftype__fprintf_parms                           |  +46
  function__tag_fprintf                          |  +24
  lexblock__fprintf                              |   -6
  ftype__fprintf                                 |   +3
  function__fprintf_stats                        |  -18
  function__size                                 |   -6
  class__vtable_fprintf                          |  -11
  class__fprintf                                 |  -21
  tag__fprintf                                   |  -35
 60 functions changed, 513 bytes added, 2054 bytes removed, diff: -1541

/home/acme/git/pahole/ctf_loader.c:
  struct ctf_short_type      |   +0
 14 structs changed
  type__init                 |  -14
  type__new                  |   -9
  class__new                 |  -12
  create_new_base_type       |   -7
  create_new_base_type_float |   -7
  create_new_array           |   -8
  create_new_subroutine_type |   -9
  create_full_members        |  -18
  create_short_members       |  -18
  create_new_class           |   +1
  create_new_union           |   +1
  create_new_enumeration     |  -19
  create_new_forward_decl    |   -2
  create_new_typedef         |   +3
  create_new_tag             |   -5
  load_types                 |  +16
  class__fixup_ctf_bitfields |   -3
 17 functions changed, 21 bytes added, 131 bytes removed, diff: -110

/home/acme/git/pahole/dwarf_loader.c:
 17 structs changed
  zalloc                           |  -56
  tag__init                        |   +3
  array_type__new                  |  +20
  type__init                       |  -24
  class_member__new                |  +46
  inline_expansion__new            |  +12
  class__new                       |  +81
  lexblock__init                   |  +19
  function__new                    |  +43
  die__create_new_array            |  +20
  die__create_new_parameter        |   +4
  die__create_new_label            |   +4
  die__create_new_subroutine_type  | +113
  die__create_new_enumeration      |  -21
  die__process_class               |  +79
  die__process_namespace           |  +76
  die__create_new_inline_expansion |   +4
  die__process_function            | +147
  __die__process_tag               |  +34
  die__process_unit                |  +56
  die__process                     |  +90
 21 functions changed, 851 bytes added, 101 bytes removed, diff: +750

/home/acme/git/pahole/dwarves.c:
  struct ptr_table             |  +16
  struct cu_orig_info          |  +32
 2 structs changed
  tag__decl_line               |  +68
  tag__decl_file               |  +70
  tag__orig_id                 |  +71
  ptr_table__init              |  +46
  ptr_table__exit              |  +37
  ptr_table__add               | +183
  ptr_table__add_with_id       | +165
  ptr_table__entry             |  +64
  cu__table_add_tag            | +171
  cu__table_nullify_type_entry |  +38
 10 functions changed, 913 bytes added, diff: +913

/home/acme/git/pahole/ctf_loader.c:
 2 structs changed
  tag__alloc          |  +52
 1 function changed, 52 bytes added, diff: +52

/home/acme/git/pahole/dwarf_loader.c:
  struct dwarf_tag                       |  +48
  struct dwarf_cu                        | +4104
 4 structs changed
  dwarf_cu__init                         |  +83
  hashtags__hash                         |  +61
  hash_64                                | +124
  hlist_add_head                         |  +78
  hashtags__find                         | +161
  cu__hash                               |  +95
  tag__is_tag_type                       | +171
  tag__is_type                           |  +85
  tag__is_union                          |  +28
  tag__is_struct                         |  +57
  tag__is_typedef                        |  +28
  tag__is_enumeration                    |  +28
  dwarf_cu__find_tag_by_id               |  +56
  dwarf_cu__find_type_by_id              |  +63
  tag__alloc                             | +114
  __tag__print_type_not_found            | +108
  namespace__recode_dwarf_types          | +346
  tag__namespace                         |  +14
  tag__has_namespace                     |  +86
  tag__is_namespace                      |  +28
  type__recode_dwarf_specification       | +182
  tag__type                              |  +14
  __tag__print_abstract_origin_not_found | +105
  ftype__recode_dwarf_types              | +322
  tag__ftype                             |  +14
  tag__parameter                         |  +14
  lexblock__recode_dwarf_types           | +736
  tag__lexblock                          |  +14
  tag__label                             |  +14
  tag__recode_dwarf_type                 | +766
  tag__ptr_to_member_type                |  +14
  cu__recode_dwarf_types_table           |  +88
  cu__recode_dwarf_types                 |  +48
  dwarf_tag__decl_file                   |  +77
  strings__ptr                           |  +33
  dwarf_tag__decl_line                   |  +59
  dwarf_tag__orig_id                     |  +59
  dwarf_tag__orig_type                   |  +59
 38 functions changed, 4432 bytes added, diff: +4432

build/libdwarves.so.1.0.0:
 147 functions changed, 6782 bytes added, 2286 bytes removed, diff: +4496

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-05 20:40:54 -03:00
Arnaldo Carvalho de Melo 2118fae5b0 dwarf_loader: DW_TAG_label can have DW_AT_abstract_origin
Do nothing for now, just to reduce the size of the upcoming
type recoding patch, aka dwarves undwarvification.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-05 18:21:06 -03:00
Arnaldo Carvalho de Melo d040419977 dwarf_loader: Accept empty enums, seen in the wild
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-05 16:46:14 -03:00
Arnaldo Carvalho de Melo f2a3b9afbc dwarves: Print arrays in tag__fprintf too
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-05 13:49:30 -03:00
Arnaldo Carvalho de Melo 005408d725 dwarf_loader: Optimize tag__init a bit
By avoiding tsearch calls, checking if the decl_file for the current tag
is the same for the last one, which is likely.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-03 23:16:28 -03:00
Arnaldo Carvalho de Melo 913aee45fc dwarves: Use hlist for the hashtables
Reducing the struct cu footprint by 4 Kb.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-03 22:24:05 -03:00
Arnaldo Carvalho de Melo bcb2e11dcf man-pages: Fixup typo
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-03 15:32:47 -03:00
Arnaldo Carvalho de Melo 93ae61a79b dwarves: Add missing bits of separate hash table for types
Grrr, the previous commit has the other bits, and as I already pushed it
out publicly... <BROWN PAPER BAG ALERT!> here goes the rests. So much
for bissectability. Sigh.

But the regression test showed only one problem, in C++ code, that I'll
fix in the next commits.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-03 15:29:06 -03:00
Arnaldo Carvalho de Melo 3f4e4457e2 dwarves: Add DW_TAG_ptr_to_member_type to tag__is_tag_type
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-03 15:12:29 -03:00
Arnaldo Carvalho de Melo 68acff0719 dwarves: Add DW_TAG_reference_type to tag__is_tag_type
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-03 14:56:38 -03:00
Arnaldo Carvalho de Melo 72eba67214 dwarves: Move hashtags__find out of cu__find_tag_by_id
Will be used by cu__find_type_by_id too.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-03 13:48:07 -03:00
Arnaldo Carvalho de Melo e710cca6bf dwarves: Introduce cu__hash
So that we can then decide in what hashtable we will add it, and this
also paves the way for a type array that will help us in reducing the
size of struct tag by removing the id field.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-03 13:37:57 -03:00
Arnaldo Carvalho de Melo d2d07eab08 dwarves: Introduce tag__is_tag_type
And comment the difference to tag__is_type:

tag__is_type == is this tag derived from the 'type' class?
tag__is_tag_type == is this tag a possible type for a tag, i.e.
                    one we will find in struct tag->type?

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-03 13:18:51 -03:00
Arnaldo Carvalho de Melo f169bac1cf dwarves: rename tag->refcnt to tag->visited and shrink it to 1 bit
As in fact it is used as a boolean in prefcnt and codiff.

$ codiff -V /tmp/pahole.old build/pahole
/home/acme/git/pahole/pahole.c:
  struct tag |   +0
   padding: +2
    refcnt
     removed: uint16_t              /*    56( 0)     2( 0) */
    recursivity_level
     from:    uint16_t              /*    58( 0)     2( 0) */
     to:      uint16_t              /*    56( 0)     2(15) */
    visited
     added:   uint16_t              /*    56(15)     2( 1) */
 1 struct changed

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-03 10:56:37 -03:00
Arnaldo Carvalho de Melo dc5592b844 codiff: Detect changes in padding and the number of holes/bit_holes
$ codiff -V /tmp/pahole.old build/pahole
/home/acme/git/pahole/pahole.c:
  struct tag |   +0
   padding: +2
    refcnt
     removed: uint16_t              /*    56( 0)     2( 0) */
    recursivity_level
     from:    uint16_t              /*    58( 0)     2( 0) */
     to:      uint16_t              /*    56( 0)     2(15) */
    visited
     added:   uint16_t              /*    56(15)     2( 1) */
 1 struct changed

Size is the same, but now we have padding (2 bytes).

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-03 10:55:25 -03:00
Arnaldo Carvalho de Melo 5850757671 codiff: improve detection removal and addition of members in structs
Consider this case:

$ codiff -V /tmp/pahole.old build/pahole
/home/acme/git/pahole/pahole.c:
  struct tag |   +0
    refcnt
     removed: uint16_t              /*    56( 0)     2( 0) */
    recursivity_level
     from:    uint16_t              /*    58( 0)     2( 0) */
     to:      uint16_t              /*    56( 0)     2(15) */
    used
     added:   uint16_t              /*    56(15)     2( 1) */
 1 struct changed

The number of members is the same and so is the size of the struct, but
'refcnt' was removed (in fact renamed to used) and 'used' was added.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-03 10:31:14 -03:00
Arnaldo Carvalho de Melo 415b9d1e28 dwarves: Introduce tag__has_namespace
This open coded sequence appears two times already, with more to come.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-03 09:38:27 -03:00
Arnaldo Carvalho de Melo bf14e0d220 reorganize: cu__find_base_type_of_size should look for alternative CTF base type names
Unfortunately the most common DWARF and CTF encoders don't agree on how
the names of base types are formed, so look for an alternative name.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-02 16:07:43 -03:00
Arnaldo Carvalho de Melo bff71347bc ctf: No need to concat "char " if attrs & CTF_TYPE_INT_CHAR is true
As most of the types comes with it already. Perhaps this was an
oversight and we will have to look if the name already has "char",
concat'ing only if it doesn't. We'll see...

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-02 16:06:15 -03:00
Arnaldo Carvalho de Melo 0e9e194cf0 ctf_loader: Fix up bitfields
The dwarves were implemented first for DWARF, so all the algorithms work
with class_member ->bit_size, ->bit_offset and expect the ->offset field
to be the same for all members of a bitfield, so fixup these fields
after loading a CTF section.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-02 12:24:35 -03:00
Arnaldo Carvalho de Melo 659611ee2f dwarves: Implement cu__find_base_type_by_name_and_size
Needed for CTF, where we can have many base types with name "unsigned",
but with different bit sizes, to implement bitfields.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-02 12:22:37 -03:00
Arnaldo Carvalho de Melo c3c942d730 ctf: Find out word size on the ELF header
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-03-01 20:02:14 -03:00
Arnaldo Carvalho de Melo a20b498dcd rpm: Own %{_datadir}/dwarves/
Fixing #473645

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-02-16 11:04:49 -03:00
Arnaldo Carvalho de Melo 3d2692a2b7 rpm: 1.7 changelog
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-02-13 11:53:28 -02:00
Arnaldo Carvalho de Melo f9d24098fc man-pages: Add URL for dwarves paper and info about where it is useful
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-02-13 11:52:58 -02:00
Arnaldo Carvalho de Melo 2a5d435053 man-pages: Add comments about CONFIG_DEBUG_INFO to pahole.1
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-02-13 11:35:24 -02:00
Arnaldo Carvalho de Melo 56be29c649 all: Add the --version
Using the argp tricks.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-02-13 10:57:23 -02:00
Arnaldo Carvalho de Melo 7b6c135e7c pahole: finally the beginnings of a man page
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-02-11 12:19:46 -02:00
Arnaldo Carvalho de Melo 698b8c136a pahole: Tell the user if no debugging information was found
Reported-by: Eric Paris <eparis@redhat.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-02-10 19:11:32 -02:00
Arnaldo Carvalho de Melo 138cc4739c dwarves: Don't pass argp to dwarf_loadfl
Now we just pass a NULL terminated array of filenames, since we got rid
of that ugly -e insertion hack.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-02-09 21:43:56 -02:00
Arnaldo Carvalho de Melo 3bbd1342b2 dwarf_loader: remove old ugly with_executable_option hack
Now we use dwfl_report_offline directly, having more control about the
whole process, not using anymore dwfl_standard_argp.

This also, semi magicly, makes it work with the built-in.o files
in the Linux kernel, that aggregates multiple object files and that
previously were failing with relocation problems.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2009-02-09 16:30:06 -02:00
Arnaldo Carvalho de Melo 5c398cb582 Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/acme/pahole 2008-12-26 12:20:16 -02:00
Arnaldo Carvalho de Melo a16e38d336 Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/acme/pahole 2008-12-05 10:37:02 -02:00
Arnaldo Carvalho de Melo f890ae7cc1 loaders: Process argp only once
This is still ugly, as the processing of argp was done on the loader so
that we can use the libdwfl argp processing, doing the tool argp
processing as a child. But then when we find out that there is no DWARF
info we fall back to another debugging format, with CTF being the only
other one supported as of now.

I used this scheme as when developing the CTF decoder and using pahole
on a binary with both CTF and DWARF info I would like to get the CTF
processed first.

So we still need some good refactoring here to get this sorted out in a
way that the user can specify the order of decoding, and perhaps even
ask for decoding _both_ and comparing if the results are the same, i.e.
if the (potentially subset of) information decoded from the first (that
may have less information: CTF) is the same as decoded from the second
(DWARF, more verbose).

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-12-01 13:47:52 -02:00
Arnaldo Carvalho de Melo 01db5b1374 cmake: check if in RHEL and ask for the same packages as in fedora if so
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-11-20 13:55:05 -02:00
Arnaldo Carvalho de Melo d2a128b810 cmake: 2.4.8 is enough
Tested in RHEL5.2

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-11-20 13:54:39 -02:00
Arnaldo Carvalho de Melo ce2219915d argp: check if child_inputs is NULL
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-11-18 14:09:13 -02:00
Arnaldo Carvalho de Melo bcf1c15d8b pahole: Fix structures__find, tfind returns a pointer, not the object we want
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-11-03 14:47:56 -02:00
Arnaldo Carvalho de Melo adb9d370d6 cmake: Check if distro is fedora and if so tell the package names that are missing
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-11-03 12:21:06 -02:00
Arnaldo Carvalho de Melo 943a241ea2 ctracer: update README.ctracer, f9 has the dwarves
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-10-29 08:54:53 -02:00
Arnaldo Carvalho de Melo 02b0f811b1 pahole: speed up structure lookup by name
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-10-28 18:56:47 -02:00
Arnaldo Carvalho de Melo 4d615b9e01 strings: Add strings__find and strings__cmp
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-10-24 14:20:37 -02:00
Arnaldo Carvalho de Melo 46a3bc4626 cmake: Add cmake_minimum_required
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-10-24 10:44:26 -02:00
Arnaldo Carvalho de Melo d4812cadd6 ctf_loader: hack to minimally use the argp passed
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-10-08 10:46:34 -03:00
Arnaldo Carvalho de Melo 19704cf67e pahole: Add new structures to the end of the list
So that they appear on the output in the same order as they
come from the original debugging info.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-10-08 10:03:58 -03:00
Arnaldo Carvalho de Melo cdf547f418 pdwtags: print pointers and base types too
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-10-07 21:18:29 -03:00
Arnaldo Carvalho de Melo 79f6c3fe40 ctf_loader: parse function type parameters
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-10-07 21:13:56 -03:00
Arnaldo Carvalho de Melo ede353e099 ctf_loader: ctf_array_nelems should be used directly
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-10-07 21:06:44 -03:00
Arnaldo Carvalho de Melo be30be91f5 gobuffer: Move the non string specific bits
Will be used while encoding the CTF sections.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-10-02 17:06:01 -03:00
Arnaldo Carvalho de Melo 212b994ab5 strings: Introduce the strings class
And make the dwarves use it, so that we can remove duplicate strings in
a multi-CU file (vmlinux anyone?) and have it ready for insertion in a
compressed DWARF format with just the types, or better, CTF or some new
compressed debugging info format.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-10-02 14:34:42 -03:00