From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: linux-parisc@vger.kernel.org
Subject: [RFC] fix the relative jump problem on large modules
Date: Fri, 18 Jun 2010 10:03:27 -0500 [thread overview]
Message-ID: <1276873407.2850.35.camel@mulgrave.site> (raw)
Part of this arguing with ksplice about their plan for
-ffunction-sections and -fdata-sections got me thinking about how we do
modules. Right at the moment we have one section for every function in
a module, which leads to a massive amount of relocation overhead in the
in-kernel module loader. Plus for some modules (ipv6, I believe), we
lack the relative jumps to get out of the function because we only put
the stubs after all the text sections.
The way to fix all of this, I think, is to make the real linker do more
work. It should be beneficial to us because the linker *should* be able
to rearrange the sections to get the maximum number of jumps satisfiable
relatively.
I've tested that this works on pa8800 systems, but I'd really like
someone to try a failing module on a 32 bit platform (since 64 bits has
22 bit relative jumps, all the modules actually work). You can see some
of the savings in the scsi_mod.ko
Before: 325 sections, 6366 relocation symbols
After: 23 sections, 5244 relocation symbols
James
---
diff --git a/arch/parisc/Makefile b/arch/parisc/Makefile
index 55cca1d..ab88f11 100644
--- a/arch/parisc/Makefile
+++ b/arch/parisc/Makefile
@@ -21,6 +21,7 @@ KBUILD_DEFCONFIG := default_defconfig
NM = sh $(srctree)/arch/parisc/nm
CHECKFLAGS += -D__hppa__=1
+LDFLAGS_MODULE += -T $(srctree)/arch/parisc/kernel/module.lds
MACHINE := $(shell uname -m)
ifeq ($(MACHINE),parisc*)
diff --git a/arch/parisc/kernel/module.lds b/arch/parisc/kernel/module.lds
new file mode 100644
index 0000000..42ee3eb
--- /dev/null
+++ b/arch/parisc/kernel/module.lds
@@ -0,0 +1,6 @@
+SECTIONS {
+ .text : {
+ /* Gather all function sections */
+ *(.text.*)
+ }
+}
next reply other threads:[~2010-06-18 15:03 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-18 15:03 James Bottomley [this message]
2010-06-18 20:40 ` [RFC] fix the relative jump problem on large modules Helge Deller
2010-06-19 22:21 ` Helge Deller
2010-06-19 22:57 ` James Bottomley
2010-06-19 23:21 ` John David Anglin
2010-06-20 13:55 ` James Bottomley
2010-06-20 14:35 ` John David Anglin
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=1276873407.2850.35.camel@mulgrave.site \
--to=james.bottomley@hansenpartnership.com \
--cc=linux-parisc@vger.kernel.org \
/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