aboutsummaryrefslogtreecommitdiff
path: root/gcc/jit/docs
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2014-12-09 20:55:18 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2014-12-09 20:55:18 +0000
commit5cd614ceccbeba752d4d480789175ffb88a818e5 (patch)
treeda0a5d00b117545c9e3673817305f20991db84bc /gcc/jit/docs
parentdd9133238205adddf820bff279575c2348f8c13a (diff)
downloadgcc-5cd614ceccbeba752d4d480789175ffb88a818e5.zip
gcc-5cd614ceccbeba752d4d480789175ffb88a818e5.tar.gz
gcc-5cd614ceccbeba752d4d480789175ffb88a818e5.tar.bz2
toyvm.c: use correct path in debuginfo
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
Diffstat (limited to 'gcc/jit/docs')
-rw-r--r--gcc/jit/docs/examples/tut04-toyvm/toyvm.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/gcc/jit/docs/examples/tut04-toyvm/toyvm.c b/gcc/jit/docs/examples/tut04-toyvm/toyvm.c
index 07de507..0089ea7 100644
--- a/gcc/jit/docs/examples/tut04-toyvm/toyvm.c
+++ b/gcc/jit/docs/examples/tut04-toyvm/toyvm.c
@@ -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 ();