Re: [PATCH*] show last kernel-image symbol in /proc/kallsyms

From: Randy.Dunlap
Date: Mon May 10 2004 - 13:06:17 EST


On Mon, 10 May 2004 14:14:10 +1000 Rusty Russell wrote:

| On Mon, 2004-05-10 at 10:14, Randy.Dunlap wrote:
| > 'cat' or 'tail' of /proc/kallsyms (2.6.6-rc2 or -rc3, & probably much
| > earlier) does not include the last kernel-image symbol (_einittext).
| >
| > _einittext is the last symbol generated in .tmp_kallsyms2.S
| > and the symbol count in that file also appears to be correct,
| > but the iterator code for /proc/kallsyms comes up 1 short somehow.
| >
| > Here are 2 patches. Either one of them "fixes" the problem.
| > Neither of them is the correct fix AFAIK.
|
| Ah, I see you are a student of the Morton school of patch extraction.
| Well, it worked.

Well.... yes.

And thanks for taking time to fix it.
It now works as expected. :)

'patch' complains about a malformed input file (the @@ line counts
don't match the patch content).
Correction is below. Or were more patch lines needed (& missing)?


| Name: Show Last Symbol in /proc/kallsyms
| Status: Tested on 2.6.6-rc3.bk11
|
| The current code doesn't show the last symbol (usually _einittext) in
| /proc/kallsyms. The reason for this is subtle: s_start() returns an
| empty string for position 0 (ignored by s_show()), and s_next()
| returns the first symbol for position 1.
|
| What should happen is that update_iter() for position 0 should fill in
| the first symbol. Unfortunately, the get_ksymbol_core() fills in the
| symbol information, *and* updates the iterator: we have to split these
| functions, which we do by making it return the length of the name
| offset.
|
| Then we can call get_ksymbol_core() without moving the iterator,
| meaning that we can call it at position 0 (ie. s_start()).
|
| diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.6-rc3-bk11/kernel/kallsyms.c working-2.6.6-rc3-bk11/kernel/kallsyms.c
| --- linux-2.6.6-rc3-bk11/kernel/kallsyms.c 2004-03-12 07:57:28.000000000 +1100
| +++ working-2.6.6-rc3-bk11/kernel/kallsyms.c 2004-05-10 13:11:06.000000000 +1000
| @@ -210,16 +212,16 @@ static int update_iter(struct kallsym_it
***** should be: @@ -210,9 +212,10 @@

|
| /* We need to iterate through the previous symbols: can be slow */
| for (; iter->pos != pos; iter->pos++) {
| - get_ksymbol_core(iter);
| + iter->nameoff += get_ksymbol_core(iter);
| cond_resched();
| }
| + get_ksymbol_core(iter);
| return 1;
| }
|

--
~Randy
(Again. Sometimes I think ln -s /usr/src/linux/.config .signature) -- akpm
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/