diff options
-rw-r--r-- | gas/ChangeLog | 9 | ||||
-rw-r--r-- | gas/as.c | 4 | ||||
-rw-r--r-- | gas/config/obj-elf.c | 44 | ||||
-rw-r--r-- | gas/config/obj-elf.h | 8 |
4 files changed, 55 insertions, 10 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index ba8bebd..c13ce32 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,12 @@ +Mon Oct 7 11:24:29 1996 Ian Lance Taylor <ian@cygnus.com> + + * config/obj-elf.c (elf_begin): New function. + (obj_elf_section): Add the section symbol to the symbol table. + * config/obj-elf.h (obj_begin): Define. + (elf_begin): Declare. + * as.c (perform_an_assembly_pass): Call obj_begin if it is + defined. + Fri Oct 4 18:37:32 1996 Ian Lance Taylor <ian@cygnus.com> * config/obj-coff.c (fixup_segment): Subtract the section address @@ -788,6 +788,10 @@ perform_an_assembly_pass (argc, argv) and sections already created, in BFD_ASSEMBLER mode. */ md_begin (); +#ifdef obj_begin + obj_begin (); +#endif + argv++; /* skip argv[0] */ argc--; /* skip argv[0] */ while (argc--) diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c index 8797672..ffd66d1 100644 --- a/gas/config/obj-elf.c +++ b/gas/config/obj-elf.c @@ -136,6 +136,20 @@ static const pseudo_typeS ecoff_debug_pseudo_table[] = #undef NO_RELOC #include "aout/aout64.h" +/* This is called when the assembler starts. */ + +void +elf_begin () +{ + /* Add symbols for the known sections to the symbol table. */ + symbol_table_insert (section_symbol (bfd_get_section_by_name (stdoutput, + ".text"))); + symbol_table_insert (section_symbol (bfd_get_section_by_name (stdoutput, + ".data"))); + symbol_table_insert (section_symbol (bfd_get_section_by_name (stdoutput, + ".bss"))); +} + void elf_pop_insert () { @@ -499,6 +513,7 @@ obj_elf_section (xxx) int type, attr; int i; flagword flags; + symbolS *secsym; #ifdef md_flush_pending_output md_flush_pending_output (); @@ -731,24 +746,33 @@ obj_elf_section (xxx) flags = (SEC_RELOC | ((attr & SHF_WRITE) ? 0 : SEC_READONLY) - | ((attr & SHF_ALLOC) ? SEC_ALLOC | SEC_LOAD : 0) + | ((attr & SHF_ALLOC) ? SEC_ALLOC : 0) + | (((attr & SHF_ALLOC) && type != SHT_NOBITS) ? SEC_LOAD : 0) | ((attr & SHF_EXECINSTR) ? SEC_CODE : 0)); - - if (type == SHT_PROGBITS) - flags |= SEC_ALLOC | SEC_LOAD; - else if (type == SHT_NOBITS) + if (special_sections[i].name == NULL) { - flags |= SEC_ALLOC; - flags &=~ SEC_LOAD; - } + if (type == SHT_PROGBITS) + flags |= SEC_ALLOC | SEC_LOAD; + else if (type == SHT_NOBITS) + { + flags |= SEC_ALLOC; + flags &=~ SEC_LOAD; + } #ifdef md_elf_section_flags - if (special_sections[i].name == NULL) - flags = md_elf_section_flags (flags, attr, type); + flags = md_elf_section_flags (flags, attr, type); #endif + } bfd_set_section_flags (stdoutput, sec, flags); + /* Add a symbol for this section to the symbol table. */ + secsym = symbol_find (string); + if (secsym != NULL) + secsym->bsym = sec->symbol; + else + symbol_table_insert (section_symbol (sec)); + #ifdef md_elf_section_change_hook md_elf_section_change_hook (); #endif diff --git a/gas/config/obj-elf.h b/gas/config/obj-elf.h index abd7a00..f6af69f 100644 --- a/gas/config/obj-elf.h +++ b/gas/config/obj-elf.h @@ -51,6 +51,9 @@ #define TRUE !FALSE #endif +#define obj_begin() elf_begin () +extern void elf_begin PARAMS ((void)); + /* should be conditional on address size! */ #define elf_symbol(asymbol) ((elf_symbol_type *)(&(asymbol)->the_bfd)) @@ -92,6 +95,11 @@ extern void obj_elf_version PARAMS ((int)); extern void obj_elf_init_stab_section PARAMS ((segT)); #define INIT_STAB_SECTION(seg) obj_elf_init_stab_section (seg) +/* For now, always set ECOFF_DEBUGGING for an Alpha target. */ +#ifdef TC_ALPHA +#define ECOFF_DEBUGGING 1 +#endif + /* For now, always set ECOFF_DEBUGGING for a MIPS target. */ #ifdef TC_MIPS #define ECOFF_DEBUGGING 1 |