From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8958 invoked by alias); 27 Aug 2010 15:09:46 -0000 Received: (qmail 8910 invoked by uid 22791); 27 Aug 2010 15:09:44 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE X-Spam-Check-By: sourceware.org Received: from mail-pz0-f41.google.com (HELO mail-pz0-f41.google.com) (209.85.210.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 27 Aug 2010 15:09:39 +0000 Received: by pzk33 with SMTP id 33so1992542pzk.0 for ; Fri, 27 Aug 2010 08:09:37 -0700 (PDT) MIME-Version: 1.0 Received: by 10.143.28.5 with SMTP id f5mr1285472wfj.204.1282921777751; Fri, 27 Aug 2010 08:09:37 -0700 (PDT) Received: by 10.231.141.155 with HTTP; Fri, 27 Aug 2010 08:09:37 -0700 (PDT) In-Reply-To: <201008271545.47301.pedro@codesourcery.com> References: <201008271545.47301.pedro@codesourcery.com> Date: Fri, 27 Aug 2010 15:09:00 -0000 Message-ID: Subject: Re: gdbserver with -Werror, win64 socket type From: Ozkan Sezer To: Pedro Alves Cc: gdb-patches@sourceware.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-08/txt/msg00464.txt.bz2 Hi Pedro, thanks for looking into this, On Fri, Aug 27, 2010 at 5:45 PM, Pedro Alves wrote: > On Friday 27 August 2010 14:56:32, Ozkan Sezer wrote: >> Hi: >> >> gdb assumes that the windows socket handles and file descriptors can be >> used interchangeably as in unix, but it can not: > > s/gdb/gdbserver, and there is actually no such assumption. =A0The mingw Not exactly correct, see gdb/serial.h, struct serial where fd is int type and is used socket() for assigning its data. > ports of gdbserver only support socket communications, and nothing else. > > see: > > void > remote_open (char *name) > { > =A0char *port_str; > > =A0port_str =3D strchr (name, ':'); > =A0if (port_str =3D=3D NULL) > =A0 =A0{ > #ifdef USE_WIN32API > =A0 =A0 =A0error ("Only : is supported on this platform."); > #else > >> Ideas? > > Given the above, could you give this patch a try? > > -- > Pedro Alves > > --- > =A0gdb/gdbserver/event-loop.c =A0 | =A0 17 +++++++++-------- > =A0gdb/gdbserver/remote-utils.c | =A0 =A04 ++-- > =A0gdb/gdbserver/server.h =A0 =A0 =A0 | =A0 12 +++++++++--- > =A03 files changed, 20 insertions(+), 13 deletions(-) > > Index: src/gdb/gdbserver/event-loop.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- src.orig/gdb/gdbserver/event-loop.c 2010-06-16 10:58:29.000000000 +01= 00 > +++ src/gdb/gdbserver/event-loop.c =A0 =A0 =A02010-08-27 15:39:25.0000000= 00 +0100 > @@ -64,7 +64,7 @@ struct gdb_event > =A0 =A0 event_handler_func *proc; > > =A0 =A0 /* File descriptor that is ready. =A0*/ > - =A0 =A0int fd; > + =A0 =A0gdb_fildes_t fd; > > =A0 =A0 /* Next in list of events or NULL. =A0*/ > =A0 =A0 struct gdb_event *next_event; > @@ -76,7 +76,7 @@ struct gdb_event > =A0typedef struct file_handler > =A0 { > =A0 =A0 /* File descriptor. =A0*/ > - =A0 =A0int fd; > + =A0 =A0gdb_fildes_t fd; > > =A0 =A0 /* Events we want to monitor. =A0*/ > =A0 =A0 int mask; > @@ -202,7 +202,7 @@ process_event (void) > =A0{ > =A0 gdb_event *event_ptr, *prev_ptr; > =A0 event_handler_func *proc; > - =A0int fd; > + =A0gdb_fildes_t fd; > > =A0 /* Look in the event queue to find an event that is ready > =A0 =A0 =A0to be processed. =A0*/ > @@ -332,7 +332,7 @@ process_callback (void) > =A0 =A0occurs for FD. =A0CLIENT_DATA is the argument to pass to PROC. =A0= */ > > =A0static void > -create_file_handler (int fd, int mask, handler_func *proc, > +create_file_handler (gdb_fildes_t fd, int mask, handler_func *proc, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 gdb_client_data client_data) > =A0{ > =A0 file_handler *file_ptr; > @@ -382,7 +382,8 @@ create_file_handler (int fd, int mask, h > =A0/* Wrapper function for create_file_handler. =A0*/ > > =A0void > -add_file_handler (int fd, handler_func *proc, gdb_client_data client_dat= a) > +add_file_handler (gdb_fildes_t fd, > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 handler_func *proc, gdb_client_data cli= ent_data) > =A0{ > =A0 create_file_handler (fd, GDB_READABLE | GDB_EXCEPTION, proc, client_d= ata); > =A0} > @@ -391,7 +392,7 @@ add_file_handler (int fd, handler_func * > =A0 =A0i.e. we don't care anymore about events on the FD. =A0*/ > > =A0void > -delete_file_handler (int fd) > +delete_file_handler (gdb_fildes_t fd) > =A0{ > =A0 file_handler *file_ptr, *prev_ptr =3D NULL; > =A0 int i; > @@ -454,7 +455,7 @@ delete_file_handler (int fd) > =A0 =A0event in the front of the event queue. =A0*/ > > =A0static int > -handle_file_event (int event_file_desc) > +handle_file_event (gdb_fildes_t event_file_desc) > =A0{ > =A0 file_handler *file_ptr; > =A0 int mask; > @@ -502,7 +503,7 @@ handle_file_event (int event_file_desc) > =A0 =A0associated to FD when it was registered with the event loop. =A0*/ > > =A0static gdb_event * > -create_file_event (int fd) > +create_file_event (gdb_fildes_t fd) > =A0{ > =A0 gdb_event *file_event_ptr; > > Index: src/gdb/gdbserver/remote-utils.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- src.orig/gdb/gdbserver/remote-utils.c =A0 =A0 =A0 2010-08-26 19:32:03= .000000000 +0100 > +++ src/gdb/gdbserver/remote-utils.c =A0 =A02010-08-27 15:37:02.000000000= +0100 > @@ -107,8 +107,8 @@ struct sym_cache > =A0int remote_debug =3D 0; > =A0struct ui_file *gdb_stdlog; > > -static int remote_desc =3D INVALID_DESCRIPTOR; > -static int listen_desc =3D INVALID_DESCRIPTOR; > +static gdb_fildes_t remote_desc =3D INVALID_DESCRIPTOR; > +static gdb_fildes_t listen_desc =3D INVALID_DESCRIPTOR; > > =A0/* FIXME headerize? */ > =A0extern int using_threads; > Index: src/gdb/gdbserver/server.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- src.orig/gdb/gdbserver/server.h =A0 =A0 2010-07-19 15:47:22.000000000= +0100 > +++ src/gdb/gdbserver/server.h =A02010-08-27 15:40:30.000000000 +0100 > @@ -334,13 +334,19 @@ extern int disable_packet_qfThreadInfo; > =A0extern int multi_process; > =A0extern int non_stop; > > +#if USE_WIN32API I had to insert a #include here but, then ... > +typedef SOCKET gdb_fildes_t; > +#else > +typedef int gdb_fildes_t; > +#endif > + > =A0/* Functions from event-loop.c. =A0*/ > =A0typedef void *gdb_client_data; > -typedef int (handler_func) (int, gdb_client_data); > +typedef int (handler_func) (gdb_fildes_t, gdb_client_data); > =A0typedef int (callback_handler_func) (gdb_client_data); > > -extern void delete_file_handler (int fd); > -extern void add_file_handler (int fd, handler_func *proc, > +extern void delete_file_handler (gdb_fildes_t fd); > +extern void add_file_handler (gdb_fildes_t fd, handler_func *proc, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0gdb_client_dat= a client_data); > =A0extern int append_callback_event (callback_handler_func *proc, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 gdb_c= lient_data client_data); > ... I get these: ../../../gdb-cvs/gdb/gdbserver/event-loop.c: In function 'handle_file_event= ': ../../../gdb-cvs/gdb/gdbserver/event-loop.c:476: error: format '%d' expects type 'int', but argument 3 has type 'gdb_fildes_t' ../../../gdb-cvs/gdb/gdbserver/event-loop.c: In function 'create_file_event= ': ../../../gdb-cvs/gdb/gdbserver/event-loop.c:511: error: assignment from incompatible pointer type -- Ozkan