| 1 | /* This file is used to build libdl.so with stub versions of `dlopen`, `dlsym`, |
| 2 | * etc. The intention is that this stubbed libdl.so can be used to build |
| 3 | * libraries and applications which use `dlopen` without committing to a |
| 4 | * specific runtime implementation. Later, it can be replaced with a real, |
| 5 | * working libdl.so (e.g. at runtime or component composition time). |
| 6 | * |
| 7 | * For example, the `wasm-tools component link` subcommand can be used to create |
| 8 | * a component that bundles any `dlopen`-able libraries in such a way that their |
| 9 | * function exports can be resolved symbolically at runtime using an |
| 10 | * implementation of libdl.so designed for that purpose. In other cases, a |
| 11 | * runtime might provide Emscripten-style dynamic linking via URLs or else a |
| 12 | * more traditional, filesystem-based implementation. Finally, even this |
| 13 | * stubbed version of libdl.so can be used at runtime in cases where dynamic |
| 14 | * library resolution cannot or should not be supported (and the application can |
| 15 | * handle this situation gracefully). */ |
| 16 | |
| 17 | #include <stddef.h> |
| 18 | #include <dlfcn.h> |
| 19 | |
| 20 | static const char *error = NULL; |
| 21 | |
| 22 | weak int dlclose(void *library) |
| 23 | { |
| 24 | 	error = "dlclose not implemented"; |
| 25 | 	return -1; |
| 26 | } |
| 27 | |
| 28 | weak char *dlerror(void) |
| 29 | { |
| 30 | 	const char *var = error; |
| 31 | 	error = NULL; |
| 32 | 	return (char*) var; |
| 33 | } |
| 34 | |
| 35 | weak void *dlopen(const char *name, int flags) |
| 36 | { |
| 37 | 	error = "dlopen not implemented"; |
| 38 | 	return NULL; |
| 39 | } |
| 40 | |
| 41 | weak void *dlsym(void *library, const char *name) |
| 42 | { |
| 43 | 	error = "dlsym not implemented"; |
| 44 | 	return NULL; |
| 45 | } |