diff options
| author | Kostya Kortchinsky <kostyak@google.com> | 2019-06-27 14:23:26 +0000 |
|---|---|---|
| committer | Kostya Kortchinsky <kostyak@google.com> | 2019-06-27 14:23:26 +0000 |
| commit | d44cb7a65673796927cbb651685044d7e3ed0691 (patch) | |
| tree | 122ea4328ba249dd63a9db7bdf169a7b4120ef28 /compiler-rt/lib/scudo/standalone/wrappers_c.cc | |
| parent | d0e098696f940842146c70bc0f7bf8a41beb46a8 (diff) | |
| download | bcm5719-llvm-d44cb7a65673796927cbb651685044d7e3ed0691.tar.gz bcm5719-llvm-d44cb7a65673796927cbb651685044d7e3ed0691.zip | |
[scudo][standalone] Introduce the C & C++ wrappers [fixed]
Summary:
This is a redo of D63612.
Two problems came up on some bots:
- `__builtin_umull_overflow` was not declared. This is likely due to an
older clang or gcc, so add a guard with `__has_builtin` and fallback
to a division in the event the builtin doesn't exist;
- contradicting definition for `malloc`, etc. This is AFAIU due to the
fact that we ended up transitively including `stdlib.h` in the `.inc`
due to it being the flags parser header: so move the include to the
cc instead.
This should fix the issues, but since those didn't come up in my local
tests it's mostly guesswork.
Rest is the same!
Reviewers: morehouse, hctim, eugenis, vitalybuka, dyung, hans
Reviewed By: morehouse, dyung, hans
Subscribers: srhines, mgorny, delcypher, jfb, #sanitizers, llvm-commits
Tags: #llvm, #sanitizers
Differential Revision: https://reviews.llvm.org/D63831
llvm-svn: 364547
Diffstat (limited to 'compiler-rt/lib/scudo/standalone/wrappers_c.cc')
| -rw-r--r-- | compiler-rt/lib/scudo/standalone/wrappers_c.cc | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/compiler-rt/lib/scudo/standalone/wrappers_c.cc b/compiler-rt/lib/scudo/standalone/wrappers_c.cc new file mode 100644 index 00000000000..5908c600be3 --- /dev/null +++ b/compiler-rt/lib/scudo/standalone/wrappers_c.cc @@ -0,0 +1,39 @@ +//===-- wrappers_c.cc -------------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "platform.h" + +// Skip this compilation unit if compiled as part of Bionic. +#if !SCUDO_ANDROID || !_BIONIC + +#include "allocator_config.h" +#include "wrappers_c.h" +#include "wrappers_c_checks.h" + +#include <stdint.h> +#include <stdio.h> + +static scudo::Allocator<scudo::Config> Allocator; +// Pointer to the static allocator so that the C++ wrappers can access it. +// Technically we could have a completely separated heap for C & C++ but in +// reality the amount of cross pollination between the two is staggering. +scudo::Allocator<scudo::Config> *AllocatorPtr = &Allocator; + +extern "C" { + +#define SCUDO_PREFIX(name) name +#define SCUDO_ALLOCATOR Allocator +#include "wrappers_c.inc" +#undef SCUDO_ALLOCATOR +#undef SCUDO_PREFIX + +INTERFACE void __scudo_print_stats(void) { Allocator.printStats(); } + +} // extern "C" + +#endif // !SCUDO_ANDROID || !_BIONIC |

