CRIS: UAPI: fix elf.h export
CRIS userspace (uClibc for one) expects asm/elf.h to be exported but this header appears to have gone missing at some point. Move it to uapi/ and export it. Signed-off-by: Rabin Vincent <rabin@rab.in> Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
This commit is contained in:
committed by
Jesper Nilsson
parent
3a79a07537
commit
2493d3e28a
@@ -6,6 +6,9 @@ header-y += ../arch-v32/arch/
|
||||
header-y += auxvec.h
|
||||
header-y += bitsperlong.h
|
||||
header-y += byteorder.h
|
||||
header-y += elf.h
|
||||
header-y += elf_v10.h
|
||||
header-y += elf_v32.h
|
||||
header-y += errno.h
|
||||
header-y += ethernet.h
|
||||
header-y += etraxgpio.h
|
||||
|
||||
90
arch/cris/include/uapi/asm/elf.h
Normal file
90
arch/cris/include/uapi/asm/elf.h
Normal file
@@ -0,0 +1,90 @@
|
||||
#ifndef __ASMCRIS_ELF_H
|
||||
#define __ASMCRIS_ELF_H
|
||||
|
||||
/*
|
||||
* ELF register definitions..
|
||||
*/
|
||||
|
||||
#ifdef __arch_v32
|
||||
#include <asm/elf_v32.h>
|
||||
#else
|
||||
#include <asm/elf_v10.h>
|
||||
#endif
|
||||
|
||||
#define R_CRIS_NONE 0
|
||||
#define R_CRIS_8 1
|
||||
#define R_CRIS_16 2
|
||||
#define R_CRIS_32 3
|
||||
#define R_CRIS_8_PCREL 4
|
||||
#define R_CRIS_16_PCREL 5
|
||||
#define R_CRIS_32_PCREL 6
|
||||
#define R_CRIS_GNU_VTINHERIT 7
|
||||
#define R_CRIS_GNU_VTENTRY 8
|
||||
#define R_CRIS_COPY 9
|
||||
#define R_CRIS_GLOB_DAT 10
|
||||
#define R_CRIS_JUMP_SLOT 11
|
||||
#define R_CRIS_RELATIVE 12
|
||||
#define R_CRIS_16_GOT 13
|
||||
#define R_CRIS_32_GOT 14
|
||||
#define R_CRIS_16_GOTPLT 15
|
||||
#define R_CRIS_32_GOTPLT 16
|
||||
#define R_CRIS_32_GOTREL 17
|
||||
#define R_CRIS_32_PLT_GOTREL 18
|
||||
#define R_CRIS_32_PLT_PCREL 19
|
||||
|
||||
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. */
|
||||
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
|
||||
|
||||
/* A placeholder; CRIS does not have any fp regs. */
|
||||
typedef unsigned long elf_fpregset_t;
|
||||
|
||||
/*
|
||||
* These are used to set parameters in the core dumps.
|
||||
*/
|
||||
#define ELF_CLASS ELFCLASS32
|
||||
#define ELF_DATA ELFDATA2LSB
|
||||
#define ELF_ARCH EM_CRIS
|
||||
|
||||
/* The master for these definitions is {binutils}/include/elf/cris.h: */
|
||||
/* User symbols in this file have a leading underscore. */
|
||||
#define EF_CRIS_UNDERSCORE 0x00000001
|
||||
|
||||
/* This is a mask for different incompatible machine variants. */
|
||||
#define EF_CRIS_VARIANT_MASK 0x0000000e
|
||||
|
||||
/* Variant 0; may contain v0..10 object. */
|
||||
#define EF_CRIS_VARIANT_ANY_V0_V10 0x00000000
|
||||
|
||||
/* Variant 1; contains v32 object. */
|
||||
#define EF_CRIS_VARIANT_V32 0x00000002
|
||||
|
||||
/* Variant 2; contains object compatible with v32 and v10. */
|
||||
#define EF_CRIS_VARIANT_COMMON_V10_V32 0x00000004
|
||||
/* End of excerpt from {binutils}/include/elf/cris.h. */
|
||||
|
||||
#define ELF_EXEC_PAGESIZE 8192
|
||||
|
||||
/* 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 (TASK_SIZE / 3 * 2)
|
||||
|
||||
/* This yields a mask that user programs can use to figure out what
|
||||
instruction set this CPU supports. This could be done in user space,
|
||||
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.
|
||||
*/
|
||||
|
||||
#define ELF_PLATFORM (NULL)
|
||||
|
||||
#endif
|
||||
84
arch/cris/include/uapi/asm/elf_v10.h
Normal file
84
arch/cris/include/uapi/asm/elf_v10.h
Normal file
@@ -0,0 +1,84 @@
|
||||
#ifndef __ASMCRIS_ARCH_ELF_H
|
||||
#define __ASMCRIS_ARCH_ELF_H
|
||||
|
||||
#define ELF_MACH EF_CRIS_VARIANT_ANY_V0_V10
|
||||
|
||||
/* Matches struct user_regs_struct */
|
||||
#define ELF_NGREG 35
|
||||
|
||||
/*
|
||||
* This is used to ensure we don't load something for the wrong architecture.
|
||||
*/
|
||||
#define elf_check_arch(x) \
|
||||
((x)->e_machine == EM_CRIS \
|
||||
&& ((((x)->e_flags & EF_CRIS_VARIANT_MASK) == EF_CRIS_VARIANT_ANY_V0_V10 \
|
||||
|| (((x)->e_flags & EF_CRIS_VARIANT_MASK) == EF_CRIS_VARIANT_COMMON_V10_V32))))
|
||||
|
||||
/*
|
||||
* ELF register definitions..
|
||||
*/
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
/* SVR4/i386 ABI (pages 3-31, 3-32) says that when the program
|
||||
starts (a register; assume first param register for CRIS)
|
||||
contains a pointer to a function which might be
|
||||
registered using `atexit'. This provides a mean for the
|
||||
dynamic linker to call DT_FINI functions for shared libraries
|
||||
that have been loaded before the code runs.
|
||||
|
||||
A value of 0 tells we have no such handler. */
|
||||
|
||||
/* Explicitly set registers to 0 to increase determinism. */
|
||||
#define ELF_PLAT_INIT(_r, load_addr) do { \
|
||||
(_r)->r13 = 0; (_r)->r12 = 0; (_r)->r11 = 0; (_r)->r10 = 0; \
|
||||
(_r)->r9 = 0; (_r)->r8 = 0; (_r)->r7 = 0; (_r)->r6 = 0; \
|
||||
(_r)->r5 = 0; (_r)->r4 = 0; (_r)->r3 = 0; (_r)->r2 = 0; \
|
||||
(_r)->r1 = 0; (_r)->r0 = 0; (_r)->mof = 0; (_r)->srp = 0; \
|
||||
} while (0)
|
||||
|
||||
/* The additional layer below is because the stack pointer is missing in
|
||||
the pt_regs struct, but needed in a core dump. pr_reg is a elf_gregset_t,
|
||||
and should be filled in according to the layout of the user_regs_struct
|
||||
struct; regs is a pt_regs struct. We dump all registers, though several are
|
||||
obviously unnecessary. That way there's less need for intelligence at
|
||||
the receiving end (i.e. gdb). */
|
||||
#define ELF_CORE_COPY_REGS(pr_reg, regs) \
|
||||
pr_reg[0] = regs->r0; \
|
||||
pr_reg[1] = regs->r1; \
|
||||
pr_reg[2] = regs->r2; \
|
||||
pr_reg[3] = regs->r3; \
|
||||
pr_reg[4] = regs->r4; \
|
||||
pr_reg[5] = regs->r5; \
|
||||
pr_reg[6] = regs->r6; \
|
||||
pr_reg[7] = regs->r7; \
|
||||
pr_reg[8] = regs->r8; \
|
||||
pr_reg[9] = regs->r9; \
|
||||
pr_reg[10] = regs->r10; \
|
||||
pr_reg[11] = regs->r11; \
|
||||
pr_reg[12] = regs->r12; \
|
||||
pr_reg[13] = regs->r13; \
|
||||
pr_reg[14] = rdusp(); /* sp */ \
|
||||
pr_reg[15] = regs->irp; /* pc */ \
|
||||
pr_reg[16] = 0; /* p0 */ \
|
||||
pr_reg[17] = rdvr(); /* vr */ \
|
||||
pr_reg[18] = 0; /* p2 */ \
|
||||
pr_reg[19] = 0; /* p3 */ \
|
||||
pr_reg[20] = 0; /* p4 */ \
|
||||
pr_reg[21] = (regs->dccr & 0xffff); /* ccr */ \
|
||||
pr_reg[22] = 0; /* p6 */ \
|
||||
pr_reg[23] = regs->mof; /* mof */ \
|
||||
pr_reg[24] = 0; /* p8 */ \
|
||||
pr_reg[25] = 0; /* ibr */ \
|
||||
pr_reg[26] = 0; /* irp */ \
|
||||
pr_reg[27] = regs->srp; /* srp */ \
|
||||
pr_reg[28] = 0; /* bar */ \
|
||||
pr_reg[29] = regs->dccr; /* dccr */ \
|
||||
pr_reg[30] = 0; /* brp */ \
|
||||
pr_reg[31] = rdusp(); /* usp */ \
|
||||
pr_reg[32] = 0; /* csrinstr */ \
|
||||
pr_reg[33] = 0; /* csraddr */ \
|
||||
pr_reg[34] = 0; /* csrdata */
|
||||
|
||||
|
||||
#endif
|
||||
76
arch/cris/include/uapi/asm/elf_v32.h
Normal file
76
arch/cris/include/uapi/asm/elf_v32.h
Normal file
@@ -0,0 +1,76 @@
|
||||
#ifndef _ASM_CRIS_ELF_H
|
||||
#define _ASM_CRIS_ELF_H
|
||||
|
||||
#define ELF_CORE_EFLAGS EF_CRIS_VARIANT_V32
|
||||
|
||||
/* Matches struct user_regs_struct */
|
||||
#define ELF_NGREG 32
|
||||
|
||||
/*
|
||||
* This is used to ensure we don't load something for the wrong architecture.
|
||||
*/
|
||||
#define elf_check_arch(x) \
|
||||
((x)->e_machine == EM_CRIS \
|
||||
&& ((((x)->e_flags & EF_CRIS_VARIANT_MASK) == EF_CRIS_VARIANT_V32 \
|
||||
|| (((x)->e_flags & EF_CRIS_VARIANT_MASK) == EF_CRIS_VARIANT_COMMON_V10_V32))))
|
||||
|
||||
/* CRISv32 ELF register definitions. */
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
/* Explicitly zero out registers to increase determinism. */
|
||||
#define ELF_PLAT_INIT(_r, load_addr) do { \
|
||||
(_r)->r13 = 0; (_r)->r12 = 0; (_r)->r11 = 0; (_r)->r10 = 0; \
|
||||
(_r)->r9 = 0; (_r)->r8 = 0; (_r)->r7 = 0; (_r)->r6 = 0; \
|
||||
(_r)->r5 = 0; (_r)->r4 = 0; (_r)->r3 = 0; (_r)->r2 = 0; \
|
||||
(_r)->r1 = 0; (_r)->r0 = 0; (_r)->mof = 0; (_r)->srp = 0; \
|
||||
(_r)->acr = 0; \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* An executable for which elf_read_implies_exec() returns TRUE will
|
||||
* have the READ_IMPLIES_EXEC personality flag set automatically.
|
||||
*/
|
||||
#define elf_read_implies_exec_binary(ex, have_pt_gnu_stack) (!(have_pt_gnu_stack))
|
||||
|
||||
/*
|
||||
* This is basically a pt_regs with the additional definition
|
||||
* of the stack pointer since it's needed in a core dump.
|
||||
* pr_regs is a elf_gregset_t and should be filled according
|
||||
* to the layout of user_regs_struct.
|
||||
*/
|
||||
#define ELF_CORE_COPY_REGS(pr_reg, regs) \
|
||||
pr_reg[0] = regs->r0; \
|
||||
pr_reg[1] = regs->r1; \
|
||||
pr_reg[2] = regs->r2; \
|
||||
pr_reg[3] = regs->r3; \
|
||||
pr_reg[4] = regs->r4; \
|
||||
pr_reg[5] = regs->r5; \
|
||||
pr_reg[6] = regs->r6; \
|
||||
pr_reg[7] = regs->r7; \
|
||||
pr_reg[8] = regs->r8; \
|
||||
pr_reg[9] = regs->r9; \
|
||||
pr_reg[10] = regs->r10; \
|
||||
pr_reg[11] = regs->r11; \
|
||||
pr_reg[12] = regs->r12; \
|
||||
pr_reg[13] = regs->r13; \
|
||||
pr_reg[14] = rdusp(); /* SP */ \
|
||||
pr_reg[15] = regs->acr; /* ACR */ \
|
||||
pr_reg[16] = 0; /* BZ */ \
|
||||
pr_reg[17] = rdvr(); /* VR */ \
|
||||
pr_reg[18] = 0; /* PID */ \
|
||||
pr_reg[19] = regs->srs; /* SRS */ \
|
||||
pr_reg[20] = 0; /* WZ */ \
|
||||
pr_reg[21] = regs->exs; /* EXS */ \
|
||||
pr_reg[22] = regs->eda; /* EDA */ \
|
||||
pr_reg[23] = regs->mof; /* MOF */ \
|
||||
pr_reg[24] = 0; /* DZ */ \
|
||||
pr_reg[25] = 0; /* EBP */ \
|
||||
pr_reg[26] = regs->erp; /* ERP */ \
|
||||
pr_reg[27] = regs->srp; /* SRP */ \
|
||||
pr_reg[28] = 0; /* NRP */ \
|
||||
pr_reg[29] = regs->ccs; /* CCS */ \
|
||||
pr_reg[30] = rdusp(); /* USP */ \
|
||||
pr_reg[31] = regs->spc; /* SPC */ \
|
||||
|
||||
#endif /* _ASM_CRIS_ELF_H */
|
||||
Reference in New Issue
Block a user