Reputation: 5807
I have a false positive of valgrind telling me that a conditional jump or move depends on uninitialized values.
The code is like this:
//from GenerateTexture:
glGenTextures(1, (GLuint*)&texture_list[texture_pos]);
return texture_list[texture_pos++];
// Usage in another function
if(texture == 0)
InitTexture(); // First line of function: texture = GenerateTexture();
if(texture == 0) // This is what valgrind complains about
return;
I'm running the code in an Ubuntu VM with Windows host an have some earlier warnings about the OGL library so I assume that valgrind cannot handle the VM correctly. However I do know that the texture is initialized correctly and don't want to be bothered by valgrind on every use of texture
.
How can I tell valgrind (maybe by code annotation) that this is a false positive? I know about the suppression file but then I'd need to add every function that uses texture to it, so I'm looking for a "cleaner" alternative.
Edit: As request an MCVE:
#include <GL/gl.h>
#include <SDL/SDL.h>
#include <iostream>
int main(int argc, char** argv){
SDL_Init(SDL_INIT_VIDEO);
const SDL_VideoInfo* video = SDL_GetVideoInfo( );
SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 );
SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 );
SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 );
SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 );
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
SDL_SetVideoMode( 800, 600, video->vfmt->BitsPerPixel, SDL_OPENGL );
GLuint tex;
glGenTextures(1, &tex);
if(tex) std::cout << "1337";
return 0;
}
Valgrind in VBox shows:
==2304== Conditional jump or move depends on uninitialised value(s)
==2304== at 0xD97E21C: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94EB90: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0x400B49: main (test.cpp:46)
==2304== Uninitialised value was created by a heap allocation
==2304== at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2304== by 0xD596F91: crAlloc (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD5A8688: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD59840D: crNetConnectToServer (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD59856D: crNetServerConnect (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD94C4F8: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94A07E: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94B0EC: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD2CAD09: crSPULoad (in /usr/lib/VBoxOGL.so)
==2304== by 0xD2CAEC3: crSPULoadChain (in /usr/lib/VBoxOGL.so)
==2304== by 0xD283FB6: ??? (in /usr/lib/VBoxOGL.so)
==2304== by 0xD284318: ??? (in /usr/lib/VBoxOGL.so)
==2304==
==2304== Conditional jump or move depends on uninitialised value(s)
==2304== at 0xD5939E4: crHashIdPoolAllocId (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD593AF7: crHashtableAllocRegisterKey (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD97E207: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94EB90: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0x400B49: main (test.cpp:46)
==2304== Uninitialised value was created by a heap allocation
==2304== at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2304== by 0xD596F91: crAlloc (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD5A8688: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD59840D: crNetConnectToServer (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD59856D: crNetServerConnect (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD94C4F8: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94A07E: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94B0EC: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD2CAD09: crSPULoad (in /usr/lib/VBoxOGL.so)
==2304== by 0xD2CAEC3: crSPULoadChain (in /usr/lib/VBoxOGL.so)
==2304== by 0xD283FB6: ??? (in /usr/lib/VBoxOGL.so)
==2304== by 0xD284318: ??? (in /usr/lib/VBoxOGL.so)
==2304==
==2304== Conditional jump or move depends on uninitialised value(s)
==2304== at 0xD5939FC: crHashIdPoolAllocId (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD593AF7: crHashtableAllocRegisterKey (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD97E207: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94EB90: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0x400B49: main (test.cpp:46)
==2304== Uninitialised value was created by a heap allocation
==2304== at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2304== by 0xD596F91: crAlloc (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD5A8688: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD59840D: crNetConnectToServer (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD59856D: crNetServerConnect (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD94C4F8: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94A07E: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94B0EC: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD2CAD09: crSPULoad (in /usr/lib/VBoxOGL.so)
==2304== by 0xD2CAEC3: crSPULoadChain (in /usr/lib/VBoxOGL.so)
==2304== by 0xD283FB6: ??? (in /usr/lib/VBoxOGL.so)
==2304== by 0xD284318: ??? (in /usr/lib/VBoxOGL.so)
==2304==
==2304== Conditional jump or move depends on uninitialised value(s)
==2304== at 0xD593A27: crHashIdPoolAllocId (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD593AF7: crHashtableAllocRegisterKey (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD97E207: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94EB90: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0x400B49: main (test.cpp:46)
==2304== Uninitialised value was created by a heap allocation
==2304== at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2304== by 0xD596F91: crAlloc (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD5A8688: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD59840D: crNetConnectToServer (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD59856D: crNetServerConnect (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD94C4F8: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94A07E: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94B0EC: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD2CAD09: crSPULoad (in /usr/lib/VBoxOGL.so)
==2304== by 0xD2CAEC3: crSPULoadChain (in /usr/lib/VBoxOGL.so)
==2304== by 0xD283FB6: ??? (in /usr/lib/VBoxOGL.so)
==2304== by 0xD284318: ??? (in /usr/lib/VBoxOGL.so)
==2304==
==2304== Conditional jump or move depends on uninitialised value(s)
==2304== at 0xD593A29: crHashIdPoolAllocId (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD593AF7: crHashtableAllocRegisterKey (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD97E207: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94EB90: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0x400B49: main (test.cpp:46)
==2304== Uninitialised value was created by a heap allocation
==2304== at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2304== by 0xD596F91: crAlloc (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD5A8688: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD59840D: crNetConnectToServer (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD59856D: crNetServerConnect (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD94C4F8: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94A07E: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94B0EC: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD2CAD09: crSPULoad (in /usr/lib/VBoxOGL.so)
==2304== by 0xD2CAEC3: crSPULoadChain (in /usr/lib/VBoxOGL.so)
==2304== by 0xD283FB6: ??? (in /usr/lib/VBoxOGL.so)
==2304== by 0xD284318: ??? (in /usr/lib/VBoxOGL.so)
==2304==
==2304== Conditional jump or move depends on uninitialised value(s)
==2304== at 0xD593A30: crHashIdPoolAllocId (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD593AF7: crHashtableAllocRegisterKey (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD97E207: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94EB90: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0x400B49: main (test.cpp:46)
==2304== Uninitialised value was created by a heap allocation
==2304== at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2304== by 0xD596F91: crAlloc (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD5A8688: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD59840D: crNetConnectToServer (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD59856D: crNetServerConnect (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD94C4F8: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94A07E: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94B0EC: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD2CAD09: crSPULoad (in /usr/lib/VBoxOGL.so)
==2304== by 0xD2CAEC3: crSPULoadChain (in /usr/lib/VBoxOGL.so)
==2304== by 0xD283FB6: ??? (in /usr/lib/VBoxOGL.so)
==2304== by 0xD284318: ??? (in /usr/lib/VBoxOGL.so)
==2304==
==2304== Conditional jump or move depends on uninitialised value(s)
==2304== at 0x400B52: main (test.cpp:47)
==2304== Uninitialised value was created by a heap allocation
==2304== at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2304== by 0xD596F91: crAlloc (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD5A8688: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD59840D: crNetConnectToServer (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD59856D: crNetServerConnect (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLcrutil.so)
==2304== by 0xD94C4F8: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94A07E: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD94B0EC: ??? (in /opt/VBoxGuestAdditions-4.3.14/lib/VBoxOGLpackspu.so)
==2304== by 0xD2CAD09: crSPULoad (in /usr/lib/VBoxOGL.so)
==2304== by 0xD2CAEC3: crSPULoadChain (in /usr/lib/VBoxOGL.so)
==2304== by 0xD283FB6: ??? (in /usr/lib/VBoxOGL.so)
==2304== by 0xD284318: ??? (in /usr/lib/VBoxOGL.so)
Upvotes: 0
Views: 1125
Reputation: 3807
You can use the valgrind memcheck request VALGRIND_MAKE_MEM_DEFINED.
See http://www.valgrind.org/docs/manual/mc-manual.html#mc-manual.clientreqs and the file memcheck.h for more info.
Note however that assigning something to a variable is not a proof that this variable is initialised: if the value being assigned to the variable is itself not (fully) initialised, then the 'undefinedness' will be propagated. So, before declaring the texture variable as defined, you should double check that it is effectively properly initialised/defined.
You might e.g. first run with --track-origins=yes to have more info about where the undefined value comes from.
Alternatively, you might interactively search the root cause using valgrind+vgdb and gdb, checking the definedness of e.g. texture_list.
See http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.gdbserver for more info.
Upvotes: 2