This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: gdbserver with -Werror, win64 socket type


Hi Pedro, thanks for looking into this,

On Fri, Aug 27, 2010 at 5:45 PM, Pedro Alves <pedro@codesourcery.com> 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. ?The 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)
> {
> ?char *port_str;
>
> ?port_str = strchr (name, ':');
> ?if (port_str == NULL)
> ? ?{
> #ifdef USE_WIN32API
> ? ? ?error ("Only <host>:<port> is supported on this platform.");
> #else

>
>> Ideas?
>
> Given the above, could you give this patch a try?
>
> --
> Pedro Alves
>
> ---
> ?gdb/gdbserver/event-loop.c ? | ? 17 +++++++++--------
> ?gdb/gdbserver/remote-utils.c | ? ?4 ++--
> ?gdb/gdbserver/server.h ? ? ? | ? 12 +++++++++---
> ?3 files changed, 20 insertions(+), 13 deletions(-)
>
> Index: src/gdb/gdbserver/event-loop.c
> ===================================================================
> --- src.orig/gdb/gdbserver/event-loop.c 2010-06-16 10:58:29.000000000 +0100
> +++ src/gdb/gdbserver/event-loop.c ? ? ?2010-08-27 15:39:25.000000000 +0100
> @@ -64,7 +64,7 @@ struct gdb_event
> ? ? event_handler_func *proc;
>
> ? ? /* File descriptor that is ready. ?*/
> - ? ?int fd;
> + ? ?gdb_fildes_t fd;
>
> ? ? /* Next in list of events or NULL. ?*/
> ? ? struct gdb_event *next_event;
> @@ -76,7 +76,7 @@ struct gdb_event
> ?typedef struct file_handler
> ? {
> ? ? /* File descriptor. ?*/
> - ? ?int fd;
> + ? ?gdb_fildes_t fd;
>
> ? ? /* Events we want to monitor. ?*/
> ? ? int mask;
> @@ -202,7 +202,7 @@ process_event (void)
> ?{
> ? gdb_event *event_ptr, *prev_ptr;
> ? event_handler_func *proc;
> - ?int fd;
> + ?gdb_fildes_t fd;
>
> ? /* Look in the event queue to find an event that is ready
> ? ? ?to be processed. ?*/
> @@ -332,7 +332,7 @@ process_callback (void)
> ? ?occurs for FD. ?CLIENT_DATA is the argument to pass to PROC. ?*/
>
> ?static void
> -create_file_handler (int fd, int mask, handler_func *proc,
> +create_file_handler (gdb_fildes_t fd, int mask, handler_func *proc,
> ? ? ? ? ? ? ? ? ? ? gdb_client_data client_data)
> ?{
> ? file_handler *file_ptr;
> @@ -382,7 +382,8 @@ create_file_handler (int fd, int mask, h
> ?/* Wrapper function for create_file_handler. ?*/
>
> ?void
> -add_file_handler (int fd, handler_func *proc, gdb_client_data client_data)
> +add_file_handler (gdb_fildes_t fd,
> + ? ? ? ? ? ? ? ? handler_func *proc, gdb_client_data client_data)
> ?{
> ? create_file_handler (fd, GDB_READABLE | GDB_EXCEPTION, proc, client_data);
> ?}
> @@ -391,7 +392,7 @@ add_file_handler (int fd, handler_func *
> ? ?i.e. we don't care anymore about events on the FD. ?*/
>
> ?void
> -delete_file_handler (int fd)
> +delete_file_handler (gdb_fildes_t fd)
> ?{
> ? file_handler *file_ptr, *prev_ptr = NULL;
> ? int i;
> @@ -454,7 +455,7 @@ delete_file_handler (int fd)
> ? ?event in the front of the event queue. ?*/
>
> ?static int
> -handle_file_event (int event_file_desc)
> +handle_file_event (gdb_fildes_t event_file_desc)
> ?{
> ? file_handler *file_ptr;
> ? int mask;
> @@ -502,7 +503,7 @@ handle_file_event (int event_file_desc)
> ? ?associated to FD when it was registered with the event loop. ?*/
>
> ?static gdb_event *
> -create_file_event (int fd)
> +create_file_event (gdb_fildes_t fd)
> ?{
> ? gdb_event *file_event_ptr;
>
> Index: src/gdb/gdbserver/remote-utils.c
> ===================================================================
> --- src.orig/gdb/gdbserver/remote-utils.c ? ? ? 2010-08-26 19:32:03.000000000 +0100
> +++ src/gdb/gdbserver/remote-utils.c ? ?2010-08-27 15:37:02.000000000 +0100
> @@ -107,8 +107,8 @@ struct sym_cache
> ?int remote_debug = 0;
> ?struct ui_file *gdb_stdlog;
>
> -static int remote_desc = INVALID_DESCRIPTOR;
> -static int listen_desc = INVALID_DESCRIPTOR;
> +static gdb_fildes_t remote_desc = INVALID_DESCRIPTOR;
> +static gdb_fildes_t listen_desc = INVALID_DESCRIPTOR;
>
> ?/* FIXME headerize? */
> ?extern int using_threads;
> Index: src/gdb/gdbserver/server.h
> ===================================================================
> --- src.orig/gdb/gdbserver/server.h ? ? 2010-07-19 15:47:22.000000000 +0100
> +++ src/gdb/gdbserver/server.h ?2010-08-27 15:40:30.000000000 +0100
> @@ -334,13 +334,19 @@ extern int disable_packet_qfThreadInfo;
> ?extern int multi_process;
> ?extern int non_stop;
>
> +#if USE_WIN32API

I had to insert a #include <winsock2.h> here but, then ...

> +typedef SOCKET gdb_fildes_t;
> +#else
> +typedef int gdb_fildes_t;
> +#endif
> +
> ?/* Functions from event-loop.c. ?*/
> ?typedef void *gdb_client_data;
> -typedef int (handler_func) (int, gdb_client_data);
> +typedef int (handler_func) (gdb_fildes_t, gdb_client_data);
> ?typedef 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,
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?gdb_client_data client_data);
> ?extern int append_callback_event (callback_handler_func *proc,
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? gdb_client_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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]