Mirror of the gdb mailing list
 help / color / mirror / Atom feed
* Reference to .debug_loc
@ 2003-02-14 14:57 Michal Ludvig
  2003-02-14 15:26 ` Daniel Jacobowitz
  0 siblings, 1 reply; 10+ messages in thread
From: Michal Ludvig @ 2003-02-14 14:57 UTC (permalink / raw)
  To: Daniel Berlin; +Cc: gdb, gcc

Hi again,
when location lists are in use, .debug_info looks like this:

         .section        .debug_info
         .long   0x187   # Length of Compilation Unit Info
         .value  0x2     # DWARF version number
         .long   .Ldebug_abbrev0 # Offset Into Abbrev. Section
         .byte   0x8     # Pointer Size (in bytes)
         .uleb128 0x1    # (DIE (0xb) DW_TAG_compile_unit)
         .long   .Ldebug_line0   # DW_AT_stmt_list
         .quad   .Letext0        # DW_AT_high_pc
         .quad   .Ltext0 # DW_AT_low_pc
         .byte   0x1     # DW_AT_language
          [...]
         .uleb128 0x3    # (DIE (0x50) DW_TAG_formal_parameter)
         .long   .LASF2  # DW_AT_name: "value"
         .byte   0x1     # DW_AT_decl_file
         .byte   0x2     # DW_AT_decl_line
         .long   0x8f    # DW_AT_type
         .long   .LLST0-.Ldebug_loc0     # DW_AT_location

So, the reference to .debug_loc on the last line of the example 
(DW_AT_location) is an offset within that section, ie. it's 0 (NULL) for 
the first entry with a location list. However when I link several .o 
files together, each of them have DW_AT_location entries based at the 
same NULL.

This time I realy can't see a way to find out at what position in the 
resulting (ie. linked from several ones) .debug_loc should I start 
reading for a given compilation unit.

Should there be something more in the CU header? Something similar to
.long   .Ldebug_abbrev0 # Offset Into Abbrev. Section
For example
.long   .Ldebug_loc0 # Offset Into Loclist Section

Or is there another way?

Thanks in advance!

Michal Ludvig
-- 
* SuSE CR, s.r.o     * mludvig@suse.cz
* (+420) 296.545.373 * http://www.suse.cz


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Reference to .debug_loc
  2003-02-14 14:57 Reference to .debug_loc Michal Ludvig
@ 2003-02-14 15:26 ` Daniel Jacobowitz
  2003-02-14 19:24   ` Daniel Berlin
  0 siblings, 1 reply; 10+ messages in thread
From: Daniel Jacobowitz @ 2003-02-14 15:26 UTC (permalink / raw)
  To: Michal Ludvig; +Cc: Daniel Berlin, gdb, gcc

On Fri, Feb 14, 2003 at 03:57:55PM +0100, Michal Ludvig wrote:
> Hi again,
> when location lists are in use, .debug_info looks like this:
> 
>         .section        .debug_info
>         .long   0x187   # Length of Compilation Unit Info
>         .value  0x2     # DWARF version number
>         .long   .Ldebug_abbrev0 # Offset Into Abbrev. Section
>         .byte   0x8     # Pointer Size (in bytes)
>         .uleb128 0x1    # (DIE (0xb) DW_TAG_compile_unit)
>         .long   .Ldebug_line0   # DW_AT_stmt_list
>         .quad   .Letext0        # DW_AT_high_pc
>         .quad   .Ltext0 # DW_AT_low_pc
>         .byte   0x1     # DW_AT_language
>          [...]
>         .uleb128 0x3    # (DIE (0x50) DW_TAG_formal_parameter)
>         .long   .LASF2  # DW_AT_name: "value"
>         .byte   0x1     # DW_AT_decl_file
>         .byte   0x2     # DW_AT_decl_line
>         .long   0x8f    # DW_AT_type
>         .long   .LLST0-.Ldebug_loc0     # DW_AT_location
> 
> So, the reference to .debug_loc on the last line of the example 
> (DW_AT_location) is an offset within that section, ie. it's 0 (NULL) for 
> the first entry with a location list. However when I link several .o 
> files together, each of them have DW_AT_location entries based at the 
> same NULL.
> 
> This time I realy can't see a way to find out at what position in the 
> resulting (ie. linked from several ones) .debug_loc should I start 
> reading for a given compilation unit.
> 
> Should there be something more in the CU header? Something similar to
> .long   .Ldebug_abbrev0 # Offset Into Abbrev. Section
> For example
> .long   .Ldebug_loc0 # Offset Into Loclist Section
> 
> Or is there another way?

At a guess it should be like DW_AT_ranges:
        .long   .Ldebug_ranges0+0x0     # DW_AT_ranges

I.E. dw2_asm_output_offset, rather than dw2_asm_output_delta, in GCC.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Reference to .debug_loc
  2003-02-14 15:26 ` Daniel Jacobowitz
