MINOR: debug: place a magic pattern at the beginning of post_mortem
authorWilly Tarreau <w@1wt.eu>
Thu, 24 Oct 2024 09:56:07 +0000 (11:56 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 24 Oct 2024 14:55:20 +0000 (16:55 +0200)
In order to ease finding of the post_mortem struct in core dumps, let's
make it start with a recognizable pattern of exactly 32 chars (to
preserve alignment):

  "POST-MORTEM STARTS HERE+7654321\0"

It can then be found like this from gdb:

  (gdb) find 0x000000012345678, 0x0000000100000000, 'P','O','S','T','-','M','O','R','T','E','M'
  0xcfd300 <post_mortem>
  1 pattern found.

Or easier with any other more practical tool (who as ever used "find" in
gdb, given that it cannot iterate over maps and is 100% useless?).

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

src/debug.c

index e79291d..24a2b06 100644 (file)
@@ -93,6 +93,7 @@ struct post_mortem_component {
  */
 struct post_mortem {
        /* platform-specific information */
+       char post_mortem_magic[32];     // "POST-MORTEM STARTS HERE+7654321\0"
        struct {
                struct utsname utsname; // OS name+ver+arch+hostname
                char hw_vendor[64];     // hardware/hypervisor vendor when known
@@ -2307,6 +2308,10 @@ static void feed_post_mortem_linux()
 
 static int feed_post_mortem()
 {
+       /* write an easily identifiable magic at the beginning of the struct */
+       strncpy(post_mortem.post_mortem_magic,
+               "POST-MORTEM STARTS HERE+7654321\0",
+               sizeof(post_mortem.post_mortem_magic));
        /* kernel type, version and arch */
        uname(&post_mortem.platform.utsname);