MINOR: debug: report the task handler's pointer relative to main
authorWilly Tarreau <w@1wt.eu>
Tue, 3 Mar 2020 06:04:42 +0000 (07:04 +0100)
committerWilly Tarreau <w@1wt.eu>
Tue, 31 Mar 2020 09:57:34 +0000 (11:57 +0200)
Often in crash dumps we see unknown function pointers. Let's display
them relative to main, that helps quite a lot figure the function
from an executable, for example:

  (gdb) x/a main+645360
  0x4c56a0 <h1_timeout_task>:     0x2e6666666666feeb

This could be backported to 2.0.

(cherry picked from commit 516853f1cc144bfe5d0010fc12d5f385341e67ab)
Signed-off-by: Willy Tarreau <w@1wt.eu>

src/debug.c

index fe2fe31..45d0c4f 100644 (file)
@@ -96,6 +96,7 @@ void ha_task_dump(struct buffer *buf, const struct task *task, const char *pfx)
        const struct stream *s = NULL;
        const struct appctx __maybe_unused *appctx = NULL;
        struct hlua __maybe_unused *hlua = NULL;
+       extern int main(int, char **);
 
        if (!task) {
                chunk_appendf(buf, "0\n");
@@ -116,9 +117,11 @@ void ha_task_dump(struct buffer *buf, const struct task *task, const char *pfx)
                              task->call_date ? " ns ago" : "");
 
        chunk_appendf(buf, "%s"
-                     "  fct=%p (%s) ctx=%p",
+                     "  fct=%p=main%s%ld (%s) ctx=%p",
                      pfx,
                      task->process,
+                     ((void *)task->process - (void *)main) < 0 ? "" : "+",
+                     (long)((void *)task->process - (void *)main),
                      task->process == process_stream ? "process_stream" :
                      task->process == task_run_applet ? "task_run_applet" :
                      task->process == si_cs_io_cb ? "si_cs_io_cb" :