mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-04-16 05:10:32 +00:00

Summary: This aims to replace the different decorators we've had on each libc++ test with a single solution. Each libc++ will be assigned to the "libc++" category and a single central piece of code will decide whether we are actually able to run libc++ test in the given configuration by enabling or disabling the category (while giving the user the opportunity to override this). I started this effort because I wanted to get libc++ tests running on android, and none of the existing decorators worked for this use case: - skipIfGcc - incorrect, we can build libc++ executables on android with gcc (in fact, after this, we can now do it on linux as well) - lldbutil.skip_if_library_missing - this checks whether libc++.so is loaded in the proces, which fails in case of a statically linked libc++ (this makes copying executables to the remote target easier to manage). To make this work I needed to split out the pseudo_barrier code from the force-included file, as libc++'s atomic does not play well with gcc on linux, and this made every test fail, even though we need the code only in the threading tests. So far, I am only annotating one of the tests with this category. If this does not break anything, I'll proceed to update the rest. Reviewers: jingham, zturner, EricWF Subscribers: srhines, lldb-commits Differential Revision: https://reviews.llvm.org/D30984 llvm-svn: 299028
48 lines
1.6 KiB
C
48 lines
1.6 KiB
C
// This header is included in all the test programs (C and C++) and provides a
|
|
// hook for dealing with platform-specifics.
|
|
#if defined(_WIN32) || defined(_WIN64)
|
|
#ifdef COMPILING_LLDB_TEST_DLL
|
|
#define LLDB_TEST_API __declspec(dllexport)
|
|
#else
|
|
#define LLDB_TEST_API __declspec(dllimport)
|
|
#endif
|
|
#else
|
|
#define LLDB_TEST_API
|
|
#endif
|
|
|
|
#if defined(_WIN32)
|
|
#define LLVM_PRETTY_FUNCTION __FUNCSIG__
|
|
#else
|
|
#define LLVM_PRETTY_FUNCTION LLVM_PRETTY_FUNCTION
|
|
#endif
|
|
|
|
|
|
// 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>
|
|
|
|
// 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
|
|
|
|
// 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
|