elf.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:5k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef __ASMPARISC_ELF_H
  2. #define __ASMPARISC_ELF_H
  3. /*
  4.  * ELF register definitions..
  5.  */
  6. #include <asm/ptrace.h>
  7. #define EM_PARISC 15
  8. /*
  9.  * The following definitions are those for 32-bit ELF binaries on a 32-bit kernel
  10.  * and for 64-bit binaries on a 64-bit kernel.  To run 32-bit binaries on a 64-bit
  11.  * kernel, arch/parisc64/kernel/binfmt_elf32.c defines these macros appropriately
  12.  * and then #includes binfmt_elf.c, which then includes this file.
  13.  */
  14. #ifndef ELF_CLASS
  15. /*
  16.  * This is used to ensure we don't load something for the wrong architecture.
  17.  *
  18.  * Note that this header file is used by default in fs/binfmt_elf.c. So
  19.  * the following macros are for the default case. However, for the 64
  20.  * bit kernel we also support 32 bit parisc binaries. To do that
  21.  * arch/parisc64/kernel/binfmt_elf32.c defines its own set of these
  22.  * macros, and then it includes fs/binfmt_elf.c to provide an alternate
  23.  * elf binary handler for 32 bit binaries (on the 64 bit kernel).
  24.  */
  25. #ifdef __LP64__
  26. #define ELF_CLASS       ELFCLASS64
  27. #else
  28. #define ELF_CLASS ELFCLASS32
  29. #endif
  30. typedef unsigned long elf_greg_t;
  31. /* This yields a string that ld.so will use to load implementation
  32.    specific libraries for optimization.  This is more specific in
  33.    intent than poking at uname or /proc/cpuinfo.
  34.    For the moment, we have only optimizations for the Intel generations,
  35.    but that could change... */
  36. #define ELF_PLATFORM  ("PARISC" /*+((boot_cpu_data.x86-3)*5) */)
  37. #ifdef __KERNEL__
  38. #define SET_PERSONALITY(ex, ibcs2) 
  39. current->personality = PER_LINUX
  40. #endif
  41. /*
  42.  * Fill in general registers in a core dump.  This saves pretty
  43.  * much the same registers as hp-ux, although in a different order.
  44.  * Registers marked # below are not currently saved in pt_regs, so
  45.  * we use their current values here.
  46.  *
  47.  *  gr0..gr31
  48.  *  sr0..sr7
  49.  *  iaoq0..iaoq1
  50.  *  iasq0..iasq1
  51.  *  cr11 (sar)
  52.  *  cr19 (iir)
  53.  *  cr20 (isr)
  54.  *  cr21 (ior)
  55.  *  # cr22 (ipsw)
  56.  *  # cr0 (recovery counter)
  57.  *  # cr24..cr31 (temporary registers)
  58.  *  # cr8,9,12,13 (protection IDs)
  59.  *  # cr10 (scr/ccr)
  60.  *  # cr15 (ext int enable mask)
  61.  *
  62.  */
  63. #define ELF_CORE_COPY_REGS(dst, pt)
  64. memset(dst, 0, sizeof(dst)); /* don't leak any "random" bits */ 
  65. memcpy(dst + 0, pt->gr, 32 * sizeof(elf_greg_t)); 
  66. memcpy(dst + 32, pt->sr, 8 * sizeof(elf_greg_t)); 
  67. memcpy(dst + 40, pt->iaoq, 2 * sizeof(elf_greg_t)); 
  68. memcpy(dst + 42, pt->iasq, 2 * sizeof(elf_greg_t)); 
  69. dst[44] = pt->sar;   dst[45] = pt->iir; 
  70. dst[46] = pt->isr;   dst[47] = pt->ior; 
  71. dst[48] = mfctl(22); dst[49] = mfctl(0); 
  72. dst[50] = mfctl(24); dst[51] = mfctl(25); 
  73. dst[52] = mfctl(26); dst[53] = mfctl(27); 
  74. dst[54] = mfctl(28); dst[55] = mfctl(29); 
  75. dst[56] = mfctl(30); dst[57] = mfctl(31); 
  76. dst[58] = mfctl( 8); dst[59] = mfctl( 9); 
  77. dst[60] = mfctl(12); dst[61] = mfctl(13); 
  78. dst[62] = mfctl(10); dst[63] = mfctl(15);
  79. #endif /* ! ELF_CLASS */
  80. #define ELF_NGREG 80 /* We only need 64 at present, but leave space
  81.    for expansion. */
  82. typedef elf_greg_t elf_gregset_t[ELF_NGREG];
  83. #define ELF_NFPREG 32
  84. typedef double elf_fpreg_t;
  85. typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
  86. struct pt_regs; /* forward declaration... */
  87. #define elf_check_arch(x) ((x)->e_machine == EM_PARISC && (x)->e_ident[EI_CLASS] == ELF_CLASS)
  88. /*
  89.  * These are used to set parameters in the core dumps.
  90.  */
  91. #define ELF_DATA ELFDATA2MSB
  92. #define ELF_ARCH EM_PARISC
  93. /* %r23 is set by ld.so to a pointer to a function which might be 
  94.    registered using atexit.  This provides a mean for the dynamic
  95.    linker to call DT_FINI functions for shared libraries that have
  96.    been loaded before the code runs.
  97.    So that we can use the same startup file with static executables,
  98.    we start programs with a value of 0 to indicate that there is no
  99.    such function.  */
  100. #define ELF_PLAT_INIT(_r)       _r->gr[23] = 0
  101. #define USE_ELF_CORE_DUMP
  102. #define ELF_EXEC_PAGESIZE 4096
  103. /* This is the location that an ET_DYN program is loaded if exec'ed.  Typical
  104.    use of this is to invoke "./ld.so someprog" to test out a new version of
  105.    the loader.  We need to make sure that it is out of the way of the program
  106.    that it will "exec", and that there is sufficient room for the brk.
  107.    (2 * TASK_SIZE / 3) turns into something undefined when run through a
  108.    32 bit preprocessor and in some cases results in the kernel trying to map
  109.    ld.so to the kernel virtual base. Use a sane value instead. /Jes 
  110.   */
  111. #define ELF_ET_DYN_BASE         (TASK_UNMAPPED_BASE + 0x01000000)
  112. /* This yields a mask that user programs can use to figure out what
  113.    instruction set this CPU supports.  This could be done in user space,
  114.    but it's not easy, and we've already done it here.  */
  115. #define ELF_HWCAP 0
  116. /* (boot_cpu_data.x86_capability) */
  117. #endif