| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Usage of first_automatic_object cache is wrong. This cache is filled by all
loaded DLL files (either implicitly or explicitly with LoadLibrary() call)
by EnumProcessModules() call at first usage of dlopen(). So dlsym() can
resolve global symbols only if they were loaded prior to dlopen() call. Any
future usage of LoadLibrary() does not include newly loaded DLLs into
first_automatic_object cache.
To fix this problem, first_automatic_object cache is fully removed and
EnumProcessModules() call is issued directly in dlsym() call.
As EnumProcessModules() returns all DLLs, included those which were loaded
by dlopen() with RTLD_LOCAL, it may break RTLD_LOCAL support. To address
this problem switch linked-list of all loaded DLLs with RTLD_GLOBAL to
linked-list of all loaded DLLs with RTLD_LOCAL flag. And then skip modules
from EnumProcessModules() which are in linked-list.
Also in WinAPI all DLLs loaded by LoadLibrary() behaves like RTLD_GLOBAL.
So above change is compatible with this behavior.
There may be another problem. Before retrieving HMODULE for DLL filename
(which is done by LoadLibrary()), it is not possible to detect if DLL was
already loaded by RTLD_LOCAL or not. And after calling LoadLibrary() it is
not possible to know if DLL was loaded either by dlsym() with RTLD_LOCAL or
by LoadLibrary() (which is equivalent to RTLD_GLOBAL). To address this
problem, compare number of loaded modules (counted by EnumProcessModules())
before and after LoadLibrary() called from dlsym(). If number does not
change it means that DLL was already loaded. So based on this result either
add or remove HMODULE from linked-list of RTLD_LOCAL modules.
Added test demonstrate usage of:
global = dlopen(NULL, RTLD_GLOBAL); /* global handle */
LoadLibrary("library.dll"); /* this provides function */
function = dlsym(global, "function"); /* resolve function from library.dll */
|
|\
| |
| | |
Add MinGW and MinGW-w64 builds to AppVeyor (take 2)
|
|/ |
|
|\
| |
| | |
#include <stdlib.h>
|
|/ |
|
|\
| |
| | |
Document how to use the library when using CMake
|
| | |
|
|/ |
|
|\
| |
| | |
[README] Fix AppVeyor badge
|
|/ |
|
|\
| |
| | |
[appveyor] Test the library using Visual Studio 15 2017
|
| |
| |
| | |
See https://www.appveyor.com/docs/build-environment/ for the logic behind the option used.
|
|\ \
| |/
|/| |
Fix bug in dlerror second consecutive call
|
|/
|
|
|
|
|
|
|
|
|
|
|
| |
According to the specs, a second consecutive call
to dlerror should always return NULL .
This was the case in dlfcn-win32 before
https://github.com/dlfcn-win32/dlfcn-win32/pull/20
introduce a regression that caused dlerror to crash
on the second consecutive call.
In this commit the issue is fixed as suggested in
https://github.com/dlfcn-win32/dlfcn-win32/issues/34
and a regression test has been added.
|
|\
| |
| | |
Minor AppVeyor configuration cleanup
|
|/ |
|
| |
|
|\
| |
| | |
Fix tests in Visual Studio 2015 and add AppVeyor support
|
| | |
|
| | |
|
| | |
|
|/
|
|
|
|
|
|
| |
For checking the loading of symbols from the global handle,
the printf symbol was loaded, but since Visual Studio 2015
printf is defined as a inline function.
To fix this, the test has been modified to load the symbol
of the fwrite function.
|
|\
| |
| | |
Add CMake code to export a CMake config file
|
|/ |
|
|
|
|
|
| |
instead of /tmp/ to avoid races when building for multiple targets.
Add test files to .gitignore and `make clean`.
|
|\
| |
| | |
Removed wine detection
|
|/
|
| |
It can be set canonically by using CMAKE_CROSSCOMPILIING_EMULATOR variable
|
|\
| |
| | |
Added support for unicode character set.
|
|/ |
|
|
|
| |
Fixes #18.
|
|
|
| |
Not that I care…
|
| |
|
|
|
|
| |
This reverts commit 77a6dfd8c588a64300ea380bf32256da3b93f1ef.
|
|
|
|
|
|
|
| |
(Originally the SHARED macro is created not to handle this case, but it
seems like it works fine for this purpose as well.)
Closes #12.
|
|\
| |
| |
| | |
Closes #9.
|
| |
| |
| |
| | |
Fixes #2.
|
|/ |
|
| |
|
| |
|
|\
| |
| | |
set CMAKE_BUILD_TYPE default
|
|/
|
| |
it's used to set release flags
|
| |
|
|
|
|
| |
This reverts commit 22dd588b852abd5a8de6cd09aa5c876883435ecd.
|
| |
|
| |
|
|
|
|
| |
CMake sucks.
|
|
|
|
|
|
|
|
|
|
| |
This results in an import .lib file.
Closes #4.
Some fixes by Timothy Gu <timothygu99@gmail.com>
Signed-off-by: Timothy Gu <timothygu99@gmail.com>
|
| |
|
| |
|
| |
|