aboutsummaryrefslogtreecommitdiff
path: root/gas/config
diff options
context:
space:
mode:
authorJames Lemke <jlemke@cygnus>1998-02-23 22:27:12 +0000
committerJames Lemke <jlemke@cygnus>1998-02-23 22:27:12 +0000
commit96f5b6b2a52f569c3555eca4f6c011777d1ba888 (patch)
tree684cc5d5f657690b7c966bfd0c91ee448b27c179 /gas/config
parent02310b01ca7f89c761ede50557c4ac3db9bebffb (diff)
downloadgdb-96f5b6b2a52f569c3555eca4f6c011777d1ba888.zip
gdb-96f5b6b2a52f569c3555eca4f6c011777d1ba888.tar.gz
gdb-96f5b6b2a52f569c3555eca4f6c011777d1ba888.tar.bz2
Instead of changing the names of .bss etc, add .vubss etc via
the macro ELF_TC_SPECIAL_SECTIONS. As per Ian's suggestion.
Diffstat (limited to 'gas/config')
-rw-r--r--gas/config/obj-elf.c50
-rw-r--r--gas/config/tc-dvp.h14
2 files changed, 56 insertions, 8 deletions
diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
index c861d54..fc3921d 100644
--- a/gas/config/obj-elf.c
+++ b/gas/config/obj-elf.c
@@ -65,6 +65,7 @@ static void obj_elf_common PARAMS ((int));
static void obj_elf_symver PARAMS ((int));
static void obj_elf_data PARAMS ((int));
static void obj_elf_text PARAMS ((int));
+static void obj_elf_subsection PARAMS ((int));
static const pseudo_typeS elf_pseudo_table[] =
{
@@ -87,6 +88,9 @@ static const pseudo_typeS elf_pseudo_table[] =
/* This is a GNU extension to handle symbol versions. */
{"symver", obj_elf_symver, 0},
+ /* A GNU extension to change subsection only. */
+ {"subsection", obj_elf_subsection, 0},
+
/* These are used for dwarf. */
{"2byte", cons, 2},
{"4byte", cons, 4},
@@ -155,11 +159,11 @@ elf_begin ()
{
/* Add symbols for the known sections to the symbol table. */
symbol_table_insert (section_symbol (bfd_get_section_by_name (stdoutput,
- ".text")));
+ TEXT_SECTION_NAME)));
symbol_table_insert (section_symbol (bfd_get_section_by_name (stdoutput,
- ".data")));
+ DATA_SECTION_NAME)));
symbol_table_insert (section_symbol (bfd_get_section_by_name (stdoutput,
- ".bss")));
+ BSS_SECTION_NAME)));
}
void
@@ -617,6 +621,7 @@ obj_elf_section (xxx)
++input_line_pointer;
SKIP_WHITESPACE ();
+
if (*input_line_pointer == '"')
{
/* Pick up a string with a combination of a, w, x. */
@@ -699,7 +704,7 @@ obj_elf_section (xxx)
SKIP_WHITESPACE ();
if (*input_line_pointer != '#')
{
- as_warn ("Bad .section directive");
+ as_warn ("Bad .section directive - character following name is not '#'");
ignore_rest_of_line ();
return;
}
@@ -845,6 +850,28 @@ obj_elf_text (i)
#endif
}
+static void
+obj_elf_subsection (ignore)
+ int ignore;
+{
+ register int temp;
+
+#ifdef md_flush_pending_output
+ md_flush_pending_output ();
+#endif
+
+ previous_section = now_seg;
+ previous_subsection = now_subseg;
+
+ temp = get_absolute_expression ();
+ subseg_set (now_seg, (subsegT) temp);
+ demand_empty_rest_of_line ();
+
+#ifdef md_elf_section_change_hook
+ md_elf_section_change_hook ();
+#endif
+}
+
/* This can be called from the processor backends if they change
sections. */
@@ -1373,10 +1400,17 @@ elf_frob_symbol (symp, puntp)
#ifdef TC_MIPS
/* The Irix 5 and 6 assemblers set the type of any common symbol and
- any undefined non-function symbol to STT_OBJECT. We try to be compatible,
- since newer Irix 5 and 6 linkers care. */
- if (S_IS_COMMON (symp)
- || (! S_IS_DEFINED (symp) && ((symp->bsym->flags & BSF_FUNCTION) == 0)))
+ any undefined non-function symbol to STT_OBJECT. We try to be
+ compatible, since newer Irix 5 and 6 linkers care. However, we
+ only set undefined symbols to be STT_OBJECT if we are on Irix,
+ because that is the only time gcc will generate the necessary
+ .global directives to mark functions. */
+
+ if (S_IS_COMMON (symp))
+ symp->bsym->flags |= BSF_OBJECT;
+
+ if (strstr (TARGET_OS, "irix") != NULL
+ && (! S_IS_DEFINED (symp) && ((symp->bsym->flags & BSF_FUNCTION) == 0)))
symp->bsym->flags |= BSF_OBJECT;
#endif
diff --git a/gas/config/tc-dvp.h b/gas/config/tc-dvp.h
index 9e0f6f2..39fcab1 100644
--- a/gas/config/tc-dvp.h
+++ b/gas/config/tc-dvp.h
@@ -52,3 +52,17 @@
#define MD_APPLY_FIX3
#define TC_HANDLES_FX_DONE
+
+/* Called after parsing a file. */
+#define md_after_pass_hook() dvp_parse_done ()
+
+/* Default section names. */
+#define TEXT_SECTION_NAME ".vutext"
+#define DATA_SECTION_NAME ".vudata"
+#define BSS_SECTION_NAME ".vubss"
+
+#define ELF_TC_SPECIAL_SECTIONS \
+ { ".vubss", SHT_NOBITS, SHF_ALLOC + SHF_WRITE }, \
+ { ".vudata", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, \
+ { ".vutext", SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
+