From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 397793858005 for ; Wed, 15 Feb 2023 11:35:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 397793858005 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pl1-x631.google.com with SMTP id r8so19975227pls.2 for ; Wed, 15 Feb 2023 03:35:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-disposition:mime-version:message-id:subject:to:from:date :from:to:cc:subject:date:message-id:reply-to; bh=G65QIT5unfGbXgRGOdXKefG0wzPi3ux4XSIahBIgr7c=; b=d1Gqf+xUtMSrVg3tdHeR5VbEQWKjgDGkPrpUxWVJwD34GgwgpJhqux6ARhQH/kv26l oULqTBsbE1TgIEY2BTpwLNhhfVSjVNK7ORvd1QIzuoCtO7H0vczg8xNKBWpsoX5Q8EDA IUyjQ0NYUDu7xjyiLU446jzU3ua6M2MSin1r0NFhyfTfbtx/zP2rIKc1n6RUcyNbrR1c GqDweVdwBZySRufCzF55ytgdKBYvHmTb52ScW6YmcZkeh7dvgunLSsVZ1IG5X4YBtx2i tMhBWtunAioIf1cVBSZFbcgQg8ukjGFO/F1npnkkIfA1z5n9HEz1wDuu86X3RzglSFss /Fug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-disposition:mime-version:message-id:subject:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=G65QIT5unfGbXgRGOdXKefG0wzPi3ux4XSIahBIgr7c=; b=qDgc1dexZLJJEPE4FSSE2ppoLEsakxbtRyYYlJ5zlOs1FGXFGPiE2T6ujks7tWN764 J1kw23XX/Nad6SeK7fi8Yp+L+3thf4PHBxko/VCKJzSbXnPjNvMhimmEusJeWmSxKHpu av0AvJxuMVoIgo4l4a8xe/wCVZAmdiImGh+mEmgN5jgG00SHEvSNwp0TL4e5B0zKQJzQ N9mx8UgqXfJkm17uPqKFqZydF5Ao2JZBjMeEB/LcPSz7KQvQhRvcphhoZZEUcSdS1+T8 tiloRVniGYbKXS9aAPJ+kMchg6UQ27fNTSnm4pa+QFOfeClUb0YBWibUvzvuHhhckLP4 temQ== X-Gm-Message-State: AO0yUKV2pqzbaLyMOypv2rHwMcLddynPRUZahXkfn+V74yuj9L7MKxVH vbfbxSYe1Zw2adri7exqJyQYvR6XKCc= X-Google-Smtp-Source: AK7set97MN9pO7FEmx9wIQUqMXr/71/KM4phi3jGk2o8WmVNwjC8hG5Kt3zXvrvHiM5NAbXL2cMc2g== X-Received: by 2002:a17:902:e80e:b0:19a:59d1:389e with SMTP id u14-20020a170902e80e00b0019a59d1389emr2576201plg.23.1676460909428; Wed, 15 Feb 2023 03:35:09 -0800 (PST) Received: from squeak.grove.modra.org ([2406:3400:51d:8cc0:1b9c:c91c:471:5eb]) by smtp.gmail.com with ESMTPSA id b2-20020a170902d30200b0019a733a75a2sm9935323plc.60.2023.02.15.03.35.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Feb 2023 03:35:09 -0800 (PST) Received: by squeak.grove.modra.org (Postfix, from userid 1000) id CEC891142CCD; Wed, 15 Feb 2023 22:05:06 +1030 (ACDT) Date: Wed, 15 Feb 2023 22:05:06 +1030 From: Alan Modra To: binutils@sourceware.org Subject: objdump read_section_stabs Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Spam-Status: No, score=-3034.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,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: This function is used to read sections other than stabs, and there is now another version of it that extracts different info from the bfd section. Rename it and return the bfd section instead of assorted fields of the bfd section. * objcopy.c (read_section): Renamed from read_section_stabs. Delete size_ptr and entsize_ptr params, add contents param. Return asection pointer. Don't unnecessarily free contents on failure from bfd_malloc_and_get_section. (find_stabs_section): Use read_section. (dump_ctf, dump_section_sframe): Likewise. (read_section_sframe): Delete. diff --git a/binutils/objdump.c b/binutils/objdump.c index 8a8bfba5c76..8cf9d059801 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -4443,39 +4443,32 @@ dump_dwarf (bfd *abfd, bool is_mainfile) bfd_map_over_sections (abfd, dump_dwarf_section, (void *) &is_mainfile); } -/* Read ABFD's stabs section STABSECT_NAME, and return a pointer to - it. Return NULL on failure. */ +/* Read ABFD's section SECT_NAME into *CONTENTS, and return a pointer to + the section. Return NULL on failure. */ -static bfd_byte * -read_section_stabs (bfd *abfd, const char *sect_name, bfd_size_type *size_ptr, - bfd_size_type *entsize_ptr) +static asection * +read_section (bfd *abfd, const char *sect_name, bfd_byte **contents) { - asection *stabsect; - bfd_byte *contents; + asection *sec; - stabsect = bfd_get_section_by_name (abfd, sect_name); - if (stabsect == NULL) + *contents = NULL; + sec = bfd_get_section_by_name (abfd, sect_name); + if (sec == NULL) { - printf (_("No %s section present\n\n"), - sanitize_string (sect_name)); - return false; + printf (_("No %s section present\n\n"), sanitize_string (sect_name)); + return NULL; } - if (!bfd_malloc_and_get_section (abfd, stabsect, &contents)) + if (!bfd_malloc_and_get_section (abfd, sec, contents)) { non_fatal (_("reading %s section of %s failed: %s"), sect_name, bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ())); exit_status = 1; - free (contents); return NULL; } - *size_ptr = bfd_section_size (stabsect); - if (entsize_ptr) - *entsize_ptr = stabsect->entsize; - - return contents; + return sec; } /* Stabs entries use a 12 byte format: @@ -4595,15 +4588,20 @@ find_stabs_section (bfd *abfd, asection *section, void *names) && (section->name[len] == 0 || (section->name[len] == '.' && ISDIGIT (section->name[len + 1])))) { + asection *s; if (strtab == NULL) - strtab = read_section_stabs (abfd, sought->string_section_name, - &stabstr_size, NULL); + { + s = read_section (abfd, sought->string_section_name, &strtab); + if (s != NULL) + stabstr_size = bfd_section_size (s); + } if (strtab) { - stabs = read_section_stabs (abfd, section->name, &stab_size, NULL); - if (stabs) + s = read_section (abfd, section->name, &stabs); + if (s != NULL) { + stab_size = bfd_section_size (s); print_section_stabs (abfd, section->name, &sought->string_offset); free (stabs); } @@ -4776,9 +4774,9 @@ dump_ctf_archive_member (ctf_dict_t *ctf, const char *name, ctf_dict_t *parent, static void dump_ctf (bfd *abfd, const char *sect_name, const char *parent_name) { + asection *sec; ctf_archive_t *ctfa = NULL; - bfd_byte *ctfdata = NULL; - bfd_size_type ctfsize; + bfd_byte *ctfdata; ctf_sect_t ctfsect; ctf_dict_t *parent; ctf_dict_t *fp; @@ -4790,13 +4788,14 @@ dump_ctf (bfd *abfd, const char *sect_name, const char *parent_name) if (sect_name == NULL) sect_name = ".ctf"; - if ((ctfdata = read_section_stabs (abfd, sect_name, &ctfsize, NULL)) == NULL) - bfd_fatal (bfd_get_filename (abfd)); + sec = read_section (abfd, sect_name, &ctfdata); + if (sec == NULL) + bfd_fatal (bfd_get_filename (abfd)); /* Load the CTF file and dump it. Preload the parent dict, since it will need to be imported into every child in turn. */ - ctfsect = make_ctfsect (sect_name, ctfdata, ctfsize); + ctfsect = make_ctfsect (sect_name, ctfdata, bfd_section_size (sec)); if ((ctfa = ctf_bfdopen_ctfsect (abfd, &ctfsect, &err)) == NULL) { dump_ctf_errs (NULL); @@ -4831,54 +4830,25 @@ dump_ctf (bfd *abfd ATTRIBUTE_UNUSED, const char *sect_name ATTRIBUTE_UNUSED, const char *parent_name ATTRIBUTE_UNUSED) {} #endif -static bfd_byte* -read_section_sframe (bfd *abfd, const char *sect_name, bfd_size_type *size_ptr, - bfd_vma *sframe_vma) -{ - asection *sframe_sect; - bfd_byte *contents; - - sframe_sect = bfd_get_section_by_name (abfd, sect_name); - if (sframe_sect == NULL) - { - printf (_("No %s section present\n\n"), - sanitize_string (sect_name)); - return NULL; - } - - if (!bfd_malloc_and_get_section (abfd, sframe_sect, &contents)) - { - non_fatal (_("reading %s section of %s failed: %s"), - sect_name, bfd_get_filename (abfd), - bfd_errmsg (bfd_get_error ())); - exit_status = 1; - free (contents); - return NULL; - } - - *size_ptr = bfd_section_size (sframe_sect); - *sframe_vma = bfd_section_vma (sframe_sect); - - return contents; -} - static void dump_section_sframe (bfd *abfd ATTRIBUTE_UNUSED, const char * sect_name) { + asection *sec; sframe_decoder_ctx *sfd_ctx = NULL; bfd_size_type sf_size; - bfd_byte *sframe_data = NULL; + bfd_byte *sframe_data; bfd_vma sf_vma; int err = 0; if (sect_name == NULL) sect_name = ".sframe"; - sframe_data = read_section_sframe (abfd, sect_name, &sf_size, &sf_vma); - - if (sframe_data == NULL) + sec = read_section (abfd, sect_name, &sframe_data); + if (sec == NULL) bfd_fatal (bfd_get_filename (abfd)); + sf_size = bfd_section_size (sec); + sf_vma = bfd_section_vma (sec); /* Decode the contents of the section. */ sfd_ctx = sframe_decode ((const char*)sframe_data, sf_size, &err); -- Alan Modra Australia Development Lab, IBM