base/allocator: Fix the allocator shim installation
Fixes the installation of allocator shim at //base/BUILD.gn in the following way. 1. Hook the standard allocator functions. Add appropriate allocator_shim_override_xxx according to the platform so that we hook the standard allocators. 2. Add the default dispatcher of the allocator functions. Add appropriate allocator_shim_default_dispatch_to_xxx according to our own allocator (PartitionAlloc, TCMalloc) or, if we use the system allocator, according to the platform (glibc, MacZonedMalloc, WinHeap, etc.). This is a logical and comprehensive way to install the appropriate allocator hooks and shim. Bug: 998048 Change-Id: Id3d5b5708a94f7894971d2131c83b17f6eada096 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2392189 Reviewed-by: Kentaro Hara <haraken@chromium.org> Reviewed-by: Benoit L <lizeb@chromium.org> Commit-Queue: Yuki Shiino <yukishiino@chromium.org> Cr-Commit-Position: refs/heads/master@{#805752}
This commit is contained in:
base
@@ -1304,38 +1304,47 @@ component("base") {
|
|||||||
"allocator/allocator_shim_override_cpp_symbols.h",
|
"allocator/allocator_shim_override_cpp_symbols.h",
|
||||||
"allocator/allocator_shim_override_libc_symbols.h",
|
"allocator/allocator_shim_override_libc_symbols.h",
|
||||||
]
|
]
|
||||||
|
if (is_android) {
|
||||||
|
sources +=
|
||||||
|
[ "allocator/allocator_shim_override_linker_wrapped_symbols.h" ]
|
||||||
|
all_dependent_configs += [ "//base/allocator:wrap_malloc_symbols" ]
|
||||||
|
}
|
||||||
|
if (is_apple) {
|
||||||
|
sources += [ "allocator/allocator_shim_override_mac_symbols.h" ]
|
||||||
|
}
|
||||||
|
if (is_chromeos || is_linux) {
|
||||||
|
sources += [ "allocator/allocator_shim_override_glibc_weak_symbols.h" ]
|
||||||
|
}
|
||||||
if (is_win) {
|
if (is_win) {
|
||||||
sources += [
|
sources += [
|
||||||
"allocator/allocator_shim_default_dispatch_to_winheap.cc",
|
|
||||||
"allocator/allocator_shim_override_ucrt_symbols_win.h",
|
"allocator/allocator_shim_override_ucrt_symbols_win.h",
|
||||||
"allocator/winheap_stubs_win.cc",
|
"allocator/winheap_stubs_win.cc",
|
||||||
"allocator/winheap_stubs_win.h",
|
"allocator/winheap_stubs_win.h",
|
||||||
]
|
]
|
||||||
} else if ((is_linux || is_chromeos) && use_allocator == "tcmalloc") {
|
}
|
||||||
sources += [
|
|
||||||
"allocator/allocator_shim_default_dispatch_to_tcmalloc.cc",
|
if (use_allocator == "partition") {
|
||||||
"allocator/allocator_shim_override_glibc_weak_symbols.h",
|
|
||||||
]
|
|
||||||
deps += [ "//base/allocator:tcmalloc" ]
|
|
||||||
} else if ((is_linux || is_chromeos) && use_allocator == "none") {
|
|
||||||
sources += [ "allocator/allocator_shim_default_dispatch_to_glibc.cc" ]
|
|
||||||
} else if ((is_linux || is_chromeos || is_android) &&
|
|
||||||
use_allocator == "partition") {
|
|
||||||
sources +=
|
sources +=
|
||||||
[ "allocator/allocator_shim_default_dispatch_to_partition_alloc.cc" ]
|
[ "allocator/allocator_shim_default_dispatch_to_partition_alloc.cc" ]
|
||||||
} else if (is_android) {
|
} else if (use_allocator == "tcmalloc") {
|
||||||
sources +=
|
sources += [ "allocator/allocator_shim_default_dispatch_to_tcmalloc.cc" ]
|
||||||
[ "allocator/allocator_shim_override_linker_wrapped_symbols.h" ]
|
deps += [ "//base/allocator:tcmalloc" ]
|
||||||
all_dependent_configs += [ "//base/allocator:wrap_malloc_symbols" ]
|
} else if (use_allocator == "none") {
|
||||||
if (use_allocator == "none") {
|
if (is_android) {
|
||||||
sources += [ "allocator/allocator_shim_default_dispatch_to_linker_wrapped_symbols.cc" ]
|
sources += [ "allocator/allocator_shim_default_dispatch_to_linker_wrapped_symbols.cc" ]
|
||||||
}
|
}
|
||||||
} else if (is_apple) {
|
if (is_apple) {
|
||||||
sources += [
|
sources += [
|
||||||
"allocator/allocator_shim_default_dispatch_to_mac_zoned_malloc.cc",
|
"allocator/allocator_shim_default_dispatch_to_mac_zoned_malloc.cc",
|
||||||
"allocator/allocator_shim_default_dispatch_to_mac_zoned_malloc.h",
|
"allocator/allocator_shim_default_dispatch_to_mac_zoned_malloc.h",
|
||||||
"allocator/allocator_shim_override_mac_symbols.h",
|
]
|
||||||
]
|
}
|
||||||
|
if (is_chromeos || is_linux) {
|
||||||
|
sources += [ "allocator/allocator_shim_default_dispatch_to_glibc.cc" ]
|
||||||
|
}
|
||||||
|
if (is_win) {
|
||||||
|
sources += [ "allocator/allocator_shim_default_dispatch_to_winheap.cc" ]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -5,6 +5,8 @@
|
|||||||
#ifndef BASE_ALLOCATOR_ALLOCATOR_SHIM_INTERNALS_H_
|
#ifndef BASE_ALLOCATOR_ALLOCATOR_SHIM_INTERNALS_H_
|
||||||
#define BASE_ALLOCATOR_ALLOCATOR_SHIM_INTERNALS_H_
|
#define BASE_ALLOCATOR_ALLOCATOR_SHIM_INTERNALS_H_
|
||||||
|
|
||||||
|
#include "build/build_config.h"
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
|
|
||||||
#include <sys/cdefs.h> // for __THROW
|
#include <sys/cdefs.h> // for __THROW
|
||||||
@@ -39,6 +41,11 @@
|
|||||||
// impression that they can hook the allocator.
|
// impression that they can hook the allocator.
|
||||||
#define SHIM_ALWAYS_EXPORT __attribute__((visibility("default"), noinline))
|
#define SHIM_ALWAYS_EXPORT __attribute__((visibility("default"), noinline))
|
||||||
|
|
||||||
|
#elif defined(OS_WIN) // __GNUC__
|
||||||
|
|
||||||
|
#define __THROW
|
||||||
|
#define SHIM_ALWAYS_EXPORT __declspec(noinline)
|
||||||
|
|
||||||
#endif // __GNUC__
|
#endif // __GNUC__
|
||||||
|
|
||||||
#endif // BASE_ALLOCATOR_ALLOCATOR_SHIM_INTERNALS_H_
|
#endif // BASE_ALLOCATOR_ALLOCATOR_SHIM_INTERNALS_H_
|
||||||
|
Reference in New Issue
Block a user