aboutsummaryrefslogtreecommitdiff
path: root/gas/config
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2003-06-05 03:27:03 +0000
committerRichard Henderson <rth@redhat.com>2003-06-05 03:27:03 +0000
commitf4b97536ed71fbe05b8b0886d63f5ea2c4c66ae8 (patch)
treee8c852588d3ba38102c6665c371b868efee661ac /gas/config
parent8efca6bae5ba97df122dc08b74a2ffb768d46c04 (diff)
downloadgdb-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.c59
-rw-r--r--gas/config/tc-alpha.h5
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