summaryrefslogtreecommitdiffstats
path: root/gas/config
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1996-10-07 15:25:58 +0000
committerIan Lance Taylor <ian@airs.com>1996-10-07 15:25:58 +0000
commit0bd28bc4f44cf35d3844554ceb638664c04cdded (patch)
treebda9fc87e30fcfc55ca64329d39a77aed6b5401e /gas/config
parentf2b435665b8a4f05807020dd399e1ecfce49d72d (diff)
downloadppe42-binutils-0bd28bc4f44cf35d3844554ceb638664c04cdded.tar.gz
ppe42-binutils-0bd28bc4f44cf35d3844554ceb638664c04cdded.zip
* 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.
Diffstat (limited to 'gas/config')
-rw-r--r--gas/config/obj-elf.c44
-rw-r--r--gas/config/obj-elf.h8
2 files changed, 42 insertions, 10 deletions
diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
index 8797672f20..ffd66d12b7 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 abd7a00cbd..f6af69fa6c 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
OpenPOWER on IntegriCloud