Add support for parsing VFP register names in .cfi_offset directives.

PR gas/16694
	* config/tc-arm.c (tc_arm_regname_to_dw2regnum): Parse VFP
	registers as well.

	* gas/cfi/cfi-arm-1.s: Add checks of VFP registers.
	* gas/cfi/cfi-arm-1.d: Update expected output.
This commit is contained in:
Nick Clifton 2014-03-17 16:30:30 +00:00
parent f7c77d9323
commit 1f5afe1cc0
5 changed files with 48 additions and 8 deletions

View File

@ -1,3 +1,9 @@
2014-03-17 Nick Clifton <nickc@redhat.com>
PR gas/16694
* config/tc-arm.c (tc_arm_regname_to_dw2regnum): Parse VFP
registers as well.
2014-03-13 Richard Earnshaw <rearnsha@arm.com>
Jiong Wang <Jiong.Wang@arm.com>

View File

@ -4134,15 +4134,24 @@ s_arm_unwind_save (int arch_v6)
s_arm_unwind_save_fpa (reg->number);
return;
case REG_TYPE_RN: s_arm_unwind_save_core (); return;
case REG_TYPE_RN:
s_arm_unwind_save_core ();
return;
case REG_TYPE_VFD:
if (arch_v6)
s_arm_unwind_save_vfp_armv6 ();
else
s_arm_unwind_save_vfp ();
return;
case REG_TYPE_MMXWR: s_arm_unwind_save_mmxwr (); return;
case REG_TYPE_MMXWCG: s_arm_unwind_save_mmxwcg (); return;
case REG_TYPE_MMXWR:
s_arm_unwind_save_mmxwr ();
return;
case REG_TYPE_MMXWCG:
s_arm_unwind_save_mmxwcg ();
return;
default:
as_bad (_(".unwind_save does not support this kind of register"));
@ -21019,11 +21028,19 @@ int
tc_arm_regname_to_dw2regnum (char *regname)
{
int reg = arm_reg_parse (&regname, REG_TYPE_RN);
if (reg != FAIL)
return reg;
if (reg == FAIL)
return -1;
/* PR 16694: Allow VFP registers as well. */
reg = arm_reg_parse (&regname, REG_TYPE_VFS);
if (reg != FAIL)
return 64 + reg;
return reg;
reg = arm_reg_parse (&regname, REG_TYPE_VFD);
if (reg != FAIL)
return reg + 256;
return -1;
}
#ifdef TE_PE

View File

@ -1,3 +1,9 @@
2014-03-17 Nick Clifton <nickc@redhat.com>
PR gas/16694
* gas/cfi/cfi-arm-1.s: Add checks of VFP registers.
* gas/cfi/cfi-arm-1.d: Update expected output.
2014-03-13 Nick Clifton <nickc@redhat.com>
* gas/aarch64/litpool.s: Make the test endian agnostic.

View File

@ -13,7 +13,7 @@ Contents of the .eh_frame section:
DW_CFA_def_cfa: r13 ofs 0
00000014 0+0020 0+0018 FDE cie=0+0000 pc=0+0000..0+0018
00000014 0+002c 0+0018 FDE cie=0+0000 pc=0+0000..0+0018
DW_CFA_advance_loc: 4 to 00000004
DW_CFA_def_cfa: r12 ofs 0
DW_CFA_advance_loc: 4 to 00000008
@ -24,4 +24,9 @@ Contents of the .eh_frame section:
DW_CFA_offset: r14 at cfa-24
DW_CFA_advance_loc: 4 to 00000010
DW_CFA_def_cfa: r11 ofs 16
DW_CFA_advance_loc: 4 to 00000014
DW_CFA_offset: r1 at cfa-16
DW_CFA_offset_extended: r65 at cfa-20
DW_CFA_offset_extended: r267 at cfa-48
DW_CFA_nop
DW_CFA_nop

View File

@ -18,6 +18,12 @@ foo:
sub fp, ip, #20
.cfi_def_cfa fp, 16
nop
# Test fix for PR 16694 - the use of VFP registers in .cfi_offset directives.
.cfi_offset r1, -16
.cfi_offset s1, -20
.cfi_offset d11, -48
ldmea fp, {fp, sp, pc}
.cfi_endproc
.size foo, .-foo