llvm.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [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).