http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47558

--- Comment #9 from Iain Sandoe <iains at gcc dot gnu.org> 2011-02-01 09:08:53 
UTC ---
Jack,

The linkage of libs (with trunk darwin.h) is like this:

libgcc_ext.dylib ---> exports our additional symbols (ONLY)**
libSystem ---- > contains the annotated system symbols.

** this causes the reference to /my/install/path/libgcc_s.1.dylib to be
inserted into the exe.

As below:
===

mini-02-sno:gcc-4-6-trunk-build$ uname -a 
Darwin mini-02-sno.local 10.6.0 Darwin Kernel Version 10.6.0: Wed Nov 10
18:13:17 PST 2010; root:xnu-1504.9.26~3/RELEASE_I386 i386 i386

====

mini-02-sno:gcc-4-6-trunk-build$ cat /Volumes/ScratchCS/tests/linkage.c
/* This is not meant to work or do anything useful !!! 
   -- sole purpose is to allow examination of linkage.  */
int main (void)
{
static __thread i;  <<=== make it link our ext lib.
  i+i; 
  _Unwind_Resume ((void *)0); <<== make it link libSystem (we expect - NOT from
our ext.)
  return i;
}

======

mini-02-sno:gcc-4-6-trunk-build$ ./gcc/xgcc -Bgcc
/Volumes/ScratchCS/tests/linkage.c -o tt

mini-02-sno:gcc-4-6-trunk-build$ nm -mv tt
0000000100000f80 (__TEXT,__stub_helper) non-external (was a private external) 
stub helpers
0000000100001060 (__DATA,__data) external _NXArgc
0000000100001068 (__DATA,__data) external _NXArgv
                 (undefined [lazy bound]) external __Unwind_Resume (from
libSystem) <<<=== correct
                 (undefined [lazy bound]) external ___emutls_get_address (from
libgcc) <<<=== correct
0000000100001080 (__DATA,__data) non-external ___emutls_v.i.1606
0000000100001078 (__DATA,__data) external ___progname
0000000100000f38 (__TEXT,__text) non-external __dyld_func_lookup
0000000100000000 (absolute) [referenced dynamically] external
__mh_execute_header
0000000100001070 (__DATA,__data) external _environ
                 (undefined [lazy bound]) external _exit (from libSystem)
0000000100000f3e (__TEXT,__text) external _main
                 (undefined) external dyld_stub_binder (from libSystem)
0000000100000f24 (__TEXT,__text) non-external dyld_stub_binding_helper
0000000100000ee8 (__TEXT,__text) external start

====

mini-02-sno:gcc-4-6-trunk-build$ DYLD_PRINT_LIBRARIES=1 ./tt
dyld: loaded: /Volumes/GCC/gcc-4-6-trunk-build/./tt
dyld: loaded:
/GCC/gcc-4-6-install/lib/gcc/x86_64-apple-darwin10/4.6.0/libgcc_s.1.dylib
dyld: loaded: /usr/lib/libSystem.B.dylib
dyld: loaded: /usr/lib/system/libmathCommon.A.dylib
Segmentation fault <<<< === no surprise, the program is not meant to work

====

although the program does not work - you can
(a) install your built gcc [without modifying darwin.h]
(b) compile the prog with debug and step through to find that the
_Unwind_Resume that is called __is__ the one from libSystem.

Reply via email to