* [RFA] Add dwarf2 support to xcoff (aix)
@ 2011-05-23 10:29 Tristan Gingold
2011-05-23 10:29 ` [PATCH 2/4] dwarf2read.c: handle alternate dwarf2 debug sections name Tristan Gingold
` (4 more replies)
0 siblings, 5 replies; 25+ messages in thread
From: Tristan Gingold @ 2011-05-23 10:29 UTC (permalink / raw)
To: gdb-patches
Hi,
with AIX 7, the xcoff binary file format now supports dwarf2. This is a
huge step forward as the previous debugging format was a varation of stabs.
But (and there is always a but) this is not fully standard dwarf2 as the
section names differ. The first two patches deal with that in the most
elegant way I could figure.
The last two patches simply add the dwarf2 support for xcoff.
Manually tested on AIX.
No regressions on gnu/linux x86-64.
Ok for trunk ?
Tristan.
^ permalink raw reply [flat|nested] 25+ messages in thread* [PATCH 2/4] dwarf2read.c: handle alternate dwarf2 debug sections name. 2011-05-23 10:29 [RFA] Add dwarf2 support to xcoff (aix) Tristan Gingold @ 2011-05-23 10:29 ` Tristan Gingold 2011-05-23 15:22 ` Tom Tromey 2011-05-23 15:40 ` Tom Tromey 2011-05-23 10:29 ` [PATCH 1/4] Really make dwarf2_get_section_info public Tristan Gingold ` (3 subsequent siblings) 4 siblings, 2 replies; 25+ messages in thread From: Tristan Gingold @ 2011-05-23 10:29 UTC (permalink / raw) To: gdb-patches; +Cc: Tristan Gingold Unfortunately, some object file format cannot accept the standard dwarf2 debug section names. This is in particular the case of XCOFF (aix), which has only 8 chars section names. In order to support dwarf2 on aix, we need to allow alternate section names. The change is in fact simple as sections are localized by the dwarf2_has_info function. So I added a new parameter to this function to accept alternate names. In order to make this obvious, the value NULL means standard names. The alternate names is a record of 2 entries: one for normal section and one for uncompressed section. gdb/ 2011-05-23 Tristan Gingold <gingold@adacore.com> * symfile.h (struct dwarf2_section_names): New type. (struct dwarf2_debug_sections): New type. (dwarf2_has_info): Add parameter. * dwarf2read.c (dwarf2_elf_names): New variable. (INFO_SECTION, ABBREV_SECTION, LINE_SECTION, LOC_SECTION) (MACINFO_SECTION, STR_SECTION, RANGES_SECTION, TYPES_SECTION) (FRAME_SECTION, EH_FRAME_SECTION, GDB_INDEX_SECTION): Remove. (dwarf2_has_info): Add names parameter. Pass names to dwarf2_locate_sections. (section_is_p): Rewrite using the names parameter. (dwarf2_locate_sections): Use section names from the names parameter. * coffread.c (coff_symfile_read): Adjust call to dwarf2_has_info. * elfread.c (read_psyms): Ditto. * machoread.c (macho_symfile_read): Ditto. --- gdb/coffread.c | 2 +- gdb/dwarf2read.c | 85 ++++++++++++++++++++++++++++++++--------------------- gdb/elfread.c | 4 +- gdb/machoread.c | 4 +- gdb/symfile.h | 24 ++++++++++++++- 5 files changed, 79 insertions(+), 40 deletions(-) diff --git a/gdb/coffread.c b/gdb/coffread.c index b11dd73..16fd58f 100644 --- a/gdb/coffread.c +++ b/gdb/coffread.c @@ -637,7 +637,7 @@ coff_symfile_read (struct objfile *objfile, int symfile_flags) info->stabsects, info->stabstrsect->filepos, stabstrsize); } - if (dwarf2_has_info (objfile)) + if (dwarf2_has_info (objfile, NULL)) { /* DWARF2 sections. */ dwarf2_build_psymtabs (objfile); diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 2003c46..7495d1f 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -243,22 +243,24 @@ struct dwarf2_per_objfile static struct dwarf2_per_objfile *dwarf2_per_objfile; -/* names of the debugging sections */ +/* Default names of the debugging sections. */ /* Note that if the debugging section has been compressed, it might have a name like .zdebug_info. */ -#define INFO_SECTION "debug_info" -#define ABBREV_SECTION "debug_abbrev" -#define LINE_SECTION "debug_line" -#define LOC_SECTION "debug_loc" -#define MACINFO_SECTION "debug_macinfo" -#define STR_SECTION "debug_str" -#define RANGES_SECTION "debug_ranges" -#define TYPES_SECTION "debug_types" -#define FRAME_SECTION "debug_frame" -#define EH_FRAME_SECTION "eh_frame" -#define GDB_INDEX_SECTION "gdb_index" +static const struct dwarf2_debug_sections dwarf2_elf_names = { + { ".debug_info", ".zdebug_info" }, + { ".debug_abbrev", ".zdebug_abbrev" }, + { ".debug_line", ".zdebug_line" }, + { ".debug_loc", ".zdebug_loc" }, + { ".debug_macinfo", ".zdebug_macinfo" }, + { ".debug_str", ".zdebug_str" }, + { ".debug_ranges", ".zdebug_ranges" }, + { ".debug_types", ".zdebug_types" }, + { ".debug_frame", ".zdebug_frame" }, + { ".eh_frame", NULL }, + { ".gdb_index", ".zgdb_index" } +}; /* local data types */ @@ -1338,10 +1340,13 @@ static const char *dwarf2_physname (char *name, struct die_info *die, struct dwarf2_cu *cu); /* Try to locate the sections we need for DWARF 2 debugging - information and return true if we have enough to do something. */ + information and return true if we have enough to do something. + NAMES points to the dwarf2 section names, or is NULL if the standard + ELF names are used. */ int -dwarf2_has_info (struct objfile *objfile) +dwarf2_has_info (struct objfile *objfile, + const struct dwarf2_debug_sections *names) { dwarf2_per_objfile = objfile_data (objfile, dwarf2_objfile_data_key); if (!dwarf2_per_objfile) @@ -1354,23 +1359,28 @@ dwarf2_has_info (struct objfile *objfile) set_objfile_data (objfile, dwarf2_objfile_data_key, data); dwarf2_per_objfile = data; - bfd_map_over_sections (objfile->obfd, dwarf2_locate_sections, NULL); + bfd_map_over_sections (objfile->obfd, dwarf2_locate_sections, + (void *)names); dwarf2_per_objfile->objfile = objfile; } return (dwarf2_per_objfile->info.asection != NULL && dwarf2_per_objfile->abbrev.asection != NULL); } -/* When loading sections, we can either look for ".<name>", or for - * ".z<name>", which indicates a compressed section. */ +/* When loading sections, we look either for uncompressed section or for + compressed section names. */ static int -section_is_p (const char *section_name, const char *name) +section_is_p (const char *section_name, + const struct dwarf2_section_names *names) { - return (section_name[0] == '.' - && (strcmp (section_name + 1, name) == 0 - || (section_name[1] == 'z' - && strcmp (section_name + 2, name) == 0))); + if (names->normal != NULL + && strcmp (section_name, names->normal) == 0) + return 1; + if (names->compressed != NULL + && strcmp (section_name, names->compressed) == 0) + return 1; + return 0; } /* This function is mapped across the sections and remembers the @@ -1378,44 +1388,51 @@ section_is_p (const char *section_name, const char *name) in. */ static void -dwarf2_locate_sections (bfd *abfd, asection *sectp, void *ignore_ptr) +dwarf2_locate_sections (bfd *abfd, asection *sectp, void *vnames) { - if (section_is_p (sectp->name, INFO_SECTION)) + const struct dwarf2_debug_sections *names; + + if (vnames == NULL) + names = &dwarf2_elf_names; + else + names = (const struct dwarf2_debug_sections *)vnames; + + if (section_is_p (sectp->name, &names->info)) { dwarf2_per_objfile->info.asection = sectp; dwarf2_per_objfile->info.size = bfd_get_section_size (sectp); } - else if (section_is_p (sectp->name, ABBREV_SECTION)) + else if (section_is_p (sectp->name, &names->abbrev)) { dwarf2_per_objfile->abbrev.asection = sectp; dwarf2_per_objfile->abbrev.size = bfd_get_section_size (sectp); } - else if (section_is_p (sectp->name, LINE_SECTION)) + else if (section_is_p (sectp->name, &names->line)) { dwarf2_per_objfile->line.asection = sectp; dwarf2_per_objfile->line.size = bfd_get_section_size (sectp); } - else if (section_is_p (sectp->name, LOC_SECTION)) + else if (section_is_p (sectp->name, &names->loc)) { dwarf2_per_objfile->loc.asection = sectp; dwarf2_per_objfile->loc.size = bfd_get_section_size (sectp); } - else if (section_is_p (sectp->name, MACINFO_SECTION)) + else if (section_is_p (sectp->name, &names->macinfo)) { dwarf2_per_objfile->macinfo.asection = sectp; dwarf2_per_objfile->macinfo.size = bfd_get_section_size (sectp); } - else if (section_is_p (sectp->name, STR_SECTION)) + else if (section_is_p (sectp->name, &names->str)) { dwarf2_per_objfile->str.asection = sectp; dwarf2_per_objfile->str.size = bfd_get_section_size (sectp); } - else if (section_is_p (sectp->name, FRAME_SECTION)) + else if (section_is_p (sectp->name, &names->frame)) { dwarf2_per_objfile->frame.asection = sectp; dwarf2_per_objfile->frame.size = bfd_get_section_size (sectp); } - else if (section_is_p (sectp->name, EH_FRAME_SECTION)) + else if (section_is_p (sectp->name, &names->eh_frame)) { flagword aflag = bfd_get_section_flags (ignore_abfd, sectp); @@ -1425,17 +1442,17 @@ dwarf2_locate_sections (bfd *abfd, asection *sectp, void *ignore_ptr) dwarf2_per_objfile->eh_frame.size = bfd_get_section_size (sectp); } } - else if (section_is_p (sectp->name, RANGES_SECTION)) + else if (section_is_p (sectp->name, &names->ranges)) { dwarf2_per_objfile->ranges.asection = sectp; dwarf2_per_objfile->ranges.size = bfd_get_section_size (sectp); } - else if (section_is_p (sectp->name, TYPES_SECTION)) + else if (section_is_p (sectp->name, &names->types)) { dwarf2_per_objfile->types.asection = sectp; dwarf2_per_objfile->types.size = bfd_get_section_size (sectp); } - else if (section_is_p (sectp->name, GDB_INDEX_SECTION)) + else if (section_is_p (sectp->name, &names->gdb_index)) { dwarf2_per_objfile->gdb_index.asection = sectp; dwarf2_per_objfile->gdb_index.size = bfd_get_section_size (sectp); diff --git a/gdb/elfread.c b/gdb/elfread.c index 6c6a7af..825df0f 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -1391,7 +1391,7 @@ elf_symfile_read (struct objfile *objfile, int symfile_flags) bfd_section_size (abfd, str_sect)); } - if (dwarf2_has_info (objfile)) + if (dwarf2_has_info (objfile, NULL)) { /* elf_sym_fns_gdb_index cannot handle simultaneous non-DWARF debug information present in OBJFILE. If there is such debug info present @@ -1437,7 +1437,7 @@ elf_symfile_read (struct objfile *objfile, int symfile_flags) static void read_psyms (struct objfile *objfile) { - if (dwarf2_has_info (objfile)) + if (dwarf2_has_info (objfile, NULL)) dwarf2_build_psymtabs (objfile); } diff --git a/gdb/machoread.c b/gdb/machoread.c index 28cb958..1cfa21e 100644 --- a/gdb/machoread.c +++ b/gdb/machoread.c @@ -660,7 +660,7 @@ macho_symfile_read (struct objfile *objfile, int symfile_flags) /* Try to read .eh_frame / .debug_frame. */ /* First, locate these sections. We ignore the result status as it only checks for debug info. */ - dwarf2_has_info (objfile); + dwarf2_has_info (objfile, NULL); dwarf2_build_frame_info (objfile); /* Check for DSYM file. */ @@ -702,7 +702,7 @@ macho_symfile_read (struct objfile *objfile, int symfile_flags) } } - if (dwarf2_has_info (objfile)) + if (dwarf2_has_info (objfile, NULL)) { /* DWARF 2 sections */ dwarf2_build_psymtabs (objfile); diff --git a/gdb/symfile.h b/gdb/symfile.h index 83e807c..e6c4613 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -553,7 +553,29 @@ extern struct cleanup *increment_reading_symtab (void); /* From dwarf2read.c */ -extern int dwarf2_has_info (struct objfile *); +/* Name of the dwarf2 sections. */ + +struct dwarf2_section_names { + const char *normal; + const char *compressed; +}; + +struct dwarf2_debug_sections { + struct dwarf2_section_names info; + struct dwarf2_section_names abbrev; + struct dwarf2_section_names line; + struct dwarf2_section_names loc; + struct dwarf2_section_names macinfo; + struct dwarf2_section_names str; + struct dwarf2_section_names ranges; + struct dwarf2_section_names types; + struct dwarf2_section_names frame; + struct dwarf2_section_names eh_frame; + struct dwarf2_section_names gdb_index; +}; + +extern int dwarf2_has_info (struct objfile *, + const struct dwarf2_debug_sections *); /* Dwarf2 sections that can be accessed by dwarf2_get_section_info. */ enum dwarf2_section_enum { -- 1.7.3.GIT ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 2/4] dwarf2read.c: handle alternate dwarf2 debug sections name. 2011-05-23 10:29 ` [PATCH 2/4] dwarf2read.c: handle alternate dwarf2 debug sections name Tristan Gingold @ 2011-05-23 15:22 ` Tom Tromey 2011-05-23 15:32 ` Tristan Gingold 2011-05-23 15:40 ` Tom Tromey 1 sibling, 1 reply; 25+ messages in thread From: Tom Tromey @ 2011-05-23 15:22 UTC (permalink / raw) To: Tristan Gingold; +Cc: gdb-patches >>>>> "Tristan" == Tristan Gingold <gingold@adacore.com> writes: Tristan> Unfortunately, some object file format cannot accept the Tristan> standard dwarf2 debug section names. This is in particular the Tristan> case of XCOFF (aix), which has only 8 chars section names. In Tristan> order to support dwarf2 on aix, we need to allow alternate Tristan> section names. It seems reasonable to me, but I would like to understand why you took this route, rather than the section-name-remapping approach taken by bfd/mach-o.c. The mach-o approach has the nice quality that it is encapsulated in BFD. Tom ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 2/4] dwarf2read.c: handle alternate dwarf2 debug sections name. 2011-05-23 15:22 ` Tom Tromey @ 2011-05-23 15:32 ` Tristan Gingold 0 siblings, 0 replies; 25+ messages in thread From: Tristan Gingold @ 2011-05-23 15:32 UTC (permalink / raw) To: Tom Tromey; +Cc: gdb-patches On May 23, 2011, at 5:22 PM, Tom Tromey wrote: >>>>>> "Tristan" == Tristan Gingold <gingold@adacore.com> writes: > > Tristan> Unfortunately, some object file format cannot accept the > Tristan> standard dwarf2 debug section names. This is in particular the > Tristan> case of XCOFF (aix), which has only 8 chars section names. In > Tristan> order to support dwarf2 on aix, we need to allow alternate > Tristan> section names. > > It seems reasonable to me, but I would like to understand why you took > this route, rather than the section-name-remapping approach taken by > bfd/mach-o.c. > > The mach-o approach has the nice quality that it is encapsulated in BFD. Simply because the XCOFF maintainer was against this approach: http://sourceware.org/ml/binutils/2011-04/msg00364.html Both approach make sense... Thank you for the reviews. Tristan. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 2/4] dwarf2read.c: handle alternate dwarf2 debug sections name. 2011-05-23 10:29 ` [PATCH 2/4] dwarf2read.c: handle alternate dwarf2 debug sections name Tristan Gingold 2011-05-23 15:22 ` Tom Tromey @ 2011-05-23 15:40 ` Tom Tromey 2011-05-26 7:48 ` Tristan Gingold 1 sibling, 1 reply; 25+ messages in thread From: Tom Tromey @ 2011-05-23 15:40 UTC (permalink / raw) To: Tristan Gingold; +Cc: gdb-patches Tristan> Simply because the XCOFF maintainer was against this approach: Tristan> http://sourceware.org/ml/binutils/2011-04/msg00364.html I see. Onward, then. Also I see my other note was completely in error. Sigh. Sorry about that. I'll reply to that to eliminate confusion. I have a few nits with this patch, nothing serious. Tristan> + bfd_map_over_sections (objfile->obfd, dwarf2_locate_sections, Tristan> + (void *)names); Space after ")". Tristan> + names = (const struct dwarf2_debug_sections *)vnames; You shouldn't need the cast, but if for some reason you do, there should be a space after the ")". Tristan> +struct dwarf2_section_names { Tristan> + const char *normal; Tristan> + const char *compressed; Tristan> +}; Tristan> + Tristan> +struct dwarf2_debug_sections { These should both have introductory comments explaining the purpose of the structs. Ok with those changes. Tom ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 2/4] dwarf2read.c: handle alternate dwarf2 debug sections name. 2011-05-23 15:40 ` Tom Tromey @ 2011-05-26 7:48 ` Tristan Gingold 0 siblings, 0 replies; 25+ messages in thread From: Tristan Gingold @ 2011-05-26 7:48 UTC (permalink / raw) To: Tom Tromey; +Cc: gdb-patches On May 23, 2011, at 5:40 PM, Tom Tromey wrote: > Tristan> Simply because the XCOFF maintainer was against this approach: > Tristan> http://sourceware.org/ml/binutils/2011-04/msg00364.html > > I see. Onward, then. > > Also I see my other note was completely in error. Sigh. Sorry about > that. I'll reply to that to eliminate confusion. > > I have a few nits with this patch, nothing serious. > > > Tristan> + bfd_map_over_sections (objfile->obfd, dwarf2_locate_sections, > Tristan> + (void *)names); > > Space after ")". > > Tristan> + names = (const struct dwarf2_debug_sections *)vnames; > > You shouldn't need the cast, but if for some reason you do, there should > be a space after the ")". > > Tristan> +struct dwarf2_section_names { > Tristan> + const char *normal; > Tristan> + const char *compressed; > Tristan> +}; > Tristan> + > Tristan> +struct dwarf2_debug_sections { > > These should both have introductory comments explaining the purpose of > the structs. > > Ok with those changes. Thanks, committed with these changes. Tristan. ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 1/4] Really make dwarf2_get_section_info public. 2011-05-23 10:29 [RFA] Add dwarf2 support to xcoff (aix) Tristan Gingold 2011-05-23 10:29 ` [PATCH 2/4] dwarf2read.c: handle alternate dwarf2 debug sections name Tristan Gingold @ 2011-05-23 10:29 ` Tristan Gingold 2011-05-23 15:15 ` Tom Tromey 2011-05-23 10:29 ` [PATCH 4/4] bfd.c: hancle aixcoff in bfd_get_sign_extend_vma Tristan Gingold ` (2 subsequent siblings) 4 siblings, 1 reply; 25+ messages in thread From: Tristan Gingold @ 2011-05-23 10:29 UTC (permalink / raw) To: gdb-patches; +Cc: Tristan Gingold This patch is a preliminary clean-up. Instead of using the section name to get the section info, use an enum literal. It might be worth going farther and using an array of dwarf2_section_info in dwarf2_per_objfile (instead of record fields). I let this decision to maintainers. gdb/ 2011-05-23 Tristan Gingold <gingold@adacore.com> * symfile.h (enum dwarf2_section_enum): New type. (dwarf2_get_section_info): New prototype. * dwarf2read.c (dwarf2_get_section_info): Replace parameter section_name by sect. Use a switch to select the info. * dwarf2-frame.c (warf2_get_section_info): Remove prototype. (dwarf2_build_frame_info): Adjust calls to dwarf2_get_section_info. --- gdb/dwarf2-frame.c | 10 ++-------- gdb/dwarf2read.c | 20 +++++++++++++------- gdb/symfile.h | 11 +++++++++++ 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c index fe48713..9c329f9 100644 --- a/gdb/dwarf2-frame.c +++ b/gdb/dwarf2-frame.c @@ -2183,12 +2183,6 @@ Corrupt data in %s:%s; align 8 workaround apparently succeeded"), return ret; } \f - -/* Imported from dwarf2read.c. */ -extern void dwarf2_get_section_info (struct objfile *, const char *, - asection **, gdb_byte **, - bfd_size_type *); - static int qsort_fde_cmp (const void *a, const void *b) { @@ -2233,7 +2227,7 @@ dwarf2_build_frame_info (struct objfile *objfile) unit->dbase = 0; unit->tbase = 0; - dwarf2_get_section_info (objfile, ".eh_frame", + dwarf2_get_section_info (objfile, dwarf2_eh_frame, &unit->dwarf_frame_section, &unit->dwarf_frame_buffer, &unit->dwarf_frame_size); @@ -2269,7 +2263,7 @@ dwarf2_build_frame_info (struct objfile *objfile) } } - dwarf2_get_section_info (objfile, ".debug_frame", + dwarf2_get_section_info (objfile, dwarf2_debug_frame, &unit->dwarf_frame_section, &unit->dwarf_frame_buffer, &unit->dwarf_frame_size); diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 6558bfe..2003c46 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -1636,7 +1636,8 @@ dwarf2_section_size (struct objfile *objfile, SECTION_NAME. */ void -dwarf2_get_section_info (struct objfile *objfile, const char *section_name, +dwarf2_get_section_info (struct objfile *objfile, + enum dwarf2_section_enum sect, asection **sectp, gdb_byte **bufp, bfd_size_type *sizep) { @@ -1653,12 +1654,17 @@ dwarf2_get_section_info (struct objfile *objfile, const char *section_name, *sizep = 0; return; } - if (section_is_p (section_name, EH_FRAME_SECTION)) - info = &data->eh_frame; - else if (section_is_p (section_name, FRAME_SECTION)) - info = &data->frame; - else - gdb_assert_not_reached ("unexpected section"); + switch (sect) + { + case dwarf2_debug_frame: + info = &data->frame; + break; + case dwarf2_eh_frame: + info = &data->eh_frame; + break; + default: + gdb_assert_not_reached ("unexpected section"); + } dwarf2_read_section (objfile, info); diff --git a/gdb/symfile.h b/gdb/symfile.h index 3544475..83e807c 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -555,6 +555,17 @@ extern struct cleanup *increment_reading_symtab (void); extern int dwarf2_has_info (struct objfile *); +/* Dwarf2 sections that can be accessed by dwarf2_get_section_info. */ +enum dwarf2_section_enum { + dwarf2_debug_frame, + dwarf2_eh_frame +}; + +extern void dwarf2_get_section_info (struct objfile *, + enum dwarf2_section_enum, + asection **, gdb_byte **, + bfd_size_type *); + extern int dwarf2_initialize_objfile (struct objfile *); extern void dwarf2_build_psymtabs (struct objfile *); extern void dwarf2_build_frame_info (struct objfile *); -- 1.7.3.GIT ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Really make dwarf2_get_section_info public. 2011-05-23 10:29 ` [PATCH 1/4] Really make dwarf2_get_section_info public Tristan Gingold @ 2011-05-23 15:15 ` Tom Tromey 2011-05-24 12:41 ` Tristan Gingold 0 siblings, 1 reply; 25+ messages in thread From: Tom Tromey @ 2011-05-23 15:15 UTC (permalink / raw) To: Tristan Gingold; +Cc: gdb-patches >>>>> "Tristan" == Tristan Gingold <gingold@adacore.com> writes: Tristan> This patch is a preliminary clean-up. Instead of using the Tristan> section name to get the section info, use an enum literal. Looks reasonable, just one nit. Tristan> It might be worth going farther and using an array of Tristan> dwarf2_section_info in dwarf2_per_objfile (instead of record Tristan> fields). I let this decision to maintainers. I think it is fine as is. Tristan> +enum dwarf2_section_enum { Tristan> + dwarf2_debug_frame, Tristan> + dwarf2_eh_frame Tristan> +}; It is customary for enum constants to be upper-case. Ok with this change. Tom ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 1/4] Really make dwarf2_get_section_info public. 2011-05-23 15:15 ` Tom Tromey @ 2011-05-24 12:41 ` Tristan Gingold 0 siblings, 0 replies; 25+ messages in thread From: Tristan Gingold @ 2011-05-24 12:41 UTC (permalink / raw) To: Tom Tromey; +Cc: gdb-patches On May 23, 2011, at 5:15 PM, Tom Tromey wrote: >>>>>> "Tristan" == Tristan Gingold <gingold@adacore.com> writes: > > Tristan> This patch is a preliminary clean-up. Instead of using the > Tristan> section name to get the section info, use an enum literal. > > Looks reasonable, just one nit. > > Tristan> It might be worth going farther and using an array of > Tristan> dwarf2_section_info in dwarf2_per_objfile (instead of record > Tristan> fields). I let this decision to maintainers. > > I think it is fine as is. > > Tristan> +enum dwarf2_section_enum { > Tristan> + dwarf2_debug_frame, > Tristan> + dwarf2_eh_frame > Tristan> +}; > > It is customary for enum constants to be upper-case. > Ok with this change. Thank, committed with the enum constants in upper-case. Tristan. ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 4/4] bfd.c: hancle aixcoff in bfd_get_sign_extend_vma. 2011-05-23 10:29 [RFA] Add dwarf2 support to xcoff (aix) Tristan Gingold 2011-05-23 10:29 ` [PATCH 2/4] dwarf2read.c: handle alternate dwarf2 debug sections name Tristan Gingold 2011-05-23 10:29 ` [PATCH 1/4] Really make dwarf2_get_section_info public Tristan Gingold @ 2011-05-23 10:29 ` Tristan Gingold 2011-05-23 10:35 ` [PATCH 3/4] aix: add support for dwarf2 Tristan Gingold 2011-05-23 16:00 ` [RFA] Add dwarf2 support to xcoff (aix) Yao Qi 4 siblings, 0 replies; 25+ messages in thread From: Tristan Gingold @ 2011-05-23 10:29 UTC (permalink / raw) To: gdb-patches; +Cc: Tristan Gingold To be submitted on binutils@, attached for completness. bfd/ 2011-05-23 Tristan Gingold <gingold@adacore.com> * bfd.c (bfd_get_sign_extend_vma): Handle aixcoff. --- bfd/bfd.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/bfd/bfd.c b/bfd/bfd.c index c729d63..b3e2c47 100644 --- a/bfd/bfd.c +++ b/bfd/bfd.c @@ -1031,7 +1031,8 @@ bfd_get_sign_extend_vma (bfd *abfd) || strcmp (name, "pe-x86-64") == 0 || strcmp (name, "pei-x86-64") == 0 || strcmp (name, "pe-arm-wince-little") == 0 - || strcmp (name, "pei-arm-wince-little") == 0) + || strcmp (name, "pei-arm-wince-little") == 0 + || strcmp (name, "aixcoff-rs6000") == 0) return 1; if (CONST_STRNEQ (name, "mach-o")) -- 1.7.3.GIT ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 3/4] aix: add support for dwarf2. 2011-05-23 10:29 [RFA] Add dwarf2 support to xcoff (aix) Tristan Gingold ` (2 preceding siblings ...) 2011-05-23 10:29 ` [PATCH 4/4] bfd.c: hancle aixcoff in bfd_get_sign_extend_vma Tristan Gingold @ 2011-05-23 10:35 ` Tristan Gingold 2011-05-23 15:35 ` Tom Tromey 2011-05-23 15:50 ` Tom Tromey 2011-05-23 16:00 ` [RFA] Add dwarf2 support to xcoff (aix) Yao Qi 4 siblings, 2 replies; 25+ messages in thread From: Tristan Gingold @ 2011-05-23 10:35 UTC (permalink / raw) To: gdb-patches; +Cc: Tristan Gingold This patch simply adds support for dwarf2 to AIX. This is a matter of calling the dwarf2 reader with the xcoff dwarf2 section names. gdb/ 2011-05-23 Tristan Gingold <gingold@adacore.com> * xcoffread.c (dwarf2_xcoff_names): New variable. (aix_process_linenos): Add a guard. (xcoff_symfile_finish): Free dwarf2. (xcoff_initial_scan): Add dwarf2 support. --- gdb/xcoffread.c | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+), 0 deletions(-) diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 23decae..bf3a9ec 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -152,6 +152,22 @@ struct coff_symfile_info CORE_ADDR toc_offset; }; +/* XCOFF names for dwarf sections. There is no compressed sections. */ + +static const struct dwarf2_debug_sections dwarf2_xcoff_names = { + { ".dwinfo", NULL }, + { ".dwabrev", NULL }, + { ".dwline", NULL }, + { ".dwloc", NULL }, + { NULL, NULL }, /* debug_macinfo */ + { ".dwstr", NULL }, + { ".dwrnges", NULL }, + { NULL, NULL }, /* debug_types */ + { ".dwframe", NULL }, + { NULL, NULL }, /* eh_frame */ + { NULL, NULL } /* gdb_index */ +}; + static void bf_notfound_complaint (void) { @@ -757,6 +773,9 @@ return_after_cleanup: static void aix_process_linenos (void) { + if (this_symtab_psymtab == NULL) + return; + /* Process line numbers and enter them into line vector. */ process_linenos (last_source_start_addr, cur_src_end_addr); } @@ -1910,6 +1929,8 @@ xcoff_symfile_finish (struct objfile *objfile) inclTable = NULL; } inclIndx = inclLength = inclDepth = 0; + + dwarf2_free_objfile (objfile); } @@ -3022,6 +3043,13 @@ xcoff_initial_scan (struct objfile *objfile, int symfile_flags) install_minimal_symbols (objfile); + /* DWARF2 sections. */ + + if (dwarf2_has_info (objfile, &dwarf2_xcoff_names)) + dwarf2_build_psymtabs (objfile); + + dwarf2_build_frame_info (objfile); + do_cleanups (back_to); } \f -- 1.7.3.GIT ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] aix: add support for dwarf2. 2011-05-23 10:35 ` [PATCH 3/4] aix: add support for dwarf2 Tristan Gingold @ 2011-05-23 15:35 ` Tom Tromey 2011-05-23 15:42 ` Tom Tromey 2011-05-23 15:50 ` Tom Tromey 1 sibling, 1 reply; 25+ messages in thread From: Tom Tromey @ 2011-05-23 15:35 UTC (permalink / raw) To: Tristan Gingold; +Cc: gdb-patches >>>>> "Tristan" == Tristan Gingold <gingold@adacore.com> writes: Tristan> +static const struct dwarf2_debug_sections dwarf2_xcoff_names = { Tristan> + { ".dwinfo", NULL }, Tristan> + { ".dwabrev", NULL }, Tristan> + { ".dwline", NULL }, Tristan> + { ".dwloc", NULL }, Tristan> + { NULL, NULL }, /* debug_macinfo */ Tristan> + { ".dwstr", NULL }, Tristan> + { ".dwrnges", NULL }, Tristan> + { NULL, NULL }, /* debug_types */ Tristan> + { ".dwframe", NULL }, Tristan> + { NULL, NULL }, /* eh_frame */ Tristan> + { NULL, NULL } /* gdb_index */ Tristan> +}; I don't like this approach, because it requires some non-obvious code synchronization between this struct and dwarf2read. I think some kind of name mapping approach would be preferable -- that way, we would be free to change dwarf2read without needing to update structs in other parts of gdb. If you don't want to do this in BFD, I think it would be fine to do it locally in gdb. What do you think? Tom ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] aix: add support for dwarf2. 2011-05-23 15:35 ` Tom Tromey @ 2011-05-23 15:42 ` Tom Tromey 2011-05-23 15:47 ` Tristan Gingold 0 siblings, 1 reply; 25+ messages in thread From: Tom Tromey @ 2011-05-23 15:42 UTC (permalink / raw) To: Tristan Gingold; +Cc: gdb-patches Tom> I don't like this approach, because it requires some non-obvious code Tom> synchronization between this struct and dwarf2read. No, I'm pretty wrong here. Reordering the struct would indeed cause problems, because all the fields have the same type -- but this is also not a very likely transformation. Adding or removing a field should be ok, which is what matters. I don't think this is such a big deal after all. Tom ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] aix: add support for dwarf2. 2011-05-23 15:42 ` Tom Tromey @ 2011-05-23 15:47 ` Tristan Gingold 0 siblings, 0 replies; 25+ messages in thread From: Tristan Gingold @ 2011-05-23 15:47 UTC (permalink / raw) To: Tom Tromey; +Cc: gdb-patches On May 23, 2011, at 5:42 PM, Tom Tromey wrote: > Tom> I don't like this approach, because it requires some non-obvious code > Tom> synchronization between this struct and dwarf2read. > > No, I'm pretty wrong here. Reordering the struct would indeed cause > problems, because all the fields have the same type -- but this is also > not a very likely transformation. Adding or removing a field should be > ok, which is what matters. I don't think this is such a big deal after > all. Ok, thank you for reconsidering your note. That's nice. Tristan. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] aix: add support for dwarf2. 2011-05-23 10:35 ` [PATCH 3/4] aix: add support for dwarf2 Tristan Gingold 2011-05-23 15:35 ` Tom Tromey @ 2011-05-23 15:50 ` Tom Tromey 2011-05-24 7:20 ` Tristan Gingold 1 sibling, 1 reply; 25+ messages in thread From: Tom Tromey @ 2011-05-23 15:50 UTC (permalink / raw) To: Tristan Gingold; +Cc: gdb-patches >>>>> "Tristan" == Tristan Gingold <gingold@adacore.com> writes: Tristan> static void Tristan> aix_process_linenos (void) Tristan> { Tristan> + if (this_symtab_psymtab == NULL) Tristan> + return; I don't understand this change. The rest looks ok to me. Tom ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] aix: add support for dwarf2. 2011-05-23 15:50 ` Tom Tromey @ 2011-05-24 7:20 ` Tristan Gingold 2011-05-24 13:37 ` Tom Tromey 0 siblings, 1 reply; 25+ messages in thread From: Tristan Gingold @ 2011-05-24 7:20 UTC (permalink / raw) To: Tom Tromey; +Cc: gdb-patches On May 23, 2011, at 5:49 PM, Tom Tromey wrote: >>>>>> "Tristan" == Tristan Gingold <gingold@adacore.com> writes: > > Tristan> static void > Tristan> aix_process_linenos (void) > Tristan> { > Tristan> + if (this_symtab_psymtab == NULL) > Tristan> + return; > > I don't understand this change. This is just a guard. process_linenos (called by aix_process_linenos) will dereference this_symtab_psymtab, which is set by read_xcoff_symtab. However, if the psymtab is built by dwarf2, the variable will never be initialized. Do you think the issue is somewhere else ? > > The rest looks ok to me. Thank you for reviewing. Tristan. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] aix: add support for dwarf2. 2011-05-24 7:20 ` Tristan Gingold @ 2011-05-24 13:37 ` Tom Tromey 2011-05-24 13:44 ` Tristan Gingold 2011-06-01 15:37 ` Tristan Gingold 0 siblings, 2 replies; 25+ messages in thread From: Tom Tromey @ 2011-05-24 13:37 UTC (permalink / raw) To: Tristan Gingold; +Cc: gdb-patches >>>>> "Tristan" == Tristan Gingold <gingold@adacore.com> writes: Tristan> + if (this_symtab_psymtab == NULL) Tristan> + return; Tom> I don't understand this change. Tristan> This is just a guard. process_linenos (called by Tristan> aix_process_linenos) will dereference this_symtab_psymtab, Tristan> which is set by read_xcoff_symtab. However, if the psymtab is Tristan> built by dwarf2, the variable will never be initialized. Tristan> Do you think the issue is somewhere else ? It is very unclear to me whether this can be non-NULL even with DWARF. In the DWARF case wouldn't the line information come from the DWARF line table? In which case it seems like xcoffread.c should have a second struct sym_fns, with a NULL entry for this method. Tom ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] aix: add support for dwarf2. 2011-05-24 13:37 ` Tom Tromey @ 2011-05-24 13:44 ` Tristan Gingold 2011-05-24 14:56 ` Tom Tromey 2011-06-01 15:37 ` Tristan Gingold 1 sibling, 1 reply; 25+ messages in thread From: Tristan Gingold @ 2011-05-24 13:44 UTC (permalink / raw) To: Tom Tromey; +Cc: gdb-patches On May 24, 2011, at 3:36 PM, Tom Tromey wrote: >>>>>> "Tristan" == Tristan Gingold <gingold@adacore.com> writes: > > Tristan> + if (this_symtab_psymtab == NULL) > Tristan> + return; > > Tom> I don't understand this change. > > Tristan> This is just a guard. process_linenos (called by > Tristan> aix_process_linenos) will dereference this_symtab_psymtab, > Tristan> which is set by read_xcoff_symtab. However, if the psymtab is > Tristan> built by dwarf2, the variable will never be initialized. > > Tristan> Do you think the issue is somewhere else ? > > It is very unclear to me whether this can be non-NULL even with DWARF. > In the DWARF case wouldn't the line information come from the DWARF line > table? Yes, that's correct. DWARF line table will be used. > In which case it seems like xcoffread.c should have a second > struct sym_fns, with a NULL entry for this method. But how would that work ? find_sym_fns finds the sym_fns struct according to the bfd flavour, and there is only one xcoff flavour. Tristan. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] aix: add support for dwarf2. 2011-05-24 13:44 ` Tristan Gingold @ 2011-05-24 14:56 ` Tom Tromey 2011-05-24 15:11 ` Tristan Gingold 0 siblings, 1 reply; 25+ messages in thread From: Tom Tromey @ 2011-05-24 14:56 UTC (permalink / raw) To: Tristan Gingold; +Cc: gdb-patches >>>>> "Tristan" == Tristan Gingold <gingold@adacore.com> writes: Tom> In which case it seems like xcoffread.c should have a second Tom> struct sym_fns, with a NULL entry for this method. Tristan> But how would that work ? find_sym_fns finds the sym_fns Tristan> struct according to the bfd flavour, and there is only one Tristan> xcoff flavour. You can change the pointer to an unregistered sym_fns. See how elfread.c handles this. I don't actually know anything about XCOFF or xcoffread.c. If you think your current approach is safe enough, I am ok with it. Tom ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] aix: add support for dwarf2. 2011-05-24 14:56 ` Tom Tromey @ 2011-05-24 15:11 ` Tristan Gingold 0 siblings, 0 replies; 25+ messages in thread From: Tristan Gingold @ 2011-05-24 15:11 UTC (permalink / raw) To: Tom Tromey; +Cc: gdb-patches On May 24, 2011, at 4:55 PM, Tom Tromey wrote: >>>>>> "Tristan" == Tristan Gingold <gingold@adacore.com> writes: > > Tom> In which case it seems like xcoffread.c should have a second > Tom> struct sym_fns, with a NULL entry for this method. > > Tristan> But how would that work ? find_sym_fns finds the sym_fns > Tristan> struct according to the bfd flavour, and there is only one > Tristan> xcoff flavour. > > You can change the pointer to an unregistered sym_fns. > See how elfread.c handles this. Thank you for the pointer. > I don't actually know anything about XCOFF or xcoffread.c. > If you think your current approach is safe enough, I am ok with it. Well, I think it is safe enough, but I'd prefer to clarify the point. Let me think about that a little bit. Tristan. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] aix: add support for dwarf2. 2011-05-24 13:37 ` Tom Tromey 2011-05-24 13:44 ` Tristan Gingold @ 2011-06-01 15:37 ` Tristan Gingold 2011-06-02 19:11 ` Tom Tromey 1 sibling, 1 reply; 25+ messages in thread From: Tristan Gingold @ 2011-06-01 15:37 UTC (permalink / raw) To: Tom Tromey; +Cc: gdb-patches On May 24, 2011, at 3:36 PM, Tom Tromey wrote: >>>>>> "Tristan" == Tristan Gingold <gingold@adacore.com> writes: > > Tristan> + if (this_symtab_psymtab == NULL) > Tristan> + return; > > Tom> I don't understand this change. > > Tristan> This is just a guard. process_linenos (called by > Tristan> aix_process_linenos) will dereference this_symtab_psymtab, > Tristan> which is set by read_xcoff_symtab. However, if the psymtab is > Tristan> built by dwarf2, the variable will never be initialized. > > Tristan> Do you think the issue is somewhere else ? > > It is very unclear to me whether this can be non-NULL even with DWARF. > In the DWARF case wouldn't the line information come from the DWARF line > table? In which case it seems like xcoffread.c should have a second > struct sym_fns, with a NULL entry for this method. Tom, here is my understanding of the issue. aix_process_linenos is called by end_symtab. In the case of a standard xcoff binary, a symtab is created only if debugging symbols are present and everything is consistent. In the case of an xcoff binary compiled without debug info, no symtab is created. In the case of a dwarf xcoff binary, a symtab is created (by dwarf2read), and the call to aix_process_linenos crashes because of a non-consistent state within xcoffread. I am not sure that we could have a second sym_fns, as an objfile can have both dwarf2 and stabs debug info. In fact this_symtab_psymtab is NULL with dwarf, as it is set only by read_xcoff_symtab, which is called only numsyms != 0. This happens only when linenos are present. I fear that adding a second sym_fns will be harder to manage than the proposed guard. What do you think ? Tristan. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] aix: add support for dwarf2. 2011-06-01 15:37 ` Tristan Gingold @ 2011-06-02 19:11 ` Tom Tromey 2011-06-07 12:32 ` Tristan Gingold 0 siblings, 1 reply; 25+ messages in thread From: Tom Tromey @ 2011-06-02 19:11 UTC (permalink / raw) To: Tristan Gingold; +Cc: gdb-patches >>>>> "Tristan" == Tristan Gingold <gingold@adacore.com> writes: Tristan> I fear that adding a second sym_fns will be harder to manage Tristan> than the proposed guard. Tristan> What do you think ? Your patch is fine by me. thanks, Tom ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 3/4] aix: add support for dwarf2. 2011-06-02 19:11 ` Tom Tromey @ 2011-06-07 12:32 ` Tristan Gingold 0 siblings, 0 replies; 25+ messages in thread From: Tristan Gingold @ 2011-06-07 12:32 UTC (permalink / raw) To: Tom Tromey; +Cc: gdb-patches On Jun 2, 2011, at 9:10 PM, Tom Tromey wrote: >>>>>> "Tristan" == Tristan Gingold <gingold@adacore.com> writes: > > Tristan> I fear that adding a second sym_fns will be harder to manage > Tristan> than the proposed guard. > > Tristan> What do you think ? > > Your patch is fine by me. Ok, committed with an additional comment in aix_process_linenos. Tristan. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [RFA] Add dwarf2 support to xcoff (aix) 2011-05-23 10:29 [RFA] Add dwarf2 support to xcoff (aix) Tristan Gingold ` (3 preceding siblings ...) 2011-05-23 10:35 ` [PATCH 3/4] aix: add support for dwarf2 Tristan Gingold @ 2011-05-23 16:00 ` Yao Qi 2011-05-24 7:06 ` Tristan Gingold 4 siblings, 1 reply; 25+ messages in thread From: Yao Qi @ 2011-05-23 16:00 UTC (permalink / raw) To: gdb-patches On 05/23/2011 06:29 PM, Tristan Gingold wrote: > Hi, > > with AIX 7, the xcoff binary file format now supports dwarf2. This is a > huge step forward as the previous debugging format was a varation of stabs. > > But (and there is always a but) this is not fully standard dwarf2 as the > section names differ. The first two patches deal with that in the most > elegant way I could figure. > > The last two patches simply add the dwarf2 support for xcoff. > > Manually tested on AIX. Is there any reason that prevent you running testsuite on AIX? If dwarf2 has been supported on AIX, we may have to add corresponding target triplet into proc dwarf2_support in testsuite/lib/dwarf.exp. -- Yao (é½å°§) ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [RFA] Add dwarf2 support to xcoff (aix) 2011-05-23 16:00 ` [RFA] Add dwarf2 support to xcoff (aix) Yao Qi @ 2011-05-24 7:06 ` Tristan Gingold 0 siblings, 0 replies; 25+ messages in thread From: Tristan Gingold @ 2011-05-24 7:06 UTC (permalink / raw) To: Yao Qi; +Cc: gdb-patches On May 23, 2011, at 5:59 PM, Yao Qi wrote: > On 05/23/2011 06:29 PM, Tristan Gingold wrote: >> Hi, >> >> with AIX 7, the xcoff binary file format now supports dwarf2. This is a >> huge step forward as the previous debugging format was a varation of stabs. >> >> But (and there is always a but) this is not fully standard dwarf2 as the >> section names differ. The first two patches deal with that in the most >> elegant way I could figure. >> >> The last two patches simply add the dwarf2 support for xcoff. >> >> Manually tested on AIX. > > Is there any reason that prevent you running testsuite on AIX? Short answer: I was never able to have a reliable run: expect fails randomly. > If > dwarf2 has been supported on AIX, we may have to add corresponding > target triplet into proc dwarf2_support in testsuite/lib/dwarf.exp. Only if dwarf2 is enabled by default, which is not true in the official gcc. Tristan. ^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2011-06-07 12:32 UTC | newest] Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2011-05-23 10:29 [RFA] Add dwarf2 support to xcoff (aix) Tristan Gingold 2011-05-23 10:29 ` [PATCH 2/4] dwarf2read.c: handle alternate dwarf2 debug sections name Tristan Gingold 2011-05-23 15:22 ` Tom Tromey 2011-05-23 15:32 ` Tristan Gingold 2011-05-23 15:40 ` Tom Tromey 2011-05-26 7:48 ` Tristan Gingold 2011-05-23 10:29 ` [PATCH 1/4] Really make dwarf2_get_section_info public Tristan Gingold 2011-05-23 15:15 ` Tom Tromey 2011-05-24 12:41 ` Tristan Gingold 2011-05-23 10:29 ` [PATCH 4/4] bfd.c: hancle aixcoff in bfd_get_sign_extend_vma Tristan Gingold 2011-05-23 10:35 ` [PATCH 3/4] aix: add support for dwarf2 Tristan Gingold 2011-05-23 15:35 ` Tom Tromey 2011-05-23 15:42 ` Tom Tromey 2011-05-23 15:47 ` Tristan Gingold 2011-05-23 15:50 ` Tom Tromey 2011-05-24 7:20 ` Tristan Gingold 2011-05-24 13:37 ` Tom Tromey 2011-05-24 13:44 ` Tristan Gingold 2011-05-24 14:56 ` Tom Tromey 2011-05-24 15:11 ` Tristan Gingold 2011-06-01 15:37 ` Tristan Gingold 2011-06-02 19:11 ` Tom Tromey 2011-06-07 12:32 ` Tristan Gingold 2011-05-23 16:00 ` [RFA] Add dwarf2 support to xcoff (aix) Yao Qi 2011-05-24 7:06 ` Tristan Gingold
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox