[Nasm-commits] [nasm:note] preproc: add new %note directive

nasm-bot for H. Peter Anvin (Intel) hpa at zytor.com
Thu Jun 4 19:56:49 PDT 2020


Commit-ID:  42b9579f90d26d2123036cbab9ca8c20226423d3
Gitweb:     http://repo.or.cz/w/nasm.git?a=commitdiff;h=42b9579f90d26d2123036cbab9ca8c20226423d3
Author:     H. Peter Anvin (Intel) <hpa at zytor.com>
AuthorDate: Wed, 27 Jun 2018 22:03:01 -0700
Committer:  H. Peter Anvin (Intel) <hpa at zytor.com>
CommitDate: Wed, 27 Jun 2018 22:03:01 -0700

preproc: add new %note directive

Add a new %note directive to issue a note into the list file without
printing a message. The difference between %note and a comment is that
a %note will be issued with single-line macros expanded, and will be
issued even if it occurs inside a .nolist macro.

Signed-off-by: H. Peter Anvin (Intel) <hpa at zytor.com>


---
 asm/nasm.c      | 18 ++++++++++++++----
 asm/pptok.dat   |  3 ++-
 asm/preproc.c   |  7 +++++++
 include/error.h |  7 ++++---
 test/note.asm   | 23 +++++++++++++++++++++++
 5 files changed, 50 insertions(+), 8 deletions(-)

diff --git a/asm/nasm.c b/asm/nasm.c
index 55e4a8cf..e1e3eff0 100644
--- a/asm/nasm.c
+++ b/asm/nasm.c
@@ -1801,6 +1801,12 @@ static bool skip_this_pass(int severity)
     if ((severity & ERR_MASK) > ERR_NONFATAL)
 	return false;
 
+    /*
+     * We *never* print a message for ERR_NOTE.
+     */
+    if ((severity & ERR_MASK) == ERR_NOTE)
+        return true;
+
     /*
      * passn is 1 on the very first pass only.
      * pass0 is 2 on the code-generation (final) pass only.
@@ -1826,6 +1832,12 @@ static void nasm_verror_common(int severity, const char *fmt, va_list args)
     const char *pfx;
 
     switch (severity & (ERR_MASK|ERR_NO_SEVERITY)) {
+    case ERR_NOTE:
+        pfx = "note: ";
+        break;
+    case ERR_DEBUG:
+        pfx = "debug: ";
+        break;
     case ERR_WARNING:
         pfx = "warning: ";
         break;
@@ -1838,9 +1850,6 @@ static void nasm_verror_common(int severity, const char *fmt, va_list args)
     case ERR_PANIC:
         pfx = "panic: ";
         break;
-    case ERR_DEBUG:
-        pfx = "debug: ";
-        break;
     default:
         pfx = "";
         break;
@@ -1861,7 +1870,7 @@ static void nasm_verror_common(int severity, const char *fmt, va_list args)
 
     /*
      * Don't suppress this with skip_this_pass(), or we don't get
-     * pass1 or preprocessor warnings in the list file
+     * pass1 or preprocessor warnings or notes in the list file
      */
     lfmt->error(severity, pfx, msg);
 
@@ -1874,6 +1883,7 @@ static void nasm_verror_common(int severity, const char *fmt, va_list args)
     preproc->error_list_macros(severity);
 
     switch (severity & ERR_MASK) {
+    case ERR_NOTE:
     case ERR_DEBUG:
         /* no further action, by definition */
         break;
diff --git a/asm/pptok.dat b/asm/pptok.dat
index a2c64d0a..7bb85280 100644
--- a/asm/pptok.dat
+++ b/asm/pptok.dat
@@ -1,6 +1,6 @@
 ## --------------------------------------------------------------------------
 ##   
-##   Copyright 1996-2016 The NASM Authors - All Rights Reserved
+##   Copyright 1996-2018 The NASM Authors - All Rights Reserved
 ##   See the file AUTHORS included with the NASM distribution for
 ##   the specific copyright holders.
 ##
@@ -76,6 +76,7 @@
 %line
 %local
 %macro
+%note
 %pathsearch
 %pop
 %pragma
diff --git a/asm/preproc.c b/asm/preproc.c
index 8e1e6369..0a6e0fa6 100644
--- a/asm/preproc.c
+++ b/asm/preproc.c
@@ -2735,6 +2735,9 @@ static int do_directive(Token *tline, char **output)
     case PP_WARNING:
         severity = ERR_WARNING|ERR_WARN_USER;
         goto issue_error;
+    case PP_NOTE:
+        severity = ERR_NOTE;
+        goto issue_error;
 
 issue_error:
     {
@@ -2759,6 +2762,10 @@ issue_error:
             nasm_free(p);
         }
         free_tlist(origline);
+
+        if (severity == ERR_NOTE)
+            lfmt->drop();       /* Suppress printing the actual %note */
+
         return DIRECTIVE_FOUND;
     }
 
diff --git a/include/error.h b/include/error.h
index 139400db..2f21b102 100644
--- a/include/error.h
+++ b/include/error.h
@@ -63,9 +63,10 @@ static inline vefunc nasm_set_verror(vefunc ve)
  * argument to an efunc.
  */
 
-#define ERR_DEBUG       0x00000000      /* put out debugging message */
-#define ERR_WARNING     0x00000001      /* warn only: no further action */
-#define ERR_NONFATAL    0x00000002      /* terminate assembly after phase */
+#define ERR_NOTE        0x00000000	/* note in the list file only */
+#define ERR_DEBUG       0x00000001      /* put out debugging message */
+#define ERR_WARNING     0x00000002      /* warn only: no further action */
+#define ERR_NONFATAL    0x00000003      /* terminate assembly after phase */
 #define ERR_FATAL       0x00000006      /* instantly fatal: exit with error */
 #define ERR_PANIC       0x00000007      /* internal error: panic instantly
                                          * and dump core for reference */
diff --git a/test/note.asm b/test/note.asm
new file mode 100644
index 00000000..c1ba2bb6
--- /dev/null
+++ b/test/note.asm
@@ -0,0 +1,23 @@
+	bits 32
+%define bluttan 66h
+foo:
+	db bluttan
+%warning "bluttan" = bluttan
+	db 67h
+        db 60000,60000
+%note "bluttan" = bluttan
+	nop
+
+%macro warnalot 0.nolist
+	db 60000,60000
+	db 60000,60000
+%endmacro
+
+	warnalot
+
+%macro warnalotl 0
+        db 60000,60000
+	db 60000,60000
+%endmacro
+
+	warnalotl


More information about the Nasm-commits mailing list