-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Introduce
art::FastExit
to replace all uses of quick_exit
in ART.
No longer use `quick_exit(3)` in ART, as it does not play well with Clang's code coverage instrumentation (see b/187935521 and b/186576313). Replace all its uses with a new routine, `art::FastExit`, calling either `exit(3)` when ART is built with Clang's code coverage instrumentation (in order to dump coverage profiles when the program terminates) or `_exit(2)` otherwise (to exit quickly). Function `art::FastExit` is implemented as part of the `art_libartbase_headers` header library, so that it can be used easily in `dalvikvm`. Test: mmma art Test: ART tests Bug: 186576313 Bug: 187935521 Change-Id: I7b4f86f6f0e7b12814684ecea73a2ed0ef994395
- Loading branch information
1 parent
f2d1a51
commit bdf1737
Showing
8 changed files
with
73 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
/* | ||
* Copyright (C) 2021 The Android Open Source Project | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
#ifndef ART_LIBARTBASE_BASE_FAST_EXIT_H_ | ||
#define ART_LIBARTBASE_BASE_FAST_EXIT_H_ | ||
|
||
// Header-only definition of `art::FastExit`. | ||
// | ||
// Ideally, this routine should be declared in `base/os.h` and defined in | ||
// `base/os_linux.cc`, but as `libartbase` is not linked (directly) with | ||
// `dalvikvm`, we would not be able to easily use `art::FastExit` in | ||
// `dex2oat`. Use a header-only approach and define `art::FastExit` in its own | ||
// file for clarity. | ||
|
||
#include <base/macros.h> | ||
|
||
namespace art { | ||
|
||
#ifdef __ANDROID_CLANG_COVERAGE__ | ||
static constexpr bool kAndroidClangCoverage = true; | ||
#else | ||
static constexpr bool kAndroidClangCoverage = false; | ||
#endif | ||
|
||
// Terminate program without completely cleaning the resources (e.g. without | ||
// calling destructors), unless ART is built with Clang (native) code coverage | ||
// instrumentation; in that case, exit normally to allow LLVM's code coverage | ||
// profile dumping routine (`__llvm_profile_write_file`), registered via | ||
// `atexit` in Android when Clang instrumentation is enabled, to be called | ||
// before terminating the program. | ||
NO_RETURN inline void FastExit(int exit_code) { | ||
if (kAndroidClangCoverage) { | ||
exit(exit_code); | ||
} else { | ||
_exit(exit_code); | ||
} | ||
} | ||
|
||
} // namespace art | ||
|
||
#endif // ART_LIBARTBASE_BASE_FAST_EXIT_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters