]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
add comments
authorJason Merrill <jason@gcc.gnu.org>
Tue, 26 Jan 1999 19:34:06 +0000 (14:34 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 26 Jan 1999 19:34:06 +0000 (14:34 -0500)
From-SVN: r24873

gcc/tlink.c

index e525b43bc755ebdf5194d761a4287ceba0ce2fe6..4e6cf2f097a39c24d93252c74f25829e11f51416 100644 (file)
@@ -47,7 +47,8 @@ extern int prepends_underscore;
 
 static int tlink_verbose;
 \f
-/* Hash table code.  */
+/* Hash table boilerplate for working with hash.[ch].  We have hash tables
+   for symbol names, file names, and demangled symbols.  */
 
 typedef struct symbol_hash_entry
 {
@@ -75,6 +76,9 @@ typedef struct demangled_hash_entry
 
 static struct hash_table symbol_table;
 
+/* Create a new entry for the symbol hash table.
+   Passed to hash_table_init.  */
+
 static struct hash_entry *
 symbol_hash_newfunc (entry, table, string)
      struct hash_entry *entry;
@@ -99,6 +103,8 @@ symbol_hash_newfunc (entry, table, string)
   return (struct hash_entry *) ret;
 }
 
+/* Look up an entry in the symbol hash table.  */
+
 static struct symbol_hash_entry *
 symbol_hash_lookup (string, create)
      const char *string;
@@ -111,6 +117,9 @@ symbol_hash_lookup (string, create)
 
 static struct hash_table file_table;
 
+/* Create a new entry for the file hash table.
+   Passed to hash_table_init.  */
+
 static struct hash_entry *
 file_hash_newfunc (entry, table, string)
      struct hash_entry *entry;
@@ -135,6 +144,8 @@ file_hash_newfunc (entry, table, string)
   return (struct hash_entry *) ret;
 }
 
+/* Look up an entry in the file hash table.  */
+
 static struct file_hash_entry *
 file_hash_lookup (string)
      const char *string;
@@ -146,6 +157,9 @@ file_hash_lookup (string)
 
 static struct hash_table demangled_table;
 
+/* Create a new entry for the demangled name hash table.
+   Passed to hash_table_init.  */
+
 static struct hash_entry *
 demangled_hash_newfunc (entry, table, string)
      struct hash_entry *entry;
@@ -167,6 +181,8 @@ demangled_hash_newfunc (entry, table, string)
   return (struct hash_entry *) ret;
 }
 
+/* Look up an entry in the demangled name hash table.  */
+
 static struct demangled_hash_entry *
 demangled_hash_lookup (string, create)
      const char *string;
@@ -252,6 +268,8 @@ file_pop ()
 \f
 /* Other machinery.  */
 
+/* Initialize the tlink machinery.  Called from do_tlink.  */
+
 static void
 tlink_init ()
 {
@@ -334,6 +352,12 @@ pfgets (stream)
 \f
 /* Real tlink code.  */
 
+/* Subroutine of read_repo_file.  We are reading the repo file for file F,
+   which is coming in on STREAM, and the symbol that comes next in STREAM
+   is offerred, chosen or provided if CHOSEN is 0, 1 or 2, respectively.
+
+   XXX "provided" is unimplemented, both here and in the compiler.  */
+
 static void
 freadsym (stream, f, chosen)
      FILE *stream;
@@ -349,12 +373,16 @@ freadsym (stream, f, chosen)
 
   if (sym->file == NULL)
     {
+      /* We didn't have this symbol already, so we choose this file.  */
+
       symbol_push (sym);
       sym->file = f;
       sym->chosen = chosen;
     }
   else if (chosen)
     {
+      /* We want this file; cast aside any pretender.  */
+
       if (sym->chosen && sym->file != f)
        {
          if (sym->chosen == 1)
@@ -371,6 +399,8 @@ freadsym (stream, f, chosen)
     }
 }
 
+/* Read in the repo file denoted by F, and record all its information.  */
+
 static void
 read_repo_file (f)
      file *f;
@@ -414,6 +444,11 @@ read_repo_file (f)
     f->dir = ".";
 }
 
+/* We might want to modify LINE, which is a symbol line from file F.  We do
+   this if either we saw an error message referring to the symbol in
+   question, or we have already allocated the symbol to another file and
+   this one wants to emit it as well.  */
+
 static void
 maybe_tweak (line, f)
      char *line;
@@ -434,6 +469,11 @@ maybe_tweak (line, f)
     }
 }
 
+/* Update the repo files for each of the object files we have adjusted and
+   recompile.
+
+   XXX Should this use collect_execute instead of system?  */
+
 static int
 recompile_files ()
 {
@@ -484,6 +524,9 @@ recompile_files ()
   return 1;
 }
 
+/* The first phase of processing: determine which object files have
+   .rpo files associated with them, and read in the information.  */
+
 static int
 read_repo_files (object_lst)
      char **object_lst;
@@ -509,6 +552,8 @@ read_repo_files (object_lst)
   return (symbol_stack != NULL);
 }
 
+/* Add the demangled forms of any new symbols to the hash table.  */
+
 static void
 demangle_new_symbols ()
 {
@@ -528,6 +573,9 @@ demangle_new_symbols ()
     }
 }
 
+/* Step through the output of the linker, in the file named FNAME, and
+   adjust the settings for each symbol encountered.  */
+
 static int
 scan_linker_output (fname)
      char *fname;
@@ -607,6 +655,15 @@ scan_linker_output (fname)
   return (file_stack != NULL);
 }
 
+/* Entry point for tlink.  Called from main in collect2.c.
+
+   Iteratively try to provide definitions for all the unresolved symbols
+   mentioned in the linker error messages.
+
+   LD_ARGV is an array of arguments for the linker.
+   OBJECT_LST is an array of object files that we may be able to recompile
+     to provide missing definitions.  Currently ignored.  */
+
 void
 do_tlink (ld_argv, object_lst)
      char **ld_argv, **object_lst;