diff options
author | Richard Henderson <rth@redhat.com> | 2003-06-05 03:27:03 +0000 |
---|---|---|
committer | Richard Henderson <rth@redhat.com> | 2003-06-05 03:27:03 +0000 |
commit | f4b97536ed71fbe05b8b0886d63f5ea2c4c66ae8 (patch) | |
tree | e8c852588d3ba38102c6665c371b868efee661ac /gas/config | |
parent | 8efca6bae5ba97df122dc08b74a2ffb768d46c04 (diff) | |
download | gdb-f4b97536ed71fbe05b8b0886d63f5ea2c4c66ae8.zip gdb-f4b97536ed71fbe05b8b0886d63f5ea2c4c66ae8.tar.gz gdb-f4b97536ed71fbe05b8b0886d63f5ea2c4c66ae8.tar.bz2 |
* 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.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-alpha.c | 59 | ||||
-rw-r--r-- | gas/config/tc-alpha.h | 5 |
2 files changed, 64 insertions, 0 deletions
diff --git a/gas/config/tc-alpha.c b/gas/config/tc-alpha.c index a775c0d..83dbd34 100644 --- a/gas/config/tc-alpha.c +++ b/gas/config/tc-alpha.c @@ -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}, diff --git a/gas/config/tc-alpha.h b/gas/config/tc-alpha.h index 44ccd4e..d9275e2 100644 --- a/gas/config/tc-alpha.h +++ b/gas/config/tc-alpha.h @@ -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 |