X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=tests%2Fgcc-weak-hidden%2Fmain.c;h=b4542f79a67e4cb5f23668d9e540eb7abe337454;hb=cd33a48baed27c46bc6094f337a3c29039c1c172;hp=a2f31756f41560db3d1783ffdb5c94586252ed67;hpb=c2c10797328e1a2d465d53f05a33b89d8dc16154;p=lttng-ust.git diff --git a/tests/gcc-weak-hidden/main.c b/tests/gcc-weak-hidden/main.c index a2f31756..b4542f79 100644 --- a/tests/gcc-weak-hidden/main.c +++ b/tests/gcc-weak-hidden/main.c @@ -10,22 +10,79 @@ * granted, provided the above notices are retained, and a notice that * the code was modified is included with the above copyright notice. */ + +#include #include "tap.h" #define NUM_TESTS 2 -char testsym[9] __attribute__((weak, visibility("hidden"))); +int testint __attribute__((weak, visibility("hidden"))); +void *testptr __attribute__((weak, visibility("hidden"))); +struct { + char a[24]; +} testsym_24_bytes __attribute__((weak, visibility("hidden"))); + +void *testfct_int(void); +void *testfct_ptr(void); +void *testfct_24_bytes(void); + +void *testlibfct1_int(void); +void *testlibfct1_ptr(void); +void *testlibfct1_24_bytes(void); + +void *testlibfct2_int(void); +void *testlibfct2_ptr(void); +void *testlibfct2_24_bytes(void); + +enum { + MATCH_PROGRAM_INT, + MATCH_PROGRAM_PTR, + MATCH_PROGRAM_24_BYTES, + MATCH_LIB_INT, + MATCH_LIB_PTR, + MATCH_LIB_24_BYTES, + NR_MATCH, +}; -void *fct1(void); -void *fctlib1(void); -void *fctlib2(void); +static bool match_matrix[NR_MATCH]; int main() { plan_tests(NUM_TESTS); - ok(fct1() == testsym, - "Address of weak symbol with hidden visibility match between compile units within same module for main program"); - ok(fctlib1() == fctlib2(), - "Address of weak symbol with hidden visibility match between compile units within same module for shared library"); + + if (testfct_int() == &testint) + match_matrix[MATCH_PROGRAM_INT] = true; + if (testfct_ptr() == &testptr) + match_matrix[MATCH_PROGRAM_PTR] = true; + if (testfct_24_bytes() == &testsym_24_bytes) + match_matrix[MATCH_PROGRAM_24_BYTES] = true; + + if (testlibfct1_int() == testlibfct2_int()) + match_matrix[MATCH_LIB_INT] = true; + if (testlibfct1_ptr() == testlibfct2_ptr()) + match_matrix[MATCH_LIB_PTR] = true; + if (testlibfct1_24_bytes() == testlibfct2_24_bytes()) + match_matrix[MATCH_LIB_24_BYTES] = true; + + diag("Address of weak symbol with hidden visibility %s between compile units within same module for main program (4 bytes integer object)", + match_matrix[MATCH_PROGRAM_INT] ? "match" : "MISMATCH"); + diag("Address of weak symbol with hidden visibility %s between compile units within same module for main program (pointer object)", + match_matrix[MATCH_PROGRAM_PTR] ? "match" : "MISMATCH"); + diag("Address of weak symbol with hidden visibility %s between compile units within same module for main program (24 bytes structure object)", + match_matrix[MATCH_PROGRAM_24_BYTES] ? "match" : "MISMATCH"); + + diag("Address of weak symbol with hidden visibility %s between compile units within same module for shared library (4 bytes integer object)", + match_matrix[MATCH_LIB_INT] ? "match" : "MISMATCH"); + diag("Address of weak symbol with hidden visibility %s between compile units within same module for shared library (pointer object)", + match_matrix[MATCH_LIB_PTR] ? "match" : "MISMATCH"); + diag("Address of weak symbol with hidden visibility %s between compile units within same module for shared library (24 bytes structure object)", + match_matrix[MATCH_LIB_24_BYTES] ? "match" : "MISMATCH"); + + ok(match_matrix[MATCH_PROGRAM_INT] == match_matrix[MATCH_PROGRAM_PTR] + && match_matrix[MATCH_PROGRAM_INT] == match_matrix[MATCH_PROGRAM_24_BYTES], + "Weak-hidden behavior is the same for 4 bytes integer, pointer, and 24 bytes structure objects for within main program"); + ok(match_matrix[MATCH_LIB_INT] == match_matrix[MATCH_LIB_PTR] + && match_matrix[MATCH_LIB_INT] == match_matrix[MATCH_LIB_24_BYTES], + "Weak-hidden behavior is the same for 4 bytes integer, pointer, and 24 bytes structure objects for within shared library"); return 0; }