Note the DWARF abi extension for ARM says that "registers intentionally unused" should also be initialized as if by DW_CFA_same_value. The example given is "an integer-only function might be included in one executable file for targets with VFP and another for targets without". We don't currently do this yet.
Seems worthwhile to include the URL to the ABI spec that talks about DWARF and/or the function call ABI (we never did for the others, but I'm not sure there are canonical URLs for most of them).
We have the DW_CFA_restore hack (which I could have sworn was used somewhere--I thought we had abi_cfi for ppc long ago). So perhaps the right thing is to use that plus explicit DW_CFA_undefined for the call-clobbered registers.
Either way, this needs to cover the VFP/NEON registers (which are half call-clobbered and half call-saved).
/* The link register contains the return address setup by caller. */
SV (14),
Should also have:
DW_CFA_register, ULEB128_7 (15), ULEB128_7 (14), /* pc = lr */
- abi_info->return_address_register = 14; /* Link Register. */
I think that's wrong. 14 is LR, which is just a general register that happens to be where the ABI says the return address is on entry. The "return_address_register" is for the "caller's PC" (a "virtual register" on machines where the PC is not directly addressable), so it should use 15 (PC).
Thanks, Roland