aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2020-05-30 18:38:46 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2020-05-30 18:40:34 +0000
commitf14871bfa408cf499e1783bc3e2aabb1bd3cf9a7 (patch)
tree195c4f4fd58feb66d7af73c953b4a1790e0303ab
parentc6887cfb4ffb80337618138f4f302eb1bfb6df8a (diff)
downloadgdb-f14871bfa408cf499e1783bc3e2aabb1bd3cf9a7.zip
gdb-f14871bfa408cf499e1783bc3e2aabb1bd3cf9a7.tar.gz
gdb-f14871bfa408cf499e1783bc3e2aabb1bd3cf9a7.tar.bz2
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.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/reply_mig_hack.awk3
2 files changed, 7 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 36e1659..019e900 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
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
$(srcdir)/reply_mig_hack.awk.
diff --git a/gdb/reply_mig_hack.awk b/gdb/reply_mig_hack.awk
index 52ab90b..6ff683a 100644
--- a/gdb/reply_mig_hack.awk
+++ b/gdb/reply_mig_hack.awk
@@ -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 "";