mirror of
https://gitlab.winehq.org/wine/wine.git
synced 2024-11-21 17:09:06 -07:00
server: Move the generated part of trace.c to a separate header.
This commit is contained in:
parent
45953cdbec
commit
75e2ec479b
4 changed files with 4484 additions and 4402 deletions
|
@ -641,6 +641,7 @@ C_ASSERT( sizeof(tcp_connection) == 60 );
|
||||||
C_ASSERT( sizeof(thread_id_t) == 4 );
|
C_ASSERT( sizeof(thread_id_t) == 4 );
|
||||||
C_ASSERT( sizeof(timeout_t) == 8 );
|
C_ASSERT( sizeof(timeout_t) == 8 );
|
||||||
C_ASSERT( sizeof(udp_endpoint) == 32 );
|
C_ASSERT( sizeof(udp_endpoint) == 32 );
|
||||||
|
C_ASSERT( sizeof(unsigned __int64) == 8 );
|
||||||
C_ASSERT( sizeof(unsigned char) == 1 );
|
C_ASSERT( sizeof(unsigned char) == 1 );
|
||||||
C_ASSERT( sizeof(unsigned int) == 4 );
|
C_ASSERT( sizeof(unsigned int) == 4 );
|
||||||
C_ASSERT( sizeof(unsigned short) == 2 );
|
C_ASSERT( sizeof(unsigned short) == 2 );
|
||||||
|
|
4399
server/request_trace.h
Normal file
4399
server/request_trace.h
Normal file
File diff suppressed because it is too large
Load diff
4379
server/trace.c
4379
server/trace.c
File diff suppressed because it is too large
Load diff
|
@ -32,28 +32,19 @@ my %formats =
|
||||||
"data_size_t" => [ 4, 4, "%u" ],
|
"data_size_t" => [ 4, 4, "%u" ],
|
||||||
"obj_handle_t" => [ 4, 4, "%04x" ],
|
"obj_handle_t" => [ 4, 4, "%04x" ],
|
||||||
"atom_t" => [ 4, 4, "%04x" ],
|
"atom_t" => [ 4, 4, "%04x" ],
|
||||||
"user_handle_t" => [ 4, 4, "%08x" ],
|
|
||||||
"process_id_t" => [ 4, 4, "%04x" ],
|
"process_id_t" => [ 4, 4, "%04x" ],
|
||||||
"thread_id_t" => [ 4, 4, "%04x" ],
|
"thread_id_t" => [ 4, 4, "%04x" ],
|
||||||
"client_ptr_t" => [ 8, 8, "&dump_uint64" ],
|
"unsigned __int64" => [ 8, 8, "&uint64" ],
|
||||||
"mod_handle_t" => [ 8, 8, "&dump_uint64" ],
|
"timeout_t" => [ 8, 8 ],
|
||||||
"lparam_t" => [ 8, 8, "&dump_uint64" ],
|
"abstime_t" => [ 8, 8 ],
|
||||||
"apc_param_t" => [ 8, 8, "&dump_uint64" ],
|
"rectangle_t" => [ 16, 4 ],
|
||||||
"file_pos_t" => [ 8, 8, "&dump_uint64" ],
|
"apc_result_t" => [ 40, 8 ],
|
||||||
"mem_size_t" => [ 8, 8, "&dump_uint64" ],
|
"async_data_t" => [ 40, 8 ],
|
||||||
"affinity_t" => [ 8, 8, "&dump_uint64" ],
|
"irp_params_t" => [ 32, 8 ],
|
||||||
"object_id_t" => [ 8, 8, "&dump_uint64" ],
|
"generic_map_t" => [ 16, 4 ],
|
||||||
"timeout_t" => [ 8, 8, "&dump_timeout" ],
|
"ioctl_code_t" => [ 4, 4 ],
|
||||||
"abstime_t" => [ 8, 8, "&dump_abstime" ],
|
"hw_input_t" => [ 40, 8 ],
|
||||||
"rectangle_t" => [ 16, 4, "&dump_rectangle" ],
|
"obj_locator_t" => [ 16, 8 ],
|
||||||
"apc_result_t" => [ 40, 8, "&dump_apc_result" ],
|
|
||||||
"async_data_t" => [ 40, 8, "&dump_async_data" ],
|
|
||||||
"irp_params_t" => [ 32, 8, "&dump_irp_params" ],
|
|
||||||
"struct luid" => [ 8, 4, "&dump_luid" ],
|
|
||||||
"generic_map_t" => [ 16, 4, "&dump_generic_map" ],
|
|
||||||
"ioctl_code_t" => [ 4, 4, "&dump_ioctl_code" ],
|
|
||||||
"hw_input_t" => [ 40, 8, "&dump_hw_input" ],
|
|
||||||
"obj_locator_t" => [ 16, 8, "&dump_obj_locator" ],
|
|
||||||
# varargs-only structures
|
# varargs-only structures
|
||||||
"apc_call_t" => [ 64, 8 ],
|
"apc_call_t" => [ 64, 8 ],
|
||||||
"context_t" => [ 1728, 8 ],
|
"context_t" => [ 1728, 8 ],
|
||||||
|
@ -69,6 +60,7 @@ my %formats =
|
||||||
"user_apc_t" => [ 40, 8 ],
|
"user_apc_t" => [ 40, 8 ],
|
||||||
"struct filesystem_event" => [ 12, 4 ],
|
"struct filesystem_event" => [ 12, 4 ],
|
||||||
"struct handle_info" => [ 20, 4 ],
|
"struct handle_info" => [ 20, 4 ],
|
||||||
|
"struct luid" => [ 8, 4 ],
|
||||||
"struct luid_attr" => [ 12, 4 ],
|
"struct luid_attr" => [ 12, 4 ],
|
||||||
"struct object_attributes" => [ 16, 4 ],
|
"struct object_attributes" => [ 16, 4 ],
|
||||||
"struct object_type_info" => [ 44, 4 ],
|
"struct object_type_info" => [ 44, 4 ],
|
||||||
|
@ -85,6 +77,7 @@ my $file_header =
|
||||||
|
|
||||||
my @requests = ();
|
my @requests = ();
|
||||||
my %replies = ();
|
my %replies = ();
|
||||||
|
my %dump_funcs = ();
|
||||||
my @asserts = ();
|
my @asserts = ();
|
||||||
|
|
||||||
my @trace_lines = ();
|
my @trace_lines = ();
|
||||||
|
@ -121,10 +114,24 @@ sub DO_DUMP_FUNC($$@)
|
||||||
if (defined($formats{$type}))
|
if (defined($formats{$type}))
|
||||||
{
|
{
|
||||||
my $fmt = ${$formats{$type}}[2];
|
my $fmt = ${$formats{$type}}[2];
|
||||||
if ($fmt =~ /^&(.*)/)
|
while ($fmt && $fmt !~ /^[%&]/)
|
||||||
|
{
|
||||||
|
$type = $fmt;
|
||||||
|
$fmt = ${$formats{$type}}[2];
|
||||||
|
}
|
||||||
|
if (!$fmt)
|
||||||
|
{
|
||||||
|
my $func = $type;
|
||||||
|
$func =~ s/^(struct|union)\s+//;
|
||||||
|
$func =~ s/_t$//;
|
||||||
|
push @trace_lines, " dump_$func( \"$prefix$var=\", &req->$var );\n";
|
||||||
|
$dump_funcs{$func} = $type;
|
||||||
|
}
|
||||||
|
elsif ($fmt =~ /^&(.*)/)
|
||||||
{
|
{
|
||||||
my $func = $1;
|
my $func = $1;
|
||||||
push @trace_lines, " $func( \"$prefix$var=\", &req->$var );\n";
|
push @trace_lines, " dump_$func( \"$prefix$var=\", &req->$var );\n";
|
||||||
|
$dump_funcs{$func} = $type;
|
||||||
}
|
}
|
||||||
elsif ($fmt =~ /^(%.*)\s+\((.*)\)/)
|
elsif ($fmt =~ /^(%.*)\s+\((.*)\)/)
|
||||||
{
|
{
|
||||||
|
@ -244,22 +251,18 @@ sub PARSE_REQUESTS()
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (/^\s*VARARG\((\w+),(\w+),(\d+)\)/)
|
if (/^\s*VARARG\((\w+),(\w+),(\w+)\)/)
|
||||||
{
|
{
|
||||||
$var = $1;
|
$var = $1;
|
||||||
$type = "dump_varargs_$2( \"%s\", min(cur_size,$3) )";
|
$type = "dump_varargs_$2( \"%s\", min( cur_size, req->" . $3 . " ))";
|
||||||
s!(VARARG\(.*\)\s*;)!/* $1 */!;
|
$dump_funcs{"varargs_$2"} = $2;
|
||||||
}
|
|
||||||
elsif (/^\s*VARARG\((\w+),(\w+),(\w+)\)/)
|
|
||||||
{
|
|
||||||
$var = $1;
|
|
||||||
$type = "dump_varargs_" . $2 . "( \"%s\", min(cur_size,req->" . $3 . ") )";
|
|
||||||
s!(VARARG\(.*\)\s*;)!/* $1 */!;
|
s!(VARARG\(.*\)\s*;)!/* $1 */!;
|
||||||
}
|
}
|
||||||
elsif (/^\s*VARARG\((\w+),(\w+)\)/)
|
elsif (/^\s*VARARG\((\w+),(\w+)\)/)
|
||||||
{
|
{
|
||||||
$var = $1;
|
$var = $1;
|
||||||
$type = "dump_varargs_" . $2 . "( \"%s\", cur_size )";
|
$type = "dump_varargs_$2( \"%s\", cur_size )";
|
||||||
|
$dump_funcs{"varargs_$2"} = $2;
|
||||||
s!(VARARG\(.*\)\s*;)!/* $1 */!;
|
s!(VARARG\(.*\)\s*;)!/* $1 */!;
|
||||||
}
|
}
|
||||||
elsif (/^\s*(\w+\**(\s+\w+\**)*)\s+(\w+);/)
|
elsif (/^\s*(\w+\**(\s+\w+\**)*)\s+(\w+);/)
|
||||||
|
@ -292,6 +295,15 @@ sub PARSE_REQUESTS()
|
||||||
if ($state == 2) { push @in_struct, $type, $var; }
|
if ($state == 2) { push @in_struct, $type, $var; }
|
||||||
if ($state == 3) { push @out_struct, $type, $var; }
|
if ($state == 3) { push @out_struct, $type, $var; }
|
||||||
}
|
}
|
||||||
|
elsif (/^typedef\s+(.*)\s+(\w+_t);$/)
|
||||||
|
{
|
||||||
|
if (defined $formats{$1} && !defined $formats{$2})
|
||||||
|
{
|
||||||
|
@{$formats{$2}} = @{$formats{$1}};
|
||||||
|
$formats{$2}->[2] = $1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Pass it through into the output file
|
# Pass it through into the output file
|
||||||
print SERVER_PROT $_ . "\n";
|
print SERVER_PROT $_ . "\n";
|
||||||
|
@ -451,21 +463,22 @@ if (update_file( "include/wine/server_protocol.h" ))
|
||||||
|
|
||||||
### Output the dumping function tables
|
### Output the dumping function tables
|
||||||
|
|
||||||
push @trace_lines, "static const dump_func req_dumpers[REQ_NB_REQUESTS] = {\n";
|
push @trace_lines, "typedef void (*dump_func)( const void *req );\n\n";
|
||||||
|
push @trace_lines, "static const dump_func req_dumpers[REQ_NB_REQUESTS] =\n{\n";
|
||||||
foreach my $req (@requests)
|
foreach my $req (@requests)
|
||||||
{
|
{
|
||||||
push @trace_lines, " (dump_func)dump_${req}_request,\n";
|
push @trace_lines, " (dump_func)dump_${req}_request,\n";
|
||||||
}
|
}
|
||||||
push @trace_lines, "};\n\n";
|
push @trace_lines, "};\n\n";
|
||||||
|
|
||||||
push @trace_lines, "static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {\n";
|
push @trace_lines, "static const dump_func reply_dumpers[REQ_NB_REQUESTS] =\n{\n";
|
||||||
foreach my $req (@requests)
|
foreach my $req (@requests)
|
||||||
{
|
{
|
||||||
push @trace_lines, " ", $replies{$req} ? "(dump_func)dump_${req}_reply,\n" : "NULL,\n";
|
push @trace_lines, " ", $replies{$req} ? "(dump_func)dump_${req}_reply,\n" : "NULL,\n";
|
||||||
}
|
}
|
||||||
push @trace_lines, "};\n\n";
|
push @trace_lines, "};\n\n";
|
||||||
|
|
||||||
push @trace_lines, "static const char * const req_names[REQ_NB_REQUESTS] = {\n";
|
push @trace_lines, "static const char * const req_names[REQ_NB_REQUESTS] =\n{\n";
|
||||||
foreach my $req (@requests)
|
foreach my $req (@requests)
|
||||||
{
|
{
|
||||||
push @trace_lines, " \"$req\",\n";
|
push @trace_lines, " \"$req\",\n";
|
||||||
|
@ -484,10 +497,28 @@ foreach my $err (sort keys %errors)
|
||||||
push @trace_lines, " { NULL, 0 }\n";
|
push @trace_lines, " { NULL, 0 }\n";
|
||||||
push @trace_lines, "};\n";
|
push @trace_lines, "};\n";
|
||||||
|
|
||||||
replace_in_file( "server/trace.c",
|
|
||||||
"### make_requests begin ###",
|
my @trace_header = ( $file_header );
|
||||||
"### make_requests end ###",
|
|
||||||
@trace_lines );
|
foreach my $func (sort keys %dump_funcs)
|
||||||
|
{
|
||||||
|
if ($func =~ /^varargs_/)
|
||||||
|
{
|
||||||
|
push @trace_header, "static void dump_$func( const char *prefix, data_size_t size );\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
push @trace_header, "static void dump_$func( const char *prefix, const $dump_funcs{$func} *val );\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
push @trace_header, "\nstatic const void *cur_data;\n";
|
||||||
|
push @trace_header, "static data_size_t cur_size;\n\n";
|
||||||
|
|
||||||
|
open TRACE, ">server/request_trace.h.new" or die "Cannot create server/request_trace.h.new";
|
||||||
|
print TRACE @trace_header, @trace_lines;
|
||||||
|
close TRACE;
|
||||||
|
update_file( "server/request_trace.h" );
|
||||||
|
|
||||||
### Output the request handlers list
|
### Output the request handlers list
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue