Issue 120719.1: DW_AT_entry_pc encoded as a constant offset from DW_AT_ranges
Section 2.18 Entry Address, pg 40
Background:
Currently, an DIE with a DW_AT_entry_pc and a DW_AT_ranges will create
multiple relocatable addresses for both the DW_AT_entry_pc and the
DW_AT_ranges. For example:
In .debug_info
DW_TAG_subroutine
DW_AT_entry_pc (addr) 0x403a9e <func+0x1e>
DW_AT_ranges (sec_offset) range list [ 50]
In .debug_ranges
[50] 0x403a9e <some_func+0x1e>..0x403aa4 <some_func+0x24>
0x403abb <some_func+0x3b>..0x403abf <some_func+0x3f>
Often, as in this example, the entry_pc is equal to the first range
address.
Proposal:
Since DW_AT_entry_pc is often the same, or an offset from, the
first range list address, it can be encoded as a constant offset
from the DW_AT_low_pc address or the first DW_AT_ranges address.
Wording changes:
2.18 Entry Address
Remove the '.' the end of the sentence "The value of the
DW_AT_entry_pc attribute is a relocated address" and add "if the
value of DW_AT_entry_pc is of class address; or if it is of class
constant, the value is an unsigned integer offset which, when
added to the base address of the function, gives the entry
address. The base address of the function is given by either the
DW_AT_low_pc attribute, or the first range entry in the list of
ranges given by the DW_AT_ranges attribute."
Figure 20. Attribute encodings, begins here.
Change the entry for DW_AT_entry_pc to read:
DW_AT_entry_pc 0x52 address, constant
---
Revised: 7/21/2013
Accepted: 7/23/2013