Bug 726

Summary: mklibs-native: do_compile fails: STT_GNU_IFUNC not declared
Product: [Build System, Metadata & Runtime] OE-Core Reporter: Dexuan Cui <dexuan.cui>
Component: devtools / tool chainAssignee: Dexuan Cui <dexuan.cui>
Status: VERIFIED FIXED QA Contact:
Severity: major    
Priority: Medium CC: elizabeth.flanagan, meta.mr.watcher, meta.watcher, nitin.a.kamble, sgw
Version: 1.0   
Target Milestone: 1.0 M4   
Hardware: x86   
OS: Multiple   
Whiteboard:
OS type for building Yocto: --- Type of Regression: ---
Verified: Program Management Documentation change: ---

Description Dexuan Cui 2011-02-15 18:21:30 UTC
ERROR: Function 'do_compile' failed (see /distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/temp/log.do_compile.22832 for further information)
ERROR: Logfile of failure stored in: /distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/temp/log.do_compile.22832
Log data follows:
| WARNING: /distro/dcui/110214/p1/bitbake/lib/bb/process.py:15: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
|   self.message = message
|
| ERROR: Function 'do_compile' failed (see /distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/temp/log.do_compile.22832 for further information)
| NOTE: make -j 8
| make  all-recursive
| make[1]: Entering directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs'
| Making all in lib
| make[2]: Entering directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs/lib'
| Making all in mklibs
| make[3]: Entering directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs/lib/mklibs'
| Making all in utils
| make[4]: Entering directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs/lib/mklibs/utils'
| make[4]: Nothing to be done for `all'.
| make[4]: Leaving directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs/lib/mklibs/utils'
| make[4]: Entering directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs/lib/mklibs'
| make[4]: Nothing to be done for `all-am'.
| make[4]: Leaving directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs/lib/mklibs'
| make[3]: Leaving directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs/lib/mklibs'
| make[3]: Entering directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs/lib'
| make[3]: Nothing to be done for `all-am'.
| make[3]: Leaving directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs/lib'
| make[2]: Leaving directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs/lib'
| Making all in src
| make[2]: Entering directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs/src'
| Making all in mklibs-readelf
| make[3]: Entering directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs/src/mklibs-readelf'
| g++ -DHAVE_CONFIG_H -I. -I../..   -isystem/distro/dcui/110214/p1/qemumips/tmp/sysroots/i686-linux/usr/include  -isystem/distro/dcui/110214/p1/qemumips/tmp/sysroots/i686-linux/usr/include -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.cpp
| main.cpp: In function 'void process_symbols_provided(const Elf::section_type<Elf::section_type_DYNSYM>*)':
| main.cpp:87: error: 'STT_GNU_IFUNC' was not declared in this scope
| main.cpp: In function 'void process_symbols_undefined(const Elf::section_type<Elf::section_type_DYNSYM>*)':
| main.cpp:118: error: 'STT_GNU_IFUNC' was not declared in this scope
| make[3]: *** [main.o] Error 1
| make[3]: Leaving directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs/src/mklibs-readelf'
| make[2]: *** [all-recursive] Error 1
| make[2]: Leaving directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs/src'
| make[1]: *** [all-recursive] Error 1
| make[1]: Leaving directory `/distro/dcui/110214/p1/qemumips/tmp/work/i686-linux/mklibs-native-0.1.31-r0/mklibs'
| make: *** [all] Error 2
| FATAL: oe_runmake failed
NOTE: package mklibs-native-0.1.31-r0: task do_compile: Failed
Comment 1 Dexuan Cui 2011-02-15 18:42:25 UTC
Recently image-mklibs was added into USER_CLASSES ( in meta/conf/local.conf.sample), so mklibs-native was built and I happened to get this bug.

