* ldver.c: Bumped version to 1.96 - new release, resync with the
authorSteve Chamberlain <sac@cygnus>
Mon, 4 May 1992 23:38:42 +0000 (23:38 +0000)
committerSteve Chamberlain <sac@cygnus>
Mon, 4 May 1992 23:38:42 +0000 (23:38 +0000)
bfd too #.
* ldexp.c, ldlang.c: now build memory shape tree in obstacks
rather than with raw malloc, makes it easier to track where memory
is going.
* ldsym.h, ldsym.c: create obstack for all global symbols too.
* ldwrite.c (ldwrite): moved malloc so only used when needed.
* sa29200-sc.sh: added support for .lit, data1 and data2 sections.

ld/ChangeLog
ld/ldexp.c
ld/ldlang.c
ld/ldlang.h
ld/ldmain.c
ld/ldsym.c
ld/ldsym.h
ld/ldver.c
ld/sa29200.sc-sh
ld/saber

index b4d5b3b438afe5684df632608cda0f52c2e429ab..6def8d07588d1851bdd3f7d11e8795b5fe6744df 100644 (file)
@@ -1,3 +1,15 @@
+Mon May  4 16:10:10 1992  Steve Chamberlain  (sac@thepub.cygnus.com)
+
+       * ldver.c: Bumped version to 1.96 - new release, resync with the
+       bfd too #.
+       * ldexp.c, ldlang.c: now build memory shape tree in obstacks
+       rather than with raw malloc, makes it easier to track where memory
+       is going.
+       * ldsym.h, ldsym.c: create obstack for all global symbols too.
+       * ldwrite.c (ldwrite): moved malloc so only used when needed.
+       * sa29200-sc.sh: added support for .lit, data1 and data2 sections.
+
+
 Fri May  1 18:17:52 1992  K. Richard Pixley  (rich@cygnus.com)
 
        * config/sparc.mh: use ../gcc/libgcc.a on check if it exists.
