From: Adrian Bunk <bunk@stusta.de>
To: Kai Germaschewski <kai.germaschewski@unh.edu>
Cc: Rusty Russell <rusty@rustcorp.com.au>,
Andrew Morton <akpm@osdl.org>, Sam Ravnborg <sam@ravnborg.org>,
Vincent Vanackere <vincent.vanackere@gmail.com>,
keenanpepper@gmail.com,
lkml - Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: Undefined symbols in 2.6.11-rc5-mm1
Date: Sat, 5 Mar 2005 18:15:56 +0100 [thread overview]
Message-ID: <20050305171556.GE6373@stusta.de> (raw)
In-Reply-To: <Pine.LNX.4.44.0503051108300.20560-100000@chaos.sr.unh.edu>
On Sat, Mar 05, 2005 at 11:36:23AM -0500, Kai Germaschewski wrote:
> On Sat, 5 Mar 2005, Adrian Bunk wrote:
>
> > This warning sounds like a good plan (but it won't let many objects stay
> > inside lib-y).
>
> The patch is simple (except that the warning it throws looks rather ugly),
> see appended.
>
> However, I spoke too soon. There actually is a legitimate use for
> EXPORT_SYMBOL() in a lib-y object, e.g. lib/dump_stack.c. This provides a
> default implementation for dump_stack(). Most archs provide their own
> implementation (and EXPORT_SYMBOL() it), and in this case we definitely
> want the default version in lib to be thrown away, including its
> EXPORT_SYMBOL. So the appended patch throws false positives and thus can
> not be applied.
That's usually solved through #define's (see e.g. lib/extable.c).
> Still, many files in lib-y "should" be moved to obj-y. Then again, the
> clear cases (e.g. ctype, vsnprintf) are getting used in the static kernel
> image, so they get linked in anyway, moving them from lib-y to obj-y
> doesn't make any difference whatsoever.
>
> The interesting cases are more of the crc32 type -- some people may not
> use this at all, so they want the space savings. Moving all of those into
> obj-y unconditionally creates unnecessary bloat. Actually, crc32 already
> did the right thing -- a config option. That would work for parser.o, too,
> just make the filesystems which need it "select CONFIG_PARSER".
It's used by many filesystems plus some optional part of the USB code.
Basically, there are two choices:
- always include a function
- include a function only if required
The second one is possible, but object files are the wrong granularity -
why should it pull the whole parser.c if only match_strdup was required?
You have all possibilities with #define's.
> I think there are basically three cases of objects in lib-y:
>
> o functions we clearly use anyway, e.g. vsprintf.o.
> these should be always available, also for modules (pretty much every
> module uses printk, right?)
> So these should be in obj-y, however since they always get used in the
> kernel, too, independent of the .config, in practice there's no
> difference to them being in lib-y.
Agreed.
> o "weak" implementations, which may be overwritten by a arch-specific
> implementation.
> These need to be in lib-y for this mechanism to work.
This doesn't work if the object file also contains other code.
> o Marginal cases like crc32.o, parser.o, bitmap.o
> There are real world cases out there where these functions will never be
> used, so just compiling them into the kernel because one day there may
> be a module which wants to use them does cause some bloat. Making them
> config options and have every module which needs them mention them in
> Kconfig causes some bloat on the source side.
Can you send a .config where bitmap.o isn't used?
> It's a trade-off. In my tree (current -bk), parser.o symbols are
> referenced by procfs, i.e. 99.9% of all builds will pull it in anyway.
> So putting it into obj-y is a good solution, IMO. (Do I hear the
> embedded people cry?)
> I guess in -mm this changed, which may justify going to CONFIG_PARSER
> (along the lines of CONFIG_CRC32) way. Then again, .text of
> parser.o is 0x373 bytes on my x86_64 system. Not a whole lot to
> lose when it's compiled in unconditionally. (And it's used among others
> by ext2 and ext3, so chances are, you need it anyway)
As above:
If you care about code size, CONFIG_PARSER gives the wrong granularity.
My general impression is:
Everything lib-y does can be done with obj- and #define's.
And this way, it's done explicit.
I'm not really happy with tricks like compiling two versions of
dump_stack() and the linker somehow discards the right one.
> --Kai
>...
cu
Adrian
--
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed
next prev parent reply other threads:[~2005-03-05 17:20 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-03-02 5:37 Undefined symbols in 2.6.11-rc5-mm1 Keenan Pepper
2005-03-02 9:23 ` Andrew Morton
2005-03-02 9:45 ` Vincent Vanackere
2005-03-02 11:24 ` Andrew Morton
2005-03-02 13:26 ` Vincent Vanackere
2005-03-02 14:00 ` Adrian Bunk
2005-03-02 16:28 ` Andrew Morton
2005-03-02 17:23 ` Valdis.Kletnieks
2005-03-02 17:34 ` Andrew Morton
2005-03-04 10:26 ` Rusty Russell
2005-03-03 13:41 ` Adrian Bunk
2005-03-04 10:23 ` Rusty Russell
2005-03-04 18:56 ` Adrian Bunk
2005-03-04 19:13 ` Adrian Bunk
2005-03-04 19:11 ` Kai Germaschewski
2005-03-04 20:28 ` Adrian Bunk
2005-03-05 5:09 ` Kai Germaschewski
2005-03-05 13:04 ` Adrian Bunk
2005-03-05 15:19 ` Kai Germaschewski
2005-03-05 15:36 ` Adrian Bunk
2005-03-05 16:36 ` Kai Germaschewski
2005-03-05 17:15 ` Adrian Bunk [this message]
2005-03-05 18:48 ` Kai Germaschewski
2005-03-05 23:58 ` Christoph Hellwig
2005-03-05 23:57 ` Christoph Hellwig
[not found] ` <4225C613.7010701@gmail.com>
2005-03-02 14:03 ` Keenan Pepper
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=20050305171556.GE6373@stusta.de \
--to=bunk@stusta.de \
--cc=akpm@osdl.org \
--cc=kai.germaschewski@unh.edu \
--cc=keenanpepper@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rusty@rustcorp.com.au \
--cc=sam@ravnborg.org \
--cc=vincent.vanackere@gmail.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