From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by sourceware.org (Postfix) with ESMTPS id B65443858291 for ; Mon, 21 Aug 2023 05:47:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B65443858291 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 666D3227D6 for ; Mon, 21 Aug 2023 05:47:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1692596821; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=f1L5ftyanCTUMLw1lYWEuH8hHk5CaN/8FqfbBF4lWdA=; b=POUvzuWZlnQdA0MENoh0exgkM3lCUn492GY3JKjUscj8NthLpJWgafgCB/uciDRXnjJFeo R+6VJgmLm2uhFZTchGgsnuDNxaLXIlx5AYmsS3oaJo87GoWz96qkyJ4FXxovGlgCuSSG+V HTUq4ViZwCmRRQjMTnbSJIxBJbk/jiQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1692596821; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=f1L5ftyanCTUMLw1lYWEuH8hHk5CaN/8FqfbBF4lWdA=; b=9rT1HMyzSNXcXKqK3TfDJ+ZPYztsE/mfZd6FD1LCOPTGfg6SzJ32ofu79TLyF4P6HfMn5F U3j4UcakjDA/CBBw== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 5435913440 for ; Mon, 21 Aug 2023 05:47:01 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id tOxWE1X64mRLcAAAMHmgww (envelope-from ) for ; Mon, 21 Aug 2023 05:47:01 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH v2] [gdb/build] Work around cgen odr violations Date: Mon, 21 Aug 2023 07:47:07 +0200 Message-Id: <20230821054707.6558-1-tdevries@suse.de> X-Mailer: git-send-email 2.35.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: When building gdb with -flto -O2, I run into: ... opcodes/mep-desc.h:250:14: warning: type 'cgen_operand_type' violates the \ C++ One Definition Rule [-Wodr] typedef enum cgen_operand_type { ^ opcodes/or1k-desc.h:624:14: note: an enum with different value name is \ defined in another translation unit typedef enum cgen_operand_type { ^ opcodes/mep-desc.h:212:14: warning: type 'cgen_hw_type' violates the C++ One \ Definition Rule [-Wodr] typedef enum cgen_hw_type { ^ opcodes/or1k-desc.h:433:14: note: an enum with different value name is \ defined in another translation unit typedef enum cgen_hw_type { ^ ... Fix this by making the conflicting type names unique, adding a target-specific prefix using a define before the include: ... #define cgen_operand_type _cgen_operand_type #define cgen_hw_type _cgen_hw_type #include "opcodes/-desc.h" ... and move those defines into a new file cgen-remap.h, similar to how that's done for yacc in yy-remap.h. Likewise for targets frv and lm32, the two other targets that include opcodes/-desc.h. Likewise for more cgen symbols that I got the same warning for when using -flto-partition=one. A PR has been filed to take care of this in the opcodes dir instead (PR30758). Tested on x86_64-linux. PR build/30757 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30757 --- gdb/cgen-remap.h | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ gdb/frv-tdep.c | 6 +++++- gdb/lm32-tdep.c | 6 +++++- gdb/mep-tdep.c | 5 ++++- gdb/or1k-tdep.h | 3 +++ 5 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 gdb/cgen-remap.h diff --git a/gdb/cgen-remap.h b/gdb/cgen-remap.h new file mode 100644 index 00000000000..626047e5ac7 --- /dev/null +++ b/gdb/cgen-remap.h @@ -0,0 +1,53 @@ +/* Copyright (C) 2023 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef CGEN_REMAP_H +#define CGEN_REMAP_H + +/* Remap cgen interface names, so we can have multiple cgen generated include + files in gdb without violating c++ ODR. */ + +/* Define GDB_CGEN_REMAP_PREFIX to the desired remapping prefix before + including this file. */ +#ifndef GDB_CGEN_REMAP_PREFIX +# error "GDB_CGEN_REMAP_PREFIX not defined" +#endif + +#define GDB_CGEN_REMAP_2(PREFIX, SYM) PREFIX ## _ ## SYM +#define GDB_CGEN_REMAP_1(PREFIX, SYM) GDB_CGEN_REMAP_2 (PREFIX, SYM) +#define GDB_CGEN_REMAP(SYM) GDB_CGEN_REMAP_1 (GDB_CGEN_REMAP_PREFIX, SYM) + +#define cgen_operand_type GDB_CGEN_REMAP (cgen_operand_type) +#define cgen_hw_type GDB_CGEN_REMAP (cgen_hw_type) +#define cgen_ifld GDB_CGEN_REMAP (cgen_ifld) +#define cgen_insn GDB_CGEN_REMAP (cgen_insn) +#define cgen_cpu_desc GDB_CGEN_REMAP (cgen_cpu_desc) +#define cgen_fields GDB_CGEN_REMAP (cgen_fields) +#define cgen_insn_list GDB_CGEN_REMAP (cgen_insn_list) +#define cgen_maybe_multi_ifield GDB_CGEN_REMAP (cgen_maybe_multi_ifield) +#define CGEN_OPINST GDB_CGEN_REMAP (CGEN_OPINST) +#define CGEN_IFMT_IFLD GDB_CGEN_REMAP (CGEN_IFMT_IFLD) +#define CGEN_INSN_ATTR_TYPE GDB_CGEN_REMAP (CGEN_INSN_ATTR_TYPE) +#define CGEN_IBASE GDB_CGEN_REMAP (CGEN_IBASE) +#define CGEN_HW_ENTRY GDB_CGEN_REMAP (CGEN_HW_ENTRY) +#define CGEN_HW_TABLE GDB_CGEN_REMAP (CGEN_HW_TABLE) +#define CGEN_INSN_TABLE GDB_CGEN_REMAP (CGEN_INSN_TABLE) +#define CGEN_OPERAND_TABLE GDB_CGEN_REMAP (CGEN_OPERAND_TABLE) +#define CGEN_OPERAND GDB_CGEN_REMAP (CGEN_OPERAND) +#define CGEN_MAYBE_MULTI_IFLD GDB_CGEN_REMAP (CGEN_MAYBE_MULTI_IFLD) + +#endif /* CGEN_REMAP_H */ diff --git a/gdb/frv-tdep.c b/gdb/frv-tdep.c index 6c6050a919a..273a5bd7180 100644 --- a/gdb/frv-tdep.c +++ b/gdb/frv-tdep.c @@ -29,7 +29,6 @@ #include "dis-asm.h" #include "sim-regno.h" #include "sim/sim-frv.h" -#include "opcodes/frv-desc.h" /* for the H_SPR_... enums */ #include "symtab.h" #include "elf-bfd.h" #include "elf/frv.h" @@ -40,6 +39,11 @@ #include "objfiles.h" #include "gdbarch.h" +/* Make cgen names unique to prevent ODR conflicts with other targets. */ +#define GDB_CGEN_REMAP_PREFIX frv +#include "cgen-remap.h" +#include "opcodes/frv-desc.h" /* for the H_SPR_... enums */ + struct frv_unwind_cache /* was struct frame_extra_info */ { /* The previous frame's inner-most stack address. Used as this diff --git a/gdb/lm32-tdep.c b/gdb/lm32-tdep.c index 23998f85dd8..0eecdb6ac40 100644 --- a/gdb/lm32-tdep.c +++ b/gdb/lm32-tdep.c @@ -32,10 +32,14 @@ #include "regcache.h" #include "trad-frame.h" #include "reggroups.h" -#include "opcodes/lm32-desc.h" #include #include "gdbarch.h" +/* Make cgen names unique to prevent ODR conflicts with other targets. */ +#define GDB_CGEN_REMAP_PREFIX lm32 +#include "cgen-remap.h" +#include "opcodes/lm32-desc.h" + /* Macros to extract fields from an instruction. */ #define LM32_OPCODE(insn) ((insn >> 26) & 0x3f) #define LM32_REG0(insn) ((insn >> 21) & 0x1f) diff --git a/gdb/mep-tdep.c b/gdb/mep-tdep.c index fc786f09e44..85c2e229a5c 100644 --- a/gdb/mep-tdep.c +++ b/gdb/mep-tdep.c @@ -47,7 +47,10 @@ #include "gdbarch.h" /* Get the user's customized MeP coprocessor register names from - libopcodes. */ + libopcodes. Make cgen names unique to prevent ODR conflicts with other + targets. */ +#define GDB_CGEN_REMAP_PREFIX mep +#include "cgen-remap.h" #include "opcodes/mep-desc.h" #include "opcodes/mep-opc.h" diff --git a/gdb/or1k-tdep.h b/gdb/or1k-tdep.h index a11950584d7..b2433d15314 100644 --- a/gdb/or1k-tdep.h +++ b/gdb/or1k-tdep.h @@ -23,6 +23,9 @@ #define TARGET_OR1K #endif +/* Make cgen names unique to prevent ODR conflicts with other targets. */ +#define GDB_CGEN_REMAP_PREFIX or1k +#include "cgen-remap.h" #include "opcodes/or1k-desc.h" #include "opcodes/or1k-opc.h" base-commit: 069a1561b76532964b1dcc3bdd8f745e927358d6 -- 2.35.3