From 97c16f8dca0694abfcdda34f8e01f5e1e989120f Mon Sep 17 00:00:00 2001 From: Evgenii Stepanov Date: Wed, 2 Aug 2017 16:34:44 -0700 Subject: [cfi] Export __cfi_shadow_size. __cfi_shadow_size returns the size of the CFI shadow mapping, or 0 if CFI is not (yet) used in this process. This can be used to adjust RLIMIT_AS setting. Test: device bionic tests Bug: 64293803 Change-Id: Icd7164f96aa7115b3585c21c0f68529cd2f07c11 --- libdl/libdl.arm.map | 1 + libdl/libdl.arm64.map | 1 + libdl/libdl.map.txt | 1 + libdl/libdl.mips.map | 1 + libdl/libdl.mips64.map | 1 + libdl/libdl.x86.map | 1 + libdl/libdl.x86_64.map | 1 + libdl/libdl_cfi.cpp | 5 +++++ 8 files changed, 12 insertions(+) (limited to 'libdl') diff --git a/libdl/libdl.arm.map b/libdl/libdl.arm.map index 292bd9711..9fc9d2369 100644 --- a/libdl/libdl.arm.map +++ b/libdl/libdl.arm.map @@ -36,6 +36,7 @@ LIBC_N { LIBC_OMR1 { # future global: + __cfi_shadow_size; # future __cfi_slowpath; # future __cfi_slowpath_diag; # future } LIBC_N; diff --git a/libdl/libdl.arm64.map b/libdl/libdl.arm64.map index 2fe2c7b94..bde6cab38 100644 --- a/libdl/libdl.arm64.map +++ b/libdl/libdl.arm64.map @@ -35,6 +35,7 @@ LIBC_N { LIBC_OMR1 { # future global: + __cfi_shadow_size; # future __cfi_slowpath; # future __cfi_slowpath_diag; # future } LIBC_N; diff --git a/libdl/libdl.map.txt b/libdl/libdl.map.txt index 408d4dcc9..d1f4ab8d1 100644 --- a/libdl/libdl.map.txt +++ b/libdl/libdl.map.txt @@ -35,6 +35,7 @@ LIBC_N { LIBC_OMR1 { # future global: + __cfi_shadow_size; # future __cfi_slowpath; # future __cfi_slowpath_diag; # future } LIBC_N; diff --git a/libdl/libdl.mips.map b/libdl/libdl.mips.map index 2fe2c7b94..bde6cab38 100644 --- a/libdl/libdl.mips.map +++ b/libdl/libdl.mips.map @@ -35,6 +35,7 @@ LIBC_N { LIBC_OMR1 { # future global: + __cfi_shadow_size; # future __cfi_slowpath; # future __cfi_slowpath_diag; # future } LIBC_N; diff --git a/libdl/libdl.mips64.map b/libdl/libdl.mips64.map index 2fe2c7b94..bde6cab38 100644 --- a/libdl/libdl.mips64.map +++ b/libdl/libdl.mips64.map @@ -35,6 +35,7 @@ LIBC_N { LIBC_OMR1 { # future global: + __cfi_shadow_size; # future __cfi_slowpath; # future __cfi_slowpath_diag; # future } LIBC_N; diff --git a/libdl/libdl.x86.map b/libdl/libdl.x86.map index 2fe2c7b94..bde6cab38 100644 --- a/libdl/libdl.x86.map +++ b/libdl/libdl.x86.map @@ -35,6 +35,7 @@ LIBC_N { LIBC_OMR1 { # future global: + __cfi_shadow_size; # future __cfi_slowpath; # future __cfi_slowpath_diag; # future } LIBC_N; diff --git a/libdl/libdl.x86_64.map b/libdl/libdl.x86_64.map index 2fe2c7b94..bde6cab38 100644 --- a/libdl/libdl.x86_64.map +++ b/libdl/libdl.x86_64.map @@ -35,6 +35,7 @@ LIBC_N { LIBC_OMR1 { # future global: + __cfi_shadow_size; # future __cfi_slowpath; # future __cfi_slowpath_diag; # future } LIBC_N; diff --git a/libdl/libdl_cfi.cpp b/libdl/libdl_cfi.cpp index 8458564a8..483364fcf 100644 --- a/libdl/libdl_cfi.cpp +++ b/libdl/libdl_cfi.cpp @@ -38,6 +38,11 @@ extern "C" uintptr_t* __cfi_init(uintptr_t shadow_base) { return &shadow_base_storage.v; } +// Returns the size of the CFI shadow mapping, or 0 if CFI is not (yet) used in this process. +extern "C" size_t __cfi_shadow_size() { + return shadow_base_storage.v != 0 ? CFIShadow::kShadowSize : 0; +} + static uint16_t shadow_load(void* p) { uintptr_t addr = reinterpret_cast(p); uintptr_t ofs = CFIShadow::MemToShadowOffset(addr); -- cgit v1.2.3