hurd: make function cast stronger

Fixes

process_reply_S.c:104:23: error: function called through a non-compatible type [-Werror]
  104 |      OutP->RetCode = (*(kern_return_t (*)(mach_port_t, kern_return_t)) S_proc_setmsgport_reply) (In0P->Head.msgh_request_port, In0P-

As the existing comment says, it is in general not safe to drop some
parameters like this, but this is the error handling case, where the
called function does not actually read them, and mig is currently planned
to be used on i386 and x86_64 only, where this is not a problem. As the
existing comment says, fixing it properly would be far from trivial:
we can't just pass 0 for them, as they might not be scalar.

gdb/ChangeLog:

	* reply_mig_hack.awk (Error return): Cast function through
	void *, to bypass compiler function call check.
This commit is contained in:
Samuel Thibault 2020-05-30 18:38:46 +00:00
parent c6887cfb4f
commit f14871bfa4
2 changed files with 7 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2020-05-30 Samuel Thibault <samuel.thibault@ens-lyon.org>
* reply_mig_hack.awk (Error return): Cast function through
void *, to bypass compiler function call check.
2020-05-30 Samuel Thibault <samuel.thibault@ens-lyon.org>
* config/i386/i386gnu.mn (%_reply_S.c): Add dependency on

View File

@ -130,7 +130,8 @@ parse_phase == 5 && /^#if[ \t]TypeCheck/ {
# 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).
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 void * __error_call = " user_function_name ";";
print "\t OutP->RetCode = (*(kern_return_t (*)(mach_port_t, kern_return_t)) __error_call) (In0P->Head.msgh_request_port, In0P->" arg_name[0] ");";
print "\t return;";
print "\t }";
print "";