All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 2/4] modpost: inform compilers that fatal() never returns
  2023-12-03  9:49 [PATCH v2 1/4] modpost: move __attribute__((format(printf, 2, 3))) to modpost.h Masahiro Yamada
@ 2023-12-03  9:49 ` Masahiro Yamada
  0 siblings, 0 replies; 5+ messages in thread
From: Masahiro Yamada @ 2023-12-03  9:49 UTC (permalink / raw)
  To: linux-kbuild
  Cc: Masahiro Yamada, Nathan Chancellor, Nick Desaulniers,
	Nicolas Schier, linux-kernel

The function fatal() never returns because modpost_log() calls exit(1)
when LOG_FATAL is passed.

Inform compilers of this fact so that unreachable code flow can be
identified at compile time.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
---

Changes in v2:
  - Use noreturn attribute together with alias

 scripts/mod/modpost.c | 3 +++
 scripts/mod/modpost.h | 5 ++++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index ca0a90158f85..c13bc9095df3 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -90,6 +90,9 @@ void modpost_log(enum loglevel loglevel, const char *fmt, ...)
 		error_occurred = true;
 }
 
+void __attribute__((alias("modpost_log")))
+modpost_log_noret(enum loglevel loglevel, const char *fmt, ...);
+
 static inline bool strends(const char *str, const char *postfix)
 {
 	if (strlen(str) < strlen(postfix))
diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h
index 9fe974dc1a52..835cababf1b0 100644
--- a/scripts/mod/modpost.h
+++ b/scripts/mod/modpost.h
@@ -200,6 +200,9 @@ enum loglevel {
 void __attribute__((format(printf, 2, 3)))
 modpost_log(enum loglevel loglevel, const char *fmt, ...);
 
+void __attribute__((format(printf, 2, 3), noreturn))
+modpost_log_noret(enum loglevel loglevel, const char *fmt, ...);
+
 /*
  * warn - show the given message, then let modpost continue running, still
  *        allowing modpost to exit successfully. This should be used when
@@ -215,4 +218,4 @@ modpost_log(enum loglevel loglevel, const char *fmt, ...);
  */
 #define warn(fmt, args...)	modpost_log(LOG_WARN, fmt, ##args)
 #define error(fmt, args...)	modpost_log(LOG_ERROR, fmt, ##args)
-#define fatal(fmt, args...)	modpost_log(LOG_FATAL, fmt, ##args)
+#define fatal(fmt, args...)	modpost_log_noret(LOG_FATAL, fmt, ##args)
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 2/4] modpost: inform compilers that fatal() never returns
@ 2024-01-22  3:48 Aiden Leong
  2024-01-22 13:29 ` Masahiro Yamada
  0 siblings, 1 reply; 5+ messages in thread
From: Aiden Leong @ 2024-01-22  3:48 UTC (permalink / raw)
  To: masahiroy; +Cc: linux-kbuild, linux-kernel, nathan, ndesaulniers, nicolas


 > The function fatal() never returns because modpost_log() calls exit(1)

 > when LOG_FATAL is passed.
 >
 > Inform compilers of this fact so that unreachable code flow can be
 > identified at compile time.
 >
 > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
 > Reviewed-by: Nathan Chancellor <nathan@kernel.org>
 > ---
 >
 > Changes in v2:
 >   - Use noreturn attribute together with alias
 >
 >  scripts/mod/modpost.c | 3 +++
 >  scripts/mod/modpost.h | 5 ++++-
 >  2 files changed, 7 insertions(+), 1 deletion(-)
 >
 > diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
 > index ca0a90158f85..c13bc9095df3 100644
 > --- a/scripts/mod/modpost.c
 > +++ b/scripts/mod/modpost.c
 > @@ -90,6 +90,9 @@ void modpost_log(enum loglevel loglevel, const char 
*fmt, ...)
 >          error_occurred = true;
 >  }
 >
 > +void __attribute__((alias("modpost_log")))

Hi Masahiro,
I cross-compile kernel on Apple Silicon MacBook Pro
and every thing works well until this patch.

My build command:
make ARCH=arm CROSS_COMPILE=arm-none-eabi- \
HOSTCFLAGS="-I/opt/homebrew/opt/openssl/include" \
HOSTLDFLAGS="-L/opt/homebrew/opt/openssl/lib"

Error message:
scripts/mod/modpost.c:93:21: error: aliases are not supported on darwin

