hurd: make function cast stronger
authorSamuel Thibault <samuel.thibault@ens-lyon.org>
Sat, 30 May 2020 18:38:46 +0000 (18:38 +0000)
committerSamuel Thibault <samuel.thibault@ens-lyon.org>
Sat, 30 May 2020 18:40:34 +0000 (18:40 +0000)
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.

gdb/ChangeLog
gdb/reply_mig_hack.awk

index 36e16590b04d37e8dc0b2a641b42f23847fb2562..019e9000d0438bb61fa07a491af07dc0b92d8b18 100644 (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
index 52ab90bba39ce57be1880d8236edaf314ed57355..6ff683a841bbe99710eff4335bc3a8930b17138f 100644 (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 "";