Skip to contentSkip to conversation

difficulty with symbol export

DISCUSSION V. Guruprasad 2 participants 3 messages Apr 29, 2002

lore
Share & tools
lore
#0 lore raw

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

#1 lore raw
Quoted 4 lines · V. Guruprasad

at the bottom of net/socket.c, and

	EXPORT_SYMBOL(get_socket_fileops);
Quoted 8 lines

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

#2 lore raw
In reply to V. Guruprasad
Quoted 3 lines · Kai Germaschewski

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