mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-11-16 12:34:43 +00:00
gas: sframe: fix handling of .cfi_def_cfa_register
Fix PR gas/32879 sframe: Assembler internal error when translating cfi_def_cfa_register As per the documentation, .cfi_def_cfa_register modifies a rule for computing CFA; the register is updated, but the offset remains the same. While translating .cfi_def_cfa_register into SFrame context, we use the information from last translated FRE to set the CFA offset. However, there may be cases when the last translated FRE is empty. Use last FRE only if available. Signed-off-by: Claudiu Zissulescu <claudiu.zissulescu-ianculescu@oracle.com> Signed-off-by: Indu Bhagat <indu.bhagat@oracle.com>
This commit is contained in:
committed by
Indu Bhagat
parent
8c8e5b1f1a
commit
3602da6fa2
@@ -1038,7 +1038,9 @@ sframe_xlate_do_def_cfa_register (struct sframe_xlate_ctx *xlate_ctx,
|
||||
return SFRAME_XLATE_ERR_NOTREPRESENTED; /* Not represented. */
|
||||
}
|
||||
sframe_fre_set_cfa_base_reg (cur_fre, cfi_insn->u.r);
|
||||
sframe_fre_set_cfa_offset (cur_fre, last_fre->cfa_offset);
|
||||
if (last_fre)
|
||||
sframe_fre_set_cfa_offset (cur_fre, last_fre->cfa_offset);
|
||||
|
||||
cur_fre->merge_candidate = false;
|
||||
|
||||
return SFRAME_XLATE_OK;
|
||||
|
||||
21
gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.d
Normal file
21
gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.d
Normal file
@@ -0,0 +1,21 @@
|
||||
#as: --gsframe
|
||||
#objdump: --sframe=.sframe
|
||||
#name: Check .cfi_def_cfa_register with no previous offset
|
||||
#...
|
||||
Contents of the SFrame section .sframe:
|
||||
|
||||
Header :
|
||||
|
||||
Version: SFRAME_VERSION_2
|
||||
Flags: NONE
|
||||
#? CFA fixed FP offset: \-?\d+
|
||||
#? CFA fixed RA offset: \-?\d+
|
||||
Num FDEs: 1
|
||||
Num FREs: 1
|
||||
|
||||
Function Index :
|
||||
|
||||
func idx \[0\]: pc = 0x0, size = 0 bytes
|
||||
STARTPC +CFA +FP +RA +
|
||||
0+0000 +fp\+8 +u +f +
|
||||
#pass
|
||||
4
gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.s
Normal file
4
gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-2.s
Normal file
@@ -0,0 +1,4 @@
|
||||
# Although not a useful construct by itself, ensure graceful handling.
|
||||
.cfi_startproc
|
||||
.cfi_def_cfa_register 6
|
||||
.cfi_endproc
|
||||
@@ -90,6 +90,7 @@ if { [istarget "x86_64-*-*"] && [gas_sframe_check] } then {
|
||||
if { [gas_x86_64_check] } then {
|
||||
set ASFLAGS "$ASFLAGS --64"
|
||||
run_dump_test "cfi-sframe-x86_64-1"
|
||||
run_dump_test "cfi-sframe-x86_64-2"
|
||||
run_dump_test "cfi-sframe-x86_64-empty-1"
|
||||
run_dump_test "cfi-sframe-x86_64-empty-2"
|
||||
run_dump_test "cfi-sframe-x86_64-empty-3"
|
||||
|
||||
Reference in New Issue
Block a user