2016-01-11 18:27:31 +08:00
|
|
|
// This header is included in all the test programs (C and C++) and provides a
|
|
|
|
// hook for dealing with platform-specifics.
|
[lldb/test] Make TestLoadUnload compatible with windows
Summary:
This patch introduces a header "dylib.h" which can be used in tests to
handle shared libraries semi-portably. The shared library APIs on
windows and posix systems look very different, but their underlying
functionality is relatively similar, so the mapping is not difficult.
It also introduces two new macros to wrap the functinality necessary to
export/import function across the dll boundary on windows. Previously we
had the LLDB_TEST_API macro for this purpose, which automagically
changed meaning depending on whether we were building the shared library
or the executable. While convenient for simple cases, this approach was
not sufficient for the more complicated setups where one deals with
multiple shared libraries.
Lastly it rewrites TestLoadUnload, to make use of the new APIs. The
trickiest aspect there is the handling of DYLD_LIBRARY_PATH on macos --
previously setting this variable was not needed as the test used
@executable_path-relative dlopens, but the new generic api does not
support that. Other systems do not support such dlopens either so the
test already contained support for setting the appropriate path
variable, and this patch just makes that logic more generic. In doesn't
seem that the purpose of this test was to exercise @executable_path
imports, so this should not be a problem.
These changes are sufficient to make some of the TestLoadUnload tests
pass on windows. Two other tests will start to pass once D77287 lands.
Reviewers: amccarth, jingham, JDevlieghere, compnerd
Subscribers: lldb-commits
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D77662
2020-04-07 04:24:51 +08:00
|
|
|
|
2016-01-11 18:27:31 +08:00
|
|
|
#if defined(_WIN32) || defined(_WIN64)
|
[lldb/test] Make TestLoadUnload compatible with windows
Summary:
This patch introduces a header "dylib.h" which can be used in tests to
handle shared libraries semi-portably. The shared library APIs on
windows and posix systems look very different, but their underlying
functionality is relatively similar, so the mapping is not difficult.
It also introduces two new macros to wrap the functinality necessary to
export/import function across the dll boundary on windows. Previously we
had the LLDB_TEST_API macro for this purpose, which automagically
changed meaning depending on whether we were building the shared library
or the executable. While convenient for simple cases, this approach was
not sufficient for the more complicated setups where one deals with
multiple shared libraries.
Lastly it rewrites TestLoadUnload, to make use of the new APIs. The
trickiest aspect there is the handling of DYLD_LIBRARY_PATH on macos --
previously setting this variable was not needed as the test used
@executable_path-relative dlopens, but the new generic api does not
support that. Other systems do not support such dlopens either so the
test already contained support for setting the appropriate path
variable, and this patch just makes that logic more generic. In doesn't
seem that the purpose of this test was to exercise @executable_path
imports, so this should not be a problem.
These changes are sufficient to make some of the TestLoadUnload tests
pass on windows. Two other tests will start to pass once D77287 lands.
Reviewers: amccarth, jingham, JDevlieghere, compnerd
Subscribers: lldb-commits
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D77662
2020-04-07 04:24:51 +08:00
|
|
|
#define LLDB_DYLIB_EXPORT __declspec(dllexport)
|
|
|
|
#define LLDB_DYLIB_IMPORT __declspec(dllimport)
|
2016-01-11 18:27:31 +08:00
|
|
|
#else
|
[lldb/test] Make TestLoadUnload compatible with windows
Summary:
This patch introduces a header "dylib.h" which can be used in tests to
handle shared libraries semi-portably. The shared library APIs on
windows and posix systems look very different, but their underlying
functionality is relatively similar, so the mapping is not difficult.
It also introduces two new macros to wrap the functinality necessary to
export/import function across the dll boundary on windows. Previously we
had the LLDB_TEST_API macro for this purpose, which automagically
changed meaning depending on whether we were building the shared library
or the executable. While convenient for simple cases, this approach was
not sufficient for the more complicated setups where one deals with
multiple shared libraries.
Lastly it rewrites TestLoadUnload, to make use of the new APIs. The
trickiest aspect there is the handling of DYLD_LIBRARY_PATH on macos --
previously setting this variable was not needed as the test used
@executable_path-relative dlopens, but the new generic api does not
support that. Other systems do not support such dlopens either so the
test already contained support for setting the appropriate path
variable, and this patch just makes that logic more generic. In doesn't
seem that the purpose of this test was to exercise @executable_path
imports, so this should not be a problem.
These changes are sufficient to make some of the TestLoadUnload tests
pass on windows. Two other tests will start to pass once D77287 lands.
Reviewers: amccarth, jingham, JDevlieghere, compnerd
Subscribers: lldb-commits
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D77662
2020-04-07 04:24:51 +08:00
|
|
|
#define LLDB_DYLIB_EXPORT
|
|
|
|
#define LLDB_DYLIB_IMPORT
|
2016-01-11 18:27:31 +08:00
|
|
|
#endif
|
[lldb/test] Make TestLoadUnload compatible with windows
Summary:
This patch introduces a header "dylib.h" which can be used in tests to
handle shared libraries semi-portably. The shared library APIs on
windows and posix systems look very different, but their underlying
functionality is relatively similar, so the mapping is not difficult.
It also introduces two new macros to wrap the functinality necessary to
export/import function across the dll boundary on windows. Previously we
had the LLDB_TEST_API macro for this purpose, which automagically
changed meaning depending on whether we were building the shared library
or the executable. While convenient for simple cases, this approach was
not sufficient for the more complicated setups where one deals with
multiple shared libraries.
Lastly it rewrites TestLoadUnload, to make use of the new APIs. The
trickiest aspect there is the handling of DYLD_LIBRARY_PATH on macos --
previously setting this variable was not needed as the test used
@executable_path-relative dlopens, but the new generic api does not
support that. Other systems do not support such dlopens either so the
test already contained support for setting the appropriate path
variable, and this patch just makes that logic more generic. In doesn't
seem that the purpose of this test was to exercise @executable_path
imports, so this should not be a problem.
These changes are sufficient to make some of the TestLoadUnload tests
pass on windows. Two other tests will start to pass once D77287 lands.
Reviewers: amccarth, jingham, JDevlieghere, compnerd
Subscribers: lldb-commits
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D77662
2020-04-07 04:24:51 +08:00
|
|
|
|
|
|
|
#ifdef COMPILING_LLDB_TEST_DLL
|
|
|
|
#define LLDB_TEST_API LLDB_DYLIB_EXPORT
|
2016-01-11 18:27:31 +08:00
|
|
|
#else
|
[lldb/test] Make TestLoadUnload compatible with windows
Summary:
This patch introduces a header "dylib.h" which can be used in tests to
handle shared libraries semi-portably. The shared library APIs on
windows and posix systems look very different, but their underlying
functionality is relatively similar, so the mapping is not difficult.
It also introduces two new macros to wrap the functinality necessary to
export/import function across the dll boundary on windows. Previously we
had the LLDB_TEST_API macro for this purpose, which automagically
changed meaning depending on whether we were building the shared library
or the executable. While convenient for simple cases, this approach was
not sufficient for the more complicated setups where one deals with
multiple shared libraries.
Lastly it rewrites TestLoadUnload, to make use of the new APIs. The
trickiest aspect there is the handling of DYLD_LIBRARY_PATH on macos --
previously setting this variable was not needed as the test used
@executable_path-relative dlopens, but the new generic api does not
support that. Other systems do not support such dlopens either so the
test already contained support for setting the appropriate path
variable, and this patch just makes that logic more generic. In doesn't
seem that the purpose of this test was to exercise @executable_path
imports, so this should not be a problem.
These changes are sufficient to make some of the TestLoadUnload tests
pass on windows. Two other tests will start to pass once D77287 lands.
Reviewers: amccarth, jingham, JDevlieghere, compnerd
Subscribers: lldb-commits
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D77662
2020-04-07 04:24:51 +08:00
|
|
|
#define LLDB_TEST_API LLDB_DYLIB_IMPORT
|
2016-01-11 18:27:31 +08:00
|
|
|
#endif
|
|
|
|
|
2016-08-10 07:06:08 +08:00
|
|
|
#if defined(_WIN32)
|
|
|
|
#define LLVM_PRETTY_FUNCTION __FUNCSIG__
|
|
|
|
#else
|
|
|
|
#define LLVM_PRETTY_FUNCTION LLVM_PRETTY_FUNCTION
|
|
|
|
#endif
|
|
|
|
|
2016-01-11 18:27:31 +08:00
|
|
|
|
|
|
|
// On some systems (e.g., some versions of linux) it is not possible to attach to a process
|
|
|
|
// without it giving us special permissions. This defines the lldb_enable_attach macro, which
|
|
|
|
// should perform any such actions, if needed by the platform. This is a macro instead of a
|
|
|
|
// function to avoid the need for complex linking of the test programs.
|
|
|
|
#if defined(__linux__)
|
|
|
|
#include <sys/prctl.h>
|
|
|
|
|
2016-07-14 18:43:21 +08:00
|
|
|
// Android API <= 16 does not have these defined.
|
|
|
|
#ifndef PR_SET_PTRACER
|
|
|
|
#define PR_SET_PTRACER 0x59616d61
|
|
|
|
#endif
|
|
|
|
#ifndef PR_SET_PTRACER_ANY
|
|
|
|
#define PR_SET_PTRACER_ANY ((unsigned long)-1)
|
|
|
|
#endif
|
|
|
|
|
2016-01-11 18:27:31 +08:00
|
|
|
// For now we execute on best effort basis. If this fails for some reason, so be it.
|
|
|
|
#define lldb_enable_attach() \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
const int prctl_result = prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0); \
|
|
|
|
(void)prctl_result; \
|
|
|
|
} while (0)
|
|
|
|
|
|
|
|
#else // not linux
|
|
|
|
|
|
|
|
#define lldb_enable_attach()
|
|
|
|
|
|
|
|
#endif
|