https://sourceware.org/bugzilla/show_bug.cgi?id=28233

            Bug ID: 28233
           Summary: [gas, --gstabs] Generate stabs more similar to gcc
           Product: binutils
           Version: unspecified
            Status: NEW
          Severity: normal
          Priority: P2
         Component: gas
          Assignee: unassigned at sourceware dot org
          Reporter: vries at gcc dot gnu.org
  Target Milestone: ---

Consider test-case ./src/gdb/testsuite/gdb.dwarf2/dw2-ranges-3.c.

When compiled with gcc -gstabs:
...
$ gcc -gstabs -c -fno-PIE -no-pie -o dw2-ranges3.o
./src/gdb/testsuite/gdb.dwarf2/dw2-ranges-3.c
...
we have (using objdump -G, filtering out LSYM entries 2-26 for brevity):
...
Contents of .stab section:

Symnum n_type n_othr n_desc n_value  n_strx String

-1     HdrSym 0      31     00000000000003ab 1     
0      SO     0      2      0000000000000000 16    
./src/gdb/testsuite/gdb.dwarf2/dw2-ranges-3.c
1      OPT    0      0      0000000000000000 62     gcc2_compiled.
  ...
27     FUN    0      0      0000000000000000 925    main3:F(0,25)
28     SLINE  0      19     0000000000000000 0      
29     SLINE  0      20     0000000000000004 0      
30     SO     0      0      0000000000000000 0      
$
...

Now consider generating stabs using gas --gstabs instead:
...
$ gcc -c -fno-PIE -no-pie -o dw2-ranges3.o
./src/gdb/testsuite/gdb.dwarf2/dw2-ranges-3.c -Wa,--gstabs
...

Instead we have:
...
Contents of .stab section:

Symnum n_type n_othr n_desc n_value  n_strx String

-1     HdrSym 0      6      0000000000000021 1     
0      SO     0      0      0000000000000000 17     /tmp/ccO3O0w5.s
1      SLINE  0      8      0000000000000000 0      
2      SLINE  0      11     0000000000000000 0      
3      SLINE  0      13     0000000000000000 0      
4      SLINE  0      14     0000000000000000 0      
5      SLINE  0      16     0000000000000000 0      
...

There are two differences (not counting the OPT entry) in the generated
entries:
- no FUN entry
- no terminating SO entry

I don't know enough about stabs to say whether this is valid or not (and if
not, if it's caused by a problem with the input).

What I do know is that these two differences trigger two different problems in
gdb:
- the FUN entry is required to support stabs+PIE (PR12497)
- terminating SO entry is required to get a correct address table (PR28221)

I've submitted a patch for the first PR, but reaction was not positive.  So I
wonder, perhaps it's a good idea to make gas generate stabs more similar to
what gcc emits.

The missing FUN entry problem can be fixed by manually adding a .func
directive.  I've wondered whether we could get the same effect by interpreting
".type     main3, @function" which is present in the generated .s file.

I've found no similar workaround for the missing SO entry problem, so I wrote a
patch for this.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to