index e107110dba271c2ccd98c9a130b228f1fd6d2bff..7fcdb651c5b0e091c0a848bf1f11682648880a14 100644 (file)
@@ -157,7 +157,7 @@ etree_type *
 DEFUN(exp_intop,(value),
       bfd_vma value)
 {
-  etree_type *new = (etree_type *)ldmalloc((bfd_size_type)(sizeof(new->value)));
+  etree_type *new = (etree_type *)stat_alloc((bfd_size_type)(sizeof(new->value)));
   new->type.node_code = INT;
   new->value.value = value;
   new->type.node_class = etree_value;
@@ -520,7 +520,7 @@ DEFUN(exp_fold_tree,(tree, current_section, allocation_done,
              }
              else 
              {
-               def_ptr = (asymbol **)ldmalloc((bfd_size_type)(sizeof(asymbol **)));
+               def_ptr = (asymbol **)stat_alloc((bfd_size_type)(sizeof(asymbol **)));
                def = (asymbol   *)bfd_make_empty_symbol(script_file->the_bfd);
 
                  
@@ -589,7 +589,7 @@ DEFUN(exp_binop,(code, lhs, rhs),
     {
       return exp_intop(r.value);
     }
-  new = (etree_type *)ldmalloc((bfd_size_type)(sizeof(new->binary)));
+  new = (etree_type *)stat_alloc((bfd_size_type)(sizeof(new->binary)));
   memcpy((char *)new, (char *)&value, sizeof(new->binary));
   return new;
 }
@@ -613,7 +613,7 @@ DEFUN(exp_trinop,(code, cond, lhs, rhs),
   if (r.valid) {
     return exp_intop(r.value);
   }
-  new = (etree_type *)ldmalloc((bfd_size_type)(sizeof(new->trinary)));
+  new = (etree_type *)stat_alloc((bfd_size_type)(sizeof(new->trinary)));
   memcpy((char *)new,(char *) &value, sizeof(new->trinary));
   return new;
 }
@@ -635,7 +635,7 @@ DEFUN(exp_unop,(code, child),
   if (r.valid) {
     return exp_intop(r.value);
   }
-  new = (etree_type *)ldmalloc((bfd_size_type)(sizeof(new->unary)));
+  new = (etree_type *)stat_alloc((bfd_size_type)(sizeof(new->unary)));
   memcpy((char *)new, (char *)&value, sizeof(new->unary));
   return new;
 }
@@ -648,7 +648,6 @@ DEFUN(exp_nameop,(code, name),
 {
 
   etree_type value, *new;
-
   etree_value_type r;
   value.name.type.node_code = code;
   value.name.name = name;
@@ -661,7 +660,7 @@ DEFUN(exp_nameop,(code, name),
   if (r.valid) {
     return exp_intop(r.value);
   }
-  new = (etree_type *)ldmalloc((bfd_size_type)(sizeof(new->name)));
+  new = (etree_type *)stat_alloc((bfd_size_type)(sizeof(new->name)));
   memcpy((char *)new, (char *)&value, sizeof(new->name));
   return new;
 
@@ -690,7 +689,7 @@ DEFUN(exp_assop,(code, dst, src),
     return exp_intop(result);
   }
 #endif
-  new = (etree_type*)ldmalloc((bfd_size_type)(sizeof(new->assign)));
+  new = (etree_type*)stat_alloc((bfd_size_type)(sizeof(new->assign)));
   memcpy((char *)new, (char *)&value, sizeof(new->assign));
   return new;
 }
@@ -719,9 +718,11 @@ DEFUN(exp_print_tree,(tree),
     exp_print_tree(tree->assign.src);
     break;
   case etree_binary:
+    fprintf(config.map_file,"(");
     exp_print_tree(tree->binary.lhs);
     exp_print_token(tree->type.node_code);
     exp_print_tree(tree->binary.rhs);
+    fprintf(config.map_file,")");
     break;
   case etree_trinary:
     exp_print_tree(tree->trinary.cond);
@@ -732,9 +733,14 @@ DEFUN(exp_print_tree,(tree),
     break;
   case etree_unary:
     exp_print_token(tree->unary.type.node_code);
+    if (tree->unary.child) 
+    {
+      
     fprintf(config.map_file,"(");
     exp_print_tree(tree->unary.child);
     fprintf(config.map_file,")");
+  }
+    
     break;
   case etree_undef:
     fprintf(config.map_file,"????????");
@@ -745,6 +751,7 @@ DEFUN(exp_print_tree,(tree),
     }
     else {
       exp_print_token(tree->type.node_code);
+      if (tree->name.name)
       fprintf(config.map_file,"(%s)", tree->name.name);
     }
     break;
@@ -768,7 +775,7 @@ DEFUN(exp_get_vma,(tree, def, name, allocation_done),
 
   if (tree != (etree_type *)NULL) {
     r = exp_fold_tree_no_dot(tree,
-                     (lang_output_section_statement_type *)NULL,
+                abs_output_section,
                      allocation_done);
     if (r.valid == false && name) {
       einfo("%F%S Nonconstant expression for %s\n",name);
index eaa9d4b8658c5119338dd0c28b759d4f6b64ddc8..66c8fbbfc5756df6cc8c25b1a89bbba01f25a5cd 100644 (file)
@@ -42,6 +42,9 @@ PROTO(static void, print_statement,(lang_statement_union_type *,
 
 
 /* LOCALS */
+static struct obstack stat_obstack;
+#define obstack_chunk_alloc ldmalloc
+#define obstack_chunk_free free
 static CONST  char *startup_file;
 static lang_statement_list_type input_file_chain;
 
@@ -109,6 +112,13 @@ extern boolean write_map;
 
 void EXFUN(lang_add_data,( int type ,   union etree_union *exp));
 
+
+PTR
+DEFUN(stat_alloc,(size),
+      size_t size)
+{
+  return  obstack_alloc(&stat_obstack, size);
+}
 static void 
 DEFUN(print_size,(value),
       size_t value)
@@ -212,7 +222,7 @@ DEFUN(new_statement,(type, size, list),
       lang_statement_list_type *list)
 {
   lang_statement_union_type *new = (lang_statement_union_type *)
-    ldmalloc(size);
+    stat_alloc(size);
   new->header.type = type;
   new->header.next = (lang_statement_union_type *)NULL;
   lang_statement_append(list, new, &new->header.next);
@@ -330,8 +340,10 @@ DEFUN(lang_add_input_file,(name, file_type, target),
 void
 DEFUN_VOID(lang_init)
 {
+  obstack_begin(&stat_obstack, 1000);
 
   stat_ptr= &statement_list;
+
   lang_list_init(stat_ptr);
 
   lang_list_init(&input_file_chain);
@@ -340,9 +352,9 @@ DEFUN_VOID(lang_init)
   first_file = lang_add_input_file((char *)NULL, 
                                   lang_input_file_is_marker_enum,
                                   (char *)NULL);
-abs_output_section = lang_output_section_statement_lookup(BFD_ABS_SECTION_NAME);
+  abs_output_section = lang_output_section_statement_lookup(BFD_ABS_SECTION_NAME);
 
-abs_output_section->bfd_section = &bfd_abs_section;
+  abs_output_section->bfd_section = &bfd_abs_section;
 
 }
 
@@ -382,7 +394,7 @@ DEFUN(lang_memory_region_lookup,(name),
   }
     {
       lang_memory_region_type *new =
-       (lang_memory_region_type *)ldmalloc((bfd_size_type)(sizeof(lang_memory_region_type)));
+       (lang_memory_region_type *)stat_alloc((bfd_size_type)(sizeof(lang_memory_region_type)));
       new->name = buystring(name);
       new->next = (lang_memory_region_type *)NULL;
 
@@ -503,7 +515,7 @@ DEFUN(init_os,(s),
 /*  asection *section = bfd_get_section_by_name(output_bfd, s->name);*/
   section_userdata_type *new =
    (section_userdata_type *)
-    ldmalloc((bfd_size_type)(sizeof(section_userdata_type)));
+    stat_alloc((bfd_size_type)(sizeof(section_userdata_type)));
 
   s->bfd_section = bfd_get_section_by_name(output_bfd, s->name);
   if (s->bfd_section == (asection *)NULL)
@@ -799,7 +811,7 @@ DEFUN(ldlang_add_undef,(name),
 {
   ldlang_undef_chain_list_type *new =
     (ldlang_undef_chain_list_type
-     *)ldmalloc((bfd_size_type)(sizeof(ldlang_undef_chain_list_type)));
+     *)stat_alloc((bfd_size_type)(sizeof(ldlang_undef_chain_list_type)));
 
   new->next = ldlang_undef_chain_list_head;
   ldlang_undef_chain_list_head = new;
@@ -816,7 +828,7 @@ DEFUN_VOID(lang_place_undefineds)
   ldlang_undef_chain_list_type *ptr = ldlang_undef_chain_list_head;
   while (ptr != (ldlang_undef_chain_list_type*)NULL) {
     asymbol *def;
-    asymbol **def_ptr = (asymbol **)ldmalloc((bfd_size_type)(sizeof(asymbol **)));
+    asymbol **def_ptr = (asymbol **)stat_alloc((bfd_size_type)(sizeof(asymbol **)));
     def = (asymbol *)bfd_make_empty_symbol(script_file->the_bfd);
     *def_ptr= def;
     def->name = ptr->name;
@@ -1272,7 +1284,7 @@ DEFUN(insert_pad,(this_ptr, fill, power, output_section_statement, dot),
     {
       lang_statement_union_type *new = 
        (lang_statement_union_type *)
-         ldmalloc((bfd_size_type)(sizeof(lang_padding_statement_type)));
+         stat_alloc((bfd_size_type)(sizeof(lang_padding_statement_type)));
       /* Link into existing chain */
       new->header.next = *this_ptr;
       *this_ptr = new;
@@ -1525,7 +1537,7 @@ DEFUN(lang_size_sections,(s, output_section_statement, prev, fill,
        {
          lang_statement_union_type *new = 
           (lang_statement_union_type *)
-           ldmalloc((bfd_size_type)(sizeof(lang_padding_statement_type)));
+           stat_alloc((bfd_size_type)(sizeof(lang_padding_statement_type)));
          /* Link into existing chain */
          new->header.next = *prev;
          *prev = new;
@@ -2102,7 +2114,7 @@ DEFUN(create_symbol,(name, flags, section),
       asection *section)
 {
   extern lang_input_statement_type *script_file;
-  asymbol **def_ptr = (asymbol **)ldmalloc((bfd_size_type)(sizeof(asymbol **)));
+  asymbol **def_ptr = (asymbol **)stat_alloc((bfd_size_type)(sizeof(asymbol **)));
   /* Add this definition to script file */
   asymbol *def =  (asymbol  *)bfd_make_empty_symbol(script_file->the_bfd);
   def->name = buystring(name);
index d5dc21ba21397cc128be68083ab88f3a1595705e..ad0fe6b5cbfe3357d781808ced46edaae0c56143 100644 (file)
@@ -120,6 +120,8 @@ typedef struct {
 typedef struct {
   lang_statement_header_type header;
   fill_type fill;
+  int size;
+  asection *output_section;
 } lang_fill_statement_type;
 
 typedef struct {
@@ -339,3 +341,4 @@ void EXFUN(lang_add_data,(int type, union etree_union *));
 
 void EXFUN(lang_for_each_statement,(void (*func)()));
 
+PTR EXFUN(stat_alloc,(size_t size));
index 89039367eec03eb34496b091a650e29adf189b32..62c7757c7e3f87fc23d235785827c8f605afb257 100644 (file)
@@ -130,6 +130,7 @@ main (argc, argv)
   output_filename = "a.out";
 
   bfd_init();
+
 #ifdef GNU960
 {
   int i;
@@ -158,7 +159,7 @@ main (argc, argv)
   command_line.force_common_definition = false;
 
   init_bfd_error_vector();
-  
+ldsym_init();  
   ldfile_add_arch("");
   ldfile_add_library_path("./");
   config.make_executable = true;
@@ -221,14 +222,14 @@ main (argc, argv)
      symbols, and possibly multiple definitions */
 
 
-  if (config.text_read_only) {
-      /* Look for a text section and mark the readonly attribute in it */
-      asection *found = bfd_get_section_by_name(output_bfd, ".text");
-      if (found == (asection *)NULL) {
-         einfo("%P%F: text marked read only, but no text section present");
-       }
+  if (config.text_read_only) 
+  {
+    /* Look for a text section and mark the readonly attribute in it */
+    asection *found = bfd_get_section_by_name(output_bfd, ".text");
+    if (found != (asection *)NULL) {
       found->flags |= SEC_READONLY;
     }
+  }
 
   if (config.relocateable_output) {
       output_bfd->flags &= ~EXEC_P;
index 3ab87994fb44c2c82002e6bf4bd0f1e14146a7b3..a2c8449b0a1903af798a42e9ecdd35146d51ab05 100644 (file)
@@ -72,6 +72,10 @@ ldsym_type **symbol_tail_ptr = &symbol_head;
 
 extern ld_config_type config;
 
+struct obstack global_sym_obstack;
+#define obstack_chunk_alloc ldmalloc
+#define obstack_chunk_free  free
+
 /*
   incremented for each symbol in the ldsym_type table
   no matter what flavour it is 
@@ -150,11 +154,11 @@ DEFUN(ldsym_get,(key),
 
   /* Nothing was found; create a new symbol table entry.  */
 
-  bp = (ldsym_type *) ldmalloc ((bfd_size_type)(sizeof (ldsym_type)));
+  bp = (ldsym_type *) obstack_alloc (&global_sym_obstack, (bfd_size_type)(sizeof (ldsym_type)));
   bp->srefs_chain = (asymbol **)NULL;
   bp->sdefs_chain = (asymbol **)NULL;
   bp->scoms_chain = (asymbol **)NULL;
-  bp->name = buystring(key);
+  bp->name = obstack_copy(&global_sym_obstack,  key, strlen(key)+1);
   bp->flags = 0;
   /* Add the entry to the bucket.  */
 
@@ -223,38 +227,36 @@ DEFUN(print_file_stuff,(f),
   {
     asection *s;
     if (true || option_longmap) {
-       for (s = f->the_bfd->sections;
-            s != (asection *)NULL;
-            s = s->next) {
-           print_address(s->output_offset);
-           if (s->reloc_done)
-           {
-             fprintf (config.map_file, " %08x 2**%2ud %s\n",
-                     (unsigned)bfd_get_section_size_after_reloc(s),
-                     s->alignment_power, s->name);
-           }
-           
-           else 
-           {
-             fprintf (config.map_file, " %08x 2**%2ud %s\n",
-                     (unsigned)bfd_get_section_size_before_reloc(s),
-                     s->alignment_power, s->name);
-           }
+      for (s = f->the_bfd->sections;
+          s != (asection *)NULL;
+          s = s->next) {
+       print_address(s->output_offset);
+       if (s->reloc_done)
+       {
+         fprintf (config.map_file, " %08x 2**%2ud %s\n",
+                  (unsigned)bfd_get_section_size_after_reloc(s),
+                  s->alignment_power, s->name);
+       }
            
-
-             
-         }
+       else 
+       {
+         fprintf (config.map_file, " %08x 2**%2ud %s\n",
+                  (unsigned)bfd_get_section_size_before_reloc(s),
+                  s->alignment_power, s->name);
+       }
       }
-    else {           
-       for (s = f->the_bfd->sections;
-            s != (asection *)NULL;
-            s = s->next) {
-           fprintf(config.map_file, "%s ", s->name);
-           print_address(s->output_offset);
-           fprintf(config.map_file, "(%x)", (unsigned)bfd_get_section_size_after_reloc(s));
-         }
-       fprintf(config.map_file, "hex \n");
+    }
+    else
+    {        
+      for (s = f->the_bfd->sections;
+          s != (asection *)NULL;
+          s = s->next) {
+       fprintf(config.map_file, "%s ", s->name);
+       print_address(s->output_offset);
+       fprintf(config.map_file, "(%x)", (unsigned)bfd_get_section_size_after_reloc(s));
       }
+      fprintf(config.map_file, "hex \n");
+    }
   }
   fprintf (config.map_file, "\n");
 }
@@ -329,90 +331,90 @@ static asymbol **
 write_file_locals(output_buffer)
 asymbol **output_buffer;
 {
-LANG_FOR_EACH_INPUT_STATEMENT(entry)
+  LANG_FOR_EACH_INPUT_STATEMENT(entry)
+  {
+    /* Run trough the symbols and work out what to do with them */
+    unsigned int i;
+
+    /* Add one for the filename symbol if needed */
+    if (create_object_symbols 
+       != (lang_output_section_statement_type *)NULL) {
+      asection *s;
+      for (s = entry->the_bfd->sections;
+          s != (asection *)NULL;
+          s = s->next) {
+       if (s->output_section == create_object_symbols->bfd_section) {
+         /* Add symbol to this section */
+         asymbol * newsym  =
+          (asymbol *)bfd_make_empty_symbol(entry->the_bfd);
+         newsym->name = entry->local_sym_name;
+         /* The symbol belongs to the output file's text section */
+
+         /* The value is the start of this section in the output file*/
+         newsym->value  = 0;
+         newsym->flags = BSF_LOCAL;
+         newsym->section = s;
+         *output_buffer++ = newsym;
+         break;
+       }
+      }
+    }
+    for (i = 0; i < entry->symbol_count; i++) 
     {
-      /* Run trough the symbols and work out what to do with them */
-      unsigned int i;
-
-      /* Add one for the filename symbol if needed */
-      if (create_object_symbols 
-         != (lang_output_section_statement_type *)NULL) {
-       asection *s;
-       for (s = entry->the_bfd->sections;
-            s != (asection *)NULL;
-            s = s->next) {
-         if (s->output_section == create_object_symbols->bfd_section) {
-           /* Add symbol to this section */
-           asymbol * newsym  =
-             (asymbol *)bfd_make_empty_symbol(entry->the_bfd);
-           newsym->name = entry->local_sym_name;
-           /* The symbol belongs to the output file's text section */
-
-           /* The value is the start of this section in the output file*/
-           newsym->value  = 0;
-           newsym->flags = BSF_LOCAL;
-           newsym->section = s;
-           *output_buffer++ = newsym;
-           break;
-         }
+      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 
+          globals at this stage in special circumstances */
+       if (p->the_bfd == entry->the_bfd 
+           && flag_is_not_at_end(p->flags)) {
+         /* And this is one of them */
+         *(output_buffer++) = p;
+         p->flags |= BSF_KEEP;
        }
       }
-      for (i = 0; i < entry->symbol_count; i++) 
+      else {
+       if (flag_is_ordinary_local(p->flags)) 
        {
-         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 
-                globals at this stage in special circumstances */
-             if (p->the_bfd == entry->the_bfd 
-                 && flag_is_not_at_end(p->flags)) {
-               /* And this is one of them */
-               *(output_buffer++) = p;
-               p->flags |= BSF_KEEP;
-             }
-           }
-         else {
-           if (flag_is_ordinary_local(p->flags)) 
-             {
-               if (discard_locals == DISCARD_ALL)
-                 {  }
-               else if (discard_locals == DISCARD_L &&
-                        (p->name[0] == lprefix)) 
-                 {  }
-               else if (p->flags ==  BSF_WARNING) 
-                 {  }
-               else 
-                 { *output_buffer++ = p; }
-             }
-           else if (flag_is_debugger(p->flags)) 
-             {
-               /* Only keep the debugger symbols if no stripping required */
-               if (strip_symbols == STRIP_NONE) {
-                 *output_buffer++ = p;
-               }
-             }
-           else if (p->section == &bfd_und_section)
-             { /* This must be global */
-             }
-           else if (p->section == &bfd_com_section) {
-          /* And so must this */
-           } 
-           else if (p->flags & BSF_CTOR) {
-             /* Throw it away */
-           }
-else
-             {
-               FAIL();
-             }
+         if (discard_locals == DISCARD_ALL)
+         {  }
+         else if (discard_locals == DISCARD_L &&
+                  (p->name[0] == lprefix)) 
+         {  }
+         else if (p->flags ==  BSF_WARNING) 
+         {  }
+         else 
+         { *output_buffer++ = p; }
+       }
+       else if (flag_is_debugger(p->flags)) 
+       {
+         /* Only keep the debugger symbols if no stripping required */
+         if (strip_symbols == STRIP_NONE) {
+           *output_buffer++ = p;
          }
        }
+       else if (p->section == &bfd_und_section)
+       {                       /* This must be global */
+       }
+       else if (p->section == &bfd_com_section) {
+         /* And so must this */
+       } 
+       else if (p->flags & BSF_CTOR) {
+         /* Throw it away */
+       }
+       else
+       {
+         FAIL();
+       }
+      }
+    }
 
 
-    }
+  }
   return output_buffer;
 }
 
@@ -502,8 +504,15 @@ DEFUN(ldsym_undefined,(sym),
       CONST char *sym)
 {
   ldsym_type *from_table = ldsym_get_soft(sym);
-  if (from_table != (ldsym_type *)NULL) {
+  if (from_table != (ldsym_type *)NULL) 
+  {
     if (from_table->sdefs_chain != (asymbol **)NULL) return false;
   }
   return true;
 }
+
+void
+DEFUN_VOID(ldsym_init)
+{
+  obstack_begin(&global_sym_obstack, 20000);
+}
index 1a671e2eab30cb7368922aa0de1dc8f1807e41c1..90ba007f1bf385f9b8f32c458ad2d598485048d8 100644 (file)
@@ -68,3 +68,4 @@ PROTO(boolean, ldsym_undefined, (CONST char *));
        for (x = symbol_head; x != (ldsym_type *)NULL; x = x->next)     
 
 
+void EXFUN(ldsym_init,(void));
index b2df2772cc8f38f76bfe96079920be185151f9f9..08cb6f79c86547a2873b86b3de0a8be240e78086 100644 (file)
@@ -27,9 +27,25 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "sysdep.h"
 
 #include "ldver.h"
+#include "ldemul.h"
 
 void
-ldversion()
+DEFUN(ldversion,(noisy),
+      int noisy)
+
 {
-  fprintf(stdout,"gld version BFD 0.18\n");
+  fprintf(stdout,"ld version 1.96 (with BFD %s)\n", BFD_VERSION);
+
+  if (noisy) 
+  {
+    extern ld_emulation_xfer_type *ld_emulations[];
+    ld_emulation_xfer_type **ptr = ld_emulations;
+    
+    printf("  Supported emulations:\n");
+    while (*ptr) 
+    {
+      printf("   %s \n", (*ptr)->emulation_name);
+      ptr++;
+    }
+  }
 }
index ede39d61cb76e28e8ec7def98506be7c8d08c540..d0a395bebe31039f327dcd13b7b968633f1a1507 100755 (executable)
@@ -6,14 +6,24 @@ SECTIONS {
   .text ${RELOCATING+${TEXT_START_ADDR}} : 
     {
        *(.text);
+       *(.text1);
+       *(.text2);
        ${RELOCATING+_etext = .};
     }
-  data . :
+  .lit . :
+   {
+       *(.lit);
+       ${RELOCATING+_elit = .};
+   }
+  .data . :
     {
        *(.data);
+       *(.data1);
+       *(.data2);
        ${RELOCATING+_edata = .};
        ${CONSTRUCTING+CONSTRUCTORS}
     }
+
   .bss  . :
     { 
        *(COMMON)       
index c2f38f4725023f6b4d6d4bf4cd66344e6ad7a13f..e57f0451faefaaccaf167e6800b4dd0fb88917f7 100755 (executable)
--- a/ld/saber
+++ b/ld/saber
@@ -1,17 +1,80 @@
-load -I. ld__a29k.c
-load -I. ld__h8300hms.c
-load -I. ld__lnk960.c
-load -I. ld__sun3.c
-load -I. ldlex.c
-load -I. ld__ebmon29k.c
-load -I. ld__h8300xray.c
-load -I. ld__m88kbcs.c
-load -I. ld__sun4.c
-load -I. ld__gld960.c
-load -I. ld__hp300bsd.c
-load -I. ld__news.c
-load -I. ld__vanilla.c
-load -I. ld__go32.c
-load -I. ld__i386aout.c
-load -I. ld__st2000.c
-load -I. ldgram.c
+suppress 652
+load -I../bfd -I../../devo/bfd -I../../devo/include -DMINIMIZE=1 -DDEFAULT_VECTOR='hp300bsd_vec' -DSELECT_VECS='&hp300bsd_vec' ../../devo/bfd/targets.c
+load -I. -I../../devo/ld -I../../devo/include ld__a29k.c
+load -I. -I../../devo/ld -I../../devo/include ld__h8300hms.c
+load -I. -I../../devo/ld -I../../devo/include ld__lnk960.c
+load -I. -I../../devo/ld -I../../devo/include ld__sun3.c
+load -I. -I../../devo/ld -I../../devo/include ldlex.c
+load -I. -I../../devo/ld -I../../devo/include ld__ebmon29k.c
+load -I. -I../../devo/ld -I../../devo/include ld__h8300xray.c
+load -I. -I../../devo/ld -I../../devo/include ld__m88kbcs.c
+load -I. -I../../devo/ld -I../../devo/include ld__sun4.c
+load -I. -I../../devo/ld -I../../devo/include ld__gld960.c
+load -I. -I../../devo/ld -I../../devo/include ld__hp300bsd.c
+load -I. -I../../devo/ld -I../../devo/include ld__news.c
+load -I. -I../../devo/ld -I../../devo/include ld__vanilla.c
+load -I. -I../../devo/ld -I../../devo/include ld__go32.c
+load -I. -I../../devo/ld -I../../devo/include ld__i386aout.c
+load -I. -I../../devo/ld -I../../devo/include ld__st2000.c
+load -I. -I../../devo/ld -I../../devo/include ld__sa29200.c
+load -I. -I../../devo/ld -I../../devo/include ldgram.c
+
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/cplus-dem.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldexp.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldlang.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldver.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldctor.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldfile.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldmain.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldwarn.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/mri.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldemul.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldmisc.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldwrite.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/relax.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/lderror.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldindr.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldsym.c
+load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/lexsup.c
+
+
+
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/bfd.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/stab-sym.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/archures.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/bout.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cache.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/core.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/aout32.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/demo64.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/opncls.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/reloc.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/seclet.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/init.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/section.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/coff-a29k.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/hp300bsd.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/syms.c
+
+
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/archive.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/libbfd.c
+
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-a29k.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/format.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-i386.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-m68k.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-mips.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-sparc.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-h8300.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-i960.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-m88k.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-rs6000.c
+load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-vax.c
+
+load -I../libiberty -I../../devo/libiberty -I../../devo/include ../../devo/libiberty/obstack.c
+load -I../libiberty -I../../devo/libiberty -I../../devo/include ../../devo/libiberty/strtoul.c
+load -I../libiberty -I../../devo/libiberty -I../../devo/include ../../devo/libiberty/strerror.c
+
+
+