[comp.sys.amiga.tech] Structure of executables

paolucci@snll-arpagw.UUCP (Sam Paolucci) (08/17/88)

Can anybody tell me what the structure of an Amiga executable file is?
I'm talking about a file that has already been linked.  Information on
where such intelligible documentation is located will also be
appreciated.  I have already looked it up in the AmigaDos Manual, but
I find the description there unintelligible.

-- 
					-+= SAM =+-
"the best things in life are free"

				ARPA: paolucci@snll-arpagw.llnl.gov

ain@mace.cc.purdue.edu (Patrick White) (08/18/88)

In article <213@snll-arpagw.UUCP> paolucci@snll-arpagw.UUCP (Sam Paolucci) writes:
>Can anybody tell me what the structure of an Amiga executable file is?
>I'm talking about a file that has already been linked.  Information on
>where such intelligible documentation is located will also be
>appreciated.  I have already looked it up in the AmigaDos Manual, but
>I find the description there unintelligible.

   I just went through this one recently myself.. the info is in the AmigaDOS
technical reference manual.  It's a bit hard to follow until you get a small
executable, dump it in hex, and follow through with the manual -- then it all
becomes clear and is really pretty neat.
   BTW, Manx does not use the *object* module format that is explained in the
manual.. don't know about Lattice.

Pat White  (ain@s.cc.purdue.edu)

toebes@sas.UUCP (John Toebes) (08/22/88)

In article <455@mace.cc.purdue.edu> ain@mace.cc.purdue.edu.UUCP (Patrick White) writes:
>   BTW, Manx does not use the *object* module format that is explained in the
>manual.. don't know about Lattice.
>Pat White  (ain@s.cc.purdue.edu)
Lattice follows the standard as described in the Manual with the use of
three new hunk types and relocation types added by BLINK.  In addition,
Version 4.0 introduced an index hunk for creatring indexed libraries to
improve linking speed.  Full documentation on these extensions are available
through Lattice Tech Support.

All of these enhancements have been sent to Commodore for comment.  In
addition to the Lattice compiler, the CAPE assembler and ASM68k PD version
support all the BLINK enhancements.

Some important points
* ext_common and ext_res are not supported by BLINK.  To be fair, I have not
      been successful at making ALINK work with them.
* resident libraries do not do anything meaningful (trust me) and as such you
      will always see a 0 immediately after the HUNK_HEADER in a load module
      indicating that none are referenced by the module.
* Overlays require more than just the object file format information to 
      work.  The loader looks at magic values in the code to pass along
      information about the load file.
* A hunk may be terminated by more than one HUNK_END
* The loader only allows the following hunks:
    HUNK_HEADER
    HUNK_CODE   HUNK_DATA  HUNK_BSS
    HUNK_RELOC32
    HUNK_BREAK   HUNK_OVERLAY
    HUNK_SYMBOL  HUNK_DEBUG
    HUNK_END     HUNK_NAME
* if a HUNK_BSS is greater than 64K*4, only thle first 64K*4 bytes will
   be zeroed
* The hunk header and the size in the actual hunk doe not have to agree.
     Any excess in the hunk_header will be *UNINITIALIZED*.  This is used
     by BLINK to generate Supressed BSS as part of the Data section.
* HUNK_DEBUG sections have no inherent format.  However, Lattice and
   CAPE share the same format for line number tables:

There are many other hidden things in the object file format that I would
be more than willing to answer questions about.

/*---------------------All standard Disclaimers apply---------------------*/
/*----Working for but not officially representing SAS or Lattice Inc.-----*/
/*----John A. Toebes, VIII             usenet:...!mcnc!rti!sas!toebes-----*/
/*------------------------------------------------------------------------*/