~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/compat_binfmt_elf.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0-only
  2 /*
  3  * 32-bit compatibility support for ELF format executables and core dumps.
  4  *
  5  * Copyright (C) 2007 Red Hat, Inc.  All rights reserved.
  6  *
  7  * Red Hat Author: Roland McGrath.
  8  *
  9  * This file is used in a 64-bit kernel that wants to support 32-bit ELF.
 10  * asm/elf.h is responsible for defining the compat_* and COMPAT_* macros
 11  * used below, with definitions appropriate for 32-bit ABI compatibility.
 12  *
 13  * We use macros to rename the ABI types and machine-dependent
 14  * functions used in binfmt_elf.c to compat versions.
 15  */
 16 
 17 #include <linux/elfcore-compat.h>
 18 #include <linux/time.h>
 19 
 20 #define ELF_COMPAT      1
 21 
 22 /*
 23  * Rename the basic ELF layout types to refer to the 32-bit class of files.
 24  */
 25 #undef  ELF_CLASS
 26 #define ELF_CLASS       ELFCLASS32
 27 
 28 #undef  elfhdr
 29 #undef  elf_phdr
 30 #undef  elf_shdr
 31 #undef  elf_note
 32 #undef  elf_addr_t
 33 #undef  ELF_GNU_PROPERTY_ALIGN
 34 #define elfhdr          elf32_hdr
 35 #define elf_phdr        elf32_phdr
 36 #define elf_shdr        elf32_shdr
 37 #define elf_note        elf32_note
 38 #define elf_addr_t      Elf32_Addr
 39 #define ELF_GNU_PROPERTY_ALIGN  ELF32_GNU_PROPERTY_ALIGN
 40 
 41 /*
 42  * Some data types as stored in coredump.
 43  */
 44 #define user_long_t             compat_long_t
 45 #define user_siginfo_t          compat_siginfo_t
 46 #define copy_siginfo_to_external        copy_siginfo_to_external32
 47 
 48 /*
 49  * The machine-dependent core note format types are defined in elfcore-compat.h,
 50  * which requires asm/elf.h to define compat_elf_gregset_t et al.
 51  */
 52 #define elf_prstatus    compat_elf_prstatus
 53 #define elf_prstatus_common     compat_elf_prstatus_common
 54 #define elf_prpsinfo    compat_elf_prpsinfo
 55 
 56 #undef ns_to_kernel_old_timeval
 57 #define ns_to_kernel_old_timeval ns_to_old_timeval32
 58 
 59 /*
 60  * To use this file, asm/elf.h must define compat_elf_check_arch.
 61  * The other following macros can be defined if the compat versions
 62  * differ from the native ones, or omitted when they match.
 63  */
 64 
 65 #undef  elf_check_arch
 66 #define elf_check_arch  compat_elf_check_arch
 67 
 68 #ifdef  COMPAT_ELF_PLATFORM
 69 #undef  ELF_PLATFORM
 70 #define ELF_PLATFORM            COMPAT_ELF_PLATFORM
 71 #endif
 72 
 73 #ifdef  COMPAT_ELF_HWCAP
 74 #undef  ELF_HWCAP
 75 #define ELF_HWCAP               COMPAT_ELF_HWCAP
 76 #endif
 77 
 78 #ifdef  COMPAT_ELF_HWCAP2
 79 #undef  ELF_HWCAP2
 80 #define ELF_HWCAP2              COMPAT_ELF_HWCAP2
 81 #endif
 82 
 83 #ifdef  COMPAT_ARCH_DLINFO
 84 #undef  ARCH_DLINFO
 85 #define ARCH_DLINFO             COMPAT_ARCH_DLINFO
 86 #endif
 87 
 88 #ifdef  COMPAT_ELF_ET_DYN_BASE
 89 #undef  ELF_ET_DYN_BASE
 90 #define ELF_ET_DYN_BASE         COMPAT_ELF_ET_DYN_BASE
 91 #endif
 92 
 93 #ifdef  COMPAT_ELF_PLAT_INIT
 94 #undef  ELF_PLAT_INIT
 95 #define ELF_PLAT_INIT           COMPAT_ELF_PLAT_INIT
 96 #endif
 97 
 98 #ifdef  COMPAT_SET_PERSONALITY
 99 #undef  SET_PERSONALITY
100 #define SET_PERSONALITY         COMPAT_SET_PERSONALITY
101 #endif
102 
103 #ifdef  compat_start_thread
104 #define COMPAT_START_THREAD(ex, regs, new_ip, new_sp)   \
105         compat_start_thread(regs, new_ip, new_sp)
106 #endif
107 
108 #ifdef  COMPAT_START_THREAD
109 #undef  START_THREAD
110 #define START_THREAD            COMPAT_START_THREAD
111 #endif
112 
113 #ifdef compat_arch_setup_additional_pages
114 #define COMPAT_ARCH_SETUP_ADDITIONAL_PAGES(bprm, ex, interpreter) \
115         compat_arch_setup_additional_pages(bprm, interpreter)
116 #endif
117 
118 #ifdef  COMPAT_ARCH_SETUP_ADDITIONAL_PAGES
119 #undef  ARCH_HAS_SETUP_ADDITIONAL_PAGES
120 #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
121 #undef  ARCH_SETUP_ADDITIONAL_PAGES
122 #define ARCH_SETUP_ADDITIONAL_PAGES COMPAT_ARCH_SETUP_ADDITIONAL_PAGES
123 #endif
124 
125 #ifdef  compat_elf_read_implies_exec
126 #undef  elf_read_implies_exec
127 #define elf_read_implies_exec compat_elf_read_implies_exec
128 #endif
129 
130 /*
131  * Rename a few of the symbols that binfmt_elf.c will define.
132  * These are all local so the names don't really matter, but it
133  * might make some debugging less confusing not to duplicate them.
134  */
135 #define elf_format              compat_elf_format
136 #define init_elf_binfmt         init_compat_elf_binfmt
137 #define exit_elf_binfmt         exit_compat_elf_binfmt
138 #define binfmt_elf_test_cases   compat_binfmt_elf_test_cases
139 #define binfmt_elf_test_suite   compat_binfmt_elf_test_suite
140 
141 /*
142  * We share all the actual code with the native (64-bit) version.
143  */
144 #include "binfmt_elf.c"
145 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php