Add ARM CFI support
This commit is contained in:
parent
d79b3d5057
commit
a394c00fe6
11 changed files with 122 additions and 8 deletions
|
@ -1,3 +1,19 @@
|
||||||
|
2004-10-25 Daniel Jacobowitz <dan@debian.org>
|
||||||
|
|
||||||
|
* Makefile.am: Run dep-am.
|
||||||
|
* aclocal.m4: Regenerate with automake 1.9.2.
|
||||||
|
* Makefile.in: Regenerate with automake 1.9.2.
|
||||||
|
* doc/Makefile.in: Likewise.
|
||||||
|
|
||||||
|
* config/tc-arm.c: Include "dw2gencfi.h".
|
||||||
|
(tc_arm_regname_to_dw2regnum, tc_arm_frame_initial_instructions):
|
||||||
|
New functions.
|
||||||
|
* config/tc-arm.h (TARGET_USE_CFIPOP, DWARF2_DEFAULT_RETURN_COLUMN)
|
||||||
|
(DWARF2_CIE_DATA_ALIGNMENT, tc_regname_to_dw2regnum)
|
||||||
|
(tc_cfi_frame_initial_instructions): Define.
|
||||||
|
(tc_arm_regname_to_dw2regnum, tc_arm_frame_initial_instructions):
|
||||||
|
Add prototypes.
|
||||||
|
|
||||||
2004-10-21 Tomer Levi <Tomer.Levi@nsc.com>
|
2004-10-21 Tomer Levi <Tomer.Levi@nsc.com>
|
||||||
|
|
||||||
* config/tc-crx.c (assemble_insn): Check unsigned immediate
|
* config/tc-crx.c (assemble_insn): Check unsigned immediate
|
||||||
|
|
|
@ -1036,7 +1036,7 @@ DEPTC_arm_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
|
||||||
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h \
|
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h \
|
||||||
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
|
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
|
||||||
$(INCDIR)/opcode/arm.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/reloc-macros.h \
|
$(INCDIR)/opcode/arm.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/reloc-macros.h \
|
||||||
dwarf2dbg.h
|
dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h
|
||||||
DEPTC_avr_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
|
DEPTC_avr_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
|
||||||
$(srcdir)/config/tc-avr.h $(INCDIR)/coff/internal.h \
|
$(srcdir)/config/tc-avr.h $(INCDIR)/coff/internal.h \
|
||||||
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
|
$(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/safe-ctype.h \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Makefile.in generated by automake 1.9.1 from Makefile.am.
|
# Makefile.in generated by automake 1.9.2 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||||
|
@ -825,7 +825,7 @@ DEPTC_arm_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
|
||||||
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h \
|
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-arm.h \
|
||||||
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
|
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
|
||||||
$(INCDIR)/opcode/arm.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/reloc-macros.h \
|
$(INCDIR)/opcode/arm.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/reloc-macros.h \
|
||||||
dwarf2dbg.h
|
dwarf2dbg.h dw2gencfi.h $(INCDIR)/elf/dwarf2.h
|
||||||
|
|
||||||
DEPTC_avr_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
|
DEPTC_avr_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
|
||||||
$(srcdir)/config/tc-avr.h $(INCDIR)/coff/internal.h \
|
$(srcdir)/config/tc-avr.h $(INCDIR)/coff/internal.h \
|
||||||
|
@ -2857,9 +2857,9 @@ distclean-generic:
|
||||||
maintainer-clean-generic:
|
maintainer-clean-generic:
|
||||||
@echo "This command is intended for maintainers to use"
|
@echo "This command is intended for maintainers to use"
|
||||||
@echo "it deletes files that may require special tools to rebuild."
|
@echo "it deletes files that may require special tools to rebuild."
|
||||||
-rm -f m68k-parse.c
|
|
||||||
-rm -f itbl-lex.c
|
-rm -f itbl-lex.c
|
||||||
-rm -f itbl-parse.c
|
-rm -f itbl-parse.c
|
||||||
|
-rm -f m68k-parse.c
|
||||||
clean: clean-recursive
|
clean: clean-recursive
|
||||||
|
|
||||||
clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
|
clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
|
||||||
|
|
4
gas/aclocal.m4
vendored
4
gas/aclocal.m4
vendored
|
@ -1,4 +1,4 @@
|
||||||
# generated automatically by aclocal 1.9.1 -*- Autoconf -*-
|
# generated automatically by aclocal 1.9.2 -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
|
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
|
||||||
# Free Software Foundation, Inc.
|
# Free Software Foundation, Inc.
|
||||||
|
@ -40,7 +40,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
|
||||||
# Call AM_AUTOMAKE_VERSION so it can be traced.
|
# Call AM_AUTOMAKE_VERSION so it can be traced.
|
||||||
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
|
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
|
||||||
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||||
[AM_AUTOMAKE_VERSION([1.9.1])])
|
[AM_AUTOMAKE_VERSION([1.9.2])])
|
||||||
|
|
||||||
# AM_AUX_DIR_EXPAND
|
# AM_AUX_DIR_EXPAND
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#ifdef OBJ_ELF
|
#ifdef OBJ_ELF
|
||||||
#include "elf/arm.h"
|
#include "elf/arm.h"
|
||||||
#include "dwarf2dbg.h"
|
#include "dwarf2dbg.h"
|
||||||
|
#include "dw2gencfi.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* XXX Set this to 1 after the next binutils release. */
|
/* XXX Set this to 1 after the next binutils release. */
|
||||||
|
@ -14859,6 +14860,31 @@ arm_init_frag (fragS * fragP)
|
||||||
fragP->tc_frag_data = thumb_mode;
|
fragP->tc_frag_data = thumb_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef OBJ_ELF
|
||||||
|
|
||||||
|
/* Convert REGNAME to a DWARF-2 register number. */
|
||||||
|
|
||||||
|
int
|
||||||
|
tc_arm_regname_to_dw2regnum (const char *regname)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; rn_table[i].name; i++)
|
||||||
|
if (streq (regname, rn_table[i].name))
|
||||||
|
return rn_table[i].number;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initialize the DWARF-2 unwind information for this procedure. */
|
||||||
|
|
||||||
|
void
|
||||||
|
tc_arm_frame_initial_instructions (void)
|
||||||
|
{
|
||||||
|
cfi_add_CFA_def_cfa (REG_SP, 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* This table describes all the machine specific pseudo-ops the assembler
|
/* This table describes all the machine specific pseudo-ops the assembler
|
||||||
has to support. The fields are:
|
has to support. The fields are:
|
||||||
pseudo-op name without dot
|
pseudo-op name without dot
|
||||||
|
|
|
@ -180,6 +180,19 @@ enum mstate
|
||||||
MAP_THUMB
|
MAP_THUMB
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* We want .cfi_* pseudo-ops for generating unwind info. */
|
||||||
|
#define TARGET_USE_CFIPOP 1
|
||||||
|
|
||||||
|
/* The lr register is r14. */
|
||||||
|
#define DWARF2_DEFAULT_RETURN_COLUMN 14
|
||||||
|
|
||||||
|
/* Registers are generally saved at negative offsets to the CFA. */
|
||||||
|
#define DWARF2_CIE_DATA_ALIGNMENT -4
|
||||||
|
|
||||||
|
/* CFI hooks. */
|
||||||
|
#define tc_regname_to_dw2regnum tc_arm_regname_to_dw2regnum
|
||||||
|
#define tc_cfi_frame_initial_instructions tc_arm_frame_initial_instructions
|
||||||
|
|
||||||
#else /* Not OBJ_ELF. */
|
#else /* Not OBJ_ELF. */
|
||||||
#define GLOBAL_OFFSET_TABLE_NAME "__GLOBAL_OFFSET_TABLE_"
|
#define GLOBAL_OFFSET_TABLE_NAME "__GLOBAL_OFFSET_TABLE_"
|
||||||
#endif
|
#endif
|
||||||
|
@ -211,4 +224,5 @@ extern void arm_init_frag (struct frag *);
|
||||||
extern void arm_handle_align (struct frag *);
|
extern void arm_handle_align (struct frag *);
|
||||||
extern bfd_boolean arm_fix_adjustable (struct fix *);
|
extern bfd_boolean arm_fix_adjustable (struct fix *);
|
||||||
extern int arm_elf_section_type (const char *, size_t);
|
extern int arm_elf_section_type (const char *, size_t);
|
||||||
|
extern int tc_arm_regname_to_dw2regnum (const char *regname);
|
||||||
|
extern void tc_arm_frame_initial_instructions (void);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Makefile.in generated by automake 1.9.1 from Makefile.am.
|
# Makefile.in generated by automake 1.9.2 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2004-10-23 Daniel Jacobowitz <dan@debian.org>
|
||||||
|
|
||||||
|
* gas/cfi/cfi-arm-1.d, gas/cfi/cfi-arm-1.s: New files.
|
||||||
|
* gas/cfi/cfi.exp: Run cfi-arm-1 test.
|
||||||
|
|
||||||
2004-10-21 Tomer Levi <Tomer.Levi@nsc.com>
|
2004-10-21 Tomer Levi <Tomer.Levi@nsc.com>
|
||||||
|
|
||||||
* gas/crx/cop_insn.s: Reverse operands order in store co-processor
|
* gas/crx/cop_insn.s: Reverse operands order in store co-processor
|
||||||
|
|
27
gas/testsuite/gas/cfi/cfi-arm-1.d
Normal file
27
gas/testsuite/gas/cfi/cfi-arm-1.d
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#readelf: -wf
|
||||||
|
#name: CFI on ARM
|
||||||
|
|
||||||
|
The section .eh_frame contains:
|
||||||
|
|
||||||
|
00000000 00000010 00000000 CIE
|
||||||
|
Version: 1
|
||||||
|
Augmentation: "zR"
|
||||||
|
Code alignment factor: 2
|
||||||
|
Data alignment factor: -4
|
||||||
|
Return address column: 14
|
||||||
|
Augmentation data: 1b
|
||||||
|
|
||||||
|
DW_CFA_def_cfa: r13 ofs 0
|
||||||
|
|
||||||
|
00000014 00000020 00000018 FDE cie=00000000 pc=00000000..00000018
|
||||||
|
DW_CFA_advance_loc: 4 to 00000004
|
||||||
|
DW_CFA_def_cfa: r12 ofs 0
|
||||||
|
DW_CFA_advance_loc: 4 to 00000008
|
||||||
|
DW_CFA_def_cfa: r13 ofs 16
|
||||||
|
DW_CFA_advance_loc: 4 to 0000000c
|
||||||
|
DW_CFA_def_cfa_offset: 32
|
||||||
|
DW_CFA_offset: r11 at cfa-32
|
||||||
|
DW_CFA_offset: r14 at cfa-24
|
||||||
|
DW_CFA_advance_loc: 4 to 00000010
|
||||||
|
DW_CFA_def_cfa: r11 ofs 16
|
||||||
|
|
23
gas/testsuite/gas/cfi/cfi-arm-1.s
Normal file
23
gas/testsuite/gas/cfi/cfi-arm-1.s
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
#; $ as -o test.o gas-cfi-test.s && gcc -nostdlib -o test test.o
|
||||||
|
|
||||||
|
.file "a.c"
|
||||||
|
.text
|
||||||
|
.align 2
|
||||||
|
.global foo
|
||||||
|
.type foo, %function
|
||||||
|
foo:
|
||||||
|
.cfi_startproc
|
||||||
|
mov ip, sp
|
||||||
|
.cfi_def_cfa ip, 0
|
||||||
|
stmfd sp!, {r0, r1, r2, r3}
|
||||||
|
.cfi_def_cfa sp, 16
|
||||||
|
stmfd sp!, {fp, ip, lr, pc}
|
||||||
|
.cfi_adjust_cfa_offset 16
|
||||||
|
.cfi_rel_offset r11, 0
|
||||||
|
.cfi_rel_offset lr, 8
|
||||||
|
sub fp, ip, #20
|
||||||
|
.cfi_def_cfa fp, 16
|
||||||
|
nop
|
||||||
|
ldmea fp, {fp, sp, pc}
|
||||||
|
.cfi_endproc
|
||||||
|
.size foo, .-foo
|
|
@ -56,6 +56,9 @@ if [istarget "x86_64-*"] then {
|
||||||
run_dump_test "cfi-sh-1"
|
run_dump_test "cfi-sh-1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} elseif { [istarget "arm*-*"] || [istarget "xscale*-*"] } then {
|
||||||
|
run_dump_test "cfi-arm-1"
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue