From 76bc2d1ed7f13fb329c33f48756ea3c24c59a6ea Mon Sep 17 00:00:00 2001 From: yugui Date: Thu, 17 May 2012 02:48:59 +0000 Subject: Imports Ruby's port to NativeClient (a.k.a NaCl). Patch by Google Inc. [ruby-core:45073]. * configure.in (RUBY_NACL): New M4 func to configure variables for NaCl. (RUBY_NACL_CHECK_PEPPER_TYPES): New M4 func to check the old names of Pepper interface types. (BTESTRUBY): New variable to specify which ruby should be run on "make btest". NaCl can run the built binary by sel_ldr, but it need rbconfig.rb. So this variable is distinguished from $MINIRUBY. * thread_pthread.c: Disabled some features on NaCl. * io.c: ditto. * process.c: ditto. * signal.c: ditto. * file.c: ditto. * missing/flock.c: ditto. * nacl/pepper_main.c: An example implementation of Pepper application that embeds Ruby. * nacl/example.html: An example of web page that uses the Pepper application. * nacl/nacl-config.rb: Detects variants of NaCl SDK. * nacl/GNUmakefile.in: Makefile template for NaCl specific build process. * nacl/package.rb: script for packaging a NaCl-Ruby embedding application. * nacl/reate_nmf.rb: Wrapper script of create_nmf.py * dln.c (dln_load): Added a hack to call on NaCl. * util.c (ruby_getcwd): Path to the current directort is not available on NaCl. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35672 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- dln.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'dln.c') diff --git a/dln.c b/dln.c index 38e1dcd4b4..cc15370fbc 100644 --- a/dln.c +++ b/dln.c @@ -1318,13 +1318,28 @@ dln_load(const char *file) # define RTLD_GLOBAL 0 #endif +#ifdef __native_client__ + char* p, *orig; + if (file[0] == '.' && file[1] == '/') file+=2; + orig = strdup(file); + for (p = file; *p; ++p) { + if (*p == '/') *p = '_'; + } +#endif /* Load file */ if ((handle = (void*)dlopen(file, RTLD_LAZY|RTLD_GLOBAL)) == NULL) { +#ifdef __native_client__ + free(orig); +#endif error = dln_strerror(); goto failed; } init_fct = (void(*)())(VALUE)dlsym(handle, buf); +#ifdef __native_client__ + strcpy(file, orig); + free(orig); +#endif #if defined __SYMBIAN32__ if (init_fct == NULL) { init_fct = (void(*)())dlsym(handle, "1"); /* Some Symbian versions do not support symbol table in DLL, ordinal numbers only */ -- cgit v1.2.3