2012-07-26 Segher Boessenkool <segher@kernel.crashing.org>
authorSegher Boessenkool <segher@kernel.crashing.org>
Fri, 27 Jul 2012 03:32:21 +0000 (03:32 +0000)
committerSegher Boessenkool <segher@kernel.crashing.org>
Fri, 27 Jul 2012 03:32:21 +0000 (03:32 +0000)
gas/
        * listing.c (struct list_message): New.
        (struct list_info_struct): Delete "message".  Add "messages"
        and "last_message".
        (listing_message): Adjust.
        (listing_newline): Adjust.
        (print_lines): Adjust.

gas/ChangeLog
gas/listing.c

index 2d62c413410ff9e3c86ce47d03cb991637573ccd..fee2ba3562dc8bb096dfd48bd20a23e3b5d7a865 100644 (file)
@@ -1,3 +1,12 @@
+2012-07-26  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       * listing.c (struct list_message): New.
+       (struct list_info_struct): Delete "message".  Add "messages"
+       and "last_message".
+       (listing_message): Adjust.
+       (listing_newline): Adjust.
+       (print_lines): Adjust.
+
 2012-07-24  Jan Beulich <jbeulich@suse.com>
 
        * config/tc-i386-intel.c (i386_intel_simplify_register): Handle
index 6d28f316c32e0d8a30df1e6c637fc8b01e8c9ee9..38518e40f17485f683c2dc31d06bd7153c108204 100644 (file)
@@ -143,6 +143,12 @@ enum edict_enum
 };
 
 
+struct list_message
+{
+  char *message;
+  struct list_message *next;
+};
+
 /* This structure remembers which line from which file goes into which
    frag.  */
 struct list_info_struct
@@ -170,8 +176,8 @@ struct list_info_struct
   /* High level language source line.  */
   unsigned int hll_line;
 
-  /* Pointer to any error message associated with this line.  */
-  char *message;
+  /* Pointers to linked list of messages associated with this line.  */
+  struct list_message *messages, *last_message;
 
   enum edict_enum edict;
   char *edict_arg;
@@ -232,9 +238,17 @@ listing_message (const char *name, const char *message)
     {
       unsigned int l = strlen (name) + strlen (message) + 1;
       char *n = (char *) xmalloc (l);
+      struct list_message *lm = xmalloc (sizeof *lm);
       strcpy (n, name);
       strcat (n, message);
-      listing_tail->message = n;
+      lm->message = n;
+      lm->next = NULL;
+
+      if (listing_tail->last_message)
+       listing_tail->last_message->next = lm;
+      else
+       listing_tail->messages = lm;
+      listing_tail->last_message = lm;
     }
 }
 
@@ -404,7 +418,8 @@ listing_newline (char *ps)
   new_i->line = line;
   new_i->file = file_info (file);
   new_i->next = (list_info_type *) NULL;
-  new_i->message = (char *) NULL;
+  new_i->messages = NULL;
+  new_i->last_message = NULL;
   new_i->edict = EDICT_NONE;
   new_i->hll_file = (file_info_type *) NULL;
   new_i->hll_line = 0;
@@ -792,6 +807,7 @@ print_lines (list_info_type *list, unsigned int lineno,
   unsigned int octet_in_word = 0;
   char *src = data_buffer;
   int cur;
+  struct list_message *msg;
 
   /* Print the stuff on the first line.  */
   listing_page (list);
@@ -839,8 +855,8 @@ print_lines (list_info_type *list, unsigned int lineno,
 
   emit_line (list, "\t%s\n", string ? string : "");
 
-  if (list->message)
-    emit_line (list, "****  %s\n", list->message);
+  for (msg = list->messages; msg; msg = msg->next)
+    emit_line (list, "****  %s\n", msg->message);
 
   for (lines = 0;
        lines < (unsigned int) listing_lhs_cont_lines