From 6f596767c39ce6ac5ce9baa79479b0e30e1729fc Mon Sep 17 00:00:00 2001 From: Alexey Samsonov Date: Fri, 1 Jun 2012 06:11:13 +0000 Subject: Stub files for common symbolizer for AddressSanitizer and ThreadSanitizer tools. It is an analogue of addr2line utility and should allow to map instruction address to a location in source code at run-time. It should use debug information (in DWARF) in a binary, and hopefully it would be possible to re-use code from llvm/DebugInfo/DIContext.h llvm-svn: 157806 --- .../lib/sanitizer_common/sanitizer_symbolizer.h | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h (limited to 'compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h') diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h new file mode 100644 index 00000000000..cce6fc93bb3 --- /dev/null +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h @@ -0,0 +1,60 @@ +//===-- symbolizer.h --------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Symbolizer is intended to be used by both +// AddressSanitizer and ThreadSanitizer to symbolize a given +// address. It is an analogue of addr2line utility and allows to map +// instruction address to a location in source code at run-time. +// +// Symbolizer is planned to use debug information (in DWARF format) +// in a binary via interface defined in "llvm/DebugInfo/DIContext.h" +// +// Symbolizer code should be called from the run-time library of +// dynamic tools, and generally should not call memory allocation +// routines or other system library functions intercepted by those tools. +// Instead, Symbolizer code should use their replacements, defined in +// "compiler-rt/lib/sanitizer_common/sanitizer_libc.h". +//===----------------------------------------------------------------------===// +#ifndef SANITIZER_SYMBOLIZER_H +#define SANITIZER_SYMBOLIZER_H + +#include "sanitizer_defs.h" +#include "sanitizer_libc.h" +// WARNING: Do not include system headers here. See details above. + +namespace __sanitizer { + +struct AddressInfo { + uptr address; + char *module; + uptr module_offset; + char *function; + char *file; + int line; + int column; + + // Deletes all strings. + void Clear(); +}; + +struct AddressInfoList { + AddressInfoList *next; + AddressInfo info; + + // Deletes all nodes in a list. + void Clear(); +}; + +// Returns a list of descriptions for a given address (in all inlined +// functions). The ownership is transferred to the caller. +AddressInfoList* SymbolizeCode(uptr address); + +} // namespace __sanitizer + +#endif // SANITIZER_SYMBOLIZER_H -- cgit v1.2.3