diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2015-04-20 00:22:32 +0200 |
---|---|---|
committer | Thomas Schwinge <thomas@codesourcery.com> | 2015-04-20 00:22:32 +0200 |
commit | d214e5e79e38b18bc3786b3e8ba0e55fdbba294b (patch) | |
tree | 2c5e42c7d6e03456caafda2fae9121db08e577e9 /gdb/reply_mig_hack.awk | |
parent | d3e9b40afb8e7bd09522044951cdce4710676c3e (diff) | |
download | gdb-d214e5e79e38b18bc3786b3e8ba0e55fdbba294b.zip gdb-d214e5e79e38b18bc3786b3e8ba0e55fdbba294b.tar.gz gdb-d214e5e79e38b18bc3786b3e8ba0e55fdbba294b.tar.bz2 |
[GDB] Hurd: Simplify the reply_mig_hack.awk script.
gdb/
* reply_mig_hack.awk: Don't bother to declare an intermediate
function pointer variable.
... allowing us to simplify the parsing a little bit. And, instead of
"warning: initialization from incompatible pointer type", we now get "warning:
function called through a non-compatible type". Oh well.
Diffstat (limited to 'gdb/reply_mig_hack.awk')
-rw-r--r-- | gdb/reply_mig_hack.awk | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/gdb/reply_mig_hack.awk b/gdb/reply_mig_hack.awk index 2c2a30a..7eab504 100644 --- a/gdb/reply_mig_hack.awk +++ b/gdb/reply_mig_hack.awk @@ -60,7 +60,7 @@ parse_phase == 3 && /}/ { print; next; } -parse_phase == 3 { +parse_phase == 3 && num_args == 0 { # The type field for an argument. arg_type_code_name[num_args] = $2; sub (/;$/, "", arg_type_code_name[num_args]) # Get rid of the semi-colon @@ -68,11 +68,22 @@ parse_phase == 3 { print; next; } +parse_phase == 3 && num_args == 1 { + # We've got more than one argument (but we don't care what it is). + num_args++; + print; next; +} + +parse_phase == 3 { + # We've know everything we need; now just wait for the end of the Request + # struct. + print; next; +} + parse_phase == 4 { # The value field for an argument. arg_name[num_args] = $2; sub (/;$/, "", arg_name[num_args]) # Get rid of the semi-colon - arg_type[num_args] = $1; num_args++; parse_phase = 3; print; next; @@ -109,15 +120,11 @@ parse_phase == 5 && /^#if[ \t]TypeCheck/ { print "\t && In0P->" arg_name[0] " != 0)"; print "\t /* Error return, only the error code argument is passed. */"; print "\t {"; - # Force the function into a type that only takes the first two args, via - # the temp variable SFUN (is there another way to correctly do this cast?). + # Force the function user_function_name into a type that only takes the first + # two arguments. # This is possibly bogus, but easier than supplying bogus values for all # the other args (we can't just pass 0 for them, as they might not be scalar). - printf ("\t kern_return_t (*sfun)(mach_port_t"); - for (i = 0; i < num_args; i++) - printf (", %s", arg_type[i]); - printf (") = %s;\n", user_function_name); - print "\t OutP->RetCode = (*(kern_return_t (*)(mach_port_t, kern_return_t))sfun) (In0P->Head.msgh_request_port, In0P->" arg_name[0] ");"; + print "\t OutP->RetCode = (*(kern_return_t (*)(mach_port_t, kern_return_t)) " user_function_name ") (In0P->Head.msgh_request_port, In0P->" arg_name[0] ");"; print "\t return;"; print "\t }"; print ""; |