Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: John Baldwin <jhb@freebsd.org>, gdb@sourceware.org
Subject: Re: C++ conversion status update
Date: Sat, 16 Apr 2016 00:21:00 -0000	[thread overview]
Message-ID: <5711857D.8030708@redhat.com> (raw)
In-Reply-To: <3244238.TJBgqNL2lm@ralph.baldwin.cx>

Hi John,

Finally managed to get back to the ptrace prototype detection issue.

On 01/20/2016 11:33 PM, John Baldwin wrote:

> I see that you also have a patch (41bed896a) in that branch to fix ptrace()
> args detection (which also broke for me, though I just hacked config.h locally
> so I could work on the actual problems).
> 
> Unfortunately, your patch doesn't fix FreeBSD/amd64 with GCC 4.8 (at least).
> The detection of the ptrace return type ('int' on FreeBSD) fails and falls
> back to long and I think that prevents it from subsequently matching on the
> correct types for the argument list.
> 
> The error for the failing test for the return type (which should work instead
> I think) is:
> 
> configure:12453: /usr/local/bin/g++48 -c -pipe -DRL_NO_COMPAT -Wno-unused-function -Wno-unused-variable  -g -DLIBICONV_PLUG -g -fno-strict-aliasing  -DLIBICONV_PLUG  conftest.cpp >&5
> conftest.cpp:166:22: error: declaration of C function 'int ptrace()' conflicts with
>  EXTERN_C int ptrace ();
>                       ^
> In file included from conftest.cpp:154:0:
> /usr/include/sys/ptrace.h:185:5: error: previous declaration 'int ptrace(int, pid_t, caddr_t, int)' here
>  int ptrace(int _request, pid_t _pid, caddr_t _addr, int _data);
>      ^
> configure:12453: $? = 1
> configure: failed program was:
> ....
> | EXTERN_C int ptrace ();
> | 
> | int
> | main ()
> | {
> | 
> |   ;
> |   return 0;
> | }
> configure:12462: result: long
> configure:12470: checking types of arguments for ptrace
> 
> I think the problem is that whereas in C "int foo()" means the args to foo()
> are undefined, "int foo()" in C++ is equivalent to "int foo(void)".
> 
> I know that a comment in ptrace.ac4 mentions that C++ needs to be used to
> determine if the first argument to ptrace is an enum that needs a cast,
> but I wonder if we couldn't fall back to plain C for the return type
> check?  (I'm not sure which of the tests in ptrace.ac4 needs C++ to make
> the enum determination such that we could possibly shuffle things around
> to do the one test needed while in C++ mode and the rest in C?)
> 
> Another possibility would be to move the return type check into the big
> loop that currently checks the arguments as an outermost loop, something
> like:
> 
> for gdb_ret in 'int' 'long'; do
>   for gdb_arg1 in 'int' 'long'; do
>     ...
> 
> This would work in C++ mode I think.

Yes, agreed.  I've sent a patch that does that to the
list now:

 https://sourceware.org/ml/gdb-patches/2016-04/msg00374.html

If you could give it a try it'd be much appreciated.  I've pushed
it to the users/palves/ptrace-detection branch (at sourceware.org)
as well, for convenience.

Thanks,
Pedro Alves


  parent reply	other threads:[~2016-04-16  0:21 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-24 13:07 Pedro Alves
2015-12-14 14:40 ` Yao Qi
2015-12-14 19:09   ` Pedro Alves
2015-12-15 11:39     ` Jose E. Marchesi
2015-12-15 20:03       ` Simon Marchi
2015-12-16  0:19         ` Pedro Alves
2015-12-16  0:21           ` Pedro Alves
2015-12-16  1:19             ` Simon Marchi
2015-12-16 20:11               ` Pedro Alves
2015-12-16 20:15       ` Pedro Alves
2015-12-16 20:30         ` Simon Marchi
2015-12-16 22:10           ` Pedro Alves
2015-12-16 22:59             ` Pedro Alves
2016-01-19 19:00     ` John Baldwin
2016-01-20 11:10       ` Pedro Alves
2016-01-20 23:33         ` John Baldwin
2016-01-21 11:38           ` Pedro Alves
2016-04-16  0:21           ` Pedro Alves [this message]
2016-04-18 16:51             ` Pedro Alves
2016-04-19 19:26               ` John Baldwin
2016-04-19 20:36                 ` Pedro Alves
2016-04-19 21:40                   ` John Baldwin
2016-04-19 22:20                     ` Pedro Alves
2016-04-13  0:25     ` Pedro Alves
2016-04-13 11:07       ` Yao Qi
2016-04-13 14:13         ` Pedro Alves
2016-04-13 14:31           ` Sergio Durigan Junior
2016-04-13 12:41       ` Joel Brobecker
2016-04-13 14:04         ` Pedro Alves
2016-04-13 14:16           ` Joel Brobecker
2016-04-13 14:27             ` Luis Machado
2016-04-13 14:35             ` Marc Khouzam
2016-04-13 14:59               ` Joel Brobecker
2016-04-13 14:40             ` Pedro Alves
2016-04-18 17:29               ` Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5711857D.8030708@redhat.com \
    --to=palves@redhat.com \
    --cc=gdb@sourceware.org \
    --cc=jhb@freebsd.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox