diff options
author | dim <dim@FreeBSD.org> | 2015-09-10 20:35:47 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2015-09-10 20:35:47 +0000 |
commit | 27c642b88ff253dca67f6dc0ca8ef4da0e9b7eb4 (patch) | |
tree | f8f8e6ce180ca5204b650ff6315e6e0893f9a679 /contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cc | |
parent | 0c1fa3e6ad5b7fd602181bc094d752a27ea34568 (diff) | |
parent | 3da1400d07e473463df86668e1e50da8b02618fa (diff) | |
download | FreeBSD-src-27c642b88ff253dca67f6dc0ca8ef4da0e9b7eb4.zip FreeBSD-src-27c642b88ff253dca67f6dc0ca8ef4da0e9b7eb4.tar.gz |
Update compiler-rt to 3.7.0 release. This also includes the sanitizer
and profile libraries.
Diffstat (limited to 'contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cc')
-rw-r--r-- | contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cc | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cc b/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cc index 7b37dbc..3574fa3 100644 --- a/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cc +++ b/contrib/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace_printer.cc @@ -26,8 +26,8 @@ static const char *StripFunctionName(const char *function, const char *prefix) { static const char kDefaultFormat[] = " #%n %p %F %L"; void RenderFrame(InternalScopedString *buffer, const char *format, int frame_no, - const AddressInfo &info, const char *strip_path_prefix, - const char *strip_func_prefix) { + const AddressInfo &info, bool vs_style, + const char *strip_path_prefix, const char *strip_func_prefix) { if (0 == internal_strcmp(format, "DEFAULT")) format = kDefaultFormat; for (const char *p = format; *p != '\0'; p++) { @@ -82,14 +82,14 @@ void RenderFrame(InternalScopedString *buffer, const char *format, int frame_no, break; case 'S': // File/line information. - RenderSourceLocation(buffer, info.file, info.line, info.column, + RenderSourceLocation(buffer, info.file, info.line, info.column, vs_style, strip_path_prefix); break; case 'L': // Source location, or module location. if (info.file) { RenderSourceLocation(buffer, info.file, info.line, info.column, - strip_path_prefix); + vs_style, strip_path_prefix); } else if (info.module) { RenderModuleLocation(buffer, info.module, info.module_offset, strip_path_prefix); @@ -99,22 +99,33 @@ void RenderFrame(InternalScopedString *buffer, const char *format, int frame_no, break; case 'M': // Module basename and offset, or PC. - if (info.module) + if (info.address & kExternalPCBit) + {} // There PCs are not meaningful. + else if (info.module) buffer->append("(%s+%p)", StripModuleName(info.module), (void *)info.module_offset); else buffer->append("(%p)", (void *)info.address); break; default: - Report("Unsupported specifier in stack frame format: %c (0x%zx)!\n", - *p, *p); + Report("Unsupported specifier in stack frame format: %c (0x%zx)!\n", *p, + *p); Die(); } } } void RenderSourceLocation(InternalScopedString *buffer, const char *file, - int line, int column, const char *strip_path_prefix) { + int line, int column, bool vs_style, + const char *strip_path_prefix) { + if (vs_style && line > 0) { + buffer->append("%s(%d", StripPathPrefix(file, strip_path_prefix), line); + if (column > 0) + buffer->append(",%d", column); + buffer->append(")"); + return; + } + buffer->append("%s", StripPathPrefix(file, strip_path_prefix)); if (line > 0) { buffer->append(":%d", line); |