toyvm.c: use correct path in debuginfo
authorDavid Malcolm <dmalcolm@redhat.com>
Tue, 9 Dec 2014 20:55:18 +0000 (20:55 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Tue, 9 Dec 2014 20:55:18 +0000 (20:55 +0000)
gcc/jit/ChangeLog:
* docs/examples/tut04-toyvm/toyvm.c (toyvm_function_compile): Move
logic for determine "funcname" to new function...
(get_function_name): ...here, adding logic to skip any leading
path from the filename.
(toyvm_function_parse): Use the filename for fn_filename, rather
than "name", so that the debugger can locate the source .toy
file.
(toyvm_function_parse): Don't fclose a NULL FILE *.

From-SVN: r218540

gcc/jit/ChangeLog
gcc/jit/docs/examples/tut04-toyvm/toyvm.c

index a346b642546903120839deeb09a5f5914a8986a0..c1d2a9ebc43fd31215a8e401e6dc6d8b6797e223 100644 (file)
@@ -1,3 +1,14 @@
+2014-12-09  David Malcolm  <dmalcolm@redhat.com>
+
+       * docs/examples/tut04-toyvm/toyvm.c (toyvm_function_compile): Move
+       logic for determine "funcname" to new function...
+       (get_function_name): ...here, adding logic to skip any leading
+       path from the filename.
+       (toyvm_function_parse): Use the filename for fn_filename, rather
+       than "name", so that the debugger can locate the source .toy
+       file.
+       (toyvm_function_parse): Don't fclose a NULL FILE *.
+
 2014-12-09  David Malcolm  <dmalcolm@redhat.com>
 
        PR jit/63854
index 07de507a132b826b276a8f48b3a9ed703d31f4ab..0089ea785de74cbb785dcde6482dd4efa1cb98da 100644 (file)
@@ -121,6 +121,25 @@ add_unary_op (toyvm_function *fn, enum opcode opcode,
   add_op (fn, opcode, operand, linenum);
 }
 
+static char *
+get_function_name (const char *filename)
+{
+  /* Skip any path separators.  */
+  const char *pathsep = strrchr (filename, '/');
+  if (pathsep)
+    filename = pathsep + 1;
+
+  /* Copy filename to funcname.  */
+  char *funcname = (char *)malloc (strlen (filename) + 1);
+
+  strcpy (funcname, filename);
+
+  /* Convert "." to NIL terminator.  */
+  *(strchr (funcname, '.')) = '\0';
+
+  return funcname;
+}
+
 static toyvm_function *
 toyvm_function_parse (const char *filename, const char *name)
 {
@@ -149,7 +168,7 @@ toyvm_function_parse (const char *filename, const char *name)
       fprintf (stderr, "out of memory allocating toyvm_function\n");
       goto error;
     }
-  fn->fn_filename = name;
+  fn->fn_filename = filename;
 
   /* Read the lines of the file.  */
   while ((linelen = getline (&line, &bufsize, f)) != -1)
@@ -208,7 +227,8 @@ toyvm_function_parse (const char *filename, const char *name)
 
  error:
   free (line);
-  fclose (f);
+  if (f)
+    fclose (f);
   free (fn);
   return NULL;
 }
@@ -460,12 +480,7 @@ toyvm_function_compile (toyvm_function *fn)
 
   memset (&state, 0, sizeof (state));
 
-  /* Copy filename to funcname.  */
-  funcname = (char *)malloc (strlen (fn->fn_filename) + 1);
-  strcpy (funcname, fn->fn_filename);
-
-  /* Convert "." to NIL terminator.  */
-  *(strchr (funcname, '.')) = '\0';
+  funcname = get_function_name (fn->fn_filename);
 
   state.ctxt = gcc_jit_context_acquire ();