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

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