This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: ELF octets_per_byte
- From: Pedro Alves <palves at redhat dot com>
- To: dgisselq at ieee dot org, binutils at sourceware dot org
- Date: Wed, 24 Feb 2016 10:51:31 +0000
- Subject: Re: ELF octets_per_byte
- Authentication-results: sourceware.org; auth=none
- References: <1456242622 dot 30661 dot 448 dot camel at jericho>
On 02/23/2016 03:50 PM, Dan wrote:
> Hello!
>
> I am in the process of trying to port binutils to a new architecture,
> the ZipCPU. (You can find a description of it here:
> https://opencores.org/project,zipcpu) One unique "feature" of this
> processor is that the size of the minimum addressable unit is 32-bits.
>
> While binutils has support for an "octets_per_byte" value other than
> one, this feature does not appear to be fully supported. Indeed, the
> "bfd/elflink.c" file contains several "FIXME" lines regarding the
> insufficiency of the current support.
GDB 7.11 gained support for this, though I'm not aware of any bfd-side
work:
>From gdb/NEWS:
* Support for reading/writing memory and extracting values on architectures
whose memory is addressable in units of any integral multiple of 8 bits.
>
> All of these can be easily fixed, and I would like to propose a patch
> (or series of patches) to do this. The first part of this process will
> need to be identifying which ELF variables/values are "bytes" (units of
> the targets address space), and which are "octets" (8-bit values, units
> of the more commonly used address space). Sadly, these units are not
> consistent with the meaning of "bytes" found within the ELF
> specification, nor can they be since the ELF specification does not
> acknowledge the potential difference between these two.
For the sake of tree-wide consistency, please consider sharing
nomenclature with gdb.
Grep for "memory_unit_size" and "unit size" under src/gdb/ .
Examples:
Since this field is expressed in host bytes, its value is appropriate
to pass to memcpy and such (it is assumed that GDB itself always runs
on an 8-bits addressable architecture). However, when using it for
target address arithmetic (e.g. adding it to a target address), the
type_length_units function should be used in order to get the length
expressed in target addressable memory units. */
unsigned int length;
...
# Return the size in 8-bit bytes of an addressable memory unit on this
# architecture. This corresponds to the number of 8-bit bytes associated to
# each address in memory.
m:int:addressable_memory_unit_size:void:::default_addressable_memory_unit_size::0
...
Thanks,
Pedro Alves