Ich habe ein einfaches Testprogramm Aufruf pthread_cond_broadcast
.Verschiedene Symbole von glibc/pthreads verwendet, wenn Gold vs ld-Linker
Wenn mit dem ld
Linker verbunden, dies zeigt:
Fall 1:
$ nm ld-test | grep cond_broadcast
U [email protected]@GLIBC_2.3.2
Wenn mit dem Linker gold
verknüpft es zeigt:
Fall 2:
$ nm gold-test | grep cond_broadcast
U pthread_cond_broadcast
pthread/libc enthält mehrere pthread_cond_broadcast Symbole wi Die verschiedenen Versionssymbole, vermutlich seit der Änderung des ABI.
$ nm /lib64/libc.so.6 |grep cond_broadca
00000036b84f7d30 t __pthread_cond_broadcast
00000036b85278f0 t __pthread_cond_broadcast_2_0
00000036b84f7d30 T [email protected]@GLIBC_2.3.2
00000036b85278f0 T [email protected]_2.2.5
$ nm /lib64/libpthread.so.0 |grep cond_broadcast
00000036b880bee0 t __pthread_cond_broadcast
00000036b880c250 t __pthread_cond_broadcast_2_0
00000036b880bee0 T [email protected]@GLIBC_2.3.2
00000036b880c250 T [email protected]_2.2.5
So sind die Fragen:
- Warum das unterschiedliche Verhalten zwischen
gold
und dem alten/normalld
. - Welches Symbol pthread_cond_broadcast wird zur Laufzeit im Fall 2 verwendet, wenn die Binärdatei mit einem unversionierten Symbol
pthread_cond_broadcast
verknüpft ist. Die neueste Implementierung von pthread_cond_broadcast? Der älteste ?
Dies wird mit gcc 4.9.2 und dem Gold/ld Linker aus binutils 2,24