Work around for problems in linking C++ programs that need file-level
authorMichael Tiemann <tiemann@cygnus>
Sun, 2 Feb 1992 21:12:25 +0000 (21:12 +0000)
committerMichael Tiemann <tiemann@cygnus>
Sun, 2 Feb 1992 21:12:25 +0000 (21:12 +0000)
initialization.  Now C++ programs can be linked.

ld/ldsym.c
ld/relax.c

index 007d191b2acbf3c165faa21f52067ac6d0f14545..3ab87994fb44c2c82002e6bf4bd0f1e14146a7b3 100644 (file)
@@ -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 
index 5500f5e0f4116167dc48595428b4127a962484ec..a0a8ab6253be7ba03a2d8221c833abedb9f273af 100644 (file)
@@ -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: