-
Notifications
You must be signed in to change notification settings - Fork 30k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
src: add support to pass flags to dlopen
* add constants for dlopen flags, which are needed for dlopen's flag passing. * introduce an optional parameter for process.dlopen(), allowing to pass dlopen flags (using values from os.constants.dlopen). If no flags are passed, the default behavior is to load the library with RTLD_LAZY (perform lazy binding) and RTLD_LOCAL (symbols are available only locally). PR-URL: #12794 Refs: #4105 Refs: libuv/libuv#1331 Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: Timothy Gu <[email protected]> Reviewed-By: Gireesh Punathil <[email protected]> Reviewed-By: Refael Ackermann <[email protected]> Reviewed-By: Sakthipriyan Vairamani <[email protected]>
- Loading branch information
1 parent
aa76ce9
commit 5f22375
Showing
10 changed files
with
290 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
#include <node.h> | ||
#include <v8.h> | ||
|
||
#ifndef _WIN32 | ||
|
||
#include <dlfcn.h> | ||
|
||
extern "C" const char* dlopen_pong(void) { | ||
return "pong"; | ||
} | ||
|
||
namespace { | ||
|
||
using v8::FunctionCallbackInfo; | ||
using v8::Isolate; | ||
using v8::Local; | ||
using v8::Object; | ||
using v8::String; | ||
using v8::Value; | ||
|
||
typedef const char* (*ping)(void); | ||
|
||
static ping ping_func; | ||
|
||
void LoadLibrary(const FunctionCallbackInfo<Value>& args) { | ||
const String::Utf8Value filename(args[0]); | ||
void* handle = dlopen(*filename, RTLD_LAZY); | ||
assert(handle != nullptr); | ||
ping_func = reinterpret_cast<ping>(dlsym(handle, "dlopen_ping")); | ||
assert(ping_func != nullptr); | ||
} | ||
|
||
void Ping(const FunctionCallbackInfo<Value>& args) { | ||
Isolate* isolate = args.GetIsolate(); | ||
assert(ping_func != nullptr); | ||
args.GetReturnValue().Set(String::NewFromUtf8(isolate, ping_func())); | ||
} | ||
|
||
void init(Local<Object> exports) { | ||
NODE_SET_METHOD(exports, "load", LoadLibrary); | ||
NODE_SET_METHOD(exports, "ping", Ping); | ||
} | ||
|
||
NODE_MODULE(binding, init) | ||
|
||
} // anonymous namespace | ||
|
||
#endif // _WIN32 |
Oops, something went wrong.