From: Mark Wielaard <mark@klomp.org>
To: Ilya Leoshkevich <iii@linux.ibm.com>
Cc: elfutils-devel@sourceware.org, fche@elastic.org
Subject: Re: [PATCH RFC 03/11] printversion: Fix unused variable
Date: Tue, 7 Feb 2023 21:44:26 +0100 [thread overview]
Message-ID: <20230207204426.GD25444@gnu.wildebeest.org> (raw)
In-Reply-To: <20230206222513.1773039-4-iii@linux.ibm.com>
[-- Attachment #1: Type: text/plain, Size: 2370 bytes --]
Hi Ilya (CC Frank),
On Mon, Feb 06, 2023 at 11:25:05PM +0100, Ilya Leoshkevich via Elfutils-devel wrote:
> clang complains:
>
> debuginfod.cxx:354:1: error: unused variable 'apba__' [-Werror,-Wunused-const-variable]
> ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
> ^
> ../lib/printversion.h:47:21: note: expanded from macro 'ARGP_PROGRAM_BUG_ADDRESS_DEF'
> const char *const apba__ __asm ("argp_program_bug_address")
> ^
>
> This is as expected: it's used by argp via the
> "argp_program_bug_address" name, which is not visible on the C level.
> Add __attribute__ ((used)) to make sure that the compiler emits it.
Actually I think it found a real issue. Note that the same construct
is used the C eu tools. But in debuginfod.cxx it says:
/* Name and version of program. */
/* ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; */ // not this simple for C++
/* Bug report address. */
ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
Note how ARGP_PROGRAM_VERSION_HOOK_DEF is commented out and in main it
has:
/* Parse and process arguments. */
int remaining;
argp_program_version_hook = print_version; // this works
(void) argp_parse (&argp, argc, argv, ARGP_IN_ORDER, &remaining, NULL);
So it sets print_version, but not argp_program_bug_address.
And indeed debuginfod --help is missing the bug reporting address.
I don't really know/understand why the printversion.h macro trick doesn't work with C++ (symbol mangling?). But we do need at least this patch:
diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx
index 4271acf4..0ec326d5 100644
--- a/debuginfod/debuginfod.cxx
+++ b/debuginfod/debuginfod.cxx
@@ -4172,6 +4165,7 @@ main (int argc, char *argv[])
/* Parse and process arguments. */
int remaining;
argp_program_version_hook = print_version; // this works
+ argp_program_bug_address = PACKAGE_BUGREPORT;
(void) argp_parse (&argp, argc, argv, ARGP_IN_ORDER, &remaining, NULL);
if (remaining != argc)
error (EXIT_FAILURE, 0,
Then debuginfod --help will say: Report bugs to
https://sourceware.org/bugzilla.
That of course doesn't help with the -Wunused-const-variable warning.
If we cannot figure out the magic variable naming trick with with C++
then maybe we can just not include printversion.h and do it "by hand"?
(as attached)
Cheers,
Mark
[-- Attachment #2: debuginfod-version.patch --]
[-- Type: text/plain, Size: 1221 bytes --]
diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx
index 4271acf4..1ea90645 100644
--- a/debuginfod/debuginfod.cxx
+++ b/debuginfod/debuginfod.cxx
@@ -45,7 +45,6 @@ extern "C" {
#endif
extern "C" {
-#include "printversion.h"
#include "system.h"
}
@@ -345,13 +344,11 @@ static const char DEBUGINFOD_SQLITE_CLEANUP_DDL[] =
;
-
-
-/* Name and version of program. */
-/* ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; */ // not this simple for C++
-
-/* Bug report address. */
-ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
+extern "C" {
+/* Defined in version.c. Explicitly declared here because including
+ print_version.h magic variable tricks don't work in C++. */
+void print_version (FILE *stream, struct argp_state *state);
+}
/* Definitions of arguments for argp functions. */
static const struct argp_option options[] =
@@ -4172,6 +4169,7 @@ main (int argc, char *argv[])
/* Parse and process arguments. */
int remaining;
argp_program_version_hook = print_version; // this works
+ argp_program_bug_address = PACKAGE_BUGREPORT;
(void) argp_parse (&argp, argc, argv, ARGP_IN_ORDER, &remaining, NULL);
if (remaining != argc)
error (EXIT_FAILURE, 0,
next prev parent reply other threads:[~2023-02-07 20:44 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-06 22:25 [PATCH RFC 00/11] Add Memory Sanitizer support Ilya Leoshkevich
2023-02-06 22:25 ` [PATCH RFC 01/11] libdwfl: Fix debuginfod_client redefinition Ilya Leoshkevich
2023-02-07 19:22 ` Mark Wielaard
2023-02-07 19:47 ` Ilya Leoshkevich
2023-02-06 22:25 ` [PATCH RFC 02/11] libasm: Fix xdefault_pattern initialization Ilya Leoshkevich
2023-02-07 19:41 ` Mark Wielaard
2023-02-07 19:49 ` Ilya Leoshkevich
2023-02-06 22:25 ` [PATCH RFC 03/11] printversion: Fix unused variable Ilya Leoshkevich
2023-02-07 20:44 ` Mark Wielaard [this message]
2023-02-08 12:22 ` Ilya Leoshkevich
2023-02-09 14:04 ` Mark Wielaard
2023-02-09 14:57 ` Ilya Leoshkevich
2023-02-06 22:25 ` [PATCH RFC 04/11] readelf: Fix set but not used parameter Ilya Leoshkevich
2023-02-08 16:52 ` Mark Wielaard
2023-02-06 22:25 ` [PATCH RFC 05/11] readelf: Fix set but not used variable Ilya Leoshkevich
2023-02-08 17:09 ` Mark Wielaard
2023-02-06 22:25 ` [PATCH RFC 06/11] Initialize reglocs for VMCOREINFO Ilya Leoshkevich
2023-02-08 17:27 ` Mark Wielaard
2023-02-06 22:25 ` [PATCH RFC 07/11] addr2line: Do not test demangling in run-addr2line-i-test.sh Ilya Leoshkevich
2023-02-08 18:15 ` Mark Wielaard
2023-02-06 22:25 ` [PATCH RFC 08/11] x86_64_return_value_location: Support lvalue and rvalue references Ilya Leoshkevich
2023-02-06 22:25 ` [PATCH RFC 09/11] configure: Use -fno-addrsig if possible Ilya Leoshkevich
2023-02-06 22:25 ` [PATCH RFC 10/11] configure: Add --disable-demangle Ilya Leoshkevich
2023-02-08 18:14 ` Mark Wielaard
2023-02-06 22:25 ` [PATCH RFC 11/11] configure: Add --enable-sanitize-memory Ilya Leoshkevich
2023-02-07 19:05 ` [PATCH RFC 00/11] Add Memory Sanitizer support Mark Wielaard
2023-02-07 19:46 ` Ilya Leoshkevich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230207204426.GD25444@gnu.wildebeest.org \
--to=mark@klomp.org \
--cc=elfutils-devel@sourceware.org \
--cc=fche@elastic.org \
--cc=iii@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).