Work-around 64bit build issues.
Log errors and abort as a temporary work-around for 64bit support.
Change-Id: I7f6b483d671189bd12ae0ef79515fcdd871eba17
diff --git a/cpu_ref/linkloader/android/librsloader.cpp b/cpu_ref/linkloader/android/librsloader.cpp
index 200006f..8357470 100644
--- a/cpu_ref/linkloader/android/librsloader.cpp
+++ b/cpu_ref/linkloader/android/librsloader.cpp
@@ -91,7 +91,12 @@
static_cast<ELFSectionBits<32>*>(object->getSectionByIndex(i));
if (bits) {
const unsigned char* addr = bits->getBuffer();
+#ifdef __LP64__
+ ALOGE("Code temporarily disabled for 64bit build");
+ abort();
+#else
shtab[i].sh_addr = reinterpret_cast<llvm::ELF::Elf32_Addr>(addr);
+#endif
}
}
}
diff --git a/cpu_ref/linkloader/include/impl/ELFObject.hxx b/cpu_ref/linkloader/include/impl/ELFObject.hxx
index ca47820..0a30097 100644
--- a/cpu_ref/linkloader/include/impl/ELFObject.hxx
+++ b/cpu_ref/linkloader/include/impl/ELFObject.hxx
@@ -381,7 +381,12 @@
if (!S) {
missingSymbols = true;
}
+#ifdef __LP64__
+ llvm::errs() << "Code temporarily disabled for 64bit build";
+ abort();
+#else
sym->setAddress((void *)S);
+#endif
}
switch (rel->getType()) {
@@ -435,7 +440,12 @@
if (!S) {
missingSymbols = true;
}
+#ifdef __LP64__
+ llvm::errs() << "Code temporarily disabled for 64bit build";
+ abort();
+#else
sym->setAddress((void *)S);
+#endif
}
switch (rel->getType()) {
@@ -485,7 +495,12 @@
if (!S) {
missingSymbols = true;
}
+#ifdef __LP64__
+ llvm::errs() << "Code temporarily disabled for 64bit build";
+ abort();
+#else
sym->setAddress((void *)S);
+#endif
}
switch (rel->getType()) {
@@ -523,7 +538,13 @@
A += S;
*inst |= ((A >> 2) & 0x3FFFFFF);
if (((P + 4) >> 28) != (A >> 28)) { // far local call
+#ifdef __LP64__
+ llvm::errs() << "Code temporarily disabled for 64bit build";
+ abort();
+ void* stub = NULL;
+#else
void *stub = text->getStubLayout()->allocateStub((void *)A);
+#endif
rsl_assert(stub && "cannot allocate stub.");
sym->setAddress(stub);
S = (int32_t)(intptr_t)stub;
@@ -534,7 +555,13 @@
} else { // shared-library call
A = (A & 0x3FFFFFF) << 2;
rsl_assert(A == 0 && "R_MIPS_26 addend is not zero.");
+#ifdef __LP64__
+ llvm::errs() << "Code temporarily disabled for 64bit build";
+ abort();
+ void* stub = NULL;
+#else
void *stub = text->getStubLayout()->allocateStub((void *)S);
+#endif
rsl_assert(stub && "cannot allocate stub.");
sym->setAddress(stub);
S = (int32_t)(intptr_t)stub;
@@ -560,7 +587,12 @@
}
if (strcmp (sym->getName(), "_gp_disp") == 0) {
S = (int)(intptr_t)got_address() + GP_OFFSET - (int)P;
+#ifdef __LP64__
+ llvm::errs() << "Code temporarily disabled for 64bit build";
+ abort();
+#else
sym->setAddress((void *)S);
+#endif
}
*inst |= (((S + A + (int)0x8000) >> 16) & 0xFFFF);
break;
@@ -601,8 +633,14 @@
} else { // R_MIPS_CALL16
rsl_assert(A == 0 && "R_MIPS_CALL16 addend is not 0.");
}
+#ifdef __LP64__
+ llvm::errs() << "Code temporarily disabled for 64bit build";
+ abort();
+ int got_index = 0;
+#else
int got_index = search_got((int)rel->getSymTabIndex(), (void *)(S + A),
sym->getBindingAttribute());
+#endif
int got_offset = (got_index << 2) - GP_OFFSET;
*inst |= (got_offset & 0xFFFF);
}
diff --git a/rsContext.cpp b/rsContext.cpp
index 01debb2..3c017d7 100644
--- a/rsContext.cpp
+++ b/rsContext.cpp
@@ -32,6 +32,7 @@
#include <sys/syscall.h>
#include <string.h>
#include <dlfcn.h>
+#include <inttypes.h>
#include <unistd.h>
#if !defined(RS_SERVER) && !defined(RS_COMPATIBILITY_LIB) && \
@@ -182,7 +183,8 @@
if (props.mLogTimes) {
- ALOGV("RS: Frame (%i), Script %2.1f%% (%i), Swap %2.1f%% (%i), Idle %2.1f%% (%lli), Internal %2.1f%% (%lli), Avg fps: %u",
+ ALOGV("RS: Frame (%i), Script %2.1f%% (%i), Swap %2.1f%% (%i), Idle %2.1f%% (%" PRIi64 "), "
+ "Internal %2.1f%% (%" PRIi64 "), Avg fps: %u",
mTimeMSLastFrame,
100.0 * mTimers[RS_TIMER_SCRIPT] / total, mTimeMSLastScript,
100.0 * mTimers[RS_TIMER_CLEAR_SWAP] / total, mTimeMSLastSwap,
diff --git a/rsFileA3D.cpp b/rsFileA3D.cpp
index 3b963fe..a589033 100644
--- a/rsFileA3D.cpp
+++ b/rsFileA3D.cpp
@@ -26,6 +26,8 @@
#include <androidfw/Asset.h>
#endif
+#include <inttypes.h>
+
using namespace android;
using namespace android::renderscript;
@@ -192,7 +194,7 @@
return false;
}
- ALOGV("file open size = %lli", mDataSize);
+ ALOGV("file open size = %" PRIi64, mDataSize);
// We should know enough to read the file in at this point.
mAlloc = malloc(mDataSize);
diff --git a/rsFont.cpp b/rsFont.cpp
index d302182..8feef2d 100644
--- a/rsFont.cpp
+++ b/rsFont.cpp
@@ -515,9 +515,9 @@
ObjectBaseRef<Type> inputType = Type::getTypeRef(mRSC, constInput.get(), 1, 0, 0, false, false, 0);
- uint32_t tmp[4];
+ uintptr_t tmp[4];
tmp[0] = RS_PROGRAM_PARAM_CONSTANT;
- tmp[1] = (uint32_t)inputType.get();
+ tmp[1] = (uintptr_t)inputType.get();
tmp[2] = RS_PROGRAM_PARAM_TEXTURE_TYPE;
tmp[3] = RS_TEXTURE_2D;
diff --git a/rsProgram.cpp b/rsProgram.cpp
index 806d1de..d5cb344 100644
--- a/rsProgram.cpp
+++ b/rsProgram.cpp
@@ -17,11 +17,13 @@
#include "rsContext.h"
#include "rsProgram.h"
+#include <inttypes.h>
+
using namespace android;
using namespace android::renderscript;
Program::Program(Context *rsc, const char * shaderText, size_t shaderLength,
- const uint32_t * params, size_t paramLength)
+ const uintptr_t * params, size_t paramLength)
: ProgramBase(rsc) {
initMemberVars();
@@ -150,14 +152,14 @@
void Program::bindAllocation(Context *rsc, Allocation *alloc, uint32_t slot) {
if (alloc != NULL) {
if (slot >= mHal.state.constantsCount) {
- ALOGE("Attempt to bind alloc at slot %u, on shader id %u, but const count is %u",
- slot, (uint32_t)this, mHal.state.constantsCount);
+ ALOGE("Attempt to bind alloc at slot %u, on shader id %" PRIuPTR ", but const count is %u",
+ slot, (uintptr_t)this, mHal.state.constantsCount);
rsc->setError(RS_ERROR_BAD_SHADER, "Cannot bind allocation");
return;
}
if (alloc->getType() != mConstantTypes[slot].get()) {
- ALOGE("Attempt to bind alloc at slot %u, on shader id %u, but types mismatch",
- slot, (uint32_t)this);
+ ALOGE("Attempt to bind alloc at slot %u, on shader id %" PRIuPTR ", but types mismatch",
+ slot, (uintptr_t)this);
rsc->setError(RS_ERROR_BAD_SHADER, "Cannot bind allocation");
return;
}
diff --git a/rsProgram.h b/rsProgram.h
index be5631f..53f1207 100644
--- a/rsProgram.h
+++ b/rsProgram.h
@@ -59,7 +59,7 @@
Hal mHal;
Program(Context *, const char * shaderText, size_t shaderLength,
- const uint32_t * params, size_t paramLength);
+ const uintptr_t * params, size_t paramLength);
virtual ~Program();
virtual bool freeChildren();
diff --git a/rsProgramFragment.cpp b/rsProgramFragment.cpp
index 877b8bd..360d3ab 100644
--- a/rsProgramFragment.cpp
+++ b/rsProgramFragment.cpp
@@ -17,13 +17,14 @@
#include "rsContext.h"
#include "rsProgramFragment.h"
+#include <inttypes.h>
+
using namespace android;
using namespace android::renderscript;
ProgramFragment::ProgramFragment(Context *rsc, const char * shaderText, size_t shaderLength,
const char** textureNames, size_t textureNamesCount, const size_t *textureNamesLength,
-
- const uint32_t * params, size_t paramLength)
+ const uintptr_t * params, size_t paramLength)
: Program(rsc, shaderText, shaderLength, params, paramLength) {
mConstantColor[0] = 1.f;
mConstantColor[1] = 1.f;
@@ -67,7 +68,7 @@
for (uint32_t ct=0; ct < mHal.state.texturesCount; ct++) {
if (!mHal.state.textures[ct]) {
- ALOGE("No texture bound for shader id %u, texture unit %u", (uint)this, ct);
+ ALOGE("No texture bound for shader id %" PRIuPTR ", texture unit %u", (uintptr_t)this, ct);
rsc->setError(RS_ERROR_BAD_SHADER, "No texture bound");
continue;
}
@@ -110,9 +111,9 @@
ObjectBaseRef<Type> inputType = Type::getTypeRef(rsc, constInput.get(), 1, 0, 0, false, false, 0);
- uint32_t tmp[2];
+ uintptr_t tmp[2];
tmp[0] = RS_PROGRAM_PARAM_CONSTANT;
- tmp[1] = (uint32_t)inputType.get();
+ tmp[1] = (uintptr_t)inputType.get();
Allocation *constAlloc = Allocation::createAllocation(rsc, inputType.get(),
RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_GRAPHICS_CONSTANTS);
@@ -137,7 +138,7 @@
const char** textureNames,
size_t textureNamesCount,
const size_t *textureNamesLength,
- const uint32_t * params, size_t paramLength) {
+ const uintptr_t * params, size_t paramLength) {
ProgramFragment *pf = new ProgramFragment(rsc, shaderText, shaderLength,
textureNames, textureNamesCount, textureNamesLength,
params, paramLength);
diff --git a/rsProgramFragment.h b/rsProgramFragment.h
index d580252..e7456b9 100644
--- a/rsProgramFragment.h
+++ b/rsProgramFragment.h
@@ -29,7 +29,7 @@
public:
ProgramFragment(Context *rsc, const char * shaderText, size_t shaderLength,
const char** textureNames, size_t textureNamesCount, const size_t *textureNamesLength,
- const uint32_t * params, size_t paramLength);
+ const uintptr_t * params, size_t paramLength);
virtual ~ProgramFragment();
virtual void setup(Context *, ProgramFragmentState *);
diff --git a/rsProgramVertex.cpp b/rsProgramVertex.cpp
index 549dcae..9c0f7fb 100644
--- a/rsProgramVertex.cpp
+++ b/rsProgramVertex.cpp
@@ -25,7 +25,7 @@
ProgramVertex::ProgramVertex(Context *rsc, const char * shaderText, size_t shaderLength,
const char** textureNames, size_t textureNamesCount, const size_t *textureNamesLength,
- const uint32_t * params, size_t paramLength)
+ const uintptr_t * params, size_t paramLength)
: Program(rsc, shaderText, shaderLength, params, paramLength) {
mRSC->mHal.funcs.vertex.init(mRSC, this, mUserShader, mUserShaderLen,
textureNames, textureNamesCount, textureNamesLength);
@@ -196,11 +196,11 @@
" varTex0 = ATTRIB_texture0;\n"
"}\n";
- uint32_t tmp[4];
+ uintptr_t tmp[4];
tmp[0] = RS_PROGRAM_PARAM_CONSTANT;
- tmp[1] = (uint32_t)inputType.get();
+ tmp[1] = (uintptr_t)inputType.get();
tmp[2] = RS_PROGRAM_PARAM_INPUT;
- tmp[3] = (uint32_t)attrElem.get();
+ tmp[3] = (uintptr_t)attrElem.get();
ProgramVertex *pv = new ProgramVertex(rsc, shaderString, strlen(shaderString),
NULL, 0, NULL, tmp, 4);
@@ -244,7 +244,7 @@
RsProgramVertex rsi_ProgramVertexCreate(Context *rsc, const char * shaderText, size_t shaderLength,
const char** textureNames, size_t textureNamesCount,
const size_t *textureNamesLength,
- const uint32_t * params, size_t paramLength) {
+ const uintptr_t * params, size_t paramLength) {
ProgramVertex *pv = new ProgramVertex(rsc, shaderText, shaderLength,
textureNames, textureNamesCount, textureNamesLength,
params, paramLength);
diff --git a/rsProgramVertex.h b/rsProgramVertex.h
index 105d065..9070b9a 100644
--- a/rsProgramVertex.h
+++ b/rsProgramVertex.h
@@ -29,7 +29,7 @@
public:
ProgramVertex(Context *,const char * shaderText, size_t shaderLength,
const char** textureNames, size_t textureNamesCount, const size_t *textureNamesLength,
- const uint32_t * params, size_t paramLength);
+ const uintptr_t * params, size_t paramLength);
virtual ~ProgramVertex();
virtual void setup(Context *rsc, ProgramVertexState *state);
diff --git a/rsg.spec b/rsg.spec
index 8ac73e8..a80a31c 100644
--- a/rsg.spec
+++ b/rsg.spec
@@ -42,7 +42,7 @@
direct
param const char * shaderText
param const char ** textureNames
- param const uint32_t * params
+ param const uintptr_t * params
ret RsProgramFragment
}
@@ -50,7 +50,7 @@
direct
param const char * shaderText
param const char ** textureNames
- param const uint32_t * params
+ param const uintptr_t * params
ret RsProgramVertex
}