[lld] dfb77f2 - [LLD][ELF] Add FORCE_LLD_DIAGNOSTICS_CRASH to force LLD to crash

Ben Dunbobbin via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 5 01:43:17 PDT 2022


Author: Ben Dunbobbin
Date: 2022-07-05T09:43:09+01:00
New Revision: dfb77f2e99a18d5fa61763961f977993f1943f59

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

LOG: [LLD][ELF] Add FORCE_LLD_DIAGNOSTICS_CRASH to force LLD to crash

Add FORCE_LLD_DIAGNOSTICS_CRASH inspired by the existing
FORCE_CLANG_DIAGNOSTICS_CRASH.

This is particularly useful for people customizing LLD as they may
want to modify the crash reporting behavior.

Differential Revision: https://reviews.llvm.org/D128195

Added: 
    lld/test/ELF/crash-report.test

Modified: 
    lld/docs/ReleaseNotes.rst
    lld/test/lit.cfg.py
    lld/test/lit.site.cfg.py.in
    lld/tools/lld/lld.cpp

Removed: 
    


################################################################################
diff  --git a/lld/docs/ReleaseNotes.rst b/lld/docs/ReleaseNotes.rst
index 527ab4fead382..29c069242991e 100644
--- a/lld/docs/ReleaseNotes.rst
+++ b/lld/docs/ReleaseNotes.rst
@@ -29,6 +29,8 @@ ELF Improvements
 * ``-z pack-relative-relocs`` is now available to support ``DT_RELR`` for glibc 2.36+.
   (`D120701 <https://reviews.llvm.org/D120701>`_)
 * ``--no-fortran-common`` (pre 12.0.0 behavior) is now the default.
+* ``FORCE_LLD_DIAGNOSTICS_CRASH`` environment variable is now available to force LLD to crash.
+  (`D128195 <https://reviews.llvm.org/D128195>`_)
 
 Breaking changes
 ----------------

diff  --git a/lld/test/ELF/crash-report.test b/lld/test/ELF/crash-report.test
new file mode 100644
index 0000000000000..f61d5b2ce2799
--- /dev/null
+++ b/lld/test/ELF/crash-report.test
@@ -0,0 +1,10 @@
+# REQUIRES: backtrace
+
+## Test the diagnostics produced when LLD crashes.
+
+# RUN: env FORCE_LLD_DIAGNOSTICS_CRASH=1 not --crash ld.lld -o /dev/null 2>&1 | FileCheck %s
+
+## Check the crash text has the correct structure.
+# CHECK: crashing due to environment variable FORCE_LLD_DIAGNOSTICS_CRASH
+# CHECK: PLEASE submit a bug report to {{.*}} and include the crash backtrace
+# CHECK: Stack dump:

diff  --git a/lld/test/lit.cfg.py b/lld/test/lit.cfg.py
index 0d5487eabd4d1..96a1d652573fe 100644
--- a/lld/test/lit.cfg.py
+++ b/lld/test/lit.cfg.py
@@ -104,6 +104,9 @@
         config.have_libxml2):
     config.available_features.add('manifest_tool')
 
+if config.enable_backtrace:
+    config.available_features.add('backtrace')
+
 if config.have_libxar:
     config.available_features.add('xar')
 

diff  --git a/lld/test/lit.site.cfg.py.in b/lld/test/lit.site.cfg.py.in
index bec13d6d3d3b2..0523762cf6c95 100644
--- a/lld/test/lit.site.cfg.py.in
+++ b/lld/test/lit.site.cfg.py.in
@@ -10,6 +10,7 @@ config.llvm_libs_dir = lit_config.substitute("@LLVM_LIBS_DIR@")
 config.llvm_shlib_dir = "@SHLIBDIR@"
 config.llvm_shlib_ext = "@SHLIBEXT@"
 config.lit_tools_dir = "@LLVM_LIT_TOOLS_DIR@"
+config.enable_backtrace = @ENABLE_BACKTRACES@
 config.errc_messages = "@LLVM_LIT_ERRC_MESSAGES@"
 config.lld_obj_root = "@LLD_BINARY_DIR@"
 config.lld_libs_dir = lit_config.substitute("@CURRENT_LIBS_DIR@")

diff  --git a/lld/tools/lld/lld.cpp b/lld/tools/lld/lld.cpp
index d6c39fa7cce47..3ac59877affbd 100644
--- a/lld/tools/lld/lld.cpp
+++ b/lld/tools/lld/lld.cpp
@@ -214,6 +214,12 @@ int main(int argc, const char **argv) {
   InitLLVM x(argc, argv);
   sys::Process::UseANSIEscapeCodes(true);
 
+  if (::getenv("FORCE_LLD_DIAGNOSTICS_CRASH")) {
+    llvm::errs()
+        << "crashing due to environment variable FORCE_LLD_DIAGNOSTICS_CRASH\n";
+    LLVM_BUILTIN_TRAP;
+  }
+
   // Not running in lit tests, just take the shortest codepath with global
   // exception handling and no memory cleanup on exit.
   if (!inTestVerbosity())


        


More information about the llvm-commits mailing list