2005-04-17 02:20:36 +04:00
# ifndef __ALPHA_A_OUT_H__
# define __ALPHA_A_OUT_H__
# include <linux/types.h>
/*
* OSF / 1 ECOFF header structs . ECOFF files consist of :
* - a file header ( struct filehdr ) ,
* - an a . out header ( struct aouthdr ) ,
* - one or more section headers ( struct scnhdr ) .
* The filhdr ' s " f_nscns " field contains the
* number of section headers .
*/
struct filehdr
{
/* OSF/1 "file" header */
__u16 f_magic , f_nscns ;
__u32 f_timdat ;
__u64 f_symptr ;
__u32 f_nsyms ;
__u16 f_opthdr , f_flags ;
} ;
struct aouthdr
{
__u64 info ; /* after that it looks quite normal.. */
__u64 tsize ;
__u64 dsize ;
__u64 bsize ;
__u64 entry ;
__u64 text_start ; /* with a few additions that actually make sense */
__u64 data_start ;
__u64 bss_start ;
__u32 gprmask , fprmask ; /* bitmask of general & floating point regs used in binary */
__u64 gpvalue ;
} ;
struct scnhdr
{
char s_name [ 8 ] ;
__u64 s_paddr ;
__u64 s_vaddr ;
__u64 s_size ;
__u64 s_scnptr ;
__u64 s_relptr ;
__u64 s_lnnoptr ;
__u16 s_nreloc ;
__u16 s_nlnno ;
__u32 s_flags ;
} ;
struct exec
{
/* OSF/1 "file" header */
struct filehdr fh ;
struct aouthdr ah ;
} ;
/*
* Define ' s so that the kernel exec code can access the a . out header
* fields . . .
*/
# define a_info ah.info
# define a_text ah.tsize
# define a_data ah.dsize
# define a_bss ah.bsize
# define a_entry ah.entry
# define a_textstart ah.text_start
# define a_datastart ah.data_start
# define a_bssstart ah.bss_start
# define a_gprmask ah.gprmask
# define a_fprmask ah.fprmask
# define a_gpvalue ah.gpvalue
# define N_TXTADDR(x) ((x).a_textstart)
# define N_DATADDR(x) ((x).a_datastart)
# define N_BSSADDR(x) ((x).a_bssstart)
# define N_DRSIZE(x) 0
# define N_TRSIZE(x) 0
# define N_SYMSIZE(x) 0
# define AOUTHSZ sizeof(struct aouthdr)
# define SCNHSZ sizeof(struct scnhdr)
# define SCNROUND 16
# define N_TXTOFF(x) \
( ( long ) N_MAGIC ( x ) = = ZMAGIC ? 0 : \
( sizeof ( struct exec ) + ( x ) . fh . f_nscns * SCNHSZ + SCNROUND - 1 ) & ~ ( SCNROUND - 1 ) )
# ifdef __KERNEL__
/* Assume that start addresses below 4G belong to a TASO application.
Unfortunately , there is no proper bit in the exec header to check .
Worse , we have to notice the start address before swapping to use
/ sbin / loader , which of course is _not_ a TASO application . */
# define SET_AOUT_PERSONALITY(BFPM, EX) \
2008-10-16 09:02:37 +04:00
set_personality ( ( ( BFPM - > taso | | EX . ah . entry < 0x100000000L \
2005-04-17 02:20:36 +04:00
? ADDR_LIMIT_32BIT : 0 ) | PER_OSF4 ) )
2008-02-08 15:19:26 +03:00
# endif /* __KERNEL__ */
2005-04-17 02:20:36 +04:00
# endif /* __A_OUT_GNU_H__ */