I'm just working on the Xenomai 2.5.1 Debian package and encountered non-PIC code (evil! ;-) in the shared libraries (skins libraries).

You can see it with e.g.

$ readelf -d src/skins/native/.libs/libnative.so.3.0.0

The "TEXTREL" tag indicates non-PIC code.

$ scanelf -qT src/skins/native/.libs/libnative.so.3.0.0

Shows the function and code offset of the relocation.


$ objdump -d src/skins/native/.libs/libnative.so.3.0.0

I found the actual location of the relocation.

I prepared a patch (attached) that fixes it: First, the relocation itself by letting GCC create the address in PIC style. Second, "extern inline" looks a bit counterintuitive at first, but according to the GCC manual, it seems to be what we want (macro behaviour).

Thanks Jan for reminding me!

--- xenomai-2.5.1.orig/include/asm-x86/syscall.h
+++ xenomai-2.5.1/include/asm-x86/syscall.h
@@ -161,9 +161,11 @@
-static inline void __xn_get_eip(void **dest)
+extern inline void __xn_get_eip(void **dest)
-        asm volatile("movl $1f, %0; 1:": "=m"(*dest));
+	*dest = &&addr;
 static inline void __xn_get_ebp(void **dest)
Xenomai-core mailing list

Reply via email to