[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

how to solve a non pic code in an shlib due to assembly code



hello, mentors

This mail to speak about a problematic issue that I have when
packaging a new package for debian tango-7.0.2.
http://tango-controls.org

you can find this package on mentors:
dget
http://mentors.debian.net/debian/pool/main/t/tango/tango_7.0.2-1.dsc

lintian complain about non pic code in the shlib
E: libtango7: shlib-with-non-pic-code usr/lib/libtango.so.7.0.2

here I put all the lintian message for you to understand what I am
saying.

E: libtango7: shlib-with-non-pic-code usr/lib/libtango.so.7.0.2
N: 
N:    The listed shared libraries contain object code that was compiled
N:    without -fPIC. All object code in shared libraries should be
recompiled
N:    separately from the static libraries with the -fPIC option.
N:    
N:    Another common mistake that causes this problem is linking with
gcc
N:    -Wl,-shared instead of gcc -shared.
N:    
N:    In some cases, exceptions to this rule are warranted. If this is
such a
N:    case, follow the procedure outlined in Policy and then please
document
N:    the exception by adding a lintian override to this package.
N:    
N:    To check whether a shared library has this problem, run readelf
-d on
N:    the shared library. If a tag of type TEXTREL is present, the
shared
N:    library contains non-PIC code.
N:    
N:    Refer to Debian Policy Manual section 10.2 (Libraries) for
details.
N:    
N:    Severity: serious, Certainty: certain
N: 


So I looked for gcc called with -Wl,-shared as explained, but nothing...
So I ran the `readelf -d` command as explained in the message:

picca@grisette:~/Debian/tango/tango$ readelf -d
lib/cpp/server/.libs/libtango.so.7

Dynamic section at offset 0x39a074 contains 35 entries:
  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library:
[liblog4tango.so.4]
 0x00000001 (NEEDED)                     Shared library: [libdl.so.2]
 0x00000001 (NEEDED)                     Shared library:
[libomniORB4.so.1]
 0x00000001 (NEEDED)                     Shared library:
[libomniDynamic4.so.1]
 0x00000001 (NEEDED)                     Shared library: [libCOS4.so.1]
 0x00000001 (NEEDED)                     Shared library: [libnsl.so.1]
 0x00000001 (NEEDED)                     Shared library:
[libomnithread.so.3]
 0x00000001 (NEEDED)                     Shared library:
[libpthread.so.0]
 0x00000001 (NEEDED)                     Shared library:
[libstdc++.so.6]
 0x00000001 (NEEDED)                     Shared library: [libm.so.6]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]
 0x0000000e (SONAME)                     Library soname: [libtango.so.7]
 0x0000000f (RPATH)                      Library rpath:
[/home/picca/Debian/tango/tango/lib/cpp/log4tango/src/.libs]
 0x0000000c (INIT)                       0x8337c
 0x0000000d (FINI)                       0x31e818
 0x00000004 (HASH)                       0xd4
 0x6ffffef5 (GNU_HASH)                   0x99b4
 0x00000005 (STRTAB)                     0x29b7c
 0x00000006 (SYMTAB)                     0x1384c
 0x0000000a (STRSZ)                      269687 (bytes)
 0x0000000b (SYMENT)                     16 (bytes)
 0x00000003 (PLTGOT)                     0x39a918
 0x00000002 (PLTRELSZ)                   19488 (bytes)
 0x00000014 (PLTREL)                     REL
 0x00000017 (JMPREL)                     0x7e75c
 0x00000011 (REL)                        0x6e69c
 0x00000012 (RELSZ)                      65728 (bytes)
 0x00000013 (RELENT)                     8 (bytes)
 0x00000016 (TEXTREL)                    0x0					<--------
 0x6ffffffe (VERNEED)                    0x6e55c
 0x6fffffff (VERNEEDNUM)                 6
 0x6ffffff0 (VERSYM)                     0x6b8f4
 0x6ffffffa (RELCOUNT)                   470
 0x00000000 (NULL)                       0x0


and yes we can find this TEXTREL in the library. I dont know what the
hell this is all about. Nevertheless this seems to be a real error so I
googled a little bit and found a few messages about TEXTREL that told to
run `eu-findtextrel`

picca@grisette:~/Debian/tango/tango$ eu-findtextrel
lib/cpp/server/.libs/libtango.so.7 /home/picca/Debian/tango/tango/lib/cpp/server/jpeg/jpeg_color_mmx.cpp
not compiled with
-fpic/-fPIC /home/picca/Debian/tango/tango/lib/cpp/server/jpeg/jpeg_dct_mmx.cpp
not compiled with -fpic/-fPIC

So it seems that the mmx code cause this TEXTREL problem.

I looked at the build log but it seems that the code was
compiled with the -fpic arguments.

In fact you can find on google lots of other opensource library TEXTREL
problem with asm code in C files. So it seems that this is fixable but
I don't know how.

Is someone on this mailing have the assembly skills to help me, and the
upstream, solve this problem.

I already contact the main upstream but it does not know how to
solve this.

thanks

Frederic


Reply to: