[gas]
* config/tc-sh.c: Include dw2gencfi.h. (sh_cfi_frame_initial_instructions): New function. (sh_regname_to_dw2regnum): Likewise. * config/tc-sh.h (DWARF2_LINE_MIN_INSN_LENGTH): Move to the end of file. (TARGET_USE_CFIPOP): Define. (tc_cfi_frame_initial_instructions): Likewise. (tc_regname_to_dw2regnum): Likewise. (DWARF2_DEFAULT_RETURN_COLUMN, DWARF2_CIE_DATA_ALIGNMENT): Likewise. * Makefile.am: Update dependencies. * Makefile.in: Regenerate. [gas/testsuite] * gas/cfi/cfi-sh-1.d: New file. * gas/cfi/cfi-sh-1.s: Likewise. * gas/cfi/cfi.exp: Add SH case.
This commit is contained in:
parent
cfef7cefb0
commit
2ce4cc6025
@ -1,3 +1,17 @@
|
||||
2004-03-17 Kaz Kojima <kkojima@rr.iij4u.or.jp>
|
||||
|
||||
* config/tc-sh.c: Include dw2gencfi.h.
|
||||
(sh_cfi_frame_initial_instructions): New function.
|
||||
(sh_regname_to_dw2regnum): Likewise.
|
||||
* config/tc-sh.h (DWARF2_LINE_MIN_INSN_LENGTH): Move to the end of
|
||||
file.
|
||||
(TARGET_USE_CFIPOP): Define.
|
||||
(tc_cfi_frame_initial_instructions): Likewise.
|
||||
(tc_regname_to_dw2regnum): Likewise.
|
||||
(DWARF2_DEFAULT_RETURN_COLUMN, DWARF2_CIE_DATA_ALIGNMENT): Likewise.
|
||||
* Makefile.am: Update dependencies.
|
||||
* Makefile.in: Regenerate.
|
||||
|
||||
2004-03-17 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||
|
||||
* configure.in: Switch sh-*-rtems* to ELF. Add sh-*-rtemscoff*.
|
||||
|
@ -1400,20 +1400,20 @@ DEPTC_sh_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
|
||||
$(srcdir)/config/tc-sh.h $(INCDIR)/coff/internal.h \
|
||||
$(INCDIR)/coff/sh.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
|
||||
$(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/sh-opc.h \
|
||||
$(INCDIR)/safe-ctype.h struc-symbol.h dwarf2dbg.h
|
||||
$(INCDIR)/safe-ctype.h struc-symbol.h dwarf2dbg.h dw2gencfi.h
|
||||
DEPTC_sh_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
|
||||
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
|
||||
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh.h \
|
||||
subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/sh-opc.h \
|
||||
$(INCDIR)/safe-ctype.h struc-symbol.h $(INCDIR)/elf/sh.h \
|
||||
$(INCDIR)/elf/reloc-macros.h dwarf2dbg.h
|
||||
$(INCDIR)/elf/reloc-macros.h dwarf2dbg.h dw2gencfi.h
|
||||
DEPTC_sh64_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
|
||||
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
|
||||
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh64.h \
|
||||
$(srcdir)/config/tc-sh.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
|
||||
$(BFDDIR)/elf32-sh64.h $(INCDIR)/safe-ctype.h $(srcdir)/../opcodes/sh64-opc.h \
|
||||
$(srcdir)/config/tc-sh.c subsegs.h $(INCDIR)/obstack.h \
|
||||
$(srcdir)/../opcodes/sh-opc.h struc-symbol.h dwarf2dbg.h
|
||||
$(srcdir)/../opcodes/sh-opc.h struc-symbol.h dwarf2dbg.h dw2gencfi.h
|
||||
DEPTC_sparc_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
|
||||
$(srcdir)/config/tc-sparc.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
|
||||
$(INCDIR)/safe-ctype.h subsegs.h $(INCDIR)/obstack.h \
|
||||
|
@ -1262,14 +1262,14 @@ DEPTC_sh_coff = $(INCDIR)/symcat.h $(srcdir)/config/obj-coff.h \
|
||||
$(srcdir)/config/tc-sh.h $(INCDIR)/coff/internal.h \
|
||||
$(INCDIR)/coff/sh.h $(INCDIR)/coff/external.h $(BFDDIR)/libcoff.h \
|
||||
$(INCDIR)/bfdlink.h subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/sh-opc.h \
|
||||
$(INCDIR)/safe-ctype.h struc-symbol.h dwarf2dbg.h
|
||||
$(INCDIR)/safe-ctype.h struc-symbol.h dwarf2dbg.h dw2gencfi.h
|
||||
|
||||
DEPTC_sh_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
|
||||
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
|
||||
$(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(srcdir)/config/tc-sh.h \
|
||||
subsegs.h $(INCDIR)/obstack.h $(srcdir)/../opcodes/sh-opc.h \
|
||||
$(INCDIR)/safe-ctype.h struc-symbol.h $(INCDIR)/elf/sh.h \
|
||||
$(INCDIR)/elf/reloc-macros.h dwarf2dbg.h
|
||||
$(INCDIR)/elf/reloc-macros.h dwarf2dbg.h dw2gencfi.h
|
||||
|
||||
DEPTC_sh64_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
|
||||
$(BFDDIR)/elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \
|
||||
@ -1277,7 +1277,7 @@ DEPTC_sh64_elf = $(INCDIR)/symcat.h $(srcdir)/config/obj-elf.h \
|
||||
$(srcdir)/config/tc-sh.h $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h \
|
||||
$(BFDDIR)/elf32-sh64.h $(INCDIR)/safe-ctype.h $(srcdir)/../opcodes/sh64-opc.h \
|
||||
$(srcdir)/config/tc-sh.c subsegs.h $(INCDIR)/obstack.h \
|
||||
$(srcdir)/../opcodes/sh-opc.h struc-symbol.h dwarf2dbg.h
|
||||
$(srcdir)/../opcodes/sh-opc.h struc-symbol.h dwarf2dbg.h dw2gencfi.h
|
||||
|
||||
DEPTC_sparc_aout = $(INCDIR)/symcat.h $(srcdir)/config/obj-aout.h \
|
||||
$(srcdir)/config/tc-sparc.h $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h \
|
||||
|
@ -35,6 +35,7 @@
|
||||
#endif
|
||||
|
||||
#include "dwarf2dbg.h"
|
||||
#include "dw2gencfi.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@ -4341,4 +4342,53 @@ sh_parse_name (char const *name, expressionS *exprP, char *nextcharP)
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
sh_cfi_frame_initial_instructions (void)
|
||||
{
|
||||
cfi_add_CFA_def_cfa (15, 0);
|
||||
}
|
||||
|
||||
int
|
||||
sh_regname_to_dw2regnum (const char *regname)
|
||||
{
|
||||
unsigned int regnum = -1;
|
||||
unsigned int i;
|
||||
const char *p;
|
||||
char *q;
|
||||
static struct { char *name; int dw2regnum; } regnames[] =
|
||||
{
|
||||
{ "pr", 17 }, { "t", 18 }, { "gbr", 19 }, { "mach", 20 },
|
||||
{ "macl", 21 }, { "fpul", 23 }
|
||||
};
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE (regnames); ++i)
|
||||
if (strcmp (regnames[i].name, regname) == 0)
|
||||
return regnames[i].dw2regnum;
|
||||
|
||||
if (regname[0] == 'r')
|
||||
{
|
||||
p = regname + 1;
|
||||
regnum = strtoul (p, &q, 10);
|
||||
if (p == q || *q || regnum >= 16)
|
||||
return -1;
|
||||
}
|
||||
else if (regname[0] == 'f' && regname[1] == 'r')
|
||||
{
|
||||
p = regname + 2;
|
||||
regnum = strtoul (p, &q, 10);
|
||||
if (p == q || *q || regnum >= 16)
|
||||
return -1;
|
||||
regnum += 25;
|
||||
}
|
||||
else if (regname[0] == 'x' && regname[1] == 'd')
|
||||
{
|
||||
p = regname + 2;
|
||||
regnum = strtoul (p, &q, 10);
|
||||
if (p == q || *q || regnum >= 8)
|
||||
return -1;
|
||||
regnum += 87;
|
||||
}
|
||||
return regnum;
|
||||
}
|
||||
#endif /* BFD_ASSEMBLER */
|
||||
|
@ -42,9 +42,6 @@ extern int sh_small;
|
||||
/* Don't try to break words. */
|
||||
#define WORKING_DOT_WORD
|
||||
|
||||
/* All SH instructions are multiples of 16 bits. */
|
||||
#define DWARF2_LINE_MIN_INSN_LENGTH 2
|
||||
|
||||
/* We require .long, et. al., to be aligned correctly. */
|
||||
#define md_cons_align(nbytes) sh_cons_align (nbytes)
|
||||
extern void sh_cons_align (int);
|
||||
@ -261,4 +258,17 @@ void sh_cons_fix_new (fragS *, int, int, expressionS *);
|
||||
symbols. The relocation type is stored in X_md. */
|
||||
#define O_PIC_reloc O_md1
|
||||
|
||||
#define TARGET_USE_CFIPOP 1
|
||||
|
||||
#define tc_cfi_frame_initial_instructions sh_cfi_frame_initial_instructions
|
||||
extern void sh_cfi_frame_initial_instructions (void);
|
||||
|
||||
#define tc_regname_to_dw2regnum sh_regname_to_dw2regnum
|
||||
extern int sh_regname_to_dw2regnum (const char *regname);
|
||||
|
||||
/* All SH instructions are multiples of 16 bits. */
|
||||
#define DWARF2_LINE_MIN_INSN_LENGTH 2
|
||||
#define DWARF2_DEFAULT_RETURN_COLUMN 17
|
||||
#define DWARF2_CIE_DATA_ALIGNMENT -4
|
||||
|
||||
#endif /* OBJ_ELF */
|
||||
|
@ -1,3 +1,9 @@
|
||||
2004-03-17 Kaz Kojima <kkojima@rr.iij4u.or.jp>
|
||||
|
||||
* gas/cfi/cfi-sh-1.d: New file.
|
||||
* gas/cfi/cfi-sh-1.s: Likewise.
|
||||
* gas/cfi/cfi.exp: Add SH case.
|
||||
|
||||
2004-03-16 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* gas/ppc/altivec.d: Update.
|
||||
|
29
gas/testsuite/gas/cfi/cfi-sh-1.d
Normal file
29
gas/testsuite/gas/cfi/cfi-sh-1.d
Normal file
@ -0,0 +1,29 @@
|
||||
#readelf: -wf
|
||||
#name: CFI on SH
|
||||
The section .eh_frame contains:
|
||||
|
||||
00000000 00000010 00000000 CIE
|
||||
Version: 1
|
||||
Augmentation: "zR"
|
||||
Code alignment factor: 2
|
||||
Data alignment factor: -4
|
||||
Return address column: 17
|
||||
Augmentation data: 1b
|
||||
|
||||
DW_CFA_def_cfa: r15 ofs 0
|
||||
|
||||
00000014 00000020 00000018 FDE cie=00000000 pc=0000001c..00000048
|
||||
DW_CFA_advance_loc: 2 to 0000001e
|
||||
DW_CFA_def_cfa_offset: 4
|
||||
DW_CFA_advance_loc: 2 to 00000020
|
||||
DW_CFA_def_cfa_offset: 8
|
||||
DW_CFA_offset: r15 at cfa-4
|
||||
DW_CFA_offset: r17 at cfa-8
|
||||
DW_CFA_advance_loc: 6 to 00000026
|
||||
DW_CFA_def_cfa_reg: r14
|
||||
DW_CFA_advance_loc: 2 to 00000028
|
||||
DW_CFA_def_cfa_offset: 40
|
||||
DW_CFA_nop
|
||||
DW_CFA_nop
|
||||
DW_CFA_nop
|
||||
|
39
gas/testsuite/gas/cfi/cfi-sh-1.s
Normal file
39
gas/testsuite/gas/cfi/cfi-sh-1.s
Normal file
@ -0,0 +1,39 @@
|
||||
.file "a.c"
|
||||
.text
|
||||
.align 1
|
||||
.globl foo
|
||||
.type foo, @function
|
||||
foo:
|
||||
.cfi_startproc
|
||||
mov.l r14,@-r15
|
||||
.cfi_adjust_cfa_offset 4
|
||||
sts.l pr,@-r15
|
||||
.cfi_adjust_cfa_offset 4
|
||||
.cfi_offset r15,-4
|
||||
.cfi_offset pr,-8
|
||||
tst r4,r4
|
||||
bt/s .L2
|
||||
mov r15,r14
|
||||
.cfi_def_cfa_register r14
|
||||
add #-32,r15
|
||||
.cfi_adjust_cfa_offset 32
|
||||
mov.l .L3,r0
|
||||
jsr @r0
|
||||
mov r15,r4
|
||||
.L2:
|
||||
mov.l .L4,r0
|
||||
jsr @r0
|
||||
nop
|
||||
mov #0,r0
|
||||
mov r14,r15
|
||||
lds.l @r15+,pr
|
||||
rts
|
||||
mov.l @r15+,r14
|
||||
.L5:
|
||||
.align 2
|
||||
.L3:
|
||||
.long bar
|
||||
.L4:
|
||||
.long baz
|
||||
.cfi_endproc
|
||||
.size foo, .-foo
|
@ -49,6 +49,13 @@ if [istarget "x86_64-*"] then {
|
||||
if { [regexp "elf64\[_-\]sparc" $nm_help] } then {
|
||||
run_dump_test "cfi-sparc64-1"
|
||||
}
|
||||
|
||||
} elseif [istarget "sh*-*"] then {
|
||||
if { [istarget sh64*-*-*] || [istarget sh5*-*-*] } then {
|
||||
} else {
|
||||
run_dump_test "cfi-sh-1"
|
||||
}
|
||||
|
||||
} else {
|
||||
return
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user