summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib
Commit message (Collapse)AuthorAgeFilesLines
...
* [hwasan] Provide __sanitizer_* aliases to allocator functions.Evgeniy Stepanov2018-08-134-7/+26
| | | | | | | | | | | | | | | | Summary: Export __sanitizer_malloc, etc as aliases to malloc, etc. This way users can wrap sanitizer malloc, even in fully static binaries. Both jemalloc and tcmalloc provide similar aliases (je_* and tc_*). Reviewers: vitalybuka, kcc Subscribers: llvm-commits, kubamracek Differential Revision: https://reviews.llvm.org/D50570 llvm-svn: 339614
* [hwasan] Handle missing /proc/self/maps.Evgeniy Stepanov2018-08-131-7/+20
| | | | | | | | | | | | | | Summary: Don't crash when /proc/self/maps is inaccessible from main thread. It's not a big deal, really. Reviewers: vitalybuka, kcc Subscribers: kubamracek, llvm-commits Differential Revision: https://reviews.llvm.org/D50574 llvm-svn: 339607
* [hwasan] Allow optional early shadow setup.Evgeniy Stepanov2018-08-134-13/+36
| | | | | | | | | | | | | | | | Summary: Provide __hwasan_shadow_init that can be used to initialize shadow w/o touching libc. It can be used to bootstrap an unusual case of fully-static executable with hwasan-instrumented libc, which needs to run hwasan code before it is ready to serve user calls like madvise(). Reviewers: vitalybuka, kcc Subscribers: kubamracek, llvm-commits Differential Revision: https://reviews.llvm.org/D50581 llvm-svn: 339606
* [sanitizer] Remove st(X) from the clobber list in 32-bit x86 atomicsKostya Kortchinsky2018-08-131-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: When compiling with `WERROR=ON` & a recent clang, having the `st(?)` registers in the clobber list produces a fatal error (except `st(7)` for some reason): ``` .../sanitizer_common/sanitizer_atomic_clang_x86.h:98:9: error: inline asm clobber list contains reserved registers: ST0, ST1, ST2, ST3, ST4, ST5, ST6 [-Werror,-Winline-asm] "movq %1, %%mm0;" // Use mmx reg for 64-bit atomic moves ^ <inline asm>:1:1: note: instantiated into assembly here movq 8(%esp), %mm0;movq %mm0, (%esi);emms; ^ .../sanitizer_common/sanitizer_atomic_clang_x86.h:98:9: note: Reserved registers on the clobber list may not be preserved across the asm statement, and clobbering them may lead to undefined behaviour. "movq %1, %%mm0;" // Use mmx reg for 64-bit atomic moves ^ <inline asm>:1:1: note: instantiated into assembly here movq 8(%esp), %mm0;movq %mm0, (%esi);emms; ^ ``` As far as I can tell, they were in there due to the use of the `emms` instruction, but removing the clobber doesn't appear to have a functional impact. I am unsure if there is a better way to address this. Reviewers: eugenis, vitalybuka Reviewed By: vitalybuka Subscribers: kubamracek, delcypher, jfb, llvm-commits, #sanitizers Differential Revision: https://reviews.llvm.org/D50562 llvm-svn: 339575
* [hwasan] Remove liblog dependency.Evgeniy Stepanov2018-08-101-1/+0
| | | | | | | | | | | | | | | | HWASan will not run on older Android releases where we use __android_log_write for logging. This dependency is also harmful in the case when libc itself depends on hwasan, because it creates a loop of libc -> hwasan -> liblog -> libc which makes liblog vs libc initialization order undetermined. Without liblog the loop is just libc -> hwasan -> libc and any init order issues can be solved in hwasan. llvm-svn: 339449
* Revert "SafeStack: Delay thread stack clean-up"Vlad Tsyrklevich2018-08-103-66/+21
| | | | | | | | | This reverts commit r339405, it's failing on Darwin buildbots because it doesn't seem to have a tgkill/thr_kill2 interface. It has a __pthread_kill() syscall, but that relies on having a handle to the thread's port which is not equivalent to it's tid. llvm-svn: 339408
* SafeStack: Delay thread stack clean-upVlad Tsyrklevich2018-08-093-21/+66
| | | | | | | | | | | | | | | | | | Summary: glibc can call SafeStack instrumented code even after the last pthread data destructor has run. Delay cleaning-up unsafe stacks for threads until the thread is dead by having future threads clean-up prior threads stacks. Reviewers: pcc, eugenis Reviewed By: eugenis Subscribers: cryptoad, eugenis, kubamracek, delcypher, llvm-commits, #sanitizers, kcc Differential Revision: https://reviews.llvm.org/D50406 llvm-svn: 339405
* [sanitizer] Remove rsp from the clobber list in internal_cloneKostya Kortchinsky2018-08-091-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: When compiling with WERROR=ON, a new fatal warning started popping up recently (due to -Werror,-Winline-asm): ``` .../lib/sanitizer_common/sanitizer_linux.cc:1214:24: error: inline asm clobber list contains reserved registers: RSP [-Werror,-Winline-asm] "syscall\n" ^ <inline asm>:1:1: note: instantiated into assembly here syscall ^ .../lib/sanitizer_common/sanitizer_linux.cc:1214:24: note: Reserved registers on the clobber list may not be preserved across the asm statement, and clobbering them may lead to undefined behaviour. "syscall\n" ^ <inline asm>:1:1: note: instantiated into assembly here syscall ^ ``` Removing `rsp` from the clobber list makes the warning go away, and does not appear to have a functional impact. If there is another way to solve this, let me know. Reviewers: eugenis, vitalybuka Reviewed By: eugenis Subscribers: kubamracek, delcypher, llvm-commits, #sanitizers Differential Revision: https://reviews.llvm.org/D50519 llvm-svn: 339370
* Enable getentropy for FreeBSD 12David Carlier2018-08-091-1/+6
| | | | | | | | | | | | As for Linux with its getrandom's syscall, giving the possibility to fill buffer with native call for good quality but falling back to /dev/urandom in worst case similarly. Reviewers: vitalybuka, krytarowski Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D48804 llvm-svn: 339318
* [macOS] stop generating the libclang_rt.10.4.a library for macOS 10.4Alex Lorenz2018-08-081-137/+0
| | | | | | | | The support for macOS 10.4 has been dropped by Xcode 10. rdar://42876880 llvm-svn: 339277
* [libFuzzer] Optimize handle unstable checks by reducing iterationsMax Moroz2018-08-083-16/+21
| | | | | | | | | | | | | | | | | | Summary: We only run the 3rd check if 2nd check finds unstable edges. 3rd UpdateUnstableCounters is now merged with ApplyUnstableCounters to only run 1 iteration. Patch by Kyungtak Woo (@kevinwkt). Reviewers: Dor1s, metzman, morehouse Reviewed By: Dor1s, morehouse Subscribers: delcypher, #sanitizers, llvm-commits, kcc Differential Revision: https://reviews.llvm.org/D50411 llvm-svn: 339249
* [libFuzzer] Add unstable function printing to print_unstable_stats flagMax Moroz2018-08-061-2/+14
| | | | | | | | | | | | | | | | | | | Summary: There may be cases in which a user wants to know which part of their code is unstable. We use ObservedFuncs and UnstableCounters to print at exit which of the ObservedFunctions are unstable under the -print_unstable_stats flag. Patch by Kyungtak Woo (@kevinwkt). Reviewers: Dor1s, metzman, morehouse Reviewed By: Dor1s, metzman, morehouse Subscribers: delcypher, #sanitizers, llvm-commits, kcc Differential Revision: https://reviews.llvm.org/D50264 llvm-svn: 339081
* [libFuzzer] Initial implementation of weighted mutation leveraging during ↵Max Moroz2018-08-026-27/+76
| | | | | | | | | | | | | | | | | | | | | runtime. Summary: Added functions that calculate stats while fuzz targets are running and give mutations weight based on how much new coverage they provide, and choose better performing mutations more often. Patch by Kodé Williams (@kodewilliams). Reviewers: Dor1s, metzman, morehouse Reviewed By: Dor1s, morehouse Subscribers: delcypher, kcc, llvm-commits, #sanitizers Differential Revision: https://reviews.llvm.org/D49621 llvm-svn: 338776
* Add header guard to asan_report.hFilipe Cabecinhas2018-08-021-0/+4
| | | | llvm-svn: 338700
* [libFuzzer] use absolute distance in addition to the hamming distance in ↵Kostya Serebryany2018-08-021-10/+5
| | | | | | value profiling; our A/B testing have (somewhat weak) indication that this provides an additional signal for corpus expansion llvm-svn: 338661
* Fix sizeof(struct pthread) in glibc 2.14.Kostya Serebryany2018-08-011-1/+1
| | | | | | | | | | | | | | Summary: Fixes: https://github.com/google/sanitizers/issues/966 Reviewers: kcc Reviewed By: kcc Subscribers: kubamracek Differential Revision: https://reviews.llvm.org/D50131 llvm-svn: 338606
* Add missing conditionFilipe Cabecinhas2018-08-011-0/+1
| | | | llvm-svn: 338577
* [compiler-rt] Add a routine to specify the mode used when creating profile dirs.Matt Davis2018-07-312-1/+16
| | | | | | | | | | | | | | | | | | | | | Summary: This patch introduces `llvm_profile_set_dir_mode` and `llvm_profile_get_dir_mode` to the compiler-rt profile API. Originally, profile data was placed into a directory that was created with a hard-coded mode value of 0755 (for non-win32 builds). In certain cases, it can be helpful to create directories with a different mode other than 0755. This patch introduces set/get routines to allow users to specify a desired mode. The default remains at 0755. Reviewers: void, probinson Reviewed By: probinson Subscribers: probinson, dberris, cfe-commits Differential Revision: https://reviews.llvm.org/D49953 llvm-svn: 338456
* [XRay][compiler-rt] Update test to use similar structureDean Michael Berris2018-07-311-3/+3
| | | | | | This is a follow-up to D50037. llvm-svn: 338349
* [XRay][compiler-rt] Profiling Mode: Include file header in buffersDean Michael Berris2018-07-313-21/+64
| | | | | | | | | | | | | | | | | Summary: This change provides access to the file header even in the in-memory buffer processing. This allows in-memory processing of the buffers to also check the version, and the format, of the profile data. Reviewers: eizan, kpw Reviewed By: eizan Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D50037 llvm-svn: 338347
* Pacify sanitizer lint script that still does not run on WindowsReid Kleckner2018-07-311-1/+1
| | | | llvm-svn: 338334
* [asan/win] Use SRW locks to fix a race in BlockingMutexReid Kleckner2018-07-302-34/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: Before my change, BlockingMutex used Windows critial sections. Critical sections can only be initialized by calling InitializeCriticalSection, dynamically. The primary sanitizer allocator expects to be able to reinterpret zero initialized memory as a BlockingMutex and immediately lock it. RegionInfo contains a mutex, and it placement new is never called for it. These objects are accessed via: RegionInfo *GetRegionInfo(uptr class_id) const { DCHECK_LT(class_id, kNumClasses); RegionInfo *regions = reinterpret_cast<RegionInfo *>(SpaceEnd()); return &regions[class_id]; } The memory comes from the OS without any other initialization. For various reasons described in the comments, BlockingMutex::Lock would check if the object appeared to be zero-initialized, and it would lazily call the LinkerInitialized constructor to initialize the critical section. This pattern is obviously racy, and the code had a bunch of FIXMEs about it. The best fix here is to use slim reader writer locks, which can start out zero-initialized. They are available starting in Windows Vista. I think it's safe to go ahead and use them today. Reviewers: kcc, vitalybuka Subscribers: kubamracek, llvm-commits Differential Revision: https://reviews.llvm.org/D49893 llvm-svn: 338331
* [compiler-rt][ubsan] Implicit Conversion Sanitizer - integer truncation - ↵Roman Lebedev2018-07-306-1/+66
| | | | | | | | | | | | | | | | | | | | | | compiler-rt part Summary: This is a compiler-rt part. The clang part is D48958. See [[ https://bugs.llvm.org/show_bug.cgi?id=21530 | PR21530 ]], https://github.com/google/sanitizers/issues/940. Reviewers: #sanitizers, samsonov, vsk, rsmith, pcc, eugenis, kcc, filcab Reviewed By: #sanitizers, vsk, filcab Subscribers: llvm-commits, eugenis, filcab, kubamracek, dberris, #sanitizers, regehr Tags: #sanitizers Differential Revision: https://reviews.llvm.org/D48959 llvm-svn: 338287
* [cmake] [ARM] Exclude any VFP builtins if VFP is not supportedAzharuddin Mohammed2018-07-301-0/+9
| | | | | | | | | | | | | | | | | | | | Summary: rL325492 disables FPU features when using soft floating point (-mfloat-abi=soft), which is used internally when building for arm. This causes errors with builtins that utililize VFP instructions. With this change we check if VFP is enabled (by checking if the preprocessor macro __VFP_FP__ is defined), and exclude such builtins if it is not enabled. Reviewers: rengolin, samsonov, compnerd, smeenai, javed.absar, peter.smith Reviewed By: peter.smith Subscribers: delcypher, peter.smith, mgorny, kristof.beyls, chrib, llvm-commits Differential Revision: https://reviews.llvm.org/D47217 llvm-svn: 338284
* [XRay][compiler-rt] FDR Mode: Use mmap instead of internal allocatorDean Michael Berris2018-07-301-11/+44
| | | | | | | | | | | | | | | | | | | | | Summary: This change moves FDR mode to use `internal_mmap(...)` from sanitizer_common instead of the internal allocator interface. We're doing this to sidestep the alignment issues we encounter with the `InternalAlloc(...)` functions returning pointers that have some magic bytes at the beginning. XRay copies bytes into the buffer memory, and does not require the magic bytes tracking the other sanitizers use when allocating/deallocating buffers. Reviewers: kpw, eizan Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D49972 llvm-svn: 338228
* [asan] Fix typoFangrui Song2018-07-301-1/+1
| | | | llvm-svn: 338225
* Fix Asan-i386-calls-Test AddressSanitizer.ShadowGapTest on FreeBSDFangrui Song2018-07-281-1/+1
| | | | | | | | | 0x22000000 happens to be on the left of a heap allocation and the error message is different (heap-buffer-overflow). FreeBSD NetBSD have larger SHADOW_OFFSET (0x40000000) but let's try not using #ifdef here. llvm-svn: 338208
* [tsan] Fix gcc pedantic warningDmitry Vyukov2018-07-261-16/+16
| | | | | | | | | Fix gcc (7.2.0) pedantic warning warning: extra ‘;’ [-Wpedantic] Author: jasonl220 (Jason Lovett) Review: https://reviews.llvm.org/D49817 llvm-svn: 338023
* [sanitizer] Include signal.h instead of sys/signal.hFangrui Song2018-07-261-5/+1
| | | | llvm-svn: 338004
* [profile] Support profiling runtime on FuchsiaPetr Hosek2018-07-256-1/+197
| | | | | | | | | | | | | This ports the profiling runtime on Fuchsia and enables the instrumentation. Unlike on other platforms, Fuchsia doesn't use files to dump the instrumentation data since on Fuchsia, filesystem may not be accessible to the instrumented process. We instead use the data sink to pass the profiling data to the system the same sanitizer runtimes do. Differential Revision: https://reviews.llvm.org/D47208 llvm-svn: 337881
* [sanitizer] Update symbolizer test.Matt Morehouse2018-07-241-0/+4
| | | | llvm-svn: 337872
* [libFuzzer] Handle unstable edges by disregarding unstable edgesMax Moroz2018-07-245-7/+19
| | | | | | | | | | | | | | | | | | | | Summary: Added a new mode within flag -handle_unstable for new unstable handling algorithm that does the following: When an edge is shown as unstable, copy to UnstableCounters the value 0. During ApplyUnstableCounters we copy back the value 0 to ModuleInline8bitCounters if the edge was unstable. This way we would be ignoring completely features that were collected through non-determinism. Unstable hits would be counted as if it never hit. Reviewers: metzman, Dor1s, kcc, morehouse Reviewed By: metzman, morehouse Subscribers: delcypher, llvm-commits, #sanitizers Differential Revision: https://reviews.llvm.org/D49684 llvm-svn: 337853
* [tsan] Fix crash in objc_sync_enter/objc_sync_exit when using an Obj-C ↵Kuba Mracek2018-07-241-2/+26
| | | | | | | | | | tagged pointer Objective-C tagged pointers (either bottom-most or top-most bit is 1) are valid Obj-C objects but are not valid pointers. Make sure we don't crash on them when used in objc_sync_enter/objc_sync_exit. Instead, let's synchronize on a global object. Differential Revision: https://reviews.llvm.org/D49707 llvm-svn: 337837
* [profile] Fix finding the first and last directory separators on Windows.Igor Kudrin2018-07-241-10/+8
| | | | | | | | | Until now, our code preferred backslashes to slashes, whereas Windows allows using both types of directory separators in one path string. Differential Revision: https://reviews.llvm.org/D49664 llvm-svn: 337826
* [profile] Fix a possible memory leak in parseFilenamePattern().Igor Kudrin2018-07-241-2/+2
| | | | | | Differential Revision: https://reviews.llvm.org/D49666 llvm-svn: 337823
* [sanitizer][fuzzer] Temporarily transition to ZX_TIME_INFINITE_OLDPetr Hosek2018-07-242-5/+11
| | | | | | | | | | | This is a preparation for breaking change when all Zircon calls that take time as an argument will start using signed valued. We will transition back to ZX_TIME_INFITINE after all the changes to these symbols are done and become part of the Fuchsia SDK. Differential Revision: https://reviews.llvm.org/D49694 llvm-svn: 337802
* [sanitizer] Transition from _zx_vmar_... to _zx_vmar_..._old callsPetr Hosek2018-07-242-19/+21
| | | | | | | | | | This is a preparation for breaking changes to _zx_vmar_... calls. We will transition back to _zx_vmar_... after all the changes to these symbols are done and become part of the Fuchsia SDK. Differential Revision: https://reviews.llvm.org/D49697 llvm-svn: 337801
* Revert "[Fuzzer] Update path to libc++ headers"Petr Hosek2018-07-241-2/+2
| | | | | | This reverts commit r337775 since r337727 has been reverted in r337782. llvm-svn: 337784
* [Fuzzer] Update path to libc++ headersPetr Hosek2018-07-231-2/+2
| | | | | | | | | The path to headers which are installed into libc++ build directory has changed in r337727 which broke the libFuzzer build. Differential Revision: https://reviews.llvm.org/D49705 llvm-svn: 337775
* [libFuzzer] Handle unstable edges by using minimum hit countsMax Moroz2018-07-237-19/+54
| | | | | | | | | | | | | | | | | | | | | | | | Summary: Created unstable_handle flag that takes 1 or 2, depending on the handling type. Modified RunOne to accommodate the following heuristic: Use the first CollectFeatures to count how many features there are. If no new features, CollectFeatures like before. If there is new feature, we run CB 2 more times, Check which edges are unstable per input and we store the least amount of hit counts for each edge. Apply these hit counts back to inline8bitcounters so that CollectFeatures can work as intended. Modified UnstableCounters to 8int_t and created a bitset UnstableSet to tell which edges are unstable. Patch by Kyungtak Woo (@kevinwkt). Reviewers: Dor1s, metzman, morehouse Reviewed By: Dor1s, morehouse Subscribers: delcypher, #sanitizers, llvm-commits, kcc Differential Revision: https://reviews.llvm.org/D49525 llvm-svn: 337696
* Mark REAL(swapcontext) with indirect_return attribute on x86H.J. Lu2018-07-202-0/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When shadow stack from Intel CET is enabled, the first instruction of all indirect branch targets must be a special instruction, ENDBR. lib/asan/asan_interceptors.cc has ... int res = REAL(swapcontext)(oucp, ucp); ... REAL(swapcontext) is a function pointer to swapcontext in libc. Since swapcontext may return via indirect branch on x86 when shadow stack is enabled, as in this case, int res = REAL(swapcontext)(oucp, ucp); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This function may be returned via an indirect branch. Here compiler must insert ENDBR after call, like call *bar(%rip) endbr64 I opened an LLVM bug: https://bugs.llvm.org/show_bug.cgi?id=38207 to add the indirect_return attribute so that it can be used to inform compiler to insert ENDBR after REAL(swapcontext) call. We mark REAL(swapcontext) with the indirect_return attribute if it is available. This fixed: https://bugs.llvm.org/show_bug.cgi?id=38249 Reviewed By: eugenis Differential Revision: https://reviews.llvm.org/D49608 llvm-svn: 337603
* On Darwin switch from the `VM_MEMORY_ANALYSIS_TOOL` VM tag toDan Liew2018-07-201-1/+7
| | | | | | | | | | | | | `VM_MEMORY_SANITIZER`. It turns out that `VM_MEMORY_ANALYSIS_TOOL` is already reserved for use by other tools so switch to a tag reserved for use by the Sanitizers. rdar://problem/41969783 Differential Revision: https://reviews.llvm.org/D49603 llvm-svn: 337579
* [scudo] Simplify internal names (NFC)Kostya Kortchinsky2018-07-205-56/+51
| | | | | | | | | | | | | | | | | | | | | | | | | Summary: There is currently too much redundancy in the class/variable/* names in Scudo: - we are in the namespace `__scudo`, so there is no point in having something named `ScudoX` to end up with a final name of `__scudo::ScudoX`; - there are a lot of types/* that have `Allocator` in the name, given that Scudo is an allocator I figure this doubles up as well. So change a bunch of the Scudo names to make them shorter, less redundant, and overall simpler. They should still be pretty self explaining (or at least it looks so to me). The TSD part will be done in another CL (eg `__scudo::ScudoTSD`). Reviewers: alekseyshl, eugenis Reviewed By: alekseyshl Subscribers: delcypher, #sanitizers, llvm-commits Differential Revision: https://reviews.llvm.org/D49505 llvm-svn: 337557
* esan: fix shadow setupDmitry Vyukov2018-07-201-3/+3
| | | | | | | | | | r337531 changed return type of MmapFixedNoReserve, but esan wasn't updated. As the result esan shadow setup always fails. We probably need to make MmapFixedNoAccess signature consistent with MmapFixedNoReserve. But this is just to unbreak tests. llvm-svn: 337550
* [Xray] fix c99 warning build about flexible array semanticsDavid Carlier2018-07-201-1/+1
| | | | | | | | | | Reviewers: dberris Reviewed By: dberris Differential Revision: https://reviews.llvm.org/D49590 llvm-svn: 337536
* sanitizers: consistently check result of MmapFixedNoReserveDmitry Vyukov2018-07-2012-36/+40
| | | | | | | | | | | | | | | | MmapFixedNoReserve does not terminate process on failure. Failure to check its result and die will always lead to harder to debug crashes later in execution. This was observed in Go processes due to some address space conflicts. Consistently check result of MmapFixedNoReserve. While we are here also add warn_unused_result attribute to prevent such bugs in future and change return type to bool as that's what all callers want. Reviewed in https://reviews.llvm.org/D49367 llvm-svn: 337531
* [libFuzzer] when -print_coverage=1 is given, print more stats (the number of ↵Kostya Serebryany2018-07-192-14/+18
| | | | | | seeds that hit every given function) llvm-svn: 337501
* [profile] Add interface to get profile filenameTeresa Johnson2018-07-192-12/+55
| | | | | | | | | | | | | | | | Summary: Add __llvm_profile_get_filename interface to get the profile filename, which can be used for identifying which profile file belongs to an app when multiple binaries are instrumented and dumping profiles into the same directory. The filename includes the path. Reviewers: davidxl Subscribers: delcypher, #sanitizers, llvm-commits Differential Revision: https://reviews.llvm.org/D49529 llvm-svn: 337482
* [XRay][compiler-rt] Profiling: No files when emptyDean Michael Berris2018-07-191-23/+27
| | | | | | | | | This change makes it so that the profiling mode implementation will only write files when there are buffers to write. Before this change, we'd always open a file even if there were no profiles collected when flushing. llvm-svn: 337443
* [XRay][compiler-rt] FDR Mode: Add extents metadata to bufferDean Michael Berris2018-07-191-2/+30
| | | | | | | | | | | | When providing raw access to the FDR mode buffers, we used to not include the extents metadata record. This oversight means that processing the buffers in-memory will lose important information that would have been written in files. This change exposes the metadata record by serializing the data similarly to how we would do it when flushing to files. llvm-svn: 337441
OpenPOWER on IntegriCloud