Mark rs functions extern C.
Certain functions like rsaFileA3DCreateFromFile, rsaFileA3DCreateFromAsset
amongst others were not marked extern "C". As a result their mangled
names were added to libRS.map. These are also dlsymed with their
unmangled names in rsDispatch.cpp (which would fail). Mark these extern
"C" to enable dlsym without mangled names.
Test: readelf -a --wide $OUT/obj/SHARED_LIBRARIES/libRS_intermediates/LINKED/libRS.so | less
shows no mangled symbols which are defined in its .dynsym table.
Test: make -j64 from ToT.
Test: sanity - booted up sailfish device.
Bug: 66971285
Change-Id: If514910ff037e634844ec82b7947dcc5de231bb5
diff --git a/libRS.map b/libRS.map
index c31e5a6..225b2bb 100644
--- a/libRS.map
+++ b/libRS.map
@@ -105,17 +105,17 @@
rsScriptSetVarVE;
rsTypeCreate;
rsTypeCreate2;
- _Z24rsaFileA3DCreateFromFilePvPKc;
- _Z25rsaFileA3DCreateFromAssetPvS_;
- _Z25rsaFileA3DGetEntryByIndexPvjS_;
- _Z25rsaFileA3DGetIndexEntriesPvP16RsFileIndexEntryjS_;
- _Z26rsaFileA3DCreateFromMemoryPvPKvj;
- _Z28rsaFileA3DGetNumIndexEntriesPvPiS_;
- _Z17rsaMeshGetIndicesPvS_PS_Pjj;
- _Z18rsaMeshGetVerticesPvS_PS_j;
- _Z20rsaMeshGetIndexCountPvS_Pi;
- _Z27rsaMeshGetVertexBufferCountPvS_Pi;
- _Z17rsContextCreateGLPvjj15RsSurfaceConfigj;
+ rsaFileA3DCreateFromFile;
+ rsaFileA3DCreateFromAsset;
+ rsaFileA3DGetEntryByIndex;
+ rsaFileA3DGetIndexEntries;
+ rsaFileA3DCreateFromMemory;
+ rsaFileA3DGetNumIndexEntries;
+ rsaMeshGetIndices;
+ rsaMeshGetVertices;
+ rsaMeshGetIndexCount;
+ rsaMeshGetVertexBufferCount;
+ rsContextCreateGL;
local:
*;
diff --git a/rs.h b/rs.h
index 603085f..edf98ef 100644
--- a/rs.h
+++ b/rs.h
@@ -22,25 +22,27 @@
#include "rsInternalDefines.h"
-// Legacy graphics functions
-// Not extern C because not used from C++ API
-RsObjectBase rsaFileA3DGetEntryByIndex(RsContext, uint32_t idx, RsFile);
-RsFile rsaFileA3DCreateFromMemory(RsContext, const void *data, uint32_t len);
-RsFile rsaFileA3DCreateFromAsset(RsContext, void *asset);
-RsFile rsaFileA3DCreateFromFile(RsContext, const char *path);
-void rsaFileA3DGetNumIndexEntries(RsContext, int32_t *numEntries, RsFile);
-void rsaFileA3DGetIndexEntries(RsContext, RsFileIndexEntry *fileEntries,
- uint32_t numEntries, RsFile);
-// Mesh update functions
-void rsaMeshGetVertexBufferCount(RsContext, RsMesh, int32_t *vtxCount);
-void rsaMeshGetIndexCount(RsContext, RsMesh, int32_t *idxCount);
-void rsaMeshGetVertices(RsContext, RsMesh, RsAllocation *vtxData, uint32_t vtxDataCount);
-void rsaMeshGetIndices(RsContext, RsMesh, RsAllocation *va,
- uint32_t *primType, uint32_t idxDataCount);
-RsContext rsContextCreateGL(RsDevice dev, uint32_t version, uint32_t sdkVersion,
- RsSurfaceConfig sc, uint32_t dpi);
-
extern "C" {
+ // Legacy graphics functions
+ RsObjectBase rsaFileA3DGetEntryByIndex(RsContext, uint32_t idx, RsFile);
+ RsFile rsaFileA3DCreateFromMemory(RsContext, const void *data,
+ uint32_t len);
+ RsFile rsaFileA3DCreateFromAsset(RsContext, void *asset);
+ RsFile rsaFileA3DCreateFromFile(RsContext, const char *path);
+ void rsaFileA3DGetNumIndexEntries(RsContext, int32_t *numEntries, RsFile);
+ void rsaFileA3DGetIndexEntries(RsContext, RsFileIndexEntry *fileEntries,
+ uint32_t numEntries, RsFile);
+ // Mesh update functions
+ void rsaMeshGetVertexBufferCount(RsContext, RsMesh, int32_t *vtxCount);
+ void rsaMeshGetIndexCount(RsContext, RsMesh, int32_t *idxCount);
+ void rsaMeshGetVertices(RsContext, RsMesh, RsAllocation *vtxData,
+ uint32_t vtxDataCount);
+ void rsaMeshGetIndices(RsContext, RsMesh, RsAllocation *va,
+ uint32_t *primType, uint32_t idxDataCount);
+ RsContext rsContextCreateGL(RsDevice dev, uint32_t version,
+ uint32_t sdkVersion, RsSurfaceConfig sc,
+ uint32_t dpi);
+
void rsaGetName(RsContext, void * obj, const char **name);
// Allocation update
const void* rsaAllocationGetType(RsContext con, RsAllocation va);
diff --git a/rsApiStubs.cpp b/rsApiStubs.cpp
index 1737088..9b15fbf 100644
--- a/rsApiStubs.cpp
+++ b/rsApiStubs.cpp
@@ -717,8 +717,8 @@
// Graphics
/* The following API are deprecated. */
-RsContext rsContextCreateGL(RsDevice vdev, uint32_t version, uint32_t sdkVersion,
- RsSurfaceConfig sc, uint32_t dpi)
+extern "C" RsContext rsContextCreateGL(RsDevice vdev, uint32_t version, uint32_t sdkVersion,
+ RsSurfaceConfig sc, uint32_t dpi)
{
if (!globalObjAlive) {
ALOGE("rsContextCreateGL is not allowed during process teardown.");
@@ -860,52 +860,52 @@
RS_DISPATCH(ctxWrapper, ProgramBindSampler, pf, slot, s);
}
-RsObjectBase rsaFileA3DGetEntryByIndex(RsContext ctxWrapper, uint32_t index, RsFile file)
+extern "C" RsObjectBase rsaFileA3DGetEntryByIndex(RsContext ctxWrapper, uint32_t index, RsFile file)
{
return RS_DISPATCH(ctxWrapper, FileA3DGetEntryByIndex, index, file);
}
-RsFile rsaFileA3DCreateFromMemory(RsContext ctxWrapper, const void *data, uint32_t len)
+extern "C" RsFile rsaFileA3DCreateFromMemory(RsContext ctxWrapper, const void *data, uint32_t len)
{
return RS_DISPATCH(ctxWrapper, FileA3DCreateFromMemory, data, len);
}
-RsFile rsaFileA3DCreateFromAsset(RsContext ctxWrapper, void *_asset)
+extern "C" RsFile rsaFileA3DCreateFromAsset(RsContext ctxWrapper, void *_asset)
{
return RS_DISPATCH(ctxWrapper, FileA3DCreateFromAsset, _asset);
}
-RsFile rsaFileA3DCreateFromFile(RsContext ctxWrapper, const char *path)
+extern "C" RsFile rsaFileA3DCreateFromFile(RsContext ctxWrapper, const char *path)
{
return RS_DISPATCH(ctxWrapper, FileA3DCreateFromFile, path);
}
-void rsaFileA3DGetNumIndexEntries(RsContext ctxWrapper, int32_t *numEntries, RsFile file)
+extern "C" void rsaFileA3DGetNumIndexEntries(RsContext ctxWrapper, int32_t *numEntries, RsFile file)
{
RS_DISPATCH(ctxWrapper, FileA3DGetNumIndexEntries, numEntries, file);
}
-void rsaFileA3DGetIndexEntries(RsContext ctxWrapper, RsFileIndexEntry *fileEntries, uint32_t numEntries, RsFile file)
+extern "C" void rsaFileA3DGetIndexEntries(RsContext ctxWrapper, RsFileIndexEntry *fileEntries, uint32_t numEntries, RsFile file)
{
RS_DISPATCH(ctxWrapper, FileA3DGetIndexEntries, fileEntries, numEntries, file);
}
-void rsaMeshGetVertexBufferCount(RsContext ctxWrapper, RsMesh mv, int32_t *numVtx)
+extern "C" void rsaMeshGetVertexBufferCount(RsContext ctxWrapper, RsMesh mv, int32_t *numVtx)
{
RS_DISPATCH(ctxWrapper, MeshGetVertexBufferCount, mv, numVtx);
}
-void rsaMeshGetIndexCount(RsContext ctxWrapper, RsMesh mv, int32_t *numIdx)
+extern "C" void rsaMeshGetIndexCount(RsContext ctxWrapper, RsMesh mv, int32_t *numIdx)
{
RS_DISPATCH(ctxWrapper, MeshGetIndexCount, mv, numIdx);
}
-void rsaMeshGetVertices(RsContext ctxWrapper, RsMesh mv, RsAllocation *vtxData, uint32_t vtxDataCount)
+extern "C" void rsaMeshGetVertices(RsContext ctxWrapper, RsMesh mv, RsAllocation *vtxData, uint32_t vtxDataCount)
{
RS_DISPATCH(ctxWrapper, MeshGetVertices, mv, vtxData, vtxDataCount);
}
-void rsaMeshGetIndices(RsContext ctxWrapper, RsMesh mv, RsAllocation *va, uint32_t *primType, uint32_t idxDataCount)
+extern "C" void rsaMeshGetIndices(RsContext ctxWrapper, RsMesh mv, RsAllocation *va, uint32_t *primType, uint32_t idxDataCount)
{
RS_DISPATCH(ctxWrapper, MeshGetIndices, mv, va, primType, idxDataCount);
}
diff --git a/rsApiStubs.h b/rsApiStubs.h
index 687fe55..6dd1b3f 100644
--- a/rsApiStubs.h
+++ b/rsApiStubs.h
@@ -123,7 +123,7 @@
extern "C" void rsScriptSetVarVE (RsContext rsc, RsScript s, uint32_t slot, const void * data, size_t data_length, RsElement e, const uint32_t * dims, size_t dims_length);
// Graphics
-RsContext rsContextCreateGL(RsDevice vdev, uint32_t version, uint32_t sdkVersion, RsSurfaceConfig sc, uint32_t dpi);
+extern "C" RsContext rsContextCreateGL(RsDevice vdev, uint32_t version, uint32_t sdkVersion, RsSurfaceConfig sc, uint32_t dpi);
extern "C" void rsContextSetSurface (RsContext rsc, uint32_t width, uint32_t height, RsNativeWindow sur);
extern "C" void rsContextPause (RsContext rsc);
extern "C" void rsContextResume (RsContext rsc);
@@ -145,15 +145,15 @@
extern "C" void rsProgramBindTexture (RsContext rsc, RsProgramFragment pf, uint32_t slot, RsAllocation a);
extern "C" void rsProgramBindSampler (RsContext rsc, RsProgramFragment pf, uint32_t slot, RsSampler s);
-RsObjectBase rsaFileA3DGetEntryByIndex(RsContext con, uint32_t index, RsFile file);
-RsFile rsaFileA3DCreateFromMemory(RsContext con, const void *data, uint32_t len);
-RsFile rsaFileA3DCreateFromAsset(RsContext con, void *_asset);
-RsFile rsaFileA3DCreateFromFile(RsContext con, const char *path);
-void rsaFileA3DGetNumIndexEntries(RsContext con, int32_t *numEntries, RsFile file);
-void rsaFileA3DGetIndexEntries(RsContext con, RsFileIndexEntry *fileEntries, uint32_t numEntries, RsFile file);
-void rsaMeshGetVertexBufferCount(RsContext con, RsMesh mv, int32_t *numVtx);
-void rsaMeshGetIndexCount(RsContext con, RsMesh mv, int32_t *numIdx);
-void rsaMeshGetVertices(RsContext con, RsMesh mv, RsAllocation *vtxData, uint32_t vtxDataCount);
-void rsaMeshGetIndices(RsContext con, RsMesh mv, RsAllocation *va, uint32_t *primType, uint32_t idxDataCount);
+extern "C" RsObjectBase rsaFileA3DGetEntryByIndex(RsContext con, uint32_t index, RsFile file);
+extern "C" RsFile rsaFileA3DCreateFromMemory(RsContext con, const void *data, uint32_t len);
+extern "C" RsFile rsaFileA3DCreateFromAsset(RsContext con, void *_asset);
+extern "C" RsFile rsaFileA3DCreateFromFile(RsContext con, const char *path);
+extern "C" void rsaFileA3DGetNumIndexEntries(RsContext con, int32_t *numEntries, RsFile file);
+extern "C" void rsaFileA3DGetIndexEntries(RsContext con, RsFileIndexEntry *fileEntries, uint32_t numEntries, RsFile file);
+extern "C" void rsaMeshGetVertexBufferCount(RsContext con, RsMesh mv, int32_t *numVtx);
+extern "C" void rsaMeshGetIndexCount(RsContext con, RsMesh mv, int32_t *numIdx);
+extern "C" void rsaMeshGetVertices(RsContext con, RsMesh mv, RsAllocation *vtxData, uint32_t vtxDataCount);
+extern "C" void rsaMeshGetIndices(RsContext con, RsMesh mv, RsAllocation *va, uint32_t *primType, uint32_t idxDataCount);
-#endif // ANDROID_RS_API_STUBS_H
\ No newline at end of file
+#endif // ANDROID_RS_API_STUBS_H