Glib2 build problem
N_Ox
n.oxyde at gmail.com
Fri Sep 21 16:30:03 PDT 2007
Le 22 sept. 07 à 00:58, David DeHaven a écrit :
>
> Encountered a similar error trying to install glib2 on a system
> running Leopard (9A527):
> ld: bc out of range (571728 max is +/-64K) from
> _g_atomic_int_exchange_and_add in .libs/gatomic.o to
> _g_atomic_int_exchange_and_add$stub in .libs/
> libglib-2.0.0.1400.0.dylib in _g_atomic_int_exchange_and_add
> from .libs/gatomic.o
>
> There's a bc instruction (or variant thereof, probably the "bne-")
> that's trying to jump further than 64K bytes from the PC, that's
> causing the linker error. This would have affected PowerPC builds
> only.
>
> I poked around a short while and couldn't figure out what's causing
> the error. It could be a bug in the Leopard preview build of ld64...
>
> I did notice the other functions in gatomic.c didn't have that
> problem, but they all have a sync instruction before the label, so
> I dropped a nop in front of the label in
> g_atomic_int_exchange_and_add (and then later g_atomic_int_add):
> __asm__ __volatile__ ("nop\n"
> ".Lieaa%=: lwarx %0,0,%3\n"
>
> Which compiles to:
> .align 2
> .p2align 4,,15
> .globl _g_atomic_int_exchange_and_add
> _g_atomic_int_exchange_and_add:
> nop
> .Lieaa17: lwarx r2,0,r3
> add r0,r2,r4
> stwcx. r0,0,r3
> bne- .Lieaa17
> mr r3,r2
> blr
>
> And things are building fine now, though wholly untested.
>
> Note the only difference in the assembly output is the nop between
> the global and the local label (and the tab before the .Lieaa17
> label, which doesn't make any difference):
> _g_atomic_int_exchange_and_add:
> .Lieaa17: lwarx r2,0,r3
>
> Otherwise they're the same. This really looks to me like a bug in
> ld64.
>
> Here's a patch:
> --- old/glib-2.14.0/glib/gatomic.c 2007-09-21 15:32:52.000000000 -0700
> +++ new/glib-2.14.0/glib/gatomic.c 2007-09-21 15:32:33.000000000 -0700
> @@ -276,7 +276,8 @@ g_atomic_int_exchange_and_add (volatile
> gint val)
> {
> gint result, temp;
> - __asm__ __volatile__ (".Lieaa%=: lwarx %0,0,%3\n"
> + __asm__ __volatile__ ("nop\n"
> + ".Lieaa%=: lwarx %0,0,%3\n"
> " add %1,%0,%4\n"
> " stwcx. %1,0,%3\n"
> " bne- .Lieaa%="
> @@ -292,7 +293,8 @@ g_atomic_int_add (volatile gint *atomic,
> gint val)
> {
> gint result, temp;
> - __asm__ __volatile__ (".Lia%=: lwarx %0,0,%3\n"
> + __asm__ __volatile__ ("nop\n"
> + ".Lia%=: lwarx %0,0,%3\n"
> " add %1,%0,%4\n"
> " stwcx. %1,0,%3\n"
> " bne- .Lia%="
>
I think you should rather report this upstream.
--
Anthony Ramine, the infamous MacPorts Trac slave.
nox at macports.org
More information about the macports-users
mailing list