Document purpose of each ld statement lists
authorThomas Preud'homme <thomas.preudhomme@linaro.org>
Thu, 29 Nov 2018 13:42:49 +0000 (13:42 +0000)
committerThomas Preud'homme <thomas.preudhomme@linaro.org>
Thu, 29 Nov 2018 13:42:49 +0000 (13:42 +0000)
When discovering the statement lists via their header variable
statement_list, file_chain and input_file_chain it can be confusing to
figure out what they are for. They can point to the same initial
statement and the relation between the next field they use is not
obvious from the name.

This commit adds comment for each of those statement list header to
explain what they are for and what next field they use. It also rewrite
the comment for the next fields to simply redirect the reader to the
list header to avoid duplication of documentation.

2018-11-29  Thomas Preud'homme  <thomas.preudhomme@linaro.org>

ld/
* ldlang.c (statement_list): Document purpose and what next field it
uses.
(file_chain): Likewise.
(input_file_chain): Likewise.
* ldlang.h (lang_statement_header_type): Document statement list header
the next pointer correspond to.
(lang_statement_header_type): Replace comment for next and
next_real_file field to refer the reader to their corresponding
statement list header.

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

index 38a88df8a0db5f4f824e231ea6101e64b2c63401..5df13b80a3e940d987800cfee8b3c9b10e1367ed 100644 (file)
@@ -1,3 +1,15 @@
+2018-11-29  Thomas Preud'homme  <thomas.preudhomme@linaro.org>
+
+       * ldlang.c (statement_list): Document purpose and what next field it
+       uses.
+       (file_chain): Likewise.
+       (input_file_chain): Likewise.
+       * ldlang.h (lang_statement_header_type): Document statement list header
+       the next pointer correspond to.
+       (lang_statement_header_type): Replace comment for next and
+       next_real_file field to refer the reader to their corresponding
+       statement list header.
+
 2018-11-27  Maciej W. Rozycki  <macro@linux-mips.org>
 
        * testsuite/ld-mips-elf/pic-reloc-0.d: New test.
index e525396668210737bcfce3949a3e49743cda2cb0..9826479b56bdafa0c4a6d18c3451692ca7e01330 100644 (file)
@@ -67,6 +67,12 @@ static bfd_boolean map_option_f;
 static bfd_vma print_dot;
 static lang_input_statement_type *first_file;
 static const char *current_target;
+/* Header for list of statements corresponding to any files involved in the
+   link, either specified from the command-line or added implicitely (eg.
+   archive member used to resolved undefined symbol, wildcard statement from
+   linker script, etc.).  Next pointer is in next field of a
+   lang_statement_header_type (reached via header field in a
+   lang_statement_union).  */
 static lang_statement_list_type statement_list;
 static lang_statement_list_type *stat_save[10];
 static lang_statement_list_type **stat_save_ptr = &stat_save[0];
@@ -97,7 +103,17 @@ const char *output_target;
 lang_output_section_statement_type *abs_output_section;
 lang_statement_list_type lang_output_section_statement;
 lang_statement_list_type *stat_ptr = &statement_list;
+/* Header for list of statements corresponding to files used in the final
+   executable.  This can be either object file specified on the command-line
+   or library member resolving an undefined reference.  Next pointer is in next
+   field of a lang_input_statement_type (reached via input_statement field in a
+   lang_statement_union).  */
 lang_statement_list_type file_chain = { NULL, NULL };
+/* Header for list of statements corresponding to files specified on the
+   command-line for linking.  It thus contains real object files and archive
+   but not archive members.  Next pointer is in next_real_file field of a
+   lang_input_statement_type statement (reached via input_statement field in a
+   lang_statement_union).  */
 lang_statement_list_type input_file_chain;
 struct bfd_sym_chain entry_symbol = { NULL, NULL };
 const char *entry_section = ".text";
index dfac0b1b68ec2915a536f7c63c9a80cb998eaec8..325bbbb52426f83a584ba0a8c6176b97add90e55 100644 (file)
@@ -88,6 +88,7 @@ enum statement_enum
 
 typedef struct lang_statement_header_struct
 {
+  /* Next pointer for statement_list statement list.  */
   union lang_statement_union *next;
   enum statement_enum type;
 } lang_statement_header_type;
@@ -306,15 +307,10 @@ typedef struct lang_input_statement_struct
 
   struct flag_info *section_flag_list;
 
-  /* Point to the next file - whatever it is, wanders up and down
-     archive elements.  If this input_statement is for an archive, it
-     won't be on file_chain (which uses this list pointer), but if
-     any elements have been extracted from the archive, it will point
-     to the input_statement for the last such element.  */
+  /* Next pointer for file_chain statement list.  */
   union lang_statement_union *next;
 
-  /* Point to the next file, but skips archive contents.  Used by
-     input_file_chain.  */
+  /* Next pointer for input_file_chain statement list.  */
   union lang_statement_union *next_real_file;
 
   const char *target;