diff options
Diffstat (limited to 'arch/openrisc/include/asm/elf.h')
| -rw-r--r-- | arch/openrisc/include/asm/elf.h | 108 | 
1 files changed, 108 insertions, 0 deletions
diff --git a/arch/openrisc/include/asm/elf.h b/arch/openrisc/include/asm/elf.h new file mode 100644 index 000000000000..2ce603bbfdd3 --- /dev/null +++ b/arch/openrisc/include/asm/elf.h @@ -0,0 +1,108 @@ +/* + * OpenRISC Linux + * + * Linux architectural port borrowing liberally from similar works of + * others.  All original copyrights apply as per the original source + * declaration. + * + * OpenRISC implementation: + * Copyright (C) 2003 Matjaz Breskvar <[email protected]> + * Copyright (C) 2010-2011 Jonas Bonn <[email protected]> + * et al. + * + * 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_OPENRISC_ELF_H +#define __ASM_OPENRISC_ELF_H + +/* + * ELF register definitions.. + */ +#include <linux/types.h> +#include <linux/ptrace.h> + + +/* The OR1K relocation types... not all relevant for module loader */ +#define R_OR32_NONE	0 +#define R_OR32_32	1 +#define R_OR32_16	2 +#define R_OR32_8	3 +#define R_OR32_CONST	4 +#define R_OR32_CONSTH	5 +#define R_OR32_JUMPTARG	6 +#define R_OR32_VTINHERIT 7 +#define R_OR32_VTENTRY	8 + +typedef unsigned long elf_greg_t; + +/* + * Note that NGREG is defined to ELF_NGREG in include/linux/elfcore.h, and is + * thus exposed to user-space. + */ +#define ELF_NGREG (sizeof(struct user_regs_struct) / sizeof(elf_greg_t)) +typedef elf_greg_t elf_gregset_t[ELF_NGREG]; + +/* A placeholder; OR32 does not have fp support yes, so no fp regs for now.  */ +typedef unsigned long elf_fpregset_t; + +/* This should be moved to include/linux/elf.h */ +#define EM_OR32         0x8472 +#define EM_OPENRISC     92     /* OpenRISC 32-bit embedded processor */ + +/* + * These are used to set parameters in the core dumps. + */ +#define ELF_ARCH	EM_OR32 +#define ELF_CLASS	ELFCLASS32 +#define ELF_DATA	ELFDATA2MSB + +#ifdef __KERNEL__ + +/* + * This is used to ensure we don't load something for the wrong architecture. + */ + +#define elf_check_arch(x) \ +	(((x)->e_machine == EM_OR32) || ((x)->e_machine == EM_OPENRISC)) + +/* 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         (0x08000000) + +/* + * Enable dump using regset. + * This covers all of general/DSP/FPU regs. + */ +#define CORE_DUMP_USE_REGSET + +#define ELF_EXEC_PAGESIZE	8192 + +extern void dump_elf_thread(elf_greg_t *dest, struct pt_regs *pt); +#define ELF_CORE_COPY_REGS(dest, regs) dump_elf_thread(dest, regs); + +/* 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 SET_PERSONALITY(ex) set_personality(PER_LINUX) + +#endif /* __KERNEL__ */ +#endif  |