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