lkml.org 
[lkml]   [2004]   [May]   [10]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
DateMon, 10 May 2004 10:56:06 -0700
From"Randy.Dunlap" <>
SubjectRe: [PATCH*] show last kernel-image symbol in /proc/kallsyms
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@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:03    [from the cache]
©2003-2008