[ARC] Enable .cfi_* pseudo-ops.
gas/ 2016-02-16 Claudiu Zissulescu <claziss@synopsys.com> * config/tc-arc.c (tc_arc_frame_initial_instructions): New function. (tc_arc_regname_to_dw2regnum): Likewise. * config/tc-arc.h (TARGET_USE_CFIPOP): Define (tc_cfi_frame_initial_instructions): Likewise. (tc_regname_to_dw2regnum): Likewise. gas/testsuite 2016-02-16 Claudiu Zissulescu <claziss@synopsys.com> * gas/cfi/cfi-arc-1.d: New file. * gas/cfi/cfi-arc-1.s: Likewise. * gas/cfi/cfi.exp: Allow running tests for arc. binutils/ 2016-02-16 Claudiu Zissulescu <claziss@synopsys.com> * readelf.c (is_32bit_pcrel_reloc): Add R_ARC_32_PCREL.
This commit is contained in:
parent
c4ef31bf6f
commit
726c18e1c8
@ -1,3 +1,7 @@
|
|||||||
|
2016-02-16 Claudiu Zissulescu <claziss@synopsys.com>
|
||||||
|
|
||||||
|
* readelf.c (is_32bit_pcrel_reloc): Add R_ARC_32_PCREL.
|
||||||
|
|
||||||
2016-02-15 Nick Clifton <nickc@redhat.com>
|
2016-02-15 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* readelf.c (get_section_type_name): Add hex prefix to offsets
|
* readelf.c (get_section_type_name): Add hex prefix to offsets
|
||||||
|
@ -11558,6 +11558,9 @@ is_32bit_pcrel_reloc (unsigned int reloc_type)
|
|||||||
return reloc_type == 6;
|
return reloc_type == 6;
|
||||||
case EM_ALPHA:
|
case EM_ALPHA:
|
||||||
return reloc_type == 10; /* R_ALPHA_SREL32. */
|
return reloc_type == 10; /* R_ALPHA_SREL32. */
|
||||||
|
case EM_ARC_COMPACT:
|
||||||
|
case EM_ARC_COMPACT2:
|
||||||
|
return reloc_type == 49; /* R_ARC_32_PCREL. */
|
||||||
case EM_ARM:
|
case EM_ARM:
|
||||||
return reloc_type == 3; /* R_ARM_REL32 */
|
return reloc_type == 3; /* R_ARM_REL32 */
|
||||||
case EM_MICROBLAZE:
|
case EM_MICROBLAZE:
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
2016-02-16 Claudiu Zissulescu <claziss@synopsys.com>
|
||||||
|
|
||||||
|
* config/tc-arc.c (tc_arc_frame_initial_instructions): New
|
||||||
|
function.
|
||||||
|
(tc_arc_regname_to_dw2regnum): Likewise.
|
||||||
|
* config/tc-arc.h (TARGET_USE_CFIPOP): Define
|
||||||
|
(tc_cfi_frame_initial_instructions): Likewise.
|
||||||
|
(tc_regname_to_dw2regnum): Likewise.
|
||||||
|
|
||||||
2016-02-16 Trevor Saunders <tbsaunde@tbsaunde.org>
|
2016-02-16 Trevor Saunders <tbsaunde@tbsaunde.org>
|
||||||
|
|
||||||
* doc/internals.texi (S_IS_EXTERN): Remove.
|
* doc/internals.texi (S_IS_EXTERN): Remove.
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "subsegs.h"
|
#include "subsegs.h"
|
||||||
#include "struc-symbol.h"
|
#include "struc-symbol.h"
|
||||||
#include "dwarf2dbg.h"
|
#include "dwarf2dbg.h"
|
||||||
|
#include "dw2gencfi.h"
|
||||||
#include "safe-ctype.h"
|
#include "safe-ctype.h"
|
||||||
|
|
||||||
#include "opcode/arc.h"
|
#include "opcode/arc.h"
|
||||||
@ -3675,3 +3676,24 @@ arc_pcrel_adjust (fragS *fragP)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Initialize the DWARF-2 unwind information for this procedure. */
|
||||||
|
|
||||||
|
void
|
||||||
|
tc_arc_frame_initial_instructions (void)
|
||||||
|
{
|
||||||
|
/* Stack pointer is register 28. */
|
||||||
|
cfi_add_CFA_def_cfa_register (28);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
tc_arc_regname_to_dw2regnum (char *regname)
|
||||||
|
{
|
||||||
|
struct symbol *sym;
|
||||||
|
|
||||||
|
sym = hash_find (arc_reg_hash, regname);
|
||||||
|
if (sym)
|
||||||
|
return S_GET_VALUE (sym);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
@ -191,12 +191,21 @@ extern void arc_handle_align (fragS *);
|
|||||||
extern void arc_cons_fix_new (fragS *, int, int, expressionS *,
|
extern void arc_cons_fix_new (fragS *, int, int, expressionS *,
|
||||||
bfd_reloc_code_real_type);
|
bfd_reloc_code_real_type);
|
||||||
extern void arc_frob_label (symbolS *);
|
extern void arc_frob_label (symbolS *);
|
||||||
|
extern void tc_arc_frame_initial_instructions (void);
|
||||||
|
extern int tc_arc_regname_to_dw2regnum (char *regname);
|
||||||
|
|
||||||
/* The blink register is r31. */
|
/* The blink register is r31. */
|
||||||
#define DWARF2_DEFAULT_RETURN_COLUMN 31
|
#define DWARF2_DEFAULT_RETURN_COLUMN 31
|
||||||
/* Registers are generally saved at negative offsets to the CFA. */
|
/* Registers are generally saved at negative offsets to the CFA. */
|
||||||
#define DWARF2_CIE_DATA_ALIGNMENT (-4)
|
#define DWARF2_CIE_DATA_ALIGNMENT (-4)
|
||||||
|
|
||||||
|
/* We want .cfi_* pseudo-ops for generating unwind info. */
|
||||||
|
#define TARGET_USE_CFIPOP 1
|
||||||
|
|
||||||
|
/* CFI hooks. */
|
||||||
|
#define tc_cfi_frame_initial_instructions tc_arc_frame_initial_instructions
|
||||||
|
#define tc_regname_to_dw2regnum tc_arc_regname_to_dw2regnum
|
||||||
|
|
||||||
/* Define the NOPs. */
|
/* Define the NOPs. */
|
||||||
#define NOP_OPCODE_S 0x000078E0
|
#define NOP_OPCODE_S 0x000078E0
|
||||||
#define NOP_OPCODE_L 0x264A7000 /* mov 0,0. */
|
#define NOP_OPCODE_L 0x264A7000 /* mov 0,0. */
|
||||||
|
5
gas/testsuite/ChangeLog
Normal file
5
gas/testsuite/ChangeLog
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
2016-02-16 Claudiu Zissulescu <claziss@synopsys.com>
|
||||||
|
|
||||||
|
* gas/cfi/cfi-arc-1.d: New file.
|
||||||
|
* gas/cfi/cfi-arc-1.s: Likewise.
|
||||||
|
* gas/cfi/cfi.exp: Allow running tests for arc.
|
30
gas/testsuite/gas/cfi/cfi-arc-1.d
Normal file
30
gas/testsuite/gas/cfi/cfi-arc-1.d
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#readelf: -wf
|
||||||
|
#name: CFI on ARC
|
||||||
|
|
||||||
|
Contents of the .eh_frame section:
|
||||||
|
|
||||||
|
00000000 00000010 00000000 CIE
|
||||||
|
Version: 1
|
||||||
|
Augmentation: "zR"
|
||||||
|
Code alignment factor: 1
|
||||||
|
Data alignment factor: -4
|
||||||
|
Return address column: 31
|
||||||
|
Augmentation data: 1b
|
||||||
|
|
||||||
|
DW_CFA_def_cfa_register: r28
|
||||||
|
DW_CFA_nop
|
||||||
|
|
||||||
|
00000014 00000020 00000018 FDE cie=00000000 pc=00000000..00000010
|
||||||
|
DW_CFA_advance_loc: 4 to 00000004
|
||||||
|
DW_CFA_def_cfa_offset: 48
|
||||||
|
DW_CFA_offset: r13 at cfa-48
|
||||||
|
DW_CFA_advance_loc: 4 to 00000008
|
||||||
|
DW_CFA_def_cfa_offset: 52
|
||||||
|
DW_CFA_offset: r14 at cfa-44
|
||||||
|
DW_CFA_offset: r15 at cfa-40
|
||||||
|
DW_CFA_advance_loc: 4 to 0000000c
|
||||||
|
DW_CFA_offset: r27 at cfa-52
|
||||||
|
DW_CFA_advance_loc: 2 to 0000000e
|
||||||
|
DW_CFA_def_cfa_register: r27
|
||||||
|
DW_CFA_nop
|
||||||
|
|
21
gas/testsuite/gas/cfi/cfi-arc-1.s
Normal file
21
gas/testsuite/gas/cfi/cfi-arc-1.s
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
.file "foo.c"
|
||||||
|
.cpu HS
|
||||||
|
.section .text
|
||||||
|
.align 4
|
||||||
|
.cfi_startproc
|
||||||
|
foo:
|
||||||
|
st.a r13,[sp,-48]
|
||||||
|
.cfi_def_cfa_offset 48
|
||||||
|
.cfi_offset r13, -48
|
||||||
|
.LCFI0:
|
||||||
|
std r14,[sp,4]
|
||||||
|
.cfi_adjust_cfa_offset 4
|
||||||
|
.cfi_offset r14, -44
|
||||||
|
.cfi_rel_offset r15, 12
|
||||||
|
st.a fp,[sp,-4]
|
||||||
|
.cfi_rel_offset fp, 0
|
||||||
|
mov_s fp,sp
|
||||||
|
.cfi_def_cfa_register fp
|
||||||
|
j_s [blink]
|
||||||
|
.cfi_endproc
|
||||||
|
.size foo, .-foo
|
@ -91,7 +91,8 @@ if { [istarget "i*86-*-*"] || [istarget "x86_64-*-*"] } then {
|
|||||||
} else {
|
} else {
|
||||||
run_dump_test "cfi-sh-1"
|
run_dump_test "cfi-sh-1"
|
||||||
}
|
}
|
||||||
|
} elseif { [istarget "arc*-*-*"] } then {
|
||||||
|
run_dump_test "cfi-arc-1"
|
||||||
} elseif { [istarget "arm*-*"] } then {
|
} elseif { [istarget "arm*-*"] } then {
|
||||||
# Only ELF based ARM targets support CFI.
|
# Only ELF based ARM targets support CFI.
|
||||||
if { [is_pecoff_format] } then {
|
if { [is_pecoff_format] } then {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user