[Lldb-commits] [lldb] 61d5b0e - [lldb/Driver] Exit with a non-zero exit code in case of error in batch mode.
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Tue May 5 11:01:51 PDT 2020
Author: Jonas Devlieghere
Date: 2020-05-05T11:01:44-07:00
New Revision: 61d5b0e66394d61947d61861685b4223214f023e
URL: https://github.com/llvm/llvm-project/commit/61d5b0e66394d61947d61861685b4223214f023e
DIFF: https://github.com/llvm/llvm-project/commit/61d5b0e66394d61947d61861685b4223214f023e.diff
LOG: [lldb/Driver] Exit with a non-zero exit code in case of error in batch mode.
We have the option to stop running commands in batch mode when an error
occurs. When that happens we should exit the driver with a non-zero exit
code.
Differential revision: https://reviews.llvm.org/D78825
Added:
Modified:
lldb/source/Interpreter/CommandInterpreter.cpp
lldb/test/Shell/Commands/command-source.test
lldb/test/Shell/Driver/TestProcessAttach.test
lldb/test/Shell/Host/TestCustomShell.test
lldb/test/Shell/Quit/TestQuitExitCodeNonInt.test
lldb/test/Shell/Quit/TestQuitExitCodeTooManyArgs.test
lldb/test/Shell/Reproducer/TestDiscard.test
lldb/test/Shell/Reproducer/TestDump.test
lldb/test/Shell/Settings/TestSettingsSet.test
lldb/test/Shell/Settings/TestStopCommandSourceOnError.test
lldb/test/Shell/SymbolFile/DWARF/debug-types-missing-signature.test
lldb/test/Shell/Unwind/thread-step-out-ret-addr-check.test
lldb/tools/driver/Driver.cpp
Removed:
################################################################################
diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp b/lldb/source/Interpreter/CommandInterpreter.cpp
index 3f727e83f12b..2cc3d47406b7 100644
--- a/lldb/source/Interpreter/CommandInterpreter.cpp
+++ b/lldb/source/Interpreter/CommandInterpreter.cpp
@@ -2816,8 +2816,10 @@ void CommandInterpreter::IOHandlerInputComplete(IOHandler &io_handler,
case eReturnStatusFailed:
m_result.IncrementNumberOfErrors();
- if (io_handler.GetFlags().Test(eHandleCommandFlagStopOnError))
+ if (io_handler.GetFlags().Test(eHandleCommandFlagStopOnError)) {
+ m_result.SetResult(lldb::eCommandInterpreterResultCommandError);
io_handler.SetIsDone(true);
+ }
break;
case eReturnStatusQuit:
diff --git a/lldb/test/Shell/Commands/command-source.test b/lldb/test/Shell/Commands/command-source.test
index d8218850c32c..fa389f2a1288 100644
--- a/lldb/test/Shell/Commands/command-source.test
+++ b/lldb/test/Shell/Commands/command-source.test
@@ -1,8 +1,8 @@
# Check that stop command source on error.
-# RUN: %lldb -x -b -o "command source -e 1 %s" 2>&1 | FileCheck %s --check-prefix STOP
+# RUN: not %lldb -x -b -o "command source -e 1 %s" 2>&1 | FileCheck %s --check-prefix STOP
# RUN: %lldb -x -b -o "command source -e 0 %s" 2>&1 | FileCheck %s --check-prefix CONTINUE
-# RUN: %lldb -x -b -o 'settings set interpreter.stop-command-source-on-error true' -o "command source %s" 2>&1 | FileCheck %s --check-prefix STOP
+# RUN: not %lldb -x -b -o 'settings set interpreter.stop-command-source-on-error true' -o "command source %s" 2>&1 | FileCheck %s --check-prefix STOP
# RUN: %lldb -x -b -o 'settings set interpreter.stop-command-source-on-error false' -o "command source %s" 2>&1 | FileCheck %s --check-prefix CONTINUE
bogus
diff --git a/lldb/test/Shell/Driver/TestProcessAttach.test b/lldb/test/Shell/Driver/TestProcessAttach.test
index 4e24ebb161b6..ab75814e21ce 100644
--- a/lldb/test/Shell/Driver/TestProcessAttach.test
+++ b/lldb/test/Shell/Driver/TestProcessAttach.test
@@ -1,2 +1,2 @@
-# RUN: %lldb -x -b -S %S/Inputs/process_attach_pid.in 2>&1 | FileCheck %s
+# RUN: not %lldb -x -b -S %S/Inputs/process_attach_pid.in 2>&1 | FileCheck %s
# CHECK: last option requires an argument
diff --git a/lldb/test/Shell/Host/TestCustomShell.test b/lldb/test/Shell/Host/TestCustomShell.test
index fd97b4c2b06e..75114c554493 100644
--- a/lldb/test/Shell/Host/TestCustomShell.test
+++ b/lldb/test/Shell/Host/TestCustomShell.test
@@ -8,7 +8,7 @@
# XFAIL: system-openbsd
# RUN: %clang_host %S/Inputs/simple.c -g -o %t.out
-# RUN: SHELL=bogus %lldb %t.out -b -o 'run' 2>&1 | FileCheck %s --check-prefix ERROR
+# RUN: SHELL=bogus not %lldb %t.out -b -o 'run' 2>&1 | FileCheck %s --check-prefix ERROR
# RUN: env -i %lldb %t.out -b -o 'run' 2>&1 | FileCheck %s
# ERROR: error: shell expansion failed
diff --git a/lldb/test/Shell/Quit/TestQuitExitCodeNonInt.test b/lldb/test/Shell/Quit/TestQuitExitCodeNonInt.test
index 87c0bd41bb05..1747ddd669b6 100644
--- a/lldb/test/Shell/Quit/TestQuitExitCodeNonInt.test
+++ b/lldb/test/Shell/Quit/TestQuitExitCodeNonInt.test
@@ -1,4 +1,4 @@
# UNSUPPORTED: system-windows
-# RUN: %lldb -b -s %s 2>&1 | FileCheck %s
+# RUN: not %lldb -b -s %s 2>&1 | FileCheck %s
q str
// CHECK: Couldn't parse 'str'
diff --git a/lldb/test/Shell/Quit/TestQuitExitCodeTooManyArgs.test b/lldb/test/Shell/Quit/TestQuitExitCodeTooManyArgs.test
index a67669451e99..315adf02af4d 100644
--- a/lldb/test/Shell/Quit/TestQuitExitCodeTooManyArgs.test
+++ b/lldb/test/Shell/Quit/TestQuitExitCodeTooManyArgs.test
@@ -1,4 +1,4 @@
# UNSUPPORTED: system-windows
-# RUN: %lldb -b -s %s 2>&1 | FileCheck %s
+# RUN: not %lldb -b -s %s 2>&1 | FileCheck %s
q 1 2
// CHECK: Too many arguments for 'quit'
diff --git a/lldb/test/Shell/Reproducer/TestDiscard.test b/lldb/test/Shell/Reproducer/TestDiscard.test
index 829aabbe2b03..aee56f77c06f 100644
--- a/lldb/test/Shell/Reproducer/TestDiscard.test
+++ b/lldb/test/Shell/Reproducer/TestDiscard.test
@@ -6,7 +6,7 @@
# RUN: %clang_host %S/Inputs/simple.c -g -o %t/reproducer.out
# Capture but don't generate the reproducer.
-# RUN: %lldb -x -b -s %S/Inputs/Discard.in --capture --capture-path %t.repro %t/reproducer.out
+# RUN: not %lldb -x -b -s %S/Inputs/Discard.in --capture --capture-path %t.repro %t/reproducer.out
# Make sure the directory doesn't exist.
# RUN: mkdir %t.repro
diff --git a/lldb/test/Shell/Reproducer/TestDump.test b/lldb/test/Shell/Reproducer/TestDump.test
index 8300a97004bb..cf2c89c938b7 100644
--- a/lldb/test/Shell/Reproducer/TestDump.test
+++ b/lldb/test/Shell/Reproducer/TestDump.test
@@ -25,9 +25,9 @@
# RUN: %lldb --replay %t.repro | FileCheck %s --check-prefix FILES
# RUN: rm %t.repro/gdb-remote.yaml
-# RUN: %lldb -b -o 'reproducer dump -p gdb -f %t.repro' 2>&1 | FileCheck %s --check-prefix GDB-ERROR
+# RUN: not %lldb -b -o 'reproducer dump -p gdb -f %t.repro' 2>&1 | FileCheck %s --check-prefix GDB-ERROR
# GDB-ERROR: error: Unable to create GDB loader.
# RUN: rm %t.repro/command-interpreter.yaml
-# RUN: %lldb -b -o 'reproducer dump -p commands -f %t.repro' 2>&1 | FileCheck %s --check-prefix COMMANDS-ERROR
+# RUN: not %lldb -b -o 'reproducer dump -p commands -f %t.repro' 2>&1 | FileCheck %s --check-prefix COMMANDS-ERROR
# COMMANDS-ERROR: error: Unable to create command loader.
diff --git a/lldb/test/Shell/Settings/TestSettingsSet.test b/lldb/test/Shell/Settings/TestSettingsSet.test
index 0def3faaadbb..3006a694a16b 100644
--- a/lldb/test/Shell/Settings/TestSettingsSet.test
+++ b/lldb/test/Shell/Settings/TestSettingsSet.test
@@ -1,7 +1,7 @@
# This tests setting setting values.
# Check that setting an empty value with -f(orce) clears the value.
-# RUN: %lldb -b -s %s 2>&1 | FileCheck %s
+# RUN: not %lldb -b -s %s 2>&1 | FileCheck %s
settings set tab-size 16
settings show tab-size
diff --git a/lldb/test/Shell/Settings/TestStopCommandSourceOnError.test b/lldb/test/Shell/Settings/TestStopCommandSourceOnError.test
index a53dc2cd6868..d734a0940a2d 100644
--- a/lldb/test/Shell/Settings/TestStopCommandSourceOnError.test
+++ b/lldb/test/Shell/Settings/TestStopCommandSourceOnError.test
@@ -12,13 +12,13 @@
# RUN: %lldb -b -o 'settings set interpreter.stop-command-source-on-error false' -s %S/Inputs/StopCommandSource.in | FileCheck %s --check-prefix CONTINUE
# FIXME: Should continue
-# RUN: %lldb -b -s %S/Inputs/DontStopCommandSource.in -o 'bogus' -o 'print 111100000 + 11111' | FileCheck %s --check-prefix STOP
+# RUN: not %lldb -b -s %S/Inputs/DontStopCommandSource.in -o 'bogus' -o 'print 111100000 + 11111' | FileCheck %s --check-prefix STOP
# FIXME: Should continue
-# RUN: %lldb -b -o 'settings set interpreter.stop-command-source-on-error false' -o 'bogus' -o 'print 123400000 + 56789' | FileCheck %s --check-prefix STOP
+# RUN: not %lldb -b -o 'settings set interpreter.stop-command-source-on-error false' -o 'bogus' -o 'print 123400000 + 56789' | FileCheck %s --check-prefix STOP
# FIXME: Should continue
-# RUN: %lldb -b -s %S/Inputs/DontStopCommandSource.in | FileCheck %s --check-prefix STOP
+# RUN: not %lldb -b -s %S/Inputs/DontStopCommandSource.in | FileCheck %s --check-prefix STOP
# FIXME: Should continue
-# RUN: %lldb -b -o 'settings set interpreter.stop-command-source-on-error true' -s %S/Inputs/DontStopCommandSource.in | FileCheck %s --check-prefix STOP
+# RUN: not %lldb -b -o 'settings set interpreter.stop-command-source-on-error true' -s %S/Inputs/DontStopCommandSource.in | FileCheck %s --check-prefix STOP
diff --git a/lldb/test/Shell/SymbolFile/DWARF/debug-types-missing-signature.test b/lldb/test/Shell/SymbolFile/DWARF/debug-types-missing-signature.test
index f9c02061fc86..8f2ef7135afc 100644
--- a/lldb/test/Shell/SymbolFile/DWARF/debug-types-missing-signature.test
+++ b/lldb/test/Shell/SymbolFile/DWARF/debug-types-missing-signature.test
@@ -14,10 +14,10 @@ LOOKUPE: no type was found matching 'E'
RUN: %lldb %t -b -o "type lookup EC" | FileCheck --check-prefix=LOOKUPEC %s
LOOKUPEC: no type was found matching 'EC'
-RUN: %lldb %t -b -o "print (E) 1" 2>&1 | FileCheck --check-prefix=PRINTE %s
+RUN: not %lldb %t -b -o "print (E) 1" 2>&1 | FileCheck --check-prefix=PRINTE %s
PRINTE: use of undeclared identifier 'E'
-RUN: %lldb %t -b -o "print (EC) 1" 2>&1 | FileCheck --check-prefix=PRINTEC %s
+RUN: not %lldb %t -b -o "print (EC) 1" 2>&1 | FileCheck --check-prefix=PRINTEC %s
PRINTEC: use of undeclared identifier 'EC'
RUN: %lldb %t -b -o "target variable a e ec" | FileCheck --check-prefix=VARS %s
diff --git a/lldb/test/Shell/Unwind/thread-step-out-ret-addr-check.test b/lldb/test/Shell/Unwind/thread-step-out-ret-addr-check.test
index e748b4e5c73c..682b0e5332b1 100644
--- a/lldb/test/Shell/Unwind/thread-step-out-ret-addr-check.test
+++ b/lldb/test/Shell/Unwind/thread-step-out-ret-addr-check.test
@@ -5,7 +5,7 @@
# UNSUPPORTED: system-windows
# RUN: %clang_host %p/Inputs/call-asm.c -x assembler-with-cpp %p/Inputs/thread-step-out-ret-addr-check.s -o %t
-# RUN: %lldb %t -s %s -b 2>&1 | FileCheck %s
+# RUN: not %lldb %t -s %s -b 2>&1 | FileCheck %s
breakpoint set -n nonstandard_stub
# CHECK: Breakpoint 1: where = {{.*}}`nonstandard_stub
diff --git a/lldb/tools/driver/Driver.cpp b/lldb/tools/driver/Driver.cpp
index ff7ed2ca0544..b38423b28559 100644
--- a/lldb/tools/driver/Driver.cpp
+++ b/lldb/tools/driver/Driver.cpp
@@ -619,6 +619,12 @@ int Driver::MainLoop() {
results.GetResult() != lldb::eCommandInterpreterResultInferiorCrash)
go_interactive = false;
+ // When running in batch mode and stopped because of an error, exit with a
+ // non-zero exit status.
+ if (m_option_data.m_batch &&
+ results.GetResult() == lldb::eCommandInterpreterResultCommandError)
+ exit(1);
+
if (m_option_data.m_batch &&
results.GetResult() == lldb::eCommandInterpreterResultInferiorCrash &&
!m_option_data.m_after_crash_commands.empty()) {
@@ -636,6 +642,13 @@ int Driver::MainLoop() {
if (local_results.GetResult() ==
lldb::eCommandInterpreterResultQuitRequested)
go_interactive = false;
+
+ // When running in batch mode and an error occurred while sourcing
+ // the crash commands, exit with a non-zero exit status.
+ if (m_option_data.m_batch &&
+ local_results.GetResult() ==
+ lldb::eCommandInterpreterResultCommandError)
+ exit(1);
}
}
m_debugger.SetAsync(old_async);
More information about the lldb-commits
mailing list