From be1f55b4be36b5e27ca65d8c274867fa917bb5e3 Mon Sep 17 00:00:00 2001 From: Konrad Kleine Date: Fri, 2 Feb 2024 10:28:45 +0100 Subject: [PATCH 1/3] Use correct DWARF version Instead of checking for DWARF4 only we now check for DWARF5 if clang is greater or equal to version 18. The grep in the output of `llvm-dwarfdump` could potentially match other hex numbers and now only matches the version. --- use-correct-dwarf-default/.gitignore | 2 ++ .../main.fmf | 4 +-- use-correct-dwarf-default/test.sh | 30 +++++++++++++++++++ use-dwarf4-by-default/test.sh | 7 ----- 4 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 use-correct-dwarf-default/.gitignore rename {use-dwarf4-by-default => use-correct-dwarf-default}/main.fmf (87%) create mode 100755 use-correct-dwarf-default/test.sh delete mode 100755 use-dwarf4-by-default/test.sh diff --git a/use-correct-dwarf-default/.gitignore b/use-correct-dwarf-default/.gitignore new file mode 100644 index 0000000..0acf80b --- /dev/null +++ b/use-correct-dwarf-default/.gitignore @@ -0,0 +1,2 @@ +a.out +build.log \ No newline at end of file diff --git a/use-dwarf4-by-default/main.fmf b/use-correct-dwarf-default/main.fmf similarity index 87% rename from use-dwarf4-by-default/main.fmf rename to use-correct-dwarf-default/main.fmf index 3e54df0..b20851d 100644 --- a/use-dwarf4-by-default/main.fmf +++ b/use-correct-dwarf-default/main.fmf @@ -7,8 +7,8 @@ tier: 1 component: - llvm-toolset - clang -extra-summary: /tools/clang/use-dwarf4-by-default -extra-task: /tools/clang/use-dwarf4-by-default +extra-summary: /tools/clang/use-correct-dwarf-default +extra-task: /tools/clang/use-correct-dwarf-default extra-nitrate: TC#0614134 adjust: diff --git a/use-correct-dwarf-default/test.sh b/use-correct-dwarf-default/test.sh new file mode 100755 index 0000000..b7ee993 --- /dev/null +++ b/use-correct-dwarf-default/test.sh @@ -0,0 +1,30 @@ +#!/bin/sh -eux + +# Determine correct DWARF version to use. If Clang is newer or equal to version +# 18, we want to use DWARF5 except for Fedora 38 where we still want DWARF4. + +required_dwarf_version=4 + +# Get clang version +clang_version=$(rpm -q --queryformat "%{version}" clang) +set +e +rpmdev-vercmp $clang_version "18" +cmp=$? +set -e +if [[ $cmp -eq 0 || $cmp -eq 11 ]]; then + >&2 echo "clang is greater or equal version 18"; + required_dwarf_version=5 +fi + +if [ -e /etc/fedora-release ]; then + fedora_version=$(grep -ioP "Fedora release \K[0-9]+" /etc/fedora-release) + if [ $fedora_version -ge 38 ]; then + required_dwarf_version=4 + fi +fi + +echo "int main(){ return 0; }" | clang -g -v -x c - 2> build.log +# Make sure that clang is using the expected flag to use the required DWARF version +grep -q "\-dwarf-version=$required_dwarf_version" build.log +# Inspect the binary to double check expected DWARF version +llvm-dwarfdump a.out | grep -ioP "version\s*=\s*0x000$required_dwarf_version" diff --git a/use-dwarf4-by-default/test.sh b/use-dwarf4-by-default/test.sh deleted file mode 100755 index 5da8196..0000000 --- a/use-dwarf4-by-default/test.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -eux - -echo "int main(){ return 0; }" | clang -g -v -x c - 2> build.log -# Make sure that clang is using the expected flag to use DWARF 4 -grep -q "\-dwarf-version=4" build.log -# Inspect the binary to double check expected DWARF version -llvm-dwarfdump a.out | grep -i version | grep 0x0004 From 8ec2e68a96cec040c8b29b827634b7d6f64bf8ec Mon Sep 17 00:00:00 2001 From: Konrad Kleine Date: Mon, 5 Feb 2024 15:07:47 +0100 Subject: [PATCH 2/3] Fixup --- use-correct-dwarf-default/test.sh | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/use-correct-dwarf-default/test.sh b/use-correct-dwarf-default/test.sh index b7ee993..0b80abe 100755 --- a/use-correct-dwarf-default/test.sh +++ b/use-correct-dwarf-default/test.sh @@ -6,12 +6,8 @@ required_dwarf_version=4 # Get clang version -clang_version=$(rpm -q --queryformat "%{version}" clang) -set +e -rpmdev-vercmp $clang_version "18" -cmp=$? -set -e -if [[ $cmp -eq 0 || $cmp -eq 11 ]]; then +clang_version=$(rpm -q --queryformat "%{version}" clang | grep -ioP "^[0-9]+") +if [ $clang_version -ge 18 ]; then >&2 echo "clang is greater or equal version 18"; required_dwarf_version=5 fi From 0f7bbde4ae2fd481c51e8b3b93e8c04331f00ae0 Mon Sep 17 00:00:00 2001 From: Konrad Kleine Date: Mon, 5 Feb 2024 17:10:29 +0100 Subject: [PATCH 3/3] fix logic --- use-correct-dwarf-default/test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/use-correct-dwarf-default/test.sh b/use-correct-dwarf-default/test.sh index 0b80abe..ac9b23a 100755 --- a/use-correct-dwarf-default/test.sh +++ b/use-correct-dwarf-default/test.sh @@ -14,7 +14,7 @@ fi if [ -e /etc/fedora-release ]; then fedora_version=$(grep -ioP "Fedora release \K[0-9]+" /etc/fedora-release) - if [ $fedora_version -ge 38 ]; then + if [ $fedora_version -le 38 ]; then required_dwarf_version=4 fi fi