Hi,

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.

With

$ 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!

bye,
  Roland
--- xenomai-2.5.1.orig/include/asm-x86/syscall.h
+++ xenomai-2.5.1/include/asm-x86/syscall.h
@@ -161,9 +161,11 @@
      ".endif\n\t"
      ".endm\n\t");
 
-static inline void __xn_get_eip(void **dest)
+__attribute__((always_inline))
+extern inline void __xn_get_eip(void **dest)
 {
-        asm volatile("movl $1f, %0; 1:": "=m"(*dest));
+addr:
+	*dest = &&addr;
 }
 
 static inline void __xn_get_ebp(void **dest)
_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to