Generating DWARF CIE info

Michael Eager eager@eagercon.com
Sat Jun 9 14:58:00 GMT 2007


Eric Botcazou wrote:
>> The CIE says what the RA column is, but there is no initial value
>> location expression generated for the return address.  That means
>> that on entry to a function, the CIE cannot be used to tell what
>> the return address is.
> 
> I'm not sure I understand.  The RA column is the column in the table which 
> represents the return address, so the return address is the value contained 
> in that column on function entry.  On SPARC, it's by convention the value 
> contained in %o7 as far as the CFI are concerned.

The CIE doesn't say that.  The column has no initial value.

sparc-gdb knows that the RA is in %o7+8 from the ABI.  But if it used
the DWARF data to figure this out, it would know nothing.

>> The macro is INCOMING_RETURN_ADDR_RTX.
> 
> But you explained in your previous message that it is not fully honored, 
> didn't you?  Instead, RETURN_ADDR_OFFSET is used by the unwinder through 
> __builtin_extract_return_addr, see the code in unwind-dw2.c.

Not by GDB.

>> Other than the code which translates RTL to LocExpr not handling
>> REG+offset, I don't see a reason why REG+OFFSET is not valid, or why the
>> comment says that it is unnecessary.
> 
> If the offset is small (1 jump instruction on SPARC), it doesn't really matter 
> for unwinding.
> 
>> On Sparc, it's only unnecessary because Sparc ignores the CIE.
> 
> No, the GCC unwinder does make use of the CIE on SPARC, see extract_cie_info 
> in unwind-dw2.c.

You seem to be under the misapprehension that I'm talking about exception
handling in gcc.  I'm not.

-- 
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077



More information about the Gcc mailing list