This is the mail archive of the
mailing list for the elfutils project.
Re: missing #include <dwarf.h> in libdw.h?
On Tue, 2017-10-03 at 19:30 +0000, Bill Williams wrote:
> libdw.h uses the DW_CIE_ID_64 define from dwarf.h in a macro
> definition, but does not itself include dwarf.h. This makes the
> libdw.h header not self-contained if and only if your code uses the
> dwarf_cfi_cie_p macro. Is this behavior by design, or a bug?
I don't think this is by design. It seems a bug nobody noticed before
because people often do include dwarf.h also. But nothing else
explicitly needs the dwarf.h constants. It would probably not break
anything to explicitly include dwarf.h in libdw.h, but it seems better
to just define this constant explicitly in libdw.h as the attached
patch does. Does that make sense to you?
From 251bb1c8c4a0a523791874c14826c391173bce4c Mon Sep 17 00:00:00 2001
From: Mark Wielaard <email@example.com>
Date: Tue, 3 Oct 2017 23:08:01 +0200
Subject: [PATCH] libdw: Define LIBDW_CIE_ID and use it in dwarf_cfi_cie_p.
dwarf_cfi_cie_p used DW_CIE_ID_64 from dwarf.h which meant you had
to include dwarf.h just to use the dwarf_cfi_cie_p macros. Just define
the constant as LIBDW_CIE_ID in libdw.h to keep it independent.
Signed-off-by: Mark Wielaard <firstname.lastname@example.org>
libdw/ChangeLog | 4 ++++
libdw/libdw.h | 4 +++-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/libdw/ChangeLog b/libdw/ChangeLog
index 94e9c9a..e6e7f3b 100644
@@ -1,3 +1,7 @@
+2017-10-03 Mark Wielaard <email@example.com>
+ * libdw.h: Define LIBDW_CIE_ID and use it in dwarf_cfi_cie_p.
2017-08-18 Ulf Hermann <firstname.lastname@example.org>
* memory-access.h: Use attribute_packed.
diff --git a/libdw/libdw.h b/libdw/libdw.h
index 63a38ff..e42c087 100644
@@ -211,7 +211,9 @@ typedef union
-#define dwarf_cfi_cie_p(entry) ((entry)->cie.CIE_id == DW_CIE_ID_64)
+/* Same as DW_CIE_ID_64 from dwarf.h to keep libdw.h independent. */
+#define LIBDW_CIE_ID 0xffffffffffffffffULL
+#define dwarf_cfi_cie_p(entry) ((entry)->cie.CIE_id == LIBDW_CIE_ID)
/* Opaque type representing a frame state described by CFI. */
typedef struct Dwarf_Frame_s Dwarf_Frame;