glibc 2.11 baut nicht

26/01/2010 - 11:00 von Markus Wichmann | Report spam
Hi all,

ich hab hier ein Problem mit glibc 2.11. Und zwar baut das ganze nicht
fertig.

Ich musste schon einen kleinen Patch einbauen, und zwar:

diff -ru glibc-2.11/include/shlib-compat.h glibc-2.11.mod/include/shlib-compat.h
glibc-2.11/include/shlib-compat.h 2009-10-30 18:17:08.000000000 +0100
+++ glibc-2.11.mod/include/shlib-compat.h 2010-01-26 10:17:14.000000000 +0100
@@ -87,7 +87,7 @@
weak_alias (local, symbol)

/* This should not appear outside `#if SHLIB_COMPAT (...)'. */
+/* So, how come it _does_ in libpthread? */
-# define compat_symbol(lib, local, symbol, version) ...
+# define compat_symbol(lib, local, symbol, version)

#endif

Konfiguriert ist das ganze mit:

$ cat configparms
slibdir=/lib

$ ../glibc-2.11/configure --disable-versioning --enable-add-ons \

(Versioning hab ich abgeschaltet, weil das nur für einige Probleme
gesorgt hat. Außerdem hat mein Compiler support für -fvisibility und
__attribute__((visibility())). Also werden Versionsskripte nicht
gebraucht, um interne Symbole zu verstecken.)

So, jetzt hàngt der Compile aber an:

gcc -nostdlib -nostartfiles -r -o /work/build-glibc/elf/librtld.os \
'-Wl,-(' /work/build-glibc/elf/dl-allobjs.os \
/work/build-glibc/elf/rtld-libc.a -lgcc '-Wl,-)' \
-Wl,-Map,/work/build-glibc/elf/librtld.os.map

gcc -nostdlib -nostartfiles -shared -Wl,-z,combreloc -Wl,-z,relro \
-Wl,--hash-style=both -Wl,-z,defs -Wl,--verbose 2>&1 | LC_ALL=C \ sed \
-e '/^/,/^/!d;/^/d' -e 's/\. = .* + \
SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' \

/work/build-glibc/elf/ld.so.lds



gcc -nostdlib -nostartfiles -shared -o /work/build-glibc/elf/ld.so \
-Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both -Wl,-z,defs \
/work/build-glibc/elf/librtld.os \
-Wl,-soname=ld-linux-x86-64.so.2 -T /work/build-glibc/elf/ld.so.lds \

/tools/x86_64-unknown-linux-gnu/bin/ld:
/work/build-glibc/elf/librtld.os: relocation R_X86_64_PC32 against
symbol `_dl_fini' can not be used when making a shared object; recompile
with -fPIC

/tools/x86_64-unknown-linux-gnu/bin/ld:
final link failed: Bad value

collect2: ld returned 1 exit status
make[2]: *** [/work/build-glibc/elf/ld.so] Error 1
make[2]: Leaving directory `/work/glibc-2.11/elf'
make[1]: *** [elf/subdir_lib] Error 2
make[1]: Leaving directory `/work/glibc-2.11'
make: *** [all] Error 2

Meine Ahnung wàre, dass irgendeine Datei eine Referenz auf _dl_fini hat,
und in Assembler geschrieben ist, sodass der Assembler die falsche
Relocation anwendet, egal ob "-fPIC" oder nicht. Nur weiß ich weder, wo
zu suchen ist, noch was zu àndern wàre. Die Aufrufe zu Funktionen, die
bisher einen solchen Fehler hervorriefen, waren alle von der Form

call Funktion

oder

jmp Funktion

(und die Referenz hàtte

Funktion@PLT

lauten müssen)

Aber so etwas findet sich nirgends in Bezug auf _dl_fini.

Versionen:
glibc: 2.11
glibc-libidn: 2.10.1
gcc: 4.4.2
binutils: 2.20

Das ganze wird mal ein LFS, wenn es fertig ist. Darum ist ld auch in
/tools.

Ach ja: Aufgrund von Fehlern habe ich den GNU ld, nicht den gold. (gold
kann die glibc nicht linken. Eben wegen des obigen Abschnittes.)

Tschö,
Markus
Progress (n.): Process through which USENET evolved from smart people in
front of dumb terminals to dumb people in front of smart
terminals.

news://freenews.netfront.net/ - complaints: news@netfront.net
 

Lesen sie die antworten

#1 Markus Wichmann
27/01/2010 - 13:12 | Warnen spam
Ich hab das Problem jetzt gelöst: Die Kompilierung sollte in einem
chroot stattfinden. Irgendwas hat configure aber versaut. Also hab ich
den configure-Schritt mit den gleichen Optionen außerhalb des chroot
gemacht, anschließend wieder ins chroot gewechselt und dort die
(nunmehr) falsch konfigurierten Pfade umgebogen (config.make, config.h).
Anschließend mit make im chroot die glibc gebaut und installiert.
Funktioniert jetzt - fast. Die Existenz von gettext wird vorausgesetzt.
Naja, muss ich es halt nachinstallieren, sobald gcc und binutils auf die
neue glibc verlinkt sind.

Tschö,
Markus

Progress (n.): Process through which USENET evolved from smart people in
front of dumb terminals to dumb people in front of smart
terminals.

news://freenews.netfront.net/ - complaints:

Ähnliche fragen