/* 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_TEST extern int mainvar; #endif /* This variable is defined in the shared library, and overridden by the main program. */ #ifndef XCOFF_TEST int 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_TEST int shlib_mainvar () { return mainvar; } #endif #ifndef XCOFF_TEST int shlib_overriddenvar () { return overriddenvar; } #endif int shlib_shlibvar1 () { return shlibvar1; } int shlib_shlibvar2 () { return shlibvar2; } /* This function calls a function defined by another object in the shared library. */ extern int shlib_shlibcalled (); int shlib_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 (); int shlib_shlibcall2 () { return shlib_overriddencall2 (); } #endif /* This function calls a function defined by the main program. */ #ifndef XCOFF_TEST extern int main_called (); int shlib_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_TEST int shlib_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_TEST int (*shlib_getfunptr2 ()) () { return main_called; } #endif /* This function makes sure that constant data and local functions work. */ #ifndef __STDC__ #define const #endif static int i = 6; static const char *str = "Hello, world\n"; int shlib_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; }