aboutsummaryrefslogtreecommitdiff
path: root/cross-project-tests
diff options
context:
space:
mode:
authorOCHyams <orlando.hyams@sony.com>2022-02-09 10:47:07 +0000
committerOCHyams <orlando.hyams@sony.com>2022-02-09 10:53:35 +0000
commit5257efdc5b30212b62a9d68857dc8e66d0e1a863 (patch)
tree3ab56474338e8fc82fa64db3a6060c8908e639a8 /cross-project-tests
parente3ba831937189ec61e28ced0b0bfc1e41a3510f8 (diff)
downloadllvm-5257efdc5b30212b62a9d68857dc8e66d0e1a863.zip
llvm-5257efdc5b30212b62a9d68857dc8e66d0e1a863.tar.gz
llvm-5257efdc5b30212b62a9d68857dc8e66d0e1a863.tar.bz2
[cross-project-tests] XFAIL llgdb-tests when gdb can't read clang's DWARF
Tests in the `cross-project-tests/debuginfo-tests/llgdb-tests` directory run gdb on non-darwin platforms. gdb versions less than 10.1 cannot parse the DWARF v5 emitted by clang, and DWARF v5 is now the default, so these tests fail on Linux with gdb versions less than 10.1. This patch lets us XFAIL the tests under these conditions. Add `gdb-clang-incompatibility` to the `available_features` in `cross-project-tests/lit.cfg.py` when clang's default DWARF version is 5 or greater and the gdb (if found) version is less than 10.1. Discourse discussion: https://llvm.discourse.group/t/gdb-10-1-cant-read-clangs-dwarf-v5/6035 Reviewed By: jmorse Differential Revision: https://reviews.llvm.org/D118468
Diffstat (limited to 'cross-project-tests')
-rw-r--r--cross-project-tests/debuginfo-tests/llgdb-tests/asan-blocks.c8
-rw-r--r--cross-project-tests/debuginfo-tests/llgdb-tests/asan-deque.cpp10
-rw-r--r--cross-project-tests/debuginfo-tests/llgdb-tests/asan.c2
-rw-r--r--cross-project-tests/debuginfo-tests/llgdb-tests/nested-struct.cpp1
-rw-r--r--cross-project-tests/debuginfo-tests/llgdb-tests/nrvo-string.cpp2
-rw-r--r--cross-project-tests/debuginfo-tests/llgdb-tests/safestack.c2
-rw-r--r--cross-project-tests/debuginfo-tests/llgdb-tests/sret.cpp3
-rw-r--r--cross-project-tests/debuginfo-tests/llgdb-tests/static-member-2.cpp2
-rw-r--r--cross-project-tests/debuginfo-tests/llgdb-tests/static-member.cpp2
-rw-r--r--cross-project-tests/lit.cfg.py49
10 files changed, 68 insertions, 13 deletions
diff --git a/cross-project-tests/debuginfo-tests/llgdb-tests/asan-blocks.c b/cross-project-tests/debuginfo-tests/llgdb-tests/asan-blocks.c
index 33f44cd6..e7536c7 100644
--- a/cross-project-tests/debuginfo-tests/llgdb-tests/asan-blocks.c
+++ b/cross-project-tests/debuginfo-tests/llgdb-tests/asan-blocks.c
@@ -4,13 +4,15 @@
// REQUIRES: !asan, system-darwin
// Zorg configures the ASAN stage2 bots to not build the asan
// compiler-rt. Only run this test on non-asanified configurations.
+// XFAIL: !system-darwin && gdb-clang-incompatibility
+
void b();
struct S {
int a[8];
};
int f(struct S s, unsigned i) {
- // DEBUGGER: break 17
+ // DEBUGGER: break 19
// DEBUGGER: r
// DEBUGGER: p s
// CHECK: a = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7)
@@ -20,7 +22,7 @@ int f(struct S s, unsigned i) {
int main(int argc, const char **argv) {
struct S s = {{0, 1, 2, 3, 4, 5, 6, 7}};
if (f(s, 4) == 4) {
- // DEBUGGER: break 27
+ // DEBUGGER: break 29
// DEBUGGER: c
// DEBUGGER: p s
// CHECK: a = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7)
@@ -32,7 +34,7 @@ int main(int argc, const char **argv) {
void c() {}
void b() {
- // DEBUGGER: break 40
+ // DEBUGGER: break 42
// DEBUGGER: c
// DEBUGGER: p x
// CHECK: 42
diff --git a/cross-project-tests/debuginfo-tests/llgdb-tests/asan-deque.cpp b/cross-project-tests/debuginfo-tests/llgdb-tests/asan-deque.cpp
index f3f55aa..00fdf4c 100644
--- a/cross-project-tests/debuginfo-tests/llgdb-tests/asan-deque.cpp
+++ b/cross-project-tests/debuginfo-tests/llgdb-tests/asan-deque.cpp
@@ -4,6 +4,8 @@
// Zorg configures the ASAN stage2 bots to not build the asan
// compiler-rt. Only run this test on non-asanified configurations.
// UNSUPPORTED: apple-lldb-pre-1000
+// XFAIL: !system-darwin && gdb-clang-incompatibility
+
#include <deque>
struct A {
@@ -23,24 +25,24 @@ int main() {
log.push_back(1234);
log.push_back(56789);
escape(log);
- // DEBUGGER: break 25
+ // DEBUGGER: break 27
while (!log.empty()) {
auto record = log.front();
log.pop_front();
escape(log);
- // DEBUGGER: break 30
+ // DEBUGGER: break 32
}
}
// DEBUGGER: r
-// (at line 25)
+// (at line 27)
// DEBUGGER: p log
// CHECK: 1234
// CHECK: 56789
// DEBUGGER: c
-// (at line 30)
+// (at line 32)
// DEBUGGER: p log
// CHECK: 56789
diff --git a/cross-project-tests/debuginfo-tests/llgdb-tests/asan.c b/cross-project-tests/debuginfo-tests/llgdb-tests/asan.c
index 96dffb3..3e9d601 100644
--- a/cross-project-tests/debuginfo-tests/llgdb-tests/asan.c
+++ b/cross-project-tests/debuginfo-tests/llgdb-tests/asan.c
@@ -3,7 +3,7 @@
// REQUIRES: !asan
// Zorg configures the ASAN stage2 bots to not build the asan
// compiler-rt. Only run this test on non-asanified configurations.
-//
+// XFAIL: !system-darwin && gdb-clang-incompatibility
struct S {
int a[8];
diff --git a/cross-project-tests/debuginfo-tests/llgdb-tests/nested-struct.cpp b/cross-project-tests/debuginfo-tests/llgdb-tests/nested-struct.cpp
index 7533e6a..08668d6 100644
--- a/cross-project-tests/debuginfo-tests/llgdb-tests/nested-struct.cpp
+++ b/cross-project-tests/debuginfo-tests/llgdb-tests/nested-struct.cpp
@@ -1,5 +1,6 @@
// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
// RUN: %test_debuginfo %s %t.o
+// XFAIL: !system-darwin && gdb-clang-incompatibility
// Radar 9440721
// If debug info for my_number() is emitted outside function foo's scope
// then a debugger may not be able to handle it. At least one version of
diff --git a/cross-project-tests/debuginfo-tests/llgdb-tests/nrvo-string.cpp b/cross-project-tests/debuginfo-tests/llgdb-tests/nrvo-string.cpp
index 9b805c9..988c4ae 100644
--- a/cross-project-tests/debuginfo-tests/llgdb-tests/nrvo-string.cpp
+++ b/cross-project-tests/debuginfo-tests/llgdb-tests/nrvo-string.cpp
@@ -5,7 +5,7 @@
// RUN: %test_debuginfo %s %t.out
// RUN: %clangxx -O1 -fno-exceptions %target_itanium_abi_host_triple %s -o %t.out -g
// RUN: %test_debuginfo %s %t.out
-//
+// XFAIL: !system-darwin && gdb-clang-incompatibility
// PR34513
volatile int sideeffect = 0;
void __attribute__((noinline)) stop() { sideeffect++; }
diff --git a/cross-project-tests/debuginfo-tests/llgdb-tests/safestack.c b/cross-project-tests/debuginfo-tests/llgdb-tests/safestack.c
index cf3efc7..38636a5 100644
--- a/cross-project-tests/debuginfo-tests/llgdb-tests/safestack.c
+++ b/cross-project-tests/debuginfo-tests/llgdb-tests/safestack.c
@@ -5,7 +5,7 @@
// Zorg configures the ASAN stage2 bots to not build the
// safestack compiler-rt. Only run this test on
// non-asanified configurations.
-
+// XFAIL: !system-darwin && gdb-clang-incompatibility
struct S {
int a[8];
};
diff --git a/cross-project-tests/debuginfo-tests/llgdb-tests/sret.cpp b/cross-project-tests/debuginfo-tests/llgdb-tests/sret.cpp
index 640015f..28f057b 100644
--- a/cross-project-tests/debuginfo-tests/llgdb-tests/sret.cpp
+++ b/cross-project-tests/debuginfo-tests/llgdb-tests/sret.cpp
@@ -1,8 +1,9 @@
// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -c -o %t.o
// RUN: %clangxx %target_itanium_abi_host_triple %t.o -o %t.out
// RUN: %test_debuginfo %s %t.out
+// XFAIL: !system-darwin && gdb-clang-incompatibility
// Radar 8775834
-// DEBUGGER: break 62
+// DEBUGGER: break 63
// DEBUGGER: r
// DEBUGGER: p a
// CHECK: ${{[0-9]+}} =
diff --git a/cross-project-tests/debuginfo-tests/llgdb-tests/static-member-2.cpp b/cross-project-tests/debuginfo-tests/llgdb-tests/static-member-2.cpp
index 4edb2b0..8d65a8b 100644
--- a/cross-project-tests/debuginfo-tests/llgdb-tests/static-member-2.cpp
+++ b/cross-project-tests/debuginfo-tests/llgdb-tests/static-member-2.cpp
@@ -3,7 +3,7 @@
// RUN: %test_debuginfo %s %t.out
// FIXME: LLDB finds the wrong symbol for "C". rdar://problem/14933867
-// XFAIL: darwin
+// XFAIL: darwin, gdb-clang-incompatibility
// DEBUGGER: delete breakpoints
// DEBUGGER: break static-member.cpp:33
diff --git a/cross-project-tests/debuginfo-tests/llgdb-tests/static-member.cpp b/cross-project-tests/debuginfo-tests/llgdb-tests/static-member.cpp
index 1d8ad62..29dd84d 100644
--- a/cross-project-tests/debuginfo-tests/llgdb-tests/static-member.cpp
+++ b/cross-project-tests/debuginfo-tests/llgdb-tests/static-member.cpp
@@ -1,7 +1,7 @@
// RUN: %clangxx %target_itanium_abi_host_triple -O0 -g %s -o %t -c
// RUN: %clangxx %target_itanium_abi_host_triple %t -o %t.out
// RUN: %test_debuginfo %s %t.out
-
+// XFAIL: !system-darwin && gdb-clang-incompatibility
// DEBUGGER: delete breakpoints
// DEBUGGER: break static-member.cpp:33
// DEBUGGER: r
diff --git a/cross-project-tests/lit.cfg.py b/cross-project-tests/lit.cfg.py
index 51a6dd5..c4bb83d 100644
--- a/cross-project-tests/lit.cfg.py
+++ b/cross-project-tests/lit.cfg.py
@@ -3,6 +3,7 @@ import platform
import re
import subprocess
import sys
+from distutils.version import StrictVersion
import lit.formats
import lit.util
@@ -200,6 +201,54 @@ if platform.system() == 'Darwin':
if apple_lldb_vers < 1000:
config.available_features.add('apple-lldb-pre-1000')
+def get_gdb_version_string():
+ """Return gdb's version string, or None if gdb cannot be found or the
+ --version output is formatted unexpectedly.
+ """
+ # See if we can get a gdb version, e.g.
+ # $ gdb --version
+ # GNU gdb (GDB) 10.2
+ # ...More stuff...
+ try:
+ gdb_vers_lines = subprocess.check_output(['gdb', '--version']).decode().splitlines()
+ except:
+ return None # We coudln't find gdb or something went wrong running it.
+ if len(gdb_vers_lines) < 1:
+ print("Unkown GDB version format (too few lines)", file=sys.stderr)
+ return None
+ string = gdb_vers_lines[0].strip().partition('GNU gdb (GDB) ')[2]
+ if len(string) == 0:
+ print("Unkown GDB version format", file=sys.stderr)
+ return None
+ return string
+
+def get_clang_default_dwarf_version_string(triple):
+ """Return the default dwarf version string for clang on this (host) platform
+ or None if we can't work it out.
+ """
+ # Get the flags passed by the driver and look for -dwarf-version.
+ cmd = f'{llvm_config.use_llvm_tool("clang")} -g -xc -c - -v -### --target={triple}'
+ stderr = subprocess.run(cmd.split(), stderr=subprocess.PIPE).stderr.decode()
+ match = re.search('-dwarf-version=(\d+)', stderr)
+ if match is None:
+ print("Cannot determine default dwarf version", file=sys.stderr)
+ return None
+ return match.group(1)
+
+# Some cross-project-tests use gdb, but not all versions of gdb are compatible
+# with clang's dwarf. Add feature `gdb-clang-incompatibility` to signal that
+# there's an incompatibility between clang's default dwarf version for this
+# platform and the installed gdb version.
+dwarf_version_string = get_clang_default_dwarf_version_string(config.host_triple)
+gdb_version_string = get_gdb_version_string()
+if dwarf_version_string and gdb_version_string:
+ if int(dwarf_version_string) >= 5:
+ if StrictVersion(gdb_version_string) < StrictVersion('10.1'):
+ # Example for llgdb-tests, which use lldb on darwin but gdb elsewhere:
+ # XFAIL: !system-darwin && gdb-clang-incompatibility
+ config.available_features.add('gdb-clang-incompatibility')
+ print("XFAIL some tests: use gdb version >= 10.1 to restore test coverage", file=sys.stderr)
+
llvm_config.feature_config(
[('--build-mode', {'Debug|RelWithDebInfo': 'debug-info'})]
)