[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    Re: Other W->A crosscalls
From:       Francois Gouget <fgouget () free ! fr>
Date:       2004-08-28 19:03:28
Message-ID: Pine.LNX.4.58.0408282101060.9319 () amboise ! dolphin
[Download RAW message or body]

On Wed, 25 Aug 2004, Rolf Kalbermatter wrote:
[...]
> I see many "xxxAW calls xxxA function" mainly in the shell related DLLs. This
> is of course not something you can really get rid of, so the script should
> be able to exclude those cases.

I couldn't test as I don't have smatch, but I think that simply adding
this line in the right place should do the trick.

    $func_in = "No function" if ($func_in =~ /AW$/);

See the attached script.

-- 
Francois Gouget         fgouget@free.fr        http://fgouget.free.fr/
     We are Pentium of Borg. You will be approximated. Division is futile.
["wine_crosscalls.pl" (TEXT/x-perl)]

#!/usr/bin/perl

use smatch;
my $tmp;
my $func_in;
my $func_called;

while (my $data = get_data()) {
	if ($data =~ /^function_decl (.*?)function_decl\((.*?)W\)/) {
		$func_in = "$2W";
                $func_in = "No function" if ($func_in =~ /AW$/);
	} elsif ($data =~ /^function_decl (.*?)function_decl\((.*?)\)/) {
		$func_in = "No function";
	}

	if (not $func_in =~ /^No function$/) {
		$tmp = $data;
		while ($tmp =~ /call_expr\(\(addr_expr function_decl\(([^\)]*?)\)(.*)/) {
			$func_called = $1;
			$tmp = $2;
			if ($func_called =~ /(.*?)A$/) {
				print get_filename(), " ", get_lineno(), " $func_in: call to $func_called\n";
			}
		}
	}
}


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic