Add ARM CFI support

This commit is contained in:
Nick Clifton 2004-10-25 12:26:04 +00:00
parent d79b3d5057
commit a394c00fe6
11 changed files with 122 additions and 8 deletions

View file

@ -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

View file

@ -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 \

View file

@ -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
View file

@ -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

View file

@ -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

View file

@ -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);

View file

@ -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,

View file

@ -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

View 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

View 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

View file

@ -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
} }