I'm using commit b9a97e07 and buiding qemumips and qemux86 and can reproduce the issue in both builds.
Comment 2 Nitin Kamble 2011-02-15 20:28:03 UTC
I just built mklibs-native on the latest master. And It is succeeding without any failure.
Comment 3 Nitin Kamble 2011-02-15 20:36:05 UTC
what is your host distro ?
Comment 4 Dexuan Cui 2011-02-15 21:37:47 UTC
(In reply to comment #2)
> I just built mklibs-native on the latest master. And It is succeeding without
> any failure.
(In reply to comment #3)
> what is your host distro ?
Hi Nitin,
I'm using 32-bit Ubuntu 9.04.  Maybe this is a distro-specific issue? 

BTW: I tried to build mklibs in Ubuntu 9.04: "tar -xcf mklibs*.tar.gz; ./configure; make" and also got the same failure.

So maybe Ubuntu 9.04 is too old, or some package is misssing or out of date??
Comment 5 Dexuan Cui 2011-02-16 00:55:37 UTC
(In reply to comment #4)
> (In reply to comment #2)
> > I just built mklibs-native on the latest master. And It is succeeding without
> > any failure.
> (In reply to comment #3)
> > what is your host distro ?
> Hi Nitin,
> I'm using 32-bit Ubuntu 9.04.  Maybe this is a distro-specific issue? 
> BTW: I tried to build mklibs in Ubuntu 9.04: "tar -xcf mklibs*.tar.gz;
> ./configure; make" and also got the same failure.
> So maybe Ubuntu 9.04 is too old, or some package is misssing or out of date??

I believe this issue is related to Ubuntu-9.04 since Ubuntu 10.04 is ok here:

mklibs-native has #include <elf.h>, since STAGING_INCDIR_NATIVE doesn't contain elf.h (elf.h is supplied by libc6-dev and we don't have eglibc-native), so the host's /usr/include/elf.h is used!
Unluckily, the libc6-dev in Ubuntu 9.04 is so old that the elf.h doesn't have the necessary macros, e.g., STT_GNU_IFUNC. BTW: The elf.h in Ubunto 10.04 is ok.

How should we handle this case? We need continue to support Ubuntu 9.04, I think.
Comment 6 Dexuan Cui 2011-02-16 01:51:42 UTC
(In reply to comment #5)
> (In reply to comment #4)
> > (In reply to comment #2)
> > > I just built mklibs-native on the latest master. And It is succeeding without
> > > any failure.
> > (In reply to comment #3)
> > > what is your host distro ?
> > Hi Nitin,
> > I'm using 32-bit Ubuntu 9.04.  Maybe this is a distro-specific issue? 
> > BTW: I tried to build mklibs in Ubuntu 9.04: "tar -xcf mklibs*.tar.gz;
> > ./configure; make" and also got the same failure.
> > So maybe Ubuntu 9.04 is too old, or some package is misssing or out of date??
> I believe this issue is related to Ubuntu-9.04 since Ubuntu 10.04 is ok here:
> mklibs-native has #include <elf.h>, since STAGING_INCDIR_NATIVE doesn't contain
> elf.h (elf.h is supplied by libc6-dev and we don't have eglibc-native), so the
> host's /usr/include/elf.h is used!
> Unluckily, the libc6-dev in Ubuntu 9.04 is so old that the elf.h doesn't have
> the necessary macros, e.g., STT_GNU_IFUNC. BTW: The elf.h in Ubunto 10.04 is
> ok.
> How should we handle this case? We need continue to support Ubuntu 9.04, I
> think.

I sent out a fix to define STT_GNU_IFUNC:
http://git.pokylinux.org/cgit.cgi/poky-contrib/commit/?h=dcui/master&id=d0739d8a258c251013abd846b8c7a1c00b7e30ae
Comment 7 Beth Flanagan 2011-02-17 23:22:50 UTC
Waiting for PULL
Comment 9 Dexuan Cui 2011-02-22 17:58:45 UTC
(In reply to comment #8)
> http://git.pokylinux.org/cgit/cgit.cgi/poky/commit/?id=e2dbad7b7db7b62dee4bb5b6c28a5ab4dde08358

I don't meet with the bug with the commit. 
Let me VERIFY it.