2005-04-17 02:20:36 +04:00
/* elf.h: FR-V ELF definitions
*
* Copyright ( C ) 2003 Red Hat , Inc . All Rights Reserved .
* Written by David Howells ( dhowells @ redhat . com )
* - Derived from include / asm - m68knommu / elf . h
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version
* 2 of the License , or ( at your option ) any later version .
*/
# ifndef __ASM_ELF_H
# define __ASM_ELF_H
# include <asm/ptrace.h>
# include <asm/user.h>
struct elf32_hdr ;
/*
* ELF header e_flags defines .
*/
# define EF_FRV_GPR_MASK 0x00000003 /* mask for # of gprs */
# define EF_FRV_GPR32 0x00000001 /* Only uses GR on 32-register */
# define EF_FRV_GPR64 0x00000002 /* Only uses GR on 64-register */
# define EF_FRV_FPR_MASK 0x0000000c /* mask for # of fprs */
# define EF_FRV_FPR32 0x00000004 /* Only uses FR on 32-register */
# define EF_FRV_FPR64 0x00000008 /* Only uses FR on 64-register */
# define EF_FRV_FPR_NONE 0x0000000C /* Uses software floating-point */
# define EF_FRV_DWORD_MASK 0x00000030 /* mask for dword support */
# define EF_FRV_DWORD_YES 0x00000010 /* Assumes stack aligned to 8-byte boundaries. */
# define EF_FRV_DWORD_NO 0x00000020 /* Assumes stack aligned to 4-byte boundaries. */
# define EF_FRV_DOUBLE 0x00000040 /* Uses double instructions. */
# define EF_FRV_MEDIA 0x00000080 /* Uses media instructions. */
# define EF_FRV_PIC 0x00000100 /* Uses position independent code. */
# define EF_FRV_NON_PIC_RELOCS 0x00000200 /* Does not use position Independent code. */
# define EF_FRV_MULADD 0x00000400 /* -mmuladd */
# define EF_FRV_BIGPIC 0x00000800 /* -fPIC */
# define EF_FRV_LIBPIC 0x00001000 /* -mlibrary-pic */
# define EF_FRV_G0 0x00002000 /* -G 0, no small data ptr */
# define EF_FRV_NOPACK 0x00004000 /* -mnopack */
# define EF_FRV_FDPIC 0x00008000 /* -mfdpic */
# define EF_FRV_CPU_MASK 0xff000000 /* specific cpu bits */
# define EF_FRV_CPU_GENERIC 0x00000000 /* Set CPU type is FR-V */
# define EF_FRV_CPU_FR500 0x01000000 /* Set CPU type is FR500 */
# define EF_FRV_CPU_FR300 0x02000000 /* Set CPU type is FR300 */
# define EF_FRV_CPU_SIMPLE 0x03000000 /* SIMPLE */
# define EF_FRV_CPU_TOMCAT 0x04000000 /* Tomcat, FR500 prototype */
# define EF_FRV_CPU_FR400 0x05000000 /* Set CPU type is FR400 */
# define EF_FRV_CPU_FR550 0x06000000 /* Set CPU type is FR550 */
# define EF_FRV_CPU_FR405 0x07000000 /* Set CPU type is FR405 */
# define EF_FRV_CPU_FR450 0x08000000 /* Set CPU type is FR450 */
/*
* FR - V ELF relocation types
*/
/*
* 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 ] ;
2006-07-10 15:44:55 +04:00
typedef struct user_fpmedia_regs elf_fpregset_t ;
2005-04-17 02:20:36 +04:00
/*
* This is used to ensure we don ' t load something for the wrong architecture .
*/
extern int elf_check_arch ( const struct elf32_hdr * hdr ) ;
# define elf_check_fdpic(x) ((x)->e_flags & EF_FRV_FDPIC && !((x)->e_flags & EF_FRV_NON_PIC_RELOCS))
# define elf_check_const_displacement(x) ((x)->e_flags & EF_FRV_PIC)
/*
* These are used to set parameters in the core dumps .
*/
# define ELF_CLASS ELFCLASS32
# define ELF_DATA ELFDATA2MSB
# define ELF_ARCH EM_FRV
# define ELF_PLAT_INIT(_r) \
do { \
__kernel_frame0_ptr - > gr16 = 0 ; \
__kernel_frame0_ptr - > gr17 = 0 ; \
__kernel_frame0_ptr - > gr18 = 0 ; \
__kernel_frame0_ptr - > gr19 = 0 ; \
__kernel_frame0_ptr - > gr20 = 0 ; \
__kernel_frame0_ptr - > gr21 = 0 ; \
__kernel_frame0_ptr - > gr22 = 0 ; \
__kernel_frame0_ptr - > gr23 = 0 ; \
__kernel_frame0_ptr - > gr24 = 0 ; \
__kernel_frame0_ptr - > gr25 = 0 ; \
__kernel_frame0_ptr - > gr26 = 0 ; \
__kernel_frame0_ptr - > gr27 = 0 ; \
__kernel_frame0_ptr - > gr29 = 0 ; \
} while ( 0 )
# define ELF_FDPIC_PLAT_INIT(_regs, _exec_map_addr, _interp_map_addr, _dynamic_addr) \
do { \
__kernel_frame0_ptr - > gr16 = _exec_map_addr ; \
__kernel_frame0_ptr - > gr17 = _interp_map_addr ; \
__kernel_frame0_ptr - > gr18 = _dynamic_addr ; \
__kernel_frame0_ptr - > gr19 = 0 ; \
__kernel_frame0_ptr - > gr20 = 0 ; \
__kernel_frame0_ptr - > gr21 = 0 ; \
__kernel_frame0_ptr - > gr22 = 0 ; \
__kernel_frame0_ptr - > gr23 = 0 ; \
__kernel_frame0_ptr - > gr24 = 0 ; \
__kernel_frame0_ptr - > gr25 = 0 ; \
__kernel_frame0_ptr - > gr26 = 0 ; \
__kernel_frame0_ptr - > gr27 = 0 ; \
__kernel_frame0_ptr - > gr29 = 0 ; \
} while ( 0 )
2009-06-11 16:05:24 +04:00
# define CORE_DUMP_USE_REGSET
2006-07-10 15:44:55 +04:00
# define ELF_FDPIC_CORE_EFLAGS EF_FRV_FDPIC
2005-04-17 02:20:36 +04:00
# define ELF_EXEC_PAGESIZE 16384
/* 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 . */
# define ELF_ET_DYN_BASE 0x08000000UL
/* This yields a mask that user programs can use to figure out what
instruction set this cpu supports . */
# 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 . */
# define ELF_PLATFORM (NULL)
2008-10-16 17:39:57 +04:00
# define SET_PERSONALITY(ex) set_personality(PER_LINUX)
2005-04-17 02:20:36 +04:00
# endif