Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 140998 - glibc-2.4 breaks 32bit ABI on amd64
Summary: glibc-2.4 breaks 32bit ABI on amd64
Status: RESOLVED WORKSFORME
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: [OLD] baselayout (show other bugs)
Hardware: AMD64 Linux
: High normal
Assignee: Gentoo Toolchain Maintainers
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-07-18 20:37 UTC by Paul Giblock
Modified: 2006-07-19 20:22 UTC (History)
0 users

See Also:
Package list:
Runtime testing required: ---


Attachments
glibc config.log (config.log,38.59 KB, text/plain)
2006-07-18 20:38 UTC, Paul Giblock
Details
My emerge --info (einfo.txt,2.58 KB, text/plain)
2006-07-19 09:43 UTC, Paul Giblock
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Paul Giblock 2006-07-18 20:37:23 UTC
I am running ~amd64.  glibc-2.4.x was automagically installed. Now I cannot run any 32bit applications.  Here is my original error that prompted my attention:

$ ooffice2
/usr/lib32/openoffice/program/pagein: relocation error: /lib32/tls/libc.so.6: symbol _dl_out_of_memory, version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference
/usr/lib32/openoffice/program/soffice.bin: relocation error: /lib32/tls/libc.so.6: symbol _dl_out_of_memory, version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference

I figured something was wrong with glibc, so I decided to just emerge -u glibc. I didn't unmask anything or emerge by path.  Unfortunately, I get the following error:
...
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for long double... yes
checking size of long double... configure: error: cannot compute sizeof (long double), 77
See `config.log' for more details.

!!! ERROR: sys-libs/glibc-2.4-r3 failed.
Call stack:
  ebuild.sh, line 1545:   Called dyn_compile
  ebuild.sh, line 940:   Called src_compile
  glibc-2.4-r3.ebuild, line 1168:   Called src_compile
  glibc-2.4-r3.ebuild, line 1179:   Called toolchain-glibc_src_compile
  glibc-2.4-r3.ebuild, line 251:   Called glibc_do_configure 'nptl'
  glibc-2.4-r3.ebuild, line 941:   Called die

Strange, this shows that I have successfully installed it in the past:
sys-libs/glibc
      Latest version available: 2.4-r3
      Latest version installed: 2.4-r3
      Size of files: 15,756 kB
      Homepage:      http://www.gnu.org/software/libc/libc.html
      Description:   GNU libc6 (also called glibc2) C library
      License:       LGPL-2

I attempted to downgrade glibc but I got an emerge error, which I understand.

I double checked my symlinks:
# ls -l /lib/ld-linux.so.2
lrwxrwxrwx 1 root root 20 Jul 16 08:22 /lib/ld-linux.so.2 -> /lib32/ld-linux.so.2
# ls -l /usr/lib
lrwxrwxrwx 1 root root 5 Jul 11 13:13 /usr/lib -> lib64
# ls -l /lib
lrwxrwxrwx 1 root root 5 Jul 16 08:22 /lib -> lib64
# ls -l /lib64/ld-linux.so.2
lrwxrwxrwx 1 root root 20 Jul 16 08:22 /lib64/ld-linux.so.2 -> /lib32/ld-linux.so.2

I checked to make sure 32bit emulation is enabled, and it is:
# cat /usr/src/linux/.config | grep CONFIG_IA32_EMULATION
CONFIG_IA32_EMULATION=y

Using FEATURES=-sandbox does not help.
Neither does running ldconfig

I made a simple C++ program to test the bug:
#include <iostream>

 int main() {
 std::cout << "sizeof(char) = " << sizeof(char) << std::endl;
 std::cout << "sizeof(short) = " << sizeof(short) << std::endl;
 std::cout << "sizeof(int) = " << sizeof(int) << std::endl;
 std::cout << "sizeof(long) = " << sizeof(long) << std::endl;
 std::cout << "sizeof(long long) = " << sizeof(long long) << std::endl;
 std::cout << "sizeof(float) = " << sizeof(float) << std::endl;
 std::cout << "sizeof(double) = " << sizeof(double) << std::endl;
 std::cout << "sizeof(long double) = " << sizeof(long double) << std::endl;
 return 0;
}

It compiles fine with or without the -m32 flag. However, the 32bit compile breaks without any output besides:
./dumbtest: relocation error: /lib32/tls/libc.so.6: symbol _dl_out_of_memory, version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference

It doesn't look like anything is missing from my /etc/ld.so.conf:
# ld.so.conf autogenerated by env-update; make all changes to
# contents of /etc/env.d directory
/usr/local/lib
//usr/lib32/opengl/nvidia/lib
//usr/lib64/opengl/nvidia/lib
/lib
/usr/lib
/usr/local/lib
/lib64
/usr/lib64
/usr/local/lib64
/lib32
/usr/lib32
/usr/local/lib32
/usr/x86_64-pc-linux-gnu/lib
/usr/lib/gcc/x86_64-pc-linux-gnu/3.4.4/32
/usr/lib/gcc/x86_64-pc-linux-gnu/3.4.4
/usr/lib64/nspr
/usr/lib64/nss
/usr/lib
/usr/lib64/seamonkey
/opt/blackdown-jdk-1.4.2.03/jre/lib/amd64/
/opt/blackdown-jdk-1.4.2.03/jre/lib/amd64/native_threads/
/opt/blackdown-jdk-1.4.2.03/jre/lib/amd64/classic/
/opt/blackdown-jdk-1.4.2.03/jre/lib/amd64/server/
/usr/lib/qt4
/usr/lib64/qt4
/usr/lib32/qt4
/usr/kde/3.5/lib
/usr/kde/3.5//lib64
/usr/kde/3.5/lib32
/usr/qt/3/lib
/usr/qt/3/lib64
/usr/qt/3/lib32
/emul/linux/x86/lib
/emul/linux/x86/usr/lib
/emul/linux/x86/lib
/emul/linux/x86/usr/lib

/lib64/libc.so.6 and /lib32/libc.so.6 output:
# /lib64/libc.so.6
GNU C Library development release version 2.4, by Roland McGrath et al.
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 3.4.4 (Gentoo 3.4.4-r1, ssp-3.4.4-1.0, pie-8.7.8).
Compiled on a Linux 2.6.16 system on 2006-07-16.
Available extensions:
        The C stubs add-on version 2.1.2.
        crypt add-on version 2.1 by Michael Glad and others
        GNU Libidn by Simon Josefsson
        GNU libio by Per Bothner
        NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
        Native POSIX Threads Library by Ulrich Drepper et al
        Support for some architectures added on, not maintained in glibc core.
        BIND-8.2.3-T5B
Thread-local storage support included.
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.

# /lib32/libc.so.6
GNU C Library development release version 2.4, by Roland McGrath et al.
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 3.4.4 (Gentoo 3.4.4-r1, ssp-3.4.4-1.0, pie-8.7.8).
Compiled on a Linux 2.6.16 system on 2006-07-16.
Available extensions:
        The C stubs add-on version 2.1.2.
        crypt add-on version 2.1 by Michael Glad and others
        GNU Libidn by Simon Josefsson
        GNU libio by Per Bothner
        NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
        Native POSIX Threads Library by Ulrich Drepper et al
        Support for some architectures added on, not maintained in glibc core.
        BIND-8.2.3-T5B
Thread-local storage support included.
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.

Because all the tests and hints haven't fixed my problem, I do NOT believe this is a dup of: 123653, 123650, 85110, 136968, 129141, or 108248
Comment 1 Paul Giblock 2006-07-18 20:38:43 UTC
Created attachment 92187 [details]
glibc config.log
Comment 2 SpanKY gentoo-dev 2006-07-19 08:41:58 UTC
you didnt post `emerge info` so i dont know what version of glibc you have installed

to work around your problem, you could try moving /lib32/tls to /lib32/tls.old
Comment 3 Paul Giblock 2006-07-19 09:41:50 UTC
(In reply to comment #2)
> you didnt post `emerge info` so i dont know what version of glibc you have
> installed
> 
> to work around your problem, you could try moving /lib32/tls to /lib32/tls.old
> 

Oops, I thought I posted it at an attachment. Incoming....
Comment 4 Paul Giblock 2006-07-19 09:43:32 UTC
Created attachment 92219 [details]
My emerge --info
Comment 5 Paul Giblock 2006-07-19 09:46:01 UTC
(In reply to comment #2)
> to work around your problem, you could try moving /lib32/tls to /lib32/tls.old

This causes ooffice2 to run.  Why does this work, and is it safe?
Comment 6 SpanKY gentoo-dev 2006-07-19 17:36:30 UTC
looks like you have an old install of glibc libs there

glibc-2.4 should not have a /lib64/tls or a /lib32/tls ... i imagine during an upgrade, the mtimes on those files were changed so portage didnt remove them ... i would need to see the upgrade log to tell you for sure

you should be able to safely do `rm -r /lib32/tls.old` actually
Comment 7 Paul Giblock 2006-07-19 20:22:55 UTC
(In reply to comment #6)
> looks like you have an old install of glibc libs there
> 
> glibc-2.4 should not have a /lib64/tls or a /lib32/tls ... i imagine during an
> upgrade, the mtimes on those files were changed so portage didnt remove them
> ... i would need to see the upgrade log to tell you for sure
> 
> you should be able to safely do `rm -r /lib32/tls.old` actually
> 
That is very likely, my system clock skews all over the place.