Aiden Leong

 > +modpost_log_noret(enum loglevel loglevel, const char *fmt, ...);
 > +
 >  static inline bool strends(const char *str, const char *postfix)
 >  {
 >      if (strlen(str) < strlen(postfix))
 > diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h
 > index 9fe974dc1a52..835cababf1b0 100644
 > --- a/scripts/mod/modpost.h
 > +++ b/scripts/mod/modpost.h
 > @@ -200,6 +200,9 @@ enum loglevel {
 >  void __attribute__((format(printf, 2, 3)))
 >  modpost_log(enum loglevel loglevel, const char *fmt, ...);
 >
 > +void __attribute__((format(printf, 2, 3), noreturn))
 > +modpost_log_noret(enum loglevel loglevel, const char *fmt, ...);
 > +
 >  /*
 >   * warn - show the given message, then let modpost continue running, 
still
 >   *        allowing modpost to exit successfully. This should be used 
when
 > @@ -215,4 +218,4 @@ modpost_log(enum loglevel loglevel, const char 
*fmt, ...);
 >   */
 >  #define warn(fmt, args...)    modpost_log(LOG_WARN, fmt, ##args)
 >  #define error(fmt, args...)    modpost_log(LOG_ERROR, fmt, ##args)
 > -#define fatal(fmt, args...)    modpost_log(LOG_FATAL, fmt, ##args)
 > +#define fatal(fmt, args...)    modpost_log_noret(LOG_FATAL, fmt, ##args)
 > --
 > 2.40.1

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 2/4] modpost: inform compilers that fatal() never returns
  2024-01-22  3:48 [PATCH v2 2/4] modpost: inform compilers that fatal() never returns Aiden Leong
@ 2024-01-22 13:29 ` Masahiro Yamada
  2024-01-22 23:02   ` Nathan Chancellor
  0 siblings, 1 reply; 5+ messages in thread
From: Masahiro Yamada @ 2024-01-22 13:29 UTC (permalink / raw)
  To: Aiden Leong
  Cc: linux-kbuild, linux-kernel, nathan, ndesaulniers, nicolas,
	clang-built-linux,
	F���ng-ru��� S���ng

+CC: clang-built-linux list, Fangrui

On Mon, Jan 22, 2024 at 1:04 PM Aiden Leong <aiden.leong@aibsd.com> wrote:
>
>
>  > The function fatal() never returns because modpost_log() calls exit(1)
>
>  > when LOG_FATAL is passed.
>  >
>  > Inform compilers of this fact so that unreachable code flow can be
>  > identified at compile time.
>  >
>  > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
>  > Reviewed-by: Nathan Chancellor <nathan@kernel.org>
>  > ---
>  >
>  > Changes in v2:
>  >   - Use noreturn attribute together with alias
>  >
>  >  scripts/mod/modpost.c | 3 +++
>  >  scripts/mod/modpost.h | 5 ++++-
>  >  2 files changed, 7 insertions(+), 1 deletion(-)
>  >
>  > diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
>  > index ca0a90158f85..c13bc9095df3 100644
>  > --- a/scripts/mod/modpost.c
>  > +++ b/scripts/mod/modpost.c
>  > @@ -90,6 +90,9 @@ void modpost_log(enum loglevel loglevel, const char
> *fmt, ...)
>  >          error_occurred = true;
>  >  }
>  >
>  > +void __attribute__((alias("modpost_log")))
>
> Hi Masahiro,
> I cross-compile kernel on Apple Silicon MacBook Pro
> and every thing works well until this patch.
>
> My build command:
> make ARCH=arm CROSS_COMPILE=arm-none-eabi- \
> HOSTCFLAGS="-I/opt/homebrew/opt/openssl/include" \
> HOSTLDFLAGS="-L/opt/homebrew/opt/openssl/lib"
>
> Error message:
> scripts/mod/modpost.c:93:21: error: aliases are not supported on darwin


It is unfortunate.  Indeed, I see this message in:

clang/include/clang/Basic/DiagnosticSemaKinds.td


Is this limitation due to macOS executable (PEF),
or is it Clang-specific?

Perhaps, "brew install gcc" can be a solution?










