binfmt_elf32.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:3k
- /*
- * Support for 32-bit Linux/MIPS ELF binaries.
- *
- * Copyright (C) 1999, 2001 Ralf Baechle
- * Copyright (C) 1999, 2001 Silicon Graphics, Inc.
- *
- * Heavily inspired by the 32-bit Sparc compat code which is
- * Copyright (C) 1995, 1996, 1997, 1998 David S. Miller (davem@redhat.com)
- * Copyright (C) 1995, 1996, 1997, 1998 Jakub Jelinek (jj@ultra.linux.cz)
- */
- #define ELF_ARCH EM_MIPS
- #define ELF_CLASS ELFCLASS32
- #ifdef __MIPSEB__
- #define ELF_DATA ELFDATA2MSB;
- #else /* __MIPSEL__ */
- #define ELF_DATA ELFDATA2LSB;
- #endif
- /* ELF register definitions */
- #define ELF_NGREG 45
- #define ELF_NFPREG 33
- typedef unsigned int elf_greg_t;
- typedef elf_greg_t elf_gregset_t[ELF_NGREG];
- typedef double elf_fpreg_t;
- typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
- #define elf_check_arch(x)
- ((x)->e_machine == EM_MIPS)
- #define TASK32_SIZE 0x80000000UL
- #undef ELF_ET_DYN_BASE
- #define ELF_ET_DYN_BASE (TASK32_SIZE / 3 * 2)
- #include <asm/processor.h>
- #include <linux/module.h>
- #include <linux/config.h>
- #include <linux/elfcore.h>
- struct timeval32
- {
- unsigned int tv_sec, tv_usec;
- };
- #define elf_prstatus elf_prstatus32
- struct elf_prstatus32
- {
- struct elf_siginfo pr_info; /* Info associated with signal */
- short pr_cursig; /* Current signal */
- unsigned int pr_sigpend; /* Set of pending signals */
- unsigned int pr_sighold; /* Set of held signals */
- pid_t pr_pid;
- pid_t pr_ppid;
- pid_t pr_pgrp;
- pid_t pr_sid;
- struct timeval32 pr_utime; /* User time */
- struct timeval32 pr_stime; /* System time */
- struct timeval32 pr_cutime; /* Cumulative user time */
- struct timeval32 pr_cstime; /* Cumulative system time */
- elf_gregset_t pr_reg; /* GP registers */
- int pr_fpvalid; /* True if math co-processor being used. */
- };
- #define elf_prpsinfo elf_prpsinfo32
- struct elf_prpsinfo32
- {
- char pr_state; /* numeric process state */
- char pr_sname; /* char for pr_state */
- char pr_zomb; /* zombie */
- char pr_nice; /* nice val */
- unsigned int pr_flag; /* flags */
- u16 pr_uid;
- u16 pr_gid;
- pid_t pr_pid, pr_ppid, pr_pgrp, pr_sid;
- /* Lots missing */
- char pr_fname[16]; /* filename of executable */
- char pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */
- };
- #define elf_addr_t u32
- #define elf_caddr_t u32
- #define init_elf_binfmt init_elf32_binfmt
- #undef CONFIG_BINFMT_ELF
- #ifdef CONFIG_BINFMT_ELF32
- #define CONFIG_BINFMT_ELF CONFIG_BINFMT_ELF32
- #endif
- #undef CONFIG_BINFMT_ELF_MODULE
- #ifdef CONFIG_BINFMT_ELF32_MODULE
- #define CONFIG_BINFMT_ELF_MODULE CONFIG_BINFMT_ELF32_MODULE
- #endif
- MODULE_DESCRIPTION("Binary format loader for compatibility with 32bit Linux/MIPS binaries");
- MODULE_AUTHOR("Ralf Baechle (ralf@oss.sgi.com)");
- #undef MODULE_DESCRIPTION
- #undef MODULE_AUTHOR
- #include "../../../fs/binfmt_elf.c"