@ 2003-02-14 19:24   ` Daniel Berlin
  2003-02-14 19:51     ` Daniel Jacobowitz
  0 siblings, 1 reply; 10+ messages in thread
From: Daniel Berlin @ 2003-02-14 19:24 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: Michal Ludvig, gdb, gcc


On Friday, February 14, 2003, at 10:26  AM, Daniel Jacobowitz wrote:

> On Fri, Feb 14, 2003 at 03:57:55PM +0100, Michal Ludvig wrote:
>> Hi again,
>> when location lists are in use, .debug_info looks like this:
>>
>>         .section        .debug_info
>>         .long   0x187   # Length of Compilation Unit Info
>>         .value  0x2     # DWARF version number
>>         .long   .Ldebug_abbrev0 # Offset Into Abbrev. Section
>>         .byte   0x8     # Pointer Size (in bytes)
>>         .uleb128 0x1    # (DIE (0xb) DW_TAG_compile_unit)
>>         .long   .Ldebug_line0   # DW_AT_stmt_list
>>         .quad   .Letext0        # DW_AT_high_pc
>>         .quad   .Ltext0 # DW_AT_low_pc
>>         .byte   0x1     # DW_AT_language
>>          [...]
>>         .uleb128 0x3    # (DIE (0x50) DW_TAG_formal_parameter)
>>         .long   .LASF2  # DW_AT_name: "value"
>>         .byte   0x1     # DW_AT_decl_file
>>         .byte   0x2     # DW_AT_decl_line
>>         .long   0x8f    # DW_AT_type
>>         .long   .LLST0-.Ldebug_loc0     # DW_AT_location
>>
>> So, the reference to .debug_loc on the last line of the example
>> (DW_AT_location) is an offset within that section, ie. it's 0 (NULL) 
>> for
>> the first entry with a location list. However when I link several .o
>> files together, each of them have DW_AT_location entries based at the
>> same NULL.
>>

Err, why?
If they are in different files, it should be adjusting the offsets when 
it merges the sections together, no?

>> This time I realy can't see a way to find out at what position in the
>> resulting (ie. linked from several ones) .debug_loc should I start
>> reading for a given compilation unit.
>>
>> Should there be something more in the CU header? Something similar to
>> .long   .Ldebug_abbrev0 # Offset Into Abbrev. Section
>> For example
>> .long   .Ldebug_loc0 # Offset Into Loclist Section
>>
No.

>> Or is there another way?
>
> At a guess it should be like DW_AT_ranges:
>         .long   .Ldebug_ranges0+0x0     # DW_AT_ranges
>
> I.E. dw2_asm_output_offset, rather than dw2_asm_output_delta, in GCC.
>

It's supposed to be the offset from the beginning of the debug_loc 
section.
Will this do that?

> -- 
> Daniel Jacobowitz
> MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Reference to .debug_loc
  2003-02-14 19:24   ` Daniel Berlin
@ 2003-02-14 19:51     ` Daniel Jacobowitz
  2003-02-14 20:23       ` Daniel Berlin
  2003-02-14 20:35       ` Jakub Jelinek
  0 siblings, 2 replies; 10+ messages in thread
From: Daniel Jacobowitz @ 2003-02-14 19:51 UTC (permalink / raw)
  To: Daniel Berlin; +Cc: Michal Ludvig, gdb, gcc

