From 529e029abdcf55304bd6d416eeae4bacc5d414ec Mon Sep 17 00:00:00 2001 From: Martin Whitaker Date: Mon, 9 Jun 2014 22:40:26 +0100 Subject: [PATCH] Fix for GitHub issue #28 - Insufficient string escaping in vvp script. " characters in strings must be escaped when the compiler writes a quoted string to a vvp script. This patch fixes up a few places where this wasn't being done. --- tgt-vvp/vvp_scope.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/tgt-vvp/vvp_scope.c b/tgt-vvp/vvp_scope.c index 99c6fe73f..5afdc9fbf 100644 --- a/tgt-vvp/vvp_scope.c +++ b/tgt-vvp/vvp_scope.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001-2012 Stephen Williams (steve@icarus.com) + * Copyright (c) 2001-2014 Stephen Williams (steve@icarus.com) * * This source code is free software; you can redistribute it * and/or modify it in source code form under the terms of the GNU @@ -2151,8 +2151,10 @@ int draw_scope(ivl_scope_t net, ivl_scope_t parent) } fprintf(vvp_out, "S_%p .scope %s%s, \"%s\" \"%s\" %d %d", - net, prefix, type, vvp_mangle_name(ivl_scope_basename(net)), - ivl_scope_tname(net), ivl_file_table_index(ivl_scope_file(net)), + net, prefix, type, + vvp_mangle_name(ivl_scope_basename(net)), + vvp_mangle_name(ivl_scope_tname(net)), + ivl_file_table_index(ivl_scope_file(net)), ivl_scope_lineno(net)); if (parent) { @@ -2177,7 +2179,8 @@ int draw_scope(ivl_scope_t net, ivl_scope_t parent) if( name == 0 ) name = ""; fprintf( vvp_out, " .port_info %u %s %u \"%s\"\n", - idx, vvp_port_info_type_str(ptype), width, name ); + idx, vvp_port_info_type_str(ptype), width, + vvp_mangle_name(name) ); } } @@ -2187,7 +2190,7 @@ int draw_scope(ivl_scope_t net, ivl_scope_t parent) switch (ivl_expr_type(pex)) { case IVL_EX_STRING: fprintf(vvp_out, "P_%p .param/str \"%s\" %d %d %d, \"%s\";\n", - par, ivl_parameter_basename(par), + par, vvp_mangle_name(ivl_parameter_basename(par)), ivl_parameter_local(par), ivl_file_table_index(ivl_parameter_file(par)), ivl_parameter_lineno(par), @@ -2195,7 +2198,7 @@ int draw_scope(ivl_scope_t net, ivl_scope_t parent) break; case IVL_EX_NUMBER: fprintf(vvp_out, "P_%p .param/l \"%s\" %d %d %d, %sC4<", - par, ivl_parameter_basename(par), + par, vvp_mangle_name(ivl_parameter_basename(par)), ivl_parameter_local(par), ivl_file_table_index(ivl_parameter_file(par)), ivl_parameter_lineno(par), @@ -2211,8 +2214,9 @@ int draw_scope(ivl_scope_t net, ivl_scope_t parent) case IVL_EX_REALNUM: { char *res = draw_Cr_to_string(ivl_expr_dvalue(pex)); fprintf(vvp_out, "P_%p .param/real \"%s\" %d %d %d, %s; " - "value=%#g\n", par, ivl_parameter_basename(par), - ivl_parameter_local(par), + "value=%#g\n", par, + vvp_mangle_name(ivl_parameter_basename(par)), + ivl_parameter_local(par), ivl_file_table_index(ivl_parameter_file(par)), ivl_parameter_lineno(par), res, ivl_expr_dvalue(pex));