aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--frontends/verific/verific.cc2
-rw-r--r--kernel/log.cc34
-rw-r--r--kernel/log.h2
3 files changed, 37 insertions, 1 deletions
diff --git a/frontends/verific/verific.cc b/frontends/verific/verific.cc
index 4f8ea92ef..5f7d973a9 100644
--- a/frontends/verific/verific.cc
+++ b/frontends/verific/verific.cc
@@ -77,7 +77,7 @@ void msg_func(msg_type_t msg_type, const char *message_id, linefile_type linefil
message += vstringf(msg, args);
if (msg_type == VERIFIC_ERROR || msg_type == VERIFIC_WARNING || msg_type == VERIFIC_PROGRAM_ERROR)
- log_warning("%s\n", message.c_str());
+ log_warning_noprefix("%s\n", message.c_str());
else
log("%s\n", message.c_str());
}
diff --git a/kernel/log.cc b/kernel/log.cc
index 3768922cd..7be95204b 100644
--- a/kernel/log.cc
+++ b/kernel/log.cc
@@ -227,6 +227,32 @@ void logv_warning(const char *format, va_list ap)
}
}
+void logv_warning_noprefix(const char *format, va_list ap)
+{
+ std::string message = vstringf(format, ap);
+ bool suppressed = false;
+
+ for (auto &re : log_nowarn_regexes)
+ if (std::regex_search(message, re))
+ suppressed = true;
+
+ if (suppressed)
+ {
+ log("%s", message.c_str());
+ }
+ else
+ {
+ if (log_errfile != NULL && !log_quiet_warnings)
+ log_files.push_back(log_errfile);
+
+ log("%s", message.c_str());
+ log_flush();
+
+ if (log_errfile != NULL && !log_quiet_warnings)
+ log_files.pop_back();
+ }
+}
+
void logv_error(const char *format, va_list ap)
{
#ifdef EMSCRIPTEN
@@ -282,6 +308,14 @@ void log_warning(const char *format, ...)
va_end(ap);
}
+void log_warning_noprefix(const char *format, ...)
+{
+ va_list ap;
+ va_start(ap, format);
+ logv_warning_noprefix(format, ap);
+ va_end(ap);
+}
+
void log_error(const char *format, ...)
{
va_list ap;
diff --git a/kernel/log.h b/kernel/log.h
index 6cae4431d..e27dafab9 100644
--- a/kernel/log.h
+++ b/kernel/log.h
@@ -65,11 +65,13 @@ extern void (*log_error_atexit)();
void logv(const char *format, va_list ap);
void logv_header(RTLIL::Design *design, const char *format, va_list ap);
void logv_warning(const char *format, va_list ap);
+void logv_warning_noprefix(const char *format, va_list ap);
YS_NORETURN void logv_error(const char *format, va_list ap) YS_ATTRIBUTE(noreturn);
void log(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2));
void log_header(RTLIL::Design *design, const char *format, ...) YS_ATTRIBUTE(format(printf, 2, 3));
void log_warning(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2));
+void log_warning_noprefix(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2));
YS_NORETURN void log_error(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2), noreturn);
YS_NORETURN void log_cmd_error(const char *format, ...) YS_ATTRIBUTE(format(printf, 1, 2), noreturn);