* ldlang.c (relaxing): Removed global variable.
authorIan Lance Taylor <ian@airs.com>
Mon, 24 Jan 1994 17:59:18 +0000 (17:59 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 24 Jan 1994 17:59:18 +0000 (17:59 +0000)
(lang_size_sections): If the canonical symbols have not already
been read in, read them in before relaxing.
* ldlang.h (relaxing): Removed declaration.

ld/ChangeLog
ld/ldlang.c
ld/ldlang.h

index b71b3d2b7104e3746f265983f8ade13335893e56..c4f9fd92b9e04303fe1eb00dcdb1284d7b43783f 100644 (file)
@@ -1,3 +1,10 @@
+Mon Jan 24 12:56:37 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
+
+       * ldlang.c (relaxing): Removed global variable.
+       (lang_size_sections): If the canonical symbols have not already
+       been read in, read them in before relaxing.
+       * ldlang.h (relaxing): Removed declaration.
+
 Fri Jan 21 00:44:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
 
        * ldlang.c (new_afile): Initialize loaded field to false.
index 4c818cd04734a29b246d4bb2c06e351a83fff05d..71a03888486d420dd944cfc2f7af9db493dddfb9 100644 (file)
@@ -145,7 +145,6 @@ static int topower PARAMS ((int));
 static void reset_memory_regions PARAMS ((void));
 
 /* EXPORTS */
-boolean relaxing;
 lang_output_section_statement_type *abs_output_section;
 lang_statement_list_type *stat_ptr = &statement_list;
 lang_statement_list_type file_chain =
@@ -1769,15 +1768,32 @@ lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
        lang_input_section_type *is;
        asection *i;
 
-       relaxing = true;
-
        is = &(*prev)->input_section;
        i = is->section;
 
+       /* FIXME: The interface to bfd_relax_section should be changed
+          to not require the generic symbols to be read.  Changing
+          this would require changing both b_out_relax_section and
+          bfd_coff_relax16_section.  */
+       if (is->ifile->asymbols == (asymbol **) NULL)
+         {
+           unsigned int symsize;
+
+           symsize = get_symtab_upper_bound (i->owner);
+           is->ifile->asymbols = (asymbol **) ldmalloc (symsize);
+           is->ifile->symbol_count =
+             bfd_canonicalize_symtab (i->owner, is->ifile->asymbols);
+
+           /* The generic linker code in BFD requires that these
+              symbols be stored in the outsymbols and symcount
+              fields.  When the bfd_relax_section is interface is
+              fixed this should also be fixed.  */
+           i->owner->outsymbols = is->ifile->asymbols;
+           i->owner->symcount = is->ifile->symbol_count;
+         }
+
        if (bfd_relax_section (i->owner, i, &link_info, is->ifile->asymbols))
          had_relax = true;
-
-       relaxing = false;
       }
       else  {
        (*prev)->input_section.section->_cooked_size = 
index 7df1189c58db4a0612611d3bc8d8ec609d2b4e7c..1e7e36a3c732ca3abb4a69ead22a96d571612633 100644 (file)
@@ -30,7 +30,7 @@ typedef enum
   lang_input_file_is_file_enum
 } lang_input_file_enum_type;
 
-typedef unsigned short fill_type;
+typedef unsigned int fill_type;
 typedef struct statement_list
 {
   union lang_statement_union *head;
@@ -275,13 +275,10 @@ typedef union lang_statement_union
 
 extern bfd_size_type largest_section;
 extern lang_output_section_statement_type *abs_output_section;
-extern lang_input_statement_type *script_file;
 extern boolean lang_has_input_file;
-extern boolean relaxing;
 extern etree_type *base;
 extern lang_statement_list_type *stat_ptr;
 extern boolean delete_output_file_on_failure;
-extern lang_output_section_statement_type *create_object_symbols;
 
 extern void lang_init PARAMS ((void));
 extern struct memory_region_struct *lang_memory_region_lookup
@@ -296,10 +293,8 @@ extern void lang_enter_output_section_statement
           bfd_vma block_value,
           etree_type *align,
           etree_type *subalign,
-          etree_type *base));
+          etree_type *));
 extern void lang_final PARAMS ((void));
-extern struct symbol_cache_entry *create_symbol
-  PARAMS ((const char *, unsigned int, struct sec *));
 extern void lang_process PARAMS ((void));
 extern void lang_section_start PARAMS ((const char *, union etree_union *));
 extern void lang_add_entry PARAMS ((const char *));
@@ -374,7 +369,8 @@ extern void ldlang_add_undef PARAMS ((const char *const name));
 extern void lang_add_output_format PARAMS ((const char *, int from_script));
 extern void lang_list_init PARAMS ((lang_statement_list_type*));
 extern void lang_add_data PARAMS ((int type, union etree_union *));
-extern void lang_for_each_statement PARAMS ((void (*func)()));
+extern void lang_for_each_statement
+  PARAMS ((void (*func) (lang_statement_union_type *)));
 extern PTR stat_alloc PARAMS ((size_t size));
 
 #endif