2002-04-29 12:35:26

by V. Guruprasad

[permalink] [raw]
Subject: difficulty with symbol export


Hi all,


Just playing with the kernel code, I added a silly function

struct file_operations *get_socket_fileops ()
{
return &socket_file_ops;
}

at the bottom of net/socket.c, and

EXPORT_SYMBOL(get_socket_fileops);

into net/netsyms.c, expecting to be able to call this function
from a loadable module and to printk the function addresses
from the file_operations struct.

However, on rebooting into this modified kernel, my test module
fails to load, saying

foo.o: unresolved symbol get_socket_fileops

even though the symbol looks exported in vmlinux (nm) and
in /boot/System.map:

c020ca90 T get_socket_fileops
0c2b52bf ? __kstrtab_get_socket_fileops
0c2ba358 ? __ksymtab_get_socket_fileops

which looks exactly like sock_create, which the module *is*
able to address.

Any pointers?


thanks,
-prasad.

------------------------
V. Guruprasad ('prasad'),
http://www.columbia.edu/~vg96


2002-04-29 14:55:55

by Kai Germaschewski

[permalink] [raw]
Subject: Re: difficulty with symbol export

On Mon, 29 Apr 2002, V. Guruprasad wrote:

> at the bottom of net/socket.c, and
>
> EXPORT_SYMBOL(get_socket_fileops);
>
> into net/netsyms.c, expecting to be able to call this function
> from a loadable module and to printk the function addresses
> from the file_operations struct.
>
> However, on rebooting into this modified kernel, my test module
> fails to load, saying
>
> foo.o: unresolved symbol get_socket_fileops

Basically, you're doing the right thing - what output does

grep get_socket_fileops /proc/ksyms

show?

Do you have CONFIG_MODVERSIONS turned on in your kernel config? If so,
you probably want to save your .config, make distclean and rebuild from
scratch - that will likely fix the problem.

--Kai


2002-04-29 15:16:12

by V. Guruprasad

[permalink] [raw]
Subject: Re: difficulty with symbol export


On Mon 2002.04.29, Kai Germaschewski wrote:

> Do you have CONFIG_MODVERSIONS turned on in your kernel config? If so,
> you probably want to save your .config, make distclean and rebuild from
> scratch - that will likely fix the problem.

Thanks, that solved it. Evidently, a 'make dep' was required which makes
#defines in include/linux/modules/netsyms.ver

thanks,
-p.

------------------------
V. Guruprasad ('prasad'),
http://www.columbia.edu/~vg96