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[] =
{
/* 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},
{
/* 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
++input_line_pointer;
SKIP_WHITESPACE ();
+
if (*input_line_pointer == '"')
{
/* Pick up a string with a combination of a, w, x. */
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;
}
#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. */
#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
#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 },
+