MINOR: debug: report the task handler's pointer relative to main

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>
(cherry picked from commit 68eb0aa9e688024b4842022fc7c73984d0806d98)
Signed-off-by: Willy Tarreau <w@1wt.eu>
diff --git a/src/debug.c b/src/debug.c
index 79bea88..cfb4690 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -93,6 +93,7 @@
 	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");
@@ -113,9 +114,11 @@
 		              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" :