Skip to content

Commit

Permalink
Fix bug #48575 - Use dlopen() just like all the other *nixes instead …
Browse files Browse the repository at this point in the history
…of OSX specific code.
  • Loading branch information
Scott MacVicar committed Aug 6, 2009
1 parent af5df4c commit c54f6df
Show file tree
Hide file tree
Showing 6 changed files with 5 additions and 106 deletions.
12 changes: 0 additions & 12 deletions Zend/Zend.m4
Original file line number Diff line number Diff line change
Expand Up @@ -62,18 +62,6 @@ unix.h \
stdlib.h \
dlfcn.h)
dnl Don't use mach-o/dyld.h on Darwin 8+, dl* is recommended by Apple from there on
dnl See http://developer.apple.com/documentation/DeveloperTools/Conceptual/MachOTopics/Articles/loading_code.html
case $host_alias in
*darwin[[89]]*)
;;
*)
AC_CHECK_HEADERS([ \
mach-o/dyld.h
],[],[][])
;;
esac
AC_TYPE_SIZE_T
AC_TYPE_SIGNAL
Expand Down
20 changes: 1 addition & 19 deletions Zend/zend.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,18 +79,7 @@
# include <dlfcn.h>
#endif

#if HAVE_MACH_O_DYLD_H
#include <mach-o/dyld.h>

/* MH_BUNDLE loading functions for Mac OS X / Darwin */
void *zend_mh_bundle_load (char* bundle_path);
int zend_mh_bundle_unload (void *bundle_handle);
void *zend_mh_bundle_symbol(void *bundle_handle, const char *symbol_name);
const char *zend_mh_bundle_error(void);

#endif /* HAVE_MACH_O_DYLD_H */

#if defined(HAVE_LIBDL) && !defined(HAVE_MACH_O_DYLD_H) && !defined(ZEND_WIN32)
#if defined(HAVE_LIBDL) && !defined(ZEND_WIN32)

# ifndef RTLD_LAZY
# define RTLD_LAZY 1 /* Solaris 1, FreeBSD's (2.1.7.1 and older) */
Expand All @@ -116,13 +105,6 @@ const char *zend_mh_bundle_error(void);
# define DL_ERROR dlerror
# define DL_HANDLE void *
# define ZEND_EXTENSIONS_SUPPORT 1
#elif defined(HAVE_MACH_O_DYLD_H)
# define DL_LOAD(libname) zend_mh_bundle_load(libname)
# define DL_UNLOAD zend_mh_bundle_unload
# define DL_FETCH_SYMBOL(h,s) zend_mh_bundle_symbol(h,s)
# define DL_ERROR zend_mh_bundle_error
# define DL_HANDLE void *
# define ZEND_EXTENSIONS_SUPPORT 1
#elif defined(ZEND_WIN32)
# define DL_LOAD(libname) LoadLibrary(libname)
# define DL_FETCH_SYMBOL GetProcAddress
Expand Down
2 changes: 1 addition & 1 deletion Zend/zend_API.c
Original file line number Diff line number Diff line change
Expand Up @@ -2114,7 +2114,7 @@ void module_destructor(zend_module_entry *module) /* {{{ */
zend_unregister_functions(module->functions, -1, NULL TSRMLS_CC);
}

#if HAVE_LIBDL || defined(HAVE_MACH_O_DYLD_H)
#if HAVE_LIBDL
#if !(defined(NETWARE) && defined(APACHE_1_BUILD))
if (module->handle) {
DL_UNLOAD(module->handle);
Expand Down
61 changes: 0 additions & 61 deletions Zend/zend_extensions.c
Original file line number Diff line number Diff line change
Expand Up @@ -217,67 +217,6 @@ ZEND_API zend_extension *zend_get_extension(const char *extension_name)
return NULL;
}

/*
* Support for dynamic loading of MH_BUNDLEs on Darwin / Mac OS X
*
*/

#if HAVE_MACH_O_DYLD_H

void *zend_mh_bundle_load(char* bundle_path)
{
NSObjectFileImage bundle_image;
NSModule bundle_handle;
NSSymbol bundle_init_nssymbol;
void (*bundle_init)(void);

if (NSCreateObjectFileImageFromFile(bundle_path, &bundle_image) != NSObjectFileImageSuccess) {
return NULL;
}

bundle_handle = NSLinkModule(bundle_image, bundle_path, NSLINKMODULE_OPTION_NONE);
NSDestroyObjectFileImage(bundle_image);

/* call the init function of the bundle */
bundle_init_nssymbol = NSLookupSymbolInModule(bundle_handle, "__init");
if (bundle_init_nssymbol != NULL) {
bundle_init = NSAddressOfSymbol(bundle_init_nssymbol);
bundle_init();
}

return bundle_handle;
}

int zend_mh_bundle_unload(void *bundle_handle)
{
NSSymbol bundle_fini_nssymbol;
void (*bundle_fini)(void);

/* call the fini function of the bundle */
bundle_fini_nssymbol = NSLookupSymbolInModule(bundle_handle, "__fini");
if (bundle_fini_nssymbol != NULL) {
bundle_fini = NSAddressOfSymbol(bundle_fini_nssymbol);
bundle_fini();
}

return (int) NSUnLinkModule(bundle_handle, NULL);
}

void *zend_mh_bundle_symbol(void *bundle_handle, const char *symbol_name)
{
NSSymbol symbol;
symbol = NSLookupSymbolInModule(bundle_handle, symbol_name);
return NSAddressOfSymbol(symbol);
}

const char *zend_mh_bundle_error(void)
{
/* Witness the state of the art error reporting */
return NULL;
}

#endif /* HAVE_MACH_O_DYLD_H */

/*
* Local variables:
* tab-width: 4
Expand Down
10 changes: 0 additions & 10 deletions configure.in
Original file line number Diff line number Diff line change
Expand Up @@ -486,16 +486,6 @@ assert.h
#endif
])

dnl Don't use mach-o/dyld.h on Darwin 8+, dl* is recommended by Apple from there on
dnl See http://developer.apple.com/documentation/DeveloperTools/Conceptual/MachOTopics/Articles/loading_code.html
case $host_alias in
*darwin[[89]]*)
;;
*)
AC_CHECK_HEADERS([mach-o/dyld.h],[],[],[])
;;
esac

PHP_FOPENCOOKIE
PHP_BROKEN_GETCWD
PHP_BROKEN_GLIBC_FOPEN_APPEND
Expand Down
6 changes: 3 additions & 3 deletions ext/standard/dl.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

#include "SAPI.h"

#if defined(HAVE_LIBDL) || HAVE_MACH_O_DYLD_H
#if defined(HAVE_LIBDL)
#include <stdlib.h>
#include <stdio.h>
#ifdef HAVE_STRING_H
Expand All @@ -47,7 +47,7 @@
#include <sys/param.h>
#define GET_DL_ERROR() DL_ERROR()
#endif
#endif /* defined(HAVE_LIBDL) || HAVE_MACH_O_DYLD_H */
#endif /* defined(HAVE_LIBDL) */

/* {{{ proto int dl(string extension_filename)
Load a PHP extension at runtime */
Expand Down Expand Up @@ -92,7 +92,7 @@ PHPAPI PHP_FUNCTION(dl)
}
/* }}} */

#if defined(HAVE_LIBDL) || HAVE_MACH_O_DYLD_H
#if defined(HAVE_LIBDL)

#ifdef ZTS
#define USING_ZTS 1
Expand Down

0 comments on commit c54f6df

Please sign in to comment.