http://stackoverflow.com/questions/15840091/cross-compiled-valgrind-does-not-detect-obvious-leaks
It turns out that openwrt strips all libraries including valgrind’s vgpreload_xxxxxx.so libs and libc.so. However, valgrind needs section headers and symbols in the .so files. I disabled stripping for libc and valgrind packages, then everything is working like charm. It took some digging into valgrind code to understand what is really going on. I wish there were some WARNINGs or errors from valgrind if it can’t find any symbols to REDIR. Would have saved me 3 days. Oh well, learnt something new anyways.