* [PATCH v2 0/2] selftests/openat2, fchmodat2: fix clang build failures
@ 2024-06-01 1:45 John Hubbard
2024-06-01 1:45 ` [PATCH v2 1/2] selftests/openat2: fix clang build failures: -static-libasan, LOCAL_HDRS John Hubbard
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: John Hubbard @ 2024-06-01 1:45 UTC (permalink / raw)
To: Shuah Khan
Cc: Andrew Morton, Ilpo Järvinen, Maciej Wieczor-Retman,
Ryan Roberts, Christian Brauner, Muhammad Usama Anjum,
Alexey Gladkov, Valentin Obst, linux-kselftest, LKML, llvm,
John Hubbard
These two subsystems require very similar fixes, so I'm sending them
out together.
Changes since the first version:
1) Rebased onto Linux 6.10-rc1.
2) Added a Reviewed-by tag from Ryan Roberts. See [1] for that.
Related work: I've sent a separate fix that allows "make CC=clang" to
work in addition to "make LLVM=1" [2].
[1] https://lore.kernel.org/518dd1e3-e31a-41c3-b488-9b75a64b6c8a@arm.com
[2] https://lore.kernel.org/20240531183751.100541-2-jhubbard@nvidia.com
John Hubbard (2):
selftests/openat2: fix clang build failures: -static-libasan,
LOCAL_HDRS
selftests/fchmodat2: fix clang build failure due to -static-libasan
tools/testing/selftests/fchmodat2/Makefile | 11 ++++++++++-
tools/testing/selftests/openat2/Makefile | 14 ++++++++++++--
2 files changed, 22 insertions(+), 3 deletions(-)
base-commit: cc8ed4d0a8486c7472cd72ec3c19957e509dc68c
--
2.45.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/2] selftests/openat2: fix clang build failures: -static-libasan, LOCAL_HDRS
2024-06-01 1:45 [PATCH v2 0/2] selftests/openat2, fchmodat2: fix clang build failures John Hubbard
@ 2024-06-01 1:45 ` John Hubbard
2024-06-03 22:38 ` Nathan Chancellor
2024-06-03 22:39 ` Nathan Chancellor
2024-06-01 1:45 ` [PATCH v2 2/2] selftests/fchmodat2: fix clang build failure due to -static-libasan John Hubbard
2024-06-11 21:01 ` [PATCH v2 0/2] selftests/openat2, fchmodat2: fix clang build failures Shuah Khan
2 siblings, 2 replies; 7+ messages in thread
From: John Hubbard @ 2024-06-01 1:45 UTC (permalink / raw)
To: Shuah Khan
Cc: Andrew Morton, Ilpo Järvinen, Maciej Wieczor-Retman,
Ryan Roberts, Christian Brauner, Muhammad Usama Anjum,
Alexey Gladkov, Valentin Obst, linux-kselftest, LKML, llvm,
John Hubbard
When building with clang via:
make LLVM=1 -C tools/testing/selftests
two distinct failures occur:
1) gcc requires -static-libasan in order to ensure that Address
Sanitizer's library is the first one loaded. However, this leads to
build failures on clang, when building via:
make LLVM=1 -C tools/testing/selftests
However, clang already does the right thing by default: it statically
links the Address Sanitizer if -fsanitize is specified. Therefore, fix
this by simply omitting -static-libasan for clang builds. And leave
behind a comment, because the whole reason for static linking might not
be obvious.
2) clang won't accept invocations of this form, but gcc will:
$(CC) file1.c header2.h
Fix this by using selftests/lib.mk facilities for tracking local header
file dependencies: add them to LOCAL_HDRS, leaving only the .c files to
be passed to the compiler.
Reviewed-by: Ryan Roberts <ryan.roberts@arm.com>
Signed-off-by: John Hubbard <jhubbard@nvidia.com>
---
tools/testing/selftests/openat2/Makefile | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/openat2/Makefile b/tools/testing/selftests/openat2/Makefile
index 254d676a2689..185dc76ebb5f 100644
--- a/tools/testing/selftests/openat2/Makefile
+++ b/tools/testing/selftests/openat2/Makefile
@@ -1,8 +1,18 @@
# SPDX-License-Identifier: GPL-2.0-or-later
-CFLAGS += -Wall -O2 -g -fsanitize=address -fsanitize=undefined -static-libasan
+CFLAGS += -Wall -O2 -g -fsanitize=address -fsanitize=undefined
TEST_GEN_PROGS := openat2_test resolve_test rename_attack_test
+# gcc requires -static-libasan in order to ensure that Address Sanitizer's
+# library is the first one loaded. However, clang already statically links the
+# Address Sanitizer if -fsanitize is specified. Therefore, simply omit
+# -static-libasan for clang builds.
+ifeq ($(LLVM),)
+ CFLAGS += -static-libasan
+endif
+
+LOCAL_HDRS += helpers.h
+
include ../lib.mk
-$(TEST_GEN_PROGS): helpers.c helpers.h
+$(TEST_GEN_PROGS): helpers.c
--
2.45.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 2/2] selftests/fchmodat2: fix clang build failure due to -static-libasan
2024-06-01 1:45 [PATCH v2 0/2] selftests/openat2, fchmodat2: fix clang build failures John Hubbard
2024-06-01 1:45 ` [PATCH v2 1/2] selftests/openat2: fix clang build failures: -static-libasan, LOCAL_HDRS John Hubbard
@ 2024-06-01 1:45 ` John Hubbard
2024-06-03 22:39 ` Nathan Chancellor
2024-06-11 21:01 ` [PATCH v2 0/2] selftests/openat2, fchmodat2: fix clang build failures Shuah Khan
2 siblings, 1 reply; 7+ messages in thread
From: John Hubbard @ 2024-06-01 1:45 UTC (permalink / raw)
To: Shuah Khan
Cc: Andrew Morton, Ilpo Järvinen, Maciej Wieczor-Retman,
Ryan Roberts, Christian Brauner, Muhammad Usama Anjum,
Alexey Gladkov, Valentin Obst, linux-kselftest, LKML, llvm,
John Hubbard
gcc requires -static-libasan in order to ensure that Address Sanitizer's
library is the first one loaded. However, this leads to build failures
on clang, when building via:
make LLVM=1 -C tools/testing/selftests
However, clang already does the right thing by default: it statically
links the Address Sanitizer if -fsanitize is specified. Therefore,
simply omit -static-libasan for clang builds. And leave behind a
comment, because the whole reason for static linking might not be
obvious.
Cc: Ryan Roberts <ryan.roberts@arm.com>
Signed-off-by: John Hubbard <jhubbard@nvidia.com>
---
tools/testing/selftests/fchmodat2/Makefile | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/fchmodat2/Makefile b/tools/testing/selftests/fchmodat2/Makefile
index 71ec34bf1501..4373cea79b79 100644
--- a/tools/testing/selftests/fchmodat2/Makefile
+++ b/tools/testing/selftests/fchmodat2/Makefile
@@ -1,6 +1,15 @@
# SPDX-License-Identifier: GPL-2.0-or-later
-CFLAGS += -Wall -O2 -g -fsanitize=address -fsanitize=undefined -static-libasan $(KHDR_INCLUDES)
+CFLAGS += -Wall -O2 -g -fsanitize=address -fsanitize=undefined $(KHDR_INCLUDES)
+
+# gcc requires -static-libasan in order to ensure that Address Sanitizer's
+# library is the first one loaded. However, clang already statically links the
+# Address Sanitizer if -fsanitize is specified. Therefore, simply omit
+# -static-libasan for clang builds.
+ifeq ($(LLVM),)
+ CFLAGS += -static-libasan
+endif
+
TEST_GEN_PROGS := fchmodat2_test
include ../lib.mk
--
2.45.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/2] selftests/openat2: fix clang build failures: -static-libasan, LOCAL_HDRS
2024-06-01 1:45 ` [PATCH v2 1/2] selftests/openat2: fix clang build failures: -static-libasan, LOCAL_HDRS John Hubbard
@ 2024-06-03 22:38 ` Nathan Chancellor
2024-06-03 22:39 ` Nathan Chancellor
1 sibling, 0 replies; 7+ messages in thread
From: Nathan Chancellor @ 2024-06-03 22:38 UTC (permalink / raw)
To: John Hubbard
Cc: Shuah Khan, Andrew Morton, Ilpo Järvinen,
Maciej Wieczor-Retman, Ryan Roberts, Christian Brauner,
Muhammad Usama Anjum, Alexey Gladkov, Valentin Obst,
linux-kselftest, LKML, llvm
On Fri, May 31, 2024 at 06:45:33PM -0700, John Hubbard wrote:
> When building with clang via:
>
> make LLVM=1 -C tools/testing/selftests
>
> two distinct failures occur:
>
> 1) gcc requires -static-libasan in order to ensure that Address
> Sanitizer's library is the first one loaded. However, this leads to
> build failures on clang, when building via:
>
> make LLVM=1 -C tools/testing/selftests
>
> However, clang already does the right thing by default: it statically
> links the Address Sanitizer if -fsanitize is specified. Therefore, fix
> this by simply omitting -static-libasan for clang builds. And leave
> behind a comment, because the whole reason for static linking might not
> be obvious.
>
> 2) clang won't accept invocations of this form, but gcc will:
>
> $(CC) file1.c header2.h
>
> Fix this by using selftests/lib.mk facilities for tracking local header
> file dependencies: add them to LOCAL_HDRS, leaving only the .c files to
> be passed to the compiler.
>
> Reviewed-by: Ryan Roberts <ryan.roberts@arm.com>
> Signed-off-by: John Hubbard <jhubbard@nvidia.com>
Assuming that $(LLVM) is the correct conditional to test for:
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
> ---
> tools/testing/selftests/openat2/Makefile | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/tools/testing/selftests/openat2/Makefile b/tools/testing/selftests/openat2/Makefile
> index 254d676a2689..185dc76ebb5f 100644
> --- a/tools/testing/selftests/openat2/Makefile
> +++ b/tools/testing/selftests/openat2/Makefile
> @@ -1,8 +1,18 @@
> # SPDX-License-Identifier: GPL-2.0-or-later
>
> -CFLAGS += -Wall -O2 -g -fsanitize=address -fsanitize=undefined -static-libasan
> +CFLAGS += -Wall -O2 -g -fsanitize=address -fsanitize=undefined
> TEST_GEN_PROGS := openat2_test resolve_test rename_attack_test
>
> +# gcc requires -static-libasan in order to ensure that Address Sanitizer's
> +# library is the first one loaded. However, clang already statically links the
> +# Address Sanitizer if -fsanitize is specified. Therefore, simply omit
> +# -static-libasan for clang builds.
> +ifeq ($(LLVM),)
> + CFLAGS += -static-libasan
> +endif
> +
> +LOCAL_HDRS += helpers.h
> +
> include ../lib.mk
>
> -$(TEST_GEN_PROGS): helpers.c helpers.h
> +$(TEST_GEN_PROGS): helpers.c
> --
> 2.45.1
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/2] selftests/openat2: fix clang build failures: -static-libasan, LOCAL_HDRS
2024-06-01 1:45 ` [PATCH v2 1/2] selftests/openat2: fix clang build failures: -static-libasan, LOCAL_HDRS John Hubbard
2024-06-03 22:38 ` Nathan Chancellor
@ 2024-06-03 22:39 ` Nathan Chancellor
1 sibling, 0 replies; 7+ messages in thread
From: Nathan Chancellor @ 2024-06-03 22:39 UTC (permalink / raw)
To: John Hubbard
Cc: Shuah Khan, Andrew Morton, Ilpo Järvinen,
Maciej Wieczor-Retman, Ryan Roberts, Christian Brauner,
Muhammad Usama Anjum, Alexey Gladkov, Valentin Obst,
linux-kselftest, LKML, llvm
On Fri, May 31, 2024 at 06:45:33PM -0700, John Hubbard wrote:
> When building with clang via:
>
> make LLVM=1 -C tools/testing/selftests
>
> two distinct failures occur:
>
> 1) gcc requires -static-libasan in order to ensure that Address
> Sanitizer's library is the first one loaded. However, this leads to
> build failures on clang, when building via:
>
> make LLVM=1 -C tools/testing/selftests
>
> However, clang already does the right thing by default: it statically
> links the Address Sanitizer if -fsanitize is specified. Therefore, fix
> this by simply omitting -static-libasan for clang builds. And leave
> behind a comment, because the whole reason for static linking might not
> be obvious.
>
> 2) clang won't accept invocations of this form, but gcc will:
>
> $(CC) file1.c header2.h
>
> Fix this by using selftests/lib.mk facilities for tracking local header
> file dependencies: add them to LOCAL_HDRS, leaving only the .c files to
> be passed to the compiler.
>
> Reviewed-by: Ryan Roberts <ryan.roberts@arm.com>
> Signed-off-by: John Hubbard <jhubbard@nvidia.com>
Assuming that $(LLVM) is the correct conditional to test for:
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
> ---
> tools/testing/selftests/openat2/Makefile | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/tools/testing/selftests/openat2/Makefile b/tools/testing/selftests/openat2/Makefile
> index 254d676a2689..185dc76ebb5f 100644
> --- a/tools/testing/selftests/openat2/Makefile
> +++ b/tools/testing/selftests/openat2/Makefile
> @@ -1,8 +1,18 @@
> # SPDX-License-Identifier: GPL-2.0-or-later
>
> -CFLAGS += -Wall -O2 -g -fsanitize=address -fsanitize=undefined -static-libasan
> +CFLAGS += -Wall -O2 -g -fsanitize=address -fsanitize=undefined
> TEST_GEN_PROGS := openat2_test resolve_test rename_attack_test
>
> +# gcc requires -static-libasan in order to ensure that Address Sanitizer's
> +# library is the first one loaded. However, clang already statically links the
> +# Address Sanitizer if -fsanitize is specified. Therefore, simply omit
> +# -static-libasan for clang builds.
> +ifeq ($(LLVM),)
> + CFLAGS += -static-libasan
> +endif
> +
> +LOCAL_HDRS += helpers.h
> +
> include ../lib.mk
>
> -$(TEST_GEN_PROGS): helpers.c helpers.h
> +$(TEST_GEN_PROGS): helpers.c
> --
> 2.45.1
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] selftests/fchmodat2: fix clang build failure due to -static-libasan
2024-06-01 1:45 ` [PATCH v2 2/2] selftests/fchmodat2: fix clang build failure due to -static-libasan John Hubbard
@ 2024-06-03 22:39 ` Nathan Chancellor
0 siblings, 0 replies; 7+ messages in thread
From: Nathan Chancellor @ 2024-06-03 22:39 UTC (permalink / raw)
To: John Hubbard
Cc: Shuah Khan, Andrew Morton, Ilpo Järvinen,
Maciej Wieczor-Retman, Ryan Roberts, Christian Brauner,
Muhammad Usama Anjum, Alexey Gladkov, Valentin Obst,
linux-kselftest, LKML, llvm
On Fri, May 31, 2024 at 06:45:34PM -0700, John Hubbard wrote:
> gcc requires -static-libasan in order to ensure that Address Sanitizer's
> library is the first one loaded. However, this leads to build failures
> on clang, when building via:
>
> make LLVM=1 -C tools/testing/selftests
>
> However, clang already does the right thing by default: it statically
> links the Address Sanitizer if -fsanitize is specified. Therefore,
> simply omit -static-libasan for clang builds. And leave behind a
> comment, because the whole reason for static linking might not be
> obvious.
>
> Cc: Ryan Roberts <ryan.roberts@arm.com>
> Signed-off-by: John Hubbard <jhubbard@nvidia.com>
Assuming that $(LLVM) is the correct conditional to test for:
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
> ---
> tools/testing/selftests/fchmodat2/Makefile | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/tools/testing/selftests/fchmodat2/Makefile b/tools/testing/selftests/fchmodat2/Makefile
> index 71ec34bf1501..4373cea79b79 100644
> --- a/tools/testing/selftests/fchmodat2/Makefile
> +++ b/tools/testing/selftests/fchmodat2/Makefile
> @@ -1,6 +1,15 @@
> # SPDX-License-Identifier: GPL-2.0-or-later
>
> -CFLAGS += -Wall -O2 -g -fsanitize=address -fsanitize=undefined -static-libasan $(KHDR_INCLUDES)
> +CFLAGS += -Wall -O2 -g -fsanitize=address -fsanitize=undefined $(KHDR_INCLUDES)
> +
> +# gcc requires -static-libasan in order to ensure that Address Sanitizer's
> +# library is the first one loaded. However, clang already statically links the
> +# Address Sanitizer if -fsanitize is specified. Therefore, simply omit
> +# -static-libasan for clang builds.
> +ifeq ($(LLVM),)
> + CFLAGS += -static-libasan
> +endif
> +
> TEST_GEN_PROGS := fchmodat2_test
>
> include ../lib.mk
> --
> 2.45.1
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 0/2] selftests/openat2, fchmodat2: fix clang build failures
2024-06-01 1:45 [PATCH v2 0/2] selftests/openat2, fchmodat2: fix clang build failures John Hubbard
2024-06-01 1:45 ` [PATCH v2 1/2] selftests/openat2: fix clang build failures: -static-libasan, LOCAL_HDRS John Hubbard
2024-06-01 1:45 ` [PATCH v2 2/2] selftests/fchmodat2: fix clang build failure due to -static-libasan John Hubbard
@ 2024-06-11 21:01 ` Shuah Khan
2 siblings, 0 replies; 7+ messages in thread
From: Shuah Khan @ 2024-06-11 21:01 UTC (permalink / raw)
To: John Hubbard, Shuah Khan
Cc: Andrew Morton, Ilpo Järvinen, Maciej Wieczor-Retman,
Ryan Roberts, Christian Brauner, Muhammad Usama Anjum,
Alexey Gladkov, Valentin Obst, linux-kselftest, LKML, llvm,
Shuah Khan
On 5/31/24 19:45, John Hubbard wrote:
> These two subsystems require very similar fixes, so I'm sending them
> out together.
>
> Changes since the first version:
>
> 1) Rebased onto Linux 6.10-rc1.
>
> 2) Added a Reviewed-by tag from Ryan Roberts. See [1] for that.
>
> Related work: I've sent a separate fix that allows "make CC=clang" to
> work in addition to "make LLVM=1" [2].
>
> [1] https://lore.kernel.org/518dd1e3-e31a-41c3-b488-9b75a64b6c8a@arm.com
> [2] https://lore.kernel.org/20240531183751.100541-2-jhubbard@nvidia.com
>
> John Hubbard (2):
> selftests/openat2: fix clang build failures: -static-libasan,
> LOCAL_HDRS
> selftests/fchmodat2: fix clang build failure due to -static-libasan
>
> tools/testing/selftests/fchmodat2/Makefile | 11 ++++++++++-
> tools/testing/selftests/openat2/Makefile | 14 ++++++++++++--
> 2 files changed, 22 insertions(+), 3 deletions(-)
>
>
> base-commit: cc8ed4d0a8486c7472cd72ec3c19957e509dc68c
Applied to linux-kselftest fixes for Linux 6.10 next rc
thanks,
-- Shuah
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-06-11 21:01 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-01 1:45 [PATCH v2 0/2] selftests/openat2, fchmodat2: fix clang build failures John Hubbard
2024-06-01 1:45 ` [PATCH v2 1/2] selftests/openat2: fix clang build failures: -static-libasan, LOCAL_HDRS John Hubbard
2024-06-03 22:38 ` Nathan Chancellor
2024-06-03 22:39 ` Nathan Chancellor
2024-06-01 1:45 ` [PATCH v2 2/2] selftests/fchmodat2: fix clang build failure due to -static-libasan John Hubbard
2024-06-03 22:39 ` Nathan Chancellor
2024-06-11 21:01 ` [PATCH v2 0/2] selftests/openat2, fchmodat2: fix clang build failures Shuah Khan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).