comment-finding hack for hppa-linux.
authorAlan Modra <amodra@gmail.com>
Fri, 28 Jul 2000 05:05:20 +0000 (05:05 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 28 Jul 2000 05:05:20 +0000 (05:05 +0000)
gas/ChangeLog
gas/app.c
gas/as.h
gas/config/tc-hppa.c
gas/config/tc-hppa.h
gas/read.c

index f7d1e2abed27060f94bb4047a7c6b4161ea3fdd6..c356ef282297d1ba228159e412ba4d18f1dbd56d 100644 (file)
@@ -1,3 +1,15 @@
+2000-07-28  Alan Modra  <alan@linuxcare.com.au>
+
+       * as.h (warn_comment, found_comment, found_comment_file): Declare.
+       * app.c (do_scrub_chars): Record where first comment found.
+       * read.c (read_a_source_file): Init found_comment on entry, and
+       notify whether comments found on exit.
+       * config/tc-hppa.c (md_shortopts): Add "c".
+       (md_longopts): Add warn-comment.
+       (md_parse_option): Handle it.
+       (md_show_usage): Show available options.
+       * config/tc-hppa.h (WARN_COMMENTS): Define if TE_LINUX
+
 Thu Jul 27 11:25:01 2000  Andrew Cagney  <cagney@b1.cygnus.com>
 
        * config/tc-mn10300.c (md_convert_frag): Fix printfs.
index 09c795cd2821bcc71ba9264a476d4ff3c7ae2818..915b1badb12ce0ee56e19849a9208ee0c303c8f2 100644 (file)
--- a/gas/app.c
+++ b/gas/app.c
@@ -1170,6 +1170,10 @@ do_scrub_chars (get, tostart, tolen)
             as default if so.  This is a hack.  */
          if ((symver_state != NULL) && (*symver_state == 0))
            goto de_fault;
+#endif
+#ifdef WARN_COMMENTS
+         if (!found_comment)
+           as_where (&found_comment_file, &found_comment);
 #endif
          do
            {
index e56d6cda7821ecd776fb69091f39263abf76a364..852d9395a547f24289c1c0fb509d4dff2970896d 100644 (file)
--- a/gas/as.h
+++ b/gas/as.h
@@ -640,6 +640,12 @@ COMMON int flag_m68k_mri;
 #define flag_m68k_mri 0
 #endif
 
+#ifdef WARN_COMMENTS
+COMMON int warn_comment;
+COMMON unsigned int found_comment;
+COMMON char *found_comment_file;
+#endif
+
 #ifndef NUMBERS_WITH_SUFFIX
 #define NUMBERS_WITH_SUFFIX 0
 #endif
index ab227eafd0a23496a990d66b057baddd37b60584..7e59b4288a726adf14ca933d9e938208cb001e46 100644 (file)
@@ -4345,12 +4345,23 @@ md_estimate_size_before_relax (fragP, segment)
 }
 \f
 #ifdef OBJ_ELF
+# ifdef WARN_COMMENTS
+const char *md_shortopts = "Vc";
+# else
 const char *md_shortopts = "V";
+# endif
 #else
+# ifdef WARN_COMMENTS
+const char *md_shortopts = "c";
+# else
 const char *md_shortopts = "";
+# endif
 #endif
 
 struct option md_longopts[] = {
+#ifdef WARN_COMMENTS
+  {"warn-comment", no_argument, NULL, 'c'},
+#endif
   {NULL, no_argument, NULL, 0}
 };
 size_t md_longopts_size = sizeof(md_longopts);
@@ -4369,6 +4380,11 @@ md_parse_option (c, arg)
     case 'V':
       print_version_id ();
       break;
+#endif
+#ifdef WARN_COMMENTS
+    case 'c':
+      warn_comment = 1;
+      break;
 #endif
     }
 
@@ -4379,6 +4395,14 @@ void
 md_show_usage (stream)
      FILE *stream ATTRIBUTE_UNUSED;
 {
+#ifdef OBJ_ELF
+  fprintf (stream, _("\
+  -Q                      ignored\n"));
+#endif
+#ifdef WARN_COMMENTS
+  fprintf (stream, _("\
+  -c                      print a warning if a comment is found\n"));
+#endif
 }
 \f
 /* We have no need to default values of symbols.  */
index 69de41a81629b34e73f326b55dd18b8ee7dddf73..1ea9daa3d4582bf2f23dbf9baf42c6d42f116bd0 100644 (file)
 #define TARGET_FORMAT "som"
 #endif
 
+#ifdef TE_LINUX
+/* Define to compile in an extra assembler option, -c, which enables a
+   warning (once per file) when a comment is encountered.
+   The hppa comment char is a `;' which tends to occur in random C asm
+   statements.  A semicolon is a line separator for most assemblers.
+   It's hard to find these lurking semicolons.  Thus...  */
+#define WARN_COMMENTS 1
+#endif
+
 /* FIXME.  Why oh why aren't these defined somewhere globally?  */
 #ifndef FALSE
 #define FALSE   (0)
index 30ad92c4ec14942b70c66db2ae49ae3e93a36a61..b2eb2fd03f5f71d7fd49fc3ca2f6feae1fdda141 100644 (file)
@@ -521,6 +521,10 @@ read_a_source_file (name)
   register int temp;
   pseudo_typeS *pop;
 
+#ifdef WARN_COMMENTS
+  found_comment = 0;
+#endif
+
   buffer = input_scrub_new_file (name);
 
   listing_file (name);
@@ -1082,6 +1086,13 @@ read_a_source_file (name)
 #endif
   /* Close the input file.  */
   input_scrub_close ();
+#ifdef WARN_COMMENTS
+  {
+    if (warn_comment && found_comment)
+      as_warn_where (found_comment_file, found_comment,
+                    "first comment found here");
+  }
+#endif
 }
 
 /* For most MRI pseudo-ops, the line actually ends at the first