Hi, The bug exists on 4.6 and trunk.
The fix is pretty close to obvious. The size of the pointer to dyld_stub_binding_helper needs to track m32/m64.
bootstrapped on native powerpc-apple-darwin8 on a G5 tested as below (using gcc-4_6-branch revision 175752).
=== Native configuration is powerpc-apple-darwin8 --- Running target unix/-m32 === libffi Summary for unix/-m32 === # of expected passes 1634 # of expected failures 10 # of unsupported tests 15 Running target unix/-m64 === libffi Summary for unix/-m64 === # of expected passes 1634 # of expected failures 10 # of unsupported tests 15 === libffi Summary === # of expected passes 3268 # of expected failures 20 # of unsupported tests 30 OK for trunk and 4.6? Iain Index: libffi/src/powerpc/darwin_closure.S =================================================================== --- libffi/src/powerpc/darwin_closure.S (revision 175752) +++ libffi/src/powerpc/darwin_closure.S (working copy) @@ -534,7 +534,7 @@ L_ffi_closure_helper_DARWIN$stub: .lazy_symbol_pointer L_ffi_closure_helper_DARWIN$lazy_ptr: .indirect_symbol _ffi_closure_helper_DARWIN - .long dyld_stub_binding_helper + .g_long dyld_stub_binding_helper #if defined(__ppc64__) .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 @@ -553,7 +553,8 @@ L_darwin64_struct_ret_by_value_p$stub: .lazy_symbol_pointer L_darwin64_struct_ret_by_value_p$lazy_ptr: .indirect_symbol _darwin64_struct_ret_by_value_p - .long dyld_stub_binding_helper + .g_long dyld_stub_binding_helper + .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 .align 5 L_darwin64_pass_struct_floats$stub: @@ -570,6 +571,6 @@ L_darwin64_pass_struct_floats$stub: .lazy_symbol_pointer L_darwin64_pass_struct_floats$lazy_ptr: .indirect_symbol _darwin64_pass_struct_floats - .long dyld_stub_binding_helper + .g_long dyld_stub_binding_helper # endif #endif
Index: libffi/src/powerpc/darwin_closure.S =================================================================== --- libffi/src/powerpc/darwin_closure.S (revision 175752) +++ libffi/src/powerpc/darwin_closure.S (working copy) @@ -534,7 +534,7 @@ L_ffi_closure_helper_DARWIN$stub: .lazy_symbol_pointer L_ffi_closure_helper_DARWIN$lazy_ptr: .indirect_symbol _ffi_closure_helper_DARWIN - .long dyld_stub_binding_helper + .g_long dyld_stub_binding_helper #if defined(__ppc64__) .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 @@ -553,7 +553,8 @@ L_darwin64_struct_ret_by_value_p$stub: .lazy_symbol_pointer L_darwin64_struct_ret_by_value_p$lazy_ptr: .indirect_symbol _darwin64_struct_ret_by_value_p - .long dyld_stub_binding_helper + .g_long dyld_stub_binding_helper + .section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32 .align 5 L_darwin64_pass_struct_floats$stub: @@ -570,6 +571,6 @@ L_darwin64_pass_struct_floats$stub: .lazy_symbol_pointer L_darwin64_pass_struct_floats$lazy_ptr: .indirect_symbol _darwin64_pass_struct_floats - .long dyld_stub_binding_helper + .g_long dyld_stub_binding_helper # endif #endif