diff options
author | David Malcolm <dmalcolm@redhat.com> | 2014-12-09 20:55:18 +0000 |
---|---|---|
committer | David Malcolm <dmalcolm@gcc.gnu.org> | 2014-12-09 20:55:18 +0000 |
commit | 5cd614ceccbeba752d4d480789175ffb88a818e5 (patch) | |
tree | da0a5d00b117545c9e3673817305f20991db84bc /gcc/jit/docs | |
parent | dd9133238205adddf820bff279575c2348f8c13a (diff) | |
download | gcc-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.c | 31 |
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 (); |