Postponed call of vg_set_main_thread_state() from /lib/ld-*.so:_start() to the call of main(), the program entry point.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7991 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/exp-drd/drd_pthread_intercepts.c b/exp-drd/drd_pthread_intercepts.c
index 5b28d67..f64ab1c 100644
--- a/exp-drd/drd_pthread_intercepts.c
+++ b/exp-drd/drd_pthread_intercepts.c
@@ -97,7 +97,6 @@
 static void init(void)
 {
   check_threading_library();
-  vg_set_main_thread_state();
   /* glibc up to and including version 2.7 triggers conflicting accesses   */
   /* on stdout and stderr when sending output to one of these streams from */
   /* more than one thread. Suppress data race reports on these objects.    */
@@ -105,6 +104,17 @@
   DRD_IGNORE_VAR(*stderr);
 }
 
+int VG_WRAP_FUNCTION_ZZ(Za,main)(int argc, char** argv, char** envp);
+int VG_WRAP_FUNCTION_ZZ(Za,main)(int argc, char** argv, char** envp)
+{
+  int ret;
+  OrigFn fn;
+  VALGRIND_GET_ORIG_FN(fn);
+  vg_set_main_thread_state();
+  CALL_FN_W_WWW(ret, fn, argc, argv, envp);
+  return ret;
+}
+
 static MutexT pthread_to_drd_mutex_type(const int kind)
 {
   switch (kind)