Instead of changing the names of .bss etc, add .vubss etc via

the macro ELF_TC_SPECIAL_SECTIONS.  As per Ian's suggestion.
This commit is contained in:
James Lemke 1998-02-23 22:27:12 +00:00
parent 02310b01ca
commit 96f5b6b2a5
3 changed files with 63 additions and 8 deletions

View file

@ -1,3 +1,10 @@
Mon Feb 23 17:24:06 1998 Jim Lemke <jlemke@cygnus.com>
* config/obj-elf.c: Take Ian's suggestion, leave .bss etc
in special_sections table and add .vubss etc via
ELF_TC_SPECIAL_SECTIONS.
* config/tc-dvp.h: Likewise.
Mon Feb 23 11:29:06 1998 Doug Evans <devans@seba.cygnus.com>
* cgen.c: #include symcat.h.

View file

@ -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

View file

@ -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 },