summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2014-07-19 20:53:29 +0200
committerClifford Wolf <clifford@clifford.at>2014-07-19 20:53:29 +0200
commit02f0acb3bce05f3af036495aa36049c67ffbdb52 (patch)
tree995a476928dc30bfb41ccb534b8cbfc04a52ac7a /kernel
parentefd9604dfb92fda05c3efea67b7c32d812717fa8 (diff)
Fixed log_id() memory corruption
Diffstat (limited to 'kernel')
-rw-r--r--kernel/log.cc8
-rw-r--r--kernel/log.h7
2 files changed, 10 insertions, 5 deletions
diff --git a/kernel/log.cc b/kernel/log.cc
index b2c92e4e..3108bddf 100644
--- a/kernel/log.cc
+++ b/kernel/log.cc
@@ -205,3 +205,11 @@ const char *log_signal(const RTLIL::SigSpec &sig, bool autoint)
return string_buf.back().c_str();
}
+const char *log_id(std::string str)
+{
+ if (str.size() > 1 && str[0] == '\\' && str[1] != '$')
+ string_buf.push_back(str.substr(1));
+ else
+ string_buf.push_back(str);
+ return string_buf.back().c_str();
+}
diff --git a/kernel/log.h b/kernel/log.h
index 3e280a6f..2c3597c9 100644
--- a/kernel/log.h
+++ b/kernel/log.h
@@ -51,13 +51,10 @@ void log_reset_stack();
void log_flush();
const char *log_signal(const RTLIL::SigSpec &sig, bool autoint = true);
-
-static inline const char *log_id(std::string id) {
- return RTLIL::id2cstr(id);
-}
+const char *log_id(std::string id);
template<typename T> static inline const char *log_id(T *obj) {
- return RTLIL::id2cstr(obj->name);
+ return log_id(obj->name);
}
#define log_abort() log_error("Abort in %s:%d.\n", __FILE__, __LINE__)