# HG changeset patch # User lost@l-w.ca # Date 1279924851 21600 # Node ID 54499b799779fd61f3e084bb9fa13fa9b3e27844 # Parent a2f52e97b4546ba218164fc0d47a8125a0e9d918 Q&D sanitization of symbols in map files and error messages in lwlink diff -r a2f52e97b454 -r 54499b799779 lwlink/link.c --- a/lwlink/link.c Fri Jul 23 16:23:54 2010 -0600 +++ b/lwlink/link.c Fri Jul 23 16:40:51 2010 -0600 @@ -286,7 +286,7 @@ } // not found symerr = 1; - fprintf(stderr, "Local symbol %s not found in %s:%s\n", sym, sect -> file -> filename, sect -> name); + fprintf(stderr, "Local symbol %s not found in %s:%s\n", sanitize_symbol(sym), sect -> file -> filename, sect -> name); goto outerr; } else @@ -311,7 +311,7 @@ } if (sect) { - fprintf(stderr, "External symbol %s not found in %s:%s\n", sym, sect -> file -> filename, sect -> name); + fprintf(stderr, "External symbol %s not found in %s:%s\n", sanitize_symbol(sym), sect -> file -> filename, sect -> name); } else { @@ -414,7 +414,7 @@ s = resolve_sym(linkscript.execsym, 0, NULL); if (!s) { - fprintf(stderr, "Cannot resolve exec address '%s'\n", linkscript.execsym); + fprintf(stderr, "Cannot resolve exec address '%s'\n", sanitize_symbol(linkscript.execsym)); symerr = 1; } } diff -r a2f52e97b454 -r 54499b799779 lwlink/lwlink.c --- a/lwlink/lwlink.c Fri Jul 23 16:23:54 2010 -0600 +++ b/lwlink/lwlink.c Fri Jul 23 16:40:51 2010 -0600 @@ -105,3 +105,40 @@ scriptls = lw_realloc(scriptls, sizeof(char *) * (nscriptls + 1)); scriptls[nscriptls++] = t; } + +char *sanitize_symbol(char *symbol) +{ + static char symbuf[2048]; + char *sym = symbol; + char *tp = symbuf; + + for (; *sym; sym++) + { + int c1 = *sym; + if (c1 == '\\') + { + *tp++ = '\\'; + *tp++ = '\\'; + continue; + } + if (c1 < 32 || c1 > 126) + { + int c; + *tp++ = '\\'; + c = c1 >> 4; + c += 48; + if (c > 57) + c += 7; + *tp++ = c; + c = c1 & 15; + c += 48; + if (c > 57) + c += 7; + *tp++ = c; + continue; + } + *tp++ = c1; + } + *tp = 0; + return symbuf; +} diff -r a2f52e97b454 -r 54499b799779 lwlink/lwlink.h --- a/lwlink/lwlink.h Fri Jul 23 16:23:54 2010 -0600 +++ b/lwlink/lwlink.h Fri Jul 23 16:40:51 2010 -0600 @@ -127,6 +127,7 @@ __lwlink_E__ void add_input_library(char *fn); __lwlink_E__ void add_library_search(char *fn); __lwlink_E__ void add_section_base(char *fn); +__lwlink_E__ char *sanitize_symbol(char *sym); #undef __lwlink_E__ diff -r a2f52e97b454 -r 54499b799779 lwlink/map.c --- a/lwlink/map.c Fri Jul 23 16:23:54 2010 -0600 +++ b/lwlink/map.c Fri Jul 23 16:40:51 2010 -0600 @@ -69,7 +69,7 @@ for (sn = 0; sn < nsects; sn++) { fprintf(of, "Section: %s (%s) load at %04X, length %04X\n", - sectlist[sn].ptr -> name, + sanitize_symbol(sectlist[sn].ptr -> name), sectlist[sn].ptr -> file -> filename, sectlist[sn].ptr -> loadaddress, sectlist[sn].ptr -> codesize @@ -107,7 +107,7 @@ for (ce = slist; ce; ce = ce -> next) { - fprintf(of, "Symbol: %s (%s) = %04X\n", ce -> name, ce -> fn, ce -> addr); + fprintf(of, "Symbol: %s (%s) = %04X\n", sanitize_symbol(ce -> name), ce -> fn, ce -> addr); } if (!std)