forked from OSchip/llvm-project
[sanitizer_common] Rename OnPrint to __sanitizer_on_print.
Summary: https://reviews.llvm.org/D28596 exposed OnPrint in the global namespace, which can cause collisions with user-defined OnPrint() functions. Reviewers: vitalybuka, dvyukov Reviewed By: vitalybuka, dvyukov Subscribers: llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D67987 llvm-svn: 373518
This commit is contained in:
parent
925d9d2e14
commit
e55c442b1b
|
@ -229,15 +229,21 @@ void SetPrintfAndReportCallback(void (*callback)(const char *)) {
|
|||
// Can be overriden in frontend.
|
||||
#if SANITIZER_GO && defined(TSAN_EXTERNAL_HOOKS)
|
||||
// Implementation must be defined in frontend.
|
||||
// TODO(morehouse): Remove OnPrint after migrating Go to __sanitizer_on_print.
|
||||
extern "C" void OnPrint(const char *str);
|
||||
extern "C" void __sanitizer_on_print(const char *str);
|
||||
#else
|
||||
SANITIZER_INTERFACE_WEAK_DEF(void, OnPrint, const char *str) {
|
||||
SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_on_print, const char *str) {
|
||||
(void)str;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void CallPrintfAndReportCallback(const char *str) {
|
||||
#if SANITIZER_GO && defined(TSAN_EXTERNAL_HOOKS)
|
||||
// TODO(morehouse): Remove OnPrint after migrating Go to __sanitizer_on_print.
|
||||
OnPrint(str);
|
||||
#endif
|
||||
__sanitizer_on_print(str);
|
||||
if (PrintfAndReportCallback)
|
||||
PrintfAndReportCallback(str);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
// Checks that the __sanitizer_on_print hook gets the exact same sanitizer
|
||||
// report as what is printed to stderr.
|
||||
//
|
||||
// RUN: %clangxx %s -o %t
|
||||
// RUN: %run %t %t-onprint.txt 2>%t-stderr.txt || true
|
||||
// RUN: diff %t-onprint.txt %t-stderr.txt
|
||||
|
||||
#include <cassert>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
|
||||
FILE *f;
|
||||
volatile void *buf;
|
||||
volatile char sink;
|
||||
|
||||
extern "C" void __sanitizer_on_print(const char *str) {
|
||||
fprintf(f, "%s", str);
|
||||
fflush(f);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
assert(argc >= 2);
|
||||
f = fopen(argv[1], "w");
|
||||
|
||||
// Use-after-free to trigger ASan/TSan reports.
|
||||
void *ptr = malloc(1);
|
||||
buf = ptr;
|
||||
free(ptr);
|
||||
sink = *static_cast<char *>(ptr);
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue