diff mbox series

[v2,2/4] Kbuild: do not emit debug info for assembly with LLVM_IAS=1

Message ID 20201104005343.4192504-3-ndesaulniers@google.com
State New
Headers show
Series [v2,1/4] x86_64: Change .weak to SYM_FUNC_START_WEAK for arch/x86/lib/mem*_64.S | expand

Commit Message

Nick Desaulniers Nov. 4, 2020, 12:53 a.m. UTC
Clang's integrated assembler produces the warning for assembly files:

warning: DWARF2 only supports one section per compilation unit

If -Wa,-gdwarf-* is unspecified, then debug info is not emitted.  This
will be re-enabled for new DWARF versions in a follow up patch.

Enables defconfig+CONFIG_DEBUG_INFO to build cleanly with
LLVM=1 LLVM_IAS=1 for x86_64 and arm64.

Cc: <stable@vger.kernel.org>
Link: https://github.com/ClangBuiltLinux/linux/issues/716
Reported-by: Nathan Chancellor <natechancellor@gmail.com>
Suggested-by: Dmitry Golovin <dima@golovin.in>
Suggested-by: Sedat Dilek <sedat.dilek@gmail.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 Makefile | 2 ++
 1 file changed, 2 insertions(+)

Comments

Nathan Chancellor Nov. 5, 2020, 6:58 a.m. UTC | #1
On Tue, Nov 03, 2020 at 04:53:41PM -0800, Nick Desaulniers wrote:
> Clang's integrated assembler produces the warning for assembly files:
> 
> warning: DWARF2 only supports one section per compilation unit
> 
> If -Wa,-gdwarf-* is unspecified, then debug info is not emitted.  This

Is this something that should be called out somewhere? If I understand
this correctly, LLVM_IAS=1 + CONFIG_DEBUG_INFO=y won't work? Maybe this
should be handled in Kconfig?

> will be re-enabled for new DWARF versions in a follow up patch.
> 
> Enables defconfig+CONFIG_DEBUG_INFO to build cleanly with
> LLVM=1 LLVM_IAS=1 for x86_64 and arm64.
> 
> Cc: <stable@vger.kernel.org>
> Link: https://github.com/ClangBuiltLinux/linux/issues/716
> Reported-by: Nathan Chancellor <natechancellor@gmail.com>
> Suggested-by: Dmitry Golovin <dima@golovin.in>

If you happen to respin, Dmitry deserves a Reported-by tag too :)

> Suggested-by: Sedat Dilek <sedat.dilek@gmail.com>
> Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>

Regardless of the other two comments, this is fine as is as a fix for
stable to unblock Android + CrOS since we have been running something
similar to it in CI:

Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>

> ---
>  Makefile | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/Makefile b/Makefile
> index f353886dbf44..75b1a3dcbf30 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -826,7 +826,9 @@ else
>  DEBUG_CFLAGS	+= -g
>  endif
>  
> +ifndef LLVM_IAS

Nit: this should probably match the existing LLVM_IAS check

ifneq ($(LLVM_IAS),1)

>  KBUILD_AFLAGS	+= -Wa,-gdwarf-2
> +endif
>  
>  ifdef CONFIG_DEBUG_INFO_DWARF4
>  DEBUG_CFLAGS	+= -gdwarf-4
> -- 
> 2.29.1.341.ge80a0c044ae-goog
>
Fangrui Song Nov. 5, 2020, 7:26 a.m. UTC | #2
On 2020-11-04, Nathan Chancellor wrote:
>On Tue, Nov 03, 2020 at 04:53:41PM -0800, Nick Desaulniers wrote:

>> Clang's integrated assembler produces the warning for assembly files:

>>

>> warning: DWARF2 only supports one section per compilation unit

>>

>> If -Wa,-gdwarf-* is unspecified, then debug info is not emitted.  This

>

>Is this something that should be called out somewhere? If I understand

>this correctly, LLVM_IAS=1 + CONFIG_DEBUG_INFO=y won't work? Maybe this

>should be handled in Kconfig?

>

>> will be re-enabled for new DWARF versions in a follow up patch.

>>

>> Enables defconfig+CONFIG_DEBUG_INFO to build cleanly with

>> LLVM=1 LLVM_IAS=1 for x86_64 and arm64.

>>

>> Cc: <stable@vger.kernel.org>

>> Link: https://github.com/ClangBuiltLinux/linux/issues/716

>> Reported-by: Nathan Chancellor <natechancellor@gmail.com>

>> Suggested-by: Dmitry Golovin <dima@golovin.in>

>

>If you happen to respin, Dmitry deserves a Reported-by tag too :)

>

>> Suggested-by: Sedat Dilek <sedat.dilek@gmail.com>

>> Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>

>

>Regardless of the other two comments, this is fine as is as a fix for

>stable to unblock Android + CrOS since we have been running something

>similar to it in CI:

>

>Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>

>

>> ---

>>  Makefile | 2 ++

>>  1 file changed, 2 insertions(+)

>>

>> diff --git a/Makefile b/Makefile

>> index f353886dbf44..75b1a3dcbf30 100644

>> --- a/Makefile

>> +++ b/Makefile

>> @@ -826,7 +826,9 @@ else

>>  DEBUG_CFLAGS	+= -g

>>  endif

>>

>> +ifndef LLVM_IAS

>

>Nit: this should probably match the existing LLVM_IAS check

>

>ifneq ($(LLVM_IAS),1)

>

>>  KBUILD_AFLAGS	+= -Wa,-gdwarf-2

>> +endif

>>

>>  ifdef CONFIG_DEBUG_INFO_DWARF4

>>  DEBUG_CFLAGS	+= -gdwarf-4

>> --

>> 2.29.1.341.ge80a0c044ae-goog

>>


The root cause is that DWARF v2 has no DW_AT_ranges, so it cannot
represent non-contiguous address ranges. It seems that GNU as -gdwarf-3
emits DW_AT_ranges as well and emits an entry for a non-executable section.
In any case, the option is of very low value, at least for LLVM.


Reviewed-by: Fangrui Song <maskray@google.com>
Nick Desaulniers Nov. 9, 2020, 6:28 p.m. UTC | #3
On Wed, Nov 4, 2020 at 10:58 PM Nathan Chancellor
<natechancellor@gmail.com> wrote:
>

> On Tue, Nov 03, 2020 at 04:53:41PM -0800, Nick Desaulniers wrote:

> > Clang's integrated assembler produces the warning for assembly files:

> >

> > warning: DWARF2 only supports one section per compilation unit

> >

> > If -Wa,-gdwarf-* is unspecified, then debug info is not emitted.  This

>

> Is this something that should be called out somewhere? If I understand

> this correctly, LLVM_IAS=1 + CONFIG_DEBUG_INFO=y won't work? Maybe this

> should be handled in Kconfig?


Specifically, debug info will not be emitted, for assembler source
files. It will still be emitted for C source files (via -gdwarf-*).
-Wa,-gdwarf-* only affects assembler file sources.

>

> > will be re-enabled for new DWARF versions in a follow up patch.

> >

> > Enables defconfig+CONFIG_DEBUG_INFO to build cleanly with

> > LLVM=1 LLVM_IAS=1 for x86_64 and arm64.

> >

> > Cc: <stable@vger.kernel.org>

> > Link: https://github.com/ClangBuiltLinux/linux/issues/716

> > Reported-by: Nathan Chancellor <natechancellor@gmail.com>

> > Suggested-by: Dmitry Golovin <dima@golovin.in>

>

> If you happen to respin, Dmitry deserves a Reported-by tag too :)


Sure.

>

> > Suggested-by: Sedat Dilek <sedat.dilek@gmail.com>

> > Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>

>

> Regardless of the other two comments, this is fine as is as a fix for

> stable to unblock Android + CrOS since we have been running something

> similar to it in CI:

>

> Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>

>

> > ---

> >  Makefile | 2 ++

> >  1 file changed, 2 insertions(+)

> >

> > diff --git a/Makefile b/Makefile

> > index f353886dbf44..75b1a3dcbf30 100644

> > --- a/Makefile

> > +++ b/Makefile

> > @@ -826,7 +826,9 @@ else

> >  DEBUG_CFLAGS += -g

> >  endif

> >

> > +ifndef LLVM_IAS

>

> Nit: this should probably match the existing LLVM_IAS check


Sure, will send a v3.  Going to just send this for now, as it's
blocking some downstream work I'm trying to get done in Android.

>

> ifneq ($(LLVM_IAS),1)

>

> >  KBUILD_AFLAGS        += -Wa,-gdwarf-2

> > +endif

> >

> >  ifdef CONFIG_DEBUG_INFO_DWARF4

> >  DEBUG_CFLAGS += -gdwarf-4

> > --

> > 2.29.1.341.ge80a0c044ae-goog

> >




-- 
Thanks,
~Nick Desaulniers
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index f353886dbf44..75b1a3dcbf30 100644
--- a/Makefile
+++ b/Makefile
@@ -826,7 +826,9 @@  else
 DEBUG_CFLAGS	+= -g
 endif
 
+ifndef LLVM_IAS
 KBUILD_AFLAGS	+= -Wa,-gdwarf-2
+endif
 
 ifdef CONFIG_DEBUG_INFO_DWARF4
 DEBUG_CFLAGS	+= -gdwarf-4