Linux-RISC-V Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Alexandre Ghiti <alex@ghiti.fr>
To: Masahiro Yamada <masahiroy@kernel.org>,
	Charlie Jenkins <charlie@rivosinc.com>
Cc: Nathan Chancellor <nathan@kernel.org>,
	Nicolas Schier <nicolas@fjasle.eu>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-riscv@lists.infradead.org
Subject: Re: [PATCH] kbuild: Use --strip-unneeded with INSTALL_MOD_STRIP
Date: Mon, 21 Apr 2025 08:06:05 +0200	[thread overview]
Message-ID: <c14fc927-a70f-445d-ad38-e7b9a7ebc857@ghiti.fr> (raw)
In-Reply-To: <28018be2-eabc-4d6f-9bb1-913a1f0515db@ghiti.fr>

Hi Masahiro,

On 03/04/2025 17:07, Alexandre Ghiti wrote:
> Hi Masahiro,
>
> On 05/02/2025 16:00, Masahiro Yamada wrote:
>> On Wed, Feb 5, 2025 at 3:29 AM Charlie Jenkins <charlie@rivosinc.com> 
>> wrote:
>>> On Tue, Feb 04, 2025 at 01:04:26PM +0900, Masahiro Yamada wrote:
>>>> On Sat, Feb 1, 2025 at 6:33 AM Charlie Jenkins 
>>>> <charlie@rivosinc.com> wrote:
>>>>> On Sat, Feb 01, 2025 at 12:10:02AM +0900, Masahiro Yamada wrote:
>>>>>> On Fri, Jan 31, 2025 at 3:54 PM Charlie Jenkins 
>>>>>> <charlie@rivosinc.com> wrote:
>>>>>>> On Thu, Jan 30, 2025 at 08:52:45PM -0700, Nathan Chancellor wrote:
>>>>>>>> On Wed, Jan 22, 2025 at 07:17:26PM -0800, Charlie Jenkins wrote:
>>>>>>>>> On riscv, kernel modules end up with a significant number of 
>>>>>>>>> local
>>>>>>>>> symbols. This becomes apparent when compiling modules with 
>>>>>>>>> debug symbols
>>>>>>>>> enabled. Using amdgpu.ko as an example of a large module, on 
>>>>>>>>> riscv the
>>>>>>>>> size is 754MB (no stripping), 53MB (--strip-debug), and 21MB
>>>>>>>>> (--strip-unneeded). ON x86, amdgpu.ko is 482MB (no stripping), 
>>>>>>>>> 21MB
>>>>>>>>> (--strip-debug), and 20MB (--strip-unneeded).
>>>>>>>>>
>>>>>>>>> Use --strip-unneeded instead of --strip-debug to strip modules so
>>>>>>>>> decrease the size of the resulting modules. This is particularly
>>>>>>>>> relevant for riscv, but also marginally aids other architectures.
>>>>>>>>>
>>>>>>>>> Signed-off-by: Charlie Jenkins <charlie@rivosinc.com>
>>>>>>>> Is there any sort of regression risk with this patch? If so, 
>>>>>>>> another
>>>>>>>> option may be to give another level to INSTALL_MOD_STRIP like 2 
>>>>>>>> so that
>>>>>>>> INSTALL_MOD_STRIP=1 continues to behave as before but people 
>>>>>>>> can easily
>>>>>>>> opt into this option. No strong opinion because I am not sure 
>>>>>>>> but was
>>>>>>>> not sure if it was considered.
>>>>>>> I do not believe this would cause regressions. The description 
>>>>>>> on gnu
>>>>>>> strip is:
>>>>>>>
>>>>>>> "Remove all symbols that are not needed for relocation 
>>>>>>> processing in
>>>>>>> addition to debugging symbols and sections stripped by 
>>>>>>> --strip-debug."
>>>>>>>
>>>>>>> The description on llvm-strip is:
>>>>>>>
>>>>>>> "Remove from the output all local or undefined symbols that are not
>>>>>>> required by relocations. Also remove all debug sections."
>>>>>>>
>>>>>>> gnu strip --strip-unneeded strips slightly more aggressively but 
>>>>>>> it does
>>>>>>> not appear this causes any issues.
>>>>>>>
>>>>>>>> Regardless:
>>>>>>>>
>>>>>>>> Reviewed-by: Nathan Chancellor <nathan@kernel.org>
>>>>>>> Thanks!
>>>>>>>
>>>>>>
>>>>>> It is true --strip-unneeded drops a lot of compiler-generated 
>>>>>> symbols, but
>>>>>> it also drops real symbols that originate in the source code.
>>>>>>
>>>>>> So, this would give user-visible changes for kallsyms at least.
>>>>> Adding INSTALL_MOD_STRIP="--strip-unneeded" would be sufficient for
>>>>> riscv. However, this has the downside that riscv will require 
>>>>> different
>>>>> flags than other architectures to get reasonably sized modules.
>>>> You can use INSTALL_MOD_STRIP=--strip-unneeded for all architecture 
>>>> if you like.
>>>>
>>>> I assume this is a riscv issue. Specifically, riscv gcc.
>>>> With LLVM=1, I see much smaller riscv modules using 
>>>> INSTALL_MOD_STRIP=1.
>>>>
>>>> --strip-unneeded is needlessly aggressive for other architectures,
>>>> and I do not see a good reason to change the default.
>>> Yes it is primarily an issue with riscv GCC. I was hoping for something
>>> more standardized so that other people using riscv GCC wouldn't
>>> encounter this. Would it be reasonable to add this flag by default only
>>> for the riscv architecture, or do you think it's just better to 
>>> leave it
>>> up to the user's choice?
>> The latter.
>>
>> INSTALL_MOD_STRIP=1 passes --strip-debug.
>> This is clearly documented in Documentation/kbuild/makefiles.rst
>> and it has worked like that for many years, with no exception.
>>
>> If users want it to work differently, the flexibility is already there.
>>
>> If INSTALL_MOD_STRIP=1 worked differently, silently only for riscv,
>> I would regard it as insane behavior.
>>
>>
>
> I find it a bit "harsh" for users to know that on riscv, they need to 
> set INSTALL_MOD_STRIP to have modules with a "normal" size.
>
> So I'd rather have it set by default for riscv, would the following be 
> acceptable for you?
>
> diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile
> index 13fbc0f942387..c49b9dda20cd1 100644
> --- a/arch/riscv/Makefile
> +++ b/arch/riscv/Makefile
> @@ -6,6 +6,8 @@
>  # for more details.
>  #
>
> +INSTALL_MOD_STRIP := --strip-unneeded
> +
>  LDFLAGS_vmlinux := -z norelro
>  ifeq ($(CONFIG_RELOCATABLE),y)
>         LDFLAGS_vmlinux += -shared -Bsymbolic -z notext --emit-relocs
> diff --git a/scripts/Makefile.modinst b/scripts/Makefile.modinst
> index 1628198f3e830..e60895761b73b 100644
> --- a/scripts/Makefile.modinst
> +++ b/scripts/Makefile.modinst
> @@ -77,6 +77,8 @@ quiet_cmd_install = INSTALL $@
>  # are installed. If INSTALL_MOD_STRIP is '1', then the default option
>  # --strip-debug will be used. Otherwise, INSTALL_MOD_STRIP value will 
> be used
>  # as the options to the strip command.
> +# Read arch-specific Makefile to set INSTALL_MOD_STRIP as needed.
> +include $(srctree)/arch/$(SRCARCH)/Makefile
>  ifdef INSTALL_MOD_STRIP
>
>  ifeq ($(INSTALL_MOD_STRIP),1)
>
>
> Thanks,
>
> Alex


