Index: src/snapshot/serializer-common.cc |
diff --git a/src/snapshot/serializer-common.cc b/src/snapshot/serializer-common.cc |
index baab8f3d6b26aca39cd98688b0d83def58ba0c0f..6c400cd25ea2c9dfe1cd08a0c6bdf486e2bc8666 100644 |
--- a/src/snapshot/serializer-common.cc |
+++ b/src/snapshot/serializer-common.cc |
@@ -8,6 +8,10 @@ |
#include "src/ic/stub-cache.h" |
#include "src/list-inl.h" |
+#if defined(DEBUG) && defined(V8_OS_LINUX) |
+#include <execinfo.h> |
+#endif // DEBUG && V8_OS_LINUX |
+ |
namespace v8 { |
namespace internal { |
@@ -33,7 +37,14 @@ uint32_t ExternalReferenceEncoder::Encode(Address address) const { |
DCHECK_NOT_NULL(address); |
base::HashMap::Entry* entry = |
const_cast<base::HashMap*>(map_)->Lookup(address, Hash(address)); |
- DCHECK_NOT_NULL(entry); |
+ if (entry == nullptr) { |
+ void* function_addr = address; |
+ v8::base::OS::PrintError("Unknown external reference %p.\n", function_addr); |
+#if defined(DEBUG) && defined(V8_OS_LINUX) |
+ v8::base::OS::PrintError("%s\n", backtrace_symbols(&function_addr, 1)[0]); |
+#endif // DEBUG && V8_OS_LINUX |
+ v8::base::OS::Abort(); |
+ } |
return static_cast<uint32_t>(reinterpret_cast<intptr_t>(entry->value)); |
} |