diff options
author | James Lemke <jlemke@cygnus> | 1998-02-23 22:27:12 +0000 |
---|---|---|
committer | James Lemke <jlemke@cygnus> | 1998-02-23 22:27:12 +0000 |
commit | 96f5b6b2a52f569c3555eca4f6c011777d1ba888 (patch) | |
tree | 684cc5d5f657690b7c966bfd0c91ee448b27c179 /gas/config | |
parent | 02310b01ca7f89c761ede50557c4ac3db9bebffb (diff) | |
download | gdb-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.c | 50 | ||||
-rw-r--r-- | gas/config/tc-dvp.h | 14 |
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 }, + |