binfmt_elf32.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:3k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * Support for 32-bit Linux/MIPS ELF binaries.
  3.  *
  4.  * Copyright (C) 1999, 2001 Ralf Baechle
  5.  * Copyright (C) 1999, 2001 Silicon Graphics, Inc.
  6.  *
  7.  * Heavily inspired by the 32-bit Sparc compat code which is
  8.  * Copyright (C) 1995, 1996, 1997, 1998 David S. Miller (davem@redhat.com)
  9.  * Copyright (C) 1995, 1996, 1997, 1998 Jakub Jelinek   (jj@ultra.linux.cz)
  10.  */
  11. #define ELF_ARCH EM_MIPS
  12. #define ELF_CLASS ELFCLASS32
  13. #ifdef __MIPSEB__
  14. #define ELF_DATA ELFDATA2MSB;
  15. #else /* __MIPSEL__ */
  16. #define ELF_DATA ELFDATA2LSB;
  17. #endif
  18. /* ELF register definitions */
  19. #define ELF_NGREG 45
  20. #define ELF_NFPREG 33
  21. typedef unsigned int elf_greg_t;
  22. typedef elf_greg_t elf_gregset_t[ELF_NGREG];
  23. typedef double elf_fpreg_t;
  24. typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
  25. #define elf_check_arch(x)
  26. ((x)->e_machine == EM_MIPS)
  27. #define TASK32_SIZE 0x80000000UL
  28. #undef ELF_ET_DYN_BASE
  29. #define ELF_ET_DYN_BASE         (TASK32_SIZE / 3 * 2)
  30. #include <asm/processor.h>
  31. #include <linux/module.h>
  32. #include <linux/config.h>
  33. #include <linux/elfcore.h>
  34. struct timeval32
  35. {
  36. unsigned int tv_sec, tv_usec;
  37. };
  38. #define elf_prstatus elf_prstatus32
  39. struct elf_prstatus32
  40. {
  41. struct elf_siginfo pr_info; /* Info associated with signal */
  42. short pr_cursig; /* Current signal */
  43. unsigned int pr_sigpend; /* Set of pending signals */
  44. unsigned int pr_sighold; /* Set of held signals */
  45. pid_t pr_pid;
  46. pid_t pr_ppid;
  47. pid_t pr_pgrp;
  48. pid_t pr_sid;
  49. struct timeval32 pr_utime; /* User time */
  50. struct timeval32 pr_stime; /* System time */
  51. struct timeval32 pr_cutime; /* Cumulative user time */
  52. struct timeval32 pr_cstime; /* Cumulative system time */
  53. elf_gregset_t pr_reg; /* GP registers */
  54. int pr_fpvalid; /* True if math co-processor being used.  */
  55. };
  56. #define elf_prpsinfo elf_prpsinfo32
  57. struct elf_prpsinfo32
  58. {
  59. char pr_state; /* numeric process state */
  60. char pr_sname; /* char for pr_state */
  61. char pr_zomb; /* zombie */
  62. char pr_nice; /* nice val */
  63. unsigned int pr_flag; /* flags */
  64. u16 pr_uid;
  65. u16 pr_gid;
  66. pid_t pr_pid, pr_ppid, pr_pgrp, pr_sid;
  67. /* Lots missing */
  68. char pr_fname[16]; /* filename of executable */
  69. char pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */
  70. };
  71. #define elf_addr_t u32
  72. #define elf_caddr_t u32
  73. #define init_elf_binfmt init_elf32_binfmt
  74. #undef CONFIG_BINFMT_ELF
  75. #ifdef CONFIG_BINFMT_ELF32
  76. #define CONFIG_BINFMT_ELF CONFIG_BINFMT_ELF32
  77. #endif
  78. #undef CONFIG_BINFMT_ELF_MODULE
  79. #ifdef CONFIG_BINFMT_ELF32_MODULE
  80. #define CONFIG_BINFMT_ELF_MODULE CONFIG_BINFMT_ELF32_MODULE
  81. #endif
  82. MODULE_DESCRIPTION("Binary format loader for compatibility with 32bit Linux/MIPS binaries");
  83. MODULE_AUTHOR("Ralf Baechle (ralf@oss.sgi.com)");
  84. #undef MODULE_DESCRIPTION
  85. #undef MODULE_AUTHOR
  86. #include "../../../fs/binfmt_elf.c"