------- Comment #29 from howarth at nitro dot med dot uc dot edu 2009-12-09 23:06 ------- Ah, I understand now....
gcc-4 -O2 builtin-math-7-reduced.c ./a.out otool -L ./a.out ./a.out: /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 246.0.0) /sw/lib/gcc4.5/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.0) gcc-4 -O2 -mmacosx-version-min=10.5 builtin-math-7-reduced.c ./a.out Abort otool -L ./a.out ./a.out: /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 246.0.0) /sw/lib/gcc4.5/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.0) So while at first glance, the same __divdc3 symbol from /usr/lib/libgcc_s.1.dylib should be resolved as from /usr/lib/libSystem.B.dylib... nm /usr/lib/libgcc_s.1.dylib | grep ___divdc3 0019fa1e S $ld$hide$os10.4$___divdc3 0019fa1f S $ld$hide$os10.5$___divdc3 001640d0 T ___divdc3 nm /usr/lib/libSystem.B.dylib | grep ___divdc3 0019fa1e S $ld$hide$os10.4$___divdc3 0019fa1f S $ld$hide$os10.5$___divdc3 001640d0 T ___divdc3 without explicitly passing -mmacosx-version-min=10.5 to gcc, the __dividc3 is ignored in /usr/lib/libgcc_s.1.dylib and gotten from /sw/lib/gcc4.5/lib/libgcc_s.1.dylib instead. When we pass -lm, the linkage of /usr/lib/libSystem.B.dylib provides ___dividc3. gcc-4 -O2 builtin-math-7-reduced.c -lm ./a.out Abort otool -L ./a.out ./a.out: /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.0) /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 246.0.0) /sw/lib/gcc4.5/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0) This clears up my confusion about why usr/lib/libgcc_s.1.dylib wasn't providing ___dividc3 even though it appeared earlier in the linkage. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42333