* config/tc-alpha.c (s_alpha_usepv): New.
(md_pseudo_table): Add it. (alpha_cfi_frame_initial_instructions): New. * config/tc-alpha.h (TARGET_USE_CFIPOP): New. (tc_cfi_frame_initial_instructions): New. * doc/c-alpha.texi: Document .usepv. * gas/alpha/elf-usepv-1.[sd]: New. * gas/alpha/elf-usepv-2.[sd]: New. * gas/alpha/alpha.exp: Run them. * gas/cfi/cfi-alpha-3.[sd]: New. * gas/cfi/cfi.exp: Run it.
This commit is contained in:
parent
8efca6bae5
commit
f4b97536ed
13 changed files with 185 additions and 0 deletions
|
@ -1,3 +1,12 @@
|
|||
2003-06-04 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* config/tc-alpha.c (s_alpha_usepv): New.
|
||||
(md_pseudo_table): Add it.
|
||||
(alpha_cfi_frame_initial_instructions): New.
|
||||
* config/tc-alpha.h (TARGET_USE_CFIPOP): New.
|
||||
(tc_cfi_frame_initial_instructions): New.
|
||||
* doc/c-alpha.texi: Document .usepv.
|
||||
|
||||
2003-06-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* as.c (show_usage): Document --execstack and --noexecstack.
|
||||
|
|
|
@ -267,6 +267,7 @@ static void s_alpha_file PARAMS ((int));
|
|||
static void s_alpha_loc PARAMS ((int));
|
||||
static void s_alpha_stab PARAMS ((int));
|
||||
static void s_alpha_coff_wrapper PARAMS ((int));
|
||||
static void s_alpha_usepv PARAMS ((int));
|
||||
#endif
|
||||
#ifdef OBJ_EVAX
|
||||
static void s_alpha_section PARAMS ((int));
|
||||
|
@ -4822,8 +4823,65 @@ alpha_elf_md_end (void)
|
|||
cfi_end_fde (p->func_end_sym);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
s_alpha_usepv (int unused ATTRIBUTE_UNUSED)
|
||||
{
|
||||
char *name, name_end;
|
||||
char *which, which_end;
|
||||
symbolS *sym;
|
||||
int other;
|
||||
|
||||
name = input_line_pointer;
|
||||
name_end = get_symbol_end ();
|
||||
|
||||
if (! is_name_beginner (*name))
|
||||
{
|
||||
as_bad (_(".usepv directive has no name"));
|
||||
*input_line_pointer = name_end;
|
||||
ignore_rest_of_line ();
|
||||
return;
|
||||
}
|
||||
|
||||
sym = symbol_find_or_make (name);
|
||||
*input_line_pointer++ = name_end;
|
||||
|
||||
if (name_end != ',')
|
||||
{
|
||||
as_bad (_(".usepv directive has no type"));
|
||||
ignore_rest_of_line ();
|
||||
return;
|
||||
}
|
||||
|
||||
SKIP_WHITESPACE ();
|
||||
which = input_line_pointer;
|
||||
which_end = get_symbol_end ();
|
||||
|
||||
if (strcmp (which, "no") == 0)
|
||||
other = STO_ALPHA_NOPV;
|
||||
else if (strcmp (which, "std") == 0)
|
||||
other = STO_ALPHA_STD_GPLOAD;
|
||||
else
|
||||
{
|
||||
as_bad (_("unknown argument for .usepv"));
|
||||
other = 0;
|
||||
}
|
||||
|
||||
*input_line_pointer = which_end;
|
||||
demand_empty_rest_of_line ();
|
||||
|
||||
S_SET_OTHER (sym, other | (S_GET_OTHER (sym) & ~STO_ALPHA_STD_GPLOAD));
|
||||
}
|
||||
#endif /* OBJ_ELF */
|
||||
|
||||
/* Standard calling conventions leaves the CFA at $30 on entry. */
|
||||
|
||||
void
|
||||
alpha_cfi_frame_initial_instructions ()
|
||||
{
|
||||
cfi_add_CFA_def_cfa_register (30);
|
||||
}
|
||||
|
||||
#ifdef OBJ_EVAX
|
||||
|
||||
/* Handle the section specific pseudo-op. */
|
||||
|
@ -5669,6 +5727,7 @@ const pseudo_typeS md_pseudo_table[] = {
|
|||
{"loc", s_alpha_loc, 9},
|
||||
{"stabs", s_alpha_stab, 's'},
|
||||
{"stabn", s_alpha_stab, 'n'},
|
||||
{"usepv", s_alpha_usepv, 0},
|
||||
/* COFF debugging related pseudos. */
|
||||
{"begin", s_alpha_coff_wrapper, 0},
|
||||
{"bend", s_alpha_coff_wrapper, 1},
|
||||
|
|
|
@ -161,6 +161,11 @@ do { \
|
|||
(long) FIX->tc_fix_data.next_reloc); \
|
||||
} while (0)
|
||||
|
||||
#define TARGET_USE_CFIPOP 1
|
||||
|
||||
#define tc_cfi_frame_initial_instructions alpha_cfi_frame_initial_instructions
|
||||
extern void alpha_cfi_frame_initial_instructions(void);
|
||||
|
||||
#define DWARF2_LINE_MIN_INSN_LENGTH 4
|
||||
#define DWARF2_DEFAULT_RETURN_COLUMN 26
|
||||
#define DWARF2_CIE_DATA_ALIGNMENT -8
|
||||
|
|
|
@ -379,6 +379,18 @@ to perform a load of the GP register; 2 indicates that @code{$27} is
|
|||
used in some non-standard way and so the linker cannot elide the load of
|
||||
the procedure vector during relaxation.
|
||||
|
||||
@item .usepv @var{function}, @var{which}
|
||||
Used to indicate the use of the @code{$27} register, similar to
|
||||
@code{.prologue}, but without the other semantics of needing to
|
||||
be inside an open @code{.ent}/@code{.end} block.
|
||||
|
||||
The @var{which} argument should be either @code{no}, indicating that
|
||||
@code{$27} is not used, or @code{std}, indicating that the first two
|
||||
instructions of the function perform a GP load.
|
||||
|
||||
One might use this directive instead of @code{.prologue} if you are
|
||||
also using dwarf2 CFI directives.
|
||||
|
||||
@item .gprel32 @var{expression}
|
||||
Computes the difference between the address in @var{expression} and the
|
||||
GP for the current object file, and stores it in 4 bytes. In addition
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
2003-06-04 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* gas/alpha/elf-usepv-1.[sd]: New.
|
||||
* gas/alpha/elf-usepv-2.[sd]: New.
|
||||
* gas/alpha/alpha.exp: Run them.
|
||||
* gas/cfi/cfi-alpha-3.[sd]: New.
|
||||
* gas/cfi/cfi.exp: Run it.
|
||||
|
||||
2003-05-31 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* gas/alpha/elf-reloc-8.d: Correct .eh_frame relocs.
|
||||
|
|
|
@ -34,6 +34,8 @@ if { [istarget alpha*-*-*] } then {
|
|||
run_dump_test "elf-tls-1"
|
||||
run_list_test "elf-tls-2" ""
|
||||
run_list_test "elf-tls-3" ""
|
||||
run_dump_test "elf-usepv-1"
|
||||
run_list_test "elf-usepv-2" ""
|
||||
}
|
||||
|
||||
run_dump_test "fp"
|
||||
|
|
11
gas/testsuite/gas/alpha/elf-usepv-1.d
Normal file
11
gas/testsuite/gas/alpha/elf-usepv-1.d
Normal file
|
@ -0,0 +1,11 @@
|
|||
#objdump: --syms
|
||||
#name: alpha elf-usepv-1
|
||||
|
||||
.*: file format elf64-alpha
|
||||
|
||||
SYMBOL TABLE:
|
||||
0*0000000 l d .text 0*0000000
|
||||
0*0000000 l d .data 0*0000000
|
||||
0*0000000 l d .bss 0*0000000
|
||||
0*0000000 l .text 0*0000000 0x80 foo
|
||||
0*0000004 l .text 0*0000000 0x88 bar
|
6
gas/testsuite/gas/alpha/elf-usepv-1.s
Normal file
6
gas/testsuite/gas/alpha/elf-usepv-1.s
Normal file
|
@ -0,0 +1,6 @@
|
|||
.usepv foo, no
|
||||
foo:
|
||||
nop
|
||||
.usepv bar, std
|
||||
bar:
|
||||
nop
|
2
gas/testsuite/gas/alpha/elf-usepv-2.l
Normal file
2
gas/testsuite/gas/alpha/elf-usepv-2.l
Normal file
|
@ -0,0 +1,2 @@
|
|||
.*: Assembler messages:
|
||||
.*:1: Error: unknown argument for .usepv
|
1
gas/testsuite/gas/alpha/elf-usepv-2.s
Normal file
1
gas/testsuite/gas/alpha/elf-usepv-2.s
Normal file
|
@ -0,0 +1 @@
|
|||
.usepv foo, bar
|
32
gas/testsuite/gas/cfi/cfi-alpha-3.d
Normal file
32
gas/testsuite/gas/cfi/cfi-alpha-3.d
Normal file
|
@ -0,0 +1,32 @@
|
|||
#readelf: -wf
|
||||
#name: CFI on alpha, 3
|
||||
The section .eh_frame contains:
|
||||
|
||||
00000000 00000010 00000000 CIE
|
||||
Version: 1
|
||||
Augmentation: "zR"
|
||||
Code alignment factor: 4
|
||||
Data alignment factor: -8
|
||||
Return address column: 26
|
||||
Augmentation data: 1b
|
||||
|
||||
DW_CFA_def_cfa_reg: r30
|
||||
DW_CFA_nop
|
||||
|
||||
00000014 00000024 00000018 FDE cie=00000000 pc=0000001c..0000005c
|
||||
DW_CFA_advance_loc: 4 to 00000020
|
||||
DW_CFA_def_cfa_offset: 32
|
||||
DW_CFA_advance_loc: 4 to 00000024
|
||||
DW_CFA_offset: r26 at cfa-32
|
||||
DW_CFA_advance_loc: 4 to 00000028
|
||||
DW_CFA_offset: r9 at cfa-24
|
||||
DW_CFA_advance_loc: 4 to 0000002c
|
||||
DW_CFA_offset: r15 at cfa-16
|
||||
DW_CFA_advance_loc: 4 to 00000030
|
||||
DW_CFA_offset: r34 at cfa-8
|
||||
DW_CFA_advance_loc: 4 to 00000034
|
||||
DW_CFA_def_cfa_reg: r15
|
||||
DW_CFA_advance_loc: 36 to 00000058
|
||||
DW_CFA_def_cfa: r30 ofs 0
|
||||
DW_CFA_nop
|
||||
|
37
gas/testsuite/gas/cfi/cfi-alpha-3.s
Normal file
37
gas/testsuite/gas/cfi/cfi-alpha-3.s
Normal file
|
@ -0,0 +1,37 @@
|
|||
.file 1 "z.c"
|
||||
.set noat
|
||||
.set noreorder
|
||||
.text
|
||||
.align 4
|
||||
.globl f
|
||||
.type f,@function
|
||||
.usepv f,no
|
||||
.cfi_startproc
|
||||
f:
|
||||
lda $30,-32($30)
|
||||
.cfi_adjust_cfa_offset 32
|
||||
stq $26,0($30)
|
||||
.cfi_offset $26, -32
|
||||
stq $9,8($30)
|
||||
.cfi_offset $9, -24
|
||||
stq $15,16($30)
|
||||
.cfi_offset $15, -16
|
||||
stt $f2,24($30)
|
||||
.cfi_offset $f2, -8
|
||||
mov $30,$15
|
||||
.cfi_def_cfa_register $15
|
||||
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
mov $15,$30
|
||||
ldq $26,0($30)
|
||||
ldq $9,8($30)
|
||||
ldt $f2,24($30)
|
||||
ldq $15,16($30)
|
||||
lda $30,32($30)
|
||||
.cfi_def_cfa $30, 0
|
||||
ret $31,($26),1
|
||||
.size f, .-f
|
||||
.cfi_endproc
|
|
@ -16,5 +16,6 @@ if { [istarget alpha*-*-*] } then {
|
|||
if $elf {
|
||||
run_dump_test "cfi-alpha-1"
|
||||
run_dump_test "cfi-alpha-2"
|
||||
run_dump_test "cfi-alpha-3"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue