From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by sourceware.org (Postfix) with ESMTPS id EF093398B899 for ; Fri, 9 Apr 2021 12:48:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org EF093398B899 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tdevries@suse.de X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 0DF7BB03F; Fri, 9 Apr 2021 12:48:19 +0000 (UTC) Subject: Re: [PATCH] Add -p native and -e native To: Mark Wielaard Cc: dwz@sourceware.org, jakub@redhat.com, Michael Matz References: <20210409092439.GA17210@delia> <20210409094231.GD30119@wildebeest.org> From: Tom de Vries Message-ID: <2cc8f90d-ec0a-bd8c-f8b8-92643dbd9dbe@suse.de> Date: Fri, 9 Apr 2021 14:48:18 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.0 MIME-Version: 1.0 In-Reply-To: <20210409094231.GD30119@wildebeest.org> Content-Type: multipart/mixed; boundary="------------BA5F01E60A536AF9A7806B0F" Content-Language: en-US X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, NICE_REPLY_A, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP 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: dwz@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Dwz mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Apr 2021 12:48:21 -0000 This is a multi-part message in MIME format. --------------BA5F01E60A536AF9A7806B0F Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit On 4/9/21 11:42 AM, Mark Wielaard wrote: > On Fri, Apr 09, 2021 at 11:24:41AM +0200, Tom de Vries wrote: >> Add option parameter native to options -p and -e. >> >> We determine native as the result of: >> - -p: sizeof (void *) >> - -e: __BYTE_ORDER__ >> when compiling using CC without CFLAGS, such that if we build dwz with -m32 on >> x86_64 like so: >> ... >> $ make CFLAGS="-m32 -O2 -g" LDFLAGS=-m32 >> ... >> and we have: >> ... >> $ file ./dwz >> dwz: ELF 32-bit LSB executable, Intel 80386 >> ... >> we still have: >> ... >> $ ./dwz -? >> ... >> -p, --multifile-pointer-size >> Set pointer size of multifile, in number of bytes. >> Native pointer size is 8. >> Default value: auto. >> ... >> >> Any comments? > > Except for this narrow multilib case, doesn't this actually make it > impossible to do a cross-arch build? I think so, yes. If say we'd have a cross compiler targeting arm but running on x86_64, then the ./native exec would be for arm but we'd try to run it on x86_64. > I don't think this should be a > compile time option, unless it can derived from the target > architecture that the dwz binary is build for. I have an updated patch that does that, AFAIU. I just wonder whether using the term native for this functionality will cause confusion. Perhaps 'self' is a better way of describing this? And now I also wonder about whether there are architectures where using __SIZEOF_POINTER__ will be different than what is generated as dwarf pointer size. If so, in the previous setup I could have used CC -g, readelf and grep to find out what is actually used and pass that as a define to args.c Perhaps it's a mistake to try to assign any functionality to 'native' when crosscompiling. Thanks, - Tom --------------BA5F01E60A536AF9A7806B0F Content-Type: text/x-patch; charset=UTF-8; name="0001-Add-p-native-and-e-native.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline; filename="0001-Add-p-native-and-e-native.patch" Add -p native and -e native Add option parameter native to options -p and -e. We determine native as the result of: - -p: __SIZEOF_POINTER__ - -e: __BYTE_ORDER__ in dwz. 2021-04-09 Tom de Vries * args.c (XSTR, STR, NATIVE_ENDIAN_STRING): New macro. (dwz_multi_file_options_help, usage): Mention -p native and -e native. (parse_args): Handle -p native and -e native. * dwz.1 (-p, -e): Mention native. --- args.c | 42 +++++++++++++++++++++++++++++++++++++----- dwz.1 | 10 ++++++---- 2 files changed, 43 insertions(+), 9 deletions(-) diff --git a/args.c b/args.c index 23bf1d4..5a664cf 100644 --- a/args.c +++ b/args.c @@ -32,6 +32,8 @@ #include "args.h" =20 #define IMPLIES(A, B) (!((A) && !(B))) +#define XSTR(s) STR(s) +#define STR(s) #s =20 #if DEVEL int tracing; @@ -220,6 +222,14 @@ static struct option_help dwz_single_file_options_he= lp[] =3D "Place the output in OUTFILE." } }; =20 +#if __BYTE_ORDER__ =3D=3D __ORDER_LITTLE_ENDIAN__ +#define NATIVE_ENDIAN_STRING little +#elif NATIVE_ENDIAN =3D=3D __ORDER_BIG_ENDIAN__ +#define NATIVE_ENDIAN_STRING big +#else +#define NATIVE_ENDIAN_STRING not available +#endif + /* Describe mult-file command line options. */ static struct option_help dwz_multi_file_options_help[] =3D { @@ -236,10 +246,12 @@ static struct option_help dwz_multi_file_options_he= lp[] =3D { "5", "dwarf-5", NULL, NULL, "Emit DWARF 5 standardized supplementary object files instead of" " GNU extension .debug_altlink." }, - { "p", "multifile-pointer-size", "", "auto", - "Set pointer size of multifile, in number of bytes." }, - { "e", "multifile-endian", "", "auto", - "Set endianity of multifile." }, + { "p", "multifile-pointer-size", "", "auto", + "Set pointer size of multifile, in number of bytes." + " Native pointer size is " XSTR (__SIZEOF_POINTER__) "." }, + { "e", "multifile-endian", "", "auto", + "Set endianity of multifile." + " Native endianity is " XSTR (NATIVE_ENDIAN_STRING) "." }, { "j", "jobs", "", "number of processors / 2", "Process files in parallel." } }; @@ -385,7 +397,7 @@ usage (int failing) FILE *stream =3D failing ? stderr : stdout; const char *header_lines[] =3D { "dwz [common options] [-h] [-m COMMONFILE] [-M NAME | -r] [-5]", - " [-p ] [-e ] [-j N] [FILES]", + " [-p ] [-e ] [-j N] [FILES]",= "dwz [common options] -o OUTFILE FILE", "dwz [ -v | -? ]" }; @@ -650,6 +662,11 @@ parse_args (int argc, char *argv[], bool *hardlink, = const char **outfile) multifile_force_ptr_size =3D 0; break; } + if (strcmp (optarg, "native") =3D=3D 0) + { + multifile_force_ptr_size =3D __SIZEOF_POINTER__; + break; + } l =3D strtoul (optarg, &end, 0); if (*end !=3D '\0' || optarg =3D=3D end || (unsigned int) l !=3D l) error (1, 0, "invalid argument -l %s", optarg); @@ -662,6 +679,21 @@ parse_args (int argc, char *argv[], bool *hardlink, = const char **outfile) multifile_force_endian =3D 0; break; } + if (strcmp (optarg, "native") =3D=3D 0) + { + switch (__BYTE_ORDER__) + { + case __ORDER_LITTLE_ENDIAN__: + multifile_force_endian =3D ELFDATA2LSB; + break; + case __ORDER_BIG_ENDIAN__: + multifile_force_endian =3D ELFDATA2MSB; + break; + default: + error (1, 0, "Cannot determine native endian"); + } + break; + } if (strlen (optarg) !=3D 1) error (1, 0, "invalid argument -l %s", optarg); switch (optarg[0]) diff --git a/dwz.1 b/dwz.1 index 6fec6ed..1cff329 100644 --- a/dwz.1 +++ b/dwz.1 @@ -77,13 +77,15 @@ the executable or shared library to the file named in= the argument of the \fB-m\fR option. Either \fB-M\fR or \fB-r\fR option can be specified, but not both. .TP -.B \-p N \-\-multifile-pointer-size +.B \-p N \-\-multifile-pointer-size Specify the pointer size of the multifile, in bytes. If auto, use the -pointer size of the files, provided they match. +pointer size of the files, provided they match. If native, use native p= ointer +size, as specified in the help message. .TP -.B \-p \-\-multifile-endian +.B \-p \-\-multifile-endian Specify the endianity of the multifile. If auto, use the endianity of -the files, provided they match. +the files, provided they match. If native, use native endianity, as spe= cified +in the help message. .TP .B \-q \-\-quiet Silence up some of the most common messages. --------------BA5F01E60A536AF9A7806B0F--