From: jim.cromie@gmail.com (Jim Cromie)
To: kernelnewbies@lists.kernelnewbies.org
Subject: Incremental Linking
Date: Mon, 28 May 2012 01:58:47 -0600 [thread overview]
Message-ID: <CAJfuBxyuQuuUvDfa_ovpvZiC9u67vo4uo1Uf7xOnfdASs7BBVw@mail.gmail.com> (raw)
In-Reply-To: <CAP2rAF877t2gtE8sQYqMkjRrEUq1aPyYxjYprNt6_p9R4jC0kw@mail.gmail.com>
On Wed, May 23, 2012 at 10:51 AM, Sarbojit Ganguly
<unixman.linuxboy@gmail.com> wrote:
> Hello Dave,
>
> I tried to explain this feature (no doubt you have explain it
> perfectly) but he is looking for _how_ kernel module gets loaded and
> somehow (I wonder how!) dubs the entire process as "incremental link"
> !
>
The easiest way to see the whole process happening is to turn on debug,
then modprobe a module. youll see lots of details.
If you build 3.5-rc0 (ie rc1 is not done yet), and turn on CONFIG_DYNAMIC_DEBUG,
you can enable the pr_debugs selectively, and narrow down to the info
that you want.
heres some of the info youll see:
jimc at jimc-desktop:~/projects/lx/linux-2.6$ grep pr_debug kernel/module.c
pr_debug("Failed to find symbol %s\n", name);
pr_debug("%s uses %s!\n", a->name, b->name);
pr_debug("%s does not use %s!\n", a->name, b->name);
pr_debug("Allocating new usage for %s.\n", a->name);
pr_debug("%s unusing %s\n", mod->name, i->name);
pr_debug("Looking at refcount...\n");
pr_debug("%s already dying\n", mod->name);
pr_debug("Found checksum %lX vs module %lX\n",
pr_debug("Common symbol: %s\n", name);
pr_debug("Absolute symbol: 0x%08lx\n",
pr_debug("Core section allocation order:\n");
pr_debug("\t%s\n", sname);
pr_debug("Init section allocation order:\n");
pr_debug("\t%s\n", sname);
pr_debug("\t%s\n", info->secstrings + symsect->sh_name);
pr_debug("\t%s\n", info->secstrings + strsect->sh_name);
pr_debug("final section addresses:\n");
pr_debug("\t0x%lx %s\n",
pr_debug("load_module: umod=%p, len=%lu, uargs=%p\n",
I dont recall if it gets into symbol-by-symbol linking, but it might.
Read Doc/dynamic_debug_howto for more usage info.
Daves simple example would be valuable to look at,
esp with readelf and objdump.
> On 23 May 2012 21:47, Dave Hylands <dhylands@gmail.com> wrote:
>> Hi Somanath,
>>
>> On Tue, May 22, 2012 at 2:56 AM, somanath sahoo <bapi_mvit2004@yahoo.com> wrote:
>>> Hi,
>>>
>>> As newbie in linux kernel,?I would like to?understand?the concept of
>>> "incremental linking?" w.r.t to linux kernel module.
>>
>> Incremental linking is basically just taking some objects files,
>> linking them together to produce a larger object file. The object file
>> still has undefined references. It will also coalesce sections of the
>> same name. The kernel likes to use sections for storing pointers to
>> initcall functions and other things like that.
>>
>> Some people might also call this partial linking. The kernel uses this
>> technique for the main portion of the kernel as well. If you look
>> through your build directory, you will find a whole bunch of
>> built-in.o files. Each one of these is a partially linked object file
>> containing all of the object files from the current directory and
>> built-in.o files from directories below.
>>
>> With kernel modules, there are some special automatically generated C
>> files which also get linked in (IIRC that have a name like foo.mod.c)
>>
>> A kernel module is conceptually identical to a shared library (which
>> is also partially linked and may contain unresolved references).
>>
>> You can do incremental linking ?by doing:
>>
>> echo "int foo1(void) { return 1; }" > foo1.c
>> echo "int foo2(void) { return 2; }" > foo2.c
>> gcc -c foo1.c
>> gcc -c foo2.c
>> ld -r -o foo.o foo1.o foo2.o
>>
>> You'll now have foo.o which has both foo1.o and foo2.o partially
>> linked together, which you can see by using:
>>
>> nm foo.o
>>
>> --
>> Dave Hylands
>> Shuswap, BC, Canada
>> http://www.davehylands.com
>>
>> _______________________________________________
>> Kernelnewbies mailing list
>> Kernelnewbies at kernelnewbies.org
>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
prev parent reply other threads:[~2012-05-28 7:58 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-22 9:56 Incremental Linking somanath sahoo
2012-05-22 15:17 ` Jonathan Neuschäfer
2012-05-23 5:39 ` somanath sahoo
[not found] ` <CAP2rAF8dY4tS3aZ_+OBnv2eNK07wMvhjoC=TEaQF8AGXgc=5vg@mail.gmail.com>
[not found] ` <1337757675.30429.YahooMailNeo@web161202.mail.bf1.yahoo.com>
2012-05-23 7:50 ` Sarbojit Ganguly
2012-05-23 7:51 ` Sarbojit Ganguly
2012-05-22 17:40 ` Mulyadi Santosa
2012-05-23 16:17 ` Dave Hylands
2012-05-23 16:51 ` Sarbojit Ganguly
2012-05-23 17:03 ` Dave Hylands
2012-05-28 7:58 ` Jim Cromie [this message]
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=CAJfuBxyuQuuUvDfa_ovpvZiC9u67vo4uo1Uf7xOnfdASs7BBVw@mail.gmail.com \
--to=jim.cromie@gmail.com \
--cc=kernelnewbies@lists.kernelnewbies.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;
as well as URLs for NNTP newsgroup(s).