Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 151253 - [prelink] cannot handle thread-local variables
Summary: [prelink] cannot handle thread-local variables
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: [OLD] Server (show other bugs)
Hardware: x86 Linux
: High normal
Assignee: Gentoo Toolchain Maintainers
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-10-13 19:45 UTC by Arthur Hagen
Modified: 2007-03-25 05:15 UTC (History)
0 users

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


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Arthur Hagen 2006-10-13 19:45:33 UTC
Prelinking /usr/bin/Xvfb
prelink: /usr/bin/Xvfb: NOBITS section followed by non-NOBITS section in the same segment
Prelinking /usr/bin/Xnest
prelink: /usr/bin/Xnest: NOBITS section followed by non-NOBITS section in the same segment

Same problem on two systems -- one 2005.1 selinux x86 P4 and one 2006.1 x86 PIII-S.  No problems with xorg 1.0.2

Portage 2.1.1 (selinux/2005.1/x86, gcc-3.4.6, glibc-2.4-r3, 2.6.17-gentoo-r8 i686)
=================================================================
System uname: 2.6.17-gentoo-r8 i686 Intel(R) Pentium(R) 4 CPU 2.53GHz
Gentoo Base System version 1.12.5
Last Sync: Fri, 13 Oct 2006 23:50:01 +0000
ccache version 2.3 [enabled]
app-admin/eselect-compiler: [Not Present]
dev-java/java-config: 1.2.11-r1
dev-lang/python:     2.4.3-r4
dev-python/pycrypto: 2.0.1-r5
dev-util/ccache:     2.3
dev-util/confcache:  [Not Present]
sys-apps/sandbox:    1.2.17
sys-devel/autoconf:  2.13, 2.59-r7
sys-devel/automake:  1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r2
sys-devel/binutils:  2.16.1-r3
sys-devel/gcc-config: 1.3.13-r4
sys-devel/libtool:   1.5.22
virtual/os-headers:  2.6.17-r1
ACCEPT_KEYWORDS="x86"
AUTOCLEAN="yes"
CBUILD="i686-pc-linux-gnu"
CFLAGS="-O2 -pipe -march=pentium4 -momit-leaf-frame-pointer"
CHOST="i686-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/X11/xkb /var/bind"
CONFIG_PROTECT_MASK="/etc/env.d /etc/gconf /etc/revdep-rebuild /etc/splash /etc/terminfo"
CXXFLAGS="-O2 -pipe -march=pentium4 -momit-leaf-frame-pointer"
DISTDIR="/usr/portage/distfiles"
FEATURES="autoconfig ccache distlocks metadata-transfer sandbox selinux sesandbox sfperms strict userfetch userpriv usersandbox"
GENTOO_MIRRORS="http://open-systems.ufl.edu/mirrors/gentoo http://prometheus.cs.wmich.edu/gentoo http://www.gtlib.gatech.edu/pub/gentoo"
LDFLAGS="-Wl,-O1"
LINGUAS=""
MAKEOPTS="-j2"
PKGDIR="/usr/portage/packages"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress
--force --whole-file --delete --delete-after --stats --timeout=180 --exclude='/distfiles' --exclude='/local' --exclude='/packages'"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
SYNC="rsync://rsync.us.gentoo.org/gentoo-portage"
USE="X acpi alsa apache2 berkdb caps crypt cups dri eds elibc_glibc fam gdbm gif gnome gtk idn input_devices_keyboard input_devices_mouse ipv6 jpeg kernel_linux logrotate mad mbox mmap mmx motif ncurses nfs nis nls nptl nptlonly offensive pam pcre perl pic png posix python qt4 readline sdl seamonkey selinux spell spl sse sse2 ssl tcpd threads truetype userland_GNU video_cards_radeon video_cards_vesa x86 xml zlib"
Unset:  CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LANG, LC_ALL, PORTAGE_RSYNC_EXTRA_OPTS, PORTDIR_OVERLAY
Comment 1 Arthur Hagen 2006-10-13 19:50:15 UTC
Dumping the sections of Xnest with eu-readelf -S gives:

There are 30 section headers, starting at offset 0x32e654:

