summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Rogers <irogers@google.com>2014-01-29 15:35:17 -0800
committerIan Rogers <irogers@google.com>2014-01-29 15:35:17 -0800
commitf8852d0494a260c583795a96a2a06c49b86a9b10 (patch)
treef22129d5cc0ede4c1c70db623b3d553a0e434961
parent4cc3c4d3f4b6625cccbc83b4bd014f8129b103a4 (diff)
downloadrs-f8852d0494a260c583795a96a2a06c49b86a9b10.tar.gz
Work-around 64bit build issues.
Log errors and abort as a temporary work-around for 64bit support. Change-Id: I7f6b483d671189bd12ae0ef79515fcdd871eba17
-rw-r--r--cpu_ref/linkloader/android/librsloader.cpp5
-rw-r--r--cpu_ref/linkloader/include/impl/ELFObject.hxx38
-rw-r--r--rsContext.cpp4
-rw-r--r--rsFileA3D.cpp4
-rw-r--r--rsFont.cpp4
-rw-r--r--rsProgram.cpp12
-rw-r--r--rsProgram.h2
-rw-r--r--rsProgramFragment.cpp13
-rw-r--r--rsProgramFragment.h2
-rw-r--r--rsProgramVertex.cpp10
-rw-r--r--rsProgramVertex.h2
-rw-r--r--rsg.spec4
12 files changed, 75 insertions, 25 deletions
diff --git a/cpu_ref/linkloader/android/librsloader.cpp b/cpu_ref/linkloader/android/librsloader.cpp
index 200006f9..83574705 100644
--- a/cpu_ref/linkloader/android/librsloader.cpp
+++ b/cpu_ref/linkloader/android/librsloader.cpp
@@ -91,7 +91,12 @@ extern "C" void rsloaderUpdateSectionHeaders(RSExecRef object_,
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 ca478200..0a300977 100644
--- a/cpu_ref/linkloader/include/impl/ELFObject.hxx
+++ b/cpu_ref/linkloader/include/impl/ELFObject.hxx
@@ -381,7 +381,12 @@ relocateX86_64(void *(*find_sym)(void *context, char const *name),
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 @@ relocateX86_32(void *(*find_sym)(void *context, char const *name),
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 @@ relocateMIPS(void *(*find_sym)(void *context, char const *name),
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 @@ relocateMIPS(void *(*find_sym)(void *context, char const *name),
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 @@ relocateMIPS(void *(*find_sym)(void *context, char const *name),
} 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 @@ relocateMIPS(void *(*find_sym)(void *context, char const *name),
}
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 @@ relocateMIPS(void *(*find_sym)(void *context, char const *name),
} 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 01debb29..3c017d76 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 @@ void Context::timerPrint() {
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 3b963fe5..a589033d 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 @@ bool FileA3D::load(FILE *f) {
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 d302182a..8feef2d3 100644
--- a/rsFont.cpp
+++ b/rsFont.cpp
@@ -515,9 +515,9 @@ void FontState::initRenderState() {
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 806d1de0..d5cb3442 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::initMemberVars() {
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 be5631f0..53f1207c 100644
--- a/rsProgram.h
+++ b/rsProgram.h
@@ -59,7 +59,7 @@ public:
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 877b8bdb..360d3ab3 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 @@ void ProgramFragment::setup(Context *rsc, ProgramFragmentState *state) {
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 @@ void ProgramFragmentState::init(Context *rsc) {
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 @@ RsProgramFragment rsi_ProgramFragmentCreate(Context *rsc, const char * shaderTex
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 d5802524..e7456b91 100644
--- a/rsProgramFragment.h
+++ b/rsProgramFragment.h
@@ -29,7 +29,7 @@ class ProgramFragment : public Program {
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 549dcaec..9c0f7fbe 100644
--- a/rsProgramVertex.cpp
+++ b/rsProgramVertex.cpp
@@ -25,7 +25,7 @@ using namespace android::renderscript;
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 @@ void ProgramVertexState::init(Context *rsc) {
" 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 @@ namespace renderscript {
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 105d065e..9070b9a7 100644
--- a/rsProgramVertex.h
+++ b/rsProgramVertex.h
@@ -29,7 +29,7 @@ class ProgramVertex : public Program {
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 8ac73e8c..a80a31cb 100644
--- a/rsg.spec
+++ b/rsg.spec
@@ -42,7 +42,7 @@ ProgramFragmentCreate {
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 @@ ProgramVertexCreate {
direct
param const char * shaderText
param const char ** textureNames
- param const uint32_t * params
+ param const uintptr_t * params
ret RsProgramVertex
}