From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 36532 invoked by alias); 2 Mar 2020 12:38:10 -0000 Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org Received: (qmail 36523 invoked by uid 89); 2 Mar 2020 12:38:10 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-15.0 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=HTo:U*amodra, aka X-HELO: mail-oi1-f193.google.com Received: from mail-oi1-f193.google.com (HELO mail-oi1-f193.google.com) (209.85.167.193) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 02 Mar 2020 12:38:08 +0000 Received: by mail-oi1-f193.google.com with SMTP id d62so10061233oia.11 for ; Mon, 02 Mar 2020 04:38:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=UDhfFePZ+XFWGjtPEJMRtGwG4WnFDjTO6PoEIQOXswg=; b=givmT3uEJCdLlAU2rV368EaBUV/4mvcc8QMCKsRa4jmoJDc00RUMsqEIm8Nt1GjVPQ XlkUU3JJhILjmPMQISgZr4G0k80HehN6eDeqUpp9uRWRxrGqVkJ9cF/ZrgoCoxaoKVjr 0kQOZbQXbCe0nNATT+zoj1SgzlaUtNjP27qUVJxHH3NkG8UdZ4XI9l4VVRP3G7SNhfdF e90b7bzs2EpiUW3zA54sw/3RVeRC10tdKqSW9rOsVkpt1okFl0orqwBlVPcRPZcC8R1S bngEyD5uPKW4v3MF2mb4xqj1CNFXpr0e9rkncjQ+RZmhbZ4sGH6h+4vFCNz39PJIEnS1 kVeg== MIME-Version: 1.0 References: <20200302085904.GH5384@bubble.grove.modra.org> In-Reply-To: <20200302085904.GH5384@bubble.grove.modra.org> From: "H.J. Lu" Date: Mon, 02 Mar 2020 12:38:00 -0000 Message-ID: Subject: Re: bfd_cleanup for object_p To: Alan Modra Cc: Binutils Content-Type: multipart/mixed; boundary="0000000000007fc75a059fde7566" X-IsSubscribed: yes X-SW-Source: 2020-03/txt/msg00015.txt --0000000000007fc75a059fde7566 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Content-length: 6339 On Mon, Mar 2, 2020 at 12:59 AM Alan Modra wrote: > > The object_p (and archive_p, core_file_p) functions are not supposed > to have any target specific malloc'd memory attached to the bfd on > their return. This should be obvious on a failure return, but it's > also true for a successful return. The reason is that even though the > object_p recognises the file, that particular target may not be used > and thus the bfd won't be closed calling close_and_cleanup for the > target that allocated the memory. > > It turns out that the object_p bfd_target* return value isn't needed. > In all cases except ld/plugin.c the target is abfd->xvec and with > ld/plugin.c the target isn't used. So this patch returns a cleanup > function from object_p instead, called in bfd_check_format_matches to > tidy the bfd before trying a different target match. The only cleanup > that does anything at this stage is the alpha-vms one. > > bfd/ > * targets.c (bfd_cleanup): New typedef. > (struct bfd <_bfd_check_format>): Return a bfd_cleanup. > * libbfd-in.h (_bfd_no_cleanup): Define. > * format.c (bfd_reinit): Add cleanup parameter, call it. > (bfd_check_format_matches): Set cleanup from _bfd_check_format > call and pass to bfd_reinit. Delete temp, use abfd->xvec instead. > * aout-target.h (callback, object_p): Return bfd_cleanup. > * aout-tic30.c (tic30_aout_callback, tic30_aout_object_p): Likewi= se. > * archive.c (bfd_generic_archive_p): Likewise. > * binary.c (binary_object_p): Likewise. > * coff-alpha.c (alpha_ecoff_object_p): Likewise. > * coff-ia64.c (ia64coff_object_p): Likewise. > * coff-rs6000.c (_bfd_xcoff_archive_p, rs6000coff_core_p): Likewi= se. > * coff-sh.c (coff_small_object_p): Likewise. > * coff-stgo32.c (go32_check_format): Likewise. > * coff64-rs6000.c (xcoff64_archive_p, rs6000coff_core_p), > (xcoff64_core_p): Likewise. > * coffgen.c (coff_real_object_p, coff_object_p): Likewise. > * elf-bfd.h (bfd_elf32_object_p, bfd_elf32_core_file_p), > (bfd_elf64_object_p, bfd_elf64_core_file_p): Likewise. > * elfcode.h (elf_object_p): Likewise. > * elfcore.h (elf_core_file_p): Likewise. > * i386msdos.c (msdos_object_p): Likewise. > * ihex.c (ihex_object_p): Likewise. > * libaout.h (some_aout_object_p): Likewise. > * libbfd-in.h (bfd_generic_archive_p, _bfd_dummy_target), > (_bfd_vms_lib_alpha_archive_p, _bfd_vms_lib_ia64_archive_p): Like= wise. > * libbfd.c (_bfd_dummy_target): Likewise. > * libcoff-in.h (coff_object_p): Likewise. > * mach-o-aarch64.c (bfd_mach_o_arm64_object_p), > (bfd_mach_o_arm64_core_p): Likewise. > * mach-o-arm.c (bfd_mach_o_arm_object_p), > (bfd_mach_o_arm_core_p): Likewise. > * mach-o-i386.c (bfd_mach_o_i386_object_p), > (bfd_mach_o_i386_core_p): Likewise. > * mach-o-x86-64.c (bfd_mach_o_x86_64_object_p), > (bfd_mach_o_x86_64_core_p): Likewise. > * mach-o.c (bfd_mach_o_header_p, bfd_mach_o_gen_object_p), > (bfd_mach_o_gen_core_p, bfd_mach_o_fat_archive_p): Likewise. > * mach-o.h (bfd_mach_o_object_p, bfd_mach_o_core_p), > (bfd_mach_o_fat_archive_p, bfd_mach_o_header_p): Likewise. > * mmo.c (mmo_object_p): Likewise. > * pef.c (bfd_pef_object_p, bfd_pef_xlib_object_p): Likewise. > * peicode.h (coff_real_object_p, pe_ILF_object_p), > (pe_bfd_object_p): Likewise. > * plugin.c (ld_plugin_object_p, bfd_plugin_object_p): Likewise. > * ppcboot.c (ppcboot_object_p): Likewise. > * rs6000-core.c (rs6000coff_core_p): Likewise. > * som.c (som_object_setup, som_object_p): Likewise. > * srec.c (srec_object_p, symbolsrec_object_p): Likewise. > * tekhex.c (tekhex_object_p): Likewise. > * vms-alpha.c (alpha_vms_object_p): Likewise. > * vms-lib.c (_bfd_vms_lib_archive_p, _bfd_vms_lib_alpha_archive_p= ), > (_bfd_vms_lib_ia64_archive_p, _bfd_vms_lib_txt_archive_p): Likewi= se. > * wasm-module.c (wasm_object_p): Likewise. > * xsym.c (bfd_sym_object_p): Likewise. > * xsym.h (bfd_sym_object_p): Likewise. > * aoutx.h (some_aout_object_p): Likewise, and callback parameter > return type. > * pdp11.c (some_aout_object_p): Likewise. > * plugin.c (register_ld_plugin_object_p): Update object_p > parameter type. > * plugin.h (register_ld_plugin_object_p): Likewise. > * bfd-in2.h: Regenerate. > * libbfd.h: Regenerate. > * libcoff.h: Regenerate. > ld/ > * plugin.c (plugin_object_p): Return a bfd_cleanup. > (plugin_cleanup): New function. I am checking in this to fix Linux/i386 build: libtool: compile: /usr/gcc-9.2.1-32bit/bin/gcc -m32 -DHAVE_CONFIG_H -I. -I/export/gnu/import/git/sources/binutils-gdb/bfd -DBINDIR=3D\"/usr/local/bin\" -DLIBDIR=3D\"/usr/local/lib\" -DTRAD_CORE -I. -I/export/gnu/import/git/sources/binutils-gdb/bfd -I/export/gnu/import/git/sources/binutils-gdb/bfd/../include -DHAVE_i386_elf32_vec -DHAVE_iamcu_elf32_vec -DHAVE_i386_pei_vec -DHAVE_elf32_le_vec -DHAVE_elf32_be_vec -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wstack-usage=3D262144 -Werror -I/export/gnu/import/git/sources/binutils-gdb/bfd/../zlib -g -O2 -MT trad-core.lo -MD -MP -MF .deps/trad-core.Tpo -c /export/gnu/import/git/sources/binutils-gdb/bfd/trad-core.c -o trad-core.o /export/gnu/import/git/sources/binutils-gdb/bfd/trad-core.c:293:7: error: initialization of =E2=80=98void (* (*)(bfd *))(bfd *)=E2=80=99 {aka = =E2=80=98void (* (*)(struct bfd *))(struct bfd *)=E2=80=99} from incompatible pointer type =E2=80=98const bfd_target * (*)(bfd *)=E2=80=99 {aka =E2=80=98const struct = bfd_target * (*)(struct bfd *)=E2=80=99} [-Werror=3Dincompatible-pointer-types] 293 | trad_unix_core_file_p /* a core file */ | ^~~~~~~~~~~~~~~~~~~~~ /export/gnu/import/git/sources/binutils-gdb/bfd/trad-core.c:293:7: note: (near initialization for =E2=80=98core_trad_vec._bfd_check_format[3]= =E2=80=99) mv -f .deps/cofflink.Tpo .deps/cofflink.Plo cc1: all warnings being treated as errors --=20 H.J. --0000000000007fc75a059fde7566 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-trad_unix_core_file_p-Return-bfd_cleanup.patch" Content-Disposition: attachment; filename="0001-trad_unix_core_file_p-Return-bfd_cleanup.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k7ag6f7f0 Content-length: 1769 RnJvbSA3MjhkMzJjNDk2NDM1Y2JkMjUyOWY3ZGU5ZjUyNzdkODhjOWMwNGUy IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhq bC50b29sc0BnbWFpbC5jb20+CkRhdGU6IE1vbiwgMiBNYXIgMjAyMCAwNDoz NToyMyAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIHRyYWRfdW5peF9jb3JlX2Zp bGVfcDogUmV0dXJuIGJmZF9jbGVhbnVwCgoJKiB0cmFkLWNvcmUuYyAodHJh ZF91bml4X2NvcmVfZmlsZV9wKTogUmV0dXJuIGJmZF9jbGVhbnVwLgotLS0K IGJmZC9DaGFuZ2VMb2cgICB8IDQgKysrKwogYmZkL3RyYWQtY29yZS5jIHwg NCArKy0tCiAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9iZmQvQ2hhbmdlTG9nIGIvYmZk L0NoYW5nZUxvZwppbmRleCBhOTE3NjMxYjM4Li41MDVkYTA2YWRkIDEwMDY0 NAotLS0gYS9iZmQvQ2hhbmdlTG9nCisrKyBiL2JmZC9DaGFuZ2VMb2cKQEAg LTEsMyArMSw3IEBACisyMDIwLTAzLTAyICBILkouIEx1ICA8aG9uZ2ppdS5s dUBpbnRlbC5jb20+CisKKwkqIHRyYWQtY29yZS5jICh0cmFkX3VuaXhfY29y ZV9maWxlX3ApOiBSZXR1cm4gYmZkX2NsZWFudXAuCisKIDIwMjAtMDMtMDIg IEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgogCiAJKiB0YXJnZXRz LmMgKGJmZF9jbGVhbnVwKTogTmV3IHR5cGVkZWYuCmRpZmYgLS1naXQgYS9i ZmQvdHJhZC1jb3JlLmMgYi9iZmQvdHJhZC1jb3JlLmMKaW5kZXggMTBhYjI1 MjEzNC4uMWIyNDc3YTRjNSAxMDA2NDQKLS0tIGEvYmZkL3RyYWQtY29yZS5j CisrKyBiL2JmZC90cmFkLWNvcmUuYwpAQCAtNzEsNyArNzEsNyBAQCBzdHJ1 Y3QgdHJhZF9jb3JlX3N0cnVjdAogCiAvKiBIYW5kbGUgNC4yLXN0eWxlIChh bmQgcGVyaGFwcyBhbHNvIHN5c1Ytc3R5bGUpIGNvcmUgZHVtcCBmaWxlLiAg Ki8KIAotc3RhdGljIGNvbnN0IGJmZF90YXJnZXQgKgorc3RhdGljIGJmZF9j bGVhbnVwCiB0cmFkX3VuaXhfY29yZV9maWxlX3AgKGJmZCAqYWJmZCkKIHsK ICAgaW50IHZhbDsKQEAgLTIyMCw3ICsyMjAsNyBAQCB0cmFkX3VuaXhfY29y ZV9maWxlX3AgKGJmZCAqYWJmZCkKICAgY29yZV9kYXRhc2VjIChhYmZkKS0+ YWxpZ25tZW50X3Bvd2VyID0gMjsKICAgY29yZV9yZWdzZWMgKGFiZmQpLT5h bGlnbm1lbnRfcG93ZXIgPSAyOwogCi0gIHJldHVybiBhYmZkLT54dmVjOwor ICByZXR1cm4gX2JmZF9ub19jbGVhbnVwOwogCiAgZmFpbDoKICAgYmZkX3Jl bGVhc2UgKGFiZmQsIGFiZmQtPnRkYXRhLmFueSk7Ci0tIAoyLjI0LjEKCg== --0000000000007fc75a059fde7566--