On Fri, Feb 14, 2003 at 02:24:43PM -0500, Daniel Berlin wrote:
> 
> On Friday, February 14, 2003, at 10:26  AM, Daniel Jacobowitz wrote:
> 
> >On Fri, Feb 14, 2003 at 03:57:55PM +0100, Michal Ludvig wrote:
> >>Hi again,
> >>when location lists are in use, .debug_info looks like this:
> >>
> >>        .section        .debug_info
> >>        .long   0x187   # Length of Compilation Unit Info
> >>        .value  0x2     # DWARF version number
> >>        .long   .Ldebug_abbrev0 # Offset Into Abbrev. Section
> >>        .byte   0x8     # Pointer Size (in bytes)
> >>        .uleb128 0x1    # (DIE (0xb) DW_TAG_compile_unit)
> >>        .long   .Ldebug_line0   # DW_AT_stmt_list
> >>        .quad   .Letext0        # DW_AT_high_pc
> >>        .quad   .Ltext0 # DW_AT_low_pc
> >>        .byte   0x1     # DW_AT_language
> >>         [...]
> >>        .uleb128 0x3    # (DIE (0x50) DW_TAG_formal_parameter)
> >>        .long   .LASF2  # DW_AT_name: "value"
> >>        .byte   0x1     # DW_AT_decl_file
> >>        .byte   0x2     # DW_AT_decl_line
> >>        .long   0x8f    # DW_AT_type
> >>        .long   .LLST0-.Ldebug_loc0     # DW_AT_location
> >>
> >>So, the reference to .debug_loc on the last line of the example
> >>(DW_AT_location) is an offset within that section, ie. it's 0 (NULL) 
> >>for
> >>the first entry with a location list. However when I link several .o
> >>files together, each of them have DW_AT_location entries based at the
> >>same NULL.
> >>
> 
> Err, why?
> If they are in different files, it should be adjusting the offsets when 
> it merges the sections together, no?

Look at that operand.  It's the difference of two local labels - it
gets resolved at assembly time.

> >>Or is there another way?
> >
> >At a guess it should be like DW_AT_ranges:
> >        .long   .Ldebug_ranges0+0x0     # DW_AT_ranges
> >
> >I.E. dw2_asm_output_offset, rather than dw2_asm_output_delta, in GCC.
> >
> 
> It's supposed to be the offset from the beginning of the debug_loc 
> section.
> Will this do that?

I think so.  The result will be something like .Ldebug_ranges0 +
(.LLST0-.Ldebug_loc0).  If the assembler won't take that then we'll
have to track addresses for loclists the same as we do for rangelists.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Reference to .debug_loc
  2003-02-14 19:51     ` Daniel Jacobowitz
@ 2003-02-14 20:23       ` Daniel Berlin
  2003-02-14 20:35       ` Jakub Jelinek
  1 sibling, 0 replies; 10+ messages in thread
From: Daniel Berlin @ 2003-02-14 20:23 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: Michal Ludvig, gdb, gcc

> > >>Or is there another way?
> > >
> > >At a guess it should be like DW_AT_ranges:
> > >        .long   .Ldebug_ranges0+0x0     # DW_AT_ranges
> > >
> > >I.E. dw2_asm_output_offset, rather than dw2_asm_output_delta, in GCC.
> > >
> >
> > It's supposed to be the offset from the beginning of the debug_loc
> > section.
> > Will this do that?
>
> I think so.  The result will be something like .Ldebug_ranges0 +
> (.LLST0-.Ldebug_loc0).  If the assembler won't take that then we'll
> have to track addresses for loclists the same as we do for rangelists.

I'm compiling a compiler that does it right now, i'll post the results.
>
> --
> Daniel Jacobowitz
> MontaVista Software                         Debian GNU/Linux Developer
>


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Reference to .debug_loc
  2003-02-14 19:51     ` Daniel Jacobowitz
  2003-02-14 20:23       ` Daniel Berlin
@ 2003-02-14 20:35       ` Jakub Jelinek
  2003-02-14 20:40         ` Daniel Jacobowitz
  2003-02-14 21:09         ` Daniel Berlin
  1 sibling, 2 replies; 10+ messages in thread
From: Jakub Jelinek @ 2003-02-14 20:35 UTC (permalink / raw)
  To: Daniel Berlin, Michal Ludvig, gdb, gcc

