why a static function is in kernel symbol table

Ji Li lijimlee at gmail.com
Fri Jun 13 22:54:11 EDT 2014


I think I found the cause. After GCC optimization, those static
functions are not visible any more in the object file (not sure
because of function inlining?). Thus, they don't show up in vmlinux or
/proc/kallsyms.

I tried changing it to -O0, they all show up.

Thanks,
Ji

On Fri, Jun 13, 2014 at 12:10 AM, Ji <lijimlee at gmail.com> wrote:
> Thank you very much for replying.
>
> I actually notice that there are many static functions in that file.
> However, some of them show up in symbol table, the rest do not. So  what you
> are saying is that there is no connection between being a static function
> and showing up in kernel symbol table. Then what causes the difference
> appearing in symbol table or not? In other word, if i add a new static
> function and like it in kallsyms, what should I do?
>
> Thanks,
> Ji
> ________________________________
> From: Valdis.Kletnieks at vt.edu
> Sent: ‎6/‎12/‎2014 8:47 PM
> To: Ji Li
> Cc: Kernelnewbies at kernelnewbies.org
> Subject: Re: why a static function is in kernel symbol table
>
> On Thu, 12 Jun 2014 16:23:58 -0700, Ji Li said:
>
>> I happened to find that a static function show up in kernel symbol table:
>
>> Could anyone kindly cast some light?
>
> Hint: 'static' prevents code in other compilation units (basically, other .c
> files) from referencing it directly (though they can still access it via a
> function pointer variable or other similar tricks).  That does *not* mean
> that
> other code in the *same* compilation unit can't reference the static
> function
> in a way that requires a symbol table entry...
>



More information about the Kernelnewbies mailing list