diff options
author | Michael Tiemann <tiemann@cygnus> | 1992-02-02 21:12:25 +0000 |
---|---|---|
committer | Michael Tiemann <tiemann@cygnus> | 1992-02-02 21:12:25 +0000 |
commit | 58216160ef6573acb817676795cadab967afea2d (patch) | |
tree | 50e599f8c8197d916467aa336ebc4addb06707b0 /ld | |
parent | 05cd8d982d8efb768cd39fe25fc66edf758a1f8e (diff) | |
download | gdb-58216160ef6573acb817676795cadab967afea2d.zip gdb-58216160ef6573acb817676795cadab967afea2d.tar.gz gdb-58216160ef6573acb817676795cadab967afea2d.tar.bz2 |
Work around for problems in linking C++ programs that need file-level
initialization. Now C++ programs can be linked.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ldsym.c | 3 | ||||
-rw-r--r-- | ld/relax.c | 36 |
2 files changed, 21 insertions, 18 deletions
@@ -360,7 +360,10 @@ LANG_FOR_EACH_INPUT_STATEMENT(entry) for (i = 0; i < entry->symbol_count; i++) { asymbol *p = entry->asymbols[i]; + /* FIXME, temporary hack, since not all of ld knows about the new abs section convention */ + if (p->section == 0) + p->section = &bfd_abs_section; if (flag_is_global(p->flags) ) { /* We are only interested in outputting @@ -28,7 +28,7 @@ DEFUN(build_it,(statement), { switch (statement->header.type) { case lang_fill_statement_enum: - { + { #if 0 bfd_byte play_area[SHORT_SIZE]; unsigned int i; @@ -57,13 +57,13 @@ DEFUN(build_it,(statement), } #endif + abort(); } break; case lang_data_statement_enum: - { -abort(); - #if 0 + { + bfd_vma value = statement->data_statement.value; bfd_byte play_area[LONG_SIZE]; unsigned int size = 0; @@ -89,29 +89,29 @@ abort(); size); -#endif } +#endif break; case lang_input_section_enum: - { - /* Create a new seclet in the output section with this - attached */ + { + /* Create a new seclet in the output section with this + attached */ - asection *i = statement->input_section.section; + asection *i = statement->input_section.section; - asection *output_section = i->output_section; + asection *output_section = i->output_section; - bfd_seclet_type *seclet = bfd_new_seclet(output_section->owner,output_section); + bfd_seclet_type *seclet = bfd_new_seclet(output_section->owner,output_section); - seclet->type = bfd_indirect_seclet; - seclet->u.indirect.section = i; - seclet->u.indirect.symbols = statement->input_section.ifile->asymbols; - seclet->size = bfd_get_section_size_before_reloc(i); - seclet->offset = i->output_offset; - seclet->next = 0; + seclet->type = bfd_indirect_seclet; + seclet->u.indirect.section = i; + seclet->u.indirect.symbols = statement->input_section.ifile->asymbols; + seclet->size = bfd_get_section_size_before_reloc(i); + seclet->offset = i->output_offset; + seclet->next = 0; - } + } break; default: |