aboutsummaryrefslogtreecommitdiffstats
path: root/libdl
diff options
context:
space:
mode:
authorEvgenii Stepanov <eugenis@google.com>2017-08-02 16:34:44 -0700
committerEvgenii Stepanov <eugenis@google.com>2017-08-03 14:04:15 -0700
commit97c16f8dca0694abfcdda34f8e01f5e1e989120f (patch)
treeba62a11fcce7608e521e517ffd09f2a12b09c00c /libdl
parentbb36e9fae1f30c5673138c7f1a3ed6ac9b477f76 (diff)
downloadandroid_bionic-97c16f8dca0694abfcdda34f8e01f5e1e989120f.tar.gz
android_bionic-97c16f8dca0694abfcdda34f8e01f5e1e989120f.tar.bz2
android_bionic-97c16f8dca0694abfcdda34f8e01f5e1e989120f.zip
[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
Diffstat (limited to 'libdl')
-rw-r--r--libdl/libdl.arm.map1
-rw-r--r--libdl/libdl.arm64.map1
-rw-r--r--libdl/libdl.map.txt1
-rw-r--r--libdl/libdl.mips.map1
-rw-r--r--libdl/libdl.mips64.map1
-rw-r--r--libdl/libdl.x86.map1
-rw-r--r--libdl/libdl.x86_64.map1
-rw-r--r--libdl/libdl_cfi.cpp5
8 files changed, 12 insertions, 0 deletions
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<uintptr_t>(p);
uintptr_t ofs = CFIShadow::MemToShadowOffset(addr);