2024-06-01 01:46:07

by John Hubbard

[permalink] [raw]
Subject: [PATCH v2 0/2] selftests/openat2, fchmodat2: fix clang build failures

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/[email protected]
[2] https://lore.kernel.org/[email protected]

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



2024-06-01 01:46:20

by John Hubbard

[permalink] [raw]
Subject: [PATCH v2 2/2] selftests/fchmodat2: fix clang build failure due to -static-libasan

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 <[email protected]>
Signed-off-by: John Hubbard <[email protected]>
---
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


2024-06-03 22:43:40

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH v2 2/2] selftests/fchmodat2: fix clang build failure due to -static-libasan

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 <[email protected]>
> Signed-off-by: John Hubbard <[email protected]>

Assuming that $(LLVM) is the correct conditional to test for:

Reviewed-by: Nathan Chancellor <[email protected]>

> ---
> 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
>
>

2024-06-11 21:03:18

by Shuah Khan

[permalink] [raw]
Subject: Re: [PATCH v2 0/2] selftests/openat2, fchmodat2: fix clang build failures

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/[email protected]
> [2] https://lore.kernel.org/[email protected]
>
> 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