This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [RFC] PR 12389
On Sun, 19 Oct 2003 14:52:17 +0200, Jan Hubicka <hubicka@ucw.cz> wrote:
>> On Sun, Oct 19, 2003 at 10:00:39AM +0200, Jan Hubicka wrote:
>> > Also what about COOMDAT functions? I guess the debug info should be
>> > conservative then and always claim that function has been inlined as it
>> > may be inlined in the other compilation unit, right?
>>
>> What I understand from the DWARF2 specs is that the definitions
>> of the DW_AT_inline attribute
>>
>> DW_INL_declared_inlined Declared inline and inlined by the compiler
>> DW_INL_inlined Not declared inline but inlined by the compiler
>> DW_INL_declared_not_inlined Declared inline but not inlined by the compiler
>> DW_INL_not_inlined Not declared inline nor inlined by the compiler
>
> Good. My current patch should get this accurate for -funit-at-a-time
> and conservative for -fno-unit-at-a-time in a way that
> DW_INL_declared_inlined and DW_INL_inlined may be emit for inlinable
> functions that are never really inlined . I hope this is not big deal.
>
> We never use DW_INL_not_inline and simply produce no DW_AT_inline
> attribute then. So hope that not_inline is the default.
not_inline is the default, but unlike most dwarf2 attributes, the very
presence or absence of DW_AT_inline has meaning. Iff there is a
DW_AT_inline attribute, the DIE is for an abstract instance. Thus, iff
we're generating info for a DECL_ABSTRACT function, we must add a
DW_AT_inline attribute.
The actual value of the attribute has no real use. I suppose a debugger
might use it to decide whether or not to do an expensive search for inlined
copies of a function, but whether or not a function is actually declared
inline is just extra information.
>> really means this *)
>>
>> DW_INL_declared_inlined same
>> DW_INL_inlined same
>> DW_INL_declared_not_inlined Declared inline but no other DIE refers to this
>> entry as its abstract origin.
No; the out-of-line concrete instance still refers to this as its abstract origin.
>> DW_INL_not_inlined Not declared inline and no other DIE refers to
>> this entry as its abstract origin.
Ditto. Though we shouldn't ever generate this.
>> And since these references (DW_AT_abstract_origin) are per compilation
>> unit (DW_TAG_compile_unit), the answer seems to be no.
This premise is invalid. All DIE references can cross compilation units
using DW_FORM_ref_addr. -feliminate-dwarf2-dups uses that to refer to
common debug info from multiple translation units. Unfortunately, gdb
still doesn't support this, which is why -feliminate-dwarf2-dups has never
been made the default.
Jason