summaryrefslogtreecommitdiff
path: root/cpu_ref/rsCpuExecutable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpu_ref/rsCpuExecutable.cpp')
-rw-r--r--cpu_ref/rsCpuExecutable.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/cpu_ref/rsCpuExecutable.cpp b/cpu_ref/rsCpuExecutable.cpp
index e7831085..f59b41a7 100644
--- a/cpu_ref/rsCpuExecutable.cpp
+++ b/cpu_ref/rsCpuExecutable.cpp
@@ -311,6 +311,11 @@ ScriptExecutable* ScriptExecutable::createFromSharedObject(
uint32_t checksum = 0;
const char *rsInfo = (const char *) dlsym(sharedObj, ".rs.info");
+ int numEntries = 0;
+ const int *rsGlobalEntries = (const int *) dlsym(sharedObj, ".rs.global_entries");
+ const char **rsGlobalNames = (const char **) dlsym(sharedObj, ".rs.global_names");
+ const void **rsGlobalAddresses = (const void **) dlsym(sharedObj, ".rs.global_addresses");
+ const size_t *rsGlobalSizes = (const size_t *) dlsym(sharedObj, ".rs.global_sizes");
if (strgets(line, MAXLINE, &rsInfo) == nullptr) {
return nullptr;
@@ -545,11 +550,25 @@ ScriptExecutable* ScriptExecutable::createFromSharedObject(
#endif // RS_COMPATIBILITY_LIB
+ // Read in information about mutable global variables provided by bcc's
+ // RSGlobalInfoPass
+ if (rsGlobalEntries) {
+ numEntries = *rsGlobalEntries;
+ if (numEntries > 0) {
+ rsAssert(rsGlobalNames);
+ rsAssert(rsGlobalAddresses);
+ rsAssert(rsGlobalSizes);
+ }
+ } else {
+ ALOGD("Missing .rs.global_entries from shared object");
+ }
+
return new ScriptExecutable(
RSContext, fieldAddress, fieldIsObject, fieldName, varCount,
invokeFunctions, funcCount,
forEachFunctions, forEachSignatures, forEachCount,
pragmaKeys, pragmaValues, pragmaCount,
+ rsGlobalNames, rsGlobalAddresses, rsGlobalSizes, numEntries,
isThreadable, checksum);
error:
@@ -590,5 +609,14 @@ void* ScriptExecutable::getFieldAddress(const char* name) const {
return nullptr;
}
+bool ScriptExecutable::dumpGlobalInfo() const {
+ ALOGE("Globals: %p %p %p", mGlobalAddresses, mGlobalSizes, mGlobalNames);
+ for (int i = 0; i < mGlobalEntries; i++) {
+ ALOGE("Global[%d]: %p %zu %s", i, mGlobalAddresses[i], mGlobalSizes[i],
+ mGlobalNames[i]);
+ }
+ return true;
+}
+
} // namespace renderscript
} // namespace android