diff options
Diffstat (limited to 'cpu_ref/rsCpuExecutable.cpp')
| -rw-r--r-- | cpu_ref/rsCpuExecutable.cpp | 28 |
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 |
