cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

elf.h (3030B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _LINUX_ELF_H
      3#define _LINUX_ELF_H
      4
      5#include <linux/types.h>
      6#include <asm/elf.h>
      7#include <uapi/linux/elf.h>
      8
      9#ifndef elf_read_implies_exec
     10  /* Executables for which elf_read_implies_exec() returns TRUE will
     11     have the READ_IMPLIES_EXEC personality flag set automatically.
     12     Override in asm/elf.h as needed.  */
     13# define elf_read_implies_exec(ex, have_pt_gnu_stack)	0
     14#endif
     15#ifndef SET_PERSONALITY
     16#define SET_PERSONALITY(ex) \
     17	set_personality(PER_LINUX | (current->personality & (~PER_MASK)))
     18#endif
     19
     20#ifndef SET_PERSONALITY2
     21#define SET_PERSONALITY2(ex, state) \
     22	SET_PERSONALITY(ex)
     23#endif
     24
     25#ifndef START_THREAD
     26#define START_THREAD(elf_ex, regs, elf_entry, start_stack)	\
     27	start_thread(regs, elf_entry, start_stack)
     28#endif
     29
     30#if defined(ARCH_HAS_SETUP_ADDITIONAL_PAGES) && !defined(ARCH_SETUP_ADDITIONAL_PAGES)
     31#define ARCH_SETUP_ADDITIONAL_PAGES(bprm, ex, interpreter) \
     32	arch_setup_additional_pages(bprm, interpreter)
     33#endif
     34
     35#define ELF32_GNU_PROPERTY_ALIGN	4
     36#define ELF64_GNU_PROPERTY_ALIGN	8
     37
     38#if ELF_CLASS == ELFCLASS32
     39
     40extern Elf32_Dyn _DYNAMIC [];
     41#define elfhdr		elf32_hdr
     42#define elf_phdr	elf32_phdr
     43#define elf_shdr	elf32_shdr
     44#define elf_note	elf32_note
     45#define elf_addr_t	Elf32_Off
     46#define Elf_Half	Elf32_Half
     47#define Elf_Word	Elf32_Word
     48#define ELF_GNU_PROPERTY_ALIGN	ELF32_GNU_PROPERTY_ALIGN
     49
     50#else
     51
     52extern Elf64_Dyn _DYNAMIC [];
     53#define elfhdr		elf64_hdr
     54#define elf_phdr	elf64_phdr
     55#define elf_shdr	elf64_shdr
     56#define elf_note	elf64_note
     57#define elf_addr_t	Elf64_Off
     58#define Elf_Half	Elf64_Half
     59#define Elf_Word	Elf64_Word
     60#define ELF_GNU_PROPERTY_ALIGN	ELF64_GNU_PROPERTY_ALIGN
     61
     62#endif
     63
     64/* Optional callbacks to write extra ELF notes. */
     65struct file;
     66struct coredump_params;
     67
     68#ifndef ARCH_HAVE_EXTRA_ELF_NOTES
     69static inline int elf_coredump_extra_notes_size(void) { return 0; }
     70static inline int elf_coredump_extra_notes_write(struct coredump_params *cprm) { return 0; }
     71#else
     72extern int elf_coredump_extra_notes_size(void);
     73extern int elf_coredump_extra_notes_write(struct coredump_params *cprm);
     74#endif
     75
     76/*
     77 * NT_GNU_PROPERTY_TYPE_0 header:
     78 * Keep this internal until/unless there is an agreed UAPI definition.
     79 * pr_type values (GNU_PROPERTY_*) are public and defined in the UAPI header.
     80 */
     81struct gnu_property {
     82	u32 pr_type;
     83	u32 pr_datasz;
     84};
     85
     86struct arch_elf_state;
     87
     88#ifndef CONFIG_ARCH_USE_GNU_PROPERTY
     89static inline int arch_parse_elf_property(u32 type, const void *data,
     90					  size_t datasz, bool compat,
     91					  struct arch_elf_state *arch)
     92{
     93	return 0;
     94}
     95#else
     96extern int arch_parse_elf_property(u32 type, const void *data, size_t datasz,
     97				   bool compat, struct arch_elf_state *arch);
     98#endif
     99
    100#ifdef CONFIG_ARCH_HAVE_ELF_PROT
    101int arch_elf_adjust_prot(int prot, const struct arch_elf_state *state,
    102			 bool has_interp, bool is_interp);
    103#else
    104static inline int arch_elf_adjust_prot(int prot,
    105				       const struct arch_elf_state *state,
    106				       bool has_interp, bool is_interp)
    107{
    108	return prot;
    109}
    110#endif
    111
    112#endif /* _LINUX_ELF_H */