diff options
Diffstat (limited to 'test/sanitizer_common/TestCases/symbolize_pc.cpp')
-rw-r--r-- | test/sanitizer_common/TestCases/symbolize_pc.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/test/sanitizer_common/TestCases/symbolize_pc.cpp b/test/sanitizer_common/TestCases/symbolize_pc.cpp new file mode 100644 index 000000000..4cea49f33 --- /dev/null +++ b/test/sanitizer_common/TestCases/symbolize_pc.cpp @@ -0,0 +1,57 @@ +// RUN: %clangxx -O0 %s -o %t +// RUN: %env_tool_opts=strip_path_prefix=/TestCases/ %run %t 2>&1 | FileCheck %s +// +// Tests __sanitizer_symbolize_pc. +#include <stdio.h> +#include <sanitizer/common_interface_defs.h> + +int GLOBAL_VAR_ABC; + +void SymbolizeSmallBuffer() { + char data[] = "abcdef"; + __sanitizer_symbolize_pc(__builtin_return_address(0), "%p %F %L", data, 0); + printf("UNCHANGED '%s'\n", data); + __sanitizer_symbolize_pc(__builtin_return_address(0), "%p %F %L", data, 1); + printf("EMPTY '%s'\n", data); + __sanitizer_symbolize_pc(__builtin_return_address(0), "%p %F %L", data, + sizeof(data)); + printf("PARTIAL '%s'\n", data); +} + +void SymbolizeCaller() { + char data[100]; + __sanitizer_symbolize_pc(__builtin_return_address(0), "%p %F %L", data, + sizeof(data)); + printf("FIRST_FORMAT %s\n", data); + __sanitizer_symbolize_pc(__builtin_return_address(0), + "FUNC:%f LINE:%l FILE:%s", data, sizeof(data)); + printf("SECOND_FORMAT %s\n", data); + __sanitizer_symbolize_pc(__builtin_return_address(0), + "LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO" + "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO" + "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO" + "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO" + "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOONG" + "FUNC:%f LINE:%l FILE:%s", data, sizeof(data)); + printf("LONG_FORMAT %s\n", data); +} + +void SymbolizeData() { + char data[100]; + __sanitizer_symbolize_global(&GLOBAL_VAR_ABC, "%g %s:%l", data, sizeof(data)); + printf("GLOBAL: %s\n", data); +} + +int main() { + // CHECK: UNCHANGED 'abcdef' + // CHECK: EMPTY '' + // CHECK: PARTIAL '0x{{.*}}' + SymbolizeSmallBuffer(); + + // CHECK: FIRST_FORMAT 0x{{.*}} in main symbolize_pc.cpp:[[@LINE+2]] + // CHECK: SECOND_FORMAT FUNC:main LINE:[[@LINE+1]] FILE:symbolize_pc.cpp + SymbolizeCaller(); + + // CHECK: GLOBAL: GLOBAL_VAR_ABC + SymbolizeData(); +} |