Refactor DynamicLibrary so searching for a symbol will have a defined order and
authorFrederich Munch <colsebas@hotmail.com>
Mon, 24 Apr 2017 02:30:12 +0000 (02:30 +0000)
committerFrederich Munch <colsebas@hotmail.com>
Mon, 24 Apr 2017 02:30:12 +0000 (02:30 +0000)
commit9f40457d61dc8285e454d688e9062c5813299341
tree6e5120defd9628318c05250ed5e7fc4f63e935b6
parentfe3c21c8797e7fe12b4c9727ae6d4e70236c869a
Refactor DynamicLibrary so searching for a symbol will have a defined order and
libraries are properly unloaded when llvm_shutdown is called.

Summary:
This was mostly affecting usage of the JIT, where storing the library handles in
a set made iteration unordered/undefined. This lead to disagreement between the
JIT and native code as to what the address and implementation of particularly on
Windows with stdlib functions:

JIT: putenv_s("TEST", "VALUE") // called msvcrt.dll, putenv_s
JIT: getenv("TEST") -> "VALUE" // called msvcrt.dll, getenv
Native: getenv("TEST") -> NULL // called ucrt.dll, getenv

Also fixed is the issue of DynamicLibrary::getPermanentLibrary(0,0) on Windows
not giving priority to the process' symbols as it did on Unix.

Reviewers: chapuni, v.g.vassilev, lhames

Reviewed By: lhames

Subscribers: danalbert, srhines, mgorny, vsk, llvm-commits

Differential Revision: https://reviews.llvm.org/D30107

llvm-svn: 301153
llvm/include/llvm/Support/DynamicLibrary.h
llvm/lib/Support/CMakeLists.txt
llvm/lib/Support/DynamicLibrary.cpp
llvm/lib/Support/SearchForAddressOfSpecialSymbol.cpp [deleted file]
llvm/lib/Support/Unix/DynamicLibrary.inc [new file with mode: 0644]
llvm/lib/Support/Windows/DynamicLibrary.inc
llvm/unittests/Support/CMakeLists.txt
llvm/unittests/Support/DynamicLibrary/CMakeLists.txt [new file with mode: 0644]
llvm/unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp [new file with mode: 0644]
llvm/unittests/Support/DynamicLibrary/PipSqueak.cxx [new file with mode: 0644]
llvm/unittests/Support/DynamicLibrary/PipSqueak.h [new file with mode: 0644]