On Fri, Feb 14, 2003 at 02:51:24PM -0500, Daniel Jacobowitz wrote:
> > >>Or is there another way?
> > >
> > >At a guess it should be like DW_AT_ranges:
> > >        .long   .Ldebug_ranges0+0x0     # DW_AT_ranges
> > >
> > >I.E. dw2_asm_output_offset, rather than dw2_asm_output_delta, in GCC.
> > >
> > 
> > It's supposed to be the offset from the beginning of the debug_loc 
> > section.
> > Will this do that?
> 
> I think so.  The result will be something like .Ldebug_ranges0 +
> (.LLST0-.Ldebug_loc0).  If the assembler won't take that then we'll
> have to track addresses for loclists the same as we do for rangelists.

Why simple .long .LLST0 is not sufficient (@secrel(.LLST0) on IA-64)?
It is not the only place where gcc relies on VMA of debugging sections
to be 0 if the architecture lacks section relative relocations.

	Jakub


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Reference to .debug_loc
  2003-02-14 20:35       ` Jakub Jelinek
@ 2003-02-14 20:40         ` Daniel Jacobowitz
  2003-02-17 14:55           ` Michal Ludvig
  2003-02-14 21:09         ` Daniel Berlin
  1 sibling, 1 reply; 10+ messages in thread
From: Daniel Jacobowitz @ 2003-02-14 20:40 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: Daniel Berlin, Michal Ludvig, gdb, gcc

On Fri, Feb 14, 2003 at 09:35:21PM +0100, Jakub Jelinek wrote:
> On Fri, Feb 14, 2003 at 02:51:24PM -0500, Daniel Jacobowitz wrote:
> > > >>Or is there another way?
> > > >
> > > >At a guess it should be like DW_AT_ranges:
> > > >        .long   .Ldebug_ranges0+0x0     # DW_AT_ranges
> > > >
> > > >I.E. dw2_asm_output_offset, rather than dw2_asm_output_delta, in GCC.
> > > >
> > > 
> > > It's supposed to be the offset from the beginning of the debug_loc 
> > > section.
> > > Will this do that?
> > 
> > I think so.  The result will be something like .Ldebug_ranges0 +
> > (.LLST0-.Ldebug_loc0).  If the assembler won't take that then we'll
> > have to track addresses for loclists the same as we do for rangelists.
> 
> Why simple .long .LLST0 is not sufficient (@secrel(.LLST0) on IA-64)?
> It is not the only place where gcc relies on VMA of debugging sections
> to be 0 if the architecture lacks section relative relocations.

I suppose that would work.  Do you know why DW_AT_ranges is done the
way it is?

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Reference to .debug_loc
  2003-02-14 20:35       ` Jakub Jelinek
  2003-02-14 20:40         ` Daniel Jacobowitz
@ 2003-02-14 21:09         ` Daniel Berlin
  2003-02-19 10:51           ` Michal Ludvig
  1 sibling, 1 reply; 10+ messages in thread
From: Daniel Berlin @ 2003-02-14 21:09 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: Michal Ludvig, gdb, gcc



On Fri, 14 Feb 2003, Jakub Jelinek wrote:

> On Fri, Feb 14, 2003 at 02:51:24PM -0500, Daniel Jacobowitz wrote:
> > > >>Or is there another way?
> > > >
> > > >At a guess it should be like DW_AT_ranges:
> > > >        .long   .Ldebug_ranges0+0x0     # DW_AT_ranges
> > > >
> > > >I.E. dw2_asm_output_offset, rather than dw2_asm_output_delta, in GCC.
> > > >
> > >
> > > It's supposed to be the offset from the beginning of the debug_loc
> > > section.
> > > Will this do that?
> >
> > I think so.  The result will be something like .Ldebug_ranges0 +
> > (.LLST0-.Ldebug_loc0).  If the assembler won't take that then we'll
> > have to track addresses for loclists the same as we do for rangelists.
>
> Why simple .long .LLST0 is not sufficient (@secrel(.LLST0) on IA-64)?
> It is not the only place where gcc relies on VMA of debugging sections
> to be 0 if the architecture lacks section relative relocations.

That seems to work.

Michael, try this:
Index: dwarf2out.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/dwarf2out.c,v
retrieving revision 1.382.2.8
diff -u -3 -p -r1.382.2.8 dwarf2out.c
--- dwarf2out.c 8 Feb 2003 19:43:32 -0000       1.382.2.8
+++ dwarf2out.c 14 Feb 2003 21:09:27 -0000
@@ -6924,8 +6924,7 @@ output_die (die)

            if (sym == 0)
              abort ();
-           dw2_asm_output_delta (DWARF_OFFSET_SIZE, sym,
-                                 loc_section_label, "%s", name);
+           dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, "%s", name);
          }
          break;



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Reference to .debug_loc
  2003-02-14 20:40         ` Daniel Jacobowitz
@ 2003-02-17 14:55           ` Michal Ludvig
  0 siblings, 0 replies; 10+ messages in thread
From: Michal Ludvig @ 2003-02-17 14:55 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: Jakub Jelinek, Daniel Berlin, gdb, gcc

Daniel Jacobowitz wrote:
> On Fri, Feb 14, 2003 at 09:35:21PM +0100, Jakub Jelinek wrote:
> 
>>On Fri, Feb 14, 2003 at 02:51:24PM -0500, Daniel Jacobowitz wrote:
>>
>>>>>>Or is there another way?
>>>>>
>>>>>At a guess it should be like DW_AT_ranges:
>>>>>       .long   .Ldebug_ranges0+0x0     # DW_AT_ranges
>>>>>
>>>>>I.E. dw2_asm_output_offset, rather than dw2_asm_output_delta, in GCC.
>>>>>
>>>>
>>>>It's supposed to be the offset from the beginning of the debug_loc 
>>>>section.
>>>>Will this do that?
>>>
>>>I think so.  The result will be something like .Ldebug_ranges0 +
>>>(.LLST0-.Ldebug_loc0).  If the assembler won't take that then we'll
>>>have to track addresses for loclists the same as we do for rangelists.
>>
>>Why simple .long .LLST0 is not sufficient (@secrel(.LLST0) on IA-64)?
>>It is not the only place where gcc relies on VMA of debugging sections
>>to be 0 if the architecture lacks section relative relocations.
> 
> I suppose that would work.  Do you know why DW_AT_ranges is done the
> way it is?

Why?

Michal Ludvig
-- 
* SuSE CR, s.r.o     * mludvig@suse.cz
* (+420) 296.545.373 * http://www.suse.cz


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Reference to .debug_loc
  2003-02-14 21:09         ` Daniel Berlin
@ 2003-02-19 10:51           ` Michal Ludvig
  0 siblings, 0 replies; 10+ messages in thread
From: Michal Ludvig @ 2003-02-19 10:51 UTC (permalink / raw)
  To: Daniel Berlin; +Cc: Jakub Jelinek, gdb, gcc

Daniel Berlin wrote:
> 
> Michael, try this:
> Index: dwarf2out.c
> ===================================================================
> RCS file: /cvs/gcc/gcc/gcc/dwarf2out.c,v
> retrieving revision 1.382.2.8
> diff -u -3 -p -r1.382.2.8 dwarf2out.c
> --- dwarf2out.c 8 Feb 2003 19:43:32 -0000       1.382.2.8
> +++ dwarf2out.c 14 Feb 2003 21:09:27 -0000
> @@ -6924,8 +6924,7 @@ output_die (die)
> 
>             if (sym == 0)
>               abort ();
> -           dw2_asm_output_delta (DWARF_OFFSET_SIZE, sym,
> -                                 loc_section_label, "%s", name);
> +           dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, "%s", name);
>           }
>           break;
> 

Yes, this works fine. Please commit it.
Thanks!

Michal Ludvig
-- 
* SuSE CR, s.r.o     * mludvig@suse.cz
* (+420) 296.545.373 * http://www.suse.cz


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2003-02-19 10:51 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-02-14 14:57 Reference to .debug_loc Michal Ludvig
2003-02-14 15:26 ` Daniel Jacobowitz
2003-02-14 19:24   ` Daniel Berlin
2003-02-14 19:51     ` Daniel Jacobowitz
2003-02-14 20:23       ` Daniel Berlin
2003-02-14 20:35       ` Jakub Jelinek
2003-02-14 20:40         ` Daniel Jacobowitz
2003-02-17 14:55           ` Michal Ludvig
2003-02-14 21:09         ` Daniel Berlin
2003-02-19 10:51           ` Michal Ludvig

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox