summaryrefslogtreecommitdiffstats
path: root/compiler-rt
Commit message (Collapse)AuthorAgeFilesLines
...
* Move a break into the correct place. NFCI.Peter Collingbourne2019-08-231-1/+1
| | | | | | Should silence new C fallthrough warning. llvm-svn: 369813
* hwasan: Untag unwound stack frames by wrapping personality functions.Peter Collingbourne2019-08-234-3/+78
| | | | | | | | | | | | | | | | | | | | | | | One problem with untagging memory in landing pads is that it only works correctly if the function that catches the exception is instrumented. If the function is uninstrumented, we have no opportunity to untag the memory. To address this, replace landing pad instrumentation with personality function wrapping. Each function with an instrumented stack has its personality function replaced with a wrapper provided by the runtime. Functions that did not have a personality function to begin with also get wrappers if they may be unwound past. As the unwinder calls personality functions during stack unwinding, the original personality function is called and the function's stack frame is untagged by the wrapper if the personality function instructs the unwinder to keep unwinding. If unwinding stops at a landing pad, the function is still responsible for untagging its stack frame if it resumes unwinding. The old landing pad mechanism is preserved for compatibility with old runtimes. Differential Revision: https://reviews.llvm.org/D66377 llvm-svn: 369721
* [sanitizer] Resubmit D66620 from monorepoTaewook Oh2019-08-222-1/+3
| | | | | | | | | | | | | | | | Summary: https://reviews.llvm.org/D66620 is accepted but was based on the multi-repo setup, so I was not able to `arc patch` it. Resubmit the diff under monorepo Committed on behalf of @sugak (Igor Sugak) Reviewers: sugak Subscribers: #sanitizers, llvm-commits, vitalybuka Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D66624 llvm-svn: 369716
* Fixing buildbot due to style.David Carlier2019-08-221-2/+4
| | | | llvm-svn: 369711
* [Sanitizer] checks ASLR on FreeBSDDavid Carlier2019-08-223-2/+29
| | | | | | | | | | | | - Especially MemorySanitizer fails if those sysctl configs are enabled. Reviewers: vitalybuka, emaste, dim Reviewed By: dim Differential Revision: https://reviews.llvm.org/D66582 llvm-svn: 369708
* LibFuzzer support for 32bit MSVCMatthew G McGovern2019-08-221-4/+18
| | | | | | | | | This fixes the two build errors when trying to compile LibFuzzer for 32bit with MSVC. - authored by Max Shavrick (mxms at microsoft) llvm-svn: 369704
* Revert "[GWP-ASan] Remove c++ standard lib dependency."Petr Hosek2019-08-222-17/+17
| | | | | | | This reverts commit r369606: this doesn't addressed the underlying problem and it's not the correct solution. llvm-svn: 369623
* [GWP-ASan] Remove c++ standard lib dependency.Petr Hosek2019-08-222-17/+17
| | | | | | | | | | | Remove c++ standard library dependency for now for @phosek. They have a complicated build system that breaks with the fuzzer target here. Also added a todo to remedy later. Differential Revision: https://reviews.llvm.org/D66568 llvm-svn: 369606
* [TSan] #include header instead of forward declaring intercepteesJulian Lettner2019-08-211-18/+5
| | | | llvm-svn: 369601
* [GWP-ASan] Add public-facing documentation [6].Mitch Phillips2019-08-212-3/+58
| | | | | | | | | | | | | | | | | | | | | Summary: Note: Do not submit this documentation until Scudo support is reviewed and submitted (should be #[5]). See D60593 for further information. This patch introduces the public-facing documentation for GWP-ASan, as well as updating the definition of one of the options, which wasn't properly merged. The document describes the design and features of GWP-ASan, as well as how to use GWP-ASan from both a user's standpoint, and development documentation for supporting allocators. Reviewers: jfb, morehouse, vlad.tsyrklevich Reviewed By: morehouse, vlad.tsyrklevich Subscribers: kcc, dexonsmith, kubamracek, cryptoad, jfb, #sanitizers, llvm-commits, vlad.tsyrklevich, morehouse Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D62875 llvm-svn: 369552
* [GWP-ASan] Build stack_trace_compressor_fuzzer.Mitch Phillips2019-08-211-17/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: Flips the switch to build stack_trace_compressor_fuzzer. This was recently temporarily disabled in rL369079 as it was breaking the sanitizer buildbots. My diagnosis of the problem is that on clang-only bootstrap builds, we build gwp_asan before libfuzzer. This causes a discrepancy when the clang driver attempts to link libclang_rt.fuzzer* as CMake doesn't see a dependency there. I've (hopefully) fixed the issue by adding a direct dependency for the fuzz target so CMake can resolve the build order properly. As part of this, the libFuzzer 'fuzzer' target has to be discovered before the declaration of the fuzz target. pcc@ for mild review + notification as buildcop. Reviewers: pcc Reviewed By: pcc Subscribers: mgorny, #sanitizers, llvm-commits Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D66494 llvm-svn: 369551
* [Sanitizer] Disable -Wframe-larger-than on SystemZUlrich Weigand2019-08-211-2/+2
| | | | | | | | | | | | | | | | | SystemZ builds show -Wframe-larger-than warnings in two functions: 'sanitizer::SuspendedThreadsListLinux::GetRegistersAndSP' 'sanitizer::SizeClassAllocator32<__sanitizer::AP32>::PopulateFreeList' In both cases, the frame size looks correct; each of the functions has a large local variable that brings the frame size close to the limit even on x86, and the extra 160 bytes of the default register save areas on SystemZ pushes it over the limit. PowerPC and MIPS already disable this warning; do the same on SystemZ. Differential Revision: https://reviews.llvm.org/D66021 llvm-svn: 369543
* compiler-rt: Fix warning if COMPILER_RT_HAS_FCNTL_LCK is 0Nico Weber2019-08-211-0/+1
| | | | | | | Fixes "warning: implicit declaration of function 'flock' is invalid in C99" for flock(). llvm-svn: 369534
* reland [gtest] Fix printing of StringRef and SmallString in assert messages.Sam McCall2019-08-212-4/+4
| | | | | | | | | Renames GTEST_NO_LLVM_RAW_OSTREAM -> GTEST_NO_LLVM_SUPPORT and guards the new features behind it. This reverts commit a063bcf3ef5a879adbe9639a3c187d876eee0e66. llvm-svn: 369527
* Revert r369472 and r369441Vitaly Buka2019-08-2111-346/+38
| | | | | | check-sanitizer does not work on Linux llvm-svn: 369495
* [AArch64][asan] fix typo in AsanStats::PrintSebastian Pop2019-08-201-1/+1
| | | | | | | | | This created an infinite loop that timed out several build bots while executing the test in compiler-rt/test/asan/TestCases/atexit_stats.cpp Differential Revision: https://reviews.llvm.org/D60243 llvm-svn: 369472
* [AArch64] Speed-up leak and address sanitizers on AArch64 for 48-bit VMASebastian Pop2019-08-2011-38/+346
| | | | | | | | | | | | | | | | | | This patch fixes https://github.com/google/sanitizers/issues/703 On a Graviton-A1 aarch64 machine with 48-bit VMA, the time spent in LSan and ASan reduced from 2.5s to 0.01s when running clang -fsanitize=leak compiler-rt/test/lsan/TestCases/sanity_check_pure_c.c && time ./a.out clang -fsanitize=address compiler-rt/test/lsan/TestCases/sanity_check_pure_c.c && time ./a.out With this patch, LSan and ASan create both the 32 and 64 allocators and select at run time between the two allocators following a global variable that is initialized at init time to whether the allocator64 can be used in the virtual address space. Differential Revision: https://reviews.llvm.org/D60243 llvm-svn: 369441
* [GWP-ASan] Fix typos.Mitch Phillips2019-08-201-3/+3
| | | | | | | | | | | | | | | | | | Summary: Fix two spelling typos and de-indent a guarded #define so that it's consistent with clang-format. Reviewers: vitalybuka Reviewed By: vitalybuka Subscribers: #sanitizers, llvm-commits Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D66311 llvm-svn: 369433
* [scudo][standalone] Fix malloc_iterateKostya Kortchinsky2019-08-203-3/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: cferris's Bionic tests found an issue in Scudo's `malloc_iterate`. We were inclusive of both boundaries, which resulted in a `Block` that was located on said boundary to be possibly accounted for twice, or just being accounted for while iterating on regions that are not ours (usually the unmapped ones in between Primary regions). The fix is to exclude the upper boundary in `iterateOverChunks`, and add a regression test. This additionally corrects a typo in a comment, and change the 64-bit Primary iteration function to not assume that `BatchClassId` is 0. Reviewers: cferris, morehouse, hctim, vitalybuka, eugenis Reviewed By: hctim Subscribers: delcypher, #sanitizers, llvm-commits Tags: #llvm, #sanitizers Differential Revision: https://reviews.llvm.org/D66231 llvm-svn: 369400
* [compiler-rt][crt] Pass -fno-lto in check_cxx_section_existsHans Wennborg2019-08-201-0/+1
| | | | | | | | | Otherwise it doesn't work when building with -DLLVM_ENABLE_LTO=thin (We hit this in Chromium in https://bugs.chromium.org/p/chromium/issues/detail?id=966403) llvm-svn: 369336
* [TSan] Rename file with libdispatch interceptorsJulian Lettner2019-08-202-2/+2
| | | | llvm-svn: 369314
* [sanitizer_common] Extend test after switch to posix_spawnJulian Lettner2019-08-191-0/+2
| | | | llvm-svn: 369311
* Build symbolizer runtime with C++14.Peter Collingbourne2019-08-191-1/+1
| | | | | | Should hopefully fix sanitizer-x86_64-linux bot. llvm-svn: 369290
* [TSan] Rename file to make it clear that it defines interceptorsJulian Lettner2019-08-192-2/+2
| | | | | | | Rename file `tsan_libdispatch.cpp -> tsan_libdispatch_interceptors.cpp` to make it clear that it's main purpose is defining interceptors. llvm-svn: 369289
* [Sanitizer] arc4random interception on MacDavid Carlier2019-08-193-3/+4
| | | | | | | | | | Reviewers: yln,vitalybuka Reviewed By: yln Differential Revision: https://reviews.llvm.org/D66391 llvm-svn: 369285
* [Fuchsia] Create the VMO during initialization, not during exitPetr Hosek2019-08-171-40/+53
| | | | | | | | | | | We want to avoid doing expensive work during atexit since the process might be terminated before we can publish the VMO and write out the symbolizer markup, so move the VMO creation to the initialization phase and only write data during the atexit phase. Differential Revision: https://reviews.llvm.org/D66323 llvm-svn: 369180
* Revert "[TSan] Don't guard #include <xpc/xpc.h>"Julian Lettner2019-08-161-0/+7
| | | | | | This reverts commit 8191585b36eb4963002cce43fb2e79e7fb05c3d6. llvm-svn: 369165
* [TSan] Add interceptors for os_unfair_lockJulian Lettner2019-08-162-0/+83
| | | | llvm-svn: 369164
* [TSan] Don't guard #include <xpc/xpc.h>Julian Lettner2019-08-161-7/+0
| | | | | | | | The xpc_connection_* APIs that we are intercepting are available starting at macOS 10.7. This is old enough so that we don't need to guard them. llvm-svn: 369150
* Disable stack_trace_compressor_fuzzer.Mitch Phillips2019-08-161-13/+17
| | | | | | | | Should hopefully fix the remainder of the buildbot issues. Just disabling this for now with a comment that I'm working on it. Can actually fix the real problem when I'm at a real computer. llvm-svn: 369079
* Moved binary off add_llvm_executable.Mitch Phillips2019-08-151-1/+1
| | | | | | | | Used add_executable instead, as this allows a standalone compiler-rt to build, as the add_llvm_executable build target isn't accessible in a standalone CRT preparation. llvm-svn: 369071
* Re-instate 369051.Mitch Phillips2019-08-151-1/+2
| | | | | | | Looks like I accidentally reverted r369051 to the old CMake-version-specific flag when committing 369055. llvm-svn: 369067
* Guard fuzzer build behind Clang-only flags.Mitch Phillips2019-08-151-11/+12
| | | | | | | Should fix sanitizer buildbots and any one else who's building compiler-rt using gcc. llvm-svn: 369055
* Remove CMake >= v3.13 target_link_options.Mitch Phillips2019-08-151-1/+2
| | | | | | Instead, use set_target_properties. llvm-svn: 369051
* [GWP-ASan] Implement stack frame compression.Mitch Phillips2019-08-157-19/+517
| | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: This patch introduces stack frame compression to GWP-ASan. Each stack frame is variable-length integer encoded as the difference between frame[i] and frame[i - 1]. Furthermore, we use zig-zag encoding on the difference to ensure that negative differences are also encoded into a relatively small number of bytes. Examples of what the compression looks like can be seen in `gwp_asan/tests/compression.cpp`. This compression can reduce the memory consumption cost of stack traces by ~50%. Reviewers: vlad.tsyrklevich Reviewed By: vlad.tsyrklevich Subscribers: mgorny, #sanitizers, llvm-commits, eugenis, morehouse Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D66189 llvm-svn: 369048
* [sanitizer_common] Always use posix_spawn on DarwinJulian Lettner2019-08-151-1/+2
| | | | | | | | | | | | | On Darwin we have two external symbolizers: atos and llvm-symbolizer. atos was changed to use posix_spawn (instead of fork+execv) in a previous commit [1]. Let's use posix_spawn for llvm-symbolizer as well. Our hope is that eventually we can transition to posix_spawn on other platforms too. [1] 399408a92f1dbbefeb708f718b0d8eb62dfa9f09 llvm-svn: 369021
* Re-land "[compiler-rt] Migrate llvm::make_unique to std::make_unique"Jonas Devlieghere2019-08-151-13/+13
| | | | | | | With the compiler-rt check for C++14 updated in r368960, this should now be fine to land. llvm-svn: 369009
* [CMake] Check for C++14 instead of C++11Jonas Devlieghere2019-08-152-2/+2
| | | | | | | | | | | | | | | Now that LLVM moved to C++14, `COMPILER_RT_HAS_STD_CXX11_FLAG` should become `COMPILER_RT_HAS_STD_CXX14_FLAG`. I ran into this issue when replacing llvm::make_unique with std::make_unique in an X-ray unit test. We are correctly passing `-std=c++14`, but this got overwritten further down the invocation by the compiler-rt flags. Given that this unit test is using LLVM headers, this is bound to break sooner than later, regardless of my change. Differential revision: https://reviews.llvm.org/D66271 llvm-svn: 368960
* Revert "[compiler-rt] Migrate llvm::make_unique to std::make_unique"Jonas Devlieghere2019-08-151-13/+13
| | | | | | | | | | The X-ray unit tests in compiler-rt are overriding the C++ version by explicitly passing -std=c++11 in the compiler invocation. This poses a problem as these tests are including LLVM headers that can now use C++14 features. I'm temporarily reverting this as I investigate the correct solution. llvm-svn: 368952
* [sanitizer_common] Replace forkpty with posix_spawn on DarwinJulian Lettner2019-08-157-93/+100
| | | | | | | | | | | | | | | | | | | | | | | | | On Darwin, we currently use forkpty to communicate with the "atos" symbolizer. There are several problems that fork[pty] has, e.g. that after fork, interceptors are still active and this sometimes causes crashes or hangs. This is especially problematic for TSan, which uses interceptors for OS-provided locks and mutexes, and even Libc functions use those. This patch replaces forkpty with posix_spawn on Darwin. Since posix_spawn doesn't fork (at least on Darwin), the interceptors are not a problem. Another benefit is that we'll handle post-fork failures (e.g. sandbox disallows "exec") gracefully now. Related revisions and previous attempts that were blocked by or had to be revered due to test failures: https://reviews.llvm.org/D48451 https://reviews.llvm.org/D40032 Reviewed By: kubamracek Differential Revision: https://reviews.llvm.org/D65253 llvm-svn: 368947
* [compiler-rt] Migrate llvm::make_unique to std::make_uniqueJonas Devlieghere2019-08-151-13/+13
| | | | | | | | | | Now that we've moved to C++14, we no longer need the llvm::make_unique implementation from STLExtras.h. This patch is a mechanical replacement of (hopefully) all the llvm::make_unique instances across the monorepo. Differential revision: https://reviews.llvm.org/D66259 llvm-svn: 368946
* [scudo][standalone] Add more stats to mallinfoKostya Kortchinsky2019-08-147-6/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: Android requires additional stats in mallinfo. While we can provide right away the number of bytes mapped (Primary+Secondary), there was no way to get the number of free bytes (only makes sense for the Primary since the Secondary unmaps everything on deallocation). An approximation could be `StatMapped - StatAllocated`, but since we are mapping in `1<<17` increments for the 64-bit Primary, it's fairly inaccurate. So we introduce `StatFree` (note it's `Free`, not `Freed`!), which keeps track of the amount of Primary blocks currently unallocated. Reviewers: cferris, eugenis, vitalybuka, hctim, morehouse Reviewed By: morehouse Subscribers: delcypher, #sanitizers, llvm-commits Tags: #llvm, #sanitizers Differential Revision: https://reviews.llvm.org/D66112 llvm-svn: 368866
* [TSan] Fix test failing on LinuxJulian Lettner2019-08-131-1/+1
| | | | llvm-svn: 368641
* [GWP-ASan] Update backtrace function signature.Mitch Phillips2019-08-126-57/+89
| | | | | | | | | | | | | | | | | | | | Summary: Updates the function signature and comments for backtracing (and printing backtraces). This update brings GWP-ASan in line with future requirements for stack frame compression, wherein the length of the trace is provided explicitly, rather than relying on nullptr-termination. Reviewers: vlad.tsyrklevich Reviewed By: vlad.tsyrklevich Subscribers: #sanitizers, llvm-commits, morehouse Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D66099 llvm-svn: 368619
* [libFuzzer] Merge: print feature coverage number as well.Max Moroz2019-08-123-6/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: feature coverage is a useful signal that is available during the merge process, but was not printed previously. Output example: ``` $ ./fuzzer -use_value_profile=1 -merge=1 new_corpus/ seed_corpus/ INFO: Seed: 1676551929 INFO: Loaded 1 modules (2380 inline 8-bit counters): 2380 [0x90d180, 0x90dacc), INFO: Loaded 1 PC tables (2380 PCs): 2380 [0x684018,0x68d4d8), MERGE-OUTER: 180 files, 78 in the initial corpus MERGE-OUTER: attempt 1 INFO: Seed: 1676574577 INFO: Loaded 1 modules (2380 inline 8-bit counters): 2380 [0x90d180, 0x90dacc), INFO: Loaded 1 PC tables (2380 PCs): 2380 [0x684018,0x68d4d8), INFO: -max_len is not provided; libFuzzer will not generate inputs larger than 1048576 bytes MERGE-INNER: using the control file '/tmp/libFuzzerTemp.111754.txt' MERGE-INNER: 180 total files; 0 processed earlier; will process 180 files now #1 pulse cov: 134 ft: 330 exec/s: 0 rss: 37Mb #2 pulse cov: 142 ft: 462 exec/s: 0 rss: 38Mb #4 pulse cov: 152 ft: 651 exec/s: 0 rss: 38Mb #8 pulse cov: 152 ft: 943 exec/s: 0 rss: 38Mb #16 pulse cov: 520 ft: 2783 exec/s: 0 rss: 39Mb #32 pulse cov: 552 ft: 3280 exec/s: 0 rss: 41Mb #64 pulse cov: 576 ft: 3641 exec/s: 0 rss: 50Mb #78 LOADED cov: 602 ft: 3936 exec/s: 0 rss: 88Mb #128 pulse cov: 611 ft: 3996 exec/s: 0 rss: 93Mb #180 DONE cov: 611 ft: 4016 exec/s: 0 rss: 155Mb MERGE-OUTER: succesfull in 1 attempt(s) MERGE-OUTER: the control file has 39741 bytes MERGE-OUTER: consumed 0Mb (37Mb rss) to parse the control file MERGE-OUTER: 9 new files with 80 new features added; 9 new coverage edges ``` Reviewers: hctim, morehouse Reviewed By: morehouse Subscribers: delcypher, #sanitizers, llvm-commits, kcc Tags: #llvm, #sanitizers Differential Revision: https://reviews.llvm.org/D66030 llvm-svn: 368617
* Fix Wnewline-eof after r368598Nico Weber2019-08-122-2/+2
| | | | llvm-svn: 368613
* [asan_symbolize] Fix bug where the frame counter was not incremented.Dan Liew2019-08-123-4/+90
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: This bug occurred when a plug-in requested that a binary not be symbolized while the script is trying to symbolize a stack frame. In this case `self.frame_no` would not be incremented. This would cause subsequent stack frames that are symbolized to be incorrectly numbered. To fix this `get_symbolized_lines()` has been modified to take an argument that indicates whether the stack frame counter should incremented. In `process_line_posix()` `get_symbolized_lines(None, ...)` is now used in in the case where we don't want to symbolize a line so that we can keep the frame counter increment in a single function. A test case is included. The test uses a dummy plugin that always asks `asan_symbolize.py` script to not symbolize the first binary that the script asks about. Prior to the patch this would cause the output to script to look something like ``` #0 0x0 #0 0x0 in do_access #1 0x0 in main ``` This is the second attempt at landing this patch. The first (r368373) failed due to failing some android bots and so was reverted in r368472. The new test is now disabled for Android. It turns out that the patch also fails for iOS too so it is also disabled for that family of platforms too. rdar://problem/49476995 Reviewers: kubamracek, yln, samsonov, dvyukov, vitalybuka Subscribers: #sanitizers, llvm-commits Tags: #llvm, #sanitizers Differential Revision: https://reviews.llvm.org/D65495 llvm-svn: 368603
* [builtins] MSVC warning disable for clean buildMatthew G McGovern2019-08-125-0/+55
| | | | | | | - https://reviews.llvm.org/D66023 - amended for ifdef/if gcc errors in previous verison llvm-svn: 368598
* [scudo][standalone] Minor correctionsKostya Kortchinsky2019-08-126-16/+14
| | | | | | | | | | | | | | | | | | | | | | | | | Summary: Few corrections with no functional change: - replacing `%zd` with `%zu` all around: the values are unsigned - prefer `MAP_ANONYMOUS` to `MAP_ANON` (it's deprecated) - remove the unused `enum LinkerInitialized` - mark a parameter as `UNUSED` in Fuchsia's `getRandom` - correct the casing of a variable and use `nullptr` instead of 0 for pointers in `list.h` - reorder some `typedef` to be consistent between `signed` and `unsigned` Reviewers: eugenis, vitalybuka, morehouse, hctim Reviewed By: vitalybuka, morehouse Subscribers: delcypher, #sanitizers, llvm-commits Tags: #llvm, #sanitizers Differential Revision: https://reviews.llvm.org/D65660 llvm-svn: 368585
* Add support for FreeBSD's LD_32_LIBRARY_PATHDimitry Andric2019-08-103-1/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: Because the dynamic linker for 32-bit executables on 64-bit FreeBSD uses the environment variable `LD_32_LIBRARY_PATH` instead of `LD_LIBRARY_PATH` to find needed dynamic libraries, running the 32-bit parts of the dynamic ASan tests will fail with errors similar to: ``` ld-elf32.so.1: Shared object "libclang_rt.asan-i386.so" not found, required by "Asan-i386-inline-Dynamic-Test" ``` This adds support for setting up `LD_32_LIBRARY_PATH` for the unit and regression tests. It will likely also require a minor change to the `TestingConfig` class in `llvm/utils/lit/lit`. Reviewers: emaste, kcc, rnk, arichardson Reviewed By: arichardson Subscribers: kubamracek, krytarowski, fedor.sergeev, delcypher, #sanitizers, llvm-commits Tags: #llvm, #sanitizers Differential Revision: https://reviews.llvm.org/D65772 llvm-svn: 368516
OpenPOWER on IntegriCloud