From patchwork Mon Mar 23 09:01:22 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Modra X-Patchwork-Id: 132175 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 9827F4BAE7E4 for ; Mon, 23 Mar 2026 09:02:03 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9827F4BAE7E4 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=Xz7EcBK3 X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) by sourceware.org (Postfix) with ESMTPS id 5BF5C4BA23E8 for ; Mon, 23 Mar 2026 09:01:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5BF5C4BA23E8 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 5BF5C4BA23E8 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::631 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774256487; cv=none; b=MKojYjAHYzKuPJu+pv9MRmJiI0Q4L2oQ9NCjSntwrfwMjBNoH2oc6wq7vAoJ+KCxFUCcAADI8PMP2VDdJF6nQS525GOJdJV0xa1yi0OZO/ghl/JFbf0nsMifw0bNzS2UIwSq62GEHrap7vQ3JzZjgFP+o61J9koKfCx+NHMnv2E= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774256487; c=relaxed/simple; bh=09svWKTLisOk/JZ7Y/qFZ1aCAHDW/0sNuZQuxXiVgDw=; h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version; b=Mi4cYilBL4b7bG93YqFqicsdmr/7//gExPHTvNChS5LqniMhy5bW3Sk4yTacFpt9drCBhDbrFXL48Ny61CFpHUZOWDmaPFd++UIz2383N03oxfM6nBWBult0KQ0e32KYi6iwdyohFZYk9RpZS6Z+yZDGCZcupYAP472HD5XOchU= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5BF5C4BA23E8 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2b0586d5bb8so28226675ad.3 for ; Mon, 23 Mar 2026 02:01:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1774256486; x=1774861286; darn=sourceware.org; h=content-disposition:mime-version:message-id:subject:to:from:date :from:to:cc:subject:date:message-id:reply-to; bh=Cee/RT8hRIHAUlPZt9cTXkCq7P0Dz4ZJX1i/vbOXHMM=; b=Xz7EcBK3ckn3DrnRU7xpST1mfvEFlD9ZvSm0UjlMbfW4LNHftNTYGAIzXr1H1k4+8y lJxG+sipgOxCgPjD7pFd29w1VE76I/txbFnN7QDLeyoOSgORwnUinb7chOL50VszjtdC ZeU2nFydRdMqoU+unxc6ieJ+E3fFZSFcBSuzTqhC8u6C8wLNSpLqqYuYCrmcteYRE6og de0RBCESKu/85xvIjXEPh8PhB7seJSmbgWrzPkX3YiVmoa2ESVesJYQXcqw3a0iJ+C3K jaG1ienKzdUmrT2pEhQMycqrQ9A9/ga0wYzktfneDu0YWOagn4GJ76zvdzKU8NoQBX6m knEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774256486; x=1774861286; h=content-disposition:mime-version:message-id:subject:to:from:date :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Cee/RT8hRIHAUlPZt9cTXkCq7P0Dz4ZJX1i/vbOXHMM=; b=d9QExBOtrBAWb8HGMekHWuUTWIxUcB30qyMYhXyvCZ4mMtondxyyuDNOFjO/m6nYOC /uNwFGG3BgAXA/kmgxnlN4mptdCaTkXOHyi0HmJ2ttvQSErlJ+9qq9nfjT6UAaLF0B2i s6zlNKvP9WK+M7M0uCUNTvoUmwinci7OZvaHoQsQ3BSQnqRuOdAApGmonXuwLoXkjs5O eG8uJIZmnT4wrBEEQxpTPzbAs2Q6UxZpTzfLXxxFDSyiAkXLg+AaDPX+nKIsgBCJ7Hi8 rmUcqeHRmAY3JRoRK0atnF36ZTh8HAW5Kz8L439xfQ8l8ukzDFk3BvhQbc+pCamG/wpd epOA== X-Gm-Message-State: AOJu0YweC+kK797WMrSUMwtJmcSYcIOZwU0ldTU2ZTIEt8LgPI2wFyjE 8PeXI+ONHINLTWjcqgH0S6sp9+g1/rtsV0g/eRe0iK/JYg0gWh27q8mu/R2b1g== X-Gm-Gg: ATEYQzyAFo14yRWs0VchSXDuPSUK+JpzTT0BhU0m0/ynxiRWFKTI/Q9uzvpOKMu3B5t JqHJN+3wJu5p/beOicDXmGzPGFe99yxzlyJFUGQtL8GC3CBLIk+rneoA7SZx41nlbWzk664wPV4 RaISCX8Tz424AwV4sZJ2P/F18gBki67Tu+I78sNECDUK7fOeZKGBr3VV5EVVY5Rrc1rwZnTZM+M 0mSdIY9xPMIED3m7tK6hfqrEPoZt2LhI66EyAtkBgdUKL3cMXFZAXrenrCNu1TbxLFBKss7agrg y0pysJ8m67E0tjcjcfg5wdLP31/DGx4juBGDNWOJCEa5bdfXSjQu1tNl2I/GZwl6EYNF5uDB2zr wFGlQ29fADDWQcbtt3fZxjnBzKsyl3DujHoHo2HQs1B8Yf3lee+UAeLaGcqRDtWo4knKfyrMcdS jNH+rpoKtjkGhUXZFEaCEN+/ladLrXcOzEsdM= X-Received: by 2002:a17:902:f545:b0:2b0:603e:e13c with SMTP id d9443c01a7336-2b08277cafbmr113908745ad.33.1774256485863; Mon, 23 Mar 2026 02:01:25 -0700 (PDT) Received: from squeak.grove.modra.org ([2406:3400:51d:8cc0:e55:1de0:ac3f:e878]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b083516194sm101763035ad.4.2026.03.23.02.01.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 02:01:25 -0700 (PDT) Received: by squeak.grove.modra.org (Postfix, from userid 1000) id EEB391141ACC; Mon, 23 Mar 2026 19:31:22 +1030 (ACDT) Date: Mon, 23 Mar 2026 19:31:22 +1030 From: Alan Modra To: binutils@sourceware.org Subject: m32r_hi16_list Message-ID: MIME-Version: 1.0 Content-Disposition: inline X-Spam-Status: No, score=-3030.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_BLOCKED, 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 sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org This patch moves m32r_hi16_list to an m32r extension of elf_section_data. * elf32-m32r.c (m32r_hi16_list): Delete. (struct _m32r_elf_section_data): New. (m32r_elf_section_data): Define. (m32r_elf_new_section_hook, m32r_elf_free_hi16_list), (m32r_elf_free_cached_info): New functions. (m32r_elf_hi16_reloc, m32r_elf_lo16_reloc): Use new sdata. (bfd_elf32_new_section_hook): Define. (bfd_elf32_bfd_free_cached_info): Define. diff --git a/bfd/elf32-m32r.c b/bfd/elf32-m32r.c index af8268b86ba..495d0a1364b 100644 --- a/bfd/elf32-m32r.c +++ b/bfd/elf32-m32r.c @@ -305,9 +305,52 @@ struct m32r_hi16 bfd_vma addend; }; -/* FIXME: This should not be a static variable. */ +struct _m32r_elf_section_data +{ + struct bfd_elf_section_data elf; + struct m32r_hi16 *m32r_hi16_list; +}; + +#define m32r_elf_section_data(sec) \ + ((struct _m32r_elf_section_data *) elf_section_data (sec)) + +static bool +m32r_elf_new_section_hook (bfd *abfd, asection *sec) +{ + struct _m32r_elf_section_data *sdata; + + sdata = bfd_zalloc (abfd, sizeof (*sdata)); + if (sdata == NULL) + return false; + sec->used_by_bfd = sdata; + + return _bfd_elf_new_section_hook (abfd, sec); +} + +static void +m32r_elf_free_hi16_list (asection *sec) +{ + struct _m32r_elf_section_data *sdata = m32r_elf_section_data (sec); + while (sdata->m32r_hi16_list != NULL) + { + struct m32r_hi16 *hi = sdata->m32r_hi16_list; + sdata->m32r_hi16_list = hi->next; + free (hi); + } +} + +static bool +m32r_elf_free_cached_info (bfd *abfd) +{ + if (bfd_get_format (abfd) == bfd_object + || bfd_get_format (abfd) == bfd_core) + { + for (asection *sec = abfd->sections; sec; sec = sec->next) + m32r_elf_free_hi16_list (sec); + } + return _bfd_elf_free_cached_info (abfd); +} -static struct m32r_hi16 *m32r_hi16_list; static bfd_reloc_status_type m32r_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, @@ -321,6 +364,7 @@ m32r_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_status_type ret; bfd_vma relocation; struct m32r_hi16 *n; + struct _m32r_elf_section_data *sdata; /* This part is from bfd_elf_generic_reloc. If we're relocating, and this an external symbol, we don't want @@ -352,13 +396,14 @@ m32r_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, relocation += reloc_entry->addend; /* Save the information, and let LO16 do the actual relocation. */ - n = bfd_malloc ((bfd_size_type) sizeof *n); + n = bfd_malloc (sizeof (*n)); if (n == NULL) return bfd_reloc_outofrange; + sdata = m32r_elf_section_data (input_section); n->addr = (bfd_byte *) data + reloc_entry->address; n->addend = relocation; - n->next = m32r_hi16_list; - m32r_hi16_list = n; + n->next = sdata->m32r_hi16_list; + sdata->m32r_hi16_list = n; if (output_bfd != NULL) reloc_entry->address += input_section->output_offset; @@ -412,6 +457,8 @@ m32r_elf_lo16_reloc (bfd *input_bfd, bfd *output_bfd, char **error_message) { + struct _m32r_elf_section_data *sdata; + /* This part is from bfd_elf_generic_reloc. If we're relocating, and this an external symbol, we don't want to change anything. */ @@ -423,11 +470,12 @@ m32r_elf_lo16_reloc (bfd *input_bfd, return bfd_reloc_ok; } - if (m32r_hi16_list != NULL) + sdata = m32r_elf_section_data (input_section); + if (sdata->m32r_hi16_list != NULL) { struct m32r_hi16 *l; - l = m32r_hi16_list; + l = sdata->m32r_hi16_list; while (l != NULL) { unsigned long insn; @@ -456,7 +504,7 @@ m32r_elf_lo16_reloc (bfd *input_bfd, l = next; } - m32r_hi16_list = NULL; + sdata->m32r_hi16_list = NULL; } /* Now do the LO16 reloc in the usual way. @@ -3687,6 +3735,8 @@ m32r_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED, #endif #define elf_backend_object_p m32r_elf_object_p +#define bfd_elf32_new_section_hook m32r_elf_new_section_hook +#define bfd_elf32_bfd_free_cached_info m32r_elf_free_cached_info #define elf_backend_final_write_processing m32r_elf_final_write_processing #define bfd_elf32_bfd_merge_private_bfd_data m32r_elf_merge_private_bfd_data #define bfd_elf32_bfd_set_private_flags m32r_elf_set_private_flags