public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Alan Modra <amodra@gmail.com>
To: Pedro Alves <pedro@palves.net>
Cc: Hans-Peter Nilsson <hp@axis.com>, binutils@sourceware.org
Subject: Re: [PATCH] Don't define ARCH_cris for BFD64
Date: Fri, 6 May 2022 10:26:46 +0930	[thread overview]
Message-ID: <YnRyTm3jJDf0dBN4@squeak.grove.modra.org> (raw)
In-Reply-To: <ccfa44e7-7435-4e80-1054-cec678431a16@palves.net>

On Thu, May 05, 2022 at 12:11:29PM +0100, Pedro Alves wrote:
> On 2022-05-04 23:37, Alan Modra via Binutils wrote:
> 
> > OK, so this means we have two slightly different versions of cris
> > support.  Configured to support cris directly with --target or
> > --enable-targets mentioning one of the cris tuples will always give
> > you a 64-bit bfd.  On a 32-bit host configured with
> > --enable-targets=all you'll get a 32-bit bfd, and miss some support
> > for explicitly choosing and displaying targets.  (The #ifdef comments
> > in config.bfd are used to generate targmatch.h, which gets included
> > into targets.c.)
> 
> I guess I don't understand the logic fully, and if you have the patience for me, I'd like
> to understand it better.
> 
> In the --enable-targets=all case with a 32-bit bfd, it seems counterintuitive to want to be able to choose
> and display cris, if its bfd supposedly wants 64-bit, given want64=true.  If bfd says cris wants
> 64-bit bfd, and you have a 32-bit bfd, it seems weird to build it in 32-bit mode, and let users choose and
> use it?  

As is often the case the truth is more complicated than it would
appear on the surface.  I think the cris support works fine with a
32-bit bfd.  It's just that the cris testsuite has expressions
that overflow 32 bits.

gas/testsuite/gas/cris/shexpr-1.s has this expression:

    ((0x17<<23)+((0xfede4194/8192)<<4)+8)

It evaluates to 0x0bff6f28 when calculating in 64 bits, but to
0x0b7f6f38 when calculating in 32 bits, because 0xfede4194 is
−0x121be6c as a signed 32-bit number and the division is done using
signed bfd_vma values.

gas/testsuite/gas/cris/range-err-1.s has three uses of 0xffffffff that
don't give the expected error when used in 8-bit and 16-bit fields if
bfd_vma is 32 bits.  That's because 0xffffffff is -1, and apparently
-1 is OK for those fields.

No doubt gas expression evaluation could be improved.  eg. We could
use C rules for whether constants are signed or unsigned, and track
that through expression evaluation.  The thing that give me pause in
recommending that (or doing it myself) is that I suspect it might open
up a can of worms assembling 64-bit target code, discovering lots of
places where compiler output or user assembly isn't clean.  A simple
example is that 0xffffffffffffffff would no longer be equal to -1, and
therefore might trigger field overflow errors.

-- 
Alan Modra
Australia Development Lab, IBM

  parent reply	other threads:[~2022-05-06  0:56 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-04  7:56 Luis Machado
2022-05-04  8:08 ` Alan Modra
2022-05-04  8:15   ` Luis Machado
2022-05-04  8:39     ` Alan Modra
2022-05-04 14:37       ` Hans-Peter Nilsson
2022-05-04 22:37         ` Alan Modra
2022-05-05  9:01           ` Luis Machado
2022-05-05 11:11           ` Pedro Alves
2022-05-05 12:56             ` Hans-Peter Nilsson
2022-05-06  0:56             ` Alan Modra [this message]
2022-05-06  2:35               ` Hans-Peter Nilsson
2022-05-06  9:09                 ` Luis Machado
2022-05-06  9:00               ` 32-bit archs, want64=true, and gas integers (Re: [PATCH] Don't define ARCH_cris for BFD64) Pedro Alves
2022-05-06  9:55                 ` 32-bit archs, want64=true, and gas integers Jan Beulich
2022-05-06 10:01                   ` Pedro Alves
2022-05-06 10:17                     ` Jan Beulich
2022-05-06 10:43                       ` Pedro Alves
2022-05-06 11:55                         ` Jan Beulich
2022-05-06 12:04                           ` Pedro Alves
2022-05-06 14:32                         ` Hans-Peter Nilsson
2022-05-06 14:44                           ` Pedro Alves
2022-05-07 20:19                             ` Hans-Peter Nilsson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YnRyTm3jJDf0dBN4@squeak.grove.modra.org \
    --to=amodra@gmail.com \
    --cc=binutils@sourceware.org \
    --cc=hp@axis.com \
    --cc=pedro@palves.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).