- emit .extern and .weak directive linkage
the c source code for test cases aix-extern.ll , aix-weak.ll , aix-extern-weak.ll as
bash> cat aix_extern.c
extern int bar_extern(int* ip); extern int bar_ref(); extern int b_e; void foo(){ } int (*bar_p)() = bar_ref; int main() { bar_extern(&b_e); foo(); bar_p(); bar_ref(); }
bash>cat aix_weak.c
__attribute__ ((weak)) void foo_weak(int *p){ (*p)++; } __attribute__ ((weak)) void foo_ref_weak(){ } void (*foo_weak_p)() = foo_ref_weak; int __attribute__ ((weak)) b; int main() { foo_weak_p(); foo_weak(&b); foo_ref_weak(); }
bash>cat aix_extern_weak.c
extern __attribute__ ((weak)) void foo_ext_weak(int* ); extern __attribute__ ((weak)) void foo_ext_weak_ref(void); extern __attribute__ ((weak)) int b; void (*foo_ext_weak_p)() = foo_ext_weak_ref; void (*foo_ext_weak_p_nocall)() = foo_ext_weak_ref; int main() { foo_ext_weak_p(); foo_ext_weak(&b); }
clang-format: please reformat the code