blob: d1f22fa0ed98cb473f1d7322d039d3b8b644e265 [file] [log] [blame]
commit a67d164a82bc535025bb65736ee4e5f381500ed8
Author: David Blaikie <dblaikie@gmail.com>
Date: Wed Oct 21 15:16:14 2020 -0700
Revert several changes related to llvm-symbolizer exiting non-zero on failure.
Seems users have enough different uses of the symbolizer where they
might have unknown binaries and offsets such that "best effort" behavior
is all that's expected of llvm-symbolizer - so even erroring on unknown
executables and out of bounds offsets might not be suitable.
This reverts commit 1de0199748ef2a20cd146c100ea1b8e6726c4767.
This reverts commit a7b209a6d40d77b43a38664b1fe64513587f24c6.
This reverts commit 338dd138ea4a70b52ab48e0c8aa38ec152b3569a.
diff --git a/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h b/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h
index 43c89aafea9..085e4bb4ccb 100644
--- a/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h
+++ b/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h
@@ -49,7 +49,6 @@ public:
std::string FallbackDebugPath;
std::string DWPName;
std::vector<std::string> DebugFileDirectory;
- std::function<void(Error)> RecoverableErrorHandler = WithColor::defaultErrorHandler;
};
LLVMSymbolizer() = default;
diff --git a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp b/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
index ed53ea9712b..383e2c0d305 100644
--- a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
+++ b/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
@@ -68,8 +68,7 @@ LLVMSymbolizer::symbolizeCode(const ObjectFile &Obj,
if (I != Modules.end())
return symbolizeCodeCommon(I->second.get(), ModuleOffset);
- std::unique_ptr<DIContext> Context =
- DWARFContext::create(Obj, nullptr, "", Opts.RecoverableErrorHandler);
+ std::unique_ptr<DIContext> Context = DWARFContext::create(Obj);
Expected<SymbolizableModule *> InfoOrErr =
createModuleInfo(&Obj, std::move(Context), ModuleName);
if (!InfoOrErr)
@@ -573,8 +572,7 @@ LLVMSymbolizer::getOrCreateModuleInfo(const std::string &ModuleName) {
}
}
if (!Context)
- Context = DWARFContext::create(*Objects.second, nullptr, Opts.DWPName,
- Opts.RecoverableErrorHandler);
+ Context = DWARFContext::create(*Objects.second, nullptr, Opts.DWPName);
return createModuleInfo(Objects.first, std::move(Context), ModuleName);
}
diff --git a/llvm/test/DebugInfo/symbolize-macho-universal-unknown-arch.test b/llvm/test/DebugInfo/symbolize-macho-universal-unknown-arch.test
index b6b1ee77b8b..744a0d3e549 100644
--- a/llvm/test/DebugInfo/symbolize-macho-universal-unknown-arch.test
+++ b/llvm/test/DebugInfo/symbolize-macho-universal-unknown-arch.test
@@ -1,5 +1,5 @@
-RUN: not llvm-symbolizer --obj=%p/Inputs/macho-universal 0x1f84 2>&1 | FileCheck --implicit-check-not=main %s
-
-CHECK: LLVMSymbolizer: error reading file: Unknown architecture named:
+RUN: llvm-symbolizer --obj=%p/Inputs/macho-universal 0x1f84 | FileCheck %s
+CHECK-NOT: main
CHECK: ??
+CHECK-NOT: main
diff --git a/llvm/test/DebugInfo/symbolize-missing-file.test b/llvm/test/DebugInfo/symbolize-missing-file.test
index bf148517f3c..2762af4ff5d 100644
--- a/llvm/test/DebugInfo/symbolize-missing-file.test
+++ b/llvm/test/DebugInfo/symbolize-missing-file.test
@@ -1,3 +1,3 @@
-RUN: not llvm-symbolizer --obj=unexisting-file 0x1234 2>&1 | FileCheck %s
+RUN: llvm-symbolizer --obj=unexisting-file 0x1234 2>&1 | FileCheck %s
CHECK: LLVMSymbolizer: error reading file: {{[Nn]}}o such file or directory
diff --git a/llvm/test/tools/llvm-symbolizer/input-base.test b/llvm/test/tools/llvm-symbolizer/input-base.test
index f4b641ea626..66244a7203c 100644
--- a/llvm/test/tools/llvm-symbolizer/input-base.test
+++ b/llvm/test/tools/llvm-symbolizer/input-base.test
@@ -1,34 +1,33 @@
-# RUN: llvm-mc %s -o %t -filetype=obj
-## llvm-symbolizer infers the number base from the form of the address.
-# RUN: llvm-symbolizer -e %t -a 0x1234 | FileCheck %s
-# RUN: llvm-symbolizer -e %t -a 0X1234 | FileCheck %s
-# RUN: llvm-symbolizer -e %t -a 4660 | FileCheck %s
-# RUN: llvm-symbolizer -e %t -a 011064 | FileCheck %s
-# RUN: llvm-symbolizer -e %t -a 0b1001000110100 | FileCheck %s
-# RUN: llvm-symbolizer -e %t -a 0B1001000110100 | FileCheck %s
-# RUN: llvm-symbolizer -e %t -a 0o11064 | FileCheck %s
+# llvm-symbolizer infers the number base from the form of the address.
+RUN: llvm-symbolizer -e /dev/null -a 0x1234 | FileCheck %s
+RUN: llvm-symbolizer -e /dev/null -a 0X1234 | FileCheck %s
+RUN: llvm-symbolizer -e /dev/null -a 4660 | FileCheck %s
+RUN: llvm-symbolizer -e /dev/null -a 011064 | FileCheck %s
+RUN: llvm-symbolizer -e /dev/null -a 0b1001000110100 | FileCheck %s
+RUN: llvm-symbolizer -e /dev/null -a 0B1001000110100 | FileCheck %s
+RUN: llvm-symbolizer -e /dev/null -a 0o11064 | FileCheck %s
-## llvm-symbolizer / StringRef::getAsInteger only accepts the 0o prefix in lowercase.
-# RUN: llvm-symbolizer -e %t -a 0O1234 | FileCheck %s --check-prefix=INVALID-NOT-OCTAL-UPPER
+# llvm-symbolizer / StringRef::getAsInteger only accepts the 0o prefix in lowercase.
+RUN: llvm-symbolizer -e /dev/null -a 0O1234 | FileCheck %s --check-prefix=INVALID-NOT-OCTAL-UPPER
-## llvm-addr2line always requires hexadecimal, but accepts an optional 0x prefix.
-# RUN: llvm-addr2line -e %t -a 0x1234 | FileCheck %s
-# RUN: llvm-addr2line -e %t -a 0X1234 | FileCheck %s
-# RUN: llvm-addr2line -e %t -a 1234 | FileCheck %s
-# RUN: llvm-addr2line -e %t -a 01234 | FileCheck %s
-# RUN: llvm-addr2line -e %t -a 0b1010 | FileCheck %s --check-prefix=HEXADECIMAL-NOT-BINARY
-# RUN: llvm-addr2line -e %t -a 0B1010 | FileCheck %s --check-prefix=HEXADECIMAL-NOT-BINARY
-# RUN: llvm-addr2line -e %t -a 0o1234 | FileCheck %s --check-prefix=INVALID-NOT-OCTAL-LOWER
-# RUN: llvm-addr2line -e %t -a 0O1234 | FileCheck %s --check-prefix=INVALID-NOT-OCTAL-UPPER
+# llvm-addr2line always requires hexadecimal, but accepts an optional 0x prefix.
+RUN: llvm-addr2line -e /dev/null -a 0x1234 | FileCheck %s
+RUN: llvm-addr2line -e /dev/null -a 0X1234 | FileCheck %s
+RUN: llvm-addr2line -e /dev/null -a 1234 | FileCheck %s
+RUN: llvm-addr2line -e /dev/null -a 01234 | FileCheck %s
+RUN: llvm-addr2line -e /dev/null -a 0b1010 | FileCheck %s --check-prefix=HEXADECIMAL-NOT-BINARY
+RUN: llvm-addr2line -e /dev/null -a 0B1010 | FileCheck %s --check-prefix=HEXADECIMAL-NOT-BINARY
+RUN: llvm-addr2line -e /dev/null -a 0o1234 | FileCheck %s --check-prefix=INVALID-NOT-OCTAL-LOWER
+RUN: llvm-addr2line -e /dev/null -a 0O1234 | FileCheck %s --check-prefix=INVALID-NOT-OCTAL-UPPER
-# CHECK: 0x1234
-# CHECK-NEXT: ??
+CHECK: 0x1234
+CHECK-NEXT: ??
-# HEXADECIMAL-NOT-BINARY: 0xb1010
-# HEXADECIMAL-NOT-BINARY: ??
+HEXADECIMAL-NOT-BINARY: 0xb1010
+HEXADECIMAL-NOT-BINARY: ??
-# INVALID-NOT-OCTAL-LOWER: 0o1234
-# INVALID-NOT-OCTAL-LOWER-NOT: ??
+INVALID-NOT-OCTAL-LOWER: 0o1234
+INVALID-NOT-OCTAL-LOWER-NOT: ??
-# INVALID-NOT-OCTAL-UPPER: 0O1234
-# INVALID-NOT-OCTAL-UPPER-NOT: ??
+INVALID-NOT-OCTAL-UPPER: 0O1234
+INVALID-NOT-OCTAL-UPPER-NOT: ??
diff --git a/llvm/test/tools/llvm-symbolizer/invalid-dwarf.s b/llvm/test/tools/llvm-symbolizer/invalid-dwarf.s
deleted file mode 100644
index 027ccef00fa..00000000000
--- a/llvm/test/tools/llvm-symbolizer/invalid-dwarf.s
+++ /dev/null
@@ -1,205 +0,0 @@
-# REQUIRES: x86-registered-target
-# Source:
-# void f1() { }
-# void f2() { }
-#
-# Build as: clang -ffunction-sections -gdwarf-5 -c test.c
-# Hand modify the rnglist to include an invalid RLE encoding (42)
-#
-# RUN: llvm-mc -dwarf-version=5 %s -triple=x86_64-pc-linux -filetype=obj -o %t
-# RUN: not llvm-symbolizer -obj=%t 0x0 2>&1 | FileCheck %s
-#
-# CHECK: error: decoding address ranges: unknown rnglists encoding 0x2a at offset 0x10
-
- .text
- .file "test.c"
- .section .text.f1,"ax",@progbits
- .globl f1 # -- Begin function f1
- .p2align 4, 0x90
- .type f1,@function
-f1: # @f1
-.Lfunc_begin0:
- .file 0 "/usr/local/google/home/blaikie/dev/scratch" "test.c" md5 0x39c2464ceaf7fd68a00d44ca40e99028
- .loc 0 1 0 # test.c:1:0
- .cfi_startproc
-# %bb.0: # %entry
- pushq %rbp
- .cfi_def_cfa_offset 16
- .cfi_offset %rbp, -16
- movq %rsp, %rbp
- .cfi_def_cfa_register %rbp
-.Ltmp0:
- .loc 0 1 13 prologue_end # test.c:1:13
- popq %rbp
- .cfi_def_cfa %rsp, 8
- retq
-.Ltmp1:
-.Lfunc_end0:
- .size f1, .Lfunc_end0-f1
- .cfi_endproc
- # -- End function
- .section .text.f2,"ax",@progbits
- .globl f2 # -- Begin function f2
- .p2align 4, 0x90
- .type f2,@function
-f2: # @f2
-.Lfunc_begin1:
- .loc 0 2 0 # test.c:2:0
- .cfi_startproc
-# %bb.0: # %entry
- pushq %rbp
- .cfi_def_cfa_offset 16
- .cfi_offset %rbp, -16
- movq %rsp, %rbp
- .cfi_def_cfa_register %rbp
-.Ltmp2:
- .loc 0 2 13 prologue_end # test.c:2:13
- popq %rbp
- .cfi_def_cfa %rsp, 8
- retq
-.Ltmp3:
-.Lfunc_end1:
- .size f2, .Lfunc_end1-f2
- .cfi_endproc
- # -- End function
- .section .debug_abbrev,"",@progbits
- .byte 1 # Abbreviation Code
- .byte 17 # DW_TAG_compile_unit
- .byte 1 # DW_CHILDREN_yes
- .byte 37 # DW_AT_producer
- .byte 37 # DW_FORM_strx1
- .byte 19 # DW_AT_language
- .byte 5 # DW_FORM_data2
- .byte 3 # DW_AT_name
- .byte 37 # DW_FORM_strx1
- .byte 114 # DW_AT_str_offsets_base
- .byte 23 # DW_FORM_sec_offset
- .byte 16 # DW_AT_stmt_list
- .byte 23 # DW_FORM_sec_offset
- .byte 27 # DW_AT_comp_dir
- .byte 37 # DW_FORM_strx1
- .byte 17 # DW_AT_low_pc
- .byte 1 # DW_FORM_addr
- .byte 85 # DW_AT_ranges
- .byte 35 # DW_FORM_rnglistx
- .byte 115 # DW_AT_addr_base
- .byte 23 # DW_FORM_sec_offset
- .byte 116 # DW_AT_rnglists_base
- .byte 23 # DW_FORM_sec_offset
- .byte 0 # EOM(1)
- .byte 0 # EOM(2)
- .byte 2 # Abbreviation Code
- .byte 46 # DW_TAG_subprogram
- .byte 0 # DW_CHILDREN_no
- .byte 17 # DW_AT_low_pc
- .byte 27 # DW_FORM_addrx
- .byte 18 # DW_AT_high_pc
- .byte 6 # DW_FORM_data4
- .byte 64 # DW_AT_frame_base
- .byte 24 # DW_FORM_exprloc
- .byte 3 # DW_AT_name
- .byte 37 # DW_FORM_strx1
- .byte 58 # DW_AT_decl_file
- .byte 11 # DW_FORM_data1
- .byte 59 # DW_AT_decl_line
- .byte 11 # DW_FORM_data1
- .byte 63 # DW_AT_external
- .byte 25 # DW_FORM_flag_present
- .byte 0 # EOM(1)
- .byte 0 # EOM(2)
- .byte 0 # EOM(3)
- .section .debug_info,"",@progbits
-.Lcu_begin0:
- .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
-.Ldebug_info_start0:
- .short 5 # DWARF version number
- .byte 1 # DWARF Unit Type
- .byte 8 # Address Size (in bytes)
- .long .debug_abbrev # Offset Into Abbrev. Section
- .byte 1 # Abbrev [1] 0xc:0x36 DW_TAG_compile_unit
- .byte 0 # DW_AT_producer
- .short 12 # DW_AT_language
- .byte 1 # DW_AT_name
- .long .Lstr_offsets_base0 # DW_AT_str_offsets_base
- .long .Lline_table_start0 # DW_AT_stmt_list
- .byte 2 # DW_AT_comp_dir
- .quad 0 # DW_AT_low_pc
- .byte 0 # DW_AT_ranges
- .long .Laddr_table_base0 # DW_AT_addr_base
- .long .Lrnglists_table_base0 # DW_AT_rnglists_base
- .byte 2 # Abbrev [2] 0x2b:0xb DW_TAG_subprogram
- .byte 0 # DW_AT_low_pc
- .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc
- .byte 1 # DW_AT_frame_base
- .byte 86
- .byte 3 # DW_AT_name
- .byte 0 # DW_AT_decl_file
- .byte 1 # DW_AT_decl_line
- # DW_AT_external
- .byte 2 # Abbrev [2] 0x36:0xb DW_TAG_subprogram
- .byte 1 # DW_AT_low_pc
- .long .Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc
- .byte 1 # DW_AT_frame_base
- .byte 86
- .byte 4 # DW_AT_name
- .byte 0 # DW_AT_decl_file
- .byte 2 # DW_AT_decl_line
- # DW_AT_external
- .byte 0 # End Of Children Mark
-.Ldebug_info_end0:
- .section .debug_rnglists,"",@progbits
- .long .Ldebug_list_header_end0-.Ldebug_list_header_start0 # Length
-.Ldebug_list_header_start0:
- .short 5 # Version
- .byte 8 # Address size
- .byte 0 # Segment selector size
- .long 1 # Offset entry count
-.Lrnglists_table_base0:
- .long .Ldebug_ranges0-.Lrnglists_table_base0
-.Ldebug_ranges0:
- .byte 42 # DW_RLE_startx_length
- .byte 0 # start index
- .uleb128 .Lfunc_end0-.Lfunc_begin0 # length
- .byte 3 # DW_RLE_startx_length
- .byte 1 # start index
- .uleb128 .Lfunc_end1-.Lfunc_begin1 # length
- .byte 0 # DW_RLE_end_of_list
-.Ldebug_list_header_end0:
- .section .debug_str_offsets,"",@progbits
- .long 24 # Length of String Offsets Set
- .short 5
- .short 0
-.Lstr_offsets_base0:
- .section .debug_str,"MS",@progbits,1
-.Linfo_string0:
- .asciz "clang version 12.0.0 (git@github.com:llvm/llvm-project.git 9a33f027ac7d73e14ae287e78ab554142d1cbc8f)" # string offset=0
-.Linfo_string1:
- .asciz "test.c" # string offset=101
-.Linfo_string2:
- .asciz "/usr/local/google/home/blaikie/dev/scratch" # string offset=108
-.Linfo_string3:
- .asciz "f1" # string offset=151
-.Linfo_string4:
- .asciz "f2" # string offset=154
- .section .debug_str_offsets,"",@progbits
- .long .Linfo_string0
- .long .Linfo_string1
- .long .Linfo_string2
- .long .Linfo_string3
- .long .Linfo_string4
- .section .debug_addr,"",@progbits
- .long .Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution
-.Ldebug_addr_start0:
- .short 5 # DWARF version number
- .byte 8 # Address size
- .byte 0 # Segment selector size
-.Laddr_table_base0:
- .quad .Lfunc_begin0
- .quad .Lfunc_begin1
-.Ldebug_addr_end0:
- .ident "clang version 12.0.0 (git@github.com:llvm/llvm-project.git 9a33f027ac7d73e14ae287e78ab554142d1cbc8f)"
- .section ".note.GNU-stack","",@progbits
- .addrsig
- .section .debug_line,"",@progbits
-.Lline_table_start0:
-
diff --git a/llvm/test/tools/llvm-symbolizer/sym.test b/llvm/test/tools/llvm-symbolizer/sym.test
index 612485b8b1f..73097b2c4b9 100644
--- a/llvm/test/tools/llvm-symbolizer/sym.test
+++ b/llvm/test/tools/llvm-symbolizer/sym.test
@@ -31,8 +31,7 @@ RUN: llvm-symbolizer -i -print-address -p -obj=%p/Inputs/addr.exe < %p/Inputs/ad
RUN: llvm-symbolizer --inlining=true --print-address -p --obj=%p/Inputs/addr.exe < %p/Inputs/addr.inp | FileCheck -check-prefix="PRETTY" %s
RUN: echo "0x1" > %t.input
-## FIXME: Looks like this was meant to have an input file to test, but it isn't present - so this test probably isn't testing what it's intended to test
-RUN: not llvm-symbolizer -obj=%p/Inputs/zero < %t.input | FileCheck -check-prefix="ZERO" %s
+RUN: llvm-symbolizer -obj=%p/Inputs/zero < %t.input | FileCheck -check-prefix="ZERO" %s
RUN: llvm-addr2line -obj=%p/Inputs/addr.exe < %p/Inputs/addr.inp | FileCheck -check-prefix=A2L %s
RUN: llvm-addr2line -a -obj=%p/Inputs/addr.exe < %p/Inputs/addr.inp | FileCheck -check-prefixes=A2L,A2L_A %s
diff --git a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
index e4061408a82..f57922b2c50 100644
--- a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
+++ b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
@@ -73,15 +73,12 @@ static cl::list<std::string> ClInputAddresses(cl::Positional,
cl::desc("<input addresses>..."),
cl::ZeroOrMore);
-static bool HasError = false;
-
template<typename T>
static bool error(Expected<T> &ResOrErr) {
if (ResOrErr)
return false;
logAllUnhandledErrors(ResOrErr.takeError(), errs(),
"LLVMSymbolizer: error reading file: ");
- HasError = true;
return true;
}
@@ -293,10 +290,6 @@ int main(int argc, char **argv) {
Args.hasFlag(OPT_untag_addresses, OPT_no_untag_addresses, !IsAddr2Line);
Opts.UseNativePDBReader = Args.hasArg(OPT_use_native_pdb_reader);
Opts.UseSymbolTable = true;
- Opts.RecoverableErrorHandler = [&](Error E) {
- HasError = true;
- WithColor::defaultErrorHandler(std::move(E));
- };
for (const opt::Arg *A : Args.filtered(OPT_dsym_hint_EQ)) {
StringRef Hint(A->getValue());
@@ -343,5 +336,5 @@ int main(int argc, char **argv) {
Symbolizer, Printer);
}
- return HasError;
+ return 0;
}