1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 23be80aaeSVineet Gupta /* 33be80aaeSVineet Gupta * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) 43be80aaeSVineet Gupta */ 53be80aaeSVineet Gupta 63be80aaeSVineet Gupta #ifndef __ASM_ARC_ELF_H 73be80aaeSVineet Gupta #define __ASM_ARC_ELF_H 83be80aaeSVineet Gupta 98ccfe667SVineet Gupta #include <linux/types.h> 10162f33ddSDmitry V. Levin #include <linux/elf-em.h> 118ccfe667SVineet Gupta #include <uapi/asm/elf.h> 123be80aaeSVineet Gupta 131f6ccfffSVineet Gupta #define EM_ARC_INUSE (IS_ENABLED(CONFIG_ISA_ARCOMPACT) ? \ 141f6ccfffSVineet Gupta EM_ARCOMPACT : EM_ARCV2) 151f6ccfffSVineet Gupta 163be80aaeSVineet Gupta /* ARC Relocations (kernel Modules only) */ 173be80aaeSVineet Gupta #define R_ARC_32 0x4 183be80aaeSVineet Gupta #define R_ARC_32_ME 0x1B 1994f4fb08SVineet Gupta #define R_ARC_32_PCREL 0x31 203be80aaeSVineet Gupta 218ccfe667SVineet Gupta /*to set parameters in the core dumps */ 22*b7faf971SVineet Gupta #define ELF_ARCH EM_ARC_INUSE 233be80aaeSVineet Gupta #define ELF_CLASS ELFCLASS32 243be80aaeSVineet Gupta 253be80aaeSVineet Gupta #ifdef CONFIG_CPU_BIG_ENDIAN 263be80aaeSVineet Gupta #define ELF_DATA ELFDATA2MSB 273be80aaeSVineet Gupta #else 283be80aaeSVineet Gupta #define ELF_DATA ELFDATA2LSB 293be80aaeSVineet Gupta #endif 303be80aaeSVineet Gupta 318ccfe667SVineet Gupta /* 328ccfe667SVineet Gupta * To ensure that 338ccfe667SVineet Gupta * -we don't load something for the wrong architecture. 348ccfe667SVineet Gupta * -The userspace is using the correct syscall ABI 358ccfe667SVineet Gupta */ 368ccfe667SVineet Gupta struct elf32_hdr; 378ccfe667SVineet Gupta extern int elf_check_arch(const struct elf32_hdr *); 388ccfe667SVineet Gupta #define elf_check_arch elf_check_arch 393be80aaeSVineet Gupta 403be80aaeSVineet Gupta #define CORE_DUMP_USE_REGSET 413be80aaeSVineet Gupta 423be80aaeSVineet Gupta #define ELF_EXEC_PAGESIZE PAGE_SIZE 433be80aaeSVineet Gupta 443be80aaeSVineet Gupta /* 453be80aaeSVineet Gupta * This is the location that an ET_DYN program is loaded if exec'ed. Typical 463be80aaeSVineet Gupta * use of this is to invoke "./ld.so someprog" to test out a new version of 473be80aaeSVineet Gupta * the loader. We need to make sure that it is out of the way of the program 483be80aaeSVineet Gupta * that it will "exec", and that there is sufficient room for the brk. 493be80aaeSVineet Gupta */ 501dec7858SVineet Gupta #define ELF_ET_DYN_BASE (2UL * TASK_SIZE / 3) 513be80aaeSVineet Gupta 523be80aaeSVineet Gupta /* 533be80aaeSVineet Gupta * When the program starts, a1 contains a pointer to a function to be 543be80aaeSVineet Gupta * registered with atexit, as per the SVR4 ABI. A value of 0 means we 553be80aaeSVineet Gupta * have no such handler. 563be80aaeSVineet Gupta */ 573be80aaeSVineet Gupta #define ELF_PLAT_INIT(_r, load_addr) ((_r)->r0 = 0) 583be80aaeSVineet Gupta 593be80aaeSVineet Gupta /* 603be80aaeSVineet Gupta * This yields a mask that user programs can use to figure out what 613be80aaeSVineet Gupta * instruction set this cpu supports. 623be80aaeSVineet Gupta */ 633be80aaeSVineet Gupta #define ELF_HWCAP (0) 643be80aaeSVineet Gupta 653be80aaeSVineet Gupta /* 663be80aaeSVineet Gupta * This yields a string that ld.so will use to load implementation 673be80aaeSVineet Gupta * specific libraries for optimization. This is more specific in 683be80aaeSVineet Gupta * intent than poking at uname or /proc/cpuinfo. 693be80aaeSVineet Gupta */ 703be80aaeSVineet Gupta #define ELF_PLATFORM (NULL) 713be80aaeSVineet Gupta 723be80aaeSVineet Gupta #endif 73