Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Doug Evans <dje@google.com>
To: gdb-patches <gdb-patches@sourceware.org>
Subject: Re: [RFC] When can we remove Sun-specific stabs support? (when will it be ok to delete partial_symtab.section_offsets?)
Date: Thu, 07 May 2015 22:52:00 -0000	[thread overview]
Message-ID: <CADPb22QOG+A-kRaiY1PvRU8bnEw-L2EHzb5eOiSiX2GAQZ50GA@mail.gmail.com> (raw)
In-Reply-To: <90e6ba6e87129285600515847ec6@google.com>

On Thu, May 7, 2015 at 2:21 PM, Doug Evans <dje@google.com> wrote:
> Hi.
>
> While working on improving some symbol table code I stumbled on
> partial_symtab.section_offsets and that led me to elfstab_offset_sections.
>
> AFAICT, the only reason partial_symtab.section_offsets exists is for
> Sun stabs.  There are no regressions if I comment out
> elfstab_offset_sections on linux+stabs.
> Grep for Ddata.data in doc/stabs.texinfo for further background.
>
> elfread.c:
>
> /* When handling an ELF file that contains Sun STABS debug info,
>    some of the debug info is relative to the particular chunk of the
>    section that was generated in its individual .o file.  E.g.
>    offsets to static variables are relative to the start of the data
>    segment *for that module before linking*.  This information is
>    painfully squirreled away in the ELF symbol table as local symbols
>    with wierd names.  Go get 'em when needed.  */
>
> dbxread.c:
>
> #ifdef HAVE_ELF
>   /* If we're handling an ELF file, drag some section-relocation info
>      for this source file out of the ELF symbol table, to compensate for
>      Sun brain death.  This replaces the section_offsets in this psymtab,
>      if successful.  */
>   elfstab_offset_sections (objfile, result);
> #endif
>
> N.B. I'm not suggesting remove stabs support, just this hack for Sun stabs.
>
> Deleting partial_symtab.section_offsets will simplify some code
> (for non-sun-stabs it's just a pointer to objfile->section_offsets).
> It'll also help the ObjfileSplitting project.
> https://sourceware.org/gdb/wiki/ObjfileSplitting

Heh.  Gotta love single stepping through code to see what's REALLY going on.

I found this testcase in gas and hacked it to compile on x86.
gas/testsuite/gas/sparc-solaris/sol-cc.s

I then walked through gdb to verify it was properly handling
this hack for Sun stabs.
But when I get to elfstab_offset_sections, sectinfo is NULL
so there is nothing to do. From the testcase clearly that's wrong.

  struct stab_section_info *maybe = dbx->stab_section_info;

(top-gdb) p maybe
$17 = (struct stab_section_info *) 0x0

It turns out the data is being freed
before elfstab_offset_sections is called!
elf_read_minimal_symbols has this:

  make_cleanup (free_elfinfo, (void *) objfile);

and free_elfinfo is this:

static void
free_elfinfo (void *objp)
{
  struct objfile *objfile = (struct objfile *) objp;
  struct dbx_symfile_info *dbxinfo = DBX_SYMFILE_INFO (objfile);
  struct stab_section_info *ssi, *nssi;

  ssi = dbxinfo->stab_section_info;
  while (ssi)
    {
      nssi = ssi->next;
      xfree (ssi);
      ssi = nssi;
    }

  dbxinfo->stab_section_info = 0;       /* Just say No mo info about this.  */
}

So this hack is currently a no-op: we collect the needed info here:

elfread.c:
                  if (strcmp ("Bbss.bss", sym->name) == 0)
                    special_local_sect = SECT_OFF_BSS (objfile);
                  else if (strcmp ("Ddata.data", sym->name) == 0)
                    special_local_sect = SECT_OFF_DATA (objfile);
                  else if (strcmp ("Drodata.rodata", sym->name) == 0)
                    special_local_sect = SECT_OFF_RODATA (objfile);

and then throw it away (in free_elfinfo) before we use it
(in elfstab_offset_sections).

IIUC, and assuming I'm not missing anything,
this has been broken since at least gdb 7.0 (I didn't
check back any further).
The code was a little different back then, but the free_elfinfo
cleanup was still done before building psymtabs.

Sufficient motivation for deleting this code now?


  reply	other threads:[~2015-05-07 22:52 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-07 21:21 Doug Evans
2015-05-07 22:52 ` Doug Evans [this message]
2015-05-07 23:04   ` Doug Evans
2015-05-08 10:47     ` Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CADPb22QOG+A-kRaiY1PvRU8bnEw-L2EHzb5eOiSiX2GAQZ50GA@mail.gmail.com \
    --to=dje@google.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox