TTobias Hieta[scudo] Try to fix standalone build on armv7
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[scudo] Get rid of initLinkerInitialized Now that everything is forcibly linker initialized, it feels like a good time to get rid of the init/initLinkerInitialized split. This allows to get rid of various memset construct in init that gcc complains about (this fixes a Fuchsia open issue). I added various DCHECKs to ensure that we would get a zero-inited object when entering init, which required ensuring that unmapTestOnly leaves the object in a good state (tests are currently the only location where an allocator can be "de-initialized"). Running the tests with --gtest_repeat= showed no issue. Differential Revision: https://reviews.llvm.org/D103119 | 5 年前 | |
scudo: Add support for tracking stack traces of secondary allocations. There is no centralized store of information related to secondary allocations. Moreover the allocations themselves become inaccessible when the allocation is freed in order to implement UAF detection, so we can't store information there to be used in case of UAF anyway. Therefore our storage location for tracking stack traces of secondary allocations is a ring buffer. The ring buffer is copied to the process creating the crash dump when a fault occurs. The ring buffer is also used to store stack traces for primary deallocations. Stack traces for primary allocations continue to be stored inline. In order to support the scenario where an access to the ring buffer is interrupted by a concurrently occurring crash, the ring buffer is accessed in a lock-free manner. Differential Revision: https://reviews.llvm.org/D94212 | 5 年前 | |
[scudo] Satisfy -Wstrict-prototypes Differential Revision: https://reviews.llvm.org/D129391 | 3 年前 | |
[compiler-rt][CMake] Set --unwindlib=none when using LLVM libunwind We already link libunwind explicitly so avoid trying to link toolchain's default libunwind which may be missing. This matches what we already do for libcxx and libcxxabi. Differential Revision: https://reviews.llvm.org/D129472 | 3 年前 | |
[scudo] [standalone] [NFC] clang-format code. clang-format the scudo standalone codebase. Reviewed By: cryptoad Differential Revision: https://reviews.llvm.org/D93056 | 5 年前 | |
[scudo] Try to fix standalone build on armv7 When linking scudo standalone on armv7, it can't find symbols related to unwinding (e.g. __aeabi_unwind_cpp_pr0). This is because it is passing --unwindlib=none. This patch hacks around the issue by adding COMPILER_RT_UNWINDER_LINK_LIBS to the link line. I don't know anything about scudo, so I'm not sure what the original intention was. See also https://github.com/llvm/llvm-project/issues/56900 Differential Revision: https://reviews.llvm.org/D131250 (cherry picked from commit 8342ea6eac85bd20c56be0ab71b4ebbccd134c67) | 3 年前 | |
[scudo] Enabled MTE before the first allocator Reviewed By: pcc Differential Revision: https://reviews.llvm.org/D103726 | 4 年前 | |
scudo: Make it thread-safe to set some runtime configuration flags. Move some of the flags previously in Options, as well as the UseMemoryTagging flag previously in the primary allocator, into an atomic variable so that it can be updated while other threads are running. Relaxed accesses are used because we only have the requirement that the other threads see the new value eventually. The code is set up so that the variable is generally loaded once per allocation function call with the exception of some rarely used code such as error handlers. The flag bits can generally stay in a register during the execution of the allocation function which means that they can be branched on with minimal overhead (e.g. TBZ on aarch64). Differential Revision: https://reviews.llvm.org/D88523 | 5 年前 | |
[scudo] Get rid of initLinkerInitialized Now that everything is forcibly linker initialized, it feels like a good time to get rid of the init/initLinkerInitialized split. This allows to get rid of various memset construct in init that gcc complains about (this fixes a Fuchsia open issue). I added various DCHECKs to ensure that we would get a zero-inited object when entering init, which required ensuring that unmapTestOnly leaves the object in a good state (tests are currently the only location where an allocator can be "de-initialized"). Running the tests with --gtest_repeat= showed no issue. Differential Revision: https://reviews.llvm.org/D103119 | 5 年前 | |
[scudo] Add missing include for extern variable declaration Add include to resolve compiler warning about no previous extern declaration for non-static HashAlgorithm Differential Revision: https://reviews.llvm.org/D122630 | 4 年前 | |
[NFCI] clang-format scudo standalone | 4 年前 | |
[NFCI] clang-format scudo standalone | 4 年前 | |
[scudo] Use nullptr instead of integer-to-pointer cast Differential Revision: https://reviews.llvm.org/D121856 | 4 年前 | |
[scudo] Rework dieOnMapUnmapError Said function had a few shortfalls: - didn't set an abort message on Android - was logged on several lines - didn't provide extra information like the size requested if OOM'ing This improves the function to address those points. Differential Revision: https://reviews.llvm.org/D103034 | 5 年前 | |
[scudo] Add Scudo support for Trusty OS trusty.cpp and trusty.h define Trusty implementations of map and other platform-specific functions. In addition to adding Trusty configurations in allocator_config.h and size_class_map.h, MapSizeIncrement and PrimaryEnableRandomOffset are added as configurable options in allocator_config.h. Background on Trusty: https://source.android.com/security/trusty Differential Revision: https://reviews.llvm.org/D103578 | 4 年前 | |
[NFCI] clang-format scudo standalone | 4 年前 | |
[scudo][standalone] Restore GWP-ASan flag parsing With D92696, the Scudo Standalone GWP-ASan flag parsing was changed to the new GWP-ASan optional one. We do not necessarily want this, as this duplicates flag parsing code in Scudo Standalone when using the GWP-ASan integration. This CL reverts the changes within Scudo Standalone, and increases MaxFlags to 20 as an addionnal option got us to the current max. Differential Revision: https://reviews.llvm.org/D95542 | 5 年前 | |
[Scudo] [GWP-ASan] Add GWP-ASan to Scudo Standalone. Summary: Adds GWP-ASan to Scudo standalone. Default parameters are pulled across from the GWP-ASan build. No backtrace support as of yet. Reviewers: cryptoad, eugenis, pcc Reviewed By: cryptoad Subscribers: merge_guards_bot, mgorny, #sanitizers, llvm-commits, cferris, vlad.tsyrklevich, pcc Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D71229 | 6 年前 | |
[Scudo] Delete unused flag 'rss_limit_mb'. EOM. Reviewed By: cryptoad Differential Revision: https://reviews.llvm.org/D102529 | 5 年前 | |
scudo: Replace a couple of macros with their expansions. The macros INLINE and COMPILER_CHECK always expand to the same thing (inline and static_assert respectively). Both expansions are standards compliant C++ and are used consistently in the rest of LLVM, so let's improve consistency with the rest of LLVM by replacing them with the expansions. Differential Revision: https://reviews.llvm.org/D70793 | 6 年前 | |
[scudo][standalone] Restore GWP-ASan flag parsing With D92696, the Scudo Standalone GWP-ASan flag parsing was changed to the new GWP-ASan optional one. We do not necessarily want this, as this duplicates flag parsing code in Scudo Standalone when using the GWP-ASan integration. This CL reverts the changes within Scudo Standalone, and increases MaxFlags to 20 as an addionnal option got us to the current max. Differential Revision: https://reviews.llvm.org/D95542 | 5 年前 | |
[scudo][NFC] Clang-format c823cbf699 Ran git clang-format but didn't add the changed file... | 3 年前 | |
[scudo] Clean up Zircon header file uses Make fuchsia.h and fuchsia.cpp each include what they use. | 4 年前 | |
[scudo] Use stdint types for internal types (redo) This is a redo of D108089 that broke some 32-bit builds. scudo::uptr was defined as an unsigned long on 32-b platform, while a uintptr_t is usually defined as an unsigned int. This worked, this was not consistent, particularly with regard to format string specifiers. As suggested by Vitaly, since we are including stdint.h, define the internal scudo integer types to those. Differential Revision: https://reviews.llvm.org/D108152 | 4 年前 | |
Revert "[Scudo] enabling anonymous named pages on Linux 5.17 and onwards." This reverts commit 619499252307c520fd840a5f3c79ffa00eaf2264. | 4 年前 | |
scudo: Introduce a new mechanism to let Scudo access a platform-specific TLS slot An upcoming change to Scudo will change how we use the TLS slot in tsd_shared.h, which will be a little easier to deal with if we can remove the code path that calls pthread_getspecific and pthread_setspecific. The only known user of this code path is Fuchsia. We can't eliminate this code path by making Fuchsia use ELF TLS because although Fuchsia supports ELF TLS, it is not supported within libc itself. To address this, Roland McGrath on the Fuchsia team has proposed that Scudo will optionally call a platform-provided function to access a TLS slot reserved for Scudo. Android also has a reserved TLS slot, but the code that accesses the TLS slot lives in Scudo. We can eliminate some complexity and duplicated code by having Android use the same mechanism that was proposed for Fuchsia, which is what this change does. A separate change to Android implements it. Differential Revision: https://reviews.llvm.org/D87420 | 5 年前 | |
[scudo] Use require_constant_initialization Attribute guaranties safe static initialization of globals. Reviewed By: hctim Differential Revision: https://reviews.llvm.org/D101514 | 5 年前 | |
[scudo] Get rid of initLinkerInitialized Now that everything is forcibly linker initialized, it feels like a good time to get rid of the init/initLinkerInitialized split. This allows to get rid of various memset construct in init that gcc complains about (this fixes a Fuchsia open issue). I added various DCHECKs to ensure that we would get a zero-inited object when entering init, which required ensuring that unmapTestOnly leaves the object in a good state (tests are currently the only location where an allocator can be "de-initialized"). Running the tests with --gtest_repeat= showed no issue. Differential Revision: https://reviews.llvm.org/D103119 | 5 年前 | |
Revert "[compiler-rt][scudo] Add missing preprocessor token" and "[compiler-rt][scudo] Simplify TBI checks" This reverts commit 676eaa2ca967ca6ad4a84d31d6f0ebabdcf3e44b and f6038cdca03115da22b9e6ada5c25de4df5f42d2 since builders are still broken. | 4 年前 | |
[scudo] Get rid of initLinkerInitialized Now that everything is forcibly linker initialized, it feels like a good time to get rid of the init/initLinkerInitialized split. This allows to get rid of various memset construct in init that gcc complains about (this fixes a Fuchsia open issue). I added various DCHECKs to ensure that we would get a zero-inited object when entering init, which required ensuring that unmapTestOnly leaves the object in a good state (tests are currently the only location where an allocator can be "de-initialized"). Running the tests with --gtest_repeat= showed no issue. Differential Revision: https://reviews.llvm.org/D103119 | 5 年前 | |
[scudo] Use require_constant_initialization Attribute guaranties safe static initialization of globals. Reviewed By: hctim Differential Revision: https://reviews.llvm.org/D101514 | 5 年前 | |
[scudo] Don't assume preprocessor macro is defined Differential Revision: https://reviews.llvm.org/D121857 | 4 年前 | |
[scudo] Ensure proper allocator alignment in TSD test The MockAllocator used in ScudoTSDTest wasn't allocated properly aligned, which resulted in the TSDs of the shared registry not being aligned either. This lead to some failures like: https://reviews.llvm.org/D103119#2822008 This changes how the MockAllocator is allocated, same as Vitaly did in the combined tests, properly aligning it, which results in the TSDs being aligned as well. Add a DCHECK in the shared registry to check that it is. Differential Revision: https://reviews.llvm.org/D104402 | 4 年前 | |
[scudo] Don't unmap other low memory pages if mapping doesn't exist Tests can register multiple allocators, but only the first will initialize since it initializes the TSDRegistrySharedT. Then, destruction of subsequent allocator may end up unmapping a nullptr PrimaryBase with non-zero PrimarySize. Differential Revision: https://reviews.llvm.org/D121858 | 4 年前 | |
[scudo] Ensure proper allocator alignment in TSD test The MockAllocator used in ScudoTSDTest wasn't allocated properly aligned, which resulted in the TSDs of the shared registry not being aligned either. This lead to some failures like: https://reviews.llvm.org/D103119#2822008 This changes how the MockAllocator is allocated, same as Vitaly did in the combined tests, properly aligning it, which results in the TSDs being aligned as well. Add a DCHECK in the shared registry to check that it is. Differential Revision: https://reviews.llvm.org/D104402 | 4 年前 | |
[scudo][standalone] Release smaller blocks less often Summary: Releasing smaller blocks is costly and only yields significant results when there is a large percentage of free bytes for a given size class (see numbers below). This CL introduces a couple of additional checks for sizes lower than 256. First we want to make sure that there is enough free bytes, relatively to the amount of allocated bytes. We are looking at 8X% to 9X% (smaller blocks require higher percentage). We also want to make sure there has been enough activity with the freelist to make it worth the time, so we now check that the bytes pushed to the freelist is at least 1/16th of the allocated bytes for those classes. Additionally, we clear batches before destroying them now - this could have prevented some releases to occur (class id 0 rarely releases anyway). Here are the numbers, for about 1M allocations in multiple threads: Size: 16 85% freed -> 0% released 86% freed -> 0% released 87% freed -> 0% released 88% freed -> 0% released 89% freed -> 0% released 90% freed -> 0% released 91% freed -> 0% released 92% freed -> 0% released 93% freed -> 0% released 94% freed -> 0% released 95% freed -> 0% released 96% freed -> 0% released 97% freed -> 2% released 98% freed -> 7% released 99% freed -> 27% released Size: 32 85% freed -> 0% released 86% freed -> 0% released 87% freed -> 0% released 88% freed -> 0% released 89% freed -> 0% released 90% freed -> 0% released 91% freed -> 0% released 92% freed -> 0% released 93% freed -> 0% released 94% freed -> 0% released 95% freed -> 1% released 96% freed -> 3% released 97% freed -> 7% released 98% freed -> 17% released 99% freed -> 41% released Size: 48 85% freed -> 0% released 86% freed -> 0% released 87% freed -> 0% released 88% freed -> 0% released 89% freed -> 0% released 90% freed -> 0% released 91% freed -> 0% released 92% freed -> 0% released 93% freed -> 0% released 94% freed -> 1% released 95% freed -> 3% released 96% freed -> 7% released 97% freed -> 13% released 98% freed -> 27% released 99% freed -> 52% released Size: 64 85% freed -> 0% released 86% freed -> 0% released 87% freed -> 0% released 88% freed -> 0% released 89% freed -> 0% released 90% freed -> 0% released 91% freed -> 0% released 92% freed -> 1% released 93% freed -> 2% released 94% freed -> 3% released 95% freed -> 6% released 96% freed -> 11% released 97% freed -> 20% released 98% freed -> 35% released 99% freed -> 59% released Size: 80 85% freed -> 0% released 86% freed -> 0% released 87% freed -> 0% released 88% freed -> 0% released 89% freed -> 0% released 90% freed -> 1% released 91% freed -> 1% released 92% freed -> 2% released 93% freed -> 4% released 94% freed -> 6% released 95% freed -> 10% released 96% freed -> 17% released 97% freed -> 26% released 98% freed -> 41% released 99% freed -> 64% released Size: 96 85% freed -> 0% released 86% freed -> 0% released 87% freed -> 0% released 88% freed -> 0% released 89% freed -> 1% released 90% freed -> 1% released 91% freed -> 3% released 92% freed -> 4% released 93% freed -> 6% released 94% freed -> 10% released 95% freed -> 14% released 96% freed -> 21% released 97% freed -> 31% released 98% freed -> 47% released 99% freed -> 68% released Size: 112 85% freed -> 0% released 86% freed -> 1% released 87% freed -> 1% released 88% freed -> 2% released 89% freed -> 3% released 90% freed -> 4% released 91% freed -> 6% released 92% freed -> 8% released 93% freed -> 11% released 94% freed -> 16% released 95% freed -> 22% released 96% freed -> 30% released 97% freed -> 40% released 98% freed -> 55% released 99% freed -> 74% released Size: 128 85% freed -> 0% released 86% freed -> 1% released 87% freed -> 1% released 88% freed -> 2% released 89% freed -> 3% released 90% freed -> 4% released 91% freed -> 6% released 92% freed -> 8% released 93% freed -> 11% released 94% freed -> 16% released 95% freed -> 22% released 96% freed -> 30% released 97% freed -> 40% released 98% freed -> 55% released 99% freed -> 74% released Size: 144 85% freed -> 1% released 86% freed -> 2% released 87% freed -> 3% released 88% freed -> 4% released 89% freed -> 6% released 90% freed -> 7% released 91% freed -> 10% released 92% freed -> 13% released 93% freed -> 17% released 94% freed -> 22% released 95% freed -> 28% released 96% freed -> 37% released 97% freed -> 47% released 98% freed -> 61% released 99% freed -> 78% released Size: 160 85% freed -> 1% released 86% freed -> 2% released 87% freed -> 3% released 88% freed -> 4% released 89% freed -> 5% released 90% freed -> 7% released 91% freed -> 10% released 92% freed -> 13% released 93% freed -> 17% released 94% freed -> 22% released 95% freed -> 28% released 96% freed -> 37% released 97% freed -> 47% released 98% freed -> 61% released 99% freed -> 78% released Size: 176 85% freed -> 2% released 86% freed -> 3% released 87% freed -> 4% released 88% freed -> 6% released 89% freed -> 7% released 90% freed -> 9% released 91% freed -> 12% released 92% freed -> 15% released 93% freed -> 20% released 94% freed -> 25% released 95% freed -> 32% released 96% freed -> 40% released 97% freed -> 51% released 98% freed -> 64% released 99% freed -> 80% released Size: 192 85% freed -> 4% released 86% freed -> 5% released 87% freed -> 6% released 88% freed -> 8% released 89% freed -> 10% released 90% freed -> 13% released 91% freed -> 16% released 92% freed -> 20% released 93% freed -> 24% released 94% freed -> 30% released 95% freed -> 37% released 96% freed -> 45% released 97% freed -> 55% released 98% freed -> 68% released 99% freed -> 82% released Size: 224 85% freed -> 8% released 86% freed -> 10% released 87% freed -> 12% released 88% freed -> 14% released 89% freed -> 17% released 90% freed -> 20% released 91% freed -> 23% released 92% freed -> 28% released 93% freed -> 33% released 94% freed -> 39% released 95% freed -> 46% released 96% freed -> 53% released 97% freed -> 63% released 98% freed -> 73% released 99% freed -> 85% released Size: 240 85% freed -> 8% released 86% freed -> 10% released 87% freed -> 12% released 88% freed -> 14% released 89% freed -> 17% released 90% freed -> 20% released 91% freed -> 23% released 92% freed -> 28% released 93% freed -> 33% released 94% freed -> 39% released 95% freed -> 46% released 96% freed -> 54% released 97% freed -> 63% released 98% freed -> 73% released 99% freed -> 85% released Reviewers: cferris, pcc, hctim, eugenis Subscribers: #sanitizers, llvm-commits Tags: #sanitizers Differential Revision: https://reviews.llvm.org/D82031 | 5 年前 | |
[scudo] Add [[no_unique_address]] attribute to new MapPlatformData variables Differential Revision: https://reviews.llvm.org/D129237 | 3 年前 | |
[scudo] Rework Vector/String Some platforms (eg: Trusty) are extremelly memory constrained, which doesn't necessarily work well with some of Scudo's current assumptions. Vector by default (and as such String and ScopedString) maps a page, which is a bit of a waste. This CL changes Vector to use a buffer local to the class first, then potentially map more memory if needed (ScopedString currently are all stack based so it would be stack data). We also want to allow a platform to prevent any dynamic resizing, so I added a CanGrow templated parameter that for now is always true but would be set to false on Trusty. Differential Revision: https://reviews.llvm.org/D103641 | 4 年前 | |
[scudo][standalone] Add error reports Summary: This change adds fatal error messages for various error conditions that will be added later in the code. This also addresses a TODO now that we have reportCheckFailed (which lead me to notice a few variables that were not cased properly so I changed that as well). Reviewers: morehouse, hctim, vitalybuka Reviewed By: morehouse, hctim, vitalybuka Subscribers: mgorny, delcypher, jfb, jdoerfert, #sanitizers, llvm-commits Tags: #llvm, #sanitizers Differential Revision: https://reviews.llvm.org/D59551 llvm-svn: 356556 | 7 年前 | |
[scudo] Fix definition of canCache() function The called member function has boolean type, change this function to match Differential Revision: https://reviews.llvm.org/D122631 | 4 年前 | |
[scudo] Fix static and unused function type annotations Differential Revision: https://reviews.llvm.org/D121855 | 4 年前 | |
[scudo] Use require_constant_initialization Attribute guaranties safe static initialization of globals. Reviewed By: hctim Differential Revision: https://reviews.llvm.org/D101514 | 5 年前 | |
[scudo] Get rid of initLinkerInitialized Now that everything is forcibly linker initialized, it feels like a good time to get rid of the init/initLinkerInitialized split. This allows to get rid of various memset construct in init that gcc complains about (this fixes a Fuchsia open issue). I added various DCHECKs to ensure that we would get a zero-inited object when entering init, which required ensuring that unmapTestOnly leaves the object in a good state (tests are currently the only location where an allocator can be "de-initialized"). Running the tests with --gtest_repeat= showed no issue. Differential Revision: https://reviews.llvm.org/D103119 | 5 年前 | |
scudo/standalone: prepare for enabling format string checking Move __attribute__((format)) to the function declarations in the header file. It's almost pointless in the source file. But disable the warning with -Wno-format for now since there is a number of existing warnings. Depends on D107984. Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D108014 | 4 年前 | |
scudo/standalone: prepare for enabling format string checking Move __attribute__((format)) to the function declarations in the header file. It's almost pointless in the source file. But disable the warning with -Wno-format for now since there is a number of existing warnings. Depends on D107984. Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D108014 | 4 年前 | |
[scudo] Add Scudo support for Trusty OS trusty.cpp and trusty.h define Trusty implementations of map and other platform-specific functions. In addition to adding Trusty configurations in allocator_config.h and size_class_map.h, MapSizeIncrement and PrimaryEnableRandomOffset are added as configurable options in allocator_config.h. Background on Trusty: https://source.android.com/security/trusty Differential Revision: https://reviews.llvm.org/D103578 | 4 年前 | |
[scudo] Add Scudo support for Trusty OS trusty.cpp and trusty.h define Trusty implementations of map and other platform-specific functions. In addition to adding Trusty configurations in allocator_config.h and size_class_map.h, MapSizeIncrement and PrimaryEnableRandomOffset are added as configurable options in allocator_config.h. Background on Trusty: https://source.android.com/security/trusty Differential Revision: https://reviews.llvm.org/D103578 | 4 年前 | |
[scudo] Ensure proper allocator alignment in TSD test The MockAllocator used in ScudoTSDTest wasn't allocated properly aligned, which resulted in the TSDs of the shared registry not being aligned either. This lead to some failures like: https://reviews.llvm.org/D103119#2822008 This changes how the MockAllocator is allocated, same as Vitaly did in the combined tests, properly aligning it, which results in the TSDs being aligned as well. Add a DCHECK in the shared registry to check that it is. Differential Revision: https://reviews.llvm.org/D104402 | 4 年前 | |
[scudo] Fix static and unused function type annotations Differential Revision: https://reviews.llvm.org/D121855 | 4 年前 | |
[scudo] Get rid of initLinkerInitialized Now that everything is forcibly linker initialized, it feels like a good time to get rid of the init/initLinkerInitialized split. This allows to get rid of various memset construct in init that gcc complains about (this fixes a Fuchsia open issue). I added various DCHECKs to ensure that we would get a zero-inited object when entering init, which required ensuring that unmapTestOnly leaves the object in a good state (tests are currently the only location where an allocator can be "de-initialized"). Running the tests with --gtest_repeat= showed no issue. Differential Revision: https://reviews.llvm.org/D103119 | 5 年前 | |
[scudo] Add [[no_unique_address]] attribute to new MapPlatformData variables Differential Revision: https://reviews.llvm.org/D129237 | 3 年前 | |
[scudo] Provide allocator declaration Ensure that extern allocator declaration is visible before definition Differential Revision: https://reviews.llvm.org/D121848 | 4 年前 | |
[scudo] Provide allocator declaration Ensure that extern allocator declaration is visible before definition Differential Revision: https://reviews.llvm.org/D121848 | 4 年前 | |
[scudo] Handle mallinfo2 mallinfo is deprecated by GLIBC Reviewed By: cryptoad Differential Revision: https://reviews.llvm.org/D113951 | 4 年前 | |
[scudo] Use require_constant_initialization Attribute guaranties safe static initialization of globals. Reviewed By: hctim Differential Revision: https://reviews.llvm.org/D101514 | 5 年前 | |
[scudo] Use cast on calls to __builtin_umul_overflow/__builtin_umull_overflow Platforms may define uintptr_t differently, so perform an explicit cast Differential Revision: https://reviews.llvm.org/D121852 | 4 年前 | |
[NFCI] clang-format scudo standalone | 4 年前 |