Any thoughts on this? I'd really like to merge this for riscv.

Thanks,

Alex


>
>

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

  reply	other threads:[~2025-04-21  6:10 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-23  3:17 [PATCH] kbuild: Use --strip-unneeded with INSTALL_MOD_STRIP Charlie Jenkins
2025-01-31  3:52 ` Nathan Chancellor
2025-01-31  6:54   ` Charlie Jenkins
2025-01-31 15:10     ` Masahiro Yamada
2025-01-31 21:33       ` Charlie Jenkins
2025-02-04  4:04         ` Masahiro Yamada
2025-02-04 18:29           ` Charlie Jenkins
2025-02-05 15:00             ` Masahiro Yamada
2025-04-03 15:07               ` Alexandre Ghiti
2025-04-21  6:06                 ` Alexandre Ghiti [this message]
2025-01-31 14:26   ` Masahiro Yamada

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c14fc927-a70f-445d-ad38-e7b9a7ebc857@ghiti.fr \
    --to=alex@ghiti.fr \
    --cc=aou@eecs.berkeley.edu \
    --cc=charlie@rivosinc.com \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=masahiroy@kernel.org \
    --cc=nathan@kernel.org \
    --cc=nicolas@fjasle.eu \
    --cc=palmer@dabbelt.com \
    --cc=paul.walmsley@sifive.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox