dll revision 34f9b3eef6fdadbda0a846aa4d68691ac40eace5
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinset prototyped
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinhdr dl,dlfcn,dll,rld_interface,mach-o/dyld
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib dlopen -ldl
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinlib dllload,loadbind,shl_load -ldl
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst dll_DYNAMIC link{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern struct link_dynamic _DYNAMIC;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin do if test -d $d
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then for s in "*.*" "*[!a]*"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin do for b in libc
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin do for i in $d/$b.$s
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin do if test -f $i
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then lib=$i
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case $lib in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin ?*) break 3 ;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case $lib in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *.[0-9]*.[0-9]*)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin i=`echo $lib | sed 's,\([^0-9]*[0-9]*\).*,\1,'`
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if test -f $i
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then lib=$i
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin # some run time linkers barf with /lib/xxx if
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case $lib in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *) if test -f /usr$lib
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then lib=/usr$lib
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case $lib in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case $lib in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case `package` in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin abi=/lib32
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin abi=/lib64
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case $abi in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin ?*) if test -d $abi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then lib=`echo $lib | sed 's,/usr/lib/,,'`
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin lib=$abi/$lib
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin echo "#define _DLL_NEXT_PATH \"$lib\""
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintst - output{
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz #if defined(__MVS__) && !defined(__SUSV3)
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz #define __SUSV3 1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_dlfcn && _lib_dlopen
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_rld_interface
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_rld_interface
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin void* dll;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin static char* local[] = { "__elf_header", "_call_add_gp_range", "_etext" };
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz printf("#if defined(__MVS__) && !defined(__SUSV3)\n");
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz printf("#define __SUSV3 1\n");
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_dlfcn && _lib_dlopen
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#include <dlfcn.h>\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef RTLD_LAZY
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define RTLD_LAZY 1\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef RTLD_NOW
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define RTLD_NOW 2\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef RTLD_GLOBAL
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define RTLD_GLOBAL 0\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef RTLD_LOCAL
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define RTLD_LOCAL 0\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #ifndef RTLD_PARENT
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define RTLD_PARENT 0\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if defined(_hdr_mach_o_dyld) && !defined(RTLD_NEXT)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define RTLD_NEXT ((void*)16)\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_rld_interface
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!(dll = dlopen(0, RTLD_LAZY)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin for (i = 0; i < sizeof(local) / sizeof(local[0]); i++)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (dlsym(dll, local[i]))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (i >= sizeof(local) / sizeof(local[0]))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (i >= 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define _DLL_RLD_SYM %s\n", local[i]);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define _DLL_RLD_SYM_STR \"%s\"\n", local[i]);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define _DLL_RLD_SYM_TYPE void*\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DLL_INFO_PREVER 0x0001 /* pre-suffix style version */\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define DLL_INFO_DOTVER 0x0002 /* post-suffix style version */\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("typedef struct Dllinfo_s\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("{\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf(" char** sibling; /* sibling dirs on $PATH */\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf(" char* prefix; /* library name prefix */\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf(" char* suffix; /* library name suffix */\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf(" char* env; /* library path env var */\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf(" int flags; /* DLL_INFO_* flags */\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifdef _DLLINFO_PRIVATE_\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf(" _DLLINFO_PRIVATE_\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("} Dllinfo_t;\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("typedef struct Dllent_s\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("{\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf(" char* path;\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf(" char* name;\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifdef _DLLENT_PRIVATE_\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf(" _DLLENT_PRIVATE_\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("} Dllent_t;\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("typedef struct Dllscan_s\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("{\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf(" void* pad;\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#ifdef _DLLSCAN_PRIVATE_\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf(" _DLLSCAN_PRIVATE_\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("} Dllscan_t;\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if !_hdr_dlfcn || !_lib_dlopen
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern void* dlopen(const char*, int);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern void* dlsym(void*, const char*);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern int dlclose(void*);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern char* dlerror(void);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#if _BLD_dll && defined(__EXPORT__)\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define extern __EXPORT__\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#endif\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern Dllinfo_t* dllinfo(void);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern void* dllplug(const char*, const char*, const char*, int, char*, size_t);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern void* dllfind(const char*, const char*, int, char*, size_t);\n");
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz printf("extern void* dllopen(const char*, int);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern void* dllnext(int);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern void* dlllook(void*, const char*);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_rld_interface
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (i >= 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern void* _dll_next(int, _DLL_RLD_SYM_TYPE*);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#define dllnext(f) _dll_next(f, &_DLL_RLD_SYM)\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern Dllscan_t* dllsopen(const char*, const char*, const char*);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern Dllent_t* dllsread(Dllscan_t*);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern int dllsclose(Dllscan_t*);\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("#undef extern\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin #if _hdr_rld_interface
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (i >= 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("extern _DLL_RLD_SYM_TYPE _DLL_RLD_SYM;\n");
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin printf("\n");