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-sparc / a.out.h next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.9 KB  |  99 lines

  1. /* $Id: a.out.h,v 1.13 2000/01/09 10:46:53 anton Exp $ */
  2. #ifndef __SPARC_A_OUT_H__
  3. #define __SPARC_A_OUT_H__
  4.  
  5. #define SPARC_PGSIZE    0x2000        /* Thanks to the sun4 architecture... */
  6. #define SEGMENT_SIZE    SPARC_PGSIZE  /* whee... */
  7.  
  8. struct exec {
  9.     unsigned char a_dynamic:1;      /* A __DYNAMIC is in this image */
  10.     unsigned char a_toolversion:7;
  11.     unsigned char a_machtype;
  12.     unsigned short a_info;
  13.     unsigned long a_text;        /* length of text, in bytes */
  14.     unsigned long a_data;        /* length of data, in bytes */
  15.     unsigned long a_bss;        /* length of bss, in bytes */
  16.     unsigned long a_syms;        /* length of symbol table, in bytes */
  17.     unsigned long a_entry;        /* where program begins */
  18.     unsigned long a_trsize;
  19.     unsigned long a_drsize;
  20. };
  21.  
  22. /* Where in the file does the text information begin? */
  23. #define N_TXTOFF(x)     (N_MAGIC(x) == ZMAGIC ? 0 : sizeof (struct exec))
  24.  
  25. /* Where do the Symbols start? */
  26. #define N_SYMOFF(x)     (N_TXTOFF(x) + (x).a_text +   \
  27.                          (x).a_data + (x).a_trsize +  \
  28.                          (x).a_drsize)
  29.  
  30. /* Where does text segment go in memory after being loaded? */
  31. #define N_TXTADDR(x)    (((N_MAGIC(x) == ZMAGIC) &&        \
  32.                      ((x).a_entry < SPARC_PGSIZE)) ?   \
  33.                           0 : SPARC_PGSIZE)
  34.  
  35. /* And same for the data segment.. */
  36. #define N_DATADDR(x) (N_MAGIC(x)==OMAGIC ?         \
  37.                       (N_TXTADDR(x) + (x).a_text)  \
  38.                        : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x))))
  39.  
  40. #define N_TRSIZE(a)    ((a).a_trsize)
  41. #define N_DRSIZE(a)    ((a).a_drsize)
  42. #define N_SYMSIZE(a)    ((a).a_syms)
  43.  
  44. /*
  45.  * Sparc relocation types
  46.  */
  47. enum reloc_type
  48. {
  49.     RELOC_8,
  50.     RELOC_16,
  51.     RELOC_32,    /* simplest relocs */
  52.     RELOC_DISP8,
  53.     RELOC_DISP16,
  54.     RELOC_DISP32,    /* Disp's (pc-rel) */
  55.     RELOC_WDISP30,
  56.     RELOC_WDISP22,  /* SR word disp's */
  57.     RELOC_HI22,
  58.     RELOC_22,    /* SR 22-bit relocs */
  59.     RELOC_13,
  60.     RELOC_LO10,    /* SR 13&10-bit relocs */
  61.     RELOC_SFA_BASE,
  62.     RELOC_SFA_OFF13, /* SR S.F.A. relocs */
  63.     RELOC_BASE10,
  64.     RELOC_BASE13,
  65.     RELOC_BASE22,    /* base_relative pic */
  66.     RELOC_PC10,
  67.     RELOC_PC22,    /* special pc-rel pic */
  68.     RELOC_JMP_TBL,    /* jmp_tbl_rel in pic */
  69.     RELOC_SEGOFF16,    /* ShLib offset-in-seg */
  70.     RELOC_GLOB_DAT,
  71.     RELOC_JMP_SLOT,
  72.     RELOC_RELATIVE     /* rtld relocs */
  73. };
  74.  
  75. /*
  76.  * Format of a relocation datum.
  77.  */
  78. struct relocation_info /* used when header.a_machtype == M_SPARC */
  79. {
  80.         unsigned long   r_address;  /* relocation addr */
  81.         unsigned int    r_index:24; /* segment index or symbol index */
  82.         unsigned int    r_extern:1; /* if F, r_index==SEG#; if T, SYM idx */
  83.         int             r_pad:2;    /* <unused> */
  84.         enum reloc_type r_type:5;   /* type of relocation to perform */
  85.         long            r_addend;   /* addend for relocation value */
  86. };
  87.  
  88. #define N_RELOCATION_INFO_DECLARED 1
  89.  
  90. #ifdef __KERNEL__
  91.  
  92. #include <asm/page.h>
  93.  
  94. #define STACK_TOP    (PAGE_OFFSET - PAGE_SIZE)
  95.  
  96. #endif /* __KERNEL__ */
  97.  
  98. #endif /* __SPARC_A_OUT_H__ */
  99.