From: James Lemke Date: Mon, 23 Feb 1998 22:27:12 +0000 (+0000) Subject: Instead of changing the names of .bss etc, add .vubss etc via X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=96f5b6b2a52f569c3555eca4f6c011777d1ba888;p=binutils-gdb.git Instead of changing the names of .bss etc, add .vubss etc via the macro ELF_TC_SPECIAL_SECTIONS. As per Ian's suggestion. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 4672069516f..74da07b06ac 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +Mon Feb 23 17:24:06 1998 Jim Lemke + + * 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 * cgen.c: #include symcat.h. diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c index c861d544519..fc3921d2200 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 9e0f6f2b307..39fcab10178 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 }, +