diff options
author | Ian Rogers <irogers@google.com> | 2014-01-29 15:35:17 -0800 |
---|---|---|
committer | Ian Rogers <irogers@google.com> | 2014-01-29 15:35:17 -0800 |
commit | f8852d0494a260c583795a96a2a06c49b86a9b10 (patch) | |
tree | f22129d5cc0ede4c1c70db623b3d553a0e434961 | |
parent | 4cc3c4d3f4b6625cccbc83b4bd014f8129b103a4 (diff) | |
download | rs-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.cpp | 5 | ||||
-rw-r--r-- | cpu_ref/linkloader/include/impl/ELFObject.hxx | 38 | ||||
-rw-r--r-- | rsContext.cpp | 4 | ||||
-rw-r--r-- | rsFileA3D.cpp | 4 | ||||
-rw-r--r-- | rsFont.cpp | 4 | ||||
-rw-r--r-- | rsProgram.cpp | 12 | ||||
-rw-r--r-- | rsProgram.h | 2 | ||||
-rw-r--r-- | rsProgramFragment.cpp | 13 | ||||
-rw-r--r-- | rsProgramFragment.h | 2 | ||||
-rw-r--r-- | rsProgramVertex.cpp | 10 | ||||
-rw-r--r-- | rsProgramVertex.h | 2 | ||||
-rw-r--r-- | rsg.spec | 4 |
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); @@ -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); @@ -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 } |