Version:  2.0.40 2.2.26 2.4.37 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10

Linux/fs/compat_binfmt_elf.c

  1 /*
  2  * 32-bit compatibility support for ELF format executables and core dumps.
  3  *
  4  * Copyright (C) 2007 Red Hat, Inc.  All rights reserved.
  5  *
  6  * This copyrighted material is made available to anyone wishing to use,
  7  * modify, copy, or redistribute it subject to the terms and conditions
  8  * of the GNU General Public License v.2.
  9  *
 10  * Red Hat Author: Roland McGrath.
 11  *
 12  * This file is used in a 64-bit kernel that wants to support 32-bit ELF.
 13  * asm/elf.h is responsible for defining the compat_* and COMPAT_* macros
 14  * used below, with definitions appropriate for 32-bit ABI compatibility.
 15  *
 16  * We use macros to rename the ABI types and machine-dependent
 17  * functions used in binfmt_elf.c to compat versions.
 18  */
 19 
 20 #include <linux/elfcore-compat.h>
 21 #include <linux/time.h>
 22 
 23 /*
 24  * Rename the basic ELF layout types to refer to the 32-bit class of files.
 25  */
 26 #undef  ELF_CLASS
 27 #define ELF_CLASS       ELFCLASS32
 28 
 29 #undef  elfhdr
 30 #undef  elf_phdr
 31 #undef  elf_shdr
 32 #undef  elf_note
 33 #undef  elf_addr_t
 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 
 40 /*
 41  * Some data types as stored in coredump.
 42  */
 43 #define user_long_t             compat_long_t
 44 #define user_siginfo_t          compat_siginfo_t
 45 #define copy_siginfo_to_user    copy_siginfo_to_user32
 46 
 47 /*
 48  * The machine-dependent core note format types are defined in elfcore-compat.h,
 49  * which requires asm/elf.h to define compat_elf_gregset_t et al.
 50  */
 51 #define elf_prstatus    compat_elf_prstatus
 52 #define elf_prpsinfo    compat_elf_prpsinfo
 53 
 54 /*
 55  * Compat version of cputime_to_compat_timeval, perhaps this
 56  * should be an inline in <linux/compat.h>.
 57  */
 58 static void cputime_to_compat_timeval(const cputime_t cputime,
 59                                       struct compat_timeval *value)
 60 {
 61         struct timeval tv;
 62         cputime_to_timeval(cputime, &tv);
 63         value->tv_sec = tv.tv_sec;
 64         value->tv_usec = tv.tv_usec;
 65 }
 66 
 67 #undef cputime_to_timeval
 68 #define cputime_to_timeval cputime_to_compat_timeval
 69 
 70 
 71 /*
 72  * To use this file, asm/elf.h must define compat_elf_check_arch.
 73  * The other following macros can be defined if the compat versions
 74  * differ from the native ones, or omitted when they match.
 75  */
 76 
 77 #undef  ELF_ARCH
 78 #undef  elf_check_arch
 79 #define elf_check_arch  compat_elf_check_arch
 80 
 81 #ifdef  COMPAT_ELF_PLATFORM
 82 #undef  ELF_PLATFORM
 83 #define ELF_PLATFORM            COMPAT_ELF_PLATFORM
 84 #endif
 85 
 86 #ifdef  COMPAT_ELF_HWCAP
 87 #undef  ELF_HWCAP
 88 #define ELF_HWCAP               COMPAT_ELF_HWCAP
 89 #endif
 90 
 91 #ifdef  COMPAT_ELF_HWCAP2
 92 #undef  ELF_HWCAP2
 93 #define ELF_HWCAP2              COMPAT_ELF_HWCAP2
 94 #endif
 95 
 96 #ifdef  COMPAT_ARCH_DLINFO
 97 #undef  ARCH_DLINFO
 98 #define ARCH_DLINFO             COMPAT_ARCH_DLINFO
 99 #endif
100 
101 #ifdef  COMPAT_ELF_ET_DYN_BASE
102 #undef  ELF_ET_DYN_BASE
103 #define ELF_ET_DYN_BASE         COMPAT_ELF_ET_DYN_BASE
104 #endif
105 
106 #ifdef COMPAT_ELF_EXEC_PAGESIZE
107 #undef  ELF_EXEC_PAGESIZE
108 #define ELF_EXEC_PAGESIZE       COMPAT_ELF_EXEC_PAGESIZE
109 #endif
110 
111 #ifdef  COMPAT_ELF_PLAT_INIT
112 #undef  ELF_PLAT_INIT
113 #define ELF_PLAT_INIT           COMPAT_ELF_PLAT_INIT
114 #endif
115 
116 #ifdef  COMPAT_SET_PERSONALITY
117 #undef  SET_PERSONALITY
118 #define SET_PERSONALITY         COMPAT_SET_PERSONALITY
119 #endif
120 
121 #ifdef  compat_start_thread
122 #undef  start_thread
123 #define start_thread            compat_start_thread
124 #endif
125 
126 #ifdef  compat_arch_setup_additional_pages
127 #undef  ARCH_HAS_SETUP_ADDITIONAL_PAGES
128 #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
129 #undef  arch_setup_additional_pages
130 #define arch_setup_additional_pages compat_arch_setup_additional_pages
131 #endif
132 
133 /*
134  * Rename a few of the symbols that binfmt_elf.c will define.
135  * These are all local so the names don't really matter, but it
136  * might make some debugging less confusing not to duplicate them.
137  */
138 #define elf_format              compat_elf_format
139 #define init_elf_binfmt         init_compat_elf_binfmt
140 #define exit_elf_binfmt         exit_compat_elf_binfmt
141 
142 /*
143  * We share all the actual code with the native (64-bit) version.
144  */
145 #include "binfmt_elf.c"
146 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us