The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/fs/compat_binfmt_elf.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    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_ARCH_DLINFO
   92 #undef  ARCH_DLINFO
   93 #define ARCH_DLINFO             COMPAT_ARCH_DLINFO
   94 #endif
   95 
   96 #ifdef  COMPAT_ELF_ET_DYN_BASE
   97 #undef  ELF_ET_DYN_BASE
   98 #define ELF_ET_DYN_BASE         COMPAT_ELF_ET_DYN_BASE
   99 #endif
  100 
  101 #ifdef COMPAT_ELF_EXEC_PAGESIZE
  102 #undef  ELF_EXEC_PAGESIZE
  103 #define ELF_EXEC_PAGESIZE       COMPAT_ELF_EXEC_PAGESIZE
  104 #endif
  105 
  106 #ifdef  COMPAT_ELF_PLAT_INIT
  107 #undef  ELF_PLAT_INIT
  108 #define ELF_PLAT_INIT           COMPAT_ELF_PLAT_INIT
  109 #endif
  110 
  111 #ifdef  COMPAT_SET_PERSONALITY
  112 #undef  SET_PERSONALITY
  113 #define SET_PERSONALITY         COMPAT_SET_PERSONALITY
  114 #endif
  115 
  116 #ifdef  compat_start_thread
  117 #undef  start_thread
  118 #define start_thread            compat_start_thread
  119 #endif
  120 
  121 #ifdef  compat_arch_setup_additional_pages
  122 #undef  ARCH_HAS_SETUP_ADDITIONAL_PAGES
  123 #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
  124 #undef  arch_setup_additional_pages
  125 #define arch_setup_additional_pages compat_arch_setup_additional_pages
  126 #endif
  127 
  128 /*
  129  * Rename a few of the symbols that binfmt_elf.c will define.
  130  * These are all local so the names don't really matter, but it
  131  * might make some debugging less confusing not to duplicate them.
  132  */
  133 #define elf_format              compat_elf_format
  134 #define init_elf_binfmt         init_compat_elf_binfmt
  135 #define exit_elf_binfmt         exit_compat_elf_binfmt
  136 
  137 /*
  138  * We share all the actual code with the native (64-bit) version.
  139  */
  140 #include "binfmt_elf.c"

Cache object: d61973b57c4a3a24fcfe764e90970baf


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.