[llvm] 338dd13 - llvm-symbolizer: Ensure non-zero exit when an error is printed

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Wed Oct 14 22:48:49 PDT 2020


Author: David Blaikie
Date: 2020-10-14T22:48:39-07:00
New Revision: 338dd138ea4a70b52ab48e0c8aa38ec152b3569a

URL: https://github.com/llvm/llvm-project/commit/338dd138ea4a70b52ab48e0c8aa38ec152b3569a
DIFF: https://github.com/llvm/llvm-project/commit/338dd138ea4a70b52ab48e0c8aa38ec152b3569a.diff

LOG: llvm-symbolizer: Ensure non-zero exit when an error is printed

(this doesn't cover all cases - libDebugInfoDWARF has a default error
handler that prints errors without any exit code handling - I'll be
following up with a patch for that after this)

Added: 
    

Modified: 
    llvm/test/DebugInfo/symbolize-macho-universal-unknown-arch.test
    llvm/test/DebugInfo/symbolize-missing-file.test
    llvm/test/tools/llvm-symbolizer/input-base.test
    llvm/test/tools/llvm-symbolizer/sym.test
    llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/test/DebugInfo/symbolize-macho-universal-unknown-arch.test b/llvm/test/DebugInfo/symbolize-macho-universal-unknown-arch.test
index 744a0d3e5492..b6b1ee77b8b7 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: llvm-symbolizer --obj=%p/Inputs/macho-universal 0x1f84 | FileCheck %s
+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:
 
-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 2762af4ff5da..bf148517f3c4 100644
--- a/llvm/test/DebugInfo/symbolize-missing-file.test
+++ b/llvm/test/DebugInfo/symbolize-missing-file.test
@@ -1,3 +1,3 @@
-RUN: llvm-symbolizer --obj=unexisting-file 0x1234 2>&1 | FileCheck %s
+RUN: not 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 66244a7203c0..f4b641ea626f 100644
--- a/llvm/test/tools/llvm-symbolizer/input-base.test
+++ b/llvm/test/tools/llvm-symbolizer/input-base.test
@@ -1,33 +1,34 @@
-# 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
+# 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 / 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-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-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
+## 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
 
-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/sym.test b/llvm/test/tools/llvm-symbolizer/sym.test
index 73097b2c4b9b..612485b8b1fe 100644
--- a/llvm/test/tools/llvm-symbolizer/sym.test
+++ b/llvm/test/tools/llvm-symbolizer/sym.test
@@ -31,7 +31,8 @@ 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
-RUN: llvm-symbolizer -obj=%p/Inputs/zero < %t.input | FileCheck -check-prefix="ZERO" %s
+## 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-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 f57922b2c506..509449a5d127 100644
--- a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
+++ b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
@@ -73,12 +73,15 @@ 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;
 }
 
@@ -336,5 +339,5 @@ int main(int argc, char **argv) {
                      Symbolizer, Printer);
   }
 
-  return 0;
+  return HasError;
 }


        


More information about the llvm-commits mailing list