>
> Aiden Leong
>
>  > +modpost_log_noret(enum loglevel loglevel, const char *fmt, ...);
>  > +
>  >  static inline bool strends(const char *str, const char *postfix)
>  >  {
>  >      if (strlen(str) < strlen(postfix))
>  > diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h
>  > index 9fe974dc1a52..835cababf1b0 100644
>  > --- a/scripts/mod/modpost.h
>  > +++ b/scripts/mod/modpost.h
>  > @@ -200,6 +200,9 @@ enum loglevel {
>  >  void __attribute__((format(printf, 2, 3)))
>  >  modpost_log(enum loglevel loglevel, const char *fmt, ...);
>  >
>  > +void __attribute__((format(printf, 2, 3), noreturn))
>  > +modpost_log_noret(enum loglevel loglevel, const char *fmt, ...);
>  > +
>  >  /*
>  >   * warn - show the given message, then let modpost continue running,
> still
>  >   *        allowing modpost to exit successfully. This should be used
> when
>  > @@ -215,4 +218,4 @@ modpost_log(enum loglevel loglevel, const char
> *fmt, ...);
>  >   */
>  >  #define warn(fmt, args...)    modpost_log(LOG_WARN, fmt, ##args)
>  >  #define error(fmt, args...)    modpost_log(LOG_ERROR, fmt, ##args)
>  > -#define fatal(fmt, args...)    modpost_log(LOG_FATAL, fmt, ##args)
>  > +#define fatal(fmt, args...)    modpost_log_noret(LOG_FATAL, fmt, ##args)
>  > --
>  > 2.40.1



--
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 2/4] modpost: inform compilers that fatal() never returns
  2024-01-22 13:29 ` Masahiro Yamada
@ 2024-01-22 23:02   ` Nathan Chancellor
  2024-01-27 13:41     ` Masahiro Yamada
  0 siblings, 1 reply; 5+ messages in thread
From: Nathan Chancellor @ 2024-01-22 23:02 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: Aiden Leong, linux-kbuild, linux-kernel, ndesaulniers, nicolas,
	clang-built-linux,
	F���ng-ru��� S���ng

On Mon, Jan 22, 2024 at 10:29:32PM +0900, Masahiro Yamada wrote:
> +CC: clang-built-linux list, Fangrui
> 
> On Mon, Jan 22, 2024 at 1:04 PM Aiden Leong <aiden.leong@aibsd.com> wrote:
> >
> >
> >  > The function fatal() never returns because modpost_log() calls exit(1)
> >
> >  > when LOG_FATAL is passed.
> >  >
> >  > Inform compilers of this fact so that unreachable code flow can be
> >  > identified at compile time.
> >  >
> >  > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> >  > Reviewed-by: Nathan Chancellor <nathan@kernel.org>
> >  > ---
> >  >
> >  > Changes in v2:
> >  >   - Use noreturn attribute together with alias
> >  >
> >  >  scripts/mod/modpost.c | 3 +++
> >  >  scripts/mod/modpost.h | 5 ++++-
> >  >  2 files changed, 7 insertions(+), 1 deletion(-)
> >  >
> >  > diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
> >  > index ca0a90158f85..c13bc9095df3 100644
> >  > --- a/scripts/mod/modpost.c
> >  > +++ b/scripts/mod/modpost.c
> >  > @@ -90,6 +90,9 @@ void modpost_log(enum loglevel loglevel, const char
> > *fmt, ...)
> >  >          error_occurred = true;
> >  >  }
> >  >
> >  > +void __attribute__((alias("modpost_log")))
> >
> > Hi Masahiro,
> > I cross-compile kernel on Apple Silicon MacBook Pro
> > and every thing works well until this patch.
> >
> > My build command:
> > make ARCH=arm CROSS_COMPILE=arm-none-eabi- \
> > HOSTCFLAGS="-I/opt/homebrew/opt/openssl/include" \
> > HOSTLDFLAGS="-L/opt/homebrew/opt/openssl/lib"
> >
> > Error message:
> > scripts/mod/modpost.c:93:21: error: aliases are not supported on darwin
> 
> 
> It is unfortunate.  Indeed, I see this message in:
> 
> clang/include/clang/Basic/DiagnosticSemaKinds.td
> 
> 
> Is this limitation due to macOS executable (PEF),
> or is it Clang-specific?

Based on my admittedly brief research, this seems related to the Mach-O
format. That message was added by [1] in response to [2] but the message
mentioned weak aliases being supported. A further clarification was made
in [3] to state that all aliases are unsupported as a result of some
internal Apple bug it seems but I do see a couple of bug reports stating
that may not be true [4][5] (although that does not seem relevant for
this report).

[1]: https://github.com/llvm/llvm-project/commit/0017c5fa92ad3b10e15fd34f3865e8e5b850a5ed
[2]: https://llvm.org/bz8720
[3]: https://github.com/llvm/llvm-project/commit/4e30b96834cea5682a8e9e024dda06319825000a
[4]: https://github.com/llvm/llvm-project/issues/11488
[5]: https://github.com/llvm/llvm-project/issues/71001

Cheers,
Nathan

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 2/4] modpost: inform compilers that fatal() never returns
  2024-01-22 23:02   ` Nathan Chancellor
@ 2024-01-27 13:41     ` Masahiro Yamada
  0 siblings, 0 replies; 5+ messages in thread
From: Masahiro Yamada @ 2024-01-27 13:41 UTC (permalink / raw)
  To: Nathan Chancellor
  Cc: Aiden Leong, linux-kbuild, linux-kernel, ndesaulniers, nicolas,
	clang-built-linux,
	F���ng-ru��� S���ng

On Tue, Jan 23, 2024 at 8:02 AM Nathan Chancellor <nathan@kernel.org> wrote:
>
> On Mon, Jan 22, 2024 at 10:29:32PM +0900, Masahiro Yamada wrote:
> > +CC: clang-built-linux list, Fangrui
> >
> > On Mon, Jan 22, 2024 at 1:04 PM Aiden Leong <aiden.leong@aibsd.com> wrote:
> > >
> > >
> > >  > The function fatal() never returns because modpost_log() calls exit(1)
> > >
> > >  > when LOG_FATAL is passed.
> > >  >
> > >  > Inform compilers of this fact so that unreachable code flow can be
> > >  > identified at compile time.
> > >  >
> > >  > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> > >  > Reviewed-by: Nathan Chancellor <nathan@kernel.org>
> > >  > ---
> > >  >
> > >  > Changes in v2:
> > >  >   - Use noreturn attribute together with alias
> > >  >
> > >  >  scripts/mod/modpost.c | 3 +++
> > >  >  scripts/mod/modpost.h | 5 ++++-
> > >  >  2 files changed, 7 insertions(+), 1 deletion(-)
> > >  >
> > >  > diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
> > >  > index ca0a90158f85..c13bc9095df3 100644
> > >  > --- a/scripts/mod/modpost.c
> > >  > +++ b/scripts/mod/modpost.c
> > >  > @@ -90,6 +90,9 @@ void modpost_log(enum loglevel loglevel, const char
> > > *fmt, ...)
> > >  >          error_occurred = true;
> > >  >  }
> > >  >
> > >  > +void __attribute__((alias("modpost_log")))
> > >
> > > Hi Masahiro,
> > > I cross-compile kernel on Apple Silicon MacBook Pro
> > > and every thing works well until this patch.
> > >
> > > My build command:
> > > make ARCH=arm CROSS_COMPILE=arm-none-eabi- \
> > > HOSTCFLAGS="-I/opt/homebrew/opt/openssl/include" \
> > > HOSTLDFLAGS="-L/opt/homebrew/opt/openssl/lib"
> > >
> > > Error message:
> > > scripts/mod/modpost.c:93:21: error: aliases are not supported on darwin
> >
> >
> > It is unfortunate.  Indeed, I see this message in:
> >
> > clang/include/clang/Basic/DiagnosticSemaKinds.td
> >
> >
> > Is this limitation due to macOS executable (PEF),
> > or is it Clang-specific?
>
> Based on my admittedly brief research, this seems related to the Mach-O
> format. That message was added by [1] in response to [2] but the message
> mentioned weak aliases being supported. A further clarification was made
> in [3] to state that all aliases are unsupported as a result of some
> internal Apple bug it seems but I do see a couple of bug reports stating
> that may not be true [4][5] (although that does not seem relevant for
> this report).
>
> [1]: https://github.com/llvm/llvm-project/commit/0017c5fa92ad3b10e15fd34f3865e8e5b850a5ed
> [2]: https://llvm.org/bz8720
> [3]: https://github.com/llvm/llvm-project/commit/4e30b96834cea5682a8e9e024dda06319825000a
> [4]: https://github.com/llvm/llvm-project/issues/11488
> [5]: https://github.com/llvm/llvm-project/issues/71001



Thank you.
As far as I understood, macOS seems to support weak aliases.

With [5] fixed, perhaps we could do the following:

-void __attribute__((alias("modpost_log")))
+void __attribute__((weak, alias("modpost_log")))


But, we do not need to wait for it.
We can do similar without aliases at all.

fix submitted:
https://lore.kernel.org/all/20240127132811.726504-1-masahiroy@kernel.org/T/#u




-- 
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-01-27 13:41 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-22  3:48 [PATCH v2 2/4] modpost: inform compilers that fatal() never returns Aiden Leong
2024-01-22 13:29 ` Masahiro Yamada
2024-01-22 23:02   ` Nathan Chancellor
2024-01-27 13:41     ` Masahiro Yamada
  -- strict thread matches above, loose matches on Subject: below --
2023-12-03  9:49 [PATCH v2 1/4] modpost: move __attribute__((format(printf, 2, 3))) to modpost.h Masahiro Yamada
2023-12-03  9:49 ` [PATCH v2 2/4] modpost: inform compilers that fatal() never returns Masahiro Yamada

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.