Kernel dumps stacks while calling exported function from a loadable module
Hello everyone,
I am having trouble in calling exported functions on my RH 7.2 box. running 2.4.9-18 kernel. The calling module causes kernel stack dumps with messages like this:
insmod[1508]: Unimplemented Instruction Address fault 4398046511120 Using_Versions [] 0x2047fff <--
::
My modules are really trivial. The one exported a dummy function is listed below:
void dummy(void)
{
printk("Dummy is called!\n");
}
int init_module(void)
{
printk("<1>Hello, world\n");
return 0;
}
And the calling module looks like this:
extern void dummy(void);
int init_module(void)
{
printk("<00>Hello, world\n");
dummy();
printk("done\n");
return 0;
}
The compilation line looks like this:
/opt/gcc3.1/bin/gcc -c -DLINUX -D__SMP__ -D"__BOOT_KERNEL_SMP=1" -D"__BOOT_KERNEL_UP=0" -O2 -Wall -Wstrict-prototypes -D__ia64__ -D_LP64 -ffixed-r13 -mfixed-range=f10-f15,f32-f127 -falign-functions=32 -fno-common -Wno-unused -mb-step -I -I/usr/src/linux-2.4/drivers/scsi -I -I/scsi -I/usr/src/linux-2.4/drivers/scsi -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4/include/linux/modversions.h-D__KERNEL__ myhello1.c
The module that exports function loads without any problems but the calling module fails.
Any input regarding this matter is greatly appreciated.
Jeff Lee
Quoted 2 lines · Jeff Lee
I am having trouble in calling exported functions on my RH 7.2 box. running 2.4.9-18 kernel. The calling module causes kernel stack dumps
My understanding is that this kernel was compiled with gcc 2.96 ...
Quoted 8 lines
The compilation line looks like this:
/opt/gcc3.1/bin/gcc-c -DLINUX -D__SMP__ -D"__BOOT_KERNEL_SMP=1"(quoted diff) +0
-4-D"__BOOT_KERNEL_UP=0" -O2 -Wall -Wstrict-prototypes -D__ia64__ -D_LP64 -ffixed-r13 -mfixed-rangeñ0-f15,f32-f127 -falign-functions2 -fno-common -Wno-unused -mb-step -I -I/usr/src/linux-2.4/drivers/scsi -I -I/scsi -I/usr/src/linux-2.4/drivers/scsi -DMODULE -DMODVERSIONS -include
/usr/src/linux-2.4/include/linux/modversions.h-D__KERNEL__myhello1.c
... and you're using gcc 3.1, so maybe this compiler mismatch is causing the problem?
Signature · 1 line
Revolutions do not require corporate support.
Quoted 7 lines · Jeff Lee
My kernel was from the RH installation CD. I haven't touched it yet.
I used gcc3.1 for a reason: the 2.96 gcc causes the same problem; hence I tried gcc3.1 but that doesn't seem to matter,
Actually, I tried a little experiment. I printed the address of
dummy()out; surprisingly, the reading ofdummy()is different in the exporting module from the calling module (no wonder the kernel stacks). But, any other global variables look fine.What so special about the kernel function symbols in IA 64?
A pointer to a function on ia64 is actually a pointer to a struct containing the address of the function and the data pointer to use in the function.
Richard
TXkga2VybmVsIHdhcyBmcm9tIHRoZSBSSCBpbnN0YWxsYXRpb24gQ0QuICBJIGhhdmVuJ3QgdG91 Y2hlZCBpdCB5ZXQuDQoNCkkgdXNlZCBnY2MzLjEgZm9yIGEgcmVhc29uOiB0aGUgMi45NiBnY2Mg Y2F1c2VzIHRoZSBzYW1lIHByb2JsZW07IGhlbmNlIEkgdHJpZWQgZ2NjMy4xIGJ1dCB0aGF0IGRv ZXNuJ3Qgc2VlbSB0byBtYXR0ZXIsDQoNCkFjdHVhbGx5LCBJIHRyaWVkIGEgbGl0dGxlIGV4cGVy aW1lbnQuICBJIHByaW50ZWQgdGhlIGFkZHJlc3Mgb2YgZHVtbXkoKSBvdXQ7ICBzdXJwcmlzaW5n bHksIHRoZSByZWFkaW5nIG9mIGR1bW15KCkgaXMgZGlmZmVyZW50IGluIHRoZSBleHBvcnRpbmcg bW9kdWxlIGZyb20gdGhlIGNhbGxpbmcgbW9kdWxlIChubyB3b25kZXIgdGhlIGtlcm5lbCBzdGFj a3MpLiAgQnV0LCBhbnkgb3RoZXIgZ2xvYmFsIHZhcmlhYmxlcyBsb29rIGZpbmUuICANCg0KV2hh dCBzbyBzcGVjaWFsIGFib3V0IHRoZSBrZXJuZWwgZnVuY3Rpb24gc3ltYm9scyBpbiBJQSA2ND8N Cg0KSmVmZg0KDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiB3aWxseUB3d3cu bGludXgub3JnLnVrIFttYWlsdG86d2lsbHlAd3d3LmxpbnV4Lm9yZy51a11PbiBCZWhhbGYgT2Yg TWF0dGhldyBXaWxjb3gNClNlbnQ6IFR1ZXNkYXksIEF1Z3VzdCAyMCwgMjAwMiA3OjExIFBNDQpU bzogSmVmZiBMZWUNCkNjOiBsaW51eC1pYTY0QGxpbnV4aWE2NC5vcmcNClN1YmplY3Q6IFJlOiBb TGludXgtaWE2NF0gS2VybmVsIGR1bXBzIHN0YWNrcyB3aGlsZSBjYWxsaW5nIGV4cG9ydGVkIGZ1 bmN0aW9uIGZyb20gYSBsb2FkYWJsZSBtb2R1bGUNCg0KT24gVHVlLCBBdWcgMjAsIDIwMDIgYXQg MDU6NTI6MzJQTSArMDgwMCwgSmVmZiBMZWUgd3JvdGU6DQo+IEkgYW0gaGF2aW5nIHRyb3VibGUg aW4gY2FsbGluZyBleHBvcnRlZCBmdW5jdGlvbnMgb24gbXkgUkggNy4yIGJveC4NCj4gcnVubmlu ZyAyLjQuOS0xOCBrZXJuZWwuICBUaGUgY2FsbGluZyBtb2R1bGUgY2F1c2VzIGtlcm5lbCBzdGFj ayBkdW1wcw0KDQpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBrZXJuZWwgd2FzIGNvbXBp bGVkIHdpdGggZ2NjIDIuOTYgLi4uDQoNCj4gVGhlIGNvbXBpbGF0aW9uIGxpbmUgbG9va3MgbGlr ZSB0aGlzOg0KPg0KPiAvb3B0L2djYzMuMS9iaW4vZ2NjIC1jIC1ETElOVVggLURfX1NNUF9fIC1E Il9fQk9PVF9LRVJORUxfU01QPTEiDQo+IC1EIl9fQk9PVF9LRVJORUxfVVA9MCIgIC1PMiAtV2Fs bCAtV3N0cmljdC1wcm90b3R5cGVzICAtRF9faWE2NF9fIC1EX0xQNjQNCj4gLWZmaXhlZC1yMTMg LW1maXhlZC1yYW5nZT1mMTAtZjE1LGYzMi1mMTI3IC1mYWxpZ24tZnVuY3Rpb25zPTMyDQo+IC1m bm8tY29tbW9uIC1Xbm8tdW51c2VkIC1tYi1zdGVwIC1JIC1JL3Vzci9zcmMvbGludXgtMi40L2Ry aXZlcnMvc2NzaSAtSQ0KPiAtSS9zY3NpICAtSS91c3Ivc3JjL2xpbnV4LTIuNC9kcml2ZXJzL3Nj c2kgLURNT0RVTEUgLURNT0RWRVJTSU9OUyAtaW5jbHVkZQ0KPiAvdXNyL3NyYy9saW51eC0yLjQv aW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oLURfX0tFUk5FTF9fICBteWhlbGxvMS5jDQoNCi4u IGFuZCB5b3UncmUgdXNpbmcgZ2NjIDMuMSwgc28gbWF5YmUgdGhpcyBjb21waWxlciBtaXNtYXRj aCBpcyBjYXVzaW5nDQp0aGUgcHJvYmxlbT8NCg0KLS0NClJldm9sdXRpb25zIGRvIG5vdCByZXF1 aXJlIGNvcnBvcmF0ZSBzdXBwb3J0LiANCg=