From: Sarang Patrange <spatrang@amd.com>
To: <gdb-patches@sourceware.org>
Cc: Lancelot Six <lancelot.six@amd.com>
Subject: [PATCH] gdb/testsuite: replace hipcc with amdclang++ as the HIP compiler
Date: Wed, 15 Jul 2026 04:45:33 -0500 [thread overview]
Message-ID: <20260715094533.3093704-1-spatrang@amd.com> (raw)
The GDB testsuite discovers and invokes hipcc to compile the HIP
testcases. hipcc is deprecated and slated for removal, so switch the
testsuite over to amdclang++. Unlike the hipcc wrapper, amdclang++ is
the plain clang driver, so a few HIP options that hipcc handled
implicitly now have to be passed explicitly.
Compiler discovery (lib/future.exp):
- Look for amdclang++ under $ROCM_PATH/lib/llvm/bin instead of hipcc
under $ROCM_PATH/bin.
- Rename the HIPCC_FOR_TARGET environment override to
HIP_COMPILER_FOR_TARGET, and gdb_find_hipcc / find_hipcc to
gdb_find_hip_compiler / find_hip_compiler. The "hipcompiler"
board-info key is left unchanged for backwards compatibility.
Compile and link flags (lib/gdb.exp):
- amdclang++ infers the input language from the file extension and
compiles .cpp as C++, not HIP. The HIP testcases are kept named
.cpp (rather than renamed to .hip), so tag each input explicitly:
"-x hip" before C/C++/HIP source files and "-x none" before object
files, archives and other inputs. This lets a single invocation
handle a source list that mixes sources with prebuilt objects.
- Pass --hip-link when producing an executable, to bring in the HIP
runtime.
- Pass --rocm-path only when ROCM_PATH is set in the environment;
otherwise defer to amdclang++'s own HIP discovery.
- Pass one --offload-arch per available device, unless the testcase
already selects an architecture.
- Drop the explicit -O0: it was only needed because the hipcc wrapper
defaulted to -O2, whereas amdclang++ already defaults to -O0. An
explicit "optimize" option still overrides it.
Testcases (lib/rocm.exp, gdb.rocm/*.exp):
- Rename allow_hipcc_tests to allow_hip_tests.
Signed-off-by: Sarang Patrange <spatrang@amd.com>
---
.../gdb.rocm/addr-bp-gpu-no-deb-info.exp | 2 +-
.../gdb.rocm/break-kernel-no-debug-info.exp | 2 +-
.../code-object-load-while-breakpoint-hit.exp | 2 +-
gdb/testsuite/gdb.rocm/displaced-stepping.exp | 2 +-
.../gdb.rocm/fork-exec-gpu-to-non-gpu.exp | 2 +-
.../gdb.rocm/fork-exec-non-gpu-to-gpu.exp | 2 +-
gdb/testsuite/gdb.rocm/interrupt-twice.exp | 2 +-
gdb/testsuite/gdb.rocm/mi-attach.exp | 2 +-
gdb/testsuite/gdb.rocm/multi-inferior-gpu.exp | 2 +-
.../gdb.rocm/precise-memory-exec.exp | 2 +-
.../gdb.rocm/precise-memory-fork.exp | 2 +-
.../precise-memory-multi-inferiors.exp | 2 +-
.../precise-memory-warning-sigsegv.exp | 2 +-
.../precise-memory-warning-watchpoint.exp | 2 +-
gdb/testsuite/gdb.rocm/precise-memory.exp | 2 +-
gdb/testsuite/gdb.rocm/simple.exp | 2 +-
.../gdb.rocm/watchpoint-at-end-of-shader.exp | 2 +-
gdb/testsuite/gdb.rocm/watchpoint-basic.exp | 2 +-
gdb/testsuite/lib/future.exp | 30 ++++-----
gdb/testsuite/lib/gdb.exp | 66 +++++++++++++++++--
gdb/testsuite/lib/rocm.exp | 2 +-
21 files changed, 94 insertions(+), 40 deletions(-)
diff --git a/gdb/testsuite/gdb.rocm/addr-bp-gpu-no-deb-info.exp b/gdb/testsuite/gdb.rocm/addr-bp-gpu-no-deb-info.exp
index 039a208a5fa..a77c628f81d 100644
--- a/gdb/testsuite/gdb.rocm/addr-bp-gpu-no-deb-info.exp
+++ b/gdb/testsuite/gdb.rocm/addr-bp-gpu-no-deb-info.exp
@@ -20,7 +20,7 @@ load_lib rocm.exp
standard_testfile .cpp
-require allow_hipcc_tests
+require allow_hip_tests
if {[build_executable "failed to prepare" $testfile $srcfile {hip}]} {
return
diff --git a/gdb/testsuite/gdb.rocm/break-kernel-no-debug-info.exp b/gdb/testsuite/gdb.rocm/break-kernel-no-debug-info.exp
index d9e35d36d3d..7fc608c2913 100644
--- a/gdb/testsuite/gdb.rocm/break-kernel-no-debug-info.exp
+++ b/gdb/testsuite/gdb.rocm/break-kernel-no-debug-info.exp
@@ -25,7 +25,7 @@ load_lib rocm.exp
standard_testfile .cpp
-require allow_hipcc_tests
+require allow_hip_tests
# Build for hip, explicitly without debug infos
if {[build_executable "failed to prepare" $testfile $srcfile {hip nodebug}]} {
diff --git a/gdb/testsuite/gdb.rocm/code-object-load-while-breakpoint-hit.exp b/gdb/testsuite/gdb.rocm/code-object-load-while-breakpoint-hit.exp
index c0603886383..38226528b8d 100644
--- a/gdb/testsuite/gdb.rocm/code-object-load-while-breakpoint-hit.exp
+++ b/gdb/testsuite/gdb.rocm/code-object-load-while-breakpoint-hit.exp
@@ -34,7 +34,7 @@
load_lib rocm.exp
standard_testfile .cpp
-require allow_hipcc_tests
+require allow_hip_tests
# Build the host executable.
if { [build_executable "failed to prepare" \
diff --git a/gdb/testsuite/gdb.rocm/displaced-stepping.exp b/gdb/testsuite/gdb.rocm/displaced-stepping.exp
index 383972bbb33..2466a678f19 100644
--- a/gdb/testsuite/gdb.rocm/displaced-stepping.exp
+++ b/gdb/testsuite/gdb.rocm/displaced-stepping.exp
@@ -19,7 +19,7 @@ load_lib rocm.exp
standard_testfile .cpp
-require allow_hipcc_tests
+require allow_hip_tests
# Since GDB doesn't yet understand DWARF expressions generated by the HIP
# compiler, purposefully generate the binary without debug info.
diff --git a/gdb/testsuite/gdb.rocm/fork-exec-gpu-to-non-gpu.exp b/gdb/testsuite/gdb.rocm/fork-exec-gpu-to-non-gpu.exp
index aa85face813..efc27572a5d 100644
--- a/gdb/testsuite/gdb.rocm/fork-exec-gpu-to-non-gpu.exp
+++ b/gdb/testsuite/gdb.rocm/fork-exec-gpu-to-non-gpu.exp
@@ -20,7 +20,7 @@
load_lib rocm.exp
-require allow_hipcc_tests
+require allow_hip_tests
require allow_fork_tests
standard_testfile -execer.cpp -execee.cpp
diff --git a/gdb/testsuite/gdb.rocm/fork-exec-non-gpu-to-gpu.exp b/gdb/testsuite/gdb.rocm/fork-exec-non-gpu-to-gpu.exp
index ca104e1cb07..3e1d43bbb7c 100644
--- a/gdb/testsuite/gdb.rocm/fork-exec-non-gpu-to-gpu.exp
+++ b/gdb/testsuite/gdb.rocm/fork-exec-non-gpu-to-gpu.exp
@@ -19,7 +19,7 @@
load_lib rocm.exp
-require allow_hipcc_tests
+require allow_hip_tests
require allow_fork_tests
standard_testfile -execer.cpp -execee.cpp
diff --git a/gdb/testsuite/gdb.rocm/interrupt-twice.exp b/gdb/testsuite/gdb.rocm/interrupt-twice.exp
index 0e87b5c66e8..cfefdff9ff0 100644
--- a/gdb/testsuite/gdb.rocm/interrupt-twice.exp
+++ b/gdb/testsuite/gdb.rocm/interrupt-twice.exp
@@ -19,7 +19,7 @@
load_lib rocm.exp
-require allow_hipcc_tests
+require allow_hip_tests
standard_testfile .cpp
diff --git a/gdb/testsuite/gdb.rocm/mi-attach.exp b/gdb/testsuite/gdb.rocm/mi-attach.exp
index c62a3a1cd97..a9b3a971099 100644
--- a/gdb/testsuite/gdb.rocm/mi-attach.exp
+++ b/gdb/testsuite/gdb.rocm/mi-attach.exp
@@ -17,7 +17,7 @@ load_lib rocm.exp
load_lib mi-support.exp
set MIFLAGS "-i=mi"
-require can_spawn_for_attach allow_hipcc_tests
+require can_spawn_for_attach allow_hip_tests
standard_testfile .cpp
diff --git a/gdb/testsuite/gdb.rocm/multi-inferior-gpu.exp b/gdb/testsuite/gdb.rocm/multi-inferior-gpu.exp
index 5e07e4d982c..4a06b642cb0 100644
--- a/gdb/testsuite/gdb.rocm/multi-inferior-gpu.exp
+++ b/gdb/testsuite/gdb.rocm/multi-inferior-gpu.exp
@@ -20,7 +20,7 @@ load_lib rocm.exp
standard_testfile .cpp
-require allow_hipcc_tests
+require allow_hip_tests
require hip_devices_support_debug_multi_process
require allow_fork_tests
diff --git a/gdb/testsuite/gdb.rocm/precise-memory-exec.exp b/gdb/testsuite/gdb.rocm/precise-memory-exec.exp
index 0f9f618d686..bdd423cd65d 100644
--- a/gdb/testsuite/gdb.rocm/precise-memory-exec.exp
+++ b/gdb/testsuite/gdb.rocm/precise-memory-exec.exp
@@ -20,7 +20,7 @@
load_lib rocm.exp
-require allow_hipcc_tests
+require allow_hip_tests
standard_testfile .c
diff --git a/gdb/testsuite/gdb.rocm/precise-memory-fork.exp b/gdb/testsuite/gdb.rocm/precise-memory-fork.exp
index bcf94c36eec..06ae518d5a3 100644
--- a/gdb/testsuite/gdb.rocm/precise-memory-fork.exp
+++ b/gdb/testsuite/gdb.rocm/precise-memory-fork.exp
@@ -20,7 +20,7 @@
load_lib rocm.exp
-require allow_hipcc_tests
+require allow_hip_tests
require allow_fork_tests
standard_testfile .c
diff --git a/gdb/testsuite/gdb.rocm/precise-memory-multi-inferiors.exp b/gdb/testsuite/gdb.rocm/precise-memory-multi-inferiors.exp
index d0b50a69e91..e8a7b5802ca 100644
--- a/gdb/testsuite/gdb.rocm/precise-memory-multi-inferiors.exp
+++ b/gdb/testsuite/gdb.rocm/precise-memory-multi-inferiors.exp
@@ -20,7 +20,7 @@
load_lib rocm.exp
-require allow_hipcc_tests
+require allow_hip_tests
clean_restart
diff --git a/gdb/testsuite/gdb.rocm/precise-memory-warning-sigsegv.exp b/gdb/testsuite/gdb.rocm/precise-memory-warning-sigsegv.exp
index 4bf5bd71e15..460d14a2b30 100644
--- a/gdb/testsuite/gdb.rocm/precise-memory-warning-sigsegv.exp
+++ b/gdb/testsuite/gdb.rocm/precise-memory-warning-sigsegv.exp
@@ -20,7 +20,7 @@
load_lib rocm.exp
-require allow_hipcc_tests
+require allow_hip_tests
standard_testfile .cpp
diff --git a/gdb/testsuite/gdb.rocm/precise-memory-warning-watchpoint.exp b/gdb/testsuite/gdb.rocm/precise-memory-warning-watchpoint.exp
index 15ab9a91e4c..373b95fecde 100644
--- a/gdb/testsuite/gdb.rocm/precise-memory-warning-watchpoint.exp
+++ b/gdb/testsuite/gdb.rocm/precise-memory-warning-watchpoint.exp
@@ -18,7 +18,7 @@
load_lib rocm.exp
-require allow_hipcc_tests
+require allow_hip_tests
if { ![istarget "*-linux*"] } then {
continue
diff --git a/gdb/testsuite/gdb.rocm/precise-memory.exp b/gdb/testsuite/gdb.rocm/precise-memory.exp
index fc6993e7d7b..8b92af19d29 100644
--- a/gdb/testsuite/gdb.rocm/precise-memory.exp
+++ b/gdb/testsuite/gdb.rocm/precise-memory.exp
@@ -19,7 +19,7 @@
load_lib rocm.exp
-require allow_hipcc_tests
+require allow_hip_tests
standard_testfile .cpp
diff --git a/gdb/testsuite/gdb.rocm/simple.exp b/gdb/testsuite/gdb.rocm/simple.exp
index dba81c2c1e6..e928aa55bee 100644
--- a/gdb/testsuite/gdb.rocm/simple.exp
+++ b/gdb/testsuite/gdb.rocm/simple.exp
@@ -20,7 +20,7 @@ load_lib rocm.exp
standard_testfile .cpp
-require allow_hipcc_tests
+require allow_hip_tests
if {[build_executable "failed to prepare" $testfile $srcfile {debug hip}]} {
return
diff --git a/gdb/testsuite/gdb.rocm/watchpoint-at-end-of-shader.exp b/gdb/testsuite/gdb.rocm/watchpoint-at-end-of-shader.exp
index 2ae0e044a53..24bd5bc7042 100644
--- a/gdb/testsuite/gdb.rocm/watchpoint-at-end-of-shader.exp
+++ b/gdb/testsuite/gdb.rocm/watchpoint-at-end-of-shader.exp
@@ -18,7 +18,7 @@
load_lib rocm.exp
-require allow_hipcc_tests
+require allow_hip_tests
standard_testfile .cpp
diff --git a/gdb/testsuite/gdb.rocm/watchpoint-basic.exp b/gdb/testsuite/gdb.rocm/watchpoint-basic.exp
index 8d19b0dcba2..b041c742797 100644
--- a/gdb/testsuite/gdb.rocm/watchpoint-basic.exp
+++ b/gdb/testsuite/gdb.rocm/watchpoint-basic.exp
@@ -17,7 +17,7 @@
load_lib rocm.exp
-require allow_hipcc_tests
+require allow_hip_tests
standard_testfile .cpp
diff --git a/gdb/testsuite/lib/future.exp b/gdb/testsuite/lib/future.exp
index 0f45aa44628..08674f3a4ae 100644
--- a/gdb/testsuite/lib/future.exp
+++ b/gdb/testsuite/lib/future.exp
@@ -120,20 +120,20 @@ proc gdb_find_rustc {} {
return $rustc
}
-proc gdb_find_hipcc {} {
+proc gdb_find_hip_compiler {} {
global tool_root_dir
if {![is_remote host]} {
- set hipcc [lookfor_file $tool_root_dir hipcc]
- if {$hipcc eq "" && [info exists ::env(ROCM_PATH)]} {
- set hipcc [lookfor_file $::env(ROCM_PATH)/bin hipcc]
+ set compiler [lookfor_file $tool_root_dir amdclang++]
+ if {$compiler eq "" && [info exists ::env(ROCM_PATH)]} {
+ set compiler [lookfor_file $::env(ROCM_PATH)/lib/llvm/bin amdclang++]
}
- if {$hipcc eq ""} {
- set hipcc hipcc
+ if {$compiler eq ""} {
+ set compiler amdclang++
}
} else {
- set hipcc ""
+ set compiler ""
}
- return $hipcc
+ return $compiler
}
proc gdb_find_ldd {} {
@@ -313,7 +313,7 @@ proc gdb_default_target_compile_1 {source destfile type options} {
if {[board_info $dest exists hipcompiler]} {
set compiler [target_info hipcompiler]
} else {
- set compiler [find_hipcc]
+ set compiler [find_hip_compiler]
}
}
@@ -379,7 +379,7 @@ proc gdb_default_target_compile_1 {source destfile type options} {
global GO_FOR_TARGET
global GO_LD_FOR_TARGET
global RUSTC_FOR_TARGET
- global HIPCC_FOR_TARGET
+ global HIP_COMPILER_FOR_TARGET
if {[info exists GNATMAKE_FOR_TARGET]} {
if { $compiler_type == "ada" } {
@@ -426,9 +426,9 @@ proc gdb_default_target_compile_1 {source destfile type options} {
}
}
- if {[info exists HIPCC_FOR_TARGET]} {
+ if {[info exists HIP_COMPILER_FOR_TARGET]} {
if {$compiler_type == "hip"} {
- set compiler $HIPCC_FOR_TARGET
+ set compiler $HIP_COMPILER_FOR_TARGET
}
}
@@ -732,12 +732,12 @@ if {[info procs find_rustc] == ""} {
rename gdb_find_rustc ""
}
-if {[info procs find_hipcc] == ""} {
- rename gdb_find_hipcc find_hipcc
+if {[info procs find_hip_compiler] == ""} {
+ rename gdb_find_hip_compiler find_hip_compiler
set use_gdb_compile(hip) 1
gdb_note [join [list $note_prefix "HIP" $note_suffix] ""]
} else {
- rename gdb_find_hipcc ""
+ rename gdb_find_hip_compiler ""
}
# If dejagnu's default_target_compile is missing support for any language,
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index a40c87c6727..ff9da83925c 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -6766,14 +6766,46 @@ proc gdb_compile {source dest type options} {
# '-mllvm=-amdgpu-spill-cfi-saved-regs' [-Wunused-command-line-argument]
#
# These happen when we're compiling an executable _and_ all
- # the input files are .o files, like: hipcc foo.o -o foo ...
+ # the input files are .o files, like: amdclang++ foo.o -o foo ...
#
- # HIPCC defaults to -O2, so add -O0 to early flags for the HIP
- # language. If "optimize" is also requested, another -O flag
- # (e.g. -O2) will be added to the flags, overriding this -O0.
- lappend new_options "early_flags=-O0\
- -mllvm=-amdgpu-spill-cfi-saved-regs\
+ # amdclang++ infers the input language from the file extension,
+ # and compiles .cpp files as C++, not HIP. The HIP testcases
+ # are named .cpp (renaming them all to .hip would be unusual, so
+ # we keep them as .cpp), so they must be compiled with an
+ # explicit "-x hip". Rather than passing a single global
+ # "-x hip" in early_flags (which would also be applied to any .o
+ # inputs, e.g. set_unbuffered_mode.o injected via ldflags,
+ # causing amdclang++ to try to parse the object as HIP source),
+ # we tag each input individually just before target_compile:
+ # "-x hip" before .cpp/.c sources and "-x none" before .o/.a
+ # files. --hip-link is still required when linking to bring in
+ # the HIP runtime.
+ set hip_early_flags "-mllvm=-amdgpu-spill-cfi-saved-regs\
-Wno-unused-command-line-argument"
+ if {$type eq "executable"} {
+ set hip_early_flags "--hip-link $hip_early_flags"
+ }
+ # When ROCM_PATH is set in the environment, pass --rocm-path
+ # so amdclang++ uses that specific ROCm install for HIP
+ # headers and device libraries. When ROCM_PATH is not set,
+ # defer to amdclang++'s own HIP discovery, which looks under
+ # the parent of its own LLVM directory and falls back on
+ # /opt/rocm; overriding that here would silently mask the
+ # user's actual compiler-side install.
+ if {[info exists ::env(ROCM_PATH)] && $::env(ROCM_PATH) ne ""} {
+ set hip_early_flags "--rocm-path=$::env(ROCM_PATH) $hip_early_flags"
+ }
+ lappend new_options "early_flags=$hip_early_flags"
+
+ # amdclang++ requires explicit --offload-arch. Explicitly
+ # pass one --offload-arch for each available device. But
+ # don't do it if the testcase explicitly used --offload-arch.
+ if {[lsearch -exact $options hip_no_offload_arch] == -1
+ && [lsearch -regexp $options "--offload-arch="] == -1} {
+ foreach gpu_target [hcc_amdgpu_targets] {
+ lappend new_options "early_flags=--offload-arch=$gpu_target"
+ }
+ }
}
# Because we link with libraries using their basename, we may need
@@ -6945,6 +6977,28 @@ proc gdb_compile {source dest type options} {
# Automatically handle includes in testsuite/lib/.
auto_lappend_include_files options $source
+ # amdclang++ infers the input language from the file extension and
+ # compiles .cpp as C++, not HIP. Since the HIP testcases are named
+ # .cpp, explicitly tag each input: "-x hip" before C/C++/HIP source
+ # files, and "-x none" before everything else (object files,
+ # archives, shared libraries), so the compiler does not try to
+ # parse those as HIP source. This lets a single amdclang++
+ # invocation correctly handle a mix of sources and non-source
+ # inputs (e.g. when set_unbuffered_mode.o is appended via ldflags
+ # later in the command line).
+ if {[lsearch -exact $options hip] != -1 && !$getting_compiler_info} {
+ set new_source {}
+ foreach src $source {
+ set ext [string tolower [file extension $src]]
+ if {$ext in {".c" ".cc" ".cp" ".cxx" ".cpp" ".c++" ".hip"}} {
+ lappend new_source "-x" "hip" $src
+ } else {
+ lappend new_source "-x" "none" $src
+ }
+ }
+ set source $new_source
+ }
+
cond_wrap [expr {$pie != -1 || $nopie != -1}] \
with_PIE_multilib_flags_filtered {
set result [target_compile $source $dest $type $options]
diff --git a/gdb/testsuite/lib/rocm.exp b/gdb/testsuite/lib/rocm.exp
index ca1ae3f1a8b..f8a3b233fae 100644
--- a/gdb/testsuite/lib/rocm.exp
+++ b/gdb/testsuite/lib/rocm.exp
@@ -110,7 +110,7 @@ proc hcc_amdgpu_targets {} {
return $unique
}
-gdb_caching_proc allow_hipcc_tests {} {
+gdb_caching_proc allow_hip_tests {} {
# Only the native target supports ROCm debugging. E.g., when
# testing against GDBserver, there's no point in running the ROCm
# tests.
--
2.34.1
next reply other threads:[~2026-07-15 9:46 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-15 9:45 Sarang Patrange [this message]
2026-07-17 10:28 ` Lancelot SIX
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260715094533.3093704-1-spatrang@amd.com \
--to=spatrang@amd.com \
--cc=gdb-patches@sourceware.org \
--cc=lancelot.six@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox