xref: /openbmc/linux/arch/arc/include/asm/elf.h (revision 4b4193256c8d3bc3a5397b5cd9494c2ad386317d)
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