[compiler-rt] 99796d0 - Revert "[ASan] Use debuginfo for symbolization."

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 20 23:38:05 PDT 2022


Please include details about the reason for a revert in the commit
message in the future

On Wed, Jun 15, 2022 at 4:44 PM Kirill Stoimenov via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
>
>
> Author: Kirill Stoimenov
> Date: 2022-06-15T23:42:46Z
> New Revision: 99796d06dbe11c8f81376ad1d42e7f17d2eff6ae
>
> URL: https://github.com/llvm/llvm-project/commit/99796d06dbe11c8f81376ad1d42e7f17d2eff6ae
> DIFF: https://github.com/llvm/llvm-project/commit/99796d06dbe11c8f81376ad1d42e7f17d2eff6ae.diff
>
> LOG: Revert "[ASan] Use debuginfo for symbolization."
>
> This reverts commit f0ab8d90d47c4b1e0ea73e655777b4bc35e3f609.
>
> Added:
>
>
> Modified:
>     compiler-rt/lib/asan/asan_globals.cpp
>     compiler-rt/lib/asan/asan_interface_internal.h
>     compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cpp
>     compiler-rt/test/asan/TestCases/Linux/odr-violation.cpp
>     compiler-rt/test/asan/TestCases/global-location.cpp
>
> Removed:
>
>
>
> ################################################################################
> diff  --git a/compiler-rt/lib/asan/asan_globals.cpp b/compiler-rt/lib/asan/asan_globals.cpp
> index 29eef6c68a516..ecc2600f039a1 100644
> --- a/compiler-rt/lib/asan/asan_globals.cpp
> +++ b/compiler-rt/lib/asan/asan_globals.cpp
> @@ -86,11 +86,10 @@ static void ReportGlobal(const Global &g, const char *prefix) {
>        "odr_indicator=%p\n",
>        prefix, (void *)&g, (void *)g.beg, g.size, g.size_with_redzone, g.name,
>        g.module_name, g.has_dynamic_init, (void *)g.odr_indicator);
> -
> -  DataInfo info;
> -  Symbolizer::GetOrInit()->SymbolizeData(g.beg, &info);
> -  if (info.line != 0) {
> -    Report("  location: name=%s, %d\n", info.file, info.line);
> +  if (g.location) {
> +    Report("  location (%p): name=%s[%p], %d %d\n", (void *)g.location,
> +           g.location->filename, (void *)g.location->filename,
> +           g.location->line_no, g.location->column_no);
>    }
>  }
>
> @@ -296,15 +295,19 @@ void PrintGlobalNameIfASCII(InternalScopedString *str, const __asan_global &g) {
>                (char *)g.beg);
>  }
>
> -void PrintGlobalLocation(InternalScopedString *str, const __asan_global &g) {
> -  DataInfo info;
> -  Symbolizer::GetOrInit()->SymbolizeData(g.beg, &info);
> +static const char *GlobalFilename(const __asan_global &g) {
> +  const char *res = g.module_name;
> +  // Prefer the filename from source location, if is available.
> +  if (g.location) res = g.location->filename;
> +  CHECK(res);
> +  return res;
> +}
>
> -  if (info.line != 0) {
> -    str->append("%s:%d", info.file, info.line);
> -  } else {
> -    str->append("%s", g.module_name);
> -  }
> +void PrintGlobalLocation(InternalScopedString *str, const __asan_global &g) {
> +  str->append("%s", GlobalFilename(g));
> +  if (!g.location) return;
> +  if (g.location->line_no) str->append(":%d", g.location->line_no);
> +  if (g.location->column_no) str->append(":%d", g.location->column_no);
>  }
>
>  } // namespace __asan
>
> diff  --git a/compiler-rt/lib/asan/asan_interface_internal.h b/compiler-rt/lib/asan/asan_interface_internal.h
> index b0802a89ddbde..3e6e660288746 100644
> --- a/compiler-rt/lib/asan/asan_interface_internal.h
> +++ b/compiler-rt/lib/asan/asan_interface_internal.h
> @@ -53,9 +53,8 @@ extern "C" {
>      const char *module_name; // Module name as a C string. This pointer is a
>                               // unique identifier of a module.
>      uptr has_dynamic_init;   // Non-zero if the global has dynamic initializer.
> -    uptr windows_padding;    // TODO: Figure out how to remove this padding
> -                             // that's simply here to make the MSVC incremental
> -                             // linker happy...
> +    __asan_global_source_location *location;  // Source location of a global,
> +                                              // or NULL if it is unknown.
>      uptr odr_indicator;      // The address of the ODR indicator symbol.
>    };
>
>
> diff  --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cpp
> index 461fe96613688..16cb65e1aac96 100644
> --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cpp
> +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cpp
> @@ -363,21 +363,14 @@ void ParseSymbolizePCOutput(const char *str, SymbolizedStack *res) {
>    }
>  }
>
> -// Parses a two- or three-line string in the following format:
> +// Parses a two-line string in the following format:
>  //   <symbol_name>
>  //   <start_address> <size>
> -//   <filename>:<column>
> -// Used by LLVMSymbolizer and InternalSymbolizer. LLVMSymbolizer added support
> -// for symbolizing the third line in D123538, but we support the older two-line
> -// information as well.
> +// Used by LLVMSymbolizer and InternalSymbolizer.
>  void ParseSymbolizeDataOutput(const char *str, DataInfo *info) {
>    str = ExtractToken(str, "\n", &info->name);
>    str = ExtractUptr(str, " ", &info->start);
>    str = ExtractUptr(str, "\n", &info->size);
> -  // Note: If the third line isn't present, these calls will set info.{file,
> -  // line} to empty strings.
> -  str = ExtractToken(str, ":", &info->file);
> -  str = ExtractUptr(str, "\n", &info->line);
>  }
>
>  static void ParseSymbolizeFrameOutput(const char *str,
>
> diff  --git a/compiler-rt/test/asan/TestCases/Linux/odr-violation.cpp b/compiler-rt/test/asan/TestCases/Linux/odr-violation.cpp
> index 1c8ea99430df2..478568cd122c2 100644
> --- a/compiler-rt/test/asan/TestCases/Linux/odr-violation.cpp
> +++ b/compiler-rt/test/asan/TestCases/Linux/odr-violation.cpp
> @@ -7,15 +7,15 @@
>  // pointers. This setting is not on by default because it's too expensive.
>  //
>  // Different size: detect a bug if detect_odr_violation>=1
> -// RUN: %clangxx_asan -g -DBUILD_SO=1 -fPIC -shared %s -o %dynamiclib
> -// RUN: %clangxx_asan -g %s %ld_flags_rpath_exe -o %t-ODR-EXE
> +// RUN: %clangxx_asan -DBUILD_SO=1 -fPIC -shared %s -o %dynamiclib
> +// RUN: %clangxx_asan %s %ld_flags_rpath_exe -o %t-ODR-EXE
>  // RUN: %env_asan_opts=fast_unwind_on_malloc=0:detect_odr_violation=1 not %run %t-ODR-EXE 2>&1 | FileCheck %s
>  // RUN: %env_asan_opts=fast_unwind_on_malloc=0:detect_odr_violation=2 not %run %t-ODR-EXE 2>&1 | FileCheck %s
>  // RUN: %env_asan_opts=fast_unwind_on_malloc=0:detect_odr_violation=0     %run %t-ODR-EXE 2>&1 | FileCheck %s --check-prefix=DISABLED
>  // RUN: %env_asan_opts=fast_unwind_on_malloc=0                        not %run %t-ODR-EXE 2>&1 | FileCheck %s
>  //
>  // Same size: report a bug only if detect_odr_violation>=2.
> -// RUN: %clangxx_asan -g -DBUILD_SO=1 -fPIC -shared %s -o %dynamiclib -DSZ=100
> +// RUN: %clangxx_asan -DBUILD_SO=1 -fPIC -shared %s -o %dynamiclib -DSZ=100
>  // RUN: %env_asan_opts=fast_unwind_on_malloc=0:detect_odr_violation=1     %run %t-ODR-EXE 2>&1 | FileCheck %s --check-prefix=DISABLED
>  // RUN: %env_asan_opts=fast_unwind_on_malloc=0:detect_odr_violation=2 not %run %t-ODR-EXE 2>&1 | FileCheck %s
>  // RUN: %env_asan_opts=fast_unwind_on_malloc=0                        not %run %t-ODR-EXE 2>&1 | FileCheck %s
> @@ -26,18 +26,18 @@
>  // RUN: rm -f %t.supp
>  //
>  // Use private aliases for global variables without indicator symbol.
> -// RUN: %clangxx_asan -g -DBUILD_SO=1 -fPIC -shared -mllvm -asan-use-private-alias %s -o %dynamiclib -DSZ=100
> -// RUN: %clangxx_asan -g -mllvm -asan-use-private-alias %s %ld_flags_rpath_exe -o %t-ODR-EXE
> +// RUN: %clangxx_asan -DBUILD_SO=1 -fPIC -shared -mllvm -asan-use-private-alias %s -o %dynamiclib -DSZ=100
> +// RUN: %clangxx_asan -mllvm -asan-use-private-alias %s %ld_flags_rpath_exe -o %t-ODR-EXE
>  // RUN: %env_asan_opts=fast_unwind_on_malloc=0 %run %t-ODR-EXE 2>&1 | FileCheck %s --check-prefix=DISABLED
>
>  // Use private aliases for global variables: use indicator symbol to detect ODR violation.
> -// RUN: %clangxx_asan -g -DBUILD_SO=1 -fPIC -shared -mllvm -asan-use-private-alias -mllvm -asan-use-odr-indicator  %s -o %dynamiclib -DSZ=100
> -// RUN: %clangxx_asan -g -mllvm -asan-use-private-alias -mllvm -asan-use-odr-indicator %s %ld_flags_rpath_exe -o %t-ODR-EXE
> +// RUN: %clangxx_asan -DBUILD_SO=1 -fPIC -shared -mllvm -asan-use-private-alias -mllvm -asan-use-odr-indicator  %s -o %dynamiclib -DSZ=100
> +// RUN: %clangxx_asan -mllvm -asan-use-private-alias -mllvm -asan-use-odr-indicator %s %ld_flags_rpath_exe -o %t-ODR-EXE
>  // RUN: %env_asan_opts=fast_unwind_on_malloc=0 not %run %t-ODR-EXE 2>&1 | FileCheck %s
>
>  // Same as above but with clang switches.
> -// RUN: %clangxx_asan -g -DBUILD_SO=1 -fPIC -shared -fsanitize-address-use-odr-indicator %s -o %dynamiclib -DSZ=100
> -// RUN: %clangxx_asan -g -fsanitize-address-use-odr-indicator %s %ld_flags_rpath_exe -o %t-ODR-EXE
> +// RUN: %clangxx_asan -DBUILD_SO=1 -fPIC -shared -fsanitize-address-use-odr-indicator %s -o %dynamiclib -DSZ=100
> +// RUN: %clangxx_asan -fsanitize-address-use-odr-indicator %s %ld_flags_rpath_exe -o %t-ODR-EXE
>  // RUN: %env_asan_opts=fast_unwind_on_malloc=0 not %run %t-ODR-EXE 2>&1 | FileCheck %s
>
>  // GNU driver doesn't handle .so files properly.
> @@ -55,7 +55,7 @@ namespace foo { char G[SZ]; }
>  #include <stdio.h>
>  namespace foo { char G[100]; }
>  // CHECK: ERROR: AddressSanitizer: odr-violation
> -// CHECK: size=100 'foo::G' {{.*}}odr-violation.cpp:[[@LINE-2]]
> +// CHECK: size=100 'foo::G' {{.*}}odr-violation.cpp:[[@LINE-2]]:22
>  // CHECK: size={{4|100}} 'foo::G'
>  int main(int argc, char **argv) {
>    printf("PASS: %p\n", &foo::G);
>
> diff  --git a/compiler-rt/test/asan/TestCases/global-location.cpp b/compiler-rt/test/asan/TestCases/global-location.cpp
> index 8869ac5227843..42711f97c21b9 100644
> --- a/compiler-rt/test/asan/TestCases/global-location.cpp
> +++ b/compiler-rt/test/asan/TestCases/global-location.cpp
> @@ -1,30 +1,21 @@
> -// RUN: %clangxx_asan -g -O2 %s -o %t
> +// RUN: %clangxx_asan -O2 %s -o %t
>  // RUN: not %run %t g 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=GLOB
>  // RUN: not %run %t c 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=CLASS_STATIC
>  // RUN: not %run %t f 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=FUNC_STATIC
>  // RUN: not %run %t l 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=LITERAL
>
> -// RUN: %clangxx_asan -O2 %s -o %t
> -// RUN: llvm-strip -s %t
> -// RUN: not %run %t g 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=GLOB-NO-G
> -// RUN: not %run %t c 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=CLASS_STATIC-NO-G
> -// RUN: not %run %t f 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=FUNC_STATIC-NO-G
> -// RUN: not %run %t l 2>&1 | FileCheck %s --check-prefix=CHECK --check-prefix=LITERAL-NO-G
> -
>  // CHECK: AddressSanitizer: global-buffer-overflow
>
>  #include <string.h>
>
>  struct C {
>    static int array[10];
> -  // CLASS_STATIC:      0x{{.*}} is located 4 bytes to the right of global variable 'C::array' defined in '{{.*}}global-location.cpp:[[@LINE-1]]' {{.*}} of size 40
> -  // CLASS_STATIC-NO-G: 0x{{.*}} is located 4 bytes to the right of global variable 'C::array' defined in '{{.*}}global-location.cpp' {{.*}} of size 40
>  };
>
>  int global[10];
> -// GLOB:      0x{{.*}} is located 4 bytes to the right of global variable 'global' defined in '{{.*}}global-location.cpp:[[@LINE-1]]' {{.*}} of size 40
> -// GLOB-NO-G: 0x{{.*}} is located 4 bytes to the right of global variable 'global' defined in '{{.*}}global-location.cpp' {{.*}} of size 40
> +// GLOB: 0x{{.*}} is located 4 bytes to the right of global variable 'global' defined in '{{.*}}global-location.cpp:[[@LINE-1]]:5' {{.*}} of size 40
>  int C::array[10];
> +// CLASS_STATIC: 0x{{.*}} is located 4 bytes to the right of global variable 'C::array' defined in '{{.*}}global-location.cpp:[[@LINE-1]]:8' {{.*}} of size 40
>
>  int main(int argc, char **argv) {
>    int one = argc - 1;
> @@ -33,14 +24,12 @@ int main(int argc, char **argv) {
>    case 'c': return C::array[one * 11];
>    case 'f':
>      static int array[10];
> -    // FUNC_STATIC:      0x{{.*}} is located 4 bytes to the right of global variable 'array' defined in '{{.*}}global-location.cpp:[[@LINE-1]]' {{.*}} of size 40
> -    // FUNC_STATIC-NO-G: 0x{{.*}} is located 4 bytes to the right of global variable 'array' defined in '{{.*}}global-location.cpp' {{.*}} of size 40
> +    // FUNC_STATIC: 0x{{.*}} is located 4 bytes to the right of global variable 'array' defined in '{{.*}}global-location.cpp:[[@LINE-1]]:16' {{.*}} of size 40
>      memset(array, 0, 10);
>      return array[one * 11];
>    case 'l':
>      const char *str = "0123456789";
> -    // LITERAL:      0x{{.*}} is located 0 bytes to the right of global variable {{.*}} defined in '{{.*}}global-location.cpp:[[@LINE-1]]' {{.*}} of size 11
> -    // LITERAL-NO-G: 0x{{.*}} is located 0 bytes to the right of global variable {{.*}} defined in '{{.*}}global-location.cpp' {{.*}} of size 11
> +    // LITERAL: 0x{{.*}} is located 0 bytes to the right of global variable {{.*}} defined in '{{.*}}global-location.cpp:[[@LINE-1]]:23' {{.*}} of size 11
>      return str[one * 11];
>    }
>    return 0;
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list