linux/arch/riscv/include/asm/elf.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/*
   3 * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com>
   4 * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
   5 * Copyright (C) 2012 Regents of the University of California
   6 */
   7
   8#ifndef _ASM_RISCV_ELF_H
   9#define _ASM_RISCV_ELF_H
  10
  11#include <uapi/asm/elf.h>
  12#include <asm/auxvec.h>
  13#include <asm/byteorder.h>
  14
  15/*
  16 * These are used to set parameters in the core dumps.
  17 */
  18#define ELF_ARCH        EM_RISCV
  19
  20#ifdef CONFIG_64BIT
  21#define ELF_CLASS       ELFCLASS64
  22#else
  23#define ELF_CLASS       ELFCLASS32
  24#endif
  25
  26#define ELF_DATA        ELFDATA2LSB
  27
  28/*
  29 * This is used to ensure we don't load something for the wrong architecture.
  30 */
  31#define elf_check_arch(x) ((x)->e_machine == EM_RISCV)
  32
  33#define CORE_DUMP_USE_REGSET
  34#define ELF_EXEC_PAGESIZE       (PAGE_SIZE)
  35
  36/*
  37 * This is the location that an ET_DYN program is loaded if exec'ed.  Typical
  38 * use of this is to invoke "./ld.so someprog" to test out a new version of
  39 * the loader.  We need to make sure that it is out of the way of the program
  40 * that it will "exec", and that there is sufficient room for the brk.
  41 */
  42#define ELF_ET_DYN_BASE         ((TASK_SIZE / 3) * 2)
  43
  44/*
  45 * This yields a mask that user programs can use to figure out what
  46 * instruction set this CPU supports.  This could be done in user space,
  47 * but it's not easy, and we've already done it here.
  48 */
  49#define ELF_HWCAP       (elf_hwcap)
  50extern unsigned long elf_hwcap;
  51
  52/*
  53 * This yields a string that ld.so will use to load implementation
  54 * specific libraries for optimization.  This is more specific in
  55 * intent than poking at uname or /proc/cpuinfo.
  56 */
  57#define ELF_PLATFORM    (NULL)
  58
  59#ifdef CONFIG_MMU
  60#define ARCH_DLINFO                                             \
  61do {                                                            \
  62        NEW_AUX_ENT(AT_SYSINFO_EHDR,                            \
  63                (elf_addr_t)current->mm->context.vdso);         \
  64} while (0)
  65#define ARCH_HAS_SETUP_ADDITIONAL_PAGES
  66struct linux_binprm;
  67extern int arch_setup_additional_pages(struct linux_binprm *bprm,
  68        int uses_interp);
  69#endif /* CONFIG_MMU */
  70
  71#endif /* _ASM_RISCV_ELF_H */
  72