Refactor DynamicLibrary so searching for a symbol will have a defined order and
authorFrederich Munch <colsebas@hotmail.com>
Mon, 24 Apr 2017 19:55:16 +0000 (19:55 +0000)
committerFrederich Munch <colsebas@hotmail.com>
Mon, 24 Apr 2017 19:55:16 +0000 (19:55 +0000)
commit70c377a3625969f4784798726e0ce47a78e24311
tree3b7bfd0879dce29de9268c852bc01c045b7593ae
parent5d7633f75d1de17720de5dba670e9b24403e10eb
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: 301236
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]