]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
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, 3 Mar 2020 06:04:42 +0000 (07:04 +0100)
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.

src/debug.c

index 717719fe6215d9308c1f5d90f15914372f2ff3f1..3c18ff0801c7e1b90116061f784b32cb98c100f9 100644 (file)
@@ -101,6 +101,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");
@@ -121,9 +122,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" :