Section Headers:
[Nr] Name                 Type         Addr     Off    Size   ES Flags Lk Inf Al
[ 0]                      NULL         00000000 000000 000000  0        0   0  0
[ 1] .interp              PROGBITS     08048174 000174 000013  0 A      0   0  1
[ 2] .note.ABI-tag        NOTE         08048188 000188 000020  0 A      0   0  4
[ 3] .hash                HASH         080481a8 0001a8 0027ac  4 A      4   0  4
[ 4] .dynsym              DYNSYM       0804a954 002954 006140 16 A      5   1  4
[ 5] .dynstr              STRTAB       08050a94 008a94 006d74  0 A      0   0  1
[ 6] .gnu.version         GNU_versym   08057808 00f808 000c28  2 A      4   0  2
[ 7] .gnu.version_r       GNU_verneed  08058430 010430 000090  0 A      5   3  4
[ 8] .rel.dyn             REL          080584c0 0104c0 002668  8 A      4   0  4
[ 9] .rel.plt             REL          0805ab28 012b28 000930  8 A      4  11  4
[10] .init                PROGBITS     0805b458 013458 000017  0 AX     0   0  4
[11] .plt                 PROGBITS     0805b470 013470 001270  4 AX     0   0  4
[12] .text                PROGBITS     0805c6e0 0146e0 2a88b4  0 AX     0   0 16
[13] .fini                PROGBITS     08304f94 2bcf94 00001a  0 AX     0   0  4
[14] .rodata              PROGBITS     08304fc0 2bcfc0 0432ac  0 A      0   0 32
[15] .eh_frame_hdr        PROGBITS     0834826c 30026c 000014  0 A      0   0  4
[16] .eh_frame            PROGBITS     08348280 300280 00003c  0 A      0   0  4
[17] .tdata               PROGBITS     08349000 301000 000004  0 WAT    0   0  4
[18] .tbss                NOBITS       08349004 301004 000004  0 WAT    0   0  4
[19] .ctors               PROGBITS     08349004 301004 000008  0 WA     0   0  4
[20] .dtors               PROGBITS     0834900c 30100c 000008  0 WA     0   0  4
[21] .jcr                 PROGBITS     08349014 301014 000004  0 WA     0   0  4
[22] .data.rel.ro         PROGBITS     08349020 301020 00207c  0 WA     0   0 32
[23] .dynamic             DYNAMIC      0834b09c 30309c 000120  8 WA     5   0  4
[24] .got                 PROGBITS     0834b1bc 3031bc 001334  4 WA     0   0  4
[25] .got.plt             PROGBITS     0834c4f0 3044f0 0004a4  4 WA     0   0  4
[26] .data                PROGBITS     0834c9a0 3049a0 023ec4  0 WA     0   0 32
[27] .bss                 NOBITS       08370880 328864 016754  0 WA     0   0 32
[28] .comment             PROGBITS     00000000 328864 005d00  0        0   0  1
[29] .shstrtab            STRTAB       00000000 32e564 0000ef  0        0   0  1
Comment 2 Donnie Berkholz (RETIRED) gentoo-dev 2006-10-14 11:46:22 UTC
How would one fix this problem?
Comment 3 Arthur Hagen 2006-10-14 17:11:44 UTC
(In reply to comment #2)
> How would one fix this problem?
> 

I'd start by examining what's changed in the linking process between versions, and asking upstreams and the prelink maintainers.
As a stop-gap measure until it has been fixed, I recommend the ebuild creating a new file, /etc/env.d/20xorg-server containing this:

PRELINK_PATH_MASK="/usr/bin/Xvfb:/usr/bin/Xnest"

After the emerge runs env-update, these two files will then be added to the exlusion list in /etc/prelink.conf for users who run prelink.

It doesn't solve the problem, but it's a viable workaround while avenues of fixing it can be persued.
Comment 4 Donnie Berkholz (RETIRED) gentoo-dev 2006-10-14 21:21:29 UTC
Referring to http://bugzilla.ximian.com/show_bug.cgi?id=74822 -- here's what it says:

This seems to be more of a problem with prelink than with mono.
The mono runtime uses thread-local variables, which are put by the
linker into the .tbss section. Seems that prelink can't handle it.
Comment 5 Arthur Hagen 2006-11-09 20:02:04 UTC
I've been running the ~x86/~amd64 prelink-20060712 (which fixes this issue) for a couple of weeks now, on four boxes:
1:  Athlon-4, gcc 3.4.6, gentoo 2006.1
2:  Pentium IIIs, gcc 3.4.6, gentoo 2006.1
3:  Pentium 4, gcc 3.4.6, selinux 2005.1
4:  Opteron 1xx, gcc 3.4.6, gentoo 2006.1
It appears to work stably on all four, although as others upstream has noted, executables can become rather big after prelinking.  Also, I have not tested with gcc 4.1, so I'm reluctant to request zonking the ~ just yet, based only on my experience.

I do, however, STRONGLY recommend that the xorg-server people add an env.d exclusion as outlined in detail in comment #3, until the newer prelink goes stable.  This should be standard for any package that doesn't prelink with the latest stable, and indeed most packages who need it do so.
Comment 6 SpanKY gentoo-dev 2007-03-25 05:15:35 UTC
latest versions in portage should have this issue fixed