public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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


  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