From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-x62d.google.com (mail-pl1-x62d.google.com [IPv6:2607:f8b0:4864:20::62d]) by sourceware.org (Postfix) with ESMTPS id A73633944422 for ; Thu, 19 Mar 2020 05:41:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org A73633944422 Received: by mail-pl1-x62d.google.com with SMTP id t3so561434plz.9 for ; Wed, 18 Mar 2020 22:41:02 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=/riNT6eHm4CCy+DM9doC02PDenqyZa2b3XIt91+iP0Y=; b=k6JzAk1vUQFb8kNPTUX1vlMMGoe90w3xEXkcN/3yoAEfy7veYhTXU1CnZzCjhncSnf a/NBVay6+Hn9Xkk461ONNWIe9fS+VrVSbKFsCUyXVwAkQe54qXmXFzptMkkApLWgH8T6 Sjgfmv3TCmrq9sVr07GFuX+RWrD5k32Pzl/Y68yOodXcsobWVjCUsI54UKGljCVtDy6i cKE1OtdC6FrSecpYivLzXv2Vw9y0elrNR64acqDGiaJEq8q2ViD0ej94LxF6O8MzbZE9 vKfD4p0yMIvxSGzh70rKDpQDC/I2/rPagQRUV/yRgrkvpedceHZA/86gcwTEqYAxLXhg AO/w== X-Gm-Message-State: ANhLgQ11nuDfjrTOaHd7k2h5YBhfPRSvpL+oP9f6DZs8oC2oUYbS/Yw9 5AskskIsqJohr5JganQOhpOsE1nfExc= X-Google-Smtp-Source: ADFU+vsuW9qTPybwxSKA/cWuHDp/z0I9I9EDMKFbQOUZOHOp+IeTSIZqRViQIdxSGBw24C+Zi1c3pA== X-Received: by 2002:a17:90a:a483:: with SMTP id z3mr2077672pjp.43.1584596460929; Wed, 18 Mar 2020 22:41:00 -0700 (PDT) Received: from bubble.grove.modra.org (158.106.96.58.static.exetel.com.au. [58.96.106.158]) by smtp.gmail.com with ESMTPSA id m18sm828878pgd.39.2020.03.18.22.40.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Mar 2020 22:41:00 -0700 (PDT) Received: by bubble.grove.modra.org (Postfix, from userid 1000) id AB9C58190B; Thu, 19 Mar 2020 16:10:55 +1030 (ACDT) Date: Thu, 19 Mar 2020 16:10:55 +1030 From: Alan Modra To: binutils@sourceware.org Subject: Re: setup_archive parameter mismatch Message-ID: <20200319054055.GD4583@bubble.grove.modra.org> References: <20200319032537.GA4583@bubble.grove.modra.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200319032537.GA4583@bubble.grove.modra.org> User-Agent: Mutt/1.9.4 (2018-02-28) X-Spam-Status: No, score=-25.2 required=5.0 tests=DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Mar 2020 05:41:04 -0000 On Thu, Mar 19, 2020 at 01:55:37PM +1030, Alan Modra wrote: > readelf.c and elfedit.c both define BFD64 in order to support > processing of ELFCLASS64 objects. Or at least that's what the comment > says. This means I should not have used bfd_size_type to pass file > size to a function in elfcomm.c which also includes bfd.h but doesn't > define BFD64. When you build and test on a 64-bit host, the parameter > mismatch doesn't show up, but it does if bfd/ is compiled on a 32-bit > host without 64-bit BFD support. > > * elfcomm.c (setup_archive): Make file_size an off_t. Comment. > * elfcomm.h (setup_archive): Update prototype. Better than warning about bfd types, just don't include bfd.h and warn against including the header again. * elfcomm.c: Don't include bfd.h or bucomm.h. (program_name): Declare. (process_archive_index_and_symbols): Replace bfd_boolean with int, and substitute FALSE and TRUE. (setup_archive, setup_nested_archive): Likewise. * elfcomm.h: Likewise. diff --git a/binutils/elfcomm.c b/binutils/elfcomm.c index b0fbf57e1f..5ec4690e13 100644 --- a/binutils/elfcomm.c +++ b/binutils/elfcomm.c @@ -21,20 +21,19 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -/* Do not use BFD types in this file that differ in size depending on - whether BFD64 is defined. Functions in this file are used by - readelf.c and elfedit.c which define BFD64, and by objdump.c which - doesn't. */ +/* Do not include bfd.h in this file. Functions in this file are used + by readelf.c and elfedit.c which define BFD64, and by objdump.c + which doesn't. */ #include "sysdep.h" #include "libiberty.h" #include "filenames.h" -#include "bfd.h" #include "aout/ar.h" -#include "bucomm.h" #include "elfcomm.h" #include +extern char *program_name; + void error (const char *message, ...) { @@ -461,13 +460,13 @@ adjust_relative_path (const char *file_name, const char *name, ARCH->sym_size and ARCH->sym_table. It is the caller's responsibility to free ARCH->index_array and ARCH->sym_table. - Returns TRUE upon success, FALSE otherwise. + Returns 1 upon success, 0 otherwise. If failure occurs an error message is printed. */ -static bfd_boolean -process_archive_index_and_symbols (struct archive_info * arch, - unsigned int sizeof_ar_index, - bfd_boolean read_symbols) +static int +process_archive_index_and_symbols (struct archive_info *arch, + unsigned int sizeof_ar_index, + int read_symbols) { size_t got; unsigned long size; @@ -482,7 +481,7 @@ process_archive_index_and_symbols (struct archive_info * arch, { error (_("%s: invalid archive header size: %ld\n"), arch->file_name, size); - return FALSE; + return 0; } size = size + (size & 1); @@ -495,7 +494,7 @@ process_archive_index_and_symbols (struct archive_info * arch, { error (_("%s: failed to skip archive symbol table\n"), arch->file_name); - return FALSE; + return 0; } } else @@ -513,7 +512,7 @@ process_archive_index_and_symbols (struct archive_info * arch, if (size < sizeof_ar_index) { error (_("%s: the archive index is empty\n"), arch->file_name); - return FALSE; + return 0; } /* Read the number of entries in the archive index. */ @@ -521,7 +520,7 @@ process_archive_index_and_symbols (struct archive_info * arch, if (got != sizeof_ar_index) { error (_("%s: failed to read archive index\n"), arch->file_name); - return FALSE; + return 0; } arch->index_num = byte_get_big_endian (integer_buffer, sizeof_ar_index); @@ -533,7 +532,7 @@ process_archive_index_and_symbols (struct archive_info * arch, { error (_("%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"), arch->file_name, (long) arch->index_num, sizeof_ar_index, size); - return FALSE; + return 0; } /* Read in the archive index. */ @@ -542,7 +541,7 @@ process_archive_index_and_symbols (struct archive_info * arch, if (index_buffer == NULL) { error (_("Out of memory whilst trying to read archive symbol index\n")); - return FALSE; + return 0; } got = fread (index_buffer, sizeof_ar_index, arch->index_num, arch->file); @@ -550,7 +549,7 @@ process_archive_index_and_symbols (struct archive_info * arch, { free (index_buffer); error (_("%s: failed to read archive index\n"), arch->file_name); - return FALSE; + return 0; } size -= arch->index_num * sizeof_ar_index; @@ -562,7 +561,7 @@ process_archive_index_and_symbols (struct archive_info * arch, { free (index_buffer); error (_("Out of memory whilst trying to convert the archive symbol index\n")); - return FALSE; + return 0; } for (i = 0; i < arch->index_num; i++) @@ -576,14 +575,14 @@ process_archive_index_and_symbols (struct archive_info * arch, { error (_("%s: the archive has an index but no symbols\n"), arch->file_name); - return FALSE; + return 0; } arch->sym_table = (char *) malloc (size); if (arch->sym_table == NULL) { error (_("Out of memory whilst trying to read archive index symbol table\n")); - return FALSE; + return 0; } arch->sym_size = size; @@ -592,7 +591,7 @@ process_archive_index_and_symbols (struct archive_info * arch, { error (_("%s: failed to read archive index symbol table\n"), arch->file_name); - return FALSE; + return 0; } } @@ -602,10 +601,10 @@ process_archive_index_and_symbols (struct archive_info * arch, { error (_("%s: failed to read archive header following archive index\n"), arch->file_name); - return FALSE; + return 0; } - return TRUE; + return 1; } /* Read the symbol table and long-name table from an archive. */ @@ -613,7 +612,7 @@ process_archive_index_and_symbols (struct archive_info * arch, int setup_archive (struct archive_info *arch, const char *file_name, FILE *file, off_t file_size, - bfd_boolean is_thin_archive, bfd_boolean read_symbols) + int is_thin_archive, int read_symbols) { size_t got; @@ -627,7 +626,7 @@ setup_archive (struct archive_info *arch, const char *file_name, arch->longnames_size = 0; arch->nested_member_origin = 0; arch->is_thin_archive = is_thin_archive; - arch->uses_64bit_indices = FALSE; + arch->uses_64bit_indices = 0; arch->next_arhdr_offset = SARMAG; /* Read the first archive member header. */ @@ -654,7 +653,7 @@ setup_archive (struct archive_info *arch, const char *file_name, } else if (const_strneq (arch->arhdr.ar_name, "/SYM64/ ")) { - arch->uses_64bit_indices = TRUE; + arch->uses_64bit_indices = 1; if (! process_archive_index_and_symbols (arch, 8, read_symbols)) return 1; } @@ -737,7 +736,7 @@ setup_nested_archive (struct archive_info *nested_arch, if (fstat (fileno (member_file), &statbuf) < 0) return 1; return setup_archive (nested_arch, member_file_name, member_file, - statbuf.st_size, FALSE, FALSE); + statbuf.st_size, 0, 0); } /* Release the memory used for the archive information. */ diff --git a/binutils/elfcomm.h b/binutils/elfcomm.h index 8d962f2731..abc7611fe3 100644 --- a/binutils/elfcomm.h +++ b/binutils/elfcomm.h @@ -64,8 +64,8 @@ struct archive_info unsigned long longnames_size; /* Size of the long file names table. */ unsigned long nested_member_origin; /* Origin in the nested archive of the current member. */ unsigned long next_arhdr_offset; /* Offset of the next archive header. */ - bfd_boolean is_thin_archive; /* TRUE if this is a thin archive. */ - bfd_boolean uses_64bit_indices; /* TRUE if the index table uses 64bit entries. */ + int is_thin_archive; /* 1 if this is a thin archive. */ + int uses_64bit_indices; /* 1 if the index table uses 64bit entries. */ struct ar_hdr arhdr; /* Current archive header. */ }; @@ -74,7 +74,7 @@ extern char *adjust_relative_path (const char *, const char *, unsigned long); /* Read the symbol table and long-name table from an archive. */ extern int setup_archive (struct archive_info *, const char *, FILE *, - off_t, bfd_boolean, bfd_boolean); + off_t, int, int); /* Open and setup a nested archive, if not already open. */ extern int setup_nested_archive (struct archive_info *, const char *); -- Alan Modra Australia Development Lab, IBM