home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-alpha / a.out.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.5 KB  |  107 lines

  1. #ifndef __ALPHA_A_OUT_H__
  2. #define __ALPHA_A_OUT_H__
  3.  
  4. #include <linux/types.h>
  5.  
  6. /*
  7.  * OSF/1 ECOFF header structs.  ECOFF files consist of:
  8.  *     - a file header (struct filehdr),
  9.  *    - an a.out header (struct aouthdr),
  10.  *    - one or more section headers (struct scnhdr). 
  11.  *      The filhdr's "f_nscns" field contains the
  12.  *      number of section headers.
  13.  */
  14.  
  15. struct filehdr
  16. {
  17.     /* OSF/1 "file" header */
  18.     __u16 f_magic, f_nscns;
  19.     __u32 f_timdat;
  20.     __u64 f_symptr;
  21.     __u32 f_nsyms;
  22.     __u16 f_opthdr, f_flags;
  23. };
  24.  
  25. struct aouthdr
  26. {
  27.     __u64 info;        /* after that it looks quite normal.. */
  28.     __u64 tsize;
  29.     __u64 dsize;
  30.     __u64 bsize;
  31.     __u64 entry;
  32.     __u64 text_start;    /* with a few additions that actually make sense */
  33.     __u64 data_start;
  34.     __u64 bss_start;
  35.     __u32 gprmask, fprmask;    /* bitmask of general & floating point regs used in binary */
  36.     __u64 gpvalue;
  37. };
  38.  
  39. struct scnhdr
  40. {
  41.     char    s_name[8];
  42.     __u64    s_paddr;
  43.     __u64    s_vaddr;
  44.     __u64    s_size;
  45.     __u64    s_scnptr;
  46.     __u64    s_relptr;
  47.     __u64    s_lnnoptr;
  48.     __u16    s_nreloc;
  49.     __u16    s_nlnno;
  50.     __u32    s_flags;
  51. };
  52.  
  53. struct exec
  54. {
  55.     /* OSF/1 "file" header */
  56.     struct filehdr        fh;
  57.     struct aouthdr        ah;
  58. };
  59.  
  60. /*
  61.  * Define's so that the kernel exec code can access the a.out header
  62.  * fields...
  63.  */
  64. #define    a_info        ah.info
  65. #define    a_text        ah.tsize
  66. #define a_data        ah.dsize
  67. #define a_bss        ah.bsize
  68. #define a_entry        ah.entry
  69. #define a_textstart    ah.text_start
  70. #define    a_datastart    ah.data_start
  71. #define    a_bssstart    ah.bss_start
  72. #define    a_gprmask    ah.gprmask
  73. #define a_fprmask    ah.fprmask
  74. #define a_gpvalue    ah.gpvalue
  75.  
  76. #define N_TXTADDR(x) ((x).a_textstart)
  77. #define N_DATADDR(x) ((x).a_datastart)
  78. #define N_BSSADDR(x) ((x).a_bssstart)
  79. #define N_DRSIZE(x) 0
  80. #define N_TRSIZE(x) 0
  81. #define N_SYMSIZE(x) 0
  82.  
  83. #define AOUTHSZ        sizeof(struct aouthdr)
  84. #define SCNHSZ        sizeof(struct scnhdr)
  85. #define SCNROUND    16
  86.  
  87. #define N_TXTOFF(x) \
  88.   ((long) N_MAGIC(x) == ZMAGIC ? 0 : \
  89.    (sizeof(struct exec) + (x).fh.f_nscns*SCNHSZ + SCNROUND - 1) & ~(SCNROUND - 1))
  90.  
  91. #ifdef __KERNEL__
  92.  
  93. /* Assume that start addresses below 4G belong to a TASO application.
  94.    Unfortunately, there is no proper bit in the exec header to check.
  95.    Worse, we have to notice the start address before swapping to use
  96.    /sbin/loader, which of course is _not_ a TASO application.  */
  97. #define SET_AOUT_PERSONALITY(BFPM, EX) \
  98.     set_personality (((BFPM->sh_bang || EX.ah.entry < 0x100000000L \
  99.                ? ADDR_LIMIT_32BIT : 0) | PER_OSF4))
  100.  
  101. #define STACK_TOP \
  102.   (current->personality & ADDR_LIMIT_32BIT ? 0x80000000 : 0x00120000000UL)
  103.  
  104. #endif
  105.  
  106. #endif /* __A_OUT_GNU_H__ */
  107.