[Dwarf-Discuss] modeling different address spaces

Michael Eager eager@eagercon.com
Thu Jul 16 19:55:28 GMT 2020


On 7/16/20 11:51 AM, David Blaikie wrote:
> 
> 
> On Thu, Jul 16, 2020 at 11:41 AM Robinson, Paul via Dwarf-Discuss 
>     The example that most often comes up is Harvard architectures.? As it
>     happens, I think it's nearly always obvious from context whether a given
>     address is data-segment or code-segment.? The only time it's not,
>     that I'm
>     aware of, is in the .debug_aranges section, where addresses are
>     associated
>     with compile-units without any indication of whether they are code
>     or data
>     addresses.? I've heard arguments that .debug_aranges should only
>     have code
>     addresses in it, but I don't think that's what the spec says.
> 
> 
> Curious - the spec doesn't seem to read that way to me - and if that 
> were its goal, it seems like DW_AT_segment wouldn't really be needed. 

As Paul said, DW_AT_segment is not generally needed to describe a 
Harvard architecture.

> DW_AT_locations would always be data, DW_AT_high/low/ranges would always 
> be code, etc? The spec... specifically says DW_AT_segment applies to 
> high/low/ranges, and describes a parent-DIE delegation scheme that seems 
> to suggest that some DIEs could have one segment, and others could have 
> a different segment - but no way for ranges to have different segments 
> in different parts of the same range list, which seems to be at odds 
> with the ability to vary segment across a DIE tree - you couldn't put a 
> ranges at the top of such a variegated tree...

On some (many?) architectures, data and code may be interspersed, for 
example, to place constant data with the executable text.

DIEs can have different DW_AT_segments.

Entries in .debug_aranges have segment, offset, and length.

What is the use case for having multiple segments in a range list?

> (& yeah, the arange?situation crossed my mind too - on both counts you 
> noted (that it needs it, but that it may not - because some 
> interpretations suggest it should only contain code addresses anyway))

As Paul mentioned, that's not what the spec says.

> & not sure how any of this resolves the "but debug_addr has segment 
> selectors"
> 
> nor "what's the point of segment selector size in debug_rnglists, 
> debug_loclists, and debug_line" - none of those sections seem to contain 
> segment selectors, so why do their headers describe the size of such a 
> thing?

Location lists contain segment, offset, and length.

-- 
Michael Eager



More information about the Dwarf-discuss mailing list