mirror of
https://github.com/DynamoRIO/dynamorio.git
synced 2026-10-12 02:02:04 +00:00
Massive clang-format of every C or C++ source file (*.h, *.c, *.cpp), except for: + third_party/ + ext/drsysm/libelftc/include/ + ext/drsyms/demangle.cc This is a single, large commit by design to present a single history disruption point and bring the code base into a consistent format. clang-format version 6.0 was used. Tweaks the clang-format rules to indent 4 after pre-processor hashes, to allow single-line case labels, and align trailing comments. Disables the pp_indent vera style check as we changed the indent rule and clang-format now covers it. Leaves the other checks, even though some are redundant (they found clang-format errors). Moves C++ token defines from globals_shared.h and globals.h to a new header, core/lib/c_defines.h, to avoid a clang-format parsing error where it fails to identify the include guard. Adds genapi.pl removal of extra indentation inside API_EXPORT_ONLY and CLIENT_INTERFACE regions. Adds exclusions around large regions we don't want to format, in these files: + core/win32/syscallx.h + core/arch/x86/decode_table.c + core/arch/arm/table_a32_pred.c + core/arch/arm/table_a32_unpred.c + core/arch/arm/table_t32_16.c + core/arch/arm/table_t32_16_it.c + core/arch/arm/table_t32_base.c + core/arch/arm/table_t32_coproc.c + core/arch/arm/table_encode.c Adds smaller exclusions to work around clang-format bugs: + Several missing break-after-return-type + Several >90-char lines + Misc scattered issues, all listed in #2876 Issue: #2876
159 lines
5.7 KiB
C
159 lines
5.7 KiB
C
/* **********************************************************
|
|
* Copyright (c) 2005 VMware, Inc. All rights reserved.
|
|
* **********************************************************/
|
|
|
|
/*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* * Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
*
|
|
* * Neither the name of VMware, Inc. nor the names of its contributors may be
|
|
* used to endorse or promote products derived from this software without
|
|
* specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL VMWARE, INC. OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
|
* DAMAGE.
|
|
*/
|
|
|
|
/* ok this is more than a little shady...we'll just run through
|
|
* assertions, so that if a test fails, we'll keep on trying
|
|
* other ones.
|
|
* probably the only way to handle this better is to come up with
|
|
* a way for running these tests in separate processes.
|
|
* (or: make this driver c++ so we can use try/catch?) */
|
|
#ifndef FAIL_ON_TEST_ASSERT
|
|
# define ASSERTION_EXPRESSION(msg) report_assertion(msg)
|
|
# define EXIT_ON_ASSERT FALSE
|
|
#endif
|
|
|
|
#include "share.h"
|
|
#include "processes.h"
|
|
|
|
#ifdef SINGLE_TEST
|
|
# define TESTNAME STRINGIFY(SINGLE_TEST)
|
|
# define RESTRICTED_BOOL TRUE
|
|
#else
|
|
# define TESTNAME ""
|
|
# define RESTRICTED_BOOL FALSE
|
|
#endif
|
|
|
|
BOOL test_asserted;
|
|
char *assert_message;
|
|
|
|
void
|
|
report_assertion(char *msg)
|
|
{
|
|
if (!test_asserted)
|
|
assert_message = msg;
|
|
test_asserted = TRUE;
|
|
}
|
|
|
|
void
|
|
display_failure(char *testname)
|
|
{
|
|
WCHAR evt_filename[MAX_PATH], w_testname[MAX_PATH];
|
|
FILE *evtfile;
|
|
|
|
fflush(stdout);
|
|
fflush(stderr);
|
|
printf(" Test FAILURE: %s\n", assert_message);
|
|
_snwprintf(w_testname, MAX_PATH, L"%S", testname);
|
|
DO_ASSERT(get_unique_filename(L".", w_testname, L".evtlog", evt_filename, MAX_PATH));
|
|
evtfile = _wfopen(evt_filename, L"w");
|
|
show_all_events(evtfile);
|
|
fclose(evtfile);
|
|
printf(" Events written to: %S\n", evt_filename);
|
|
fflush(stdout);
|
|
}
|
|
|
|
int
|
|
main()
|
|
{
|
|
WCHAR coredir[MAX_PATH];
|
|
WCHAR old_drhome[MAX_PATH];
|
|
WCHAR preinject[MAX_PATH];
|
|
WCHAR mp_cfg_file[MAX_PATH];
|
|
HANDLE *dummy = NULL; /* see LAUNCH_APP_WAIT_HANDLE macro */
|
|
BOOL restricted = RESTRICTED_BOOL;
|
|
int numtests = 0, passed = 0;
|
|
|
|
set_debuglevel(DL_WARN);
|
|
set_abortlevel(DL_WARN);
|
|
|
|
_snwprintf(old_drhome, MAX_PATH, L"%s", get_dynamorio_home());
|
|
|
|
get_testdir(coredir, MAX_PATH);
|
|
CHECKED_OPERATION(setup_installation(coredir, TRUE));
|
|
|
|
_snwprintf(mp_cfg_file, MAX_PATH, L"%s\\conf\\mp-defs.cfg", get_dynamorio_home());
|
|
DO_ASSERT(file_exists(mp_cfg_file));
|
|
|
|
CHECKED_OPERATION(get_preinject_name(preinject, MAX_PATH));
|
|
DO_ASSERT(file_exists(preinject));
|
|
|
|
/* cleanup */
|
|
terminate_process_by_exe(L"tester_1.exe");
|
|
terminate_process_by_exe(L"tester_2.exe");
|
|
|
|
/* reset appinit to make sure it's set to the custom value */
|
|
CHECKED_OPERATION(disable_protection());
|
|
CHECKED_OPERATION(clear_policy());
|
|
CHECKED_OPERATION(enable_protection());
|
|
|
|
DO_ASSERT_WSTR_EQ(get_dynamorio_home(), coredir);
|
|
|
|
#define DO_TEST_HP(name, appstr, use_hotp, block) \
|
|
{ \
|
|
if (!restricted || 0 == strcmp(#name, TESTNAME)) { \
|
|
test_asserted = FALSE; \
|
|
numtests++; \
|
|
printf("Executing " #name " test...\n"); \
|
|
clear_eventlog(); \
|
|
reset_last_event(); \
|
|
CHECKED_OPERATION(load_test_config(appstr, use_hotp)); \
|
|
block if (test_asserted) \
|
|
{ \
|
|
display_failure(#name); \
|
|
} \
|
|
else \
|
|
{ \
|
|
passed++; \
|
|
printf(" Passed.\n"); \
|
|
} \
|
|
} \
|
|
}
|
|
|
|
#include "tests.h"
|
|
|
|
#undef DO_TEST
|
|
|
|
CHECKED_OPERATION(disable_protection());
|
|
CHECKED_OPERATION(clear_policy());
|
|
|
|
/* restore original drhome */
|
|
CHECKED_OPERATION(setup_installation(old_drhome, TRUE));
|
|
|
|
printf("\nTest results: %s [%d/%d tests passed]\n",
|
|
passed == numtests ? "PASS" : "FAIL", passed, numtests);
|
|
|
|
if (passed == numtests)
|
|
return 0;
|
|
else
|
|
return -1;
|
|
}
|