2009-06-12 22:01:00 +08:00
# ifndef _ASM_SCORE_ELF_H
# define _ASM_SCORE_ELF_H
2009-08-30 12:26:32 +08:00
# include <linux/ptrace.h>
2009-06-12 22:01:00 +08:00
# define EM_SCORE7 135
/* Relocation types. */
# define R_SCORE_NONE 0
# define R_SCORE_HI16 1
# define R_SCORE_LO16 2
# define R_SCORE_BCMP 3
# define R_SCORE_24 4
# define R_SCORE_PC19 5
# define R_SCORE16_11 6
# define R_SCORE16_PC8 7
# define R_SCORE_ABS32 8
# define R_SCORE_ABS16 9
# define R_SCORE_DUMMY2 10
# define R_SCORE_GP15 11
# define R_SCORE_GNU_VTINHERIT 12
# define R_SCORE_GNU_VTENTRY 13
# define R_SCORE_GOT15 14
# define R_SCORE_GOT_LO16 15
# define R_SCORE_CALL15 16
# define R_SCORE_GPREL32 17
# define R_SCORE_REL32 18
# define R_SCORE_DUMMY_HI16 19
# define R_SCORE_IMM30 20
# define R_SCORE_IMM32 21
2009-08-30 12:26:32 +08:00
/* ELF register definitions */
typedef unsigned long elf_greg_t ;
# define ELF_NGREG (sizeof(struct pt_regs) / sizeof(elf_greg_t))
typedef elf_greg_t elf_gregset_t [ ELF_NGREG ] ;
2009-06-12 22:01:00 +08:00
2009-08-30 12:26:32 +08:00
/* Score does not have fp regs. */
typedef double elf_fpreg_t ;
typedef elf_fpreg_t elf_fpregset_t ;
2009-06-12 22:01:00 +08:00
# define elf_check_arch(x) ((x)->e_machine == EM_SCORE7)
/*
* These are used to set parameters in the core dumps .
*/
# define ELF_CLASS ELFCLASS32
/*
* These are used to set parameters in the core dumps .
*/
# define ELF_DATA ELFDATA2LSB
# define ELF_ARCH EM_SCORE7
# define SET_PERSONALITY(ex) \
do { \
set_personality ( PER_LINUX ) ; \
} while ( 0 )
struct task_struct ;
struct pt_regs ;
2009-08-30 12:26:32 +08:00
# define CORE_DUMP_USE_REGSET
2009-06-12 22:01:00 +08:00
# define ELF_EXEC_PAGESIZE PAGE_SIZE
/* This yields a mask that user programs can use to figure out what
instruction set this cpu supports . This could be done in userspace ,
but it ' s not easy , and we ' ve already done it here . */
# define ELF_HWCAP (0)
/* This yields a string that ld.so will use to load implementation
specific libraries for optimization . This is more specific in
intent than poking at uname or / proc / cpuinfo .
For the moment , we have only optimizations for the Intel generations ,
but that could change . . . */
# define ELF_PLATFORM (NULL)
# define ELF_PLAT_INIT(_r, load_addr) \
do { \
_r - > regs [ 1 ] = _r - > regs [ 2 ] = _r - > regs [ 3 ] = _r - > regs [ 4 ] = 0 ; \
_r - > regs [ 5 ] = _r - > regs [ 6 ] = _r - > regs [ 7 ] = _r - > regs [ 8 ] = 0 ; \
_r - > regs [ 9 ] = _r - > regs [ 10 ] = _r - > regs [ 11 ] = _r - > regs [ 12 ] = 0 ; \
_r - > regs [ 13 ] = _r - > regs [ 14 ] = _r - > regs [ 15 ] = _r - > regs [ 16 ] = 0 ; \
_r - > regs [ 17 ] = _r - > regs [ 18 ] = _r - > regs [ 19 ] = _r - > regs [ 20 ] = 0 ; \
_r - > regs [ 21 ] = _r - > regs [ 22 ] = _r - > regs [ 23 ] = _r - > regs [ 24 ] = 0 ; \
_r - > regs [ 25 ] = _r - > regs [ 26 ] = _r - > regs [ 27 ] = _r - > regs [ 28 ] = 0 ; \
_r - > regs [ 30 ] = _r - > regs [ 31 ] = 0 ; \
} while ( 0 )
/* This is the location that an ET_DYN program is loaded if exec'ed. Typical
use of this is to invoke " ./ld.so someprog " to test out a new version of
the loader . We need to make sure that it is out of the way of the program
that it will " exec " , and that there is sufficient room for the brk . */
# ifndef ELF_ET_DYN_BASE
# define ELF_ET_DYN_BASE (TASK_SIZE / 3 * 2)
# endif
# endif /* _ASM_SCORE_ELF_H */