All of lore.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.