1 2 3#include <stdio.h> // fprintf(), NULL 4#include <stdlib.h> // exit(), EXIT_SUCCESS 5 6#include "test.h" // PASS(), FAIL(), XPASS(), XFAIL() 7 8// pfoo is in libfoo.dylib 9// libfoo.dylib also has weak foo[] 10// pfoo should be rebound to point into the foo[] in main 11int foo[] = { 5, 6, 7, 8 }; 12extern int* pfoo; 13 14// libfoo.dylib has a weak bar[] 15// libbar.dylib has a strong bar[] 16// at build time linker only sees weak bar in libfoo.dylib 17// at runtime, dyld uses strong bar in libbar.dylib 18extern int bar[]; 19int* pbar = &bar[1]; 20 21// there is only one stuff, but it is weak 22// so we are testing the case when stuff is not overridden 23int __attribute__((weak)) stuff[] = { 1, 2, 3, 4, 5 }; 24int* pstuff = &stuff[3]; 25 26 27void realmain() 28{ 29 if ( *pfoo != 7 ) 30 FAIL("weak-external-reloc, pfoo=%d", *pfoo); 31 else if ( *pbar != 21 ) 32 FAIL("weak-external-reloc, pbar=%d", *pbar); 33 else if ( *pstuff != 4 ) 34 FAIL("weak-external-reloc, pstuffr=%d", *pstuff); 35 else 36 PASS("weak-external-reloc"); 37} 38 39 40