gdb: care for dynamic objfiles in build_id_bfd_get ()
authorJan Vrany <jan.vrany@labware.com>
Wed, 18 Jan 2023 11:34:37 +0000 (11:34 +0000)
committerJan Vrany <jan.vrany@labware.com>
Wed, 18 Jan 2023 11:34:37 +0000 (11:34 +0000)
Accessing gdb.Objfile.build_id caused GDB to crash when objfile is
dynamic, that is created by JIT reader API.

The issue was NULL-pointer dereferencing in build_id_bfd_get () because
dynamic objfiles have no underlaying BFD structure. This commit fixes
the problem by a NULL-check in build_id_bfd_get ().

gdb/build-id.c
gdb/testsuite/gdb.base/jit-reader.exp

index c82f96402c828f13c1a980e0128a912f562c49ea..801eb004ad736f82c70185057252464a02706654 100644 (file)
 const struct bfd_build_id *
 build_id_bfd_get (bfd *abfd)
 {
+  /* Dynamic objfiles such as ones created by JIT reader API
+     have no underlaying bfd structure (that is, objfile->obfd
+     is NULL).  */
+  if (abfd == nullptr)
+    return nullptr;
+
   if (!bfd_check_format (abfd, bfd_object)
       && !bfd_check_format (abfd, bfd_core))
     return NULL;
index fd0c5f56d6ef47aefcb096d9814b749020f795bc..399cb67dcce8d1a7519a1b20b9847ca3256ea4cb 100644 (file)
@@ -227,6 +227,10 @@ proc jit_reader_test {} {
                gdb_test "python print(list(map(lambda objf : objf.filename, gdb.objfiles())))" \
                    "$any'<< JIT compiled code at $hex >>'$any" \
                    "python gdb.Objfile.filename"
+
+               gdb_test "python print( \[o for o in gdb.objfiles() if o.filename.startswith('<< JIT compiled code')\]\[0\].build_id )" \
+                   "None" \
+                   "python gdb.Objfile.build_id"
            }
        }
     }