📄 sh1.c
字号:
#ifndef NULL#define NULL ((void *) 0)#endif/* This is part of the shared library ld test. This file becomes part of a shared library. *//* This variable is supplied by the main program. */#ifndef XCOFF_TESTextern int mainvar;#endif/* This variable is defined in the shared library, and overridden by the main program. */#ifndef XCOFF_TESTint overriddenvar = -1;#endif/* This variable is defined in the shared library. */int shlibvar1 = 3;/* This variable is defined by another object in the shared library. */extern int shlibvar2;/* These functions return the values of the above variables as seen in the shared library. */#ifndef XCOFF_TESTintshlib_mainvar (){ return mainvar;}#endif#ifndef XCOFF_TESTintshlib_overriddenvar (){ return overriddenvar;}#endifintshlib_shlibvar1 (){ return shlibvar1;}intshlib_shlibvar2 (){ return shlibvar2;}/* This function calls a function defined by another object in the shared library. */extern int shlib_shlibcalled ();intshlib_shlibcall (){ return shlib_shlibcalled ();}#ifndef XCOFF_TEST/* This function calls a function defined in this object in the shared library. The main program will override the called function. */extern int shlib_overriddencall2 ();intshlib_shlibcall2 (){ return shlib_overriddencall2 ();}intshlib_overriddencall2 (){ return 7;}#endif/* This function calls a function defined by the main program. */#ifndef XCOFF_TESTextern int main_called ();intshlib_maincall (){ return main_called ();}#endif/* This function is passed a function pointer to shlib_mainvar. It confirms that the pointer compares equally. */int shlib_checkfunptr1 (p) int (*p) ();{ return p == shlib_shlibvar1;}/* This function is passed a function pointer to main_called. It confirms that the pointer compares equally. */#ifndef XCOFF_TESTintshlib_checkfunptr2 (p) int (*p) ();{ return p == main_called;}#endif/* This function returns a pointer to shlib_mainvar. */int(*shlib_getfunptr1 ()) (){ return shlib_shlibvar1;}/* This function returns a pointer to main_called. */#ifndef XCOFF_TESTint(*shlib_getfunptr2 ()) (){ return main_called;}#endif/* This function makes sure that constant data and local functions work. */#ifndef __STDC__#define const#endifstatic int i = 6;static const char *str = "Hello, world\n";intshlib_check (){ const char *s1, *s2; if (i != 6) return 0; /* To isolate the test, don't rely on any external functions, such as strcmp. */ s1 = "Hello, world\n"; s2 = str; while (*s1 != '\0') if (*s1++ != *s2++) return 0; if (*s2 != '\0') return 0; if (shlib_shlibvar1 () != 3) return 0; return 1;}#ifdef HIDDEN_WEAK_TEST#define HIDDEN_UNDEF_TEST#define WEAK_TEST#endif#ifdef PROTECTED_WEAK_TEST#define PROTECTED_UNDEF_TEST#define WEAK_TEST#endif#if defined (HIDDEN_UNDEF_TEST) || defined (PROTECTED_UNDEF_TEST)#ifdef WEAK_TEST#pragma weak visibility#endifextern int visibility ();#elseintvisibility (){ return 2;}#endif#ifdef HIDDEN_NORMAL_TESTasm (".hidden visibility_normal");intvisibility_normal (){ return 2;}#endifintvisibility_checkfunptr (){#ifdef WEAK_TEST return 1;#else#ifdef HIDDEN_NORMAL_TEST int (*v) () = visibility_normal;#else int (*v) () = visibility;#endif return (*v) () == 2;#endif}intvisibility_check (){#ifdef WEAK_TEST if (&visibility) return visibility () == 1; else return 1;#else#ifdef HIDDEN_NORMAL_TEST return visibility_normal () == 2;#else return visibility () == 2;#endif#endif}void *visibility_funptr (){#ifdef WEAK_TEST if (&visibility == NULL) return NULL; else#endif return visibility;}#if defined (HIDDEN_UNDEF_TEST) || defined (PROTECTED_UNDEF_TEST)#ifdef WEAK_TEST#pragma weak visibility_var#endifextern int visibility_var;#elseint visibility_var = 2;#endif#ifdef HIDDEN_NORMAL_TESTasm (".hidden visibility_var_normal");int visibility_var_normal = 2;#endifintvisibility_checkvarptr (){#ifdef WEAK_TEST if (&visibility_var) return visibility_var == 1; else return 1;#else#ifdef HIDDEN_NORMAL_TEST int *v = &visibility_var_normal;#else int *v = &visibility_var;#endif return *v == 2;#endif}intvisibility_checkvar (){#ifdef WEAK_TEST return 1;#else#ifdef HIDDEN_NORMAL_TEST return visibility_var_normal == 2;#else return visibility_var == 2;#endif#endif}void *visibility_varptr (){#ifdef WEAK_TEST if (&visibility_var == NULL) return NULL; else#endif return &visibility_var;}intvisibility_varval (){#ifdef WEAK_TEST if (&visibility_var == NULL) return 0; else#endif return visibility_var;}#if defined (HIDDEN_TEST) || defined (HIDDEN_UNDEF_TEST)asm (".hidden visibility");asm (".hidden visibility_var");#else#if defined (PROTECTED_TEST) || defined (PROTECTED_UNDEF_TEST) || defined (PROTECTED_WEAK_TEST)asm (".protected visibility");asm (".protected visibility_var");#endif#endif#ifdef HIDDEN_NORMAL_TESTint shlib_visibility_com;asm (".hidden shlib_visibility_com");intshlib_visibility_checkcom (){ return shlib_visibility_com == 0;}intshlib_visibility_checkweak (){ return 1;}#elif defined (HIDDEN_WEAK_TEST)#pragma weak shlib_visibility_undef_var_weakextern int shlib_visibility_undef_var_weak;asm (".hidden shlib_visibility_undef_var_weak");#pragma weak shlib_visibility_undef_func_weakextern int shlib_visibility_undef_func_weak ();asm (".hidden shlib_visibility_undef_func_weak");#pragma weak shlib_visibility_var_weakextern int shlib_visibility_var_weak;asm (".hidden shlib_visibility_var_weak");#pragma weak shlib_visibility_func_weakextern int shlib_visibility_func_weak ();asm (".hidden shlib_visibility_func_weak");intshlib_visibility_checkcom (){ return 1;}intshlib_visibility_checkweak (){ return &shlib_visibility_undef_var_weak == NULL && &shlib_visibility_undef_func_weak == NULL && &shlib_visibility_func_weak == NULL && &shlib_visibility_var_weak == NULL;}#elseintshlib_visibility_checkcom (){ return 1;}intshlib_visibility_checkweak (){ return 1;}#endif#ifdef PROTECTED_TESTint shared_data = 100; int *shared_data_p (){ return &shared_data;} intshared_func (){ return 100;} void *shared_func_p (){ return shared_func;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -