summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/ubsan
Commit message (Collapse)AuthorAgeFilesLines
...
* [ubsan] Improve diagnostics for return value checks (compiler-rt)Vedant Kumar2017-06-233-18/+24
| | | | | | Differential Revision: https://reviews.llvm.org/D34298 llvm-svn: 306164
* [ubsan] Fix a faulty memory accessibility checkVedant Kumar2017-06-151-2/+2
| | | | | | | | | | | | | The dynamic type check needs to inspect vtables, but could crash if it encounters a vtable pointer to inaccessible memory. In the first attempt to fix the issue (r304437), we performed a memory accessibility check on the wrong range of memory. This should *really* fix the problem. Patch by Max Moroz! Differential Revision: https://reviews.llvm.org/D34215 llvm-svn: 305489
* [ubsan] Detect invalid unsigned pointer index expression (compiler-rt)Vedant Kumar2017-06-121-2/+8
| | | | | | | | Compiler-rt part of: https://reviews.llvm.org/D33910 Differential Revision: https://reviews.llvm.org/D33911 llvm-svn: 305217
* [ubsan] Runtime support for pointer overflow checkingVedant Kumar2017-06-014-0/+41
| | | | | | | | Patch by John Regehr and Will Dietz! Differential Revision: https://reviews.llvm.org/D20323 llvm-svn: 304461
* Bug 33221 [UBSAN] segfault with -fsanitize=undefinedVedant Kumar2017-06-011-1/+1
| | | | | | | | | | | | | | | There is can be a situation when vptr is not initializing by constructor of the object, and has a junk data which should be properly checked, because c++ standard says: "if default constructor is not specified 16 (7.3) no initialization is performed." Patch by Denis Khalikov! Differential Revision: https://reviews.llvm.org/D33712 llvm-svn: 304437
* [Ubsan]Remove unused link libraries.Leo Li2017-05-171-5/+1
| | | | | | | | | | | | | | Summary: Remove unused link libraries metioned in D33216. Reviewers: llvm-commits, vsk Reviewed By: vsk Subscribers: vsk, kubamracek, mgorny, filcab Differential Revision: https://reviews.llvm.org/D33292 llvm-svn: 303286
* Generate ubsan shared libraries.Leo Li2017-05-171-0/+29
| | | | | | | | | | | | | | Summary: Those libraries are required by aosp (https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+/master/Android.mk). Currenly the shared libraries are generated by aosp Makefile system. We are looking forward to using cmake to generate them. Reviewers: llvm-commits, vsk Reviewed By: vsk Subscribers: filcab, vsk, srhines, kubamracek, mgorny, krytarowski Differential Revision: https://reviews.llvm.org/D33216 llvm-svn: 303276
* [ubsan] Implement __sanitizer_print_stack_trace for standalone UBSan runtime.Alexander Potapenko2017-05-052-0/+38
| | | | | | Patch by Max Moroz, reviewed at https://reviews.llvm.org/D32542 llvm-svn: 302218
* [ubsan] Fix error summary message for ObjC BOOL invalid loadsVedant Kumar2017-05-051-1/+2
| | | | llvm-svn: 302211
* [ubsan] Fall back to the fast unwinder when print_stacktrace=1Vedant Kumar2017-05-011-8/+9
| | | | | | | | | | | | | | This makes it possible to get stacktrace info when print_stacktrace=1 on Darwin (where the slow unwinder is not currently supported [1]). This should not regress any other platforms. [1] The thread about r300295 has a relatively recent discusion about this. We should be able to enable the existing slow unwind functionality for Darwin, but this needs more testing. Differential Revision: https://reviews.llvm.org/D32517 llvm-svn: 301839
* [ubsan] Make the cast overflow message less redundantVedant Kumar2017-04-271-1/+1
| | | | llvm-svn: 301589
* Let ubsan search UBSAN_SYMBOLIZER_PATH for llvm-symbolizerNico Weber2017-04-191-0/+1
| | | | | | https://reviews.llvm.org/D27375 llvm-svn: 300692
* [ubsan] Use the correct tool name in diagnosticsVedant Kumar2017-04-143-4/+11
| | | | | | | | | | | | | | | When using ASan and UBSan together, the common sanitizer tool name is set to "AddressSanitizer". That means that when a UBSan diagnostic is printed out, it looks like this: SUMMARY: AddressSanitizer: ... This can confuse users. Fix it so that we always use the correct tool name when printing out UBSan diagnostics. Differential Revision: https://reviews.llvm.org/D32066 llvm-svn: 300358
* [ubsan] Add nullability handlers to interface fileVedant Kumar2017-03-141-0/+4
| | | | llvm-svn: 297749
* [ubsan] Add diagnostic handlers for nullability errorsVedant Kumar2017-03-142-13/+46
| | | | | | | | | | | | | | | | | Add 'nullability_arg' and 'nullability_return' diagnostic handlers, and also add a TypeCheckKind for null assignments to _Nonnull. With this in place, we can update clang to use the nicer handlers for nullability diagnostics. The alternative to this approach is to update the existing 'nonnull_arg' and 'nonnull_return' handlers to accept a boolean parameter. However, versioning the existing handlers would cause code size bloat, and the complexity cost of introducing new handlers into the runtime is low. I will add tests for this, and all of -fsanitize=nullability, into check-ubsan once the clang side of the changes is in. llvm-svn: 297748
* [sanitizer] Use interception to access to strong definitions in the executable.Marcos Pividori2017-02-022-0/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In Windows, when sanitizers are implemented as a shared library (DLL), users can redefine and export a new definition for weak functions, in the main executable, for example: extern "C" __declspec(dllexport) void __sanitizer_cov_trace_pc_guard(u32* guard) { // Different implementation provided by the client. } However, other dlls, will continue using the default implementation imported from the sanitizer dll. This is different in linux, where all the shared libraries will consider the strong definition. With the implementation in this diff, when the dll is initialized, it will check if the main executable exports the definition for some weak function (for example __sanitizer_cov_trace_pc_guard). If it finds that function, then it will override the function in the dll with that pointer. So, all the dlls with instrumentation that import __sanitizer_cov_trace_pc_guard__dll() from asan dll, will be using the function provided by the main executable. In other words, when the main executable exports a strong definition for a weak function, we ensure all the dlls use that implementation instead of the default weak implementation. The behavior is similar to linux. Now, every user that want to override a weak function, only has to define and export it. The same for Linux and Windows, and it will work fine. So, there is no difference on the user's side. All the sanitizers will include a file sanitizer_win_weak_interception.cc that register sanitizer's weak functions to be intercepted in the binary section WEAK When the sanitizer dll is initialized, it will execute weak_intercept_init() which will consider all the CB registered in the section WEAK. So, for all the weak functions registered, we will check if a strong definition is provided in the main executable. All the files sanitizer_win_weak_interception.cc are independent, so we do not need to include a specific list of sanitizers. Now, we include [asan|ubsan|sanitizer_coverage]_win_weak_interception.cc and sanitizer_win_weak_interception.cc in asan dll, so when it is initialized, it will consider all the weak functions from asan, ubsan and sanitizer coverage. After this diff, sanitizer coverage is fixed for MD on Windows. In particular libFuzzer can provide custom implementation for all sanitizer coverage's weak functions, and they will be considered by asan dll. Differential Revision: https://reviews.llvm.org/D29168 llvm-svn: 293958
* [sanitizer] Add dynamic_runtime_thunk for different sanitizers.Marcos Pividori2017-02-022-0/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In Windows, when the sanitizer is implemented as a shared library (DLL), we need an auxiliary static library dynamic_runtime_thunk that will be linked to the main executable and dlls. In the sanitizer DLL, we are exposing weak functions with WIN_WEAK_EXPORT_DEF(), which exports the default implementation with __dll suffix. For example: for sanitizer coverage, the default implementation of __sanitizer_cov_trace_cmp is exported as: __sanitizer_cov_trace_cmp__dll. In the dynamic_runtime_thunk static library, we include weak aliases to the imported implementation from the dll, using the macro WIN_WEAK_IMPORT_DEF(). By default, all users's programs that include calls to weak functions like __sanitizer_cov_trace_cmp, will be redirected to the implementation in the dll, when linking to dynamic_runtime_thunk. After this diff, we are able to compile code with sanitizer coverage instrumentation on Windows. When the instrumented object files are linked with clang-rt_asan_dynamic_runtime_thunk-arch.lib all the weak symbols will be resolved to the implementation imported from asan dll. All the files sanitizer_dynamic_runtime_thunk.cc are independent, so we do not need to include a specific list of sanitizers. Now, we compile: [asan|ubsan|sanitizer_coverage]_win_dynamic_runtime_thunk.cc and sanitizer_win_dynamic_runtime_thunk.cc to generate asan_dynamic_runtime_thunk.lib, because we include asan, ubsan and sanitizer coverage in the address sanitizer library. Differential Revision: https://reviews.llvm.org/D29158 llvm-svn: 293953
* [sanitizer] Intercept weak functions in dll_thunks.Marcos Pividori2017-02-021-1/+1
| | | | | | | | | | | | | | In this diff, I update current implementation of the interception in dll_thunks to consider the special case of weak functions. First we check if the client has redefined the function in the main executable (for example: __sanitizer_cov_trace_pc_guard). It we can't find it, then we look for the default implementation (__sanitizer_cov_trace_pc_guard__dll). The default implementation is always available because the static runtime is linked to the main executable. Differential Revision: https://reviews.llvm.org/D29155 llvm-svn: 293952
* [sanitizer] Split dll_thunks into different sanitizers.Marcos Pividori2017-02-022-0/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the sanitizer is implemented as a static library and is included in the main executable, we need an auxiliary static library dll_thunk that will be linked to the dlls that have instrumentation, so they can refer to the runtime in the main executable. Basically, it uses interception to get a pointer the function in the main executable and override its function with that pointer. Before this diff, all of the implementation for dll_thunks was included in asan. In this diff I split it into different sanitizers, so we can use other sanitizers regardless of whether we include asan or not. All the sanitizers include a file sanitizer_win_dll_thunk.cc that register functions to be intercepted in the binary section: DLLTH When the dll including dll_thunk is initialized, it will execute __dll_thunk_init() implemented in: sanitizer_common/sanitizer_win_dll_thunk.cc, which will consider all the CB registered in the section DLLTH. So, all the functions registered will be intercepted, and redirected to the implementation in the main executable. All the files "sanitizer_win_dll_thunk.cc" are independent, so we don't need to include a specific list of sanitizers. Now, we compile: asan_win_dll_thunk.cc ubsan_win_dll_thunk.cc, sanitizer_coverage_win_dll_thunk.cc and sanitizer_win_dll_thunk.cc, to generate asan_dll_thunk, because we include asan, ubsan and sanitizer coverage in the address sanitizer library. Differential Revision: https://reviews.llvm.org/D29154 llvm-svn: 293951
* [sanitizer] Add list of symbols exported in sanitizers' interface.Marcos Pividori2017-01-311-0/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | Add a new auxiliary file to each sanitizer: sanitizer_interface.inc, listing all the functions exported, with the macros: INTERFACE_FUNCTION() and INTERFACE_WEAK_FUNCTION(). So, when we need to define or repeat a procedure for each function in the sanitizer's interface, we can define the macros and include that header. In particular, these files are needed for Windows, in the nexts commits. Also, this files could replace the existing files: weak_symbols.txt for Apple. Instead of reading weak_symbols.txt to get the list of weak symbols, we could read the file sanitizer_interface.inc and consider all the symbols included with the macro INTERFACE_WEAK_FUNCTION(Name). In this commit, I only include these files to the sanitizers that work on Windows. We could do the same for the rest of the sanitizers when needed. I updated tests for: Linux, Darwin and Windows. If a new function is exported but is not present in the interface list, the tests "interface_symbols_[darwin|windows|linux].c" fail. Also, I remove the comments: "/* OPTIONAL */" which are not required any more, because we use the macro: INTERFACE_WEAK_FUNCTION() for weak functions. Differential Revision: https://reviews.llvm.org/D29148 llvm-svn: 293682
* General definition for weak functionsMarcos Pividori2017-01-291-15/+3
| | | | | | | | | | | | | | | | | | In this diff, I define a general macro for defining weak functions with a default implementation: "SANITIZER_INTERFACE_WEAK_DEF()". This way, we simplify the implementation for different platforms. For example, we cannot define weak functions on Windows, but we can use linker pragmas to create an alias to a default implementation. All of these implementation details are hidden in the new macro. Also, as I modify the name for exported weak symbols on Windows, I needed to temporarily disable "dll_host" test for asan, which checks the list of functions included in asan_win_dll_thunk. Differential Revision: https://reviews.llvm.org/D28596 llvm-svn: 293419
* [sanitizer] [asan] Use macros to simplify weak aliases on Windows.Marcos Pividori2017-01-201-5/+3
| | | | | | | | | This patch adds some useful macros for dealing with pragma directives on Windows. Also, I add appropriate documentation for future users. Differential Revision: https://reviews.llvm.org/D28525 llvm-svn: 292650
* Revert "[sancov] moving sancov rt to sancov/ directory"Mike Aizatsky2017-01-121-2/+0
| | | | | | | | This reverts commit https://reviews.llvm.org/rL291734 Reason: mac breakage http://lab.llvm.org:8080/green//job/clang-stage1-configure-RA_build/28798/consoleFull#1657087648e9a0fee5-ebcc-4238-a641-c5aa112c323e llvm-svn: 291736
* [sancov] moving sancov rt to sancov/ directoryMike Aizatsky2017-01-121-0/+2
| | | | | | | | Subscribers: kubabrecka, mgorny Differential Revision: https://reviews.llvm.org/D28541 llvm-svn: 291734
* Make cmake link flag naming consistentFrancis Ricci2017-01-101-3/+3
| | | | | | | | | | | | | | | | | | | Summary: The build system was inconsistent in its naming conventions for link flags. This patch changes all uses of LINKFLAGS to LINK_FLAGS, for consistency with cmake's LINK_FLAGS property. This patch should make it easier to search the source code for uses of link flags, as well as providing the benefit of improved style and consistency. Reviewers: compnerd, beanz Subscribers: kubabrecka, llvm-commits, mgorny Differential Revision: https://reviews.llvm.org/D28506 llvm-svn: 291539
* Enable weak hooks on darwinFrancis Ricci2017-01-092-0/+5
| | | | | | | | | | | | | | | | Summary: By default, darwin requires a definition for weak interface functions at link time. Adding the '-U' link flag with each weak function allows these weak interface functions to be used without definitions, which mirrors behavior on linux and windows. Reviewers: compnerd, eugenis Subscribers: kubabrecka, mgorny, llvm-commits Differential Revision: https://reviews.llvm.org/D28203 llvm-svn: 291417
* Revert "Enable weak hooks on darwin"Francis Ricci2017-01-072-5/+0
| | | | | | | | Reverts accidental upload. This reverts commit 421408c0f2cc811bcf9a945be6e95e46f76cb358. llvm-svn: 291316
* Enable weak hooks on darwinFrancis Ricci2017-01-072-0/+5
| | | | | | | | | | | | | | | | Summary: By default, darwin requires a definition for weak interface functions at link time. Adding the '-U' link flag with each weak function allows these weak interface functions to be used without definitions, which mirrors behavior on linux and windows. Reviewers: compnerd, eugenis Subscribers: kubabrecka, mgorny, llvm-commits Differential Revision: https://reviews.llvm.org/D28203 llvm-svn: 291314
* [sanitizer] Use architecture/slice information when symbolizing fat Mach-O ↵Kuba Mracek2017-01-061-1/+1
| | | | | | | | | | files on Darwin This patch starts passing architecture information about a module to llvm-symbolizer and into text reports. This fixes the longstanding x86_64/x86_64h mismatch issue on Darwin. Differential Revision: https://reviews.llvm.org/D27390 llvm-svn: 291287
* [ubsan] Minimize size of data for type_mismatch (Redo of D19668)Filipe Cabecinhas2017-01-062-9/+10
| | | | | | | | | | | | Summary: This is the compiler-rt side of D28242. Reviewers: kcc, vitalybuka, pgousseau, gbedwell Subscribers: kubabrecka, llvm-commits Differential Revision: https://reviews.llvm.org/D28244 llvm-svn: 291237
* [ubsan] More 0 -> nullptr conversions (NFC)Vedant Kumar2016-10-061-4/+4
| | | | llvm-svn: 283511
* [ubsan] 0 -> nullptr (NFC)Vedant Kumar2016-10-061-2/+2
| | | | llvm-svn: 283506
* [compiler-rt] Do not introduce __sanitizer namespace globallyAnna Zaks2016-09-151-0/+2
| | | | | | | | | | | | The definitions in sanitizer_common may conflict with definitions from system headers because: The runtime includes the system headers after the project headers (as per LLVM coding guidelines). lib/sanitizer_common/sanitizer_internal_defs.h pollutes the namespace of everything defined after it, which is all/most of the sanitizer .h and .cc files and the included system headers with: using namespace __sanitizer; // NOLINT This patch solves the problem by introducing the namespace only within the sanitizer namespaces as proposed by Dmitry. Differential Revision: https://reviews.llvm.org/D21947 llvm-svn: 281657
* [CMake] Connect Compiler-RT targets to LLVM Runtimes directoryChris Bieneman2016-08-261-4/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | This patch builds on LLVM r279776. In this patch I've done some cleanup and abstracted three common steps runtime components have in their CMakeLists files, and added a fourth. The three steps I abstract are: (1) Add a top-level target (i.e asan, msan, ...) (2) Set the target properties for sorting files in IDE generators (3) Make the compiler-rt target depend on the top-level target The new step is to check if a command named "runtime_register_component" is defined, and to call it with the component name. The runtime_register_component command is defined in llvm/runtimes/CMakeLists.txt, and presently just adds the component to a list of sub-components, which later gets used to generate target mappings. With this patch a new workflow for runtimes builds is supported. The new workflow when building runtimes from the LLVM runtimes directory is: > cmake [...] > ninja runtimes-configure > ninja asan The "runtimes-configure" target builds all the dependencies for configuring the runtimes projects, and runs CMake on the runtimes projects. Running the runtimes CMake generates a list of targets to bind into the top-level CMake so subsequent build invocations will have access to some of Compiler-RT's targets through the top-level build. Note: This patch does exclude some top-level targets from compiler-rt libraries because they either don't install files (sanitizer_common), or don't have a cooresponding `check` target (stats). llvm-svn: 279863
* Revert " [compiler-rt] Allow c++ abi to be explictly disabled in cmake ↵Dean Michael Berris2016-08-261-1/+1
| | | | | | | | configuration" This reverts commit 6659b10799b287ad815e49c4f1b01abc4369b03d. llvm-svn: 279818
* [compiler-rt] Allow c++ abi to be explictly disabled in cmake configurationDean Michael Berris2016-08-261-1/+1
| | | | | | | | | | | | Summary: This will allow for the sanitizers to be used when c++ abi is unavailable. Reviewers: samsonov, beanz, pcc, rnk Subscribers: llvm-commits, kubabrecka, compnerd, dberris Differential Revision: https://reviews.llvm.org/D23376 llvm-svn: 279816
* [compiler-rt] Don't build ubsan cxxabi sources when unusedFrancis Ricci2016-08-221-3/+12
| | | | | | | | | | | | | | | | | | Summary: On apple targets, when SANITIZER_CAN_USE_CXXABI is false, the ubsan cxxabi sources aren't built, since they're unused. Do this on non-apple targets as well. This fixes errors when linking sanitizers if c++ abi is unavailable. Reviewers: pcc, kubabrecka, beanz Subscribers: rnk, llvm-commits, kubabrecka, compnerd, dberris Differential Revision: https://reviews.llvm.org/D23638 llvm-svn: 279467
* [cmake] Fix append_rtti_flag macro and bad var nameFilipe Cabecinhas2016-08-221-1/+1
| | | | llvm-svn: 279450
* Revert "[compiler-rt] Allow c++ abi to be explictly disabled in cmake ↵Francis Ricci2016-08-161-1/+1
| | | | | | | | configuration" This reverts commit dbb6e905684e2e9488887b26c02ee8881849f09f. llvm-svn: 278852
* [compiler-rt] Allow c++ abi to be explictly disabled in cmake configurationFrancis Ricci2016-08-161-1/+1
| | | | | | | | | | | | Summary: This will allow for the sanitizers to be used when c++ abi is unavailable. Reviewers: samsonov, beanz, pcc, rnk Subscribers: llvm-commits, kubabrecka, compnerd, dberris Differential Revision: https://reviews.llvm.org/D23376 llvm-svn: 278848
* Revert "[compiler-rt] Allow c++ abi to be explictly disabled in cmake ↵Francis Ricci2016-08-161-1/+1
| | | | | | | | configuration" This reverts commit cd5fa595648378f38cdad8b07e18433639c28a9c. llvm-svn: 278800
* [compiler-rt] Allow c++ abi to be explictly disabled in cmake configurationFrancis Ricci2016-08-161-1/+1
| | | | | | | | | | | | Summary: This will allow for the sanitizers to be used when c++ abi is unavailable. Reviewers: samsonov, beanz, pcc, rnk Subscribers: llvm-commits, kubabrecka, compnerd, dberris Differential Revision: https://reviews.llvm.org/D23376 llvm-svn: 278772
* Revert "[compiler-rt] Allow c++ abi to be explictly disabled in cmake ↵Francis Ricci2016-08-161-1/+1
| | | | | | | | configuration" This reverts commit 9528d86531b1289600e18c407b8e992d7fedb94f. llvm-svn: 278769
* [compiler-rt] Allow c++ abi to be explictly disabled in cmake configurationFrancis Ricci2016-08-161-1/+1
| | | | | | | | | | | | Summary: This will allow for the sanitizers to be used when c++ abi is unavailable. Reviewers: samsonov, beanz, pcc, rnk Subscribers: llvm-commits, kubabrecka, compnerd, dberris Differential Revision: https://reviews.llvm.org/D23376 llvm-svn: 278764
* [ubsan] Initialize Android logging.Evgeniy Stepanov2016-08-151-0/+1
| | | | | | This adds standalone ubsan output to "adb logcat", the same as ASan does. llvm-svn: 278706
* [compiler-rt] Fix VisualStudio virtual folders layoutEtienne Bergeron2016-07-111-0/+1
| | | | | | | | | | | | | | | | | | | | Summary: This patch is a refactoring of the way cmake 'targets' are grouped. It won't affect non-UI cmake-generators. Clang/LLVM are using a structured way to group targets which ease navigation through Visual Studio UI. The Compiler-RT projects differ from the way Clang/LLVM are grouping targets. This patch doesn't contain behavior changes. Reviewers: kubabrecka, rnk Subscribers: wang0109, llvm-commits, kubabrecka, chrisha Differential Revision: http://reviews.llvm.org/D21952 llvm-svn: 275111
* UBSan: crash less often on corrupted Vtables.Ivan Krasin2016-06-023-5/+21
| | | | | | | | | | | | | | | | | Summary: This CL adds a weak check for a Vtable prefix: for a well-formed Vtable, we require the prefix to be within [-1<<20; 1<<20]. Practically, this solves most of the known cases when UBSan segfaults without providing any useful diagnostics. Reviewers: pcc Subscribers: kubabrecka Differential Revision: http://reviews.llvm.org/D19750 llvm-svn: 271560
* [sanitizer] [SystemZ] Enable UBSan.Marcin Koscielnicki2016-04-151-1/+2
| | | | | | | | | sanitizer_common is now in good enough shape on s390x to support UBSan - all tests passing. Let's enable it. Differential Revision: http://reviews.llvm.org/D19157 llvm-svn: 266483
* [sancov] common flags initialization.Mike Aizatsky2016-03-181-1/+1
| | | | | | | | | | | | Summary: Introducing InitializeCommonFlags accross all sanitizers to simplify common flags management. Setting coverage=1 when html_cov_report is requested. Differential Revision: http://reviews.llvm.org/D18273 llvm-svn: 263820
* Fix bad regression from r263077 when building with MSVC.Nico Weber2016-03-121-2/+2
| | | | | | | | | | | | | | That change did: -#if defined(__BIG_ENDIAN__) +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ If __BYTE_ORDER__ and __ORDER_BIG_ENDIAN__ aren't defined, like they are with MSVC, this condition is true (0 == 0). Fixes PR26919. llvm-svn: 263324
OpenPOWER on IntegriCloud