Disable the inclusion of logical input files in the assembler listing output unless...
authorNick Clifton <nickc@redhat.com>
Wed, 11 Oct 2017 15:48:16 +0000 (16:48 +0100)
committerNick Clifton <nickc@redhat.com>
Wed, 11 Oct 2017 15:48:16 +0000 (16:48 +0100)
PR 21977
* listing.c (listing_newline): Use the name of the current
physical input file, rather than the current logical input file,
unless including high level source in the listing.
* input-scrub.c (as_where_physical): New function.  Returns the
name of the current physical input file.
* as.h: Add prototype for as_where_physical.

gas/ChangeLog
gas/as.h
gas/input-scrub.c
gas/listing.c

index 95932c2b266ccd772cbb602427ee7a8617408a47..67b789d92a0de815ee1dad182d99fe45ca52d028 100644 (file)
@@ -1,3 +1,13 @@
+2017-10-11  Nick Clifton  <nickc@redhat.com>
+
+       PR 21977
+       * listing.c (listing_newline): Use the name of the current
+       physical input file, rather than the current logical input file,
+       unless including high level source in the listing.
+       * input-scrub.c (as_where_physical): New function.  Returns the
+       name of the current physical input file.
+       * as.h: Add prototype for as_where_physical.
+
 2017-10-09  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
 
        * testsuite/gas/s390/zarch-arch12.d (prno, tpei, irbm): New
index fee7c7524a44cbe0174bbece41326d30f9287e63..5e9dcea46cc2002e69e395a272649ef7a3c57061 100644 (file)
--- a/gas/as.h
+++ b/gas/as.h
@@ -486,6 +486,7 @@ void   cond_exit_macro (int);
 int    seen_at_least_1_file (void);
 void   app_pop (char *);
 const char * as_where (unsigned int *);
+const char * as_where_physical (unsigned int *);
 void   bump_line_counters (void);
 void   do_scrub_begin (int);
 void   input_scrub_begin (void);
index 5e57c2c8407bf1670b1dbb0309461b58de4febf5..6222154e794ae2942a84ead23ed736bc9d93ba22 100644 (file)
@@ -487,6 +487,23 @@ new_logical_line (const char *fname, int line_number)
 }
 
 \f
+/* Return the current physical input file name and line number, if known  */
+
+const char *
+as_where_physical (unsigned int *linep)
+{
+  if (physical_input_file != NULL)
+    {
+      if (linep != NULL)
+       *linep = physical_input_line;
+      return physical_input_file;
+    }
+
+  if (linep != NULL)
+    *linep = 0;
+  return NULL;
+}
+
 /* Return the current file name and line number.  */
 
 const char *
@@ -499,16 +516,7 @@ as_where (unsigned int *linep)
        *linep = logical_input_line;
       return logical_input_file;
     }
-  else if (physical_input_file != NULL)
-    {
-      if (linep != NULL)
-       *linep = physical_input_line;
-      return physical_input_file;
-    }
-  else
-    {
-      if (linep != NULL)
-       *linep = 0;
-      return NULL;
-    }
+
+  return as_where_physical (linep);
 }
+
index 18c6e3ba3aea92564391a57aa63fc6251ab47430..31eae98ae498dfa5054428e6ee5c07d9cd6c991b 100644 (file)
@@ -324,7 +324,13 @@ listing_newline (char *ps)
     }
 #endif
 
-  file = as_where (&line);
+  /* PR 21977 - use the physical file name not the logical one unless high
+     level source files are being included in the listing.  */
+  if (listing & LISTING_HLL)
+    file = as_where (&line);
+  else
+    file = as_where_physical (&line);
+
   if (ps == NULL)
     {
       if (line == last_line