gdb: give names to async event/signal handlers
authorSimon Marchi <simon.marchi@polymtl.ca>
Fri, 2 Oct 2020 18:44:38 +0000 (14:44 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Fri, 2 Oct 2020 18:47:06 +0000 (14:47 -0400)
Assign names to async event/signal handlers.  They will be used in debug
messages when file handlers are invoked.

Unlike in the previous patch, the names are not copied in the structure,
since we don't need to (all names are string literals for the moment).

gdb/ChangeLog:

* async-event.h (create_async_signal_handler): Add name
parameter.
(create_async_event_handler): Likewise.
* async-event.c (struct async_signal_handler) <name>: New field.
(struct async_event_handler) <name>: New field.
(create_async_signal_handler): Assign name.
(create_async_event_handler): Assign name.
* event-top.c (async_init_signals): Pass name when creating
handler.
* infrun.c (_initialize_infrun): Likewise.
* record-btrace.c (record_btrace_push_target): Likewise.
* record-full.c (record_full_open): Likewise.
* remote-notif.c (remote_notif_state_allocate): Likewise.
* remote.c (remote_target::open_1): Likewise.
* tui/tui-win.c (tui_initialize_win): Likewise.

Change-Id: Icd9d9f775542ae5fc2cd148c12f481e7885936d5

gdb/ChangeLog
gdb/async-event.c
gdb/async-event.h
gdb/event-top.c
gdb/infrun.c
gdb/record-btrace.c
gdb/record-full.c
gdb/remote-notif.c
gdb/remote.c
gdb/tui/tui-win.c

index 48caf1e9057910e449d4d2f5c7af4a6c534cb179..3b60116d273aca379558f8c2302bf2caa88549d6 100644 (file)
@@ -1,3 +1,21 @@
+2020-10-02  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       * async-event.h (create_async_signal_handler): Add name
+       parameter.
+       (create_async_event_handler): Likewise.
+       * async-event.c (struct async_signal_handler) <name>: New field.
+       (struct async_event_handler) <name>: New field.
+       (create_async_signal_handler): Assign name.
+       (create_async_event_handler): Assign name.
+       * event-top.c (async_init_signals): Pass name when creating
+       handler.
+       * infrun.c (_initialize_infrun): Likewise.
+       * record-btrace.c (record_btrace_push_target): Likewise.
+       * record-full.c (record_full_open): Likewise.
+       * remote-notif.c (remote_notif_state_allocate): Likewise.
+       * remote.c (remote_target::open_1): Likewise.
+       * tui/tui-win.c (tui_initialize_win): Likewise.
+
 2020-10-02  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * async-event.c (initialize_async_signal_handlers): Pass name to
index e5cd63e309e4c20195425e1498bec35d6911a208..55be014484e5d22c1aeb0fca575bdc04105eed09 100644 (file)
@@ -46,6 +46,9 @@ struct async_signal_handler
 
   /* Argument to PROC.  */
   gdb_client_data client_data;
+
+  /* User-friendly name of this handler.  */
+  const char *name;
 };
 
 /* PROC is a function to be invoked when the READY flag is set.  This
@@ -68,6 +71,9 @@ struct async_event_handler
 
   /* Argument to PROC.  */
   gdb_client_data client_data;
+
+  /* User-friendly name of this handler.  */
+  const char *name;
 };
 
 /* All the async_signal_handlers gdb is interested in are kept onto
@@ -127,7 +133,8 @@ initialize_async_signal_handlers (void)
    whenever the handler is invoked.  */
 async_signal_handler *
 create_async_signal_handler (sig_handler_func * proc,
-                            gdb_client_data client_data)
+                            gdb_client_data client_data,
+                            const char *name)
 {
   async_signal_handler *async_handler_ptr;
 
@@ -136,6 +143,7 @@ create_async_signal_handler (sig_handler_func * proc,
   async_handler_ptr->next_handler = NULL;
   async_handler_ptr->proc = proc;
   async_handler_ptr->client_data = client_data;
+  async_handler_ptr->name = name;
   if (sighandler_list.first_handler == NULL)
     sighandler_list.first_handler = async_handler_ptr;
   else
@@ -236,13 +244,12 @@ delete_async_signal_handler (async_signal_handler ** async_handler_ptr)
   (*async_handler_ptr) = NULL;
 }
 
-/* Create an asynchronous event handler, allocating memory for it.
-   Return a pointer to the newly created handler.  PROC is the
-   function to call with CLIENT_DATA argument whenever the handler is
-   invoked.  */
+/* See async-event.h.  */
+
 async_event_handler *
 create_async_event_handler (async_event_handler_func *proc,
-                           gdb_client_data client_data)
+                           gdb_client_data client_data,
+                           const char *name)
 {
   async_event_handler *h;
 
@@ -251,6 +258,7 @@ create_async_event_handler (async_event_handler_func *proc,
   h->next_handler = NULL;
   h->proc = proc;
   h->client_data = client_data;
+  h->name = name;
   if (async_event_handler_list.first_handler == NULL)
     async_event_handler_list.first_handler = h;
   else
index adf6dc8f8c4b800007d94f0ac6c87dd44fb3a5ea..8f279d63d63c1c8ebd2a472c0003759e5bb6362d 100644 (file)
@@ -27,8 +27,9 @@ typedef void (sig_handler_func) (gdb_client_data);
 typedef void (async_event_handler_func) (gdb_client_data);
 
 extern struct async_signal_handler *
-  create_async_signal_handler (sig_handler_func *proc, 
-                              gdb_client_data client_data);
+  create_async_signal_handler (sig_handler_func *proc,
+                              gdb_client_data client_data,
+                              const char *name);
 extern void delete_async_signal_handler (struct async_signal_handler **);
 
 /* Call the handler from HANDLER the next time through the event
@@ -48,10 +49,16 @@ extern void clear_async_signal_handler (struct async_signal_handler *handler);
    and set PROC as its callback.  CLIENT_DATA is passed as argument to
    PROC upon its invocation.  Returns a pointer to an opaque structure
    used to mark as ready and to later delete this event source from
-   the event loop.  */
+   the event loop.
+
+   NAME is a user-friendly name for the handler, used in debug statements.  The
+   name is not copied: its lifetime should be at least as long as that of the
+   handler.  */
+
 extern struct async_event_handler *
   create_async_event_handler (async_event_handler_func *proc,
-                             gdb_client_data client_data);
+                             gdb_client_data client_data,
+                             const char *name);
 
 /* Remove the event source pointed by HANDLER_PTR created by
    CREATE_ASYNC_EVENT_HANDLER from the event loop, and release it.  */
index c96f10450dda89d77d49227506d7488e4b44072f..fdce5de6f429e07aeefe0b3594b91a95f307cd32 100644 (file)
@@ -916,10 +916,10 @@ async_init_signals (void)
 
   signal (SIGINT, handle_sigint);
   sigint_token =
-    create_async_signal_handler (async_request_quit, NULL);
+    create_async_signal_handler (async_request_quit, NULL, "sigint");
   signal (SIGTERM, handle_sigterm);
   async_sigterm_token
-    = create_async_signal_handler (async_sigterm_handler, NULL);
+    = create_async_signal_handler (async_sigterm_handler, NULL, "sigterm");
 
   /* If SIGTRAP was set to SIG_IGN, then the SIG_IGN will get passed
      to the inferior and breakpoints will be ignored.  */
@@ -938,23 +938,23 @@ async_init_signals (void)
      to SIG_DFL for us.  */
   signal (SIGQUIT, handle_sigquit);
   sigquit_token =
-    create_async_signal_handler (async_do_nothing, NULL);
+    create_async_signal_handler (async_do_nothing, NULL, "sigquit");
 #endif
 #ifdef SIGHUP
   if (signal (SIGHUP, handle_sighup) != SIG_IGN)
     sighup_token =
-      create_async_signal_handler (async_disconnect, NULL);
+      create_async_signal_handler (async_disconnect, NULL, "sighup");
   else
     sighup_token =
-      create_async_signal_handler (async_do_nothing, NULL);
+      create_async_signal_handler (async_do_nothing, NULL, "sighup");
 #endif
   signal (SIGFPE, handle_sigfpe);
   sigfpe_token =
-    create_async_signal_handler (async_float_handler, NULL);
+    create_async_signal_handler (async_float_handler, NULL, "sigfpe");
 
 #ifdef SIGTSTP
   sigtstp_token =
-    create_async_signal_handler (async_sigtstp_handler, NULL);
+    create_async_signal_handler (async_sigtstp_handler, NULL, "sigtstp");
 #endif
 
   install_handle_sigsegv ();
index a150585bd5adf7f18dce9ff532d02f92ea626eee..0458c3acb9d4964a88a0da7562020e10375dbdd1 100644 (file)
@@ -9278,7 +9278,8 @@ _initialize_infrun ()
 
   /* Register extra event sources in the event loop.  */
   infrun_async_inferior_event_token
-    = create_async_event_handler (infrun_async_inferior_event_handler, NULL);
+    = create_async_event_handler (infrun_async_inferior_event_handler, NULL,
+                                 "infrun");
 
   add_info ("signals", info_signals_command, _("\
 What debugger does when program gets various signals.\n\
index 678984baeb6a8bc68a3dfa1e2a6d3df21fbae2ac..dd05b932c1eda66b02dd1dd8a40bda9d12be2128 100644 (file)
@@ -342,7 +342,7 @@ record_btrace_push_target (void)
 
   record_btrace_async_inferior_event_handler
     = create_async_event_handler (record_btrace_handle_async_inferior_event,
-                                 NULL);
+                                 NULL, "record-btrace");
   record_btrace_generating_corefile = 0;
 
   format = btrace_format_short_string (record_btrace_conf.format);
index c0fedfc32e158fd4397111323001f66cefe3d657..9a6187e8104f9afec8d778b7f4ca816298e8e458 100644 (file)
@@ -986,7 +986,7 @@ record_full_open (const char *name, int from_tty)
   /* Register extra event sources in the event loop.  */
   record_full_async_inferior_event_token
     = create_async_event_handler (record_full_async_inferior_event_handler,
-                                 NULL);
+                                 NULL, "record-full");
 
   record_full_init_record_breakpoints ();
 
index 2e5f124284ba57265738a232803add4cb173c06a..f18bc8678e3868662a4fb47fb620304b7787781d 100644 (file)
@@ -219,7 +219,7 @@ remote_notif_state_allocate (remote_target *remote)
 
   notif_state->get_pending_events_token
     = create_async_event_handler (remote_async_get_pending_events_handler,
-                                 notif_state);
+                                 notif_state, "remote-notif");
 
   return notif_state;
 }
index 1ef9b44f731e42b96e45f829d7ca0d13abad223b..f95148643f81bc2ab09a7575d6fd076d1c6312f1 100644 (file)
@@ -5605,7 +5605,8 @@ remote_target::open_1 (const char *name, int from_tty, int extended_p)
 
   /* Register extra event sources in the event loop.  */
   rs->remote_async_inferior_event_token
-    = create_async_event_handler (remote_async_inferior_event_handler, remote);
+    = create_async_event_handler (remote_async_inferior_event_handler, remote,
+                                 "remote");
   rs->notif_state = remote_notif_state_allocate (remote);
 
   /* Reset the target state; these things will be queried either by
index f906b0dc4fea4a64cb70efef12c748ad1ef9aaee..86c0fdba2bc19e3777fa7b2e33b6406035b53cc4 100644 (file)
@@ -576,7 +576,8 @@ tui_initialize_win (void)
 {
 #ifdef SIGWINCH
   tui_sigwinch_token
-    = create_async_signal_handler (tui_async_resize_screen, NULL);
+    = create_async_signal_handler (tui_async_resize_screen, NULL,
+                                  "tui-sigwinch");
 
   {
 #ifdef HAVE_SIGACTION