Browse Source

Fix finding core files on MIC

Samuel Thibault 9 years ago
parent
commit
c97a242cc2
2 changed files with 22 additions and 13 deletions
  1. 1 1
      tests/loader-cross.sh.in
  2. 21 12
      tests/loader.c

+ 1 - 1
tests/loader-cross.sh.in

@@ -1,7 +1,7 @@
 #!/bin/bash
 
 top_srcdir="@top_srcdir@"
-top_builddir="@top_builddir@"
+export top_builddir="@top_builddir@"
 
 if test -z "$1"
 then

+ 21 - 12
tests/loader.c

@@ -62,10 +62,9 @@ static int mygettimeofday(struct timeval *tv, void *tz)
 #define mygettimeofday(tv,tz) gettimeofday(tv,tz)
 #endif
 
-static void launch_gdb(const char *exe)
-{
 #ifdef STARPU_GDB_PATH
-# define CORE_FILE "core"
+static int try_launch_gdb(const char *exe, const char *core)
+{
 # define GDB_ALL_COMMAND "thread apply all bt full"
 # define GDB_COMMAND "bt full"
 	int err;
@@ -74,18 +73,18 @@ static void launch_gdb(const char *exe)
 	const char *top_builddir;
 	char *gdb;
 
-	err = stat(CORE_FILE, &st);
+	err = stat(core, &st);
 	if (err != 0)
 	{
 		fprintf(stderr, "while looking for core file of %s: %s: %m\n",
-			exe, CORE_FILE);
-		return;
+			exe, core);
+		return -1;
 	}
 
 	if (!(st.st_mode & S_IFREG))
 	{
-		fprintf(stderr, CORE_FILE ": not a regular file\n");
-		return;
+		fprintf(stderr, "%s: not a regular file\n", core);
+		return -1;
 	}
 
 	top_builddir = getenv("top_builddir");
@@ -105,7 +104,7 @@ static void launch_gdb(const char *exe)
 				    STARPU_GDB_PATH, "--batch",
 				    "-ex", GDB_COMMAND,
 				    "-ex", GDB_ALL_COMMAND,
-				    exe, CORE_FILE, NULL);
+				    exe, core, NULL);
 		}
 		else
 		{
@@ -114,7 +113,7 @@ static void launch_gdb(const char *exe)
 			err = execl(gdb, "gdb", "--batch",
 				    "-ex", GDB_COMMAND,
 				    "-ex", GDB_ALL_COMMAND,
-				    exe, CORE_FILE, NULL);
+				    exe, core, NULL);
 		}
 		if (err != 0)
 		{
@@ -126,7 +125,7 @@ static void launch_gdb(const char *exe)
 
 	case -1:
 		fprintf(stderr, "fork: %m\n");
-		return;
+		return -1;
 
 	default:				  /* parent */
 		{
@@ -138,9 +137,19 @@ static void launch_gdb(const char *exe)
 					"process %d: %m\n", pid);
 		}
 	}
+	return 0;
 # undef GDB_COMMAND
 # undef GDB_ALL_COMMAND
-# undef CORE_FILE
+}
+#endif	/* STARPU_GDB_PATH */
+
+static void launch_gdb(const char *exe)
+{
+#ifdef STARPU_GDB_PATH
+	char s[32];
+	snprintf(s, sizeof(s), "core.%d", child_pid);
+	if (try_launch_gdb(exe, s) < 0)
+		try_launch_gdb(exe, "core");
 #endif	/* STARPU_GDB_PATH */
 }