Changeset 1551 for trunk/debugtools/mapsymw.pl
- Timestamp:
- Nov 15, 2010, 4:33:25 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/debugtools/mapsymw.pl
r1342 r1551 1 1 #!perl -w 2 # mapsymw - mapsym Watcom map files3 4 # Copyright (c) 2007, 20 08Steven Levine and Associates, Inc.2 # mapsymw - mapsym wrapper Watcom map files 3 # $Id: $ 4 # Copyright (c) 2007, 2010 Steven Levine and Associates, Inc. 5 5 # All rights reserved. 6 7 # $TLIB$: $ &(#) %n - Ver %v, %f $8 # TLIB: $ $9 6 10 7 # This program is free software licensed under the terms of the GNU … … 19 16 # 08 Nov 07 SHL Drop leading keywords from function definitions 20 17 # 14 Dec 08 SHL Ensure symbols sorted by value - some apps care 18 # 03 May 10 SHL Comments 19 # 14 Jun 10 SHL Avoid missing C++ symbols 21 20 22 21 # mapsym requires each segment to have at least 1 symbol … … 165 164 # Address Symbol 166 165 # 0002:0004ae46+ ArcTextProc 166 # 0002:0d11+ void near IoctlAudioCapability( __2bd9g9REQPACKET far *, short unsigned ) 167 167 # Out 168 168 # 0 1 2 3 4 5 6 … … 171 171 # 0000:00000000 Imp WinEmptyClipbrd (PMWIN.733) 172 172 # 0002:0001ED40 __towlower_dummy 173 if (/^([[:xdigit:]]+):([[:xdigit:]]+)[+*]?\s+( \w+)$/) {173 if (/^([[:xdigit:]]+):([[:xdigit:]]+)[+*]?\s+(.+)$/) { 174 174 $segnum = $1; 175 175 $offset = $2; … … 195 195 196 196 # Convert C++ symbols to something mapsym will accept 197 # warn "$sym\n"; 197 198 198 199 $_ = $sym; 199 200 200 # s/\bIdle\b/ /; # Drop Idle keyword 201 s/\(.*\).*$//; # Drop (... tails202 203 s/::~/_ x/; # Replace ::~ with_x204 s/::/_ /; # Replace :: with_201 # s/\bIdle\b/ /; # Drop Idle keyword - obsolete done later 202 s/\(.*\).*$//; # Drop (...) tails 203 204 s/::~/__x/; # Replace ::~ with __x 205 s/::/__/; # Replace :: with __ 205 206 206 207 s/[<,]/_/g; # Replace < and , with _ 207 208 s/[>]//g; # Replace > with nothing 208 209 s/[\[\]]//g; # Replace [] with nothing 209 s/_*$//; # Drop trailing _ 210 s/\W+\w//; # Drop leading keywords (including Idle) 210 # s/_*$//; # Drop trailing _ 211 # s/\W+\w//; # Drop leading keywords (including Idle) 212 s/\b.*\b\s+//g; # Drop leading keywords (including Idle) 211 213 212 214 # Drop leading and trailing _ to match source code … … 214 216 s/^_//; # Drop leading _ (cdecl) 215 217 s/_$//; # Drop trailing _ (watcall) 218 219 # warn "$_\n"; 216 220 217 221 # Prune some libc symbols to avoid mapsym overflows … … 242 246 close MAPFILE; 243 247 244 # Generate dummy symbols as needed248 # Sort segments 245 249 246 250 my @keys = sort keys %segsinfo; … … 249 253 @keys = '0000'..$maxseg; 250 254 } 255 256 # Generate dummy symbols for 32-bit segments smaller than 64KB 251 257 252 258 foreach $segnum (@keys) { … … 280 286 } # foreach 281 287 288 # Generate symbols by value listing 289 290 my $lastsym = ''; 291 my $seq = 0; 282 292 @keys = sort keys %syms; 283 293 foreach $segaddr (@keys) { 284 294 my $sym = $syms{$segaddr}; 285 295 my $imp = substr($segaddr, 0, 4) eq '0000' ? 'Imp' : ''; 296 if ($sym ne $lastsym) { 297 $lastsym = $sym; 298 $seq = 0; 299 } else { 300 $seq++; 301 $sym = "${sym}_$seq"; 302 } 286 303 printf WRKFILE $symfmt, $segaddr, $imp, $sym; 287 304 }
Note:
See TracChangeset
for help on using the changeset viewer.