From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 95C6F3858410; Sat, 4 Feb 2023 22:04:07 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 95C6F3858410 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1675548247; bh=x8x91CL8oww8s7oTiYMMmzDJoH8SuYTLaHy9v1xUO/Y=; h=From:To:Subject:Date:In-Reply-To:References:From; b=n/DRWnaF5BoY4doShmYKfvsg1d5gkUKi+2NCJfA+0l9CaWqM2o4vZcn6M+exXj81/ nlDkqezWzcQysntq8Mr0whVGWlm3Cfw/F0q6YpGdGIJ+qQtGfnamm5TPA8Xd+/+5eG zHAN78akJKQ7/Sldyk/8mxc4tGgcyk22x8UKEz3I= From: "dje at sourceware dot org" To: elfutils-devel@sourceware.org Subject: [Bug libdw/30077] Duplicate definition of typedef struct debuginfod_client in libdwfl Date: Sat, 04 Feb 2023 22:04:07 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: elfutils X-Bugzilla-Component: libdw X-Bugzilla-Version: unspecified X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: dje at sourceware dot org X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P2 X-Bugzilla-Assigned-To: unassigned at sourceware dot org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://sourceware.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 List-Id: https://sourceware.org/bugzilla/show_bug.cgi?id=3D30077 --- Comment #3 from David Edelsohn --- The proposed patch in Comment #1 will work. It seems unfortunate for libdwf= l.h to define a struct that is part of debuginfod instead of using the debuginf= od header. The struct is needed by libdwfl.h to prototype extern debuginfod_client *dwfl_get_debuginfod_client (Dwfl *dwfl); but that function is defined in debuginfod-client.c protected by #ifdef ENABLE_LIBDEBUGINFOD It already is protected where it is referenced by an existing macro. The problem is the header logic doesn't match the logic in the file that uses t= hat prototype. So, again, it would seem better to include the struct from debuginfod-clien= t.h directly instead of adding more macros to protect the headers and types that already are protected. Something like: --- libdwfl.h.orig 2023-02-03 15:03:57.669810336 -0500 +++ libdwfl.h 2023-02-04 16:57:05.734206129 -0500 @@ -49,9 +49,6 @@ PC location described by an FDE belonging to Dwfl_Thread. */ typedef struct Dwfl_Frame Dwfl_Frame; -/* Handle for debuginfod-client connection. */ -typedef struct debuginfod_client debuginfod_client; - /* Callbacks. */ typedef struct { @@ -808,12 +805,16 @@ int dwfl_frame_reg (Dwfl_Frame *state, unsigned regno, Dwarf_Word *val) __nonnull_attribute__ (1); +#ifdef ENABLE_LIBDEBUGINFOD +#include "../debuginfod/debuginfod.h" + /* Return the internal debuginfod-client connection handle for the DWFL session. When the client connection has not yet been initialized, it will be don= e on the first call to this function. If elfutils is compiled without support for debuginfod, NULL will be returned. */ extern debuginfod_client *dwfl_get_debuginfod_client (Dwfl *dwfl); +#endif #ifdef __cplusplus } That defines the struct in only one place (debuginfod.h) and includes the header and prototype with the same macro protecting its use in debuginfod-client.c. --=20 You are receiving this mail because: You are on the CC list for the bug.=