Support for Amiga 0x3F3 binary format
Nick Clifton
nickc@redhat.com
Mon May 10 13:45:00 GMT 2004
Hi Simon,
>I'm thinking about implementing support for the Amiga's executable
>format into binutils,
>
This sounds like fun :-)
> - Linking m68k and powerpc objects together, resulting in an
> application that requires an m68k and uses a powerpc CPU if it is
> present.
>
>Here is where it gets hairy. A system that does not have a powerpc board
>installed does not know the ppc specific section types and fails to load
>the binary, thus these sections need to be placed in an overlay and
>loaded by special startup code when the powerpc is present. The app
>would then (independently) determine whether the ppc is there and use
>it.
>
> - Disassembling an application
>
>I have no clue how to go on about this. The best option would probably
>be skipping over code sections for the "other" CPU type and requiring
>people who want to disassemble stuff to invoke both m68k-amigaos-objdump
>and powerpc-amigaos-objdump.
>
>
The problem here is knowing which kind of code is held in which
sections. If you are going to have "magic" section names, then you are
going to have to add code to GDB to handle this. Similarly you will
need to add code to objdump (and readelf) as well. I suspect that
getting this to work will be quite difficult and hard to do without
introducing much ugliness into the binutils code base...
A much cleaner approach - if it is possible - is to keep the two kinds
of binary separate. ie link together the m68k object files into one
executable and the powerpc object files into a second executable. Then
you can either have a clever piece of loader code which looks at the
name of the executable that contains it (eg "myprog.m68k") determines if
a powerpc board is available and if so loads the equivalent program
("myprog.ppc") onto it.
Basically the current binutils sources have no real support for
multiple-architecture files. (With exceptions for special cases like
instruction sets which come in two size, eg ARM and THUMB). Even in
these cases special code has had to be added to binutils and GDB to
handle the different instruction sets. So although there is no
theoretical reason why it cannot be done, you will probably find it,
umm, difficult.
> - How should the targets be named? Is "m68k-unknown-amigaos" (derived
> from m68k-amigaos) and "powerpc-unknown-amigaos" (likewise) okay?
>
>
Yup, those sound fine. Is the amigos file format a proprietary format
? If so then we may not be able to include it in the binutils sources....
> - It is pretty clear that most of the code will be common to the m68k
> and powerpc targets, and that this code should support every feature
> there is. However, what object format should I report for hybrid
> binaries?
>
>
The containing format. ie if the file is an m68k executable with a
special powerpc section inside it then report the binary as being
m68k-unknown-amigos.
> - When building support for the powerpc side of things, the startup
> codes would have to be built for m68k. Should I:
> + Generate the startup code in maintainer mode only, requiring
> people who modify the asm to have an assembler for the m68k target
> installed?
> + Build a small assembler in a subdir and assemble the code
> everytime it is needed?
> + Do something else?
>
>
Do something else. The startup code is not really something that
should be included in the binutils. Instead it should be part of the
newlib project or the BSP project. (Both of which are on Sourceware).
Cheers
Nick
More information about the Binutils
mailing list