[llvm-commits] [compiler-rt] r157806 - in /compiler-rt/trunk/lib/sanitizer_common: sanitizer_symbolizer.cc sanitizer_symbolizer.h

Alexey Samsonov samsonov at google.com
Thu May 31 23:11:14 PDT 2012


Author: samsonov
Date: Fri Jun  1 01:11:13 2012
New Revision: 157806

URL: http://llvm.org/viewvc/llvm-project?rev=157806&view=rev
Log:

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

Added:
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.cc
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h

Added: compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.cc?rev=157806&view=auto
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.cc (added)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.cc Fri Jun  1 01:11:13 2012
@@ -0,0 +1,56 @@
+//===-- symbolizer.cc -------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This is a stub for LLVM-based symbolizer.
+// This file is shared between AddressSanitizer and ThreadSanitizer
+// run-time libraries. See sanitizer.h for details.
+//===----------------------------------------------------------------------===//
+
+// WARNING: Avoid using library functions - see comments in symbolizer.h.
+#include "sanitizer_symbolizer.h"
+// FIXME: replace library malloc/free with internal_malloc/internal_free
+// that would be provided by ASan/TSan run-time libraries.
+#if defined(__linux__)
+# include <malloc.h>
+#elif defined(__APPLE__)
+# include <malloc/malloc.h>
+#endif
+
+namespace __sanitizer {
+
+void AddressInfo::Clear() {
+  free(module);
+  free(function);
+  free(file);
+}
+
+void AddressInfoList::Clear() {
+  AddressInfoList *cur = this;
+  while (cur) {
+    cur->info.Clear();
+    AddressInfoList *nxt = cur->next;
+    free(cur);
+    cur = nxt;
+  }
+}
+
+AddressInfoList* SymbolizeCode(uptr address) {
+  AddressInfoList *list = (AddressInfoList*)malloc(sizeof(AddressInfoList));
+  list->next = 0;
+  list->info.address = address;
+  list->info.module = 0;
+  list->info.module_offset = 0;
+  list->info.function = 0;
+  list->info.file = 0;
+  list->info.line = 0;
+  list->info.column = 0;
+  return list;
+}
+
+}  // namespace __sanitizer

Added: compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h?rev=157806&view=auto
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h (added)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer.h Fri Jun  1 01:11:13 2012
@@ -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





More information about the llvm-commits mailing list