public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [Patch]: Fix bfd_get_arch_size for non-ELF targets
@ 2014-04-03 10:09 Tristan Gingold
  2014-04-03 12:35 ` Alan Modra
  0 siblings, 1 reply; 5+ messages in thread
From: Tristan Gingold @ 2014-04-03 10:09 UTC (permalink / raw)
  To: binutils@sourceware.org Development

Hello,

currently bfd_get_arch_size always returns -1 on non-ELF targets. One visible consequence is
the output of objdump -h: the headline is printed for 64 bit vma, even if the vma are 32 bit wide
(and printed using 8 chars).

With this patch, bfd_get_arch_size returns bfd_arch_bits_per_address on non-ELF targets.

I don't know if it is necessary to handle ELF differently here.  It's already the case for
is32bit.

Ok for trunk ?

Tristan.

bfd/
	* bfd.c (bfd_get_arch_size): Default is taken from arch.


diff --git a/bfd/bfd.c b/bfd/bfd.c
index 6b00592..512abc4 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -1087,7 +1087,7 @@ bfd_get_arch_size (bfd *abfd)
   if (abfd->xvec->flavour == bfd_target_elf_flavour)
     return get_elf_backend_data (abfd)->s->arch_size;
 
-  return -1;
+  return bfd_arch_bits_per_address (abfd);
 }
 
 /*

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Patch]: Fix bfd_get_arch_size for non-ELF targets
  2014-04-03 10:09 [Patch]: Fix bfd_get_arch_size for non-ELF targets Tristan Gingold
@ 2014-04-03 12:35 ` Alan Modra
  2014-04-03 12:48   ` Tristan Gingold
  0 siblings, 1 reply; 5+ messages in thread
From: Alan Modra @ 2014-04-03 12:35 UTC (permalink / raw)
  To: Tristan Gingold; +Cc: binutils@sourceware.org Development

On Thu, Apr 03, 2014 at 12:09:04PM +0200, Tristan Gingold wrote:
> --- a/bfd/bfd.c
> +++ b/bfd/bfd.c
> @@ -1087,7 +1087,7 @@ bfd_get_arch_size (bfd *abfd)
>    if (abfd->xvec->flavour == bfd_target_elf_flavour)
>      return get_elf_backend_data (abfd)->s->arch_size;
>  
> -  return -1;
> +  return bfd_arch_bits_per_address (abfd);

This might be better:
  return bfd_arch_bits_per_address (abfd) > 32 ? 64 : 32;

On more than one target, bfd_arch_bits_per_address will return 16,
and more than one target returns 24.  So your patch would mean you
need to change the test in objdump.c, and you'd break
nm.c:set_print_width.

-- 
Alan Modra
Australia Development Lab, IBM

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Patch]: Fix bfd_get_arch_size for non-ELF targets
  2014-04-03 12:35 ` Alan Modra
@ 2014-04-03 12:48   ` Tristan Gingold
  2014-04-03 23:17     ` Alan Modra
  0 siblings, 1 reply; 5+ messages in thread
From: Tristan Gingold @ 2014-04-03 12:48 UTC (permalink / raw)
  To: Alan Modra; +Cc: binutils@sourceware.org Development


On 03 Apr 2014, at 14:34, Alan Modra <amodra@gmail.com> wrote:

> On Thu, Apr 03, 2014 at 12:09:04PM +0200, Tristan Gingold wrote:
>> --- a/bfd/bfd.c
>> +++ b/bfd/bfd.c
>> @@ -1087,7 +1087,7 @@ bfd_get_arch_size (bfd *abfd)
>>   if (abfd->xvec->flavour == bfd_target_elf_flavour)
>>     return get_elf_backend_data (abfd)->s->arch_size;
>> 
>> -  return -1;
>> +  return bfd_arch_bits_per_address (abfd);
> 
> This might be better:
>  return bfd_arch_bits_per_address (abfd) > 32 ? 64 : 32;
> 
> On more than one target, bfd_arch_bits_per_address will return 16,
> and more than one target returns 24.  So your patch would mean you
> need to change the test in objdump.c, and you'd break
> nm.c:set_print_width.

You're right.  I have also adjusted the spec of that function.

Is that ok ?

Tristan.

bfd/
	* bfd.c (bfd_get_arch_size): Default is taken from arch.


diff --git a/bfd/bfd.c b/bfd/bfd.c
index 6b00592..41de1bb 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -1073,9 +1073,11 @@ SYNOPSIS
  	int bfd_get_arch_size (bfd *abfd);
 
 DESCRIPTION
-	Returns the architecture address size, in bits, as determined
-	by the object file's format.  For ELF, this information is
-	included in the header.
+	Returns the normalized architecture address size, in bits, as
+	determined by the object file's format.  By normalized, we mean
+	either 32 or 64.  For ELF, this information is included in the
+	header.  Use bfd_arch_bits_per_address for number of bits in
+	the architecture address.
 
 RETURNS
 	Returns the arch size in bits if known, <<-1>> otherwise.
@@ -1087,7 +1089,7 @@ bfd_get_arch_size (bfd *abfd)
   if (abfd->xvec->flavour == bfd_target_elf_flavour)
     return get_elf_backend_data (abfd)->s->arch_size;
 
-  return -1;
+  return bfd_arch_bits_per_address (abfd) > 32 ? 64 : 32;
 }
 
 /*

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Patch]: Fix bfd_get_arch_size for non-ELF targets
  2014-04-03 12:48   ` Tristan Gingold
@ 2014-04-03 23:17     ` Alan Modra
  2014-04-04 12:20       ` Tristan Gingold
  0 siblings, 1 reply; 5+ messages in thread
From: Alan Modra @ 2014-04-03 23:17 UTC (permalink / raw)
  To: Tristan Gingold; +Cc: binutils@sourceware.org Development

On Thu, Apr 03, 2014 at 02:48:35PM +0200, Tristan Gingold wrote:
> 	* bfd.c (bfd_get_arch_size): Default is taken from arch.

OK.

-- 
Alan Modra
Australia Development Lab, IBM

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Patch]: Fix bfd_get_arch_size for non-ELF targets
  2014-04-03 23:17     ` Alan Modra
@ 2014-04-04 12:20       ` Tristan Gingold
  0 siblings, 0 replies; 5+ messages in thread
From: Tristan Gingold @ 2014-04-04 12:20 UTC (permalink / raw)
  To: Alan Modra; +Cc: binutils@sourceware.org Development


On 04 Apr 2014, at 01:16, Alan Modra <amodra@gmail.com> wrote:

> On Thu, Apr 03, 2014 at 02:48:35PM +0200, Tristan Gingold wrote:
>> 	* bfd.c (bfd_get_arch_size): Default is taken from arch.
> 
> OK.

Thanks, now pushed.

Tristan.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-04-04 12:20 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-03 10:09 [Patch]: Fix bfd_get_arch_size for non-ELF targets Tristan Gingold
2014-04-03 12:35 ` Alan Modra
2014-04-03 12:48   ` Tristan Gingold
2014-04-03 23:17     ` Alan Modra
2014-04-04 12:20       ` Tristan Gingold

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).