diff -Nru libnvidia-container-1.3.0/debian/changelog libnvidia-container-1.4.0/debian/changelog --- libnvidia-container-1.3.0/debian/changelog 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/debian/changelog 2021-08-12 09:45:44.000000000 +0000 @@ -1,6 +1,6 @@ -libnvidia-container (1.3.0-1pop1~1601490873~20.04~cb62a8d) focal; urgency=medium +libnvidia-container (1.4.0-1pop1~1628761544~20.04~c24a1c0) focal; urgency=medium * Auto Build - -- Pop OS (ISO Signing Key) Wed, 30 Sep 2020 12:34:33 -0600 + -- Pop OS (ISO Signing Key) Thu, 12 Aug 2021 11:45:44 +0200 diff -Nru libnvidia-container-1.3.0/debian/control libnvidia-container-1.4.0/debian/control --- libnvidia-container-1.3.0/debian/control 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/debian/control 2021-08-12 09:45:44.000000000 +0000 @@ -4,13 +4,15 @@ Build-Depends: debhelper (>=9), bmake, + curl, libcap-dev, + libelf-dev, libseccomp-dev, libtirpc-dev, lsb-release, pkg-config, -Standards-Version: 4.3.0 -Maintainer: System76 +Standards-Version: 3.9.6 +Maintainer: NVIDIA CORPORATION Homepage: https://github.com/NVIDIA/libnvidia-container Package: libnvidia-container1 diff -Nru libnvidia-container-1.3.0/debian/libnvidia-container1.symbols libnvidia-container-1.4.0/debian/libnvidia-container1.symbols --- libnvidia-container-1.3.0/debian/libnvidia-container1.symbols 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/debian/libnvidia-container1.symbols 2021-08-12 09:45:44.000000000 +0000 @@ -1,27 +1,27 @@ libnvidia-container.so.1 libnvidia-container1 #MINVER# - NVC_1.0@NVC_1.0 1.3.0 - nvc_config_free@NVC_1.0 1.3.0 - nvc_config_new@NVC_1.0 1.3.0 - nvc_container_config_free@NVC_1.0 1.3.0 - nvc_container_config_new@NVC_1.0 1.3.0 - nvc_container_free@NVC_1.0 1.3.0 - nvc_container_new@NVC_1.0 1.3.0 - nvc_context_free@NVC_1.0 1.3.0 - nvc_context_new@NVC_1.0 1.3.0 - nvc_device_info_free@NVC_1.0 1.3.0 - nvc_device_info_new@NVC_1.0 1.3.0 - nvc_nvcaps_style@NVC_1.0 1.3.0 - nvc_nvcaps_device_from_proc_path@NVC_1.0 1.3.0 - nvc_device_mount@NVC_1.0 1.3.0 - nvc_mig_device_access_caps_mount@NVC_1.0 1.3.0 - nvc_mig_config_global_caps_mount@NVC_1.0 1.3.0 - nvc_mig_monitor_global_caps_mount@NVC_1.0 1.3.0 - nvc_device_mig_caps_mount@NVC_1.0 1.3.0 - nvc_driver_info_free@NVC_1.0 1.3.0 - nvc_driver_info_new@NVC_1.0 1.3.0 - nvc_driver_mount@NVC_1.0 1.3.0 - nvc_error@NVC_1.0 1.3.0 - nvc_init@NVC_1.0 1.3.0 - nvc_ldcache_update@NVC_1.0 1.3.0 - nvc_shutdown@NVC_1.0 1.3.0 - nvc_version@NVC_1.0 1.3.0 + NVC_1.0@NVC_1.0 1.4.0 + nvc_config_free@NVC_1.0 1.4.0 + nvc_config_new@NVC_1.0 1.4.0 + nvc_container_config_free@NVC_1.0 1.4.0 + nvc_container_config_new@NVC_1.0 1.4.0 + nvc_container_free@NVC_1.0 1.4.0 + nvc_container_new@NVC_1.0 1.4.0 + nvc_context_free@NVC_1.0 1.4.0 + nvc_context_new@NVC_1.0 1.4.0 + nvc_device_info_free@NVC_1.0 1.4.0 + nvc_device_info_new@NVC_1.0 1.4.0 + nvc_nvcaps_style@NVC_1.0 1.4.0 + nvc_nvcaps_device_from_proc_path@NVC_1.0 1.4.0 + nvc_device_mount@NVC_1.0 1.4.0 + nvc_mig_device_access_caps_mount@NVC_1.0 1.4.0 + nvc_mig_config_global_caps_mount@NVC_1.0 1.4.0 + nvc_mig_monitor_global_caps_mount@NVC_1.0 1.4.0 + nvc_device_mig_caps_mount@NVC_1.0 1.4.0 + nvc_driver_info_free@NVC_1.0 1.4.0 + nvc_driver_info_new@NVC_1.0 1.4.0 + nvc_driver_mount@NVC_1.0 1.4.0 + nvc_error@NVC_1.0 1.4.0 + nvc_init@NVC_1.0 1.4.0 + nvc_ldcache_update@NVC_1.0 1.4.0 + nvc_shutdown@NVC_1.0 1.4.0 + nvc_version@NVC_1.0 1.4.0 diff -Nru libnvidia-container-1.3.0/debian/prepare libnvidia-container-1.4.0/debian/prepare --- libnvidia-container-1.3.0/debian/prepare 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/debian/prepare 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,30 @@ +#! /bin/bash + +set -e + +# Replace templated files/contents according to the package version and architecture. +# Also set the package distribution and section area if the environment specifies it. + +VERSION=${1%%[-~+]*} +MAJOR=${1%%.*} + +if [ -z "$VERSION" ] || [ -z "$MAJOR" ] || [ -z "$DEB_HOST_MULTIARCH" ]; then + echo "Error: invalid package version or architecture" + exit 1 +fi + +find . -type d -name '*x86_64-linux-gnu*' | sed "p;s;@DEB_HOST_MULTIARCH@;$DEB_HOST_MULTIARCH;" | \ + xargs -r -n2 sh -c 'rm -rf $1 && mv -T $0 $1' + +find . -type f -name '*1*' | sed "p;s;@MAJOR@;$MAJOR;" | \ + xargs -r -n2 sh -c 'rm -f $1 && mv -T $0 $1' + +grep -rIlE '@(SECTION|VERSION|MAJOR|DEB_HOST_MULTIARCH)@' . | \ + xargs -r sed -i "s;;${SECTION:+$SECTION/}; + s;1.4.0;$VERSION; + s;1;$MAJOR; + s;x86_64-linux-gnu;$DEB_HOST_MULTIARCH;" + +if [ -n "$DISTRIB" ]; then + sed -i "s;UNRELEASED;$DISTRIB;" debian/changelog +fi diff -Nru libnvidia-container-1.3.0/debian/rules libnvidia-container-1.4.0/debian/rules --- libnvidia-container-1.3.0/debian/rules 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/debian/rules 2021-08-12 09:45:44.000000000 +0000 @@ -3,10 +3,11 @@ export DESTDIR=debian/tmp -pkgver=1.3.0 +pkgver=1.4.0 override_dh_auto_clean: make clean + make deps override_dh_build: make dist prefix=/usr @@ -17,4 +18,4 @@ dh_fixperms -X libnvidia-container.so.$(pkgver) %: - dh $@ + dh $@ \ No newline at end of file diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/common/elfdefinitions.h libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/common/elfdefinitions.h --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/common/elfdefinitions.h 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/common/elfdefinitions.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,2700 +0,0 @@ -/*- - * Copyright (c) 2010 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: elfdefinitions.h 3403 2016-02-13 15:39:27Z jkoshy $ - */ - -/* - * These definitions are based on: - * - The public specification of the ELF format as defined in the - * October 2009 draft of System V ABI. - * See: http://www.sco.com/developers/gabi/latest/ch4.intro.html - * - The May 1998 (version 1.5) draft of "The ELF-64 object format". - * - Processor-specific ELF ABI definitions for sparc, i386, amd64, mips, - * ia64, and powerpc processors. - * - The "Linkers and Libraries Guide", from Sun Microsystems. - */ - -#ifndef _ELFDEFINITIONS_H_ -#define _ELFDEFINITIONS_H_ - -#include - -/* - * Types of capabilities. - */ - -#define _ELF_DEFINE_CAPABILITIES() \ -_ELF_DEFINE_CA(CA_SUNW_NULL, 0, "ignored") \ -_ELF_DEFINE_CA(CA_SUNW_HW_1, 1, "hardware capability") \ -_ELF_DEFINE_CA(CA_SUNW_SW_1, 2, "software capability") - -#undef _ELF_DEFINE_CA -#define _ELF_DEFINE_CA(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_CAPABILITIES() - CA__LAST__ -}; - -/* - * Flags used with dynamic linking entries. - */ - -#define _ELF_DEFINE_DYN_FLAGS() \ -_ELF_DEFINE_DF(DF_ORIGIN, 0x1, \ - "object being loaded may refer to $ORIGIN") \ -_ELF_DEFINE_DF(DF_SYMBOLIC, 0x2, \ - "search library for references before executable") \ -_ELF_DEFINE_DF(DF_TEXTREL, 0x4, \ - "relocation entries may modify text segment") \ -_ELF_DEFINE_DF(DF_BIND_NOW, 0x8, \ - "process relocation entries at load time") \ -_ELF_DEFINE_DF(DF_STATIC_TLS, 0x10, \ - "uses static thread-local storage") -#undef _ELF_DEFINE_DF -#define _ELF_DEFINE_DF(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_DYN_FLAGS() - DF__LAST__ -}; - - -/* - * Dynamic linking entry types. - */ - -#define _ELF_DEFINE_DYN_TYPES() \ -_ELF_DEFINE_DT(DT_NULL, 0, "end of array") \ -_ELF_DEFINE_DT(DT_NEEDED, 1, "names a needed library") \ -_ELF_DEFINE_DT(DT_PLTRELSZ, 2, \ - "size in bytes of associated relocation entries") \ -_ELF_DEFINE_DT(DT_PLTGOT, 3, \ - "address associated with the procedure linkage table") \ -_ELF_DEFINE_DT(DT_HASH, 4, \ - "address of the symbol hash table") \ -_ELF_DEFINE_DT(DT_STRTAB, 5, \ - "address of the string table") \ -_ELF_DEFINE_DT(DT_SYMTAB, 6, \ - "address of the symbol table") \ -_ELF_DEFINE_DT(DT_RELA, 7, \ - "address of the relocation table") \ -_ELF_DEFINE_DT(DT_RELASZ, 8, "size of the DT_RELA table") \ -_ELF_DEFINE_DT(DT_RELAENT, 9, "size of each DT_RELA entry") \ -_ELF_DEFINE_DT(DT_STRSZ, 10, "size of the string table") \ -_ELF_DEFINE_DT(DT_SYMENT, 11, \ - "size of a symbol table entry") \ -_ELF_DEFINE_DT(DT_INIT, 12, \ - "address of the initialization function") \ -_ELF_DEFINE_DT(DT_FINI, 13, \ - "address of the finalization function") \ -_ELF_DEFINE_DT(DT_SONAME, 14, "names the shared object") \ -_ELF_DEFINE_DT(DT_RPATH, 15, \ - "runtime library search path") \ -_ELF_DEFINE_DT(DT_SYMBOLIC, 16, \ - "alter symbol resolution algorithm") \ -_ELF_DEFINE_DT(DT_REL, 17, \ - "address of the DT_REL table") \ -_ELF_DEFINE_DT(DT_RELSZ, 18, "size of the DT_REL table") \ -_ELF_DEFINE_DT(DT_RELENT, 19, "size of each DT_REL entry") \ -_ELF_DEFINE_DT(DT_PLTREL, 20, \ - "type of relocation entry in the procedure linkage table") \ -_ELF_DEFINE_DT(DT_DEBUG, 21, "used for debugging") \ -_ELF_DEFINE_DT(DT_TEXTREL, 22, \ - "text segment may be written to during relocation") \ -_ELF_DEFINE_DT(DT_JMPREL, 23, \ - "address of relocation entries associated with the procedure linkage table") \ -_ELF_DEFINE_DT(DT_BIND_NOW, 24, \ - "bind symbols at loading time") \ -_ELF_DEFINE_DT(DT_INIT_ARRAY, 25, \ - "pointers to initialization functions") \ -_ELF_DEFINE_DT(DT_FINI_ARRAY, 26, \ - "pointers to termination functions") \ -_ELF_DEFINE_DT(DT_INIT_ARRAYSZ, 27, "size of the DT_INIT_ARRAY") \ -_ELF_DEFINE_DT(DT_FINI_ARRAYSZ, 28, "size of the DT_FINI_ARRAY") \ -_ELF_DEFINE_DT(DT_RUNPATH, 29, \ - "index of library search path string") \ -_ELF_DEFINE_DT(DT_FLAGS, 30, \ - "flags specific to the object being loaded") \ -_ELF_DEFINE_DT(DT_ENCODING, 32, "standard semantics") \ -_ELF_DEFINE_DT(DT_PREINIT_ARRAY, 32, \ - "pointers to pre-initialization functions") \ -_ELF_DEFINE_DT(DT_PREINIT_ARRAYSZ, 33, \ - "size of pre-initialization array") \ -_ELF_DEFINE_DT(DT_MAXPOSTAGS, 34, \ - "the number of positive tags") \ -_ELF_DEFINE_DT(DT_LOOS, 0x6000000DUL, \ - "start of OS-specific types") \ -_ELF_DEFINE_DT(DT_SUNW_AUXILIARY, 0x6000000DUL, \ - "offset of string naming auxiliary filtees") \ -_ELF_DEFINE_DT(DT_SUNW_RTLDINF, 0x6000000EUL, "rtld internal use") \ -_ELF_DEFINE_DT(DT_SUNW_FILTER, 0x6000000FUL, \ - "offset of string naming standard filtees") \ -_ELF_DEFINE_DT(DT_SUNW_CAP, 0x60000010UL, \ - "address of hardware capabilities section") \ -_ELF_DEFINE_DT(DT_HIOS, 0x6FFFF000UL, \ - "end of OS-specific types") \ -_ELF_DEFINE_DT(DT_VALRNGLO, 0x6FFFFD00UL, \ - "start of range using the d_val field") \ -_ELF_DEFINE_DT(DT_GNU_PRELINKED, 0x6FFFFDF5UL, \ - "prelinking timestamp") \ -_ELF_DEFINE_DT(DT_GNU_CONFLICTSZ, 0x6FFFFDF6UL, \ - "size of conflict section") \ -_ELF_DEFINE_DT(DT_GNU_LIBLISTSZ, 0x6FFFFDF7UL, \ - "size of library list") \ -_ELF_DEFINE_DT(DT_CHECKSUM, 0x6FFFFDF8UL, \ - "checksum for the object") \ -_ELF_DEFINE_DT(DT_PLTPADSZ, 0x6FFFFDF9UL, \ - "size of PLT padding") \ -_ELF_DEFINE_DT(DT_MOVEENT, 0x6FFFFDFAUL, \ - "size of DT_MOVETAB entries") \ -_ELF_DEFINE_DT(DT_MOVESZ, 0x6FFFFDFBUL, \ - "total size of the MOVETAB table") \ -_ELF_DEFINE_DT(DT_FEATURE, 0x6FFFFDFCUL, "feature values") \ -_ELF_DEFINE_DT(DT_POSFLAG_1, 0x6FFFFDFDUL, \ - "dynamic position flags") \ -_ELF_DEFINE_DT(DT_SYMINSZ, 0x6FFFFDFEUL, \ - "size of the DT_SYMINFO table") \ -_ELF_DEFINE_DT(DT_SYMINENT, 0x6FFFFDFFUL, \ - "size of a DT_SYMINFO entry") \ -_ELF_DEFINE_DT(DT_VALRNGHI, 0x6FFFFDFFUL, \ - "end of range using the d_val field") \ -_ELF_DEFINE_DT(DT_ADDRRNGLO, 0x6FFFFE00UL, \ - "start of range using the d_ptr field") \ -_ELF_DEFINE_DT(DT_GNU_HASH, 0x6FFFFEF5UL, \ - "GNU style hash tables") \ -_ELF_DEFINE_DT(DT_GNU_CONFLICT, 0x6FFFFEF8UL, \ - "address of conflict section") \ -_ELF_DEFINE_DT(DT_GNU_LIBLIST, 0x6FFFFEF9UL, \ - "address of conflict section") \ -_ELF_DEFINE_DT(DT_CONFIG, 0x6FFFFEFAUL, \ - "configuration file") \ -_ELF_DEFINE_DT(DT_DEPAUDIT, 0x6FFFFEFBUL, \ - "string defining audit libraries") \ -_ELF_DEFINE_DT(DT_AUDIT, 0x6FFFFEFCUL, \ - "string defining audit libraries") \ -_ELF_DEFINE_DT(DT_PLTPAD, 0x6FFFFEFDUL, "PLT padding") \ -_ELF_DEFINE_DT(DT_MOVETAB, 0x6FFFFEFEUL, \ - "address of a move table") \ -_ELF_DEFINE_DT(DT_SYMINFO, 0x6FFFFEFFUL, \ - "address of the symbol information table") \ -_ELF_DEFINE_DT(DT_ADDRRNGHI, 0x6FFFFEFFUL, \ - "end of range using the d_ptr field") \ -_ELF_DEFINE_DT(DT_VERSYM, 0x6FFFFFF0UL, \ - "address of the version section") \ -_ELF_DEFINE_DT(DT_RELACOUNT, 0x6FFFFFF9UL, \ - "count of RELA relocations") \ -_ELF_DEFINE_DT(DT_RELCOUNT, 0x6FFFFFFAUL, \ - "count of REL relocations") \ -_ELF_DEFINE_DT(DT_FLAGS_1, 0x6FFFFFFBUL, "flag values") \ -_ELF_DEFINE_DT(DT_VERDEF, 0x6FFFFFFCUL, \ - "address of the version definition segment") \ -_ELF_DEFINE_DT(DT_VERDEFNUM, 0x6FFFFFFDUL, \ - "the number of version definition entries") \ -_ELF_DEFINE_DT(DT_VERNEED, 0x6FFFFFFEUL, \ - "address of section with needed versions") \ -_ELF_DEFINE_DT(DT_VERNEEDNUM, 0x6FFFFFFFUL, \ - "the number of version needed entries") \ -_ELF_DEFINE_DT(DT_LOPROC, 0x70000000UL, \ - "start of processor-specific types") \ -_ELF_DEFINE_DT(DT_ARM_SYMTABSZ, 0x70000001UL, \ - "number of entries in the dynamic symbol table") \ -_ELF_DEFINE_DT(DT_SPARC_REGISTER, 0x70000001UL, \ - "index of an STT_SPARC_REGISTER symbol") \ -_ELF_DEFINE_DT(DT_ARM_PREEMPTMAP, 0x70000002UL, \ - "address of the preemption map") \ -_ELF_DEFINE_DT(DT_MIPS_RLD_VERSION, 0x70000001UL, \ - "version ID for runtime linker interface") \ -_ELF_DEFINE_DT(DT_MIPS_TIME_STAMP, 0x70000002UL, \ - "timestamp") \ -_ELF_DEFINE_DT(DT_MIPS_ICHECKSUM, 0x70000003UL, \ - "checksum of all external strings and common sizes") \ -_ELF_DEFINE_DT(DT_MIPS_IVERSION, 0x70000004UL, \ - "string table index of a version string") \ -_ELF_DEFINE_DT(DT_MIPS_FLAGS, 0x70000005UL, \ - "MIPS-specific flags") \ -_ELF_DEFINE_DT(DT_MIPS_BASE_ADDRESS, 0x70000006UL, \ - "base address for the executable/DSO") \ -_ELF_DEFINE_DT(DT_MIPS_CONFLICT, 0x70000008UL, \ - "address of .conflict section") \ -_ELF_DEFINE_DT(DT_MIPS_LIBLIST, 0x70000009UL, \ - "address of .liblist section") \ -_ELF_DEFINE_DT(DT_MIPS_LOCAL_GOTNO, 0x7000000AUL, \ - "number of local GOT entries") \ -_ELF_DEFINE_DT(DT_MIPS_CONFLICTNO, 0x7000000BUL, \ - "number of entries in the .conflict section") \ -_ELF_DEFINE_DT(DT_MIPS_LIBLISTNO, 0x70000010UL, \ - "number of entries in the .liblist section") \ -_ELF_DEFINE_DT(DT_MIPS_SYMTABNO, 0x70000011UL, \ - "number of entries in the .dynsym section") \ -_ELF_DEFINE_DT(DT_MIPS_UNREFEXTNO, 0x70000012UL, \ - "index of first external dynamic symbol not ref'ed locally") \ -_ELF_DEFINE_DT(DT_MIPS_GOTSYM, 0x70000013UL, \ - "index of first dynamic symbol corresponds to a GOT entry") \ -_ELF_DEFINE_DT(DT_MIPS_HIPAGENO, 0x70000014UL, \ - "number of page table entries in GOT") \ -_ELF_DEFINE_DT(DT_MIPS_RLD_MAP, 0x70000016UL, \ - "address of runtime linker map") \ -_ELF_DEFINE_DT(DT_MIPS_DELTA_CLASS, 0x70000017UL, \ - "Delta C++ class definition") \ -_ELF_DEFINE_DT(DT_MIPS_DELTA_CLASS_NO, 0x70000018UL, \ - "number of entries in DT_MIPS_DELTA_CLASS") \ -_ELF_DEFINE_DT(DT_MIPS_DELTA_INSTANCE, 0x70000019UL, \ - "Delta C++ class instances") \ -_ELF_DEFINE_DT(DT_MIPS_DELTA_INSTANCE_NO, 0x7000001AUL, \ - "number of entries in DT_MIPS_DELTA_INSTANCE") \ -_ELF_DEFINE_DT(DT_MIPS_DELTA_RELOC, 0x7000001BUL, \ - "Delta relocations") \ -_ELF_DEFINE_DT(DT_MIPS_DELTA_RELOC_NO, 0x7000001CUL, \ - "number of entries in DT_MIPS_DELTA_RELOC") \ -_ELF_DEFINE_DT(DT_MIPS_DELTA_SYM, 0x7000001DUL, \ - "Delta symbols refered by Delta relocations") \ -_ELF_DEFINE_DT(DT_MIPS_DELTA_SYM_NO, 0x7000001EUL, \ - "number of entries in DT_MIPS_DELTA_SYM") \ -_ELF_DEFINE_DT(DT_MIPS_DELTA_CLASSSYM, 0x70000020UL, \ - "Delta symbols for class declarations") \ -_ELF_DEFINE_DT(DT_MIPS_DELTA_CLASSSYM_NO, 0x70000021UL, \ - "number of entries in DT_MIPS_DELTA_CLASSSYM") \ -_ELF_DEFINE_DT(DT_MIPS_CXX_FLAGS, 0x70000022UL, \ - "C++ flavor flags") \ -_ELF_DEFINE_DT(DT_MIPS_PIXIE_INIT, 0x70000023UL, \ - "address of an initialization routine created by pixie") \ -_ELF_DEFINE_DT(DT_MIPS_SYMBOL_LIB, 0x70000024UL, \ - "address of .MIPS.symlib section") \ -_ELF_DEFINE_DT(DT_MIPS_LOCALPAGE_GOTIDX, 0x70000025UL, \ - "GOT index of first page table entry for a segment") \ -_ELF_DEFINE_DT(DT_MIPS_LOCAL_GOTIDX, 0x70000026UL, \ - "GOT index of first page table entry for a local symbol") \ -_ELF_DEFINE_DT(DT_MIPS_HIDDEN_GOTIDX, 0x70000027UL, \ - "GOT index of first page table entry for a hidden symbol") \ -_ELF_DEFINE_DT(DT_MIPS_PROTECTED_GOTIDX, 0x70000028UL, \ - "GOT index of first page table entry for a protected symbol") \ -_ELF_DEFINE_DT(DT_MIPS_OPTIONS, 0x70000029UL, \ - "address of .MIPS.options section") \ -_ELF_DEFINE_DT(DT_MIPS_INTERFACE, 0x7000002AUL, \ - "address of .MIPS.interface section") \ -_ELF_DEFINE_DT(DT_MIPS_DYNSTR_ALIGN, 0x7000002BUL, "???") \ -_ELF_DEFINE_DT(DT_MIPS_INTERFACE_SIZE, 0x7000002CUL, \ - "size of .MIPS.interface section") \ -_ELF_DEFINE_DT(DT_MIPS_RLD_TEXT_RESOLVE_ADDR, 0x7000002DUL, \ - "address of _rld_text_resolve in GOT") \ -_ELF_DEFINE_DT(DT_MIPS_PERF_SUFFIX, 0x7000002EUL, \ - "default suffix of DSO to be appended by dlopen") \ -_ELF_DEFINE_DT(DT_MIPS_COMPACT_SIZE, 0x7000002FUL, \ - "size of a ucode compact relocation record (o32)") \ -_ELF_DEFINE_DT(DT_MIPS_GP_VALUE, 0x70000030UL, \ - "GP value of a specified GP relative range") \ -_ELF_DEFINE_DT(DT_MIPS_AUX_DYNAMIC, 0x70000031UL, \ - "address of an auxiliary dynamic table") \ -_ELF_DEFINE_DT(DT_MIPS_PLTGOT, 0x70000032UL, \ - "address of the PLTGOT") \ -_ELF_DEFINE_DT(DT_MIPS_RLD_OBJ_UPDATE, 0x70000033UL, \ - "object list update callback") \ -_ELF_DEFINE_DT(DT_MIPS_RWPLT, 0x70000034UL, \ - "address of a writable PLT") \ -_ELF_DEFINE_DT(DT_PPC_GOT, 0x70000000UL, \ - "value of _GLOBAL_OFFSET_TABLE_") \ -_ELF_DEFINE_DT(DT_PPC_TLSOPT, 0x70000001UL, \ - "TLS descriptor should be optimized") \ -_ELF_DEFINE_DT(DT_PPC64_GLINK, 0x70000000UL, \ - "address of .glink section") \ -_ELF_DEFINE_DT(DT_PPC64_OPD, 0x70000001UL, \ - "address of .opd section") \ -_ELF_DEFINE_DT(DT_PPC64_OPDSZ, 0x70000002UL, \ - "size of .opd section") \ -_ELF_DEFINE_DT(DT_PPC64_TLSOPT, 0x70000003UL, \ - "TLS descriptor should be optimized") \ -_ELF_DEFINE_DT(DT_AUXILIARY, 0x7FFFFFFDUL, \ - "offset of string naming auxiliary filtees") \ -_ELF_DEFINE_DT(DT_USED, 0x7FFFFFFEUL, "ignored") \ -_ELF_DEFINE_DT(DT_FILTER, 0x7FFFFFFFUL, \ - "index of string naming filtees") \ -_ELF_DEFINE_DT(DT_HIPROC, 0x7FFFFFFFUL, \ - "end of processor-specific types") - -#undef _ELF_DEFINE_DT -#define _ELF_DEFINE_DT(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_DYN_TYPES() - DT__LAST__ = DT_HIPROC -}; - -#define DT_DEPRECATED_SPARC_REGISTER DT_SPARC_REGISTER - -/* - * Flags used in the executable header (field: e_flags). - */ -#define _ELF_DEFINE_EHDR_FLAGS() \ -_ELF_DEFINE_EF(EF_ARM_RELEXEC, 0x00000001UL, \ - "dynamic segment describes only how to relocate segments") \ -_ELF_DEFINE_EF(EF_ARM_HASENTRY, 0x00000002UL, \ - "e_entry contains a program entry point") \ -_ELF_DEFINE_EF(EF_ARM_SYMSARESORTED, 0x00000004UL, \ - "subsection of symbol table is sorted by symbol value") \ -_ELF_DEFINE_EF(EF_ARM_DYNSYMSUSESEGIDX, 0x00000008UL, \ - "dynamic symbol st_shndx = containing segment index + 1") \ -_ELF_DEFINE_EF(EF_ARM_MAPSYMSFIRST, 0x00000010UL, \ - "mapping symbols precede other local symbols in symtab") \ -_ELF_DEFINE_EF(EF_ARM_BE8, 0x00800000UL, \ - "file contains BE-8 code") \ -_ELF_DEFINE_EF(EF_ARM_LE8, 0x00400000UL, \ - "file contains LE-8 code") \ -_ELF_DEFINE_EF(EF_ARM_EABIMASK, 0xFF000000UL, \ - "mask for ARM EABI version number (0 denotes GNU or unknown)") \ -_ELF_DEFINE_EF(EF_ARM_EABI_UNKNOWN, 0x00000000UL, \ - "Unknown or GNU ARM EABI version number") \ -_ELF_DEFINE_EF(EF_ARM_EABI_VER1, 0x01000000UL, \ - "ARM EABI version 1") \ -_ELF_DEFINE_EF(EF_ARM_EABI_VER2, 0x02000000UL, \ - "ARM EABI version 2") \ -_ELF_DEFINE_EF(EF_ARM_EABI_VER3, 0x03000000UL, \ - "ARM EABI version 3") \ -_ELF_DEFINE_EF(EF_ARM_EABI_VER4, 0x04000000UL, \ - "ARM EABI version 4") \ -_ELF_DEFINE_EF(EF_ARM_EABI_VER5, 0x05000000UL, \ - "ARM EABI version 5") \ -_ELF_DEFINE_EF(EF_ARM_INTERWORK, 0x00000004UL, \ - "GNU EABI extension") \ -_ELF_DEFINE_EF(EF_ARM_APCS_26, 0x00000008UL, \ - "GNU EABI extension") \ -_ELF_DEFINE_EF(EF_ARM_APCS_FLOAT, 0x00000010UL, \ - "GNU EABI extension") \ -_ELF_DEFINE_EF(EF_ARM_PIC, 0x00000020UL, \ - "GNU EABI extension") \ -_ELF_DEFINE_EF(EF_ARM_ALIGN8, 0x00000040UL, \ - "GNU EABI extension") \ -_ELF_DEFINE_EF(EF_ARM_NEW_ABI, 0x00000080UL, \ - "GNU EABI extension") \ -_ELF_DEFINE_EF(EF_ARM_OLD_ABI, 0x00000100UL, \ - "GNU EABI extension") \ -_ELF_DEFINE_EF(EF_ARM_SOFT_FLOAT, 0x00000200UL, \ - "GNU EABI extension") \ -_ELF_DEFINE_EF(EF_ARM_VFP_FLOAT, 0x00000400UL, \ - "GNU EABI extension") \ -_ELF_DEFINE_EF(EF_ARM_MAVERICK_FLOAT, 0x00000800UL, \ - "GNU EABI extension") \ -_ELF_DEFINE_EF(EF_MIPS_NOREORDER, 0x00000001UL, \ - "at least one .noreorder directive appeared in the source") \ -_ELF_DEFINE_EF(EF_MIPS_PIC, 0x00000002UL, \ - "file contains position independent code") \ -_ELF_DEFINE_EF(EF_MIPS_CPIC, 0x00000004UL, \ - "file's code uses standard conventions for calling PIC") \ -_ELF_DEFINE_EF(EF_MIPS_UCODE, 0x00000010UL, \ - "file contains UCODE (obsolete)") \ -_ELF_DEFINE_EF(EF_MIPS_ABI2, 0x00000020UL, \ - "file follows MIPS III 32-bit ABI") \ -_ELF_DEFINE_EF(EF_MIPS_OPTIONS_FIRST, 0x00000080UL, \ - "ld(1) should process .MIPS.options section first") \ -_ELF_DEFINE_EF(EF_MIPS_ARCH_ASE, 0x0F000000UL, \ - "file uses application-specific architectural extensions") \ -_ELF_DEFINE_EF(EF_MIPS_ARCH_ASE_MDMX, 0x08000000UL, \ - "file uses MDMX multimedia extensions") \ -_ELF_DEFINE_EF(EF_MIPS_ARCH_ASE_M16, 0x04000000UL, \ - "file uses MIPS-16 ISA extensions") \ -_ELF_DEFINE_EF(EF_MIPS_ARCH, 0xF0000000UL, \ - "4-bit MIPS architecture field") \ -_ELF_DEFINE_EF(EF_PPC_EMB, 0x80000000UL, \ - "Embedded PowerPC flag") \ -_ELF_DEFINE_EF(EF_PPC_RELOCATABLE, 0x00010000UL, \ - "-mrelocatable flag") \ -_ELF_DEFINE_EF(EF_PPC_RELOCATABLE_LIB, 0x00008000UL, \ - "-mrelocatable-lib flag") \ -_ELF_DEFINE_EF(EF_SPARC_EXT_MASK, 0x00ffff00UL, \ - "Vendor Extension mask") \ -_ELF_DEFINE_EF(EF_SPARC_32PLUS, 0x00000100UL, \ - "Generic V8+ features") \ -_ELF_DEFINE_EF(EF_SPARC_SUN_US1, 0x00000200UL, \ - "Sun UltraSPARCTM 1 Extensions") \ -_ELF_DEFINE_EF(EF_SPARC_HAL_R1, 0x00000400UL, "HAL R1 Extensions") \ -_ELF_DEFINE_EF(EF_SPARC_SUN_US3, 0x00000800UL, \ - "Sun UltraSPARC 3 Extensions") \ -_ELF_DEFINE_EF(EF_SPARCV9_MM, 0x00000003UL, \ - "Mask for Memory Model") \ -_ELF_DEFINE_EF(EF_SPARCV9_TSO, 0x00000000UL, \ - "Total Store Ordering") \ -_ELF_DEFINE_EF(EF_SPARCV9_PSO, 0x00000001UL, \ - "Partial Store Ordering") \ -_ELF_DEFINE_EF(EF_SPARCV9_RMO, 0x00000002UL, \ - "Relaxed Memory Ordering") - -#undef _ELF_DEFINE_EF -#define _ELF_DEFINE_EF(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_EHDR_FLAGS() - EF__LAST__ -}; - -/* - * Offsets in the `ei_ident[]` field of an ELF executable header. - */ -#define _ELF_DEFINE_EI_OFFSETS() \ -_ELF_DEFINE_EI(EI_MAG0, 0, "magic number") \ -_ELF_DEFINE_EI(EI_MAG1, 1, "magic number") \ -_ELF_DEFINE_EI(EI_MAG2, 2, "magic number") \ -_ELF_DEFINE_EI(EI_MAG3, 3, "magic number") \ -_ELF_DEFINE_EI(EI_CLASS, 4, "file class") \ -_ELF_DEFINE_EI(EI_DATA, 5, "data encoding") \ -_ELF_DEFINE_EI(EI_VERSION, 6, "file version") \ -_ELF_DEFINE_EI(EI_OSABI, 7, "OS ABI kind") \ -_ELF_DEFINE_EI(EI_ABIVERSION, 8, "OS ABI version") \ -_ELF_DEFINE_EI(EI_PAD, 9, "padding start") \ -_ELF_DEFINE_EI(EI_NIDENT, 16, "total size") - -#undef _ELF_DEFINE_EI -#define _ELF_DEFINE_EI(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_EI_OFFSETS() - EI__LAST__ -}; - -/* - * The ELF class of an object. - */ -#define _ELF_DEFINE_ELFCLASS() \ -_ELF_DEFINE_EC(ELFCLASSNONE, 0, "Unknown ELF class") \ -_ELF_DEFINE_EC(ELFCLASS32, 1, "32 bit objects") \ -_ELF_DEFINE_EC(ELFCLASS64, 2, "64 bit objects") - -#undef _ELF_DEFINE_EC -#define _ELF_DEFINE_EC(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_ELFCLASS() - EC__LAST__ -}; - -/* - * Endianness of data in an ELF object. - */ - -#define _ELF_DEFINE_ELF_DATA_ENDIANNESS() \ -_ELF_DEFINE_ED(ELFDATANONE, 0, "Unknown data endianness") \ -_ELF_DEFINE_ED(ELFDATA2LSB, 1, "little endian") \ -_ELF_DEFINE_ED(ELFDATA2MSB, 2, "big endian") - -#undef _ELF_DEFINE_ED -#define _ELF_DEFINE_ED(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_ELF_DATA_ENDIANNESS() - ED__LAST__ -}; - -/* - * Values of the magic numbers used in identification array. - */ -#define _ELF_DEFINE_ELF_MAGIC() \ -_ELF_DEFINE_EMAG(ELFMAG0, 0x7FU) \ -_ELF_DEFINE_EMAG(ELFMAG1, 'E') \ -_ELF_DEFINE_EMAG(ELFMAG2, 'L') \ -_ELF_DEFINE_EMAG(ELFMAG3, 'F') - -#undef _ELF_DEFINE_EMAG -#define _ELF_DEFINE_EMAG(N, V) N = V , -enum { - _ELF_DEFINE_ELF_MAGIC() - ELFMAG__LAST__ -}; - -/* - * ELF OS ABI field. - */ -#define _ELF_DEFINE_ELF_OSABI() \ -_ELF_DEFINE_EABI(ELFOSABI_NONE, 0, \ - "No extensions or unspecified") \ -_ELF_DEFINE_EABI(ELFOSABI_SYSV, 0, "SYSV") \ -_ELF_DEFINE_EABI(ELFOSABI_HPUX, 1, "Hewlett-Packard HP-UX") \ -_ELF_DEFINE_EABI(ELFOSABI_NETBSD, 2, "NetBSD") \ -_ELF_DEFINE_EABI(ELFOSABI_GNU, 3, "GNU") \ -_ELF_DEFINE_EABI(ELFOSABI_HURD, 4, "GNU/HURD") \ -_ELF_DEFINE_EABI(ELFOSABI_86OPEN, 5, "86Open Common ABI") \ -_ELF_DEFINE_EABI(ELFOSABI_SOLARIS, 6, "Sun Solaris") \ -_ELF_DEFINE_EABI(ELFOSABI_AIX, 7, "AIX") \ -_ELF_DEFINE_EABI(ELFOSABI_IRIX, 8, "IRIX") \ -_ELF_DEFINE_EABI(ELFOSABI_FREEBSD, 9, "FreeBSD") \ -_ELF_DEFINE_EABI(ELFOSABI_TRU64, 10, "Compaq TRU64 UNIX") \ -_ELF_DEFINE_EABI(ELFOSABI_MODESTO, 11, "Novell Modesto") \ -_ELF_DEFINE_EABI(ELFOSABI_OPENBSD, 12, "Open BSD") \ -_ELF_DEFINE_EABI(ELFOSABI_OPENVMS, 13, "Open VMS") \ -_ELF_DEFINE_EABI(ELFOSABI_NSK, 14, \ - "Hewlett-Packard Non-Stop Kernel") \ -_ELF_DEFINE_EABI(ELFOSABI_AROS, 15, "Amiga Research OS") \ -_ELF_DEFINE_EABI(ELFOSABI_FENIXOS, 16, \ - "The FenixOS highly scalable multi-core OS") \ -_ELF_DEFINE_EABI(ELFOSABI_ARM_AEABI, 64, \ - "ARM specific symbol versioning extensions") \ -_ELF_DEFINE_EABI(ELFOSABI_ARM, 97, "ARM ABI") \ -_ELF_DEFINE_EABI(ELFOSABI_STANDALONE, 255, \ - "Standalone (embedded) application") - -#undef _ELF_DEFINE_EABI -#define _ELF_DEFINE_EABI(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_ELF_OSABI() - ELFOSABI__LAST__ -}; - -#define ELFOSABI_LINUX ELFOSABI_GNU - -/* - * ELF Machine types: (EM_*). - */ -#define _ELF_DEFINE_ELF_MACHINES() \ -_ELF_DEFINE_EM(EM_NONE, 0, "No machine") \ -_ELF_DEFINE_EM(EM_M32, 1, "AT&T WE 32100") \ -_ELF_DEFINE_EM(EM_SPARC, 2, "SPARC") \ -_ELF_DEFINE_EM(EM_386, 3, "Intel 80386") \ -_ELF_DEFINE_EM(EM_68K, 4, "Motorola 68000") \ -_ELF_DEFINE_EM(EM_88K, 5, "Motorola 88000") \ -_ELF_DEFINE_EM(EM_IAMCU, 6, "Intel MCU") \ -_ELF_DEFINE_EM(EM_860, 7, "Intel 80860") \ -_ELF_DEFINE_EM(EM_MIPS, 8, "MIPS I Architecture") \ -_ELF_DEFINE_EM(EM_S370, 9, "IBM System/370 Processor") \ -_ELF_DEFINE_EM(EM_MIPS_RS3_LE, 10, "MIPS RS3000 Little-endian") \ -_ELF_DEFINE_EM(EM_PARISC, 15, "Hewlett-Packard PA-RISC") \ -_ELF_DEFINE_EM(EM_VPP500, 17, "Fujitsu VPP500") \ -_ELF_DEFINE_EM(EM_SPARC32PLUS, 18, \ - "Enhanced instruction set SPARC") \ -_ELF_DEFINE_EM(EM_960, 19, "Intel 80960") \ -_ELF_DEFINE_EM(EM_PPC, 20, "PowerPC") \ -_ELF_DEFINE_EM(EM_PPC64, 21, "64-bit PowerPC") \ -_ELF_DEFINE_EM(EM_S390, 22, "IBM System/390 Processor") \ -_ELF_DEFINE_EM(EM_SPU, 23, "IBM SPU/SPC") \ -_ELF_DEFINE_EM(EM_V800, 36, "NEC V800") \ -_ELF_DEFINE_EM(EM_FR20, 37, "Fujitsu FR20") \ -_ELF_DEFINE_EM(EM_RH32, 38, "TRW RH-32") \ -_ELF_DEFINE_EM(EM_RCE, 39, "Motorola RCE") \ -_ELF_DEFINE_EM(EM_ARM, 40, "Advanced RISC Machines ARM") \ -_ELF_DEFINE_EM(EM_ALPHA, 41, "Digital Alpha") \ -_ELF_DEFINE_EM(EM_SH, 42, "Hitachi SH") \ -_ELF_DEFINE_EM(EM_SPARCV9, 43, "SPARC Version 9") \ -_ELF_DEFINE_EM(EM_TRICORE, 44, \ - "Siemens TriCore embedded processor") \ -_ELF_DEFINE_EM(EM_ARC, 45, \ - "Argonaut RISC Core, Argonaut Technologies Inc.") \ -_ELF_DEFINE_EM(EM_H8_300, 46, "Hitachi H8/300") \ -_ELF_DEFINE_EM(EM_H8_300H, 47, "Hitachi H8/300H") \ -_ELF_DEFINE_EM(EM_H8S, 48, "Hitachi H8S") \ -_ELF_DEFINE_EM(EM_H8_500, 49, "Hitachi H8/500") \ -_ELF_DEFINE_EM(EM_IA_64, 50, \ - "Intel IA-64 processor architecture") \ -_ELF_DEFINE_EM(EM_MIPS_X, 51, "Stanford MIPS-X") \ -_ELF_DEFINE_EM(EM_COLDFIRE, 52, "Motorola ColdFire") \ -_ELF_DEFINE_EM(EM_68HC12, 53, "Motorola M68HC12") \ -_ELF_DEFINE_EM(EM_MMA, 54, \ - "Fujitsu MMA Multimedia Accelerator") \ -_ELF_DEFINE_EM(EM_PCP, 55, "Siemens PCP") \ -_ELF_DEFINE_EM(EM_NCPU, 56, \ - "Sony nCPU embedded RISC processor") \ -_ELF_DEFINE_EM(EM_NDR1, 57, "Denso NDR1 microprocessor") \ -_ELF_DEFINE_EM(EM_STARCORE, 58, "Motorola Star*Core processor") \ -_ELF_DEFINE_EM(EM_ME16, 59, "Toyota ME16 processor") \ -_ELF_DEFINE_EM(EM_ST100, 60, \ - "STMicroelectronics ST100 processor") \ -_ELF_DEFINE_EM(EM_TINYJ, 61, \ - "Advanced Logic Corp. TinyJ embedded processor family") \ -_ELF_DEFINE_EM(EM_X86_64, 62, "AMD x86-64 architecture") \ -_ELF_DEFINE_EM(EM_PDSP, 63, "Sony DSP Processor") \ -_ELF_DEFINE_EM(EM_PDP10, 64, \ - "Digital Equipment Corp. PDP-10") \ -_ELF_DEFINE_EM(EM_PDP11, 65, \ - "Digital Equipment Corp. PDP-11") \ -_ELF_DEFINE_EM(EM_FX66, 66, "Siemens FX66 microcontroller") \ -_ELF_DEFINE_EM(EM_ST9PLUS, 67, \ - "STMicroelectronics ST9+ 8/16 bit microcontroller") \ -_ELF_DEFINE_EM(EM_ST7, 68, \ - "STMicroelectronics ST7 8-bit microcontroller") \ -_ELF_DEFINE_EM(EM_68HC16, 69, \ - "Motorola MC68HC16 Microcontroller") \ -_ELF_DEFINE_EM(EM_68HC11, 70, \ - "Motorola MC68HC11 Microcontroller") \ -_ELF_DEFINE_EM(EM_68HC08, 71, \ - "Motorola MC68HC08 Microcontroller") \ -_ELF_DEFINE_EM(EM_68HC05, 72, \ - "Motorola MC68HC05 Microcontroller") \ -_ELF_DEFINE_EM(EM_SVX, 73, "Silicon Graphics SVx") \ -_ELF_DEFINE_EM(EM_ST19, 74, \ - "STMicroelectronics ST19 8-bit microcontroller") \ -_ELF_DEFINE_EM(EM_VAX, 75, "Digital VAX") \ -_ELF_DEFINE_EM(EM_CRIS, 76, \ - "Axis Communications 32-bit embedded processor") \ -_ELF_DEFINE_EM(EM_JAVELIN, 77, \ - "Infineon Technologies 32-bit embedded processor") \ -_ELF_DEFINE_EM(EM_FIREPATH, 78, \ - "Element 14 64-bit DSP Processor") \ -_ELF_DEFINE_EM(EM_ZSP, 79, \ - "LSI Logic 16-bit DSP Processor") \ -_ELF_DEFINE_EM(EM_MMIX, 80, \ - "Donald Knuth's educational 64-bit processor") \ -_ELF_DEFINE_EM(EM_HUANY, 81, \ - "Harvard University machine-independent object files") \ -_ELF_DEFINE_EM(EM_PRISM, 82, "SiTera Prism") \ -_ELF_DEFINE_EM(EM_AVR, 83, \ - "Atmel AVR 8-bit microcontroller") \ -_ELF_DEFINE_EM(EM_FR30, 84, "Fujitsu FR30") \ -_ELF_DEFINE_EM(EM_D10V, 85, "Mitsubishi D10V") \ -_ELF_DEFINE_EM(EM_D30V, 86, "Mitsubishi D30V") \ -_ELF_DEFINE_EM(EM_V850, 87, "NEC v850") \ -_ELF_DEFINE_EM(EM_M32R, 88, "Mitsubishi M32R") \ -_ELF_DEFINE_EM(EM_MN10300, 89, "Matsushita MN10300") \ -_ELF_DEFINE_EM(EM_MN10200, 90, "Matsushita MN10200") \ -_ELF_DEFINE_EM(EM_PJ, 91, "picoJava") \ -_ELF_DEFINE_EM(EM_OPENRISC, 92, \ - "OpenRISC 32-bit embedded processor") \ -_ELF_DEFINE_EM(EM_ARC_COMPACT, 93, \ - "ARC International ARCompact processor") \ -_ELF_DEFINE_EM(EM_XTENSA, 94, \ - "Tensilica Xtensa Architecture") \ -_ELF_DEFINE_EM(EM_VIDEOCORE, 95, \ - "Alphamosaic VideoCore processor") \ -_ELF_DEFINE_EM(EM_TMM_GPP, 96, \ - "Thompson Multimedia General Purpose Processor") \ -_ELF_DEFINE_EM(EM_NS32K, 97, \ - "National Semiconductor 32000 series") \ -_ELF_DEFINE_EM(EM_TPC, 98, "Tenor Network TPC processor") \ -_ELF_DEFINE_EM(EM_SNP1K, 99, "Trebia SNP 1000 processor") \ -_ELF_DEFINE_EM(EM_ST200, 100, \ - "STMicroelectronics (www.st.com) ST200 microcontroller") \ -_ELF_DEFINE_EM(EM_IP2K, 101, \ - "Ubicom IP2xxx microcontroller family") \ -_ELF_DEFINE_EM(EM_MAX, 102, "MAX Processor") \ -_ELF_DEFINE_EM(EM_CR, 103, \ - "National Semiconductor CompactRISC microprocessor") \ -_ELF_DEFINE_EM(EM_F2MC16, 104, "Fujitsu F2MC16") \ -_ELF_DEFINE_EM(EM_MSP430, 105, \ - "Texas Instruments embedded microcontroller msp430") \ -_ELF_DEFINE_EM(EM_BLACKFIN, 106, \ - "Analog Devices Blackfin (DSP) processor") \ -_ELF_DEFINE_EM(EM_SE_C33, 107, \ - "S1C33 Family of Seiko Epson processors") \ -_ELF_DEFINE_EM(EM_SEP, 108, \ - "Sharp embedded microprocessor") \ -_ELF_DEFINE_EM(EM_ARCA, 109, "Arca RISC Microprocessor") \ -_ELF_DEFINE_EM(EM_UNICORE, 110, \ - "Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University") \ -_ELF_DEFINE_EM(EM_EXCESS, 111, \ - "eXcess: 16/32/64-bit configurable embedded CPU") \ -_ELF_DEFINE_EM(EM_DXP, 112, \ - "Icera Semiconductor Inc. Deep Execution Processor") \ -_ELF_DEFINE_EM(EM_ALTERA_NIOS2, 113, \ - "Altera Nios II soft-core processor") \ -_ELF_DEFINE_EM(EM_CRX, 114, \ - "National Semiconductor CompactRISC CRX microprocessor") \ -_ELF_DEFINE_EM(EM_XGATE, 115, \ - "Motorola XGATE embedded processor") \ -_ELF_DEFINE_EM(EM_C166, 116, \ - "Infineon C16x/XC16x processor") \ -_ELF_DEFINE_EM(EM_M16C, 117, \ - "Renesas M16C series microprocessors") \ -_ELF_DEFINE_EM(EM_DSPIC30F, 118, \ - "Microchip Technology dsPIC30F Digital Signal Controller") \ -_ELF_DEFINE_EM(EM_CE, 119, \ - "Freescale Communication Engine RISC core") \ -_ELF_DEFINE_EM(EM_M32C, 120, \ - "Renesas M32C series microprocessors") \ -_ELF_DEFINE_EM(EM_TSK3000, 131, "Altium TSK3000 core") \ -_ELF_DEFINE_EM(EM_RS08, 132, \ - "Freescale RS08 embedded processor") \ -_ELF_DEFINE_EM(EM_SHARC, 133, \ - "Analog Devices SHARC family of 32-bit DSP processors") \ -_ELF_DEFINE_EM(EM_ECOG2, 134, \ - "Cyan Technology eCOG2 microprocessor") \ -_ELF_DEFINE_EM(EM_SCORE7, 135, \ - "Sunplus S+core7 RISC processor") \ -_ELF_DEFINE_EM(EM_DSP24, 136, \ - "New Japan Radio (NJR) 24-bit DSP Processor") \ -_ELF_DEFINE_EM(EM_VIDEOCORE3, 137, \ - "Broadcom VideoCore III processor") \ -_ELF_DEFINE_EM(EM_LATTICEMICO32, 138, \ - "RISC processor for Lattice FPGA architecture") \ -_ELF_DEFINE_EM(EM_SE_C17, 139, "Seiko Epson C17 family") \ -_ELF_DEFINE_EM(EM_TI_C6000, 140, \ - "The Texas Instruments TMS320C6000 DSP family") \ -_ELF_DEFINE_EM(EM_TI_C2000, 141, \ - "The Texas Instruments TMS320C2000 DSP family") \ -_ELF_DEFINE_EM(EM_TI_C5500, 142, \ - "The Texas Instruments TMS320C55x DSP family") \ -_ELF_DEFINE_EM(EM_MMDSP_PLUS, 160, \ - "STMicroelectronics 64bit VLIW Data Signal Processor") \ -_ELF_DEFINE_EM(EM_CYPRESS_M8C, 161, "Cypress M8C microprocessor") \ -_ELF_DEFINE_EM(EM_R32C, 162, \ - "Renesas R32C series microprocessors") \ -_ELF_DEFINE_EM(EM_TRIMEDIA, 163, \ - "NXP Semiconductors TriMedia architecture family") \ -_ELF_DEFINE_EM(EM_QDSP6, 164, "QUALCOMM DSP6 Processor") \ -_ELF_DEFINE_EM(EM_8051, 165, "Intel 8051 and variants") \ -_ELF_DEFINE_EM(EM_STXP7X, 166, \ - "STMicroelectronics STxP7x family of configurable and extensible RISC processors") \ -_ELF_DEFINE_EM(EM_NDS32, 167, \ - "Andes Technology compact code size embedded RISC processor family") \ -_ELF_DEFINE_EM(EM_ECOG1, 168, \ - "Cyan Technology eCOG1X family") \ -_ELF_DEFINE_EM(EM_ECOG1X, 168, \ - "Cyan Technology eCOG1X family") \ -_ELF_DEFINE_EM(EM_MAXQ30, 169, \ - "Dallas Semiconductor MAXQ30 Core Micro-controllers") \ -_ELF_DEFINE_EM(EM_XIMO16, 170, \ - "New Japan Radio (NJR) 16-bit DSP Processor") \ -_ELF_DEFINE_EM(EM_MANIK, 171, \ - "M2000 Reconfigurable RISC Microprocessor") \ -_ELF_DEFINE_EM(EM_CRAYNV2, 172, \ - "Cray Inc. NV2 vector architecture") \ -_ELF_DEFINE_EM(EM_RX, 173, "Renesas RX family") \ -_ELF_DEFINE_EM(EM_METAG, 174, \ - "Imagination Technologies META processor architecture") \ -_ELF_DEFINE_EM(EM_MCST_ELBRUS, 175, \ - "MCST Elbrus general purpose hardware architecture") \ -_ELF_DEFINE_EM(EM_ECOG16, 176, \ - "Cyan Technology eCOG16 family") \ -_ELF_DEFINE_EM(EM_CR16, 177, \ - "National Semiconductor CompactRISC CR16 16-bit microprocessor") \ -_ELF_DEFINE_EM(EM_ETPU, 178, \ - "Freescale Extended Time Processing Unit") \ -_ELF_DEFINE_EM(EM_SLE9X, 179, \ - "Infineon Technologies SLE9X core") \ -_ELF_DEFINE_EM(EM_AARCH64, 183, \ - "AArch64 (64-bit ARM)") \ -_ELF_DEFINE_EM(EM_AVR32, 185, \ - "Atmel Corporation 32-bit microprocessor family") \ -_ELF_DEFINE_EM(EM_STM8, 186, \ - "STMicroeletronics STM8 8-bit microcontroller") \ -_ELF_DEFINE_EM(EM_TILE64, 187, \ - "Tilera TILE64 multicore architecture family") \ -_ELF_DEFINE_EM(EM_TILEPRO, 188, \ - "Tilera TILEPro multicore architecture family") \ -_ELF_DEFINE_EM(EM_MICROBLAZE, 189, \ - "Xilinx MicroBlaze 32-bit RISC soft processor core") \ -_ELF_DEFINE_EM(EM_CUDA, 190, "NVIDIA CUDA architecture") \ -_ELF_DEFINE_EM(EM_TILEGX, 191, \ - "Tilera TILE-Gx multicore architecture family") \ -_ELF_DEFINE_EM(EM_CLOUDSHIELD, 192, \ - "CloudShield architecture family") \ -_ELF_DEFINE_EM(EM_COREA_1ST, 193, \ - "KIPO-KAIST Core-A 1st generation processor family") \ -_ELF_DEFINE_EM(EM_COREA_2ND, 194, \ - "KIPO-KAIST Core-A 2nd generation processor family") \ -_ELF_DEFINE_EM(EM_ARC_COMPACT2, 195, "Synopsys ARCompact V2") \ -_ELF_DEFINE_EM(EM_OPEN8, 196, \ - "Open8 8-bit RISC soft processor core") \ -_ELF_DEFINE_EM(EM_RL78, 197, "Renesas RL78 family") \ -_ELF_DEFINE_EM(EM_VIDEOCORE5, 198, "Broadcom VideoCore V processor") \ -_ELF_DEFINE_EM(EM_78KOR, 199, "Renesas 78KOR family") \ -_ELF_DEFINE_EM(EM_56800EX, 200, \ - "Freescale 56800EX Digital Signal Controller") \ -_ELF_DEFINE_EM(EM_BA1, 201, "Beyond BA1 CPU architecture") \ -_ELF_DEFINE_EM(EM_BA2, 202, "Beyond BA2 CPU architecture") \ -_ELF_DEFINE_EM(EM_XCORE, 203, "XMOS xCORE processor family") \ -_ELF_DEFINE_EM(EM_MCHP_PIC, 204, "Microchip 8-bit PIC(r) family") \ -_ELF_DEFINE_EM(EM_INTEL205, 205, "Reserved by Intel") \ -_ELF_DEFINE_EM(EM_INTEL206, 206, "Reserved by Intel") \ -_ELF_DEFINE_EM(EM_INTEL207, 207, "Reserved by Intel") \ -_ELF_DEFINE_EM(EM_INTEL208, 208, "Reserved by Intel") \ -_ELF_DEFINE_EM(EM_INTEL209, 209, "Reserved by Intel") \ -_ELF_DEFINE_EM(EM_KM32, 210, "KM211 KM32 32-bit processor") \ -_ELF_DEFINE_EM(EM_KMX32, 211, "KM211 KMX32 32-bit processor") \ -_ELF_DEFINE_EM(EM_KMX16, 212, "KM211 KMX16 16-bit processor") \ -_ELF_DEFINE_EM(EM_KMX8, 213, "KM211 KMX8 8-bit processor") \ -_ELF_DEFINE_EM(EM_KVARC, 214, "KM211 KMX32 KVARC processor") \ -_ELF_DEFINE_EM(EM_RISCV, 243, "RISC-V") - -#undef _ELF_DEFINE_EM -#define _ELF_DEFINE_EM(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_ELF_MACHINES() - EM__LAST__ -}; - -/* Other synonyms. */ -#define EM_AMD64 EM_X86_64 -#define EM_ARC_A5 EM_ARC_COMPACT - -/* - * ELF file types: (ET_*). - */ -#define _ELF_DEFINE_ELF_TYPES() \ -_ELF_DEFINE_ET(ET_NONE, 0, "No file type") \ -_ELF_DEFINE_ET(ET_REL, 1, "Relocatable object") \ -_ELF_DEFINE_ET(ET_EXEC, 2, "Executable") \ -_ELF_DEFINE_ET(ET_DYN, 3, "Shared object") \ -_ELF_DEFINE_ET(ET_CORE, 4, "Core file") \ -_ELF_DEFINE_ET(ET_LOOS, 0xFE00U, "Begin OS-specific range") \ -_ELF_DEFINE_ET(ET_HIOS, 0xFEFFU, "End OS-specific range") \ -_ELF_DEFINE_ET(ET_LOPROC, 0xFF00U, "Begin processor-specific range") \ -_ELF_DEFINE_ET(ET_HIPROC, 0xFFFFU, "End processor-specific range") - -#undef _ELF_DEFINE_ET -#define _ELF_DEFINE_ET(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_ELF_TYPES() - ET__LAST__ -}; - -/* ELF file format version numbers. */ -#define EV_NONE 0 -#define EV_CURRENT 1 - -/* - * Flags for section groups. - */ -#define GRP_COMDAT 0x1 /* COMDAT semantics */ -#define GRP_MASKOS 0x0ff00000 /* OS-specific flags */ -#define GRP_MASKPROC 0xf0000000 /* processor-specific flags */ - -/* - * Flags / mask for .gnu.versym sections. - */ -#define VERSYM_VERSION 0x7fff -#define VERSYM_HIDDEN 0x8000 - -/* - * Flags used by program header table entries. - */ - -#define _ELF_DEFINE_PHDR_FLAGS() \ -_ELF_DEFINE_PF(PF_X, 0x1, "Execute") \ -_ELF_DEFINE_PF(PF_W, 0x2, "Write") \ -_ELF_DEFINE_PF(PF_R, 0x4, "Read") \ -_ELF_DEFINE_PF(PF_MASKOS, 0x0ff00000, "OS-specific flags") \ -_ELF_DEFINE_PF(PF_MASKPROC, 0xf0000000, "Processor-specific flags") \ -_ELF_DEFINE_PF(PF_ARM_SB, 0x10000000, \ - "segment contains the location addressed by the static base") \ -_ELF_DEFINE_PF(PF_ARM_PI, 0x20000000, \ - "segment is position-independent") \ -_ELF_DEFINE_PF(PF_ARM_ABS, 0x40000000, \ - "segment must be loaded at its base address") - -#undef _ELF_DEFINE_PF -#define _ELF_DEFINE_PF(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_PHDR_FLAGS() - PF__LAST__ -}; - -/* - * Types of program header table entries. - */ - -#define _ELF_DEFINE_PHDR_TYPES() \ -_ELF_DEFINE_PT(PT_NULL, 0, "ignored entry") \ -_ELF_DEFINE_PT(PT_LOAD, 1, "loadable segment") \ -_ELF_DEFINE_PT(PT_DYNAMIC, 2, \ - "contains dynamic linking information") \ -_ELF_DEFINE_PT(PT_INTERP, 3, "names an interpreter") \ -_ELF_DEFINE_PT(PT_NOTE, 4, "auxiliary information") \ -_ELF_DEFINE_PT(PT_SHLIB, 5, "reserved") \ -_ELF_DEFINE_PT(PT_PHDR, 6, \ - "describes the program header itself") \ -_ELF_DEFINE_PT(PT_TLS, 7, "thread local storage") \ -_ELF_DEFINE_PT(PT_LOOS, 0x60000000UL, \ - "start of OS-specific range") \ -_ELF_DEFINE_PT(PT_SUNW_UNWIND, 0x6464E550UL, \ - "Solaris/amd64 stack unwind tables") \ -_ELF_DEFINE_PT(PT_GNU_EH_FRAME, 0x6474E550UL, \ - "GCC generated .eh_frame_hdr segment") \ -_ELF_DEFINE_PT(PT_GNU_STACK, 0x6474E551UL, \ - "Stack flags") \ -_ELF_DEFINE_PT(PT_GNU_RELRO, 0x6474E552UL, \ - "Segment becomes read-only after relocation") \ -_ELF_DEFINE_PT(PT_SUNWBSS, 0x6FFFFFFAUL, \ - "A Solaris .SUNW_bss section") \ -_ELF_DEFINE_PT(PT_SUNWSTACK, 0x6FFFFFFBUL, \ - "A Solaris process stack") \ -_ELF_DEFINE_PT(PT_SUNWDTRACE, 0x6FFFFFFCUL, \ - "Used by dtrace(1)") \ -_ELF_DEFINE_PT(PT_SUNWCAP, 0x6FFFFFFDUL, \ - "Special hardware capability requirements") \ -_ELF_DEFINE_PT(PT_HIOS, 0x6FFFFFFFUL, \ - "end of OS-specific range") \ -_ELF_DEFINE_PT(PT_LOPROC, 0x70000000UL, \ - "start of processor-specific range") \ -_ELF_DEFINE_PT(PT_ARM_ARCHEXT, 0x70000000UL, \ - "platform architecture compatibility information") \ -_ELF_DEFINE_PT(PT_ARM_EXIDX, 0x70000001UL, \ - "exception unwind tables") \ -_ELF_DEFINE_PT(PT_MIPS_REGINFO, 0x70000000UL, \ - "register usage information") \ -_ELF_DEFINE_PT(PT_MIPS_RTPROC, 0x70000001UL, \ - "runtime procedure table") \ -_ELF_DEFINE_PT(PT_MIPS_OPTIONS, 0x70000002UL, \ - "options segment") \ -_ELF_DEFINE_PT(PT_HIPROC, 0x7FFFFFFFUL, \ - "end of processor-specific range") - -#undef _ELF_DEFINE_PT -#define _ELF_DEFINE_PT(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_PHDR_TYPES() - PT__LAST__ = PT_HIPROC -}; - -/* synonyms. */ -#define PT_ARM_UNWIND PT_ARM_EXIDX -#define PT_HISUNW PT_HIOS -#define PT_LOSUNW PT_SUNWBSS - -/* - * Section flags. - */ - -#define _ELF_DEFINE_SECTION_FLAGS() \ -_ELF_DEFINE_SHF(SHF_WRITE, 0x1, \ - "writable during program execution") \ -_ELF_DEFINE_SHF(SHF_ALLOC, 0x2, \ - "occupies memory during program execution") \ -_ELF_DEFINE_SHF(SHF_EXECINSTR, 0x4, "executable instructions") \ -_ELF_DEFINE_SHF(SHF_MERGE, 0x10, \ - "may be merged to prevent duplication") \ -_ELF_DEFINE_SHF(SHF_STRINGS, 0x20, \ - "NUL-terminated character strings") \ -_ELF_DEFINE_SHF(SHF_INFO_LINK, 0x40, \ - "the sh_info field holds a link") \ -_ELF_DEFINE_SHF(SHF_LINK_ORDER, 0x80, \ - "special ordering requirements during linking") \ -_ELF_DEFINE_SHF(SHF_OS_NONCONFORMING, 0x100, \ - "requires OS-specific processing during linking") \ -_ELF_DEFINE_SHF(SHF_GROUP, 0x200, \ - "member of a section group") \ -_ELF_DEFINE_SHF(SHF_TLS, 0x400, \ - "holds thread-local storage") \ -_ELF_DEFINE_SHF(SHF_COMPRESSED, 0x800, \ - "holds compressed data") \ -_ELF_DEFINE_SHF(SHF_MASKOS, 0x0FF00000UL, \ - "bits reserved for OS-specific semantics") \ -_ELF_DEFINE_SHF(SHF_AMD64_LARGE, 0x10000000UL, \ - "section uses large code model") \ -_ELF_DEFINE_SHF(SHF_ENTRYSECT, 0x10000000UL, \ - "section contains an entry point (ARM)") \ -_ELF_DEFINE_SHF(SHF_COMDEF, 0x80000000UL, \ - "section may be multiply defined in input to link step (ARM)") \ -_ELF_DEFINE_SHF(SHF_MIPS_GPREL, 0x10000000UL, \ - "section must be part of global data area") \ -_ELF_DEFINE_SHF(SHF_MIPS_MERGE, 0x20000000UL, \ - "section data should be merged to eliminate duplication") \ -_ELF_DEFINE_SHF(SHF_MIPS_ADDR, 0x40000000UL, \ - "section data is addressed by default") \ -_ELF_DEFINE_SHF(SHF_MIPS_STRING, 0x80000000UL, \ - "section data is string data by default") \ -_ELF_DEFINE_SHF(SHF_MIPS_NOSTRIP, 0x08000000UL, \ - "section data may not be stripped") \ -_ELF_DEFINE_SHF(SHF_MIPS_LOCAL, 0x04000000UL, \ - "section data local to process") \ -_ELF_DEFINE_SHF(SHF_MIPS_NAMES, 0x02000000UL, \ - "linker must generate implicit hidden weak names") \ -_ELF_DEFINE_SHF(SHF_MIPS_NODUPE, 0x01000000UL, \ - "linker must retain only one copy") \ -_ELF_DEFINE_SHF(SHF_ORDERED, 0x40000000UL, \ - "section is ordered with respect to other sections") \ -_ELF_DEFINE_SHF(SHF_EXCLUDE, 0x80000000UL, \ - "section is excluded from executables and shared objects") \ -_ELF_DEFINE_SHF(SHF_MASKPROC, 0xF0000000UL, \ - "bits reserved for processor-specific semantics") - -#undef _ELF_DEFINE_SHF -#define _ELF_DEFINE_SHF(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_SECTION_FLAGS() - SHF__LAST__ -}; - -/* - * Special section indices. - */ -#define _ELF_DEFINE_SECTION_INDICES() \ -_ELF_DEFINE_SHN(SHN_UNDEF, 0, "undefined section") \ -_ELF_DEFINE_SHN(SHN_LORESERVE, 0xFF00U, "start of reserved area") \ -_ELF_DEFINE_SHN(SHN_LOPROC, 0xFF00U, \ - "start of processor-specific range") \ -_ELF_DEFINE_SHN(SHN_BEFORE, 0xFF00U, "used for section ordering") \ -_ELF_DEFINE_SHN(SHN_AFTER, 0xFF01U, "used for section ordering") \ -_ELF_DEFINE_SHN(SHN_AMD64_LCOMMON, 0xFF02U, "large common block label") \ -_ELF_DEFINE_SHN(SHN_MIPS_ACOMMON, 0xFF00U, \ - "allocated common symbols in a DSO") \ -_ELF_DEFINE_SHN(SHN_MIPS_TEXT, 0xFF01U, "Reserved (obsolete)") \ -_ELF_DEFINE_SHN(SHN_MIPS_DATA, 0xFF02U, "Reserved (obsolete)") \ -_ELF_DEFINE_SHN(SHN_MIPS_SCOMMON, 0xFF03U, \ - "gp-addressable common symbols") \ -_ELF_DEFINE_SHN(SHN_MIPS_SUNDEFINED, 0xFF04U, \ - "gp-addressable undefined symbols") \ -_ELF_DEFINE_SHN(SHN_MIPS_LCOMMON, 0xFF05U, "local common symbols") \ -_ELF_DEFINE_SHN(SHN_MIPS_LUNDEFINED, 0xFF06U, \ - "local undefined symbols") \ -_ELF_DEFINE_SHN(SHN_HIPROC, 0xFF1FU, \ - "end of processor-specific range") \ -_ELF_DEFINE_SHN(SHN_LOOS, 0xFF20U, \ - "start of OS-specific range") \ -_ELF_DEFINE_SHN(SHN_SUNW_IGNORE, 0xFF3FU, "used by dtrace") \ -_ELF_DEFINE_SHN(SHN_HIOS, 0xFF3FU, \ - "end of OS-specific range") \ -_ELF_DEFINE_SHN(SHN_ABS, 0xFFF1U, "absolute references") \ -_ELF_DEFINE_SHN(SHN_COMMON, 0xFFF2U, "references to COMMON areas") \ -_ELF_DEFINE_SHN(SHN_XINDEX, 0xFFFFU, "extended index") \ -_ELF_DEFINE_SHN(SHN_HIRESERVE, 0xFFFFU, "end of reserved area") - -#undef _ELF_DEFINE_SHN -#define _ELF_DEFINE_SHN(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_SECTION_INDICES() - SHN__LAST__ -}; - -/* - * Section types. - */ - -#define _ELF_DEFINE_SECTION_TYPES() \ -_ELF_DEFINE_SHT(SHT_NULL, 0, "inactive header") \ -_ELF_DEFINE_SHT(SHT_PROGBITS, 1, "program defined information") \ -_ELF_DEFINE_SHT(SHT_SYMTAB, 2, "symbol table") \ -_ELF_DEFINE_SHT(SHT_STRTAB, 3, "string table") \ -_ELF_DEFINE_SHT(SHT_RELA, 4, \ - "relocation entries with addends") \ -_ELF_DEFINE_SHT(SHT_HASH, 5, "symbol hash table") \ -_ELF_DEFINE_SHT(SHT_DYNAMIC, 6, \ - "information for dynamic linking") \ -_ELF_DEFINE_SHT(SHT_NOTE, 7, "additional notes") \ -_ELF_DEFINE_SHT(SHT_NOBITS, 8, "section occupying no space") \ -_ELF_DEFINE_SHT(SHT_REL, 9, \ - "relocation entries without addends") \ -_ELF_DEFINE_SHT(SHT_SHLIB, 10, "reserved") \ -_ELF_DEFINE_SHT(SHT_DYNSYM, 11, "symbol table") \ -_ELF_DEFINE_SHT(SHT_INIT_ARRAY, 14, \ - "pointers to initialization functions") \ -_ELF_DEFINE_SHT(SHT_FINI_ARRAY, 15, \ - "pointers to termination functions") \ -_ELF_DEFINE_SHT(SHT_PREINIT_ARRAY, 16, \ - "pointers to functions called before initialization") \ -_ELF_DEFINE_SHT(SHT_GROUP, 17, "defines a section group") \ -_ELF_DEFINE_SHT(SHT_SYMTAB_SHNDX, 18, \ - "used for extended section numbering") \ -_ELF_DEFINE_SHT(SHT_LOOS, 0x60000000UL, \ - "start of OS-specific range") \ -_ELF_DEFINE_SHT(SHT_SUNW_dof, 0x6FFFFFF4UL, \ - "used by dtrace") \ -_ELF_DEFINE_SHT(SHT_SUNW_cap, 0x6FFFFFF5UL, \ - "capability requirements") \ -_ELF_DEFINE_SHT(SHT_GNU_ATTRIBUTES, 0x6FFFFFF5UL, \ - "object attributes") \ -_ELF_DEFINE_SHT(SHT_SUNW_SIGNATURE, 0x6FFFFFF6UL, \ - "module verification signature") \ -_ELF_DEFINE_SHT(SHT_GNU_HASH, 0x6FFFFFF6UL, \ - "GNU Hash sections") \ -_ELF_DEFINE_SHT(SHT_GNU_LIBLIST, 0x6FFFFFF7UL, \ - "List of libraries to be prelinked") \ -_ELF_DEFINE_SHT(SHT_SUNW_ANNOTATE, 0x6FFFFFF7UL, \ - "special section where unresolved references are allowed") \ -_ELF_DEFINE_SHT(SHT_SUNW_DEBUGSTR, 0x6FFFFFF8UL, \ - "debugging information") \ -_ELF_DEFINE_SHT(SHT_CHECKSUM, 0x6FFFFFF8UL, \ - "checksum for dynamic shared objects") \ -_ELF_DEFINE_SHT(SHT_SUNW_DEBUG, 0x6FFFFFF9UL, \ - "debugging information") \ -_ELF_DEFINE_SHT(SHT_SUNW_move, 0x6FFFFFFAUL, \ - "information to handle partially initialized symbols") \ -_ELF_DEFINE_SHT(SHT_SUNW_COMDAT, 0x6FFFFFFBUL, \ - "section supporting merging of multiple copies of data") \ -_ELF_DEFINE_SHT(SHT_SUNW_syminfo, 0x6FFFFFFCUL, \ - "additional symbol information") \ -_ELF_DEFINE_SHT(SHT_SUNW_verdef, 0x6FFFFFFDUL, \ - "symbol versioning information") \ -_ELF_DEFINE_SHT(SHT_SUNW_verneed, 0x6FFFFFFEUL, \ - "symbol versioning requirements") \ -_ELF_DEFINE_SHT(SHT_SUNW_versym, 0x6FFFFFFFUL, \ - "symbol versioning table") \ -_ELF_DEFINE_SHT(SHT_HIOS, 0x6FFFFFFFUL, \ - "end of OS-specific range") \ -_ELF_DEFINE_SHT(SHT_LOPROC, 0x70000000UL, \ - "start of processor-specific range") \ -_ELF_DEFINE_SHT(SHT_ARM_EXIDX, 0x70000001UL, \ - "exception index table") \ -_ELF_DEFINE_SHT(SHT_ARM_PREEMPTMAP, 0x70000002UL, \ - "BPABI DLL dynamic linking preemption map") \ -_ELF_DEFINE_SHT(SHT_ARM_ATTRIBUTES, 0x70000003UL, \ - "object file compatibility attributes") \ -_ELF_DEFINE_SHT(SHT_ARM_DEBUGOVERLAY, 0x70000004UL, \ - "overlay debug information") \ -_ELF_DEFINE_SHT(SHT_ARM_OVERLAYSECTION, 0x70000005UL, \ - "overlay debug information") \ -_ELF_DEFINE_SHT(SHT_MIPS_LIBLIST, 0x70000000UL, \ - "DSO library information used in link") \ -_ELF_DEFINE_SHT(SHT_MIPS_MSYM, 0x70000001UL, \ - "MIPS symbol table extension") \ -_ELF_DEFINE_SHT(SHT_MIPS_CONFLICT, 0x70000002UL, \ - "symbol conflicting with DSO-defined symbols ") \ -_ELF_DEFINE_SHT(SHT_MIPS_GPTAB, 0x70000003UL, \ - "global pointer table") \ -_ELF_DEFINE_SHT(SHT_MIPS_UCODE, 0x70000004UL, \ - "reserved") \ -_ELF_DEFINE_SHT(SHT_MIPS_DEBUG, 0x70000005UL, \ - "reserved (obsolete debug information)") \ -_ELF_DEFINE_SHT(SHT_MIPS_REGINFO, 0x70000006UL, \ - "register usage information") \ -_ELF_DEFINE_SHT(SHT_MIPS_PACKAGE, 0x70000007UL, \ - "OSF reserved") \ -_ELF_DEFINE_SHT(SHT_MIPS_PACKSYM, 0x70000008UL, \ - "OSF reserved") \ -_ELF_DEFINE_SHT(SHT_MIPS_RELD, 0x70000009UL, \ - "dynamic relocation") \ -_ELF_DEFINE_SHT(SHT_MIPS_IFACE, 0x7000000BUL, \ - "subprogram interface information") \ -_ELF_DEFINE_SHT(SHT_MIPS_CONTENT, 0x7000000CUL, \ - "section content classification") \ -_ELF_DEFINE_SHT(SHT_MIPS_OPTIONS, 0x7000000DUL, \ - "general options") \ -_ELF_DEFINE_SHT(SHT_MIPS_DELTASYM, 0x7000001BUL, \ - "Delta C++: symbol table") \ -_ELF_DEFINE_SHT(SHT_MIPS_DELTAINST, 0x7000001CUL, \ - "Delta C++: instance table") \ -_ELF_DEFINE_SHT(SHT_MIPS_DELTACLASS, 0x7000001DUL, \ - "Delta C++: class table") \ -_ELF_DEFINE_SHT(SHT_MIPS_DWARF, 0x7000001EUL, \ - "DWARF debug information") \ -_ELF_DEFINE_SHT(SHT_MIPS_DELTADECL, 0x7000001FUL, \ - "Delta C++: declarations") \ -_ELF_DEFINE_SHT(SHT_MIPS_SYMBOL_LIB, 0x70000020UL, \ - "symbol-to-library mapping") \ -_ELF_DEFINE_SHT(SHT_MIPS_EVENTS, 0x70000021UL, \ - "event locations") \ -_ELF_DEFINE_SHT(SHT_MIPS_TRANSLATE, 0x70000022UL, \ - "???") \ -_ELF_DEFINE_SHT(SHT_MIPS_PIXIE, 0x70000023UL, \ - "special pixie sections") \ -_ELF_DEFINE_SHT(SHT_MIPS_XLATE, 0x70000024UL, \ - "address translation table") \ -_ELF_DEFINE_SHT(SHT_MIPS_XLATE_DEBUG, 0x70000025UL, \ - "SGI internal address translation table") \ -_ELF_DEFINE_SHT(SHT_MIPS_WHIRL, 0x70000026UL, \ - "intermediate code") \ -_ELF_DEFINE_SHT(SHT_MIPS_EH_REGION, 0x70000027UL, \ - "C++ exception handling region info") \ -_ELF_DEFINE_SHT(SHT_MIPS_XLATE_OLD, 0x70000028UL, \ - "obsolete") \ -_ELF_DEFINE_SHT(SHT_MIPS_PDR_EXCEPTION, 0x70000029UL, \ - "runtime procedure descriptor table exception information") \ -_ELF_DEFINE_SHT(SHT_MIPS_ABIFLAGS, 0x7000002AUL, \ - "ABI flags") \ -_ELF_DEFINE_SHT(SHT_SPARC_GOTDATA, 0x70000000UL, \ - "SPARC-specific data") \ -_ELF_DEFINE_SHT(SHT_AMD64_UNWIND, 0x70000001UL, \ - "unwind tables for the AMD64") \ -_ELF_DEFINE_SHT(SHT_ORDERED, 0x7FFFFFFFUL, \ - "sort entries in the section") \ -_ELF_DEFINE_SHT(SHT_HIPROC, 0x7FFFFFFFUL, \ - "end of processor-specific range") \ -_ELF_DEFINE_SHT(SHT_LOUSER, 0x80000000UL, \ - "start of application-specific range") \ -_ELF_DEFINE_SHT(SHT_HIUSER, 0xFFFFFFFFUL, \ - "end of application-specific range") - -#undef _ELF_DEFINE_SHT -#define _ELF_DEFINE_SHT(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_SECTION_TYPES() - SHT__LAST__ = SHT_HIUSER -}; - -/* Aliases for section types. */ -#define SHT_GNU_verdef SHT_SUNW_verdef -#define SHT_GNU_verneed SHT_SUNW_verneed -#define SHT_GNU_versym SHT_SUNW_versym - -/* - * Symbol binding information. - */ - -#define _ELF_DEFINE_SYMBOL_BINDING() \ -_ELF_DEFINE_STB(STB_LOCAL, 0, \ - "not visible outside defining object file") \ -_ELF_DEFINE_STB(STB_GLOBAL, 1, \ - "visible across all object files being combined") \ -_ELF_DEFINE_STB(STB_WEAK, 2, \ - "visible across all object files but with low precedence") \ -_ELF_DEFINE_STB(STB_LOOS, 10, "start of OS-specific range") \ -_ELF_DEFINE_STB(STB_GNU_UNIQUE, 10, "unique symbol (GNU)") \ -_ELF_DEFINE_STB(STB_HIOS, 12, "end of OS-specific range") \ -_ELF_DEFINE_STB(STB_LOPROC, 13, \ - "start of processor-specific range") \ -_ELF_DEFINE_STB(STB_HIPROC, 15, \ - "end of processor-specific range") - -#undef _ELF_DEFINE_STB -#define _ELF_DEFINE_STB(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_SYMBOL_BINDING() - STB__LAST__ -}; - -/* - * Symbol types - */ - -#define _ELF_DEFINE_SYMBOL_TYPES() \ -_ELF_DEFINE_STT(STT_NOTYPE, 0, "unspecified type") \ -_ELF_DEFINE_STT(STT_OBJECT, 1, "data object") \ -_ELF_DEFINE_STT(STT_FUNC, 2, "executable code") \ -_ELF_DEFINE_STT(STT_SECTION, 3, "section") \ -_ELF_DEFINE_STT(STT_FILE, 4, "source file") \ -_ELF_DEFINE_STT(STT_COMMON, 5, "uninitialized common block") \ -_ELF_DEFINE_STT(STT_TLS, 6, "thread local storage") \ -_ELF_DEFINE_STT(STT_LOOS, 10, "start of OS-specific types") \ -_ELF_DEFINE_STT(STT_HIOS, 12, "end of OS-specific types") \ -_ELF_DEFINE_STT(STT_LOPROC, 13, \ - "start of processor-specific types") \ -_ELF_DEFINE_STT(STT_ARM_TFUNC, 13, "Thumb function (GNU)") \ -_ELF_DEFINE_STT(STT_ARM_16BIT, 15, "Thumb label (GNU)") \ -_ELF_DEFINE_STT(STT_SPARC_REGISTER, 13, "SPARC register information") \ -_ELF_DEFINE_STT(STT_HIPROC, 15, \ - "end of processor-specific types") - -#undef _ELF_DEFINE_STT -#define _ELF_DEFINE_STT(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_SYMBOL_TYPES() - STT__LAST__ -}; - -/* - * Symbol binding. - */ - -#define _ELF_DEFINE_SYMBOL_BINDING_KINDS() \ -_ELF_DEFINE_SYB(SYMINFO_BT_SELF, 0xFFFFU, \ - "bound to self") \ -_ELF_DEFINE_SYB(SYMINFO_BT_PARENT, 0xFFFEU, \ - "bound to parent") \ -_ELF_DEFINE_SYB(SYMINFO_BT_NONE, 0xFFFDU, \ - "no special binding") - -#undef _ELF_DEFINE_SYB -#define _ELF_DEFINE_SYB(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_SYMBOL_BINDING_KINDS() - SYMINFO__LAST__ -}; - -/* - * Symbol visibility. - */ - -#define _ELF_DEFINE_SYMBOL_VISIBILITY() \ -_ELF_DEFINE_STV(STV_DEFAULT, 0, \ - "as specified by symbol type") \ -_ELF_DEFINE_STV(STV_INTERNAL, 1, \ - "as defined by processor semantics") \ -_ELF_DEFINE_STV(STV_HIDDEN, 2, \ - "hidden from other components") \ -_ELF_DEFINE_STV(STV_PROTECTED, 3, \ - "local references are not preemptable") - -#undef _ELF_DEFINE_STV -#define _ELF_DEFINE_STV(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_SYMBOL_VISIBILITY() - STV__LAST__ -}; - -/* - * Symbol flags. - */ -#define _ELF_DEFINE_SYMBOL_FLAGS() \ -_ELF_DEFINE_SYF(SYMINFO_FLG_DIRECT, 0x01, \ - "directly assocated reference") \ -_ELF_DEFINE_SYF(SYMINFO_FLG_COPY, 0x04, \ - "definition by copy-relocation") \ -_ELF_DEFINE_SYF(SYMINFO_FLG_LAZYLOAD, 0x08, \ - "object should be lazily loaded") \ -_ELF_DEFINE_SYF(SYMINFO_FLG_DIRECTBIND, 0x10, \ - "reference should be directly bound") \ -_ELF_DEFINE_SYF(SYMINFO_FLG_NOEXTDIRECT, 0x20, \ - "external references not allowed to bind to definition") - -#undef _ELF_DEFINE_SYF -#define _ELF_DEFINE_SYF(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_SYMBOL_FLAGS() - SYMINFO_FLG__LAST__ -}; - -/* - * Version dependencies. - */ -#define _ELF_DEFINE_VERSIONING_DEPENDENCIES() \ -_ELF_DEFINE_VERD(VER_NDX_LOCAL, 0, "local scope") \ -_ELF_DEFINE_VERD(VER_NDX_GLOBAL, 1, "global scope") -#undef _ELF_DEFINE_VERD -#define _ELF_DEFINE_VERD(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_VERSIONING_DEPENDENCIES() - VER_NDX__LAST__ -}; - -/* - * Version flags. - */ -#define _ELF_DEFINE_VERSIONING_FLAGS() \ -_ELF_DEFINE_VERF(VER_FLG_BASE, 0x1, "file version") \ -_ELF_DEFINE_VERF(VER_FLG_WEAK, 0x2, "weak version") -#undef _ELF_DEFINE_VERF -#define _ELF_DEFINE_VERF(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_VERSIONING_FLAGS() - VER_FLG__LAST__ -}; - -/* - * Version needs - */ -#define _ELF_DEFINE_VERSIONING_NEEDS() \ -_ELF_DEFINE_VRN(VER_NEED_NONE, 0, "invalid version") \ -_ELF_DEFINE_VRN(VER_NEED_CURRENT, 1, "current version") -#undef _ELF_DEFINE_VRN -#define _ELF_DEFINE_VRN(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_VERSIONING_NEEDS() - VER_NEED__LAST__ -}; - -/* - * Version numbers. - */ -#define _ELF_DEFINE_VERSIONING_NUMBERS() \ -_ELF_DEFINE_VRNU(VER_DEF_NONE, 0, "invalid version") \ -_ELF_DEFINE_VRNU(VER_DEF_CURRENT, 1, "current version") -#undef _ELF_DEFINE_VRNU -#define _ELF_DEFINE_VRNU(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_VERSIONING_NUMBERS() - VER_DEF__LAST__ -}; - -/** - ** Relocation types. - **/ - -#define _ELF_DEFINE_386_RELOCATIONS() \ -_ELF_DEFINE_RELOC(R_386_NONE, 0) \ -_ELF_DEFINE_RELOC(R_386_32, 1) \ -_ELF_DEFINE_RELOC(R_386_PC32, 2) \ -_ELF_DEFINE_RELOC(R_386_GOT32, 3) \ -_ELF_DEFINE_RELOC(R_386_PLT32, 4) \ -_ELF_DEFINE_RELOC(R_386_COPY, 5) \ -_ELF_DEFINE_RELOC(R_386_GLOB_DAT, 6) \ -_ELF_DEFINE_RELOC(R_386_JUMP_SLOT, 7) \ -_ELF_DEFINE_RELOC(R_386_RELATIVE, 8) \ -_ELF_DEFINE_RELOC(R_386_GOTOFF, 9) \ -_ELF_DEFINE_RELOC(R_386_GOTPC, 10) \ -_ELF_DEFINE_RELOC(R_386_32PLT, 11) \ -_ELF_DEFINE_RELOC(R_386_16, 20) \ -_ELF_DEFINE_RELOC(R_386_PC16, 21) \ -_ELF_DEFINE_RELOC(R_386_8, 22) \ -_ELF_DEFINE_RELOC(R_386_PC8, 23) - -/* - */ -#define _ELF_DEFINE_AARCH64_RELOCATIONS() \ -_ELF_DEFINE_RELOC(R_AARCH64_ABS64, 257) \ -_ELF_DEFINE_RELOC(R_AARCH64_ABS32, 258) \ - -/* - * These are the symbols used in the Sun ``Linkers and Loaders - * Guide'', Document No: 817-1984-17. See the X86_64 relocations list - * below for the spellings used in the ELF specification. - */ -#define _ELF_DEFINE_AMD64_RELOCATIONS() \ -_ELF_DEFINE_RELOC(R_AMD64_NONE, 0) \ -_ELF_DEFINE_RELOC(R_AMD64_64, 1) \ -_ELF_DEFINE_RELOC(R_AMD64_PC32, 2) \ -_ELF_DEFINE_RELOC(R_AMD64_GOT32, 3) \ -_ELF_DEFINE_RELOC(R_AMD64_PLT32, 4) \ -_ELF_DEFINE_RELOC(R_AMD64_COPY, 5) \ -_ELF_DEFINE_RELOC(R_AMD64_GLOB_DAT, 6) \ -_ELF_DEFINE_RELOC(R_AMD64_JUMP_SLOT, 7) \ -_ELF_DEFINE_RELOC(R_AMD64_RELATIVE, 8) \ -_ELF_DEFINE_RELOC(R_AMD64_GOTPCREL, 9) \ -_ELF_DEFINE_RELOC(R_AMD64_32, 10) \ -_ELF_DEFINE_RELOC(R_AMD64_32S, 11) \ -_ELF_DEFINE_RELOC(R_AMD64_16, 12) \ -_ELF_DEFINE_RELOC(R_AMD64_PC16, 13) \ -_ELF_DEFINE_RELOC(R_AMD64_8, 14) \ -_ELF_DEFINE_RELOC(R_AMD64_PC8, 15) \ -_ELF_DEFINE_RELOC(R_AMD64_PC64, 24) \ -_ELF_DEFINE_RELOC(R_AMD64_GOTOFF64, 25) \ -_ELF_DEFINE_RELOC(R_AMD64_GOTPC32, 26) - -/* - * Relocation definitions from the ARM ELF ABI, version "ARM IHI - * 0044E" released on 30th November 2012. - */ -#define _ELF_DEFINE_ARM_RELOCATIONS() \ -_ELF_DEFINE_RELOC(R_ARM_NONE, 0) \ -_ELF_DEFINE_RELOC(R_ARM_PC24, 1) \ -_ELF_DEFINE_RELOC(R_ARM_ABS32, 2) \ -_ELF_DEFINE_RELOC(R_ARM_REL32, 3) \ -_ELF_DEFINE_RELOC(R_ARM_LDR_PC_G0, 4) \ -_ELF_DEFINE_RELOC(R_ARM_ABS16, 5) \ -_ELF_DEFINE_RELOC(R_ARM_ABS12, 6) \ -_ELF_DEFINE_RELOC(R_ARM_THM_ABS5, 7) \ -_ELF_DEFINE_RELOC(R_ARM_ABS8, 8) \ -_ELF_DEFINE_RELOC(R_ARM_SBREL32, 9) \ -_ELF_DEFINE_RELOC(R_ARM_THM_CALL, 10) \ -_ELF_DEFINE_RELOC(R_ARM_THM_PC8, 11) \ -_ELF_DEFINE_RELOC(R_ARM_BREL_ADJ, 12) \ -_ELF_DEFINE_RELOC(R_ARM_SWI24, 13) \ -_ELF_DEFINE_RELOC(R_ARM_TLS_DESC, 13) \ -_ELF_DEFINE_RELOC(R_ARM_THM_SWI8, 14) \ -_ELF_DEFINE_RELOC(R_ARM_XPC25, 15) \ -_ELF_DEFINE_RELOC(R_ARM_THM_XPC22, 16) \ -_ELF_DEFINE_RELOC(R_ARM_TLS_DTPMOD32, 17) \ -_ELF_DEFINE_RELOC(R_ARM_TLS_DTPOFF32, 18) \ -_ELF_DEFINE_RELOC(R_ARM_TLS_TPOFF32, 19) \ -_ELF_DEFINE_RELOC(R_ARM_COPY, 20) \ -_ELF_DEFINE_RELOC(R_ARM_GLOB_DAT, 21) \ -_ELF_DEFINE_RELOC(R_ARM_JUMP_SLOT, 22) \ -_ELF_DEFINE_RELOC(R_ARM_RELATIVE, 23) \ -_ELF_DEFINE_RELOC(R_ARM_GOTOFF32, 24) \ -_ELF_DEFINE_RELOC(R_ARM_BASE_PREL, 25) \ -_ELF_DEFINE_RELOC(R_ARM_GOT_BREL, 26) \ -_ELF_DEFINE_RELOC(R_ARM_PLT32, 27) \ -_ELF_DEFINE_RELOC(R_ARM_CALL, 28) \ -_ELF_DEFINE_RELOC(R_ARM_JUMP24, 29) \ -_ELF_DEFINE_RELOC(R_ARM_THM_JUMP24, 30) \ -_ELF_DEFINE_RELOC(R_ARM_BASE_ABS, 31) \ -_ELF_DEFINE_RELOC(R_ARM_ALU_PCREL_7_0, 32) \ -_ELF_DEFINE_RELOC(R_ARM_ALU_PCREL_15_8, 33) \ -_ELF_DEFINE_RELOC(R_ARM_ALU_PCREL_23_15, 34) \ -_ELF_DEFINE_RELOC(R_ARM_LDR_SBREL_11_0_NC, 35) \ -_ELF_DEFINE_RELOC(R_ARM_ALU_SBREL_19_12_NC, 36) \ -_ELF_DEFINE_RELOC(R_ARM_ALU_SBREL_27_20_CK, 37) \ -_ELF_DEFINE_RELOC(R_ARM_TARGET1, 38) \ -_ELF_DEFINE_RELOC(R_ARM_SBREL31, 39) \ -_ELF_DEFINE_RELOC(R_ARM_V4BX, 40) \ -_ELF_DEFINE_RELOC(R_ARM_TARGET2, 41) \ -_ELF_DEFINE_RELOC(R_ARM_PREL31, 42) \ -_ELF_DEFINE_RELOC(R_ARM_MOVW_ABS_NC, 43) \ -_ELF_DEFINE_RELOC(R_ARM_MOVT_ABS, 44) \ -_ELF_DEFINE_RELOC(R_ARM_MOVW_PREL_NC, 45) \ -_ELF_DEFINE_RELOC(R_ARM_MOVT_PREL, 46) \ -_ELF_DEFINE_RELOC(R_ARM_THM_MOVW_ABS_NC, 47) \ -_ELF_DEFINE_RELOC(R_ARM_THM_MOVT_ABS, 48) \ -_ELF_DEFINE_RELOC(R_ARM_THM_MOVW_PREL_NC, 49) \ -_ELF_DEFINE_RELOC(R_ARM_THM_MOVT_PREL, 50) \ -_ELF_DEFINE_RELOC(R_ARM_THM_JUMP19, 51) \ -_ELF_DEFINE_RELOC(R_ARM_THM_JUMP6, 52) \ -_ELF_DEFINE_RELOC(R_ARM_THM_ALU_PREL_11_0, 53) \ -_ELF_DEFINE_RELOC(R_ARM_THM_PC12, 54) \ -_ELF_DEFINE_RELOC(R_ARM_ABS32_NOI, 55) \ -_ELF_DEFINE_RELOC(R_ARM_REL32_NOI, 56) \ -_ELF_DEFINE_RELOC(R_ARM_ALU_PC_G0_NC, 57) \ -_ELF_DEFINE_RELOC(R_ARM_ALU_PC_G0, 58) \ -_ELF_DEFINE_RELOC(R_ARM_ALU_PC_G1_NC, 59) \ -_ELF_DEFINE_RELOC(R_ARM_ALU_PC_G1, 60) \ -_ELF_DEFINE_RELOC(R_ARM_ALU_PC_G2, 61) \ -_ELF_DEFINE_RELOC(R_ARM_LDR_PC_G1, 62) \ -_ELF_DEFINE_RELOC(R_ARM_LDR_PC_G2, 63) \ -_ELF_DEFINE_RELOC(R_ARM_LDRS_PC_G0, 64) \ -_ELF_DEFINE_RELOC(R_ARM_LDRS_PC_G1, 65) \ -_ELF_DEFINE_RELOC(R_ARM_LDRS_PC_G2, 66) \ -_ELF_DEFINE_RELOC(R_ARM_LDC_PC_G0, 67) \ -_ELF_DEFINE_RELOC(R_ARM_LDC_PC_G1, 68) \ -_ELF_DEFINE_RELOC(R_ARM_LDC_PC_G2, 69) \ -_ELF_DEFINE_RELOC(R_ARM_ALU_SB_G0_NC, 70) \ -_ELF_DEFINE_RELOC(R_ARM_ALU_SB_G0, 71) \ -_ELF_DEFINE_RELOC(R_ARM_ALU_SB_G1_NC, 72) \ -_ELF_DEFINE_RELOC(R_ARM_ALU_SB_G1, 73) \ -_ELF_DEFINE_RELOC(R_ARM_ALU_SB_G2, 74) \ -_ELF_DEFINE_RELOC(R_ARM_LDR_SB_G0, 75) \ -_ELF_DEFINE_RELOC(R_ARM_LDR_SB_G1, 76) \ -_ELF_DEFINE_RELOC(R_ARM_LDR_SB_G2, 77) \ -_ELF_DEFINE_RELOC(R_ARM_LDRS_SB_G0, 78) \ -_ELF_DEFINE_RELOC(R_ARM_LDRS_SB_G1, 79) \ -_ELF_DEFINE_RELOC(R_ARM_LDRS_SB_G2, 80) \ -_ELF_DEFINE_RELOC(R_ARM_LDC_SB_G0, 81) \ -_ELF_DEFINE_RELOC(R_ARM_LDC_SB_G1, 82) \ -_ELF_DEFINE_RELOC(R_ARM_LDC_SB_G2, 83) \ -_ELF_DEFINE_RELOC(R_ARM_MOVW_BREL_NC, 84) \ -_ELF_DEFINE_RELOC(R_ARM_MOVT_BREL, 85) \ -_ELF_DEFINE_RELOC(R_ARM_MOVW_BREL, 86) \ -_ELF_DEFINE_RELOC(R_ARM_THM_MOVW_BREL_NC, 87) \ -_ELF_DEFINE_RELOC(R_ARM_THM_MOVT_BREL, 88) \ -_ELF_DEFINE_RELOC(R_ARM_THM_MOVW_BREL, 89) \ -_ELF_DEFINE_RELOC(R_ARM_TLS_GOTDESC, 90) \ -_ELF_DEFINE_RELOC(R_ARM_TLS_CALL, 91) \ -_ELF_DEFINE_RELOC(R_ARM_TLS_DESCSEQ, 92) \ -_ELF_DEFINE_RELOC(R_ARM_THM_TLS_CALL, 93) \ -_ELF_DEFINE_RELOC(R_ARM_PLT32_ABS, 94) \ -_ELF_DEFINE_RELOC(R_ARM_GOT_ABS, 95) \ -_ELF_DEFINE_RELOC(R_ARM_GOT_PREL, 96) \ -_ELF_DEFINE_RELOC(R_ARM_GOT_BREL12, 97) \ -_ELF_DEFINE_RELOC(R_ARM_GOTOFF12, 98) \ -_ELF_DEFINE_RELOC(R_ARM_GOTRELAX, 99) \ -_ELF_DEFINE_RELOC(R_ARM_GNU_VTENTRY, 100) \ -_ELF_DEFINE_RELOC(R_ARM_GNU_VTINHERIT, 101) \ -_ELF_DEFINE_RELOC(R_ARM_THM_JUMP11, 102) \ -_ELF_DEFINE_RELOC(R_ARM_THM_JUMP8, 103) \ -_ELF_DEFINE_RELOC(R_ARM_TLS_GD32, 104) \ -_ELF_DEFINE_RELOC(R_ARM_TLS_LDM32, 105) \ -_ELF_DEFINE_RELOC(R_ARM_TLS_LDO32, 106) \ -_ELF_DEFINE_RELOC(R_ARM_TLS_IE32, 107) \ -_ELF_DEFINE_RELOC(R_ARM_TLS_LE32, 108) \ -_ELF_DEFINE_RELOC(R_ARM_TLS_LDO12, 109) \ -_ELF_DEFINE_RELOC(R_ARM_TLS_LE12, 110) \ -_ELF_DEFINE_RELOC(R_ARM_TLS_IE12GP, 111) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_0, 112) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_1, 113) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_2, 114) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_3, 115) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_4, 116) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_5, 117) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_6, 118) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_7, 119) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_8, 120) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_9, 121) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_10, 122) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_11, 123) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_12, 124) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_13, 125) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_14, 126) \ -_ELF_DEFINE_RELOC(R_ARM_PRIVATE_15, 127) \ -_ELF_DEFINE_RELOC(R_ARM_ME_TOO, 128) \ -_ELF_DEFINE_RELOC(R_ARM_THM_TLS_DESCSEQ16, 129) \ -_ELF_DEFINE_RELOC(R_ARM_THM_TLS_DESCSEQ32, 130) \ -_ELF_DEFINE_RELOC(R_ARM_THM_GOT_BREL12, 131) \ -_ELF_DEFINE_RELOC(R_ARM_IRELATIVE, 140) - -#define _ELF_DEFINE_IA64_RELOCATIONS() \ -_ELF_DEFINE_RELOC(R_IA_64_NONE, 0) \ -_ELF_DEFINE_RELOC(R_IA_64_IMM14, 0x21) \ -_ELF_DEFINE_RELOC(R_IA_64_IMM22, 0x22) \ -_ELF_DEFINE_RELOC(R_IA_64_IMM64, 0x23) \ -_ELF_DEFINE_RELOC(R_IA_64_DIR32MSB, 0x24) \ -_ELF_DEFINE_RELOC(R_IA_64_DIR32LSB, 0x25) \ -_ELF_DEFINE_RELOC(R_IA_64_DIR64MSB, 0x26) \ -_ELF_DEFINE_RELOC(R_IA_64_DIR64LSB, 0x27) \ -_ELF_DEFINE_RELOC(R_IA_64_GPREL22, 0x2a) \ -_ELF_DEFINE_RELOC(R_IA_64_GPREL64I, 0x2b) \ -_ELF_DEFINE_RELOC(R_IA_64_GPREL32MSB, 0x2c) \ -_ELF_DEFINE_RELOC(R_IA_64_GPREL32LSB, 0x2d) \ -_ELF_DEFINE_RELOC(R_IA_64_GPREL64MSB, 0x2e) \ -_ELF_DEFINE_RELOC(R_IA_64_GPREL64LSB, 0x2f) \ -_ELF_DEFINE_RELOC(R_IA_64_LTOFF22, 0x32) \ -_ELF_DEFINE_RELOC(R_IA_64_LTOFF64I, 0x33) \ -_ELF_DEFINE_RELOC(R_IA_64_PLTOFF22, 0x3a) \ -_ELF_DEFINE_RELOC(R_IA_64_PLTOFF64I, 0x3b) \ -_ELF_DEFINE_RELOC(R_IA_64_PLTOFF64MSB, 0x3e) \ -_ELF_DEFINE_RELOC(R_IA_64_PLTOFF64LSB, 0x3f) \ -_ELF_DEFINE_RELOC(R_IA_64_FPTR64I, 0x43) \ -_ELF_DEFINE_RELOC(R_IA_64_FPTR32MSB, 0x44) \ -_ELF_DEFINE_RELOC(R_IA_64_FPTR32LSB, 0x45) \ -_ELF_DEFINE_RELOC(R_IA_64_FPTR64MSB, 0x46) \ -_ELF_DEFINE_RELOC(R_IA_64_FPTR64LSB, 0x47) \ -_ELF_DEFINE_RELOC(R_IA_64_PCREL60B, 0x48) \ -_ELF_DEFINE_RELOC(R_IA_64_PCREL21B, 0x49) \ -_ELF_DEFINE_RELOC(R_IA_64_PCREL21M, 0x4a) \ -_ELF_DEFINE_RELOC(R_IA_64_PCREL21F, 0x4b) \ -_ELF_DEFINE_RELOC(R_IA_64_PCREL32MSB, 0x4c) \ -_ELF_DEFINE_RELOC(R_IA_64_PCREL32LSB, 0x4d) \ -_ELF_DEFINE_RELOC(R_IA_64_PCREL64MSB, 0x4e) \ -_ELF_DEFINE_RELOC(R_IA_64_PCREL64LSB, 0x4f) \ -_ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR22, 0x52) \ -_ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR64I, 0x53) \ -_ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR32MSB, 0x54) \ -_ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR32LSB, 0x55) \ -_ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR64MSB, 0x56) \ -_ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR64LSB, 0x57) \ -_ELF_DEFINE_RELOC(R_IA_64_SEGREL32MSB, 0x5c) \ -_ELF_DEFINE_RELOC(R_IA_64_SEGREL32LSB, 0x5d) \ -_ELF_DEFINE_RELOC(R_IA_64_SEGREL64MSB, 0x5e) \ -_ELF_DEFINE_RELOC(R_IA_64_SEGREL64LSB, 0x5f) \ -_ELF_DEFINE_RELOC(R_IA_64_SECREL32MSB, 0x64) \ -_ELF_DEFINE_RELOC(R_IA_64_SECREL32LSB, 0x65) \ -_ELF_DEFINE_RELOC(R_IA_64_SECREL64MSB, 0x66) \ -_ELF_DEFINE_RELOC(R_IA_64_SECREL64LSB, 0x67) \ -_ELF_DEFINE_RELOC(R_IA_64_REL32MSB, 0x6c) \ -_ELF_DEFINE_RELOC(R_IA_64_REL32LSB, 0x6d) \ -_ELF_DEFINE_RELOC(R_IA_64_REL64MSB, 0x6e) \ -_ELF_DEFINE_RELOC(R_IA_64_REL64LSB, 0x6f) \ -_ELF_DEFINE_RELOC(R_IA_64_LTV32MSB, 0x74) \ -_ELF_DEFINE_RELOC(R_IA_64_LTV32LSB, 0x75) \ -_ELF_DEFINE_RELOC(R_IA_64_LTV64MSB, 0x76) \ -_ELF_DEFINE_RELOC(R_IA_64_LTV64LSB, 0x77) \ -_ELF_DEFINE_RELOC(R_IA_64_PCREL21BI, 0x79) \ -_ELF_DEFINE_RELOC(R_IA_64_PCREL22, 0x7A) \ -_ELF_DEFINE_RELOC(R_IA_64_PCREL64I, 0x7B) \ -_ELF_DEFINE_RELOC(R_IA_64_IPLTMSB, 0x80) \ -_ELF_DEFINE_RELOC(R_IA_64_IPLTLSB, 0x81) \ -_ELF_DEFINE_RELOC(R_IA_64_SUB, 0x85) \ -_ELF_DEFINE_RELOC(R_IA_64_LTOFF22X, 0x86) \ -_ELF_DEFINE_RELOC(R_IA_64_LDXMOV, 0x87) \ -_ELF_DEFINE_RELOC(R_IA_64_TPREL14, 0x91) \ -_ELF_DEFINE_RELOC(R_IA_64_TPREL22, 0x92) \ -_ELF_DEFINE_RELOC(R_IA_64_TPREL64I, 0x93) \ -_ELF_DEFINE_RELOC(R_IA_64_TPREL64MSB, 0x96) \ -_ELF_DEFINE_RELOC(R_IA_64_TPREL64LSB, 0x97) \ -_ELF_DEFINE_RELOC(R_IA_64_LTOFF_TPREL22, 0x9A) \ -_ELF_DEFINE_RELOC(R_IA_64_DTPMOD64MSB, 0xA6) \ -_ELF_DEFINE_RELOC(R_IA_64_DTPMOD64LSB, 0xA7) \ -_ELF_DEFINE_RELOC(R_IA_64_LTOFF_DTPMOD22, 0xAA) \ -_ELF_DEFINE_RELOC(R_IA_64_DTPREL14, 0xB1) \ -_ELF_DEFINE_RELOC(R_IA_64_DTPREL22, 0xB2) \ -_ELF_DEFINE_RELOC(R_IA_64_DTPREL64I, 0xB3) \ -_ELF_DEFINE_RELOC(R_IA_64_DTPREL32MSB, 0xB4) \ -_ELF_DEFINE_RELOC(R_IA_64_DTPREL32LSB, 0xB5) \ -_ELF_DEFINE_RELOC(R_IA_64_DTPREL64MSB, 0xB6) \ -_ELF_DEFINE_RELOC(R_IA_64_DTPREL64LSB, 0xB7) \ -_ELF_DEFINE_RELOC(R_IA_64_LTOFF_DTPREL22, 0xBA) - -#define _ELF_DEFINE_MIPS_RELOCATIONS() \ -_ELF_DEFINE_RELOC(R_MIPS_NONE, 0) \ -_ELF_DEFINE_RELOC(R_MIPS_16, 1) \ -_ELF_DEFINE_RELOC(R_MIPS_32, 2) \ -_ELF_DEFINE_RELOC(R_MIPS_REL32, 3) \ -_ELF_DEFINE_RELOC(R_MIPS_26, 4) \ -_ELF_DEFINE_RELOC(R_MIPS_HI16, 5) \ -_ELF_DEFINE_RELOC(R_MIPS_LO16, 6) \ -_ELF_DEFINE_RELOC(R_MIPS_GPREL16, 7) \ -_ELF_DEFINE_RELOC(R_MIPS_LITERAL, 8) \ -_ELF_DEFINE_RELOC(R_MIPS_GOT16, 9) \ -_ELF_DEFINE_RELOC(R_MIPS_PC16, 10) \ -_ELF_DEFINE_RELOC(R_MIPS_CALL16, 11) \ -_ELF_DEFINE_RELOC(R_MIPS_GPREL32, 12) \ -_ELF_DEFINE_RELOC(R_MIPS_64, 18) \ -_ELF_DEFINE_RELOC(R_MIPS_GOTHI16, 21) \ -_ELF_DEFINE_RELOC(R_MIPS_GOTLO16, 22) \ -_ELF_DEFINE_RELOC(R_MIPS_CALLHI16, 30) \ -_ELF_DEFINE_RELOC(R_MIPS_CALLLO16, 31) \ -_ELF_DEFINE_RELOC(R_MIPS_TLS_DTPMOD32, 38) \ -_ELF_DEFINE_RELOC(R_MIPS_TLS_DTPREL32, 39) \ -_ELF_DEFINE_RELOC(R_MIPS_TLS_DTPMOD64, 40) \ -_ELF_DEFINE_RELOC(R_MIPS_TLS_DTPREL64, 41) \ -_ELF_DEFINE_RELOC(R_MIPS_TLS_GD, 42) \ -_ELF_DEFINE_RELOC(R_MIPS_TLS_LDM, 43) \ -_ELF_DEFINE_RELOC(R_MIPS_TLS_DTPREL_HI16, 44) \ -_ELF_DEFINE_RELOC(R_MIPS_TLS_DTPREL_LO16, 45) \ -_ELF_DEFINE_RELOC(R_MIPS_TLS_GOTTPREL, 46) \ -_ELF_DEFINE_RELOC(R_MIPS_TLS_TPREL32, 47) \ -_ELF_DEFINE_RELOC(R_MIPS_TLS_TPREL64, 48) \ -_ELF_DEFINE_RELOC(R_MIPS_TLS_TPREL_HI16, 49) \ -_ELF_DEFINE_RELOC(R_MIPS_TLS_TPREL_LO16, 50) - -#define _ELF_DEFINE_PPC32_RELOCATIONS() \ -_ELF_DEFINE_RELOC(R_PPC_NONE, 0) \ -_ELF_DEFINE_RELOC(R_PPC_ADDR32, 1) \ -_ELF_DEFINE_RELOC(R_PPC_ADDR24, 2) \ -_ELF_DEFINE_RELOC(R_PPC_ADDR16, 3) \ -_ELF_DEFINE_RELOC(R_PPC_ADDR16_LO, 4) \ -_ELF_DEFINE_RELOC(R_PPC_ADDR16_HI, 5) \ -_ELF_DEFINE_RELOC(R_PPC_ADDR16_HA, 6) \ -_ELF_DEFINE_RELOC(R_PPC_ADDR14, 7) \ -_ELF_DEFINE_RELOC(R_PPC_ADDR14_BRTAKEN, 8) \ -_ELF_DEFINE_RELOC(R_PPC_ADDR14_BRNTAKEN, 9) \ -_ELF_DEFINE_RELOC(R_PPC_REL24, 10) \ -_ELF_DEFINE_RELOC(R_PPC_REL14, 11) \ -_ELF_DEFINE_RELOC(R_PPC_REL14_BRTAKEN, 12) \ -_ELF_DEFINE_RELOC(R_PPC_REL14_BRNTAKEN, 13) \ -_ELF_DEFINE_RELOC(R_PPC_GOT16, 14) \ -_ELF_DEFINE_RELOC(R_PPC_GOT16_LO, 15) \ -_ELF_DEFINE_RELOC(R_PPC_GOT16_HI, 16) \ -_ELF_DEFINE_RELOC(R_PPC_GOT16_HA, 17) \ -_ELF_DEFINE_RELOC(R_PPC_PLTREL24, 18) \ -_ELF_DEFINE_RELOC(R_PPC_COPY, 19) \ -_ELF_DEFINE_RELOC(R_PPC_GLOB_DAT, 20) \ -_ELF_DEFINE_RELOC(R_PPC_JMP_SLOT, 21) \ -_ELF_DEFINE_RELOC(R_PPC_RELATIVE, 22) \ -_ELF_DEFINE_RELOC(R_PPC_LOCAL24PC, 23) \ -_ELF_DEFINE_RELOC(R_PPC_UADDR32, 24) \ -_ELF_DEFINE_RELOC(R_PPC_UADDR16, 25) \ -_ELF_DEFINE_RELOC(R_PPC_REL32, 26) \ -_ELF_DEFINE_RELOC(R_PPC_PLT32, 27) \ -_ELF_DEFINE_RELOC(R_PPC_PLTREL32, 28) \ -_ELF_DEFINE_RELOC(R_PPC_PLT16_LO, 29) \ -_ELF_DEFINE_RELOC(R_PPC_PLT16_HI, 30) \ -_ELF_DEFINE_RELOC(R_PPC_PLT16_HA, 31) \ -_ELF_DEFINE_RELOC(R_PPC_SDAREL16, 32) \ -_ELF_DEFINE_RELOC(R_PPC_SECTOFF, 33) \ -_ELF_DEFINE_RELOC(R_PPC_SECTOFF_LO, 34) \ -_ELF_DEFINE_RELOC(R_PPC_SECTOFF_HI, 35) \ -_ELF_DEFINE_RELOC(R_PPC_SECTOFF_HA, 36) \ -_ELF_DEFINE_RELOC(R_PPC_ADDR30, 37) \ -_ELF_DEFINE_RELOC(R_PPC_TLS, 67) \ -_ELF_DEFINE_RELOC(R_PPC_DTPMOD32, 68) \ -_ELF_DEFINE_RELOC(R_PPC_TPREL16, 69) \ -_ELF_DEFINE_RELOC(R_PPC_TPREL16_LO, 70) \ -_ELF_DEFINE_RELOC(R_PPC_TPREL16_HI, 71) \ -_ELF_DEFINE_RELOC(R_PPC_TPREL16_HA, 72) \ -_ELF_DEFINE_RELOC(R_PPC_TPREL32, 73) \ -_ELF_DEFINE_RELOC(R_PPC_DTPREL16, 74) \ -_ELF_DEFINE_RELOC(R_PPC_DTPREL16_LO, 75) \ -_ELF_DEFINE_RELOC(R_PPC_DTPREL16_HI, 76) \ -_ELF_DEFINE_RELOC(R_PPC_DTPREL16_HA, 77) \ -_ELF_DEFINE_RELOC(R_PPC_DTPREL32, 78) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_TLSGD16, 79) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_TLSGD16_LO, 80) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_TLSGD16_HI, 81) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_TLSGD16_HA, 82) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_TLSLD16, 83) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_TLSLD16_LO, 84) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_TLSLD16_HI, 85) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_TLSLD16_HA, 86) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_TPREL16, 87) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_TPREL16_LO, 88) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_TPREL16_HI, 89) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_TPREL16_HA, 90) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_DTPREL16, 91) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_DTPREL16_LO, 92) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_DTPREL16_HI, 93) \ -_ELF_DEFINE_RELOC(R_PPC_GOT_DTPREL16_HA, 94) \ -_ELF_DEFINE_RELOC(R_PPC_TLSGD, 95) \ -_ELF_DEFINE_RELOC(R_PPC_TLSLD, 96) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_NADDR32, 101) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_NADDR16, 102) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_NADDR16_LO, 103) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_NADDR16_HI, 104) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_NADDR16_HA, 105) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_SDAI16, 106) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_SDA2I16, 107) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_SDA2REL, 108) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_SDA21, 109) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_MRKREF, 110) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_RELSEC16, 111) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_RELST_LO, 112) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_RELST_HI, 113) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_RELST_HA, 114) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_BIT_FLD, 115) \ -_ELF_DEFINE_RELOC(R_PPC_EMB_RELSDA, 116) \ - -#define _ELF_DEFINE_PPC64_RELOCATIONS() \ -_ELF_DEFINE_RELOC(R_PPC64_NONE, 0) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR32, 1) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR24, 2) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR16, 3) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR16_LO, 4) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR16_HI, 5) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR16_HA, 6) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR14, 7) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR14_BRTAKEN, 8) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR14_BRNTAKEN, 9) \ -_ELF_DEFINE_RELOC(R_PPC64_REL24, 10) \ -_ELF_DEFINE_RELOC(R_PPC64_REL14, 11) \ -_ELF_DEFINE_RELOC(R_PPC64_REL14_BRTAKEN, 12) \ -_ELF_DEFINE_RELOC(R_PPC64_REL14_BRNTAKEN, 13) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT16, 14) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT16_LO, 15) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT16_HI, 16) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT16_HA, 17) \ -_ELF_DEFINE_RELOC(R_PPC64_COPY, 19) \ -_ELF_DEFINE_RELOC(R_PPC64_GLOB_DAT, 20) \ -_ELF_DEFINE_RELOC(R_PPC64_JMP_SLOT, 21) \ -_ELF_DEFINE_RELOC(R_PPC64_RELATIVE, 22) \ -_ELF_DEFINE_RELOC(R_PPC64_UADDR32, 24) \ -_ELF_DEFINE_RELOC(R_PPC64_UADDR16, 25) \ -_ELF_DEFINE_RELOC(R_PPC64_REL32, 26) \ -_ELF_DEFINE_RELOC(R_PPC64_PLT32, 27) \ -_ELF_DEFINE_RELOC(R_PPC64_PLTREL32, 28) \ -_ELF_DEFINE_RELOC(R_PPC64_PLT16_LO, 29) \ -_ELF_DEFINE_RELOC(R_PPC64_PLT16_HI, 30) \ -_ELF_DEFINE_RELOC(R_PPC64_PLT16_HA, 31) \ -_ELF_DEFINE_RELOC(R_PPC64_SECTOFF, 33) \ -_ELF_DEFINE_RELOC(R_PPC64_SECTOFF_LO, 34) \ -_ELF_DEFINE_RELOC(R_PPC64_SECTOFF_HI, 35) \ -_ELF_DEFINE_RELOC(R_PPC64_SECTOFF_HA, 36) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR30, 37) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR64, 38) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR16_HIGHER, 39) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR16_HIGHERA, 40) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR16_HIGHEST, 41) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR16_HIGHESTA, 42) \ -_ELF_DEFINE_RELOC(R_PPC64_UADDR64, 43) \ -_ELF_DEFINE_RELOC(R_PPC64_REL64, 44) \ -_ELF_DEFINE_RELOC(R_PPC64_PLT64, 45) \ -_ELF_DEFINE_RELOC(R_PPC64_PLTREL64, 46) \ -_ELF_DEFINE_RELOC(R_PPC64_TOC16, 47) \ -_ELF_DEFINE_RELOC(R_PPC64_TOC16_LO, 48) \ -_ELF_DEFINE_RELOC(R_PPC64_TOC16_HI, 49) \ -_ELF_DEFINE_RELOC(R_PPC64_TOC16_HA, 50) \ -_ELF_DEFINE_RELOC(R_PPC64_TOC, 51) \ -_ELF_DEFINE_RELOC(R_PPC64_PLTGOT16, 52) \ -_ELF_DEFINE_RELOC(R_PPC64_PLTGOT16_LO, 53) \ -_ELF_DEFINE_RELOC(R_PPC64_PLTGOT16_HI, 54) \ -_ELF_DEFINE_RELOC(R_PPC64_PLTGOT16_HA, 55) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR16_DS, 56) \ -_ELF_DEFINE_RELOC(R_PPC64_ADDR16_LO_DS, 57) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT16_DS, 58) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT16_LO_DS, 59) \ -_ELF_DEFINE_RELOC(R_PPC64_PLT16_LO_DS, 60) \ -_ELF_DEFINE_RELOC(R_PPC64_SECTOFF_DS, 61) \ -_ELF_DEFINE_RELOC(R_PPC64_SECTOFF_LO_DS, 62) \ -_ELF_DEFINE_RELOC(R_PPC64_TOC16_DS, 63) \ -_ELF_DEFINE_RELOC(R_PPC64_TOC16_LO_DS, 64) \ -_ELF_DEFINE_RELOC(R_PPC64_PLTGOT16_DS, 65) \ -_ELF_DEFINE_RELOC(R_PPC64_PLTGOT16_LO_DS, 66) \ -_ELF_DEFINE_RELOC(R_PPC64_TLS, 67) \ -_ELF_DEFINE_RELOC(R_PPC64_DTPMOD64, 68) \ -_ELF_DEFINE_RELOC(R_PPC64_TPREL16, 69) \ -_ELF_DEFINE_RELOC(R_PPC64_TPREL16_LO, 60) \ -_ELF_DEFINE_RELOC(R_PPC64_TPREL16_HI, 71) \ -_ELF_DEFINE_RELOC(R_PPC64_TPREL16_HA, 72) \ -_ELF_DEFINE_RELOC(R_PPC64_TPREL64, 73) \ -_ELF_DEFINE_RELOC(R_PPC64_DTPREL16, 74) \ -_ELF_DEFINE_RELOC(R_PPC64_DTPREL16_LO, 75) \ -_ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HI, 76) \ -_ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HA, 77) \ -_ELF_DEFINE_RELOC(R_PPC64_DTPREL64, 78) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_TLSGD16, 79) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_TLSGD16_LO, 80) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_TLSGD16_HI, 81) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_TLSGD16_HA, 82) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_TLSLD16, 83) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_TLSLD16_LO, 84) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_TLSLD16_HI, 85) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_TLSLD16_HA, 86) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_TPREL16_DS, 87) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_TPREL16_LO_DS, 88) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_TPREL16_HI, 89) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_TPREL16_HA, 90) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_DTPREL16_DS, 91) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_DTPREL16_LO_DS, 92) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_DTPREL16_HI, 93) \ -_ELF_DEFINE_RELOC(R_PPC64_GOT_DTPREL16_HA, 94) \ -_ELF_DEFINE_RELOC(R_PPC64_TPREL16_DS, 95) \ -_ELF_DEFINE_RELOC(R_PPC64_TPREL16_LO_DS, 96) \ -_ELF_DEFINE_RELOC(R_PPC64_TPREL16_HIGHER, 97) \ -_ELF_DEFINE_RELOC(R_PPC64_TPREL16_HIGHERA, 98) \ -_ELF_DEFINE_RELOC(R_PPC64_TPREL16_HIGHEST, 99) \ -_ELF_DEFINE_RELOC(R_PPC64_TPREL16_HIGHESTA, 100) \ -_ELF_DEFINE_RELOC(R_PPC64_DTPREL16_DS, 101) \ -_ELF_DEFINE_RELOC(R_PPC64_DTPREL16_LO_DS, 102) \ -_ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HIGHER, 103) \ -_ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HIGHERA, 104) \ -_ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HIGHEST, 105) \ -_ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HIGHESTA, 106) \ -_ELF_DEFINE_RELOC(R_PPC64_TLSGD, 107) \ -_ELF_DEFINE_RELOC(R_PPC64_TLSLD, 108) - -#define _ELF_DEFINE_RISCV_RELOCATIONS() \ -_ELF_DEFINE_RELOC(R_RISCV_NONE, 0) \ -_ELF_DEFINE_RELOC(R_RISCV_32, 1) \ -_ELF_DEFINE_RELOC(R_RISCV_64, 2) \ -_ELF_DEFINE_RELOC(R_RISCV_RELATIVE, 3) \ -_ELF_DEFINE_RELOC(R_RISCV_COPY, 4) \ -_ELF_DEFINE_RELOC(R_RISCV_JUMP_SLOT, 5) \ -_ELF_DEFINE_RELOC(R_RISCV_TLS_DTPMOD32, 6) \ -_ELF_DEFINE_RELOC(R_RISCV_TLS_DTPMOD64, 7) \ -_ELF_DEFINE_RELOC(R_RISCV_TLS_DTPREL32, 8) \ -_ELF_DEFINE_RELOC(R_RISCV_TLS_DTPREL64, 9) \ -_ELF_DEFINE_RELOC(R_RISCV_TLS_TPREL32, 10) \ -_ELF_DEFINE_RELOC(R_RISCV_TLS_TPREL64, 11) \ -_ELF_DEFINE_RELOC(R_RISCV_BRANCH, 16) \ -_ELF_DEFINE_RELOC(R_RISCV_JAL, 17) \ -_ELF_DEFINE_RELOC(R_RISCV_CALL, 18) \ -_ELF_DEFINE_RELOC(R_RISCV_CALL_PLT, 19) \ -_ELF_DEFINE_RELOC(R_RISCV_GOT_HI20, 20) \ -_ELF_DEFINE_RELOC(R_RISCV_TLS_GOT_HI20, 21) \ -_ELF_DEFINE_RELOC(R_RISCV_TLS_GD_HI20, 22) \ -_ELF_DEFINE_RELOC(R_RISCV_PCREL_HI20, 23) \ -_ELF_DEFINE_RELOC(R_RISCV_PCREL_LO12_I, 24) \ -_ELF_DEFINE_RELOC(R_RISCV_PCREL_LO12_S, 25) \ -_ELF_DEFINE_RELOC(R_RISCV_HI20, 26) \ -_ELF_DEFINE_RELOC(R_RISCV_LO12_I, 27) \ -_ELF_DEFINE_RELOC(R_RISCV_LO12_S, 28) \ -_ELF_DEFINE_RELOC(R_RISCV_TPREL_HI20, 29) \ -_ELF_DEFINE_RELOC(R_RISCV_TPREL_LO12_I, 30) \ -_ELF_DEFINE_RELOC(R_RISCV_TPREL_LO12_S, 31) \ -_ELF_DEFINE_RELOC(R_RISCV_TPREL_ADD, 32) \ -_ELF_DEFINE_RELOC(R_RISCV_ADD8, 33) \ -_ELF_DEFINE_RELOC(R_RISCV_ADD16, 34) \ -_ELF_DEFINE_RELOC(R_RISCV_ADD32, 35) \ -_ELF_DEFINE_RELOC(R_RISCV_ADD64, 36) \ -_ELF_DEFINE_RELOC(R_RISCV_SUB8, 37) \ -_ELF_DEFINE_RELOC(R_RISCV_SUB16, 38) \ -_ELF_DEFINE_RELOC(R_RISCV_SUB32, 39) \ -_ELF_DEFINE_RELOC(R_RISCV_SUB64, 40) \ -_ELF_DEFINE_RELOC(R_RISCV_GNU_VTINHERIT, 41) \ -_ELF_DEFINE_RELOC(R_RISCV_GNU_VTENTRY, 42) \ -_ELF_DEFINE_RELOC(R_RISCV_ALIGN, 43) \ -_ELF_DEFINE_RELOC(R_RISCV_RVC_BRANCH, 44) \ -_ELF_DEFINE_RELOC(R_RISCV_RVC_JUMP, 45) - -#define _ELF_DEFINE_SPARC_RELOCATIONS() \ -_ELF_DEFINE_RELOC(R_SPARC_NONE, 0) \ -_ELF_DEFINE_RELOC(R_SPARC_8, 1) \ -_ELF_DEFINE_RELOC(R_SPARC_16, 2) \ -_ELF_DEFINE_RELOC(R_SPARC_32, 3) \ -_ELF_DEFINE_RELOC(R_SPARC_DISP8, 4) \ -_ELF_DEFINE_RELOC(R_SPARC_DISP16, 5) \ -_ELF_DEFINE_RELOC(R_SPARC_DISP32, 6) \ -_ELF_DEFINE_RELOC(R_SPARC_WDISP30, 7) \ -_ELF_DEFINE_RELOC(R_SPARC_WDISP22, 8) \ -_ELF_DEFINE_RELOC(R_SPARC_HI22, 9) \ -_ELF_DEFINE_RELOC(R_SPARC_22, 10) \ -_ELF_DEFINE_RELOC(R_SPARC_13, 11) \ -_ELF_DEFINE_RELOC(R_SPARC_LO10, 12) \ -_ELF_DEFINE_RELOC(R_SPARC_GOT10, 13) \ -_ELF_DEFINE_RELOC(R_SPARC_GOT13, 14) \ -_ELF_DEFINE_RELOC(R_SPARC_GOT22, 15) \ -_ELF_DEFINE_RELOC(R_SPARC_PC10, 16) \ -_ELF_DEFINE_RELOC(R_SPARC_PC22, 17) \ -_ELF_DEFINE_RELOC(R_SPARC_WPLT30, 18) \ -_ELF_DEFINE_RELOC(R_SPARC_COPY, 19) \ -_ELF_DEFINE_RELOC(R_SPARC_GLOB_DAT, 20) \ -_ELF_DEFINE_RELOC(R_SPARC_JMP_SLOT, 21) \ -_ELF_DEFINE_RELOC(R_SPARC_RELATIVE, 22) \ -_ELF_DEFINE_RELOC(R_SPARC_UA32, 23) \ -_ELF_DEFINE_RELOC(R_SPARC_PLT32, 24) \ -_ELF_DEFINE_RELOC(R_SPARC_HIPLT22, 25) \ -_ELF_DEFINE_RELOC(R_SPARC_LOPLT10, 26) \ -_ELF_DEFINE_RELOC(R_SPARC_PCPLT32, 27) \ -_ELF_DEFINE_RELOC(R_SPARC_PCPLT22, 28) \ -_ELF_DEFINE_RELOC(R_SPARC_PCPLT10, 29) \ -_ELF_DEFINE_RELOC(R_SPARC_10, 30) \ -_ELF_DEFINE_RELOC(R_SPARC_11, 31) \ -_ELF_DEFINE_RELOC(R_SPARC_64, 32) \ -_ELF_DEFINE_RELOC(R_SPARC_OLO10, 33) \ -_ELF_DEFINE_RELOC(R_SPARC_HH22, 34) \ -_ELF_DEFINE_RELOC(R_SPARC_HM10, 35) \ -_ELF_DEFINE_RELOC(R_SPARC_LM22, 36) \ -_ELF_DEFINE_RELOC(R_SPARC_PC_HH22, 37) \ -_ELF_DEFINE_RELOC(R_SPARC_PC_HM10, 38) \ -_ELF_DEFINE_RELOC(R_SPARC_PC_LM22, 39) \ -_ELF_DEFINE_RELOC(R_SPARC_WDISP16, 40) \ -_ELF_DEFINE_RELOC(R_SPARC_WDISP19, 41) \ -_ELF_DEFINE_RELOC(R_SPARC_7, 43) \ -_ELF_DEFINE_RELOC(R_SPARC_5, 44) \ -_ELF_DEFINE_RELOC(R_SPARC_6, 45) \ -_ELF_DEFINE_RELOC(R_SPARC_DISP64, 46) \ -_ELF_DEFINE_RELOC(R_SPARC_PLT64, 47) \ -_ELF_DEFINE_RELOC(R_SPARC_HIX22, 48) \ -_ELF_DEFINE_RELOC(R_SPARC_LOX10, 49) \ -_ELF_DEFINE_RELOC(R_SPARC_H44, 50) \ -_ELF_DEFINE_RELOC(R_SPARC_M44, 51) \ -_ELF_DEFINE_RELOC(R_SPARC_L44, 52) \ -_ELF_DEFINE_RELOC(R_SPARC_REGISTER, 53) \ -_ELF_DEFINE_RELOC(R_SPARC_UA64, 54) \ -_ELF_DEFINE_RELOC(R_SPARC_UA16, 55) \ -_ELF_DEFINE_RELOC(R_SPARC_GOTDATA_HIX22, 80) \ -_ELF_DEFINE_RELOC(R_SPARC_GOTDATA_LOX10, 81) \ -_ELF_DEFINE_RELOC(R_SPARC_GOTDATA_OP_HIX22, 82) \ -_ELF_DEFINE_RELOC(R_SPARC_GOTDATA_OP_LOX10, 83) \ -_ELF_DEFINE_RELOC(R_SPARC_GOTDATA_OP, 84) \ -_ELF_DEFINE_RELOC(R_SPARC_H34, 85) - -#define _ELF_DEFINE_X86_64_RELOCATIONS() \ -_ELF_DEFINE_RELOC(R_X86_64_NONE, 0) \ -_ELF_DEFINE_RELOC(R_X86_64_64, 1) \ -_ELF_DEFINE_RELOC(R_X86_64_PC32, 2) \ -_ELF_DEFINE_RELOC(R_X86_64_GOT32, 3) \ -_ELF_DEFINE_RELOC(R_X86_64_PLT32, 4) \ -_ELF_DEFINE_RELOC(R_X86_64_COPY, 5) \ -_ELF_DEFINE_RELOC(R_X86_64_GLOB_DAT, 6) \ -_ELF_DEFINE_RELOC(R_X86_64_JUMP_SLOT, 7) \ -_ELF_DEFINE_RELOC(R_X86_64_RELATIVE, 8) \ -_ELF_DEFINE_RELOC(R_X86_64_GOTPCREL, 9) \ -_ELF_DEFINE_RELOC(R_X86_64_32, 10) \ -_ELF_DEFINE_RELOC(R_X86_64_32S, 11) \ -_ELF_DEFINE_RELOC(R_X86_64_16, 12) \ -_ELF_DEFINE_RELOC(R_X86_64_PC16, 13) \ -_ELF_DEFINE_RELOC(R_X86_64_8, 14) \ -_ELF_DEFINE_RELOC(R_X86_64_PC8, 15) \ -_ELF_DEFINE_RELOC(R_X86_64_DTPMOD64, 16) \ -_ELF_DEFINE_RELOC(R_X86_64_DTPOFF64, 17) \ -_ELF_DEFINE_RELOC(R_X86_64_TPOFF64, 18) \ -_ELF_DEFINE_RELOC(R_X86_64_TLSGD, 19) \ -_ELF_DEFINE_RELOC(R_X86_64_TLSLD, 20) \ -_ELF_DEFINE_RELOC(R_X86_64_DTPOFF32, 21) \ -_ELF_DEFINE_RELOC(R_X86_64_GOTTPOFF, 22) \ -_ELF_DEFINE_RELOC(R_X86_64_TPOFF32, 23) \ -_ELF_DEFINE_RELOC(R_X86_64_PC64, 24) \ -_ELF_DEFINE_RELOC(R_X86_64_GOTOFF64, 25) \ -_ELF_DEFINE_RELOC(R_X86_64_GOTPC32, 26) \ -_ELF_DEFINE_RELOC(R_X86_64_GOT64, 27) \ -_ELF_DEFINE_RELOC(R_X86_64_GOTPCREL64, 28) \ -_ELF_DEFINE_RELOC(R_X86_64_GOTPC64, 29) \ -_ELF_DEFINE_RELOC(R_X86_64_GOTPLT64, 30) \ -_ELF_DEFINE_RELOC(R_X86_64_PLTOFF64, 31) \ -_ELF_DEFINE_RELOC(R_X86_64_SIZE32, 32) \ -_ELF_DEFINE_RELOC(R_X86_64_SIZE64, 33) \ -_ELF_DEFINE_RELOC(R_X86_64_GOTPC32_TLSDESC, 34) \ -_ELF_DEFINE_RELOC(R_X86_64_TLSDESC_CALL, 35) \ -_ELF_DEFINE_RELOC(R_X86_64_TLSDESC, 36) \ -_ELF_DEFINE_RELOC(R_X86_64_IRELATIVE, 37) - -#define _ELF_DEFINE_RELOCATIONS() \ -_ELF_DEFINE_386_RELOCATIONS() \ -_ELF_DEFINE_AARCH64_RELOCATIONS() \ -_ELF_DEFINE_AMD64_RELOCATIONS() \ -_ELF_DEFINE_ARM_RELOCATIONS() \ -_ELF_DEFINE_IA64_RELOCATIONS() \ -_ELF_DEFINE_MIPS_RELOCATIONS() \ -_ELF_DEFINE_PPC32_RELOCATIONS() \ -_ELF_DEFINE_PPC64_RELOCATIONS() \ -_ELF_DEFINE_RISCV_RELOCATIONS() \ -_ELF_DEFINE_SPARC_RELOCATIONS() \ -_ELF_DEFINE_X86_64_RELOCATIONS() - -#undef _ELF_DEFINE_RELOC -#define _ELF_DEFINE_RELOC(N, V) N = V , -enum { - _ELF_DEFINE_RELOCATIONS() - R__LAST__ -}; - -#define PN_XNUM 0xFFFFU /* Use extended section numbering. */ - -/** - ** ELF Types. - **/ - -typedef uint32_t Elf32_Addr; /* Program address. */ -typedef uint8_t Elf32_Byte; /* Unsigned tiny integer. */ -typedef uint16_t Elf32_Half; /* Unsigned medium integer. */ -typedef uint32_t Elf32_Off; /* File offset. */ -typedef uint16_t Elf32_Section; /* Section index. */ -typedef int32_t Elf32_Sword; /* Signed integer. */ -typedef uint32_t Elf32_Word; /* Unsigned integer. */ -typedef uint64_t Elf32_Lword; /* Unsigned long integer. */ - -typedef uint64_t Elf64_Addr; /* Program address. */ -typedef uint8_t Elf64_Byte; /* Unsigned tiny integer. */ -typedef uint16_t Elf64_Half; /* Unsigned medium integer. */ -typedef uint64_t Elf64_Off; /* File offset. */ -typedef uint16_t Elf64_Section; /* Section index. */ -typedef int32_t Elf64_Sword; /* Signed integer. */ -typedef uint32_t Elf64_Word; /* Unsigned integer. */ -typedef uint64_t Elf64_Lword; /* Unsigned long integer. */ -typedef uint64_t Elf64_Xword; /* Unsigned long integer. */ -typedef int64_t Elf64_Sxword; /* Signed long integer. */ - - -/* - * Capability descriptors. - */ - -/* 32-bit capability descriptor. */ -typedef struct { - Elf32_Word c_tag; /* Type of entry. */ - union { - Elf32_Word c_val; /* Integer value. */ - Elf32_Addr c_ptr; /* Pointer value. */ - } c_un; -} Elf32_Cap; - -/* 64-bit capability descriptor. */ -typedef struct { - Elf64_Xword c_tag; /* Type of entry. */ - union { - Elf64_Xword c_val; /* Integer value. */ - Elf64_Addr c_ptr; /* Pointer value. */ - } c_un; -} Elf64_Cap; - -/* - * MIPS .conflict section entries. - */ - -/* 32-bit entry. */ -typedef struct { - Elf32_Addr c_index; -} Elf32_Conflict; - -/* 64-bit entry. */ -typedef struct { - Elf64_Addr c_index; -} Elf64_Conflict; - -/* - * Dynamic section entries. - */ - -/* 32-bit entry. */ -typedef struct { - Elf32_Sword d_tag; /* Type of entry. */ - union { - Elf32_Word d_val; /* Integer value. */ - Elf32_Addr d_ptr; /* Pointer value. */ - } d_un; -} Elf32_Dyn; - -/* 64-bit entry. */ -typedef struct { - Elf64_Sxword d_tag; /* Type of entry. */ - union { - Elf64_Xword d_val; /* Integer value. */ - Elf64_Addr d_ptr; /* Pointer value; */ - } d_un; -} Elf64_Dyn; - - -/* - * The executable header (EHDR). - */ - -/* 32 bit EHDR. */ -typedef struct { - unsigned char e_ident[EI_NIDENT]; /* ELF identification. */ - Elf32_Half e_type; /* Object file type (ET_*). */ - Elf32_Half e_machine; /* Machine type (EM_*). */ - Elf32_Word e_version; /* File format version (EV_*). */ - Elf32_Addr e_entry; /* Start address. */ - Elf32_Off e_phoff; /* File offset to the PHDR table. */ - Elf32_Off e_shoff; /* File offset to the SHDRheader. */ - Elf32_Word e_flags; /* Flags (EF_*). */ - Elf32_Half e_ehsize; /* Elf header size in bytes. */ - Elf32_Half e_phentsize; /* PHDR table entry size in bytes. */ - Elf32_Half e_phnum; /* Number of PHDR entries. */ - Elf32_Half e_shentsize; /* SHDR table entry size in bytes. */ - Elf32_Half e_shnum; /* Number of SHDR entries. */ - Elf32_Half e_shstrndx; /* Index of section name string table. */ -} Elf32_Ehdr; - - -/* 64 bit EHDR. */ -typedef struct { - unsigned char e_ident[EI_NIDENT]; /* ELF identification. */ - Elf64_Half e_type; /* Object file type (ET_*). */ - Elf64_Half e_machine; /* Machine type (EM_*). */ - Elf64_Word e_version; /* File format version (EV_*). */ - Elf64_Addr e_entry; /* Start address. */ - Elf64_Off e_phoff; /* File offset to the PHDR table. */ - Elf64_Off e_shoff; /* File offset to the SHDRheader. */ - Elf64_Word e_flags; /* Flags (EF_*). */ - Elf64_Half e_ehsize; /* Elf header size in bytes. */ - Elf64_Half e_phentsize; /* PHDR table entry size in bytes. */ - Elf64_Half e_phnum; /* Number of PHDR entries. */ - Elf64_Half e_shentsize; /* SHDR table entry size in bytes. */ - Elf64_Half e_shnum; /* Number of SHDR entries. */ - Elf64_Half e_shstrndx; /* Index of section name string table. */ -} Elf64_Ehdr; - - -/* - * Shared object information. - */ - -/* 32-bit entry. */ -typedef struct { - Elf32_Word l_name; /* The name of a shared object. */ - Elf32_Word l_time_stamp; /* 32-bit timestamp. */ - Elf32_Word l_checksum; /* Checksum of visible symbols, sizes. */ - Elf32_Word l_version; /* Interface version string index. */ - Elf32_Word l_flags; /* Flags (LL_*). */ -} Elf32_Lib; - -/* 64-bit entry. */ -typedef struct { - Elf64_Word l_name; /* The name of a shared object. */ - Elf64_Word l_time_stamp; /* 32-bit timestamp. */ - Elf64_Word l_checksum; /* Checksum of visible symbols, sizes. */ - Elf64_Word l_version; /* Interface version string index. */ - Elf64_Word l_flags; /* Flags (LL_*). */ -} Elf64_Lib; - -#define _ELF_DEFINE_LL_FLAGS() \ -_ELF_DEFINE_LL(LL_NONE, 0, \ - "no flags") \ -_ELF_DEFINE_LL(LL_EXACT_MATCH, 0x1, \ - "require an exact match") \ -_ELF_DEFINE_LL(LL_IGNORE_INT_VER, 0x2, \ - "ignore version incompatibilities") \ -_ELF_DEFINE_LL(LL_REQUIRE_MINOR, 0x4, \ - "") \ -_ELF_DEFINE_LL(LL_EXPORTS, 0x8, \ - "") \ -_ELF_DEFINE_LL(LL_DELAY_LOAD, 0x10, \ - "") \ -_ELF_DEFINE_LL(LL_DELTA, 0x20, \ - "") - -#undef _ELF_DEFINE_LL -#define _ELF_DEFINE_LL(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_LL_FLAGS() - LL__LAST__ -}; - -/* - * Note tags - */ - -#define _ELF_DEFINE_NOTE_ENTRY_TYPES() \ -_ELF_DEFINE_NT(NT_ABI_TAG, 1, "Tag indicating the ABI") \ -_ELF_DEFINE_NT(NT_GNU_HWCAP, 2, "Hardware capabilities") \ -_ELF_DEFINE_NT(NT_GNU_BUILD_ID, 3, "Build id, set by ld(1)") \ -_ELF_DEFINE_NT(NT_GNU_GOLD_VERSION, 4, \ - "Version number of the GNU gold linker") \ -_ELF_DEFINE_NT(NT_PRSTATUS, 1, "Process status") \ -_ELF_DEFINE_NT(NT_FPREGSET, 2, "Floating point information") \ -_ELF_DEFINE_NT(NT_PRPSINFO, 3, "Process information") \ -_ELF_DEFINE_NT(NT_AUXV, 6, "Auxiliary vector") \ -_ELF_DEFINE_NT(NT_PRXFPREG, 0x46E62B7FUL, \ - "Linux user_xfpregs structure") \ -_ELF_DEFINE_NT(NT_PSTATUS, 10, "Linux process status") \ -_ELF_DEFINE_NT(NT_FPREGS, 12, "Linux floating point regset") \ -_ELF_DEFINE_NT(NT_PSINFO, 13, "Linux process information") \ -_ELF_DEFINE_NT(NT_LWPSTATUS, 16, "Linux lwpstatus_t type") \ -_ELF_DEFINE_NT(NT_LWPSINFO, 17, "Linux lwpinfo_t type") - -#undef _ELF_DEFINE_NT -#define _ELF_DEFINE_NT(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_NOTE_ENTRY_TYPES() - NT__LAST__ -}; - -/* Aliases for the ABI tag. */ -#define NT_FREEBSD_ABI_TAG NT_ABI_TAG -#define NT_GNU_ABI_TAG NT_ABI_TAG -#define NT_NETBSD_IDENT NT_ABI_TAG -#define NT_OPENBSD_IDENT NT_ABI_TAG - -/* - * Note descriptors. - */ - -typedef struct { - uint32_t n_namesz; /* Length of note's name. */ - uint32_t n_descsz; /* Length of note's value. */ - uint32_t n_type; /* Type of note. */ -} Elf_Note; - -typedef Elf_Note Elf32_Nhdr; /* 32-bit note header. */ -typedef Elf_Note Elf64_Nhdr; /* 64-bit note header. */ - -/* - * MIPS ELF options descriptor header. - */ - -typedef struct { - Elf64_Byte kind; /* Type of options. */ - Elf64_Byte size; /* Size of option descriptor. */ - Elf64_Half section; /* Index of section affected. */ - Elf64_Word info; /* Kind-specific information. */ -} Elf_Options; - -/* - * Option kinds. - */ - -#define _ELF_DEFINE_OPTION_KINDS() \ -_ELF_DEFINE_ODK(ODK_NULL, 0, "undefined") \ -_ELF_DEFINE_ODK(ODK_REGINFO, 1, "register usage info") \ -_ELF_DEFINE_ODK(ODK_EXCEPTIONS, 2, "exception processing info") \ -_ELF_DEFINE_ODK(ODK_PAD, 3, "section padding") \ -_ELF_DEFINE_ODK(ODK_HWPATCH, 4, "hardware patch applied") \ -_ELF_DEFINE_ODK(ODK_FILL, 5, "fill value used by linker") \ -_ELF_DEFINE_ODK(ODK_TAGS, 6, "reserved space for tools") \ -_ELF_DEFINE_ODK(ODK_HWAND, 7, "hardware AND patch applied") \ -_ELF_DEFINE_ODK(ODK_HWOR, 8, "hardware OR patch applied") \ -_ELF_DEFINE_ODK(ODK_GP_GROUP, 9, \ - "GP group to use for text/data sections") \ -_ELF_DEFINE_ODK(ODK_IDENT, 10, "ID information") \ -_ELF_DEFINE_ODK(ODK_PAGESIZE, 11, "page size infomation") - -#undef _ELF_DEFINE_ODK -#define _ELF_DEFINE_ODK(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_OPTION_KINDS() - ODK__LAST__ -}; - -/* - * ODK_EXCEPTIONS info field masks. - */ - -#define _ELF_DEFINE_ODK_EXCEPTIONS_MASK() \ -_ELF_DEFINE_OEX(OEX_FPU_MIN, 0x0000001FUL, \ - "minimum FPU exception which must be enabled") \ -_ELF_DEFINE_OEX(OEX_FPU_MAX, 0x00001F00UL, \ - "maximum FPU exception which can be enabled") \ -_ELF_DEFINE_OEX(OEX_PAGE0, 0x00010000UL, \ - "page zero must be mapped") \ -_ELF_DEFINE_OEX(OEX_SMM, 0x00020000UL, \ - "run in sequential memory mode") \ -_ELF_DEFINE_OEX(OEX_PRECISEFP, 0x00040000UL, \ - "run in precise FP exception mode") \ -_ELF_DEFINE_OEX(OEX_DISMISS, 0x00080000UL, \ - "dismiss invalid address traps") - -#undef _ELF_DEFINE_OEX -#define _ELF_DEFINE_OEX(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_ODK_EXCEPTIONS_MASK() - OEX__LAST__ -}; - -/* - * ODK_PAD info field masks. - */ - -#define _ELF_DEFINE_ODK_PAD_MASK() \ -_ELF_DEFINE_OPAD(OPAD_PREFIX, 0x0001) \ -_ELF_DEFINE_OPAD(OPAD_POSTFIX, 0x0002) \ -_ELF_DEFINE_OPAD(OPAD_SYMBOL, 0x0004) - -#undef _ELF_DEFINE_OPAD -#define _ELF_DEFINE_OPAD(N, V) N = V , -enum { - _ELF_DEFINE_ODK_PAD_MASK() - OPAD__LAST__ -}; - -/* - * ODK_HWPATCH info field masks. - */ - -#define _ELF_DEFINE_ODK_HWPATCH_MASK() \ -_ELF_DEFINE_OHW(OHW_R4KEOP, 0x00000001UL, \ - "patch for R4000 branch at end-of-page bug") \ -_ELF_DEFINE_OHW(OHW_R8KPFETCH, 0x00000002UL, \ - "R8000 prefetch bug may occur") \ -_ELF_DEFINE_OHW(OHW_R5KEOP, 0x00000004UL, \ - "patch for R5000 branch at end-of-page bug") \ -_ELF_DEFINE_OHW(OHW_R5KCVTL, 0x00000008UL, \ - "R5000 cvt.[ds].l bug: clean == 1") \ -_ELF_DEFINE_OHW(OHW_R10KLDL, 0x00000010UL, \ - "needd patch for R10000 misaligned load") - -#undef _ELF_DEFINE_OHW -#define _ELF_DEFINE_OHW(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_ODK_HWPATCH_MASK() - OHW__LAST__ -}; - -/* - * ODK_HWAND/ODK_HWOR info field and hwp_flags[12] masks. - */ - -#define _ELF_DEFINE_ODK_HWP_MASK() \ -_ELF_DEFINE_HWP(OHWA0_R4KEOP_CHECKED, 0x00000001UL, \ - "object checked for R4000 end-of-page bug") \ -_ELF_DEFINE_HWP(OHWA0_R4KEOP_CLEAN, 0x00000002UL, \ - "object verified clean for R4000 end-of-page bug") \ -_ELF_DEFINE_HWP(OHWO0_FIXADE, 0x00000001UL, \ - "object requires call to fixade") - -#undef _ELF_DEFINE_HWP -#define _ELF_DEFINE_HWP(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_ODK_HWP_MASK() - OHWX0__LAST__ -}; - -/* - * ODK_IDENT/ODK_GP_GROUP info field masks. - */ - -#define _ELF_DEFINE_ODK_GP_MASK() \ -_ELF_DEFINE_OGP(OGP_GROUP, 0x0000FFFFUL, "GP group number") \ -_ELF_DEFINE_OGP(OGP_SELF, 0x00010000UL, \ - "GP group is self-contained") - -#undef _ELF_DEFINE_OGP -#define _ELF_DEFINE_OGP(N, V, DESCR) N = V , -enum { - _ELF_DEFINE_ODK_GP_MASK() - OGP__LAST__ -}; - -/* - * MIPS ELF register info descriptor. - */ - -/* 32 bit RegInfo entry. */ -typedef struct { - Elf32_Word ri_gprmask; /* Mask of general register used. */ - Elf32_Word ri_cprmask[4]; /* Mask of coprocessor register used. */ - Elf32_Addr ri_gp_value; /* GP register value. */ -} Elf32_RegInfo; - -/* 64 bit RegInfo entry. */ -typedef struct { - Elf64_Word ri_gprmask; /* Mask of general register used. */ - Elf64_Word ri_pad; /* Padding. */ - Elf64_Word ri_cprmask[4]; /* Mask of coprocessor register used. */ - Elf64_Addr ri_gp_value; /* GP register value. */ -} Elf64_RegInfo; - -/* - * Program Header Table (PHDR) entries. - */ - -/* 32 bit PHDR entry. */ -typedef struct { - Elf32_Word p_type; /* Type of segment. */ - Elf32_Off p_offset; /* File offset to segment. */ - Elf32_Addr p_vaddr; /* Virtual address in memory. */ - Elf32_Addr p_paddr; /* Physical address (if relevant). */ - Elf32_Word p_filesz; /* Size of segment in file. */ - Elf32_Word p_memsz; /* Size of segment in memory. */ - Elf32_Word p_flags; /* Segment flags. */ - Elf32_Word p_align; /* Alignment constraints. */ -} Elf32_Phdr; - -/* 64 bit PHDR entry. */ -typedef struct { - Elf64_Word p_type; /* Type of segment. */ - Elf64_Word p_flags; /* Segment flags. */ - Elf64_Off p_offset; /* File offset to segment. */ - Elf64_Addr p_vaddr; /* Virtual address in memory. */ - Elf64_Addr p_paddr; /* Physical address (if relevant). */ - Elf64_Xword p_filesz; /* Size of segment in file. */ - Elf64_Xword p_memsz; /* Size of segment in memory. */ - Elf64_Xword p_align; /* Alignment constraints. */ -} Elf64_Phdr; - - -/* - * Move entries, for describing data in COMMON blocks in a compact - * manner. - */ - -/* 32-bit move entry. */ -typedef struct { - Elf32_Lword m_value; /* Initialization value. */ - Elf32_Word m_info; /* Encoded size and index. */ - Elf32_Word m_poffset; /* Offset relative to symbol. */ - Elf32_Half m_repeat; /* Repeat count. */ - Elf32_Half m_stride; /* Number of units to skip. */ -} Elf32_Move; - -/* 64-bit move entry. */ -typedef struct { - Elf64_Lword m_value; /* Initialization value. */ - Elf64_Xword m_info; /* Encoded size and index. */ - Elf64_Xword m_poffset; /* Offset relative to symbol. */ - Elf64_Half m_repeat; /* Repeat count. */ - Elf64_Half m_stride; /* Number of units to skip. */ -} Elf64_Move; - -#define ELF32_M_SYM(I) ((I) >> 8) -#define ELF32_M_SIZE(I) ((unsigned char) (I)) -#define ELF32_M_INFO(M, S) (((M) << 8) + (unsigned char) (S)) - -#define ELF64_M_SYM(I) ((I) >> 8) -#define ELF64_M_SIZE(I) ((unsigned char) (I)) -#define ELF64_M_INFO(M, S) (((M) << 8) + (unsigned char) (S)) - -/* - * Section Header Table (SHDR) entries. - */ - -/* 32 bit SHDR */ -typedef struct { - Elf32_Word sh_name; /* index of section name */ - Elf32_Word sh_type; /* section type */ - Elf32_Word sh_flags; /* section flags */ - Elf32_Addr sh_addr; /* in-memory address of section */ - Elf32_Off sh_offset; /* file offset of section */ - Elf32_Word sh_size; /* section size in bytes */ - Elf32_Word sh_link; /* section header table link */ - Elf32_Word sh_info; /* extra information */ - Elf32_Word sh_addralign; /* alignment constraint */ - Elf32_Word sh_entsize; /* size for fixed-size entries */ -} Elf32_Shdr; - -/* 64 bit SHDR */ -typedef struct { - Elf64_Word sh_name; /* index of section name */ - Elf64_Word sh_type; /* section type */ - Elf64_Xword sh_flags; /* section flags */ - Elf64_Addr sh_addr; /* in-memory address of section */ - Elf64_Off sh_offset; /* file offset of section */ - Elf64_Xword sh_size; /* section size in bytes */ - Elf64_Word sh_link; /* section header table link */ - Elf64_Word sh_info; /* extra information */ - Elf64_Xword sh_addralign; /* alignment constraint */ - Elf64_Xword sh_entsize; /* size for fixed-size entries */ -} Elf64_Shdr; - - -/* - * Symbol table entries. - */ - -typedef struct { - Elf32_Word st_name; /* index of symbol's name */ - Elf32_Addr st_value; /* value for the symbol */ - Elf32_Word st_size; /* size of associated data */ - unsigned char st_info; /* type and binding attributes */ - unsigned char st_other; /* visibility */ - Elf32_Half st_shndx; /* index of related section */ -} Elf32_Sym; - -typedef struct { - Elf64_Word st_name; /* index of symbol's name */ - unsigned char st_info; /* type and binding attributes */ - unsigned char st_other; /* visibility */ - Elf64_Half st_shndx; /* index of related section */ - Elf64_Addr st_value; /* value for the symbol */ - Elf64_Xword st_size; /* size of associated data */ -} Elf64_Sym; - -#define ELF32_ST_BIND(I) ((I) >> 4) -#define ELF32_ST_TYPE(I) ((I) & 0xFU) -#define ELF32_ST_INFO(B,T) (((B) << 4) + ((T) & 0xF)) - -#define ELF64_ST_BIND(I) ((I) >> 4) -#define ELF64_ST_TYPE(I) ((I) & 0xFU) -#define ELF64_ST_INFO(B,T) (((B) << 4) + ((T) & 0xF)) - -#define ELF32_ST_VISIBILITY(O) ((O) & 0x3) -#define ELF64_ST_VISIBILITY(O) ((O) & 0x3) - -/* - * Syminfo descriptors, containing additional symbol information. - */ - -/* 32-bit entry. */ -typedef struct { - Elf32_Half si_boundto; /* Entry index with additional flags. */ - Elf32_Half si_flags; /* Flags. */ -} Elf32_Syminfo; - -/* 64-bit entry. */ -typedef struct { - Elf64_Half si_boundto; /* Entry index with additional flags. */ - Elf64_Half si_flags; /* Flags. */ -} Elf64_Syminfo; - -/* - * Relocation descriptors. - */ - -typedef struct { - Elf32_Addr r_offset; /* location to apply relocation to */ - Elf32_Word r_info; /* type+section for relocation */ -} Elf32_Rel; - -typedef struct { - Elf32_Addr r_offset; /* location to apply relocation to */ - Elf32_Word r_info; /* type+section for relocation */ - Elf32_Sword r_addend; /* constant addend */ -} Elf32_Rela; - -typedef struct { - Elf64_Addr r_offset; /* location to apply relocation to */ - Elf64_Xword r_info; /* type+section for relocation */ -} Elf64_Rel; - -typedef struct { - Elf64_Addr r_offset; /* location to apply relocation to */ - Elf64_Xword r_info; /* type+section for relocation */ - Elf64_Sxword r_addend; /* constant addend */ -} Elf64_Rela; - - -#define ELF32_R_SYM(I) ((I) >> 8) -#define ELF32_R_TYPE(I) ((unsigned char) (I)) -#define ELF32_R_INFO(S,T) (((S) << 8) + (unsigned char) (T)) - -#define ELF64_R_SYM(I) ((I) >> 32) -#define ELF64_R_TYPE(I) ((I) & 0xFFFFFFFFUL) -#define ELF64_R_INFO(S,T) (((S) << 32) + ((T) & 0xFFFFFFFFUL)) - -/* - * Symbol versioning structures. - */ - -/* 32-bit structures. */ -typedef struct -{ - Elf32_Word vda_name; /* Index to name. */ - Elf32_Word vda_next; /* Offset to next entry. */ -} Elf32_Verdaux; - -typedef struct -{ - Elf32_Word vna_hash; /* Hash value of dependency name. */ - Elf32_Half vna_flags; /* Flags. */ - Elf32_Half vna_other; /* Unused. */ - Elf32_Word vna_name; /* Offset to dependency name. */ - Elf32_Word vna_next; /* Offset to next vernaux entry. */ -} Elf32_Vernaux; - -typedef struct -{ - Elf32_Half vd_version; /* Version information. */ - Elf32_Half vd_flags; /* Flags. */ - Elf32_Half vd_ndx; /* Index into the versym section. */ - Elf32_Half vd_cnt; /* Number of aux entries. */ - Elf32_Word vd_hash; /* Hash value of name. */ - Elf32_Word vd_aux; /* Offset to aux entries. */ - Elf32_Word vd_next; /* Offset to next version definition. */ -} Elf32_Verdef; - -typedef struct -{ - Elf32_Half vn_version; /* Version number. */ - Elf32_Half vn_cnt; /* Number of aux entries. */ - Elf32_Word vn_file; /* Offset of associated file name. */ - Elf32_Word vn_aux; /* Offset of vernaux array. */ - Elf32_Word vn_next; /* Offset of next verneed entry. */ -} Elf32_Verneed; - -typedef Elf32_Half Elf32_Versym; - -/* 64-bit structures. */ - -typedef struct { - Elf64_Word vda_name; /* Index to name. */ - Elf64_Word vda_next; /* Offset to next entry. */ -} Elf64_Verdaux; - -typedef struct { - Elf64_Word vna_hash; /* Hash value of dependency name. */ - Elf64_Half vna_flags; /* Flags. */ - Elf64_Half vna_other; /* Unused. */ - Elf64_Word vna_name; /* Offset to dependency name. */ - Elf64_Word vna_next; /* Offset to next vernaux entry. */ -} Elf64_Vernaux; - -typedef struct { - Elf64_Half vd_version; /* Version information. */ - Elf64_Half vd_flags; /* Flags. */ - Elf64_Half vd_ndx; /* Index into the versym section. */ - Elf64_Half vd_cnt; /* Number of aux entries. */ - Elf64_Word vd_hash; /* Hash value of name. */ - Elf64_Word vd_aux; /* Offset to aux entries. */ - Elf64_Word vd_next; /* Offset to next version definition. */ -} Elf64_Verdef; - -typedef struct { - Elf64_Half vn_version; /* Version number. */ - Elf64_Half vn_cnt; /* Number of aux entries. */ - Elf64_Word vn_file; /* Offset of associated file name. */ - Elf64_Word vn_aux; /* Offset of vernaux array. */ - Elf64_Word vn_next; /* Offset of next verneed entry. */ -} Elf64_Verneed; - -typedef Elf64_Half Elf64_Versym; - - -/* - * The header for GNU-style hash sections. - */ - -typedef struct { - uint32_t gh_nbuckets; /* Number of hash buckets. */ - uint32_t gh_symndx; /* First visible symbol in .dynsym. */ - uint32_t gh_maskwords; /* #maskwords used in bloom filter. */ - uint32_t gh_shift2; /* Bloom filter shift count. */ -} Elf_GNU_Hash_Header; - -#endif /* _ELFDEFINITIONS_H_ */ diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/common/_elftc.h libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/common/_elftc.h --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/common/_elftc.h 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/common/_elftc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,484 +0,0 @@ -/*- - * Copyright (c) 2009 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: _elftc.h 3244 2015-08-31 19:53:08Z emaste $ - */ - -/** - ** Miscellanous definitions needed by multiple components. - **/ - -#ifndef _ELFTC_H -#define _ELFTC_H - -#ifndef NULL -#define NULL ((void *) 0) -#endif - -#ifndef offsetof -#define offsetof(T, M) ((int) &((T*) 0) -> M) -#endif - -/* --QUEUE-MACROS-- [[ */ - -/* - * Supply macros missing from - */ - -/* - * Copyright (c) 1991, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef LIST_FOREACH_SAFE -#define LIST_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = LIST_FIRST((head)); \ - (var) && ((tvar) = LIST_NEXT((var), field), 1); \ - (var) = (tvar)) -#endif - -#ifndef SLIST_FOREACH_SAFE -#define SLIST_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = SLIST_FIRST((head)); \ - (var) && ((tvar) = SLIST_NEXT((var), field), 1); \ - (var) = (tvar)) -#endif - -#ifndef STAILQ_CONCAT -#define STAILQ_CONCAT(head1, head2) do { \ - if (!STAILQ_EMPTY((head2))) { \ - *(head1)->stqh_last = (head2)->stqh_first; \ - (head1)->stqh_last = (head2)->stqh_last; \ - STAILQ_INIT((head2)); \ - } \ -} while (/*CONSTCOND*/0) -#endif - -#ifndef STAILQ_EMPTY -#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL) -#endif - -#ifndef STAILQ_ENTRY -#define STAILQ_ENTRY(type) \ -struct { \ - struct type *stqe_next; /* next element */ \ -} -#endif - -#ifndef STAILQ_FIRST -#define STAILQ_FIRST(head) ((head)->stqh_first) -#endif - -#ifndef STAILQ_HEAD -#define STAILQ_HEAD(name, type) \ -struct name { \ - struct type *stqh_first; /* first element */ \ - struct type **stqh_last; /* addr of last next element */ \ -} -#endif - -#ifndef STAILQ_HEAD_INITIALIZER -#define STAILQ_HEAD_INITIALIZER(head) \ - { NULL, &(head).stqh_first } -#endif - -#ifndef STAILQ_FOREACH -#define STAILQ_FOREACH(var, head, field) \ - for ((var) = ((head)->stqh_first); \ - (var); \ - (var) = ((var)->field.stqe_next)) -#endif - -#ifndef STAILQ_FOREACH_SAFE -#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = STAILQ_FIRST((head)); \ - (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ - (var) = (tvar)) -#endif - -#ifndef STAILQ_INIT -#define STAILQ_INIT(head) do { \ - (head)->stqh_first = NULL; \ - (head)->stqh_last = &(head)->stqh_first; \ -} while (/*CONSTCOND*/0) -#endif - -#ifndef STAILQ_INSERT_HEAD -#define STAILQ_INSERT_HEAD(head, elm, field) do { \ - if (((elm)->field.stqe_next = (head)->stqh_first) == NULL) \ - (head)->stqh_last = &(elm)->field.stqe_next; \ - (head)->stqh_first = (elm); \ -} while (/*CONSTCOND*/0) -#endif - -#ifndef STAILQ_INSERT_TAIL -#define STAILQ_INSERT_TAIL(head, elm, field) do { \ - (elm)->field.stqe_next = NULL; \ - *(head)->stqh_last = (elm); \ - (head)->stqh_last = &(elm)->field.stqe_next; \ -} while (/*CONSTCOND*/0) -#endif - -#ifndef STAILQ_INSERT_AFTER -#define STAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ - if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\ - (head)->stqh_last = &(elm)->field.stqe_next; \ - (listelm)->field.stqe_next = (elm); \ -} while (/*CONSTCOND*/0) -#endif - -#ifndef STAILQ_LAST -#define STAILQ_LAST(head, type, field) \ - (STAILQ_EMPTY((head)) ? \ - NULL : ((struct type *)(void *) \ - ((char *)((head)->stqh_last) - offsetof(struct type, field)))) -#endif - -#ifndef STAILQ_NEXT -#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) -#endif - -#ifndef STAILQ_REMOVE -#define STAILQ_REMOVE(head, elm, type, field) do { \ - if ((head)->stqh_first == (elm)) { \ - STAILQ_REMOVE_HEAD((head), field); \ - } else { \ - struct type *curelm = (head)->stqh_first; \ - while (curelm->field.stqe_next != (elm)) \ - curelm = curelm->field.stqe_next; \ - if ((curelm->field.stqe_next = \ - curelm->field.stqe_next->field.stqe_next) == NULL) \ - (head)->stqh_last = &(curelm)->field.stqe_next; \ - } \ -} while (/*CONSTCOND*/0) -#endif - -#ifndef STAILQ_REMOVE_HEAD -#define STAILQ_REMOVE_HEAD(head, field) do { \ - if (((head)->stqh_first = (head)->stqh_first->field.stqe_next) == \ - NULL) \ - (head)->stqh_last = &(head)->stqh_first; \ -} while (/*CONSTCOND*/0) -#endif - -/* - * The STAILQ_SORT macro is adapted from Simon Tatham's O(n*log(n)) - * mergesort algorithm. - */ -#ifndef STAILQ_SORT -#define STAILQ_SORT(head, type, field, cmp) do { \ - STAILQ_HEAD(, type) _la, _lb; \ - struct type *_p, *_q, *_e; \ - int _i, _sz, _nmerges, _psz, _qsz; \ - \ - _sz = 1; \ - do { \ - _nmerges = 0; \ - STAILQ_INIT(&_lb); \ - while (!STAILQ_EMPTY((head))) { \ - _nmerges++; \ - STAILQ_INIT(&_la); \ - _psz = 0; \ - for (_i = 0; _i < _sz && !STAILQ_EMPTY((head)); \ - _i++) { \ - _e = STAILQ_FIRST((head)); \ - if (_e == NULL) \ - break; \ - _psz++; \ - STAILQ_REMOVE_HEAD((head), field); \ - STAILQ_INSERT_TAIL(&_la, _e, field); \ - } \ - _p = STAILQ_FIRST(&_la); \ - _qsz = _sz; \ - _q = STAILQ_FIRST((head)); \ - while (_psz > 0 || (_qsz > 0 && _q != NULL)) { \ - if (_psz == 0) { \ - _e = _q; \ - _q = STAILQ_NEXT(_q, field); \ - STAILQ_REMOVE_HEAD((head), \ - field); \ - _qsz--; \ - } else if (_qsz == 0 || _q == NULL) { \ - _e = _p; \ - _p = STAILQ_NEXT(_p, field); \ - STAILQ_REMOVE_HEAD(&_la, field);\ - _psz--; \ - } else if (cmp(_p, _q) <= 0) { \ - _e = _p; \ - _p = STAILQ_NEXT(_p, field); \ - STAILQ_REMOVE_HEAD(&_la, field);\ - _psz--; \ - } else { \ - _e = _q; \ - _q = STAILQ_NEXT(_q, field); \ - STAILQ_REMOVE_HEAD((head), \ - field); \ - _qsz--; \ - } \ - STAILQ_INSERT_TAIL(&_lb, _e, field); \ - } \ - } \ - (head)->stqh_first = _lb.stqh_first; \ - (head)->stqh_last = _lb.stqh_last; \ - _sz *= 2; \ - } while (_nmerges > 1); \ -} while (/*CONSTCOND*/0) -#endif - -#ifndef TAILQ_FOREACH_SAFE -#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ - for ((var) = TAILQ_FIRST((head)); \ - (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ - (var) = (tvar)) -#endif - -/* ]] --QUEUE-MACROS-- */ - -/* - * VCS Ids. - */ - -#ifndef ELFTC_VCSID - -#if defined(__DragonFly__) -#define ELFTC_VCSID(ID) __RCSID(ID) -#endif - -#if defined(__FreeBSD__) -#define ELFTC_VCSID(ID) __FBSDID(ID) -#endif - -#if defined(__APPLE__) || defined(__GLIBC__) || defined(__GNU__) || \ - defined(__linux__) -#if defined(__GNUC__) -#define ELFTC_VCSID(ID) __asm__(".ident\t\"" ID "\"") -#else -#define ELFTC_VCSID(ID) /**/ -#endif -#endif - -#if defined(__minix) -#if defined(__GNUC__) -#define ELFTC_VCSID(ID) __asm__(".ident\t\"" ID "\"") -#else -#define ELFTC_VCSID(ID) /**/ -#endif /* __GNU__ */ -#endif - -#if defined(__NetBSD__) -#define ELFTC_VCSID(ID) __RCSID(ID) -#endif - -#if defined(__OpenBSD__) -#if defined(__GNUC__) -#define ELFTC_VCSID(ID) __asm__(".ident\t\"" ID "\"") -#else -#define ELFTC_VCSID(ID) /**/ -#endif /* __GNUC__ */ -#endif - -#endif /* ELFTC_VCSID */ - -/* - * Provide an equivalent for getprogname(3). - */ - -#ifndef ELFTC_GETPROGNAME - -#if defined(__APPLE__) || defined(__DragonFly__) || defined(__FreeBSD__) || \ - defined(__minix) || defined(__NetBSD__) - -#include - -#define ELFTC_GETPROGNAME() getprogname() - -#endif /* __DragonFly__ || __FreeBSD__ || __minix || __NetBSD__ */ - - -#if defined(__GLIBC__) || defined(__linux__) -#ifndef _GNU_SOURCE -/* - * GLIBC based systems have a global 'char *' pointer referencing - * the executable's name. - */ -extern const char *program_invocation_short_name; -#endif /* !_GNU_SOURCE */ - -#define ELFTC_GETPROGNAME() program_invocation_short_name - -#endif /* __GLIBC__ || __linux__ */ - - -#if defined(__OpenBSD__) - -extern const char *__progname; - -#define ELFTC_GETPROGNAME() __progname - -#endif /* __OpenBSD__ */ - -#endif /* ELFTC_GETPROGNAME */ - - -/** - ** Per-OS configuration. - **/ - -#if defined(__APPLE__) - -#include -#define htobe32(x) OSSwapHostToBigInt32(x) -#define roundup2 roundup - -#define ELFTC_BYTE_ORDER _BYTE_ORDER -#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN _LITTLE_ENDIAN -#define ELFTC_BYTE_ORDER_BIG_ENDIAN _BIG_ENDIAN - -#define ELFTC_HAVE_MMAP 1 -#define ELFTC_HAVE_STRMODE 1 - -#define ELFTC_NEED_BYTEORDER_EXTENSIONS 1 -#endif /* __APPLE__ */ - - -#if defined(__DragonFly__) - -#include -#include - -#define ELFTC_BYTE_ORDER _BYTE_ORDER -#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN _LITTLE_ENDIAN -#define ELFTC_BYTE_ORDER_BIG_ENDIAN _BIG_ENDIAN - -#define ELFTC_HAVE_MMAP 1 - -#endif - -#if defined(__GLIBC__) || defined(__linux__) - -#include - -#define ELFTC_BYTE_ORDER __BYTE_ORDER -#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN __LITTLE_ENDIAN -#define ELFTC_BYTE_ORDER_BIG_ENDIAN __BIG_ENDIAN - -#define ELFTC_HAVE_MMAP 1 - -/* - * Debian GNU/Linux and Debian GNU/kFreeBSD do not have strmode(3). - */ -#define ELFTC_HAVE_STRMODE 0 - -/* Whether we need to supply {be,le}32dec. */ -#define ELFTC_NEED_BYTEORDER_EXTENSIONS 1 - -#define roundup2 roundup - -#endif /* __GLIBC__ || __linux__ */ - - -#if defined(__FreeBSD__) - -#include -#include - -#define ELFTC_BYTE_ORDER _BYTE_ORDER -#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN _LITTLE_ENDIAN -#define ELFTC_BYTE_ORDER_BIG_ENDIAN _BIG_ENDIAN - -#define ELFTC_HAVE_MMAP 1 -#define ELFTC_HAVE_STRMODE 1 -#if __FreeBSD_version <= 900000 -#define ELFTC_BROKEN_YY_NO_INPUT 1 -#endif -#endif /* __FreeBSD__ */ - - -#if defined(__minix) -#define ELFTC_HAVE_MMAP 0 -#endif /* __minix */ - - -#if defined(__NetBSD__) - -#include -#include - -#define ELFTC_BYTE_ORDER _BYTE_ORDER -#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN _LITTLE_ENDIAN -#define ELFTC_BYTE_ORDER_BIG_ENDIAN _BIG_ENDIAN - -#define ELFTC_HAVE_MMAP 1 -#define ELFTC_HAVE_STRMODE 1 -#if __NetBSD_Version__ <= 599002100 -/* from src/doc/CHANGES: flex(1): Import flex-2.5.35 [christos 20091025] */ -/* and 5.99.21 was from Wed Oct 21 21:28:36 2009 UTC */ -# define ELFTC_BROKEN_YY_NO_INPUT 1 -#endif -#endif /* __NetBSD __ */ - - -#if defined(__OpenBSD__) - -#include -#include - -#define ELFTC_BYTE_ORDER _BYTE_ORDER -#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN _LITTLE_ENDIAN -#define ELFTC_BYTE_ORDER_BIG_ENDIAN _BIG_ENDIAN - -#define ELFTC_HAVE_MMAP 1 -#define ELFTC_HAVE_STRMODE 1 - -#define ELFTC_NEED_BYTEORDER_EXTENSIONS 1 -#define roundup2 roundup - -#endif /* __OpenBSD__ */ - -#endif /* _ELFTC_H */ diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/common/Makefile libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/common/Makefile --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/common/Makefile 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/common/Makefile 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -# $Id: Makefile 3022 2014-04-17 18:05:58Z jkoshy $ - -TOP= .. - -INCS= elfdefinitions.h -INCSDIR= /usr/include - -.PHONY: all clean clobber depend obj - -all depend obj: - -clean clobber: - rm -f ${CLEANFILES} - -cleandepend: - rm -f .depend - -.include "${TOP}/mk/elftoolchain.inc.mk" diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/common/native-elf-format libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/common/native-elf-format --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/common/native-elf-format 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/common/native-elf-format 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -#!/bin/sh -# -# $Id: native-elf-format 3293 2016-01-07 19:26:27Z emaste $ -# -# Find the native ELF format for a host platform by compiling a -# test object and examining the resulting object. -# -# This script is used if there is no easy way to determine this -# information statically at compile time. - -program=`basename $0` -tmp_c=`mktemp -u nefXXXXXX`.c -tmp_o=`echo ${tmp_c} | sed -e 's/.c$/.o/'` - -trap "rm -f ${tmp_c} ${tmp_o}" 0 1 2 3 15 - -touch ${tmp_c} - -echo "/* Generated by ${program} on `date` */" - -cc -c ${tmp_c} -o ${tmp_o} -LC_ALL=C readelf -h ${tmp_o} | awk ' -$1 ~ "Class:" { - sub("ELF","",$2); elfclass = $2; - } -$1 ~ "Data:" { - if (match($0, "little")) { - elfdata = "LSB"; - } else { - elfdata = "MSB"; - } - } -$1 ~ "Machine:" { - if (match($0, "Intel.*386")) { - elfarch = "EM_386"; - } else if (match($0, "MIPS")) { - elfarch = "EM_MIPS"; - } else if (match($0, ".*[xX]86-64")) { - elfarch = "EM_X86_64"; - } else if (match($0, "AArch64")) { - elfarch = "EM_X86_64"; - } else { - elfarch = "unknown"; - } - } -END { - printf("#define ELFTC_CLASS ELFCLASS%s\n", elfclass); - printf("#define ELFTC_ARCH %s\n", elfarch); - printf("#define ELFTC_BYTEORDER ELFDATA2%s\n", elfdata); -}' - diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/common/os.Linux.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/common/os.Linux.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/common/os.Linux.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/common/os.Linux.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -# -# Build recipes for Linux based operating systems. -# -# $Id: os.Linux.mk 2064 2011-10-26 15:12:32Z jkoshy $ - -_NATIVE_ELF_FORMAT = native-elf-format - -.BEGIN: ${_NATIVE_ELF_FORMAT}.h - -${_NATIVE_ELF_FORMAT}.h: - ${.CURDIR}/${_NATIVE_ELF_FORMAT} > ${.TARGET} || rm ${.TARGET} - -CLEANFILES += ${_NATIVE_ELF_FORMAT}.h diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/common/utarray.h libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/common/utarray.h --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/common/utarray.h 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/common/utarray.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,237 +0,0 @@ -/* -Copyright (c) 2008-2013, Troy D. Hanson http://uthash.sourceforge.net -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* $Id: utarray.h 2694 2012-11-24 17:11:58Z kaiwang27 $ */ - -/* a dynamic array implementation using macros - * see http://uthash.sourceforge.net/utarray - */ -#ifndef UTARRAY_H -#define UTARRAY_H - -#define UTARRAY_VERSION 1.9.7 - -#ifdef __GNUC__ -#define _UNUSED_ __attribute__ ((__unused__)) -#else -#define _UNUSED_ -#endif - -#include /* size_t */ -#include /* memset, etc */ -#include /* exit */ - -#ifndef oom -#define oom() exit(-1) -#endif - -typedef void (ctor_f)(void *dst, const void *src); -typedef void (dtor_f)(void *elt); -typedef void (init_f)(void *elt); -typedef struct { - size_t sz; - init_f *init; - ctor_f *copy; - dtor_f *dtor; -} UT_icd; - -typedef struct { - unsigned i,n;/* i: index of next available slot, n: num slots */ - UT_icd icd; /* initializer, copy and destructor functions */ - char *d; /* n slots of size icd->sz*/ -} UT_array; - -#define utarray_init(a,_icd) do { \ - memset(a,0,sizeof(UT_array)); \ - (a)->icd=*_icd; \ -} while(0) - -#define utarray_done(a) do { \ - if ((a)->n) { \ - if ((a)->icd.dtor) { \ - size_t _ut_i; \ - for(_ut_i=0; _ut_i < (a)->i; _ut_i++) { \ - (a)->icd.dtor(utarray_eltptr(a,_ut_i)); \ - } \ - } \ - free((a)->d); \ - } \ - (a)->n=0; \ -} while(0) - -#define utarray_new(a,_icd) do { \ - a=(UT_array*)malloc(sizeof(UT_array)); \ - utarray_init(a,_icd); \ -} while(0) - -#define utarray_free(a) do { \ - utarray_done(a); \ - free(a); \ -} while(0) - -#define utarray_reserve(a,by) do { \ - if (((a)->i+by) > ((a)->n)) { \ - while(((a)->i+by) > ((a)->n)) { (a)->n = ((a)->n ? (2*(a)->n) : 8); } \ - if ( ((a)->d=(char*)realloc((a)->d, (a)->n*(a)->icd.sz)) == NULL) oom(); \ - } \ -} while(0) - -#define utarray_push_back(a,p) do { \ - utarray_reserve(a,1); \ - if ((a)->icd.copy) { (a)->icd.copy( _utarray_eltptr(a,(a)->i++), p); } \ - else { memcpy(_utarray_eltptr(a,(a)->i++), p, (a)->icd.sz); }; \ -} while(0) - -#define utarray_pop_back(a) do { \ - if ((a)->icd.dtor) { (a)->icd.dtor( _utarray_eltptr(a,--((a)->i))); } \ - else { (a)->i--; } \ -} while(0) - -#define utarray_extend_back(a) do { \ - utarray_reserve(a,1); \ - if ((a)->icd.init) { (a)->icd.init(_utarray_eltptr(a,(a)->i)); } \ - else { memset(_utarray_eltptr(a,(a)->i),0,(a)->icd.sz); } \ - (a)->i++; \ -} while(0) - -#define utarray_len(a) ((a)->i) - -#define utarray_eltptr(a,j) (((j) < (a)->i) ? _utarray_eltptr(a,j) : NULL) -#define _utarray_eltptr(a,j) ((char*)((a)->d + ((a)->icd.sz*(j) ))) - -#define utarray_insert(a,p,j) do { \ - utarray_reserve(a,1); \ - if (j > (a)->i) break; \ - if ((j) < (a)->i) { \ - memmove( _utarray_eltptr(a,(j)+1), _utarray_eltptr(a,j), \ - ((a)->i - (j))*((a)->icd.sz)); \ - } \ - if ((a)->icd.copy) { (a)->icd.copy( _utarray_eltptr(a,j), p); } \ - else { memcpy(_utarray_eltptr(a,j), p, (a)->icd.sz); }; \ - (a)->i++; \ -} while(0) - -#define utarray_inserta(a,w,j) do { \ - if (utarray_len(w) == 0) break; \ - if (j > (a)->i) break; \ - utarray_reserve(a,utarray_len(w)); \ - if ((j) < (a)->i) { \ - memmove(_utarray_eltptr(a,(j)+utarray_len(w)), \ - _utarray_eltptr(a,j), \ - ((a)->i - (j))*((a)->icd.sz)); \ - } \ - if ((a)->icd.copy) { \ - size_t _ut_i; \ - for(_ut_i=0;_ut_i<(w)->i;_ut_i++) { \ - (a)->icd.copy(_utarray_eltptr(a,j+_ut_i), _utarray_eltptr(w,_ut_i)); \ - } \ - } else { \ - memcpy(_utarray_eltptr(a,j), _utarray_eltptr(w,0), \ - utarray_len(w)*((a)->icd.sz)); \ - } \ - (a)->i += utarray_len(w); \ -} while(0) - -#define utarray_resize(dst,num) do { \ - size_t _ut_i; \ - if (dst->i > (size_t)(num)) { \ - if ((dst)->icd.dtor) { \ - for(_ut_i=num; _ut_i < dst->i; _ut_i++) { \ - (dst)->icd.dtor(utarray_eltptr(dst,_ut_i)); \ - } \ - } \ - } else if (dst->i < (size_t)(num)) { \ - utarray_reserve(dst,num-dst->i); \ - if ((dst)->icd.init) { \ - for(_ut_i=dst->i; _ut_i < num; _ut_i++) { \ - (dst)->icd.init(utarray_eltptr(dst,_ut_i)); \ - } \ - } else { \ - memset(_utarray_eltptr(dst,dst->i),0,(dst)->icd.sz*(num-dst->i)); \ - } \ - } \ - dst->i = num; \ -} while(0) - -#define utarray_concat(dst,src) do { \ - utarray_inserta((dst),(src),utarray_len(dst)); \ -} while(0) - -#define utarray_erase(a,pos,len) do { \ - if ((a)->icd.dtor) { \ - size_t _ut_i; \ - for(_ut_i=0; _ut_i < len; _ut_i++) { \ - (a)->icd.dtor(utarray_eltptr((a),pos+_ut_i)); \ - } \ - } \ - if ((a)->i > (pos+len)) { \ - memmove( _utarray_eltptr((a),pos), _utarray_eltptr((a),pos+len), \ - (((a)->i)-(pos+len))*((a)->icd.sz)); \ - } \ - (a)->i -= (len); \ -} while(0) - -#define utarray_renew(a,u) do { \ - if (a) utarray_clear(a); \ - else utarray_new((a),(u)); \ -} while(0) - -#define utarray_clear(a) do { \ - if ((a)->i > 0) { \ - if ((a)->icd.dtor) { \ - size_t _ut_i; \ - for(_ut_i=0; _ut_i < (a)->i; _ut_i++) { \ - (a)->icd.dtor(utarray_eltptr(a,_ut_i)); \ - } \ - } \ - (a)->i = 0; \ - } \ -} while(0) - -#define utarray_sort(a,cmp) do { \ - qsort((a)->d, (a)->i, (a)->icd.sz, cmp); \ -} while(0) - -#define utarray_find(a,v,cmp) bsearch((v),(a)->d,(a)->i,(a)->icd.sz,cmp) - -#define utarray_front(a) (((a)->i) ? (_utarray_eltptr(a,0)) : NULL) -#define utarray_next(a,e) (((e)==NULL) ? utarray_front(a) : (((int)((a)->i) > (utarray_eltidx(a,e)+1)) ? _utarray_eltptr(a,utarray_eltidx(a,e)+1) : NULL)) -#define utarray_prev(a,e) (((e)==NULL) ? utarray_back(a) : ((utarray_eltidx(a,e) > 0) ? _utarray_eltptr(a,utarray_eltidx(a,e)-1) : NULL)) -#define utarray_back(a) (((a)->i) ? (_utarray_eltptr(a,(a)->i-1)) : NULL) -#define utarray_eltidx(a,e) (((char*)(e) >= (char*)((a)->d)) ? (int)(((char*)(e) - (char*)((a)->d))/(a)->icd.sz) : -1) - -/* last we pre-define a few icd for common utarrays of ints and strings */ -static void utarray_str_cpy(void *dst, const void *src) { - char *const*_src = (char*const*)src, **_dst = (char**)dst; - *_dst = (*_src == NULL) ? NULL : strdup(*_src); -} -static void utarray_str_dtor(void *elt) { - char **eltc = (char**)elt; - if (*eltc) free(*eltc); -} -static const UT_icd ut_str_icd _UNUSED_ = {sizeof(char*),NULL,utarray_str_cpy,utarray_str_dtor}; -static const UT_icd ut_int_icd _UNUSED_ = {sizeof(int),NULL,NULL,NULL}; -static const UT_icd ut_ptr_icd _UNUSED_ = {sizeof(void*),NULL,NULL,NULL}; - - -#endif /* UTARRAY_H */ diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/common/uthash.h libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/common/uthash.h --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/common/uthash.h 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/common/uthash.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,919 +0,0 @@ -/* -Copyright (c) 2003-2013, Troy D. Hanson http://uthash.sourceforge.net -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* $Id: uthash.h 2682 2012-11-23 22:04:22Z kaiwang27 $ */ - -#ifndef UTHASH_H -#define UTHASH_H - -#include /* memcmp,strlen */ -#include /* ptrdiff_t */ -#include /* exit() */ - -/* These macros use decltype or the earlier __typeof GNU extension. - As decltype is only available in newer compilers (VS2010 or gcc 4.3+ - when compiling c++ source) this code uses whatever method is needed - or, for VS2008 where neither is available, uses casting workarounds. */ -#ifdef _MSC_VER /* MS compiler */ -#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */ -#define DECLTYPE(x) (decltype(x)) -#else /* VS2008 or older (or VS2010 in C mode) */ -#define NO_DECLTYPE -#define DECLTYPE(x) -#endif -#else /* GNU, Sun and other compilers */ -#define DECLTYPE(x) (__typeof(x)) -#endif - -#ifdef NO_DECLTYPE -#define DECLTYPE_ASSIGN(dst,src) \ -do { \ - char **_da_dst = (char**)(&(dst)); \ - *_da_dst = (char*)(src); \ -} while(0) -#else -#define DECLTYPE_ASSIGN(dst,src) \ -do { \ - (dst) = DECLTYPE(dst)(src); \ -} while(0) -#endif - -/* a number of the hash function use uint32_t which isn't defined on win32 */ -#ifdef _MSC_VER -typedef unsigned int uint32_t; -typedef unsigned char uint8_t; -#else -#include /* uint32_t */ -#endif - -#define UTHASH_VERSION 1.9.7 - -#ifndef uthash_fatal -#define uthash_fatal(msg) exit(-1) /* fatal error (out of memory,etc) */ -#endif -#ifndef uthash_malloc -#define uthash_malloc(sz) malloc(sz) /* malloc fcn */ -#endif -#ifndef uthash_free -#define uthash_free(ptr,sz) free(ptr) /* free fcn */ -#endif - -#ifndef uthash_noexpand_fyi -#define uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */ -#endif -#ifndef uthash_expand_fyi -#define uthash_expand_fyi(tbl) /* can be defined to log expands */ -#endif - -/* initial number of buckets */ -#define HASH_INITIAL_NUM_BUCKETS 32 /* initial number of buckets */ -#define HASH_INITIAL_NUM_BUCKETS_LOG2 5 /* lg2 of initial number of buckets */ -#define HASH_BKT_CAPACITY_THRESH 10 /* expand when bucket count reaches */ - -/* calculate the element whose hash handle address is hhe */ -#define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho))) - -#define HASH_FIND(hh,head,keyptr,keylen,out) \ -do { \ - unsigned _hf_bkt,_hf_hashv; \ - out=NULL; \ - if (head) { \ - HASH_FCN(keyptr,keylen, (head)->hh.tbl->num_buckets, _hf_hashv, _hf_bkt); \ - if (HASH_BLOOM_TEST((head)->hh.tbl, _hf_hashv)) { \ - HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], \ - keyptr,keylen,out); \ - } \ - } \ -} while (0) - -#ifdef HASH_BLOOM -#define HASH_BLOOM_BITLEN (1ULL << HASH_BLOOM) -#define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8) + ((HASH_BLOOM_BITLEN%8) ? 1:0) -#define HASH_BLOOM_MAKE(tbl) \ -do { \ - (tbl)->bloom_nbits = HASH_BLOOM; \ - (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN); \ - if (!((tbl)->bloom_bv)) { uthash_fatal( "out of memory"); } \ - memset((tbl)->bloom_bv, 0, HASH_BLOOM_BYTELEN); \ - (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE; \ -} while (0) - -#define HASH_BLOOM_FREE(tbl) \ -do { \ - uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \ -} while (0) - -#define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8] |= (1U << ((idx)%8))) -#define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8] & (1U << ((idx)%8))) - -#define HASH_BLOOM_ADD(tbl,hashv) \ - HASH_BLOOM_BITSET((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1))) - -#define HASH_BLOOM_TEST(tbl,hashv) \ - HASH_BLOOM_BITTEST((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1))) - -#else -#define HASH_BLOOM_MAKE(tbl) -#define HASH_BLOOM_FREE(tbl) -#define HASH_BLOOM_ADD(tbl,hashv) -#define HASH_BLOOM_TEST(tbl,hashv) (1) -#endif - -#define HASH_MAKE_TABLE(hh,head) \ -do { \ - (head)->hh.tbl = (UT_hash_table*)uthash_malloc( \ - sizeof(UT_hash_table)); \ - if (!((head)->hh.tbl)) { uthash_fatal( "out of memory"); } \ - memset((head)->hh.tbl, 0, sizeof(UT_hash_table)); \ - (head)->hh.tbl->tail = &((head)->hh); \ - (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \ - (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \ - (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \ - (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \ - HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ - if (! (head)->hh.tbl->buckets) { uthash_fatal( "out of memory"); } \ - memset((head)->hh.tbl->buckets, 0, \ - HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ - HASH_BLOOM_MAKE((head)->hh.tbl); \ - (head)->hh.tbl->signature = HASH_SIGNATURE; \ -} while(0) - -#define HASH_ADD(hh,head,fieldname,keylen_in,add) \ - HASH_ADD_KEYPTR(hh,head,&((add)->fieldname),keylen_in,add) - -#define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \ -do { \ - unsigned _ha_bkt; \ - (add)->hh.next = NULL; \ - (add)->hh.key = (char*)keyptr; \ - (add)->hh.keylen = (unsigned)keylen_in; \ - if (!(head)) { \ - head = (add); \ - (head)->hh.prev = NULL; \ - HASH_MAKE_TABLE(hh,head); \ - } else { \ - (head)->hh.tbl->tail->next = (add); \ - (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \ - (head)->hh.tbl->tail = &((add)->hh); \ - } \ - (head)->hh.tbl->num_items++; \ - (add)->hh.tbl = (head)->hh.tbl; \ - HASH_FCN(keyptr,keylen_in, (head)->hh.tbl->num_buckets, \ - (add)->hh.hashv, _ha_bkt); \ - HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt],&(add)->hh); \ - HASH_BLOOM_ADD((head)->hh.tbl,(add)->hh.hashv); \ - HASH_EMIT_KEY(hh,head,keyptr,keylen_in); \ - HASH_FSCK(hh,head); \ -} while(0) - -#define HASH_TO_BKT( hashv, num_bkts, bkt ) \ -do { \ - bkt = ((hashv) & ((num_bkts) - 1)); \ -} while(0) - -/* delete "delptr" from the hash table. - * "the usual" patch-up process for the app-order doubly-linked-list. - * The use of _hd_hh_del below deserves special explanation. - * These used to be expressed using (delptr) but that led to a bug - * if someone used the same symbol for the head and deletee, like - * HASH_DELETE(hh,users,users); - * We want that to work, but by changing the head (users) below - * we were forfeiting our ability to further refer to the deletee (users) - * in the patch-up process. Solution: use scratch space to - * copy the deletee pointer, then the latter references are via that - * scratch pointer rather than through the repointed (users) symbol. - */ -#define HASH_DELETE(hh,head,delptr) \ -do { \ - unsigned _hd_bkt; \ - struct UT_hash_handle *_hd_hh_del; \ - if ( ((delptr)->hh.prev == NULL) && ((delptr)->hh.next == NULL) ) { \ - uthash_free((head)->hh.tbl->buckets, \ - (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \ - HASH_BLOOM_FREE((head)->hh.tbl); \ - uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ - head = NULL; \ - } else { \ - _hd_hh_del = &((delptr)->hh); \ - if ((delptr) == ELMT_FROM_HH((head)->hh.tbl,(head)->hh.tbl->tail)) { \ - (head)->hh.tbl->tail = \ - (UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \ - (head)->hh.tbl->hho); \ - } \ - if ((delptr)->hh.prev) { \ - ((UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \ - (head)->hh.tbl->hho))->next = (delptr)->hh.next; \ - } else { \ - DECLTYPE_ASSIGN(head,(delptr)->hh.next); \ - } \ - if (_hd_hh_del->next) { \ - ((UT_hash_handle*)((ptrdiff_t)_hd_hh_del->next + \ - (head)->hh.tbl->hho))->prev = \ - _hd_hh_del->prev; \ - } \ - HASH_TO_BKT( _hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \ - HASH_DEL_IN_BKT(hh,(head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \ - (head)->hh.tbl->num_items--; \ - } \ - HASH_FSCK(hh,head); \ -} while (0) - - -/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */ -#define HASH_FIND_STR(head,findstr,out) \ - HASH_FIND(hh,head,findstr,strlen(findstr),out) -#define HASH_ADD_STR(head,strfield,add) \ - HASH_ADD(hh,head,strfield,strlen(add->strfield),add) -#define HASH_FIND_INT(head,findint,out) \ - HASH_FIND(hh,head,findint,sizeof(int),out) -#define HASH_ADD_INT(head,intfield,add) \ - HASH_ADD(hh,head,intfield,sizeof(int),add) -#define HASH_FIND_PTR(head,findptr,out) \ - HASH_FIND(hh,head,findptr,sizeof(void *),out) -#define HASH_ADD_PTR(head,ptrfield,add) \ - HASH_ADD(hh,head,ptrfield,sizeof(void *),add) -#define HASH_DEL(head,delptr) \ - HASH_DELETE(hh,head,delptr) - -/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined. - * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined. - */ -#ifdef HASH_DEBUG -#define HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0) -#define HASH_FSCK(hh,head) \ -do { \ - unsigned _bkt_i; \ - unsigned _count, _bkt_count; \ - char *_prev; \ - struct UT_hash_handle *_thh; \ - if (head) { \ - _count = 0; \ - for( _bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; _bkt_i++) { \ - _bkt_count = 0; \ - _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \ - _prev = NULL; \ - while (_thh) { \ - if (_prev != (char*)(_thh->hh_prev)) { \ - HASH_OOPS("invalid hh_prev %p, actual %p\n", \ - _thh->hh_prev, _prev ); \ - } \ - _bkt_count++; \ - _prev = (char*)(_thh); \ - _thh = _thh->hh_next; \ - } \ - _count += _bkt_count; \ - if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \ - HASH_OOPS("invalid bucket count %d, actual %d\n", \ - (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \ - } \ - } \ - if (_count != (head)->hh.tbl->num_items) { \ - HASH_OOPS("invalid hh item count %d, actual %d\n", \ - (head)->hh.tbl->num_items, _count ); \ - } \ - /* traverse hh in app order; check next/prev integrity, count */ \ - _count = 0; \ - _prev = NULL; \ - _thh = &(head)->hh; \ - while (_thh) { \ - _count++; \ - if (_prev !=(char*)(_thh->prev)) { \ - HASH_OOPS("invalid prev %p, actual %p\n", \ - _thh->prev, _prev ); \ - } \ - _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \ - _thh = ( _thh->next ? (UT_hash_handle*)((char*)(_thh->next) + \ - (head)->hh.tbl->hho) : NULL ); \ - } \ - if (_count != (head)->hh.tbl->num_items) { \ - HASH_OOPS("invalid app item count %d, actual %d\n", \ - (head)->hh.tbl->num_items, _count ); \ - } \ - } \ -} while (0) -#else -#define HASH_FSCK(hh,head) -#endif - -/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to - * the descriptor to which this macro is defined for tuning the hash function. - * The app can #include to get the prototype for write(2). */ -#ifdef HASH_EMIT_KEYS -#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \ -do { \ - unsigned _klen = fieldlen; \ - write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \ - write(HASH_EMIT_KEYS, keyptr, fieldlen); \ -} while (0) -#else -#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) -#endif - -/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */ -#ifdef HASH_FUNCTION -#define HASH_FCN HASH_FUNCTION -#else -#define HASH_FCN HASH_JEN -#endif - -/* The Bernstein hash function, used in Perl prior to v5.6 */ -#define HASH_BER(key,keylen,num_bkts,hashv,bkt) \ -do { \ - unsigned _hb_keylen=keylen; \ - char *_hb_key=(char*)(key); \ - (hashv) = 0; \ - while (_hb_keylen--) { (hashv) = ((hashv) * 33) + *_hb_key++; } \ - bkt = (hashv) & (num_bkts-1); \ -} while (0) - - -/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at - * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */ -#define HASH_SAX(key,keylen,num_bkts,hashv,bkt) \ -do { \ - unsigned _sx_i; \ - char *_hs_key=(char*)(key); \ - hashv = 0; \ - for(_sx_i=0; _sx_i < keylen; _sx_i++) \ - hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \ - bkt = hashv & (num_bkts-1); \ -} while (0) - -#define HASH_FNV(key,keylen,num_bkts,hashv,bkt) \ -do { \ - unsigned _fn_i; \ - char *_hf_key=(char*)(key); \ - hashv = 2166136261UL; \ - for(_fn_i=0; _fn_i < keylen; _fn_i++) \ - hashv = (hashv * 16777619) ^ _hf_key[_fn_i]; \ - bkt = hashv & (num_bkts-1); \ -} while(0) - -#define HASH_OAT(key,keylen,num_bkts,hashv,bkt) \ -do { \ - unsigned _ho_i; \ - char *_ho_key=(char*)(key); \ - hashv = 0; \ - for(_ho_i=0; _ho_i < keylen; _ho_i++) { \ - hashv += _ho_key[_ho_i]; \ - hashv += (hashv << 10); \ - hashv ^= (hashv >> 6); \ - } \ - hashv += (hashv << 3); \ - hashv ^= (hashv >> 11); \ - hashv += (hashv << 15); \ - bkt = hashv & (num_bkts-1); \ -} while(0) - -#define HASH_JEN_MIX(a,b,c) \ -do { \ - a -= b; a -= c; a ^= ( c >> 13 ); \ - b -= c; b -= a; b ^= ( a << 8 ); \ - c -= a; c -= b; c ^= ( b >> 13 ); \ - a -= b; a -= c; a ^= ( c >> 12 ); \ - b -= c; b -= a; b ^= ( a << 16 ); \ - c -= a; c -= b; c ^= ( b >> 5 ); \ - a -= b; a -= c; a ^= ( c >> 3 ); \ - b -= c; b -= a; b ^= ( a << 10 ); \ - c -= a; c -= b; c ^= ( b >> 15 ); \ -} while (0) - -#define HASH_JEN(key,keylen,num_bkts,hashv,bkt) \ -do { \ - unsigned _hj_i,_hj_j,_hj_k; \ - char *_hj_key=(char*)(key); \ - hashv = 0xfeedbeef; \ - _hj_i = _hj_j = 0x9e3779b9; \ - _hj_k = (unsigned)keylen; \ - while (_hj_k >= 12) { \ - _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \ - + ( (unsigned)_hj_key[2] << 16 ) \ - + ( (unsigned)_hj_key[3] << 24 ) ); \ - _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \ - + ( (unsigned)_hj_key[6] << 16 ) \ - + ( (unsigned)_hj_key[7] << 24 ) ); \ - hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \ - + ( (unsigned)_hj_key[10] << 16 ) \ - + ( (unsigned)_hj_key[11] << 24 ) ); \ - \ - HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ - \ - _hj_key += 12; \ - _hj_k -= 12; \ - } \ - hashv += keylen; \ - switch ( _hj_k ) { \ - case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); \ - case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); \ - case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); \ - case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); \ - case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); \ - case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); \ - case 5: _hj_j += _hj_key[4]; \ - case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); \ - case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); \ - case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); \ - case 1: _hj_i += _hj_key[0]; \ - } \ - HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ - bkt = hashv & (num_bkts-1); \ -} while(0) - -/* The Paul Hsieh hash function */ -#undef get16bits -#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \ - || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__) -#define get16bits(d) (*((const uint16_t *) (d))) -#endif - -#if !defined (get16bits) -#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \ - +(uint32_t)(((const uint8_t *)(d))[0]) ) -#endif -#define HASH_SFH(key,keylen,num_bkts,hashv,bkt) \ -do { \ - char *_sfh_key=(char*)(key); \ - uint32_t _sfh_tmp, _sfh_len = keylen; \ - \ - int _sfh_rem = _sfh_len & 3; \ - _sfh_len >>= 2; \ - hashv = 0xcafebabe; \ - \ - /* Main loop */ \ - for (;_sfh_len > 0; _sfh_len--) { \ - hashv += get16bits (_sfh_key); \ - _sfh_tmp = (get16bits (_sfh_key+2) << 11) ^ hashv; \ - hashv = (hashv << 16) ^ _sfh_tmp; \ - _sfh_key += 2*sizeof (uint16_t); \ - hashv += hashv >> 11; \ - } \ - \ - /* Handle end cases */ \ - switch (_sfh_rem) { \ - case 3: hashv += get16bits (_sfh_key); \ - hashv ^= hashv << 16; \ - hashv ^= _sfh_key[sizeof (uint16_t)] << 18; \ - hashv += hashv >> 11; \ - break; \ - case 2: hashv += get16bits (_sfh_key); \ - hashv ^= hashv << 11; \ - hashv += hashv >> 17; \ - break; \ - case 1: hashv += *_sfh_key; \ - hashv ^= hashv << 10; \ - hashv += hashv >> 1; \ - } \ - \ - /* Force "avalanching" of final 127 bits */ \ - hashv ^= hashv << 3; \ - hashv += hashv >> 5; \ - hashv ^= hashv << 4; \ - hashv += hashv >> 17; \ - hashv ^= hashv << 25; \ - hashv += hashv >> 6; \ - bkt = hashv & (num_bkts-1); \ -} while(0) - -#ifdef HASH_USING_NO_STRICT_ALIASING -/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads. - * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error. - * MurmurHash uses the faster approach only on CPU's where we know it's safe. - * - * Note the preprocessor built-in defines can be emitted using: - * - * gcc -m64 -dM -E - < /dev/null (on gcc) - * cc -## a.c (where a.c is a simple test file) (Sun Studio) - */ -#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86)) -#define MUR_GETBLOCK(p,i) p[i] -#else /* non intel */ -#define MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 0x3) == 0) -#define MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 0x3) == 1) -#define MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 0x3) == 2) -#define MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 0x3) == 3) -#define WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL)) -#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__)) -#define MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24)) -#define MUR_TWO_TWO(p) ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16)) -#define MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >> 8)) -#else /* assume little endian non-intel */ -#define MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24)) -#define MUR_TWO_TWO(p) ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16)) -#define MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) << 8)) -#endif -#define MUR_GETBLOCK(p,i) (MUR_PLUS0_ALIGNED(p) ? ((p)[i]) : \ - (MUR_PLUS1_ALIGNED(p) ? MUR_THREE_ONE(p) : \ - (MUR_PLUS2_ALIGNED(p) ? MUR_TWO_TWO(p) : \ - MUR_ONE_THREE(p)))) -#endif -#define MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r)))) -#define MUR_FMIX(_h) \ -do { \ - _h ^= _h >> 16; \ - _h *= 0x85ebca6b; \ - _h ^= _h >> 13; \ - _h *= 0xc2b2ae35l; \ - _h ^= _h >> 16; \ -} while(0) - -#define HASH_MUR(key,keylen,num_bkts,hashv,bkt) \ -do { \ - const uint8_t *_mur_data = (const uint8_t*)(key); \ - const int _mur_nblocks = (keylen) / 4; \ - uint32_t _mur_h1 = 0xf88D5353; \ - uint32_t _mur_c1 = 0xcc9e2d51; \ - uint32_t _mur_c2 = 0x1b873593; \ - uint32_t _mur_k1 = 0; \ - const uint8_t *_mur_tail; \ - const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+_mur_nblocks*4); \ - int _mur_i; \ - for(_mur_i = -_mur_nblocks; _mur_i; _mur_i++) { \ - _mur_k1 = MUR_GETBLOCK(_mur_blocks,_mur_i); \ - _mur_k1 *= _mur_c1; \ - _mur_k1 = MUR_ROTL32(_mur_k1,15); \ - _mur_k1 *= _mur_c2; \ - \ - _mur_h1 ^= _mur_k1; \ - _mur_h1 = MUR_ROTL32(_mur_h1,13); \ - _mur_h1 = _mur_h1*5+0xe6546b64; \ - } \ - _mur_tail = (const uint8_t*)(_mur_data + _mur_nblocks*4); \ - _mur_k1=0; \ - switch((keylen) & 3) { \ - case 3: _mur_k1 ^= _mur_tail[2] << 16; \ - case 2: _mur_k1 ^= _mur_tail[1] << 8; \ - case 1: _mur_k1 ^= _mur_tail[0]; \ - _mur_k1 *= _mur_c1; \ - _mur_k1 = MUR_ROTL32(_mur_k1,15); \ - _mur_k1 *= _mur_c2; \ - _mur_h1 ^= _mur_k1; \ - } \ - _mur_h1 ^= (keylen); \ - MUR_FMIX(_mur_h1); \ - hashv = _mur_h1; \ - bkt = hashv & (num_bkts-1); \ -} while(0) -#endif /* HASH_USING_NO_STRICT_ALIASING */ - -/* key comparison function; return 0 if keys equal */ -#define HASH_KEYCMP(a,b,len) memcmp(a,b,len) - -/* iterate over items in a known bucket to find desired item */ -#define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,out) \ -do { \ - if (head.hh_head) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,head.hh_head)); \ - else out=NULL; \ - while (out) { \ - if ((out)->hh.keylen == keylen_in) { \ - if ((HASH_KEYCMP((out)->hh.key,keyptr,keylen_in)) == 0) break; \ - } \ - if ((out)->hh.hh_next) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,(out)->hh.hh_next)); \ - else out = NULL; \ - } \ -} while(0) - -/* add an item to a bucket */ -#define HASH_ADD_TO_BKT(head,addhh) \ -do { \ - head.count++; \ - (addhh)->hh_next = head.hh_head; \ - (addhh)->hh_prev = NULL; \ - if (head.hh_head) { (head).hh_head->hh_prev = (addhh); } \ - (head).hh_head=addhh; \ - if (head.count >= ((head.expand_mult+1) * HASH_BKT_CAPACITY_THRESH) \ - && (addhh)->tbl->noexpand != 1) { \ - HASH_EXPAND_BUCKETS((addhh)->tbl); \ - } \ -} while(0) - -/* remove an item from a given bucket */ -#define HASH_DEL_IN_BKT(hh,head,hh_del) \ - (head).count--; \ - if ((head).hh_head == hh_del) { \ - (head).hh_head = hh_del->hh_next; \ - } \ - if (hh_del->hh_prev) { \ - hh_del->hh_prev->hh_next = hh_del->hh_next; \ - } \ - if (hh_del->hh_next) { \ - hh_del->hh_next->hh_prev = hh_del->hh_prev; \ - } - -/* Bucket expansion has the effect of doubling the number of buckets - * and redistributing the items into the new buckets. Ideally the - * items will distribute more or less evenly into the new buckets - * (the extent to which this is true is a measure of the quality of - * the hash function as it applies to the key domain). - * - * With the items distributed into more buckets, the chain length - * (item count) in each bucket is reduced. Thus by expanding buckets - * the hash keeps a bound on the chain length. This bounded chain - * length is the essence of how a hash provides constant time lookup. - * - * The calculation of tbl->ideal_chain_maxlen below deserves some - * explanation. First, keep in mind that we're calculating the ideal - * maximum chain length based on the *new* (doubled) bucket count. - * In fractions this is just n/b (n=number of items,b=new num buckets). - * Since the ideal chain length is an integer, we want to calculate - * ceil(n/b). We don't depend on floating point arithmetic in this - * hash, so to calculate ceil(n/b) with integers we could write - * - * ceil(n/b) = (n/b) + ((n%b)?1:0) - * - * and in fact a previous version of this hash did just that. - * But now we have improved things a bit by recognizing that b is - * always a power of two. We keep its base 2 log handy (call it lb), - * so now we can write this with a bit shift and logical AND: - * - * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0) - * - */ -#define HASH_EXPAND_BUCKETS(tbl) \ -do { \ - unsigned _he_bkt; \ - unsigned _he_bkt_i; \ - struct UT_hash_handle *_he_thh, *_he_hh_nxt; \ - UT_hash_bucket *_he_new_buckets, *_he_newbkt; \ - _he_new_buckets = (UT_hash_bucket*)uthash_malloc( \ - 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ - if (!_he_new_buckets) { uthash_fatal( "out of memory"); } \ - memset(_he_new_buckets, 0, \ - 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ - tbl->ideal_chain_maxlen = \ - (tbl->num_items >> (tbl->log2_num_buckets+1)) + \ - ((tbl->num_items & ((tbl->num_buckets*2)-1)) ? 1 : 0); \ - tbl->nonideal_items = 0; \ - for(_he_bkt_i = 0; _he_bkt_i < tbl->num_buckets; _he_bkt_i++) \ - { \ - _he_thh = tbl->buckets[ _he_bkt_i ].hh_head; \ - while (_he_thh) { \ - _he_hh_nxt = _he_thh->hh_next; \ - HASH_TO_BKT( _he_thh->hashv, tbl->num_buckets*2, _he_bkt); \ - _he_newbkt = &(_he_new_buckets[ _he_bkt ]); \ - if (++(_he_newbkt->count) > tbl->ideal_chain_maxlen) { \ - tbl->nonideal_items++; \ - _he_newbkt->expand_mult = _he_newbkt->count / \ - tbl->ideal_chain_maxlen; \ - } \ - _he_thh->hh_prev = NULL; \ - _he_thh->hh_next = _he_newbkt->hh_head; \ - if (_he_newbkt->hh_head) _he_newbkt->hh_head->hh_prev = \ - _he_thh; \ - _he_newbkt->hh_head = _he_thh; \ - _he_thh = _he_hh_nxt; \ - } \ - } \ - uthash_free( tbl->buckets, tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \ - tbl->num_buckets *= 2; \ - tbl->log2_num_buckets++; \ - tbl->buckets = _he_new_buckets; \ - tbl->ineff_expands = (tbl->nonideal_items > (tbl->num_items >> 1)) ? \ - (tbl->ineff_expands+1) : 0; \ - if (tbl->ineff_expands > 1) { \ - tbl->noexpand=1; \ - uthash_noexpand_fyi(tbl); \ - } \ - uthash_expand_fyi(tbl); \ -} while(0) - - -/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */ -/* Note that HASH_SORT assumes the hash handle name to be hh. - * HASH_SRT was added to allow the hash handle name to be passed in. */ -#define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn) -#define HASH_SRT(hh,head,cmpfcn) \ -do { \ - unsigned _hs_i; \ - unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \ - struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \ - if (head) { \ - _hs_insize = 1; \ - _hs_looping = 1; \ - _hs_list = &((head)->hh); \ - while (_hs_looping) { \ - _hs_p = _hs_list; \ - _hs_list = NULL; \ - _hs_tail = NULL; \ - _hs_nmerges = 0; \ - while (_hs_p) { \ - _hs_nmerges++; \ - _hs_q = _hs_p; \ - _hs_psize = 0; \ - for ( _hs_i = 0; _hs_i < _hs_insize; _hs_i++ ) { \ - _hs_psize++; \ - _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ - ((void*)((char*)(_hs_q->next) + \ - (head)->hh.tbl->hho)) : NULL); \ - if (! (_hs_q) ) break; \ - } \ - _hs_qsize = _hs_insize; \ - while ((_hs_psize > 0) || ((_hs_qsize > 0) && _hs_q )) { \ - if (_hs_psize == 0) { \ - _hs_e = _hs_q; \ - _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ - ((void*)((char*)(_hs_q->next) + \ - (head)->hh.tbl->hho)) : NULL); \ - _hs_qsize--; \ - } else if ( (_hs_qsize == 0) || !(_hs_q) ) { \ - _hs_e = _hs_p; \ - _hs_p = (UT_hash_handle*)((_hs_p->next) ? \ - ((void*)((char*)(_hs_p->next) + \ - (head)->hh.tbl->hho)) : NULL); \ - _hs_psize--; \ - } else if (( \ - cmpfcn(DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_p)), \ - DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_q))) \ - ) <= 0) { \ - _hs_e = _hs_p; \ - _hs_p = (UT_hash_handle*)((_hs_p->next) ? \ - ((void*)((char*)(_hs_p->next) + \ - (head)->hh.tbl->hho)) : NULL); \ - _hs_psize--; \ - } else { \ - _hs_e = _hs_q; \ - _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ - ((void*)((char*)(_hs_q->next) + \ - (head)->hh.tbl->hho)) : NULL); \ - _hs_qsize--; \ - } \ - if ( _hs_tail ) { \ - _hs_tail->next = ((_hs_e) ? \ - ELMT_FROM_HH((head)->hh.tbl,_hs_e) : NULL); \ - } else { \ - _hs_list = _hs_e; \ - } \ - _hs_e->prev = ((_hs_tail) ? \ - ELMT_FROM_HH((head)->hh.tbl,_hs_tail) : NULL); \ - _hs_tail = _hs_e; \ - } \ - _hs_p = _hs_q; \ - } \ - _hs_tail->next = NULL; \ - if ( _hs_nmerges <= 1 ) { \ - _hs_looping=0; \ - (head)->hh.tbl->tail = _hs_tail; \ - DECLTYPE_ASSIGN(head,ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \ - } \ - _hs_insize *= 2; \ - } \ - HASH_FSCK(hh,head); \ - } \ -} while (0) - -/* This function selects items from one hash into another hash. - * The end result is that the selected items have dual presence - * in both hashes. There is no copy of the items made; rather - * they are added into the new hash through a secondary hash - * hash handle that must be present in the structure. */ -#define HASH_SELECT(hh_dst, dst, hh_src, src, cond) \ -do { \ - unsigned _src_bkt, _dst_bkt; \ - void *_last_elt=NULL, *_elt; \ - UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \ - ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \ - if (src) { \ - for(_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \ - for(_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \ - _src_hh; \ - _src_hh = _src_hh->hh_next) { \ - _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \ - if (cond(_elt)) { \ - _dst_hh = (UT_hash_handle*)(((char*)_elt) + _dst_hho); \ - _dst_hh->key = _src_hh->key; \ - _dst_hh->keylen = _src_hh->keylen; \ - _dst_hh->hashv = _src_hh->hashv; \ - _dst_hh->prev = _last_elt; \ - _dst_hh->next = NULL; \ - if (_last_elt_hh) { _last_elt_hh->next = _elt; } \ - if (!dst) { \ - DECLTYPE_ASSIGN(dst,_elt); \ - HASH_MAKE_TABLE(hh_dst,dst); \ - } else { \ - _dst_hh->tbl = (dst)->hh_dst.tbl; \ - } \ - HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \ - HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt],_dst_hh); \ - (dst)->hh_dst.tbl->num_items++; \ - _last_elt = _elt; \ - _last_elt_hh = _dst_hh; \ - } \ - } \ - } \ - } \ - HASH_FSCK(hh_dst,dst); \ -} while (0) - -#define HASH_CLEAR(hh,head) \ -do { \ - if (head) { \ - uthash_free((head)->hh.tbl->buckets, \ - (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \ - HASH_BLOOM_FREE((head)->hh.tbl); \ - uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ - (head)=NULL; \ - } \ -} while(0) - -#ifdef NO_DECLTYPE -#define HASH_ITER(hh,head,el,tmp) \ -for((el)=(head), (*(char**)(&(tmp)))=(char*)((head)?(head)->hh.next:NULL); \ - el; (el)=(tmp),(*(char**)(&(tmp)))=(char*)((tmp)?(tmp)->hh.next:NULL)) -#else -#define HASH_ITER(hh,head,el,tmp) \ -for((el)=(head),(tmp)=DECLTYPE(el)((head)?(head)->hh.next:NULL); \ - el; (el)=(tmp),(tmp)=DECLTYPE(el)((tmp)?(tmp)->hh.next:NULL)) -#endif - -/* obtain a count of items in the hash */ -#define HASH_COUNT(head) HASH_CNT(hh,head) -#define HASH_CNT(hh,head) ((head)?((head)->hh.tbl->num_items):0) - -typedef struct UT_hash_bucket { - struct UT_hash_handle *hh_head; - unsigned count; - - /* expand_mult is normally set to 0. In this situation, the max chain length - * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If - * the bucket's chain exceeds this length, bucket expansion is triggered). - * However, setting expand_mult to a non-zero value delays bucket expansion - * (that would be triggered by additions to this particular bucket) - * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH. - * (The multiplier is simply expand_mult+1). The whole idea of this - * multiplier is to reduce bucket expansions, since they are expensive, in - * situations where we know that a particular bucket tends to be overused. - * It is better to let its chain length grow to a longer yet-still-bounded - * value, than to do an O(n) bucket expansion too often. - */ - unsigned expand_mult; - -} UT_hash_bucket; - -/* random signature used only to find hash tables in external analysis */ -#define HASH_SIGNATURE 0xa0111fe1 -#define HASH_BLOOM_SIGNATURE 0xb12220f2 - -typedef struct UT_hash_table { - UT_hash_bucket *buckets; - unsigned num_buckets, log2_num_buckets; - unsigned num_items; - struct UT_hash_handle *tail; /* tail hh in app order, for fast append */ - ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */ - - /* in an ideal situation (all buckets used equally), no bucket would have - * more than ceil(#items/#buckets) items. that's the ideal chain length. */ - unsigned ideal_chain_maxlen; - - /* nonideal_items is the number of items in the hash whose chain position - * exceeds the ideal chain maxlen. these items pay the penalty for an uneven - * hash distribution; reaching them in a chain traversal takes >ideal steps */ - unsigned nonideal_items; - - /* ineffective expands occur when a bucket doubling was performed, but - * afterward, more than half the items in the hash had nonideal chain - * positions. If this happens on two consecutive expansions we inhibit any - * further expansion, as it's not helping; this happens when the hash - * function isn't a good fit for the key domain. When expansion is inhibited - * the hash will still work, albeit no longer in constant time. */ - unsigned ineff_expands, noexpand; - - uint32_t signature; /* used only to find hash tables in external analysis */ -#ifdef HASH_BLOOM - uint32_t bloom_sig; /* used only to test bloom exists in external analysis */ - uint8_t *bloom_bv; - char bloom_nbits; -#endif - -} UT_hash_table; - -typedef struct UT_hash_handle { - struct UT_hash_table *tbl; - void *prev; /* prev element in app order */ - void *next; /* next element in app order */ - struct UT_hash_handle *hh_prev; /* previous hh in bucket order */ - struct UT_hash_handle *hh_next; /* next hh in bucket order */ - void *key; /* ptr to enclosing struct's key */ - unsigned keylen; /* enclosing struct's key len */ - unsigned hashv; /* result of hash-fcn(key) */ -} UT_hash_handle; - -#endif /* UTHASH_H */ diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,611 +0,0 @@ -.\" Copyright (c) 2006-2008,2011 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf.3 3195 2015-05-12 17:22:19Z emaste $ -.\" -.Dd July 28, 2014 -.Os -.Dt ELF 3 -.Sh NAME -.Nm elf -.Nd API for manipulating ELF objects -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Sh DESCRIPTION -The -.Lb libelf -provides functions that allow an application to read and manipulate -ELF object files, and to read -.Xr ar 1 -archives. -The library allows the manipulation of ELF objects in a byte ordering -and word-size independent way, allowing an application to read and -create ELF objects for 32 and 64 bit architectures and for little- -and big-endian machines. -The library is capable of processing ELF objects that use extended -section numbering. -.Pp -This manual page serves to provide an overview of the functionality in -the ELF library. -Further information may found in the manual pages for individual -.Xr ELF 3 -functions that comprise the library. -.Ss ELF Concepts -As described in -.Xr elf 5 , -ELF files contain several data structures that are laid out in a -specific way. -ELF files begin with an -.Dq Executable Header , -and may contain an optional -.Dq Program Header Table , -and optional data in the form of ELF -.Dq sections . -A -.Dq Section Header Table -describes the content of the data in these sections. -.Pp -ELF objects have an associated -.Dq "ELF class" -which denotes the natural machine word size for the architecture -the object is associated with. -Objects for 32 bit architectures have an ELF class of -.Dv ELFCLASS32 . -Objects for 64 bit architectures have an ELF class of -.Dv ELFCLASS64 . -.Pp -ELF objects also have an associated -.Dq endianness -which denotes the endianness of the machine architecture associated -with the object. -This may be -.Dv ELFDATA2LSB -for little-endian architectures and -.Dv ELFDATA2MSB -for big-endian architectures. -.Pp -ELF objects are also associated with an API version number. -This version number determines the layout of the individual components -of an ELF file and the semantics associated with these. -.Ss Data Representation And Translation -The -.Xr ELF 3 -library distinguishes between -.Dq native -representations of ELF data structures and their -.Dq file -representations. -.Pp -An application would work with ELF data in its -.Dq native -representation, i.e., using the native byteorder and alignment mandated -by the processor the application is running on. -The -.Dq file -representation of the same data could use a different byte ordering -and follow different constraints on object alignment than these native -constraints. -.Pp -Accordingly, the -.Xr ELF 3 -library offers translation facilities -.Xr ( elf32_xlatetof 3 , -.Xr elf32_xlatetom 3 , -.Xr elf64_xlatetof 3 -and -.Xr elf64_xlatetom 3 ) -to and from these -representations and also provides higher-level APIs that retrieve and store -data from the ELF object in a transparent manner. -.Ss Library Working Version -Conceptually, there are three version numbers associated with an -application using the ELF library to manipulate ELF objects: -.Bl -bullet -compact -offset indent -.It -The ELF version that the application was compiled against. -This version determines the ABI expected by the application. -.It -The ELF version of the ELF object being manipulated by the -application through the ELF library. -.It -The ELF version (or set of versions) supported by the ELF library itself. -.El -.Pp -In order to facilitate working with ELF objects of differing versions, -the ELF library requires the application to call the -.Fn elf_version -function before invoking many of its operations, in order to inform -the library of the application's desired working version. -.Pp -In the current implementation, all three versions have to be -.Dv EV_CURRENT . -.Ss Namespace use -The ELF library uses the following prefixes: -.Bl -tag -width "ELF_F_*" -.It Dv elf_ -Used for class-independent functions. -.It Dv elf32_ -Used for functions working with 32 bit ELF objects. -.It Dv elf64_ -Used for functions working with 64 bit ELF objects. -.It Dv Elf_ -Used for class-independent data types. -.It Dv ELF_C_ -Used for command values used in a few functions. -These symbols are defined as members of the -.Vt Dv Elf_Cmd -enumeration. -.It Dv ELF_E_ -Used for error numbers. -.It Dv ELF_F_ -Used for flags. -.It Dv ELF_K_ -These constants define the kind of file associated with an ELF -descriptor. -See -.Xr elf_kind 3 . -The symbols are defined by the -.Vt Elf_Kind -enumeration. -.It Dv ELF_T_ -These values are defined by the -.Vt Elf_Type -enumeration, and denote the types of ELF data structures -that can be present in an ELF object. -.El -.Pp -In addition, the library uses symbols with prefixes -.Dv _ELF -and -.Dv _libelf -for its internal use. -.Ss Descriptors -Applications communicate with the library using descriptors. -These are: -.Bl -tag -width ".Vt Elf_Data" -.It Vt Elf -An -.Vt Elf -descriptor represents an ELF object or an -.Xr ar 1 -archive. -It is allocated using one of the -.Fn elf_begin -or -.Fn elf_memory -functions. -An -.Vt Elf -descriptor can be used to read and write data to an ELF file. -An -.Vt Elf -descriptor can be associated with zero or more -.Vt Elf_Scn -section descriptors. -.Pp -Given an ELF descriptor, the application may retrieve the ELF -object's class-dependent -.Dq "Executable Header" -structures using the -.Fn elf32_getehdr -or -.Fn elf64_getehdr -functions. -A new Ehdr structure may be allocated using the -.Fn elf64_newehdr -or -.Fn elf64_newehdr -functions. -.Pp -The -.Dq "Program Header Table" -associated with an ELF descriptor may be allocated using the -.Fn elf32_getphdr -or -.Fn elf64_getphdr -functions. -A new program header table may be allocated or an existing table -resized using the -.Fn elf32_newphdr -or -.Fn elf64_newphdr -functions. -.Pp -The -.Vt Elf -structure is opaque and has no members visible to the -application. -.\" TODO describe the Elf_Arhdr and Elf_Arsym structures. -.It Vt Elf_Data -An -.Vt Elf_Data -data structure describes an individual chunk of a ELF file as -represented in memory. -It has the following application-visible members: -.Bl -tag -width ".Vt unsigned int d_version" -compact -.It Vt "uint64_t d_align" -The in-file alignment of the data buffer within its containing ELF section. -This value must be non-zero and a power of two. -.It Vt "void *d_buf" -A pointer to data in memory. -.It Vt "uint64_t d_off" -The offset within the containing section where this descriptor's data -would be placed. -This field will be computed by the library unless the application -requests full control of the ELF object's layout. -.It Vt "uint64_t d_size" -The number of bytes of data in this descriptor. -.It Vt "Elf_Type d_type" -The ELF type (see below) of the data in this descriptor. -.It Vt "unsigned int d_version" -The operating version for the data in this buffer. -.El -.Pp -.Vt Elf_Data -descriptors are usually associated with -.Vt Elf_Scn -descriptors. -Existing data descriptors associated with an ELF section may be -structures are retrieved using the -.Fn elf_getdata -and -.Fn elf_rawdata -functions. -The -.Fn elf_newdata -function may be used to attach new data descriptors to an ELF section. -.It Vt Elf_Scn -.Vt Elf_Scn -descriptors represent a section in an ELF object. -.Pp -They are retrieved using the -.Fn elf_getscn -function. -An application may iterate through the existing sections of an ELF -object using the -.Fn elf_nextscn -function. -New sections may be allocated using the -.Fn elf_newscn -function. -.Pp -The -.Vt Elf_Scn -descriptor is opaque and contains no application modifiable fields. -.El -.Ss Supported Elf Types -The following ELF datatypes are supported by the library. -.Pp -.Bl -tag -width ".Dv ELF_T_SYMINFO" -compact -.It Dv ELF_T_ADDR -Machine addresses. -.It Dv ELF_T_BYTE -Byte data. -The library will not attempt to translate byte data. -.It Dv ELF_T_CAP -Software and hardware capability records. -.It Dv ELF_T_DYN -Records used in a section of type -.Dv SHT_DYNAMIC . -.It Dv ELF_T_EHDR -ELF executable header. -.It Dv ELF_T_GNUHASH -GNU-style hash tables. -.It Dv ELF_T_HALF -16-bit unsigned words. -.It Dv ELF_T_LWORD -64 bit unsigned words. -.It Dv ELF_T_MOVE -ELF Move records. -.\".It Dv ELF_T_MOVEP -.\" As yet unsupported. -.It Dv ELF_T_NOTE -ELF Note structures. -.It Dv ELF_T_OFF -File offsets. -.It Dv ELF_T_PHDR -ELF program header table entries. -.It Dv ELF_T_REL -ELF relocation entries. -.It Dv ELF_T_RELA -ELF relocation entries with addends. -.It Dv ELF_T_SHDR -ELF section header entries. -.It Dv ELF_T_SWORD -Signed 32-bit words. -.It Dv ELF_T_SXWORD -Signed 64-bit words. -.It Dv ELF_T_SYMINFO -ELF symbol information. -.It Dv ELF_T_SYM -ELF symbol table entries. -.It Dv ELF_T_VDEF -Symbol version definition records. -.It Dv ELF_T_VNEED -Symbol version requirement records. -.It Dv ELF_T_WORD -Unsigned 32-bit words. -.It Dv ELF_T_XWORD -Unsigned 64-bit words. -.El -.Pp -The symbol -.Dv ELF_T_NUM -denotes the number of Elf types known to the library. -.Pp -The following table shows the mapping between ELF section types -defined in -.Xr elf 5 -and the types supported by the library. -.Bl -column ".Dv SHT_PREINIT_ARRAY" ".Dv ELF_T_SYMINFO" -.It Em Section Type Ta Em "Library Type" Ta Em Description -.It Dv SHT_DYNAMIC Ta Dv ELF_T_DYN Ta Xo -.Sq .dynamic -section entries. -.Xc -.It Dv SHT_DYNSYM Ta Dv ELF_T_SYM Ta Symbols for dynamic linking. -.It Dv SHT_FINI_ARRAY Ta Dv ELF_T_ADDR Ta Termination function pointers. -.It Dv SHT_GNU_HASH Ta Dv ELF_T_GNUHASH Ta GNU hash sections. -.It Dv SHT_GNU_LIBLIST Ta Dv ELF_T_WORD Ta List of libraries to be pre-linked. -.It Dv SHT_GNU_verdef Ta Dv ELF_T_VDEF Ta Symbol version definitions. -.It Dv SHT_GNU_verneed Ta Dv ELF_T_VNEED Ta Symbol versioning requirements. -.It Dv SHT_GNU_versym Ta Dv ELF_T_HALF Ta Version symbols. -.It Dv SHT_GROUP Ta Dv ELF_T_WORD Ta Section group marker. -.It Dv SHT_HASH Ta Dv ELF_T_HASH Ta Symbol hashes. -.It Dv SHT_INIT_ARRAY Ta Dv ELF_T_ADDR Ta Initialization function pointers. -.It Dv SHT_NOBITS Ta Dv ELF_T_BYTE Ta Xo -Empty sections. -See -.Xr elf 5 . -.Xc -.It Dv SHT_NOTE Ta Dv ELF_T_NOTE Ta ELF note records. -.It Dv SHT_PREINIT_ARRAY Ta Dv ELF_T_ADDR Ta Pre-initialization function pointers. -.It Dv SHT_PROGBITS Ta Dv ELF_T_BYTE Ta Machine code. -.It Dv SHT_REL Ta Dv ELF_T_REL Ta ELF relocation records. -.It Dv SHT_RELA Ta Dv ELF_T_RELA Ta Relocation records with addends. -.It Dv SHT_STRTAB Ta Dv ELF_T_BYTE Ta String tables. -.It Dv SHT_SYMTAB Ta Dv ELF_T_SYM Ta Symbol tables. -.It Dv SHT_SYMTAB_SHNDX Ta Dv ELF_T_WORD Ta Used with extended section numbering. -.It Dv SHT_SUNW_dof Ta Dv ELF_T_BYTE Ta Xo -Used by -.Xr dtrace 1 . -.Xc -.It Dv SHT_SUNW_move Ta Dv ELF_T_MOVE Ta ELF move records. -.It Dv SHT_SUNW_syminfo Ta Dv ELF_T_SYMINFO Ta Additional symbol flags. -.It Dv SHT_SUNW_verdef Ta Dv ELF_T_VDEF Ta Xo -Same as -.Dv SHT_GNU_verdef . -.Xc -.It Dv SHT_SUNW_verneed Ta Dv ELF_T_VNEED Ta Xo -Same as -.Dv SHT_GNU_verneed . -.Xc -.It Dv SHT_SUNW_versym Ta Dv ELF_T_HALF Ta Xo -Same as -.Dv SHT_GNU_versym . -.Xc -.El -.Pp -Section types in the range -.Ns [ Dv SHT_LOOS , -.Dv SHT_HIUSER ] -are otherwise considered to be of type -.Dv ELF_T_BYTE . -.Ss Functional Grouping -This section contains a brief overview of the available functionality -in the ELF library. -Each function listed here is described further in its own manual page. -.Bl -tag -width indent -.It "Archive Access" -.Bl -tag -compact -.It Fn elf_getarsym -Retrieve the archive symbol table. -.It Fn elf_getarhdr -Retrieve the archive header for an object. -.It Fn elf_getbase -Retrieve the offset of a member inside an archive. -.It Fn elf_next -Iterate through an -.Xr ar 1 -archive. -.It Fn elf_rand -Random access inside an -.Xr ar 1 -archive. -.El -.It "Data Structures" -.Bl -tag -compact -.It Fn elf_getdata -Retrieve translated data for an ELF section. -.It Fn elf_getscn -Retrieve the section descriptor for a named section. -.It Fn elf_ndxscn -Retrieve the index for a section. -.It Fn elf_newdata -Add a new -.Vt Elf_Data -descriptor to an ELF section. -.It Fn elf_newscn -Add a new section descriptor to an ELF descriptor. -.It Fn elf_nextscn -Iterate through the sections in an ELF object. -.It Fn elf_rawdata -Retrieve untranslated data for an ELF section. -.It Fn elf_rawfile -Return a pointer to the untranslated file contents for an ELF object. -.It Fn elf32_getehdr , Fn elf64_getehdr -Retrieve the Executable Header in an ELF object. -.It Fn elf32_getphdr , Fn elf64_getphdr -Retrieve the Program Header Table in an ELF object. -.It Fn elf32_getshdr , Fn elf64_getshdr -Retrieve the ELF section header associated with an -.Vt Elf_Scn -descriptor. -.It Fn elf32_newehdr , Fn elf64_newehdr -Allocate an Executable Header in an ELF object. -.It Fn elf32_newphdr , Fn elf64_newphdr -Allocate or resize the Program Header Table in an ELF object. -.El -.It "Data Translation" -.Bl -tag -compact -.It Fn elf32_xlatetof , Fn elf64_xlatetof -Translate an ELF data structure from its native representation to its -file representation. -.It Fn elf32_xlatetom , Fn elf64_xlatetom -Translate an ELF data structure from its file representation to a -native representation. -.El -.It "Error Reporting" -.Bl -tag -compact -.It Fn elf_errno -Retrieve the current error. -.It Fn elf_errmsg -Retrieve a human readable description of the current error. -.El -.It "Initialization" -.Bl -tag -compact -.It Fn elf_begin -Opens an -.Xr ar 1 -archive or ELF object given a file descriptor. -.It Fn elf_end -Close an ELF descriptor and release all its resources. -.It Fn elf_memory -Opens an -.Xr ar 1 -archive or ELF object present in a memory arena. -.It Fn elf_version -Sets the operating version. -.El -.It "IO Control" -.Bl -tag -width ".Fn elf_setshstrndx" -compact -.It Fn elf_cntl -Manage the association between and ELF descriptor and its underlying file. -.It Fn elf_flagdata -Mark an -.Vt Elf_Data -descriptor as dirty. -.It Fn elf_flagehdr -Mark the ELF Executable Header in an ELF descriptor as dirty. -.It Fn elf_flagphdr -Mark the ELF Program Header Table in an ELF descriptor as dirty. -.It Fn elf_flagscn -Mark an -.Vt Elf_Scn -descriptor as dirty. -.It Fn elf_flagshdr -Mark an ELF Section Header as dirty. -.It Fn elf_setshstrndx -Set the index of the section name string table for the ELF object. -.It Fn elf_update -Recompute ELF object layout and optionally write the modified object -back to the underlying file. -.El -.It "Queries" -.Bl -tag -width ".Fn elf_getshstrndx" -compact -.It Fn elf32_checksum , Fn elf64_checkum -Compute checksum of an ELF object. -.It Fn elf_getident -Retrieve the identification bytes for an ELF object. -.It Fn elf_getshnum -Retrieve the number of sections in an ELF object. -.It Fn elf_getshstrndx -Retrieve the section index of the section name string table in -an ELF object. -.It Fn elf_hash -Compute the ELF hash value of a string. -.It Fn elf_kind -Query the kind of object associated with an ELF descriptor. -.It Fn elf32_fsize , Fn elf64_fsize -Return the size of the file representation of an ELF type. -.El -.El -.Ss Controlling ELF Object Layout -In the usual mode of operation, library will compute section -offsets and alignments based on the contents of an ELF descriptor's -sections without need for further intervention by the -application. -.Pp -However, if the application wishes to take complete charge of the -layout of the ELF file, it may set the -.Dv ELF_F_LAYOUT -flag on an ELF descriptor using -.Xr elf_flagelf 3 , -following which the library will use the data offsets and alignments -specified by the application when laying out the file. -Application control of file layout is described further in the -.Xr elf_update 3 -manual page. -.Pp -Gaps in between sections will be filled with the fill character -set by function -.Fn elf_fill . -.Ss Error Handling -In case an error is encountered, these library functions set an -internal error number and signal the presence of the error by -returning an special return value. -The application can check the -current error number by calling -.Xr elf_errno 3 . -A human readable description of the recorded error is available by -calling -.Xr elf_errmsg 3 . -.Ss Memory Management Rules -The library keeps track of all -.Vt Elf_Scn -and -.Vt Elf_Data -descriptors associated with an ELF descriptor and recovers them -when the descriptor is closed using -.Xr elf_end 3 . -Thus the application must not call -.Xr free 3 -on data structures allocated by the ELF library. -.Pp -Conversely the library will not -free data that it has not allocated. -As an example, an application may call -.Xr elf_newdata 3 -to allocate a new -.Vt Elf_Data -descriptor and can set the -.Va d_off -member of the descriptor to point to a region of memory allocated -using -.Xr malloc 3 . -It is the applications responsibility to free this arena, though the -library will reclaim the space used by the -.Vt Elf_Data -descriptor itself. -.Sh SEE ALSO -.Xr gelf 3 , -.Xr elf 5 -.Sh HISTORY -The original ELF(3) API was developed for Unix System V. -The current implementation of the ELF(3) API appeared in -.Fx 7.0 . -.Sh AUTHORS -The ELF library was written by -.An Joseph Koshy Aq Mt jkoshy@FreeBSD.org . diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_begin.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_begin.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_begin.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_begin.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,315 +0,0 @@ -.\" Copyright (c) 2006,2008-2011 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_begin.3 3182 2015-04-10 16:08:10Z emaste $ -.\" -.Dd December 11, 2011 -.Os -.Dt ELF_BEGIN 3 -.Sh NAME -.Nm elf_begin -.Nd open an ELF file or ar(1) archive -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "Elf *" -.Fn elf_begin "int fd" "Elf_Cmd cmd" "Elf *elf" -.Sh DESCRIPTION -Function -.Fn elf_begin -is used to open ELF files and -.Xr ar 1 -archives for further processing by other APIs in the -.Xr elf 3 -library. -It is also used to access individual ELF members of an -.Xr ar 1 -archive in combination with the -.Xr elf_next 3 -and -.Xr elf_rand 3 -APIs. -.Pp -Argument -.Ar fd -is an open file descriptor returned from an -.Xr open 2 -system call. -Function -.Fn elf_begin -uses argument -.Ar fd -for reading or writing depending on the value of argument -.Ar cmd . -Argument -.Ar elf -is primarily used for iterating through archives. -.Pp -The argument -.Ar cmd -can have the following values: -.Bl -tag -width "ELF_C_WRITE" -.It ELF_C_NULL -Causes -.Fn elf_begin -to return NULL. -Arguments -.Ar fd -and -.Ar elf -are ignored, and no additional error is signalled. -.It ELF_C_READ -This value is to be when the application wishes to examine (but not -modify) the contents of the file specified by the arguments -.Ar fd -and -.Ar elf . -It can be used for both -.Xr ar 1 -archives and for ELF objects. -.Pp -If argument -.Ar elf -is NULL, the library will allocate a new ELF descriptor for the file -being processed. -The argument -.Ar fd -should have been opened for reading. -.Pp -If argument -.Ar elf -is not NULL, and references a regular ELF file previously opened with -.Fn elf_begin , -then the activation count for the descriptor referenced by argument -.Ar elf -is incremented. -The value in argument -.Ar fd -should match that used to open the descriptor argument -.Ar elf . -.Pp -If argument -.Ar elf -is not NULL, and references a descriptor for an -.Xr ar 1 -archive opened earlier with -.Fn elf_begin , -a descriptor for an element in the archive is returned as -described in the section -.Sx "Processing ar(1) archives" -below. -The value for argument -.Ar fd -should match that used to open the archive earlier. -.Pp -If argument -.Ar elf -is not NULL, and references an -.Xr ar 1 -archive opened earlier with -.Fn elf_memory , -then the value of the argument -.Ar fd -is ignored. -.It Dv ELF_C_RDWR -This command is used to prepare an ELF file for reading and writing. -This command is not supported for -.Xr ar 1 -archives. -.Pp -Argument -.Ar fd -should have been opened for reading and writing. -If argument -.Ar elf -is NULL, the library will allocate a new ELF descriptor for -the file being processed. -If the argument -.Ar elf -is non-null, it should point to a descriptor previously -allocated with -.Fn elf_begin -with the same values for arguments -.Ar fd -and -.Ar cmd ; -in this case the library will increment the activation count for descriptor -.Ar elf -and return the same descriptor. -.Pp -Changes to the in-memory image of the ELF file may be written back to -disk using the -.Xr elf_update 3 -function. -.It Dv ELF_C_WRITE -This command is used when the application wishes to create a new ELF -file. -Argument -.Ar fd -should have been opened for writing. -Argument -.Ar elf -is ignored, and the previous contents of file referenced by argument -.Ar fd -are overwritten. -.El -.Ss Processing ar(1) archives -An -.Xr ar 1 -archive may be opened in read mode (with argument -.Ar cmd -set to -.Dv ELF_C_READ ) -using -.Fn elf_begin -or -.Fn elf_memory . -The returned ELF descriptor can be passed into to -subsequent calls to -.Fn elf_begin -to access individual members of the archive. -.Pp -Random access within an opened archive is possible using -the -.Xr elf_next 3 -and -.Xr elf_rand 3 -functions. -.Pp -The symbol table of the archive may be retrieved -using -.Xr elf_getarsym 3 . -.Sh RETURN VALUES -The function returns a pointer to a ELF descriptor if successful, or NULL -if an error occurred. -.Sh EXAMPLES -To iterate through the members of an -.Xr ar 1 -archive, use: -.Bd -literal -offset indent -Elf_Cmd c; -Elf *ar_e, *elf_e; -\&... -c = ELF_C_READ; -if ((ar_e = elf_begin(fd, c, (Elf *) 0)) == 0) { - \&... handle error in opening the archive ... -} -while ((elf_e = elf_begin(fd, c, ar_e)) != 0) { - \&... process member referenced by elf_e here ... - c = elf_next(elf_e); - elf_end(elf_e); -} -.Ed -.Pp -To create a new ELF file, use: -.Bd -literal -offset indent -int fd; -Elf *e; -\&... -if ((fd = open("filename", O_RDWR|O_TRUNC|O_CREAT, 0666)) < 0) { - \&... handle the error from open(2) ... -} -if ((e = elf_begin(fd, ELF_C_WRITE, (Elf *) 0)) == 0) { - \&... handle the error from elf_begin() ... -} -\&... create the ELF image using other elf(3) APIs ... -elf_update(e, ELF_C_WRITE); -elf_end(e); -.Ed -.Sh ERRORS -Function -.Fn elf_begin -can fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARCHIVE -The archive denoted by argument -.Ar elf -could not be parsed. -.It Bq Er ELF_E_ARGUMENT -The value in argument -.Ar cmd -was unrecognized. -.It Bq Er ELF_E_ARGUMENT -A non-null value for argument -.Ar elf -was specified when -.Ar cmd -was set to -.Dv ELF_C_RDWR . -.It Bq Er ELF_E_ARGUMENT -The value of argument -.Ar fd -differs from the one the ELF descriptor -.Ar elf -was created with. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar cmd -differs from the value specified when ELF descriptor -.Ar elf -was created. -.It Bq Er ELF_E_ARGUMENT -An -.Xr ar 1 -archive was opened with -.Ar cmd -set to -.Dv ELF_C_RDWR . -.It Bq Er ELF_E_ARGUMENT -The file referenced by argument -.Ar fd -was empty. -.It Bq Er ELF_E_ARGUMENT -The underlying file for argument -.Ar fd -was of an unsupported type. -.It Bq Er ELF_E_IO -The file descriptor in argument -.Ar fd -was invalid. -.It Bq Er ELF_E_IO -The file descriptor in argument -.Ar fd -could not be read or written to. -.It Bq Er ELF_E_RESOURCE -An out of memory condition was encountered. -.It Bq Er ELF_E_SEQUENCE -Function -.Fn elf_begin -was called before a working version was established with -.Xr elf_version 3 . -.It Bq Er ELF_E_VERSION -The ELF object referenced by argument -.Ar fd -was of an unsupported ELF version. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_end 3 , -.Xr elf_errno 3 , -.Xr elf_memory 3 , -.Xr elf_next 3 , -.Xr elf_rand 3 , -.Xr elf_update 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_begin.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_begin.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_begin.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_begin.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ -/*- - * Copyright (c) 2006,2008-2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_begin.c 2364 2011-12-28 17:55:25Z jkoshy $"); - -Elf * -elf_begin(int fd, Elf_Cmd c, Elf *a) -{ - Elf *e; - - e = NULL; - - if (LIBELF_PRIVATE(version) == EV_NONE) { - LIBELF_SET_ERROR(SEQUENCE, 0); - return (NULL); - } - - switch (c) { - case ELF_C_NULL: - return (NULL); - - case ELF_C_WRITE: - /* - * The ELF_C_WRITE command is required to ignore the - * descriptor passed in. - */ - a = NULL; - break; - - case ELF_C_RDWR: - if (a != NULL) { /* not allowed for ar(1) archives. */ - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - /*FALLTHROUGH*/ - case ELF_C_READ: - /* - * Descriptor `a' could be for a regular ELF file, or - * for an ar(1) archive. If descriptor `a' was opened - * using a valid file descriptor, we need to check if - * the passed in `fd' value matches the original one. - */ - if (a && - ((a->e_fd != -1 && a->e_fd != fd) || c != a->e_cmd)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - break; - - default: - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - - } - - if (a == NULL) - e = _libelf_open_object(fd, c, 1); - else if (a->e_kind == ELF_K_AR) - e = _libelf_ar_open_member(a->e_fd, c, a); - else - (e = a)->e_activations++; - - return (e); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -/*- - * Copyright (c) 2006,2008,2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf.c 2225 2011-11-26 18:55:54Z jkoshy $"); - -struct _libelf_globals _libelf = { - .libelf_arch = LIBELF_ARCH, - .libelf_byteorder = LIBELF_BYTEORDER, - .libelf_class = LIBELF_CLASS, - .libelf_error = 0, - .libelf_fillchar = 0, - .libelf_version = EV_NONE -}; diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_cntl.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_cntl.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_cntl.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_cntl.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,111 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_cntl.3 3181 2015-04-10 13:22:51Z emaste $ -.\" -.Dd August 9, 2006 -.Os -.Dt ELF_CNTL 3 -.Sh NAME -.Nm elf_cntl -.Nd control an elf file descriptor -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft int -.Fn elf_cntl "Elf *elf" "Elf_Cmd cmd" -.Sh DESCRIPTION -Function -.Fn elf_cntl -controls the ELF library's subsequent use of the file descriptor -used to create ELF descriptor -.Ar elf . -.Pp -Argument -.Ar cmd -informs the library of the action to be taken: -.Bl -tag -width "ELF_C_FDDONE" -.It Dv ELF_C_FDDONE -This value instructs the ELF library not to perform any further -I/O on the file descriptor associated with argument -.Ar elf . -For ELF descriptors opened with mode -.Ar ELF_C_WRITE -or -.Ar ELF_C_RDWR -subsequent -.Fn elf_update -operations on the descriptor will fail. -.It Dv ELF_C_FDREAD -This value instructs the ELF library to read in all necessary -data associated with ELF descriptor -.Ar elf -into memory so that the underlying file descriptor can be -safely closed with command -.Dv ELF_C_FDDONE . -.El -.Pp -Argument -.Ar elf -must be an ELF descriptor associated with a file system object -(e.g., an -.Xr ar 1 -archive, an ELF file, or other data file). -.Sh IMPLEMENTATION NOTES -Due to use of -.Xr mmap 2 -internally, this function is a no-op for ELF objects opened in -.Dv ELF_C_READ -mode. -.Sh RETURN VALUES -Function -.Fn elf_cntl -returns 0 on success, or -1 if an error was detected. -.Sh ERRORS -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARCHIVE -Argument -.Ar elf -is a descriptor for an archive member. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar cmd -was not recognized. -.It Bq Er ELF_E_MODE -An -.Dv ELF_C_FDREAD -operation was requested on an ELF descriptor opened -for writing. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_begin 3 , -.Xr elf_end 3 , -.Xr elf_next 3 , -.Xr elf_update 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_cntl.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_cntl.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_cntl.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_cntl.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,58 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_cntl.c 2225 2011-11-26 18:55:54Z jkoshy $"); - -int -elf_cntl(Elf *e, Elf_Cmd c) -{ - if (e == NULL || - (c != ELF_C_FDDONE && c != ELF_C_FDREAD)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (-1); - } - - if (e->e_parent) { - LIBELF_SET_ERROR(ARCHIVE, 0); - return (-1); - } - - if (c == ELF_C_FDREAD) { - if (e->e_cmd == ELF_C_WRITE) { - LIBELF_SET_ERROR(MODE, 0); - return (-1); - } - else - return (0); - } - - e->e_fd = -1; - return 0; -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_data.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_data.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_data.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_data.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,276 +0,0 @@ -/*- - * Copyright (c) 2006,2008,2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_data.c 3258 2015-11-20 18:59:43Z emaste $"); - -Elf_Data * -elf_getdata(Elf_Scn *s, Elf_Data *ed) -{ - Elf *e; - unsigned int sh_type; - int elfclass, elftype; - size_t count, fsz, msz; - struct _Libelf_Data *d; - uint64_t sh_align, sh_offset, sh_size; - int (*xlate)(unsigned char *_d, size_t _dsz, unsigned char *_s, - size_t _c, int _swap); - - d = (struct _Libelf_Data *) ed; - - if (s == NULL || (e = s->s_elf) == NULL || - (d != NULL && s != d->d_scn)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - assert(e->e_kind == ELF_K_ELF); - - if (d == NULL && (d = STAILQ_FIRST(&s->s_data)) != NULL) - return (&d->d_data); - - if (d != NULL) - return (&STAILQ_NEXT(d, d_next)->d_data); - - if (e->e_rawfile == NULL) { - /* - * In the ELF_C_WRITE case, there is no source that - * can provide data for the section. - */ - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - elfclass = e->e_class; - - assert(elfclass == ELFCLASS32 || elfclass == ELFCLASS64); - - if (elfclass == ELFCLASS32) { - sh_type = s->s_shdr.s_shdr32.sh_type; - sh_offset = (uint64_t) s->s_shdr.s_shdr32.sh_offset; - sh_size = (uint64_t) s->s_shdr.s_shdr32.sh_size; - sh_align = (uint64_t) s->s_shdr.s_shdr32.sh_addralign; - } else { - sh_type = s->s_shdr.s_shdr64.sh_type; - sh_offset = s->s_shdr.s_shdr64.sh_offset; - sh_size = s->s_shdr.s_shdr64.sh_size; - sh_align = s->s_shdr.s_shdr64.sh_addralign; - } - - if (sh_type == SHT_NULL) { - LIBELF_SET_ERROR(SECTION, 0); - return (NULL); - } - - if ((elftype = _libelf_xlate_shtype(sh_type)) < ELF_T_FIRST || - elftype > ELF_T_LAST || (sh_type != SHT_NOBITS && - sh_offset + sh_size > (uint64_t) e->e_rawsize)) { - LIBELF_SET_ERROR(SECTION, 0); - return (NULL); - } - - if ((fsz = (elfclass == ELFCLASS32 ? elf32_fsize : elf64_fsize) - (elftype, (size_t) 1, e->e_version)) == 0) { - LIBELF_SET_ERROR(UNIMPL, 0); - return (NULL); - } - - if (sh_size % fsz) { - LIBELF_SET_ERROR(SECTION, 0); - return (NULL); - } - - if (sh_size / fsz > SIZE_MAX) { - LIBELF_SET_ERROR(RANGE, 0); - return (NULL); - } - - count = (size_t) (sh_size / fsz); - - msz = _libelf_msize(elftype, elfclass, e->e_version); - - if (count > 0 && msz > SIZE_MAX / count) { - LIBELF_SET_ERROR(RANGE, 0); - return (NULL); - } - - assert(msz > 0); - assert(count <= SIZE_MAX); - assert(msz * count <= SIZE_MAX); - - if ((d = _libelf_allocate_data(s)) == NULL) - return (NULL); - - d->d_data.d_buf = NULL; - d->d_data.d_off = 0; - d->d_data.d_align = sh_align; - d->d_data.d_size = msz * count; - d->d_data.d_type = elftype; - d->d_data.d_version = e->e_version; - - if (sh_type == SHT_NOBITS || sh_size == 0) { - STAILQ_INSERT_TAIL(&s->s_data, d, d_next); - return (&d->d_data); - } - - if ((d->d_data.d_buf = malloc(msz * count)) == NULL) { - (void) _libelf_release_data(d); - LIBELF_SET_ERROR(RESOURCE, 0); - return (NULL); - } - - d->d_flags |= LIBELF_F_DATA_MALLOCED; - - xlate = _libelf_get_translator(elftype, ELF_TOMEMORY, elfclass); - if (!(*xlate)(d->d_data.d_buf, (size_t) d->d_data.d_size, - e->e_rawfile + sh_offset, count, - e->e_byteorder != LIBELF_PRIVATE(byteorder))) { - _libelf_release_data(d); - LIBELF_SET_ERROR(DATA, 0); - return (NULL); - } - - STAILQ_INSERT_TAIL(&s->s_data, d, d_next); - - return (&d->d_data); -} - -Elf_Data * -elf_newdata(Elf_Scn *s) -{ - Elf *e; - struct _Libelf_Data *d; - - if (s == NULL || (e = s->s_elf) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - assert(e->e_kind == ELF_K_ELF); - - /* - * elf_newdata() has to append a data descriptor, so - * bring in existing section data if not already present. - */ - if (e->e_rawfile && s->s_size > 0 && STAILQ_EMPTY(&s->s_data)) - if (elf_getdata(s, NULL) == NULL) - return (NULL); - - if ((d = _libelf_allocate_data(s)) == NULL) - return (NULL); - - STAILQ_INSERT_TAIL(&s->s_data, d, d_next); - - d->d_data.d_align = 1; - d->d_data.d_buf = NULL; - d->d_data.d_off = (uint64_t) ~0; - d->d_data.d_size = 0; - d->d_data.d_type = ELF_T_BYTE; - d->d_data.d_version = LIBELF_PRIVATE(version); - - (void) elf_flagscn(s, ELF_C_SET, ELF_F_DIRTY); - - return (&d->d_data); -} - -/* - * Retrieve a data descriptor for raw (untranslated) data for section - * `s'. - */ - -Elf_Data * -elf_rawdata(Elf_Scn *s, Elf_Data *ed) -{ - Elf *e; - int elf_class; - uint32_t sh_type; - struct _Libelf_Data *d; - uint64_t sh_align, sh_offset, sh_size; - - if (s == NULL || (e = s->s_elf) == NULL || e->e_rawfile == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - assert(e->e_kind == ELF_K_ELF); - - d = (struct _Libelf_Data *) ed; - - if (d == NULL && (d = STAILQ_FIRST(&s->s_rawdata)) != NULL) - return (&d->d_data); - - if (d != NULL) - return (&STAILQ_NEXT(d, d_next)->d_data); - - elf_class = e->e_class; - - assert(elf_class == ELFCLASS32 || elf_class == ELFCLASS64); - - if (elf_class == ELFCLASS32) { - sh_type = s->s_shdr.s_shdr32.sh_type; - sh_offset = (uint64_t) s->s_shdr.s_shdr32.sh_offset; - sh_size = (uint64_t) s->s_shdr.s_shdr32.sh_size; - sh_align = (uint64_t) s->s_shdr.s_shdr32.sh_addralign; - } else { - sh_type = s->s_shdr.s_shdr64.sh_type; - sh_offset = s->s_shdr.s_shdr64.sh_offset; - sh_size = s->s_shdr.s_shdr64.sh_size; - sh_align = s->s_shdr.s_shdr64.sh_addralign; - } - - if (sh_type == SHT_NULL) { - LIBELF_SET_ERROR(SECTION, 0); - return (NULL); - } - - if (sh_type != SHT_NOBITS && - sh_offset + sh_size > (uint64_t) e->e_rawsize) { - LIBELF_SET_ERROR(SECTION, 0); - return (NULL); - } - - if ((d = _libelf_allocate_data(s)) == NULL) - return (NULL); - - d->d_data.d_buf = (sh_type == SHT_NOBITS || sh_size == 0) ? NULL : - e->e_rawfile + sh_offset; - d->d_data.d_off = 0; - d->d_data.d_align = sh_align; - d->d_data.d_size = sh_size; - d->d_data.d_type = ELF_T_BYTE; - d->d_data.d_version = e->e_version; - - STAILQ_INSERT_TAIL(&s->s_rawdata, d, d_next); - - return (&d->d_data); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_end.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_end.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_end.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_end.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,76 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_end.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd June 29, 2006 -.Os -.Dt ELF_END 3 -.Sh NAME -.Nm elf_end -.Nd release an ELF descriptor -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft int -.Fn elf_end "Elf *elf" -.Sh DESCRIPTION -Function -.Fn elf_end -is used to release the resources associated with an ELF descriptor -pointed to by argument -.Ar elf . -This descriptor must have been allocated by a previous call to -.Xr elf_begin 3 -or -.Xr elf_memory 3 . -For programming convenience, a NULL value is permitted for argument -.Ar elf . -.Pp -A call to -.Fn elf_end -decrements the activation count for descriptor -.Ar elf -by one. -The resources associated with the descriptor are only released -with its activation count goes to zero. -.Pp -Once function -.Fn elf_end -returns zero, the ELF descriptor -.Ar elf -will no longer be valid and should not be used further. -.Sh RETURN VALUES -Function -.Fn elf_end -returns the current value of the ELF descriptor -.Ar elf Ap s -activation count, or zero if argument -.Ar elf -was NULL. -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_begin 3 , -.Xr elf_memory 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_end.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_end.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_end.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_end.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ -/*- - * Copyright (c) 2006,2008-2009,2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include - -#include "_libelf.h" - -#if ELFTC_HAVE_MMAP -#include -#endif - -ELFTC_VCSID("$Id: elf_end.c 3174 2015-03-27 17:13:41Z emaste $"); - -int -elf_end(Elf *e) -{ - Elf *sv; - Elf_Scn *scn, *tscn; - - if (e == NULL || e->e_activations == 0) - return (0); - - if (--e->e_activations > 0) - return (e->e_activations); - - assert(e->e_activations == 0); - - while (e && e->e_activations == 0) { - switch (e->e_kind) { - case ELF_K_AR: - /* - * If we still have open child descriptors, we - * need to defer reclaiming resources till all - * the child descriptors for the archive are - * closed. - */ - if (e->e_u.e_ar.e_nchildren > 0) - return (0); - break; - case ELF_K_ELF: - /* - * Reclaim all section descriptors. - */ - STAILQ_FOREACH_SAFE(scn, &e->e_u.e_elf.e_scn, s_next, - tscn) - scn = _libelf_release_scn(scn); - break; - case ELF_K_NUM: - assert(0); - default: - break; - } - - if (e->e_rawfile) { - if (e->e_flags & LIBELF_F_RAWFILE_MALLOC) - free(e->e_rawfile); -#if ELFTC_HAVE_MMAP - else if (e->e_flags & LIBELF_F_RAWFILE_MMAP) - (void) munmap(e->e_rawfile, e->e_rawsize); -#endif - } - - sv = e; - if ((e = e->e_parent) != NULL) - e->e_u.e_ar.e_nchildren--; - sv = _libelf_release_elf(sv); - } - - return (0); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_errmsg.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_errmsg.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_errmsg.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_errmsg.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,107 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_errmsg.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd June 11, 2006 -.Os -.Dt ELF_ERRMSG 3 -.Sh NAME -.Nm elf_errmsg , -.Nm elf_errno -.Nd ELF library error message handling -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft int -.Fn elf_errno "void" -.Ft "const char *" -.Fn elf_errmsg "int error" -.Sh DESCRIPTION -When an error occurs during an ELF library API call, the library -encodes the error using an error number and stores the error number -internally for retrieval by the application at a later point of time. -Error numbers may contain an OS supplied error code in addition to -an ELF API specific error code. -An error number value of zero indicates no error. -.Pp -Function -.Fn elf_errno -is used to retrieve the last error recorded by the ELF library. -Invoking this function has the side-effect of resetting the -ELF library's recorded error number to zero. -.Pp -The function -.Fn elf_errmsg -returns a null-terminated string with a human readable -description of the error specified in argument -.Ar error . -A zero value for argument -.Ar error -retrieves the most recent error encountered by the ELF -library. -An argument value of -1 behaves identically, except that -it guarantees a non-NULL return from -.Fn elf_errmsg . -.Sh RETURN VALUES -Function -.Fn elf_errno -returns a non-zero value encoding the last error encountered -by the ELF library, or zero if no error was encountered. -.Pp -Function -.Fn elf_errmsg -returns a pointer to library local storage for non-zero values -of argument -.Ar error . -With a zero argument, the function will return a NULL pointer if no -error had been encountered by the library, or will return a pointer to -library local storage containing an appropriate message otherwise. -.Sh EXAMPLES -Clearing the ELF library's recorded error number can be accomplished -by invoking -.Fn elf_errno -and discarding its return value. -.Bd -literal -offset indent -/* clear error */ -(void) elf_errno(); -.Ed -.Pp -Retrieving a human-readable description of the current error number -can be done with the following snippet: -.Bd -literal -offset indent -int err; -const char *errmsg; -\&... -err = elf_errno(); -if (err != 0) - errmsg = elf_errmsg(err); -.Ed -.Sh SEE ALSO -.Xr elf 3 , -.Xr gelf 3 -.Sh BUGS -Function -.Fn elf_errmsg -is not localized. diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_errmsg.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_errmsg.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_errmsg.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_errmsg.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,83 +0,0 @@ -/*- - * Copyright (c) 2006,2008,2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_errmsg.c 3174 2015-03-27 17:13:41Z emaste $"); - -/* - * Retrieve a human readable translation for an error message. - */ - -static const char *_libelf_errors[] = { -#define DEFINE_ERROR(N,S) [ELF_E_##N] = S - DEFINE_ERROR(NONE, "No Error"), - DEFINE_ERROR(ARCHIVE, "Malformed ar(1) archive"), - DEFINE_ERROR(ARGUMENT, "Invalid argument"), - DEFINE_ERROR(CLASS, "ELF class mismatch"), - DEFINE_ERROR(DATA, "Invalid data buffer descriptor"), - DEFINE_ERROR(HEADER, "Missing or malformed ELF header"), - DEFINE_ERROR(IO, "I/O error"), - DEFINE_ERROR(LAYOUT, "Layout constraint violation"), - DEFINE_ERROR(MODE, "Incorrect ELF descriptor mode"), - DEFINE_ERROR(RANGE, "Value out of range of target"), - DEFINE_ERROR(RESOURCE, "Resource exhaustion"), - DEFINE_ERROR(SECTION, "Invalid section descriptor"), - DEFINE_ERROR(SEQUENCE, "API calls out of sequence"), - DEFINE_ERROR(UNIMPL, "Unimplemented feature"), - DEFINE_ERROR(VERSION, "Unknown ELF API version"), - DEFINE_ERROR(NUM, "Unknown error") -#undef DEFINE_ERROR -}; - -const char * -elf_errmsg(int error) -{ - int oserr; - - if (error == ELF_E_NONE && - (error = LIBELF_PRIVATE(error)) == 0) - return NULL; - else if (error == -1) - error = LIBELF_PRIVATE(error); - - oserr = error >> LIBELF_OS_ERROR_SHIFT; - error &= LIBELF_ELF_ERROR_MASK; - - if (error < ELF_E_NONE || error >= ELF_E_NUM) - return _libelf_errors[ELF_E_NUM]; - if (oserr) { - (void) snprintf((char *) LIBELF_PRIVATE(msg), - sizeof(LIBELF_PRIVATE(msg)), "%s: %s", - _libelf_errors[error], strerror(oserr)); - return (const char *)&LIBELF_PRIVATE(msg); - } - return _libelf_errors[error]; -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_errno.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_errno.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_errno.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_errno.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -/*- - * Copyright (c) 2006,2008,2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_errno.c 3174 2015-03-27 17:13:41Z emaste $"); - -int -elf_errno(void) -{ - int old; - - old = LIBELF_PRIVATE(error); - LIBELF_PRIVATE(error) = 0; - return (old & LIBELF_ELF_ERROR_MASK); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_fill.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_fill.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_fill.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_fill.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,52 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_fill.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd June 11, 2006 -.Os -.Dt ELF_FILL 3 -.Sh NAME -.Nm elf_fill -.Nd set fill byte for inter-section padding -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft void -.Fn elf_fill "int fill" -.Sh DESCRIPTION -Function -.Fn elf_fill -allows an application to specify a fill value for the padding inserted -between two sections of an ELF file to meet section alignment -constraints. -By default the ELF library uses zero bytes for padding. -.Pp -The ELF library will only pad bytes if the -.Dv ELF_F_LAYOUT -flag is not set for the ELF file. -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_flagelf 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_fill.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_fill.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_fill.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_fill.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_fill.c 3174 2015-03-27 17:13:41Z emaste $"); - -void -elf_fill(int fill) -{ - LIBELF_PRIVATE(fillchar) = fill; -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_flag.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_flag.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_flag.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_flag.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,196 +0,0 @@ -/*- - * Copyright (c) 2006,2008-2009,2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_flag.c 3174 2015-03-27 17:13:41Z emaste $"); - -unsigned int -elf_flagarhdr(Elf_Arhdr *a, Elf_Cmd c, unsigned int flags) -{ - unsigned int r; - - if (a == NULL) - return (0); - - if ((c != ELF_C_SET && c != ELF_C_CLR) || - (flags & ~ELF_F_DIRTY) != 0) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if (c == ELF_C_SET) - r = a->ar_flags |= flags; - else - r = a->ar_flags &= ~flags; - - return (r & LIBELF_F_API_MASK); -} - -unsigned int -elf_flagdata(Elf_Data *d, Elf_Cmd c, unsigned int flags) -{ - unsigned int r; - struct _Libelf_Data *ld; - - if (d == NULL) - return (0); - - if ((c != ELF_C_SET && c != ELF_C_CLR) || - (flags & ~ELF_F_DIRTY) != 0) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - ld = (struct _Libelf_Data *) d; - - if (c == ELF_C_SET) - r = ld->d_flags |= flags; - else - r = ld->d_flags &= ~flags; - - return (r & LIBELF_F_API_MASK); -} - -unsigned int -elf_flagehdr(Elf *e, Elf_Cmd c, unsigned int flags) -{ - int ec; - void *ehdr; - - if (e == NULL) - return (0); - - if ((c != ELF_C_SET && c != ELF_C_CLR) || - (e->e_kind != ELF_K_ELF) || (flags & ~ELF_F_DIRTY) != 0 || - ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if (ec == ELFCLASS32) - ehdr = e->e_u.e_elf.e_ehdr.e_ehdr32; - else - ehdr = e->e_u.e_elf.e_ehdr.e_ehdr64; - - if (ehdr == NULL) { - LIBELF_SET_ERROR(SEQUENCE, 0); - return (0); - } - - return (elf_flagelf(e, c, flags)); -} - -unsigned int -elf_flagelf(Elf *e, Elf_Cmd c, unsigned int flags) -{ - unsigned int r; - - if (e == NULL) - return (0); - - if ((c != ELF_C_SET && c != ELF_C_CLR) || - (e->e_kind != ELF_K_ELF) || - (flags & ~(ELF_F_ARCHIVE | ELF_F_ARCHIVE_SYSV | - ELF_F_DIRTY | ELF_F_LAYOUT)) != 0) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if ((flags & ELF_F_ARCHIVE_SYSV) && (flags & ELF_F_ARCHIVE) == 0) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if ((flags & ELF_F_ARCHIVE) && e->e_cmd != ELF_C_WRITE) { - LIBELF_SET_ERROR(MODE, 0); - return (0); - } - - if (c == ELF_C_SET) - r = e->e_flags |= flags; - else - r = e->e_flags &= ~flags; - return (r & LIBELF_F_API_MASK); -} - -unsigned int -elf_flagphdr(Elf *e, Elf_Cmd c, unsigned int flags) -{ - int ec; - void *phdr; - - if (e == NULL) - return (0); - - if ((c != ELF_C_SET && c != ELF_C_CLR) || - (e->e_kind != ELF_K_ELF) || (flags & ~ELF_F_DIRTY) != 0 || - ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if (ec == ELFCLASS32) - phdr = e->e_u.e_elf.e_phdr.e_phdr32; - else - phdr = e->e_u.e_elf.e_phdr.e_phdr64; - - if (phdr == NULL) { - LIBELF_SET_ERROR(SEQUENCE, 0); - return (0); - } - - return (elf_flagelf(e, c, flags)); -} - -unsigned int -elf_flagscn(Elf_Scn *s, Elf_Cmd c, unsigned int flags) -{ - unsigned int r; - - if (s == NULL) - return (0); - - if ((c != ELF_C_SET && c != ELF_C_CLR) || - (flags & ~ELF_F_DIRTY) != 0) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if (c == ELF_C_SET) - r = s->s_flags |= flags; - else - r = s->s_flags &= ~flags; - return (r & LIBELF_F_API_MASK); -} - -unsigned int -elf_flagshdr(Elf_Scn *s, Elf_Cmd c, unsigned int flags) -{ - return (elf_flagscn(s, c, flags)); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_flagdata.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_flagdata.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_flagdata.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_flagdata.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,226 +0,0 @@ -.\" Copyright (c) 2006-2008,2011 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_flagdata.3 2884 2013-01-11 02:03:46Z jkoshy $ -.\" -.Dd December 3, 2011 -.Os -.Dt ELF_FLAGDATA 3 -.Sh NAME -.Nm elf_flagarhdr , -.Nm elf_flagdata , -.Nm elf_flagehdr , -.Nm elf_flagelf , -.Nm elf_flagphdr , -.Nm elf_flagscn , -.Nm elf_flagshdr -.Nd manipulate flags associated with ELF(3) data structures -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "unsigned int" -.Fn elf_flagarhdr "Elf_Arhdr *arhdr" "Elf_Cmd cmd" "unsigned int flags" -.Ft "unsigned int" -.Fn elf_flagdata "Elf_Data *data" "Elf_Cmd cmd" "unsigned int flags" -.Ft "unsigned int" -.Fn elf_flagehdr "Elf *elf" "Elf_Cmd cmd" "unsigned int flags" -.Ft "unsigned int" -.Fn elf_flagelf "Elf *elf" "Elf_Cmd cmd" "unsigned int flags" -.Ft "unsigned int" -.Fn elf_flagphdr "Elf *elf" "Elf_Cmd cmd" "unsigned int flags" -.Ft "unsigned int" -.Fn elf_flagscn "Elf_Scn *scn" "Elf_Cmd cmd" "unsigned int flags" -.Ft "unsigned int" -.Fn elf_flagshdr "Elf_Scn *scn" "Elf_Cmd cmd" "unsigned int flags" -.Sh DESCRIPTION -These functions are used to query, set or reset flags on data -structures associated with an ELF file. -.Pp -Arguments -.Ar arhdr , -.Ar data , -.Ar elf -and -.Ar scn -denote the data structures whose flags need to be changed. -These values should have been returned by prior calls to -functions in the ELF(3) API set: -.Bl -bullet -compact -.It -Argument -.Ar arhdr -should have been returned by a prior call to -.Xr elf_getarhdr 3 . -.It -Argument -.Ar data -should have been returned by a prior call to one of -.Xr elf_newdata 3 , -.Xr elf_getdata 3 -or -.Xr elf_rawdata 3 . -.It -Argument -.Ar elf -should have been allocated by a prior call to one of -.Xr elf_begin 3 -or -.Xr elf_memory 3 . -.It -Argument -.Ar scn -should have been returned by a prior call to one of -.Xr elf_getscn 3 , -.Xr elf_newscn 3 -or -.Xr elf_nextscn 3 . -.El -These values are allowed to be NULL to simplify error handling in -application code. -.Pp -Argument -.Ar cmd -may have the following values: -.Bl -tag -width ELF_C_SET -.It Dv ELF_C_CLR -The argument -.Ar flags -specifies the flags to be cleared. -.It Dv ELF_C_SET -The argument -.Ar flags -specifies the flags to be set. -.El -.Pp -The argument -.Ar flags -is allowed to have the following flags set: -.Bl -tag -width ELF_F_ARCHIVE_SYSV -.It Dv ELF_F_ARCHIVE -This flag is only valid with the -.Fn elf_flagelf -API. -It informs the library that the application desires to create an -.Xr ar 1 -archive. -Argument -.Ar elf -should have been opened for writing using the -.Dv ELF_C_WRITE -command to function -.Fn elf_begin . -.It Dv ELF_F_ARCHIVE_SYSV -This flag is used in conjunction with the -.Dv ELF_F_ARCHIVE -flag to indicate that library should create archives that conform -to System V layout rules. -The default is to create BSD style archives. -.It Dv ELF_F_DIRTY -Mark the associated data structure as needing to be written back -to the underlying file. -A subsequent call to -.Xr elf_update 3 -will resynchronize the library's internal data structures. -.It Dv ELF_F_LAYOUT -This flag is only valid with the -.Fn elf_flagelf -API. -It informs the library that the application will take -responsibility for the layout of the file and that the library is -not to insert any padding in between sections. -.El -.Pp -Marking a given data structure as -.Dq dirty -affects all of its contained elements. -Thus marking an ELF descriptor -.Ar elf -with -.Fn elf_flagelf "elf" "ELF_C_SET" "ELF_F_DIRTY" -means that the entire contents of the descriptor are -.Dq dirty . -.Pp -Using a value of zero for argument -.Ar flags -will return the current set of flags for the data structure being -queried. -.Sh RETURN VALUES -These functions return the updated flags if successful, or zero if -an error is detected. -.Sh COMPATIBILITY -The -.Fn elf_flagarhdr -function and the -.Dv ELF_F_ARCHIVE -and -.Dv ELF_F_ARCHIVE_SYSV -flags are an extension to the ELF(3) API. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -An unsupported value was used for the -.Ar cmd -argument. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar flags -had unsupported flags set. -.It Bq Er ELF_E_ARGUMENT -The argument -.Ar elf -was not a descriptor for an ELF object. -.It Bq Er ELF_E_MODE -The -.Dv ELF_F_ARCHIVE -flag was used with an ELF descriptor that had not been opened for writing. -.It Bq Er ELF_E_SEQUENCE -Function -.Fn elf_flagehdr -was called without an executable header being allocated. -.It Bq Er ELF_E_SEQUENCE -Function -.Fn elf_flagphdr -was called without a program header being allocated. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf32_newehdr 3 , -.Xr elf32_newphdr 3 , -.Xr elf32_newshdr 3 , -.Xr elf64_newehdr 3 , -.Xr elf64_newphdr 3 , -.Xr elf64_newshdr 3 , -.Xr elf_newdata 3 , -.Xr elf_update 3 , -.Xr gelf 3 , -.Xr gelf_newehdr 3 , -.Xr gelf_newphdr 3 , -.Xr gelf_newshdr 3 , -.Xr gelf_update_dyn 3 , -.Xr gelf_update_move 3 , -.Xr gelf_update_rel 3 , -.Xr gelf_update_rela 3 , -.Xr gelf_update_sym 3 , -.Xr gelf_update_syminfo 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarhdr.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarhdr.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarhdr.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarhdr.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,97 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_getarhdr.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd August 15, 2006 -.Os -.Dt ELF_GETARHDR 3 -.Sh NAME -.Nm elf_getarhdr -.Nd retrieve ar(1) header for an archive member -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "Elf_Arhdr *" -.Fn elf_getarhdr "Elf *elf" -.Sh DESCRIPTION -The -.Fn elf_getarhdr -function returns a pointer to an archive member header for -a descriptor -.Ar elf . -This descriptor must have been returned by a prior call to -.Xr elf_begin 3 , -and must be a descriptor for a member inside an -.Xr ar 1 -archive. -.Pp -Structure -.Vt Elf_Arhdr -includes the following members: -.Bl -tag -width indent -.It Vt "char *" Va ar_name -A pointer to a null terminated string containing the translated -name of the archive member. -.It Vt "char *" Va ar_rawname -A pointer to a null terminated string containing the untranslated -name for the archive member, including all -.Xr ar 1 -formatting characters and trailing white space. -.It Vt time_t Va ar_date -The timestamp associated with the member. -.It Vt uid_t Va ar_uid -The uid of the creator of the member. -.It Vt gid_t Va ar_gid -The gid of the creator of the member. -.It Vt mode_t Va ar_mode -The file mode of the member. -.It Vt size_t Va ar_size -The size of the member in bytes. -.El -.Sh RETURN VALUES -This function returns a valid pointer to an -.Vt Elf_Arhdr -structure if successful, or NULL if an error is encountered. -.Sh ERRORS -Function -.Fn elf_getarhdr -may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not a descriptor for a member of an -.Xr ar 1 -archive. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_begin 3 , -.Xr elf_getarsym 3 , -.Xr elf_memory 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarhdr.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarhdr.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarhdr.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarhdr.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -/*- - * Copyright (c) 2006,2008,2010 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_getarhdr.c 3174 2015-03-27 17:13:41Z emaste $"); - -Elf_Arhdr * -elf_getarhdr(Elf *e) -{ - if (e == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if (e->e_flags & LIBELF_F_AR_HEADER) - return (e->e_hdr.e_arhdr); - - return (_libelf_ar_gethdr(e)); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarsym.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarsym.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarsym.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarsym.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,130 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_getarsym.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd August 15, 2006 -.Os -.Dt ELF_GETARSYM 3 -.Sh NAME -.Nm elf_getarsym -.Nd retrieve the symbol table of an archive -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "Elf_Arsym *" -.Fn elf_getarsym "Elf *elf" "size_t *ptr" -.Sh DESCRIPTION -The function -.Fn elf_getarsym -retrieves the symbol table for an -.Xr ar 1 -archive, if one is available. -.Pp -Argument -.Ar elf -should be a descriptor for an -.Xr ar 1 -archive opened using -.Fn elf_begin -or -.Fn elf_memory . -.Pp -If the archive -.Ar elf -contains a symbol table with n entries, this function returns a -pointer to an array of n+1 -.Vt Elf_Arsym -structures. -An -.Vt Elf_Arsym -structure has the following elements: -.Bl -tag -width indent -compact -.It Vt "char *" Va as_name -This structure member is a pointer to a null-terminated symbol name. -.It Vt "off_t" Va as_off -This structure member contains the byte offset from the beginning of the archive to -the header for the archive member. -This value is suitable for use with -.Xr elf_rand 3 . -.It Vt "unsigned long" Va as_hash -This structure member contains a portable hash value for the symbol -name, as computed by -.Xr elf_hash 3 . -.El -.Pp -The last entry of the returned array will have a NULL value for member -.Va as_name , -a zero value for member -.Va as_off -and an illegal value of ~0UL for -.Va as_hash . -.Pp -If argument -.Ar ptr -is non-null, the -.Fn elf_getarsym -function will store the number of table entries returned (including the -sentinel entry at the end) into the location it points to. -.Sh RETURN VALUES -Function -.Fn elf_getarsym -returns a pointer to an array of -.Vt Elf_Arsym -structures if successful, or a NULL -pointer if an error was encountered. -.Pp -If argument -.Ar ptr -is non-null and there was no error, the library will store the -number of archive symbol entries returned into the location it -points to. -If argument -.Ar ptr -is non-null and an error was encountered, the library will -set the location pointed to by it to zero. -.Sh ERRORS -Function -.Fn elf_getarsym -may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not a descriptor for an -.Xr ar 1 -archive. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_begin 3 , -.Xr elf_getarhdr 3 , -.Xr elf_hash 3 , -.Xr elf_memory 3 , -.Xr elf_next 3 , -.Xr elf_rand 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarsym.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarsym.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarsym.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getarsym.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_getarsym.c 3174 2015-03-27 17:13:41Z emaste $"); - -Elf_Arsym * -elf_getarsym(Elf *ar, size_t *ptr) -{ - size_t n; - Elf_Arsym *symtab; - - n = 0; - symtab = NULL; - - if (ar == NULL || ar->e_kind != ELF_K_AR) - LIBELF_SET_ERROR(ARGUMENT, 0); - else if ((symtab = ar->e_u.e_ar.e_symtab) != NULL) - n = ar->e_u.e_ar.e_symtabsz; - else if (ar->e_u.e_ar.e_rawsymtab) - symtab = (ar->e_flags & LIBELF_F_AR_VARIANT_SVR4) ? - _libelf_ar_process_svr4_symtab(ar, &n) : - _libelf_ar_process_bsd_symtab(ar, &n); - else - LIBELF_SET_ERROR(ARCHIVE, 0); - - if (ptr) - *ptr = n; - return (symtab); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getbase.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getbase.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getbase.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getbase.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,71 +0,0 @@ -.\" Copyright (c) 2006,2008,2010 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_getbase.3 978 2010-06-06 12:40:19Z jkoshy $ -.\" -.Dd June 6, 2010 -.Os -.Dt ELF_GETBASE 3 -.Sh NAME -.Nm elf_getbase -.Nd get the base offset for an object file -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft off_t -.Fn elf_getbase "Elf *elf" -.Sh DESCRIPTION -Function -.Fn elf_getbase -returns the file offset to the first byte of the object referenced by ELF -descriptor -.Ar elf . -.Pp -For descriptors referencing members of archives, the returned offset is -the file offset of the member in its containing archive. -For descriptors to regular objects, the returned offset is (vacuously) -zero. -.Sh RETURN VALUES -Function -.Fn elf_getbase -returns a valid file offset if successful, or -.Pq Vt off_t -.Li -1 -in case of an error. -.Sh ERRORS -Function -.Fn elf_getbase -may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was NULL. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_getarhdr 3 , -.Xr elf_getident 3 , -.Xr elf_rawfile 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getbase.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getbase.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getbase.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getbase.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_getbase.c 3174 2015-03-27 17:13:41Z emaste $"); - -off_t -elf_getbase(Elf *e) -{ - if (e == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return ((off_t) -1); - } - - if (e->e_parent == NULL) - return ((off_t) 0); - - return ((off_t) ((uintptr_t) e->e_rawfile - - (uintptr_t) e->e_parent->e_rawfile)); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getdata.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getdata.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getdata.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getdata.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,229 +0,0 @@ -.\" Copyright (c) 2006,2008,2010-2011 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_getdata.3 3181 2015-04-10 13:22:51Z emaste $ -.\" -.Dd January 26, 2011 -.Os -.Dt ELF_GETDATA 3 -.Sh NAME -.Nm elf_getdata , -.Nm elf_newdata , -.Nm elf_rawdata -.Nd iterate through or allocate section data -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "Elf_Data *" -.Fn elf_getdata "Elf_Scn *scn" "Elf_Data *data" -.Ft "Elf_Data *" -.Fn elf_newdata "Elf_Scn *scn" -.Ft "Elf_Data *" -.Fn elf_rawdata "Elf_Scn *scn" "Elf_Data *data" -.Sh DESCRIPTION -These functions are used to access and manipulate data descriptors -associated with section descriptors. -Data descriptors used by the ELF library are described in -.Xr elf 3 . -.Pp -Function -.Fn elf_getdata -will return the next data descriptor associated with section descriptor -.Ar scn . -The returned data descriptor will be setup to contain translated data. -Argument -.Ar data -may be NULL, in which case the function returns the first data descriptor -associated with section -.Ar scn . -If argument -.Ar data -is not NULL, it must be a pointer to a data descriptor associated with -section descriptor -.Ar scn , -and function -.Fn elf_getdata -will return a pointer to the next data descriptor for the section, -or NULL when the end of the section's descriptor list is reached. -.Pp -Function -.Fn elf_newdata -will allocate a new data descriptor and append it to the list of data -descriptors associated with section descriptor -.Ar scn . -The new data descriptor will be initialized as follows: -.Bl -tag -width "d_version" -compact -offset indent -.It Va d_align -Set to 1. -.It Va d_buf -Initialized to NULL. -.It Va d_off -Set to (off_t) -1. -This field is under application control if the -.Dv ELF_F_LAYOUT -flag was set on the ELF descriptor. -.It Va d_size -Set to zero. -.It Va d_type -Initialized to -.Dv ELF_T_BYTE . -.It Va d_version -Set to the current working version of the library, as set by -.Xr elf_version 3 . -.El -The application must set these values as appropriate before -calling -.Xr elf_update 3 . -Section -.Ar scn -must be associated with an ELF file opened for writing. -If the application has not requested full control of layout by -setting the -.Dv ELF_F_LAYOUT -flag on descriptor -.Ar elf , -then the data referenced by the returned descriptor will be positioned -after the existing content of the section, honoring the file alignment -specified in member -.Va d_align . -On successful completion of a call to -.Fn elf_newdata , -the ELF library will mark the section -.Ar scn -as -.Dq dirty . -.Pp -Function -.Fn elf_rawdata -is used to step through the data descriptors associated with -section -.Ar scn . -In contrast to function -.Fn elf_getdata , -this function returns untranslated data. -If argument -.Ar data -is NULL, the first data descriptor associated with section -.Ar scn -is returned. -If argument -.Ar data -is not NULL, is must be a data descriptor associated with -section -.Ar scn , -and function -.Fn elf_rawdata -will return the next data descriptor in the list, or NULL -if no further descriptors are present. -Function -.Fn elf_rawdata -always returns -.Vt Elf_Data -structures of type -.Dv ELF_T_BYTE . -.Ss Special handling of zero-sized and SHT_NOBITS sections -For sections of type -.Dv SHT_NOBITS, -and for zero-sized sections, -the functions -.Fn elf_getdata -and -.Fn elf_rawdata -return a pointer to a valid -.Vt Elf_Data -structure that has its -.Va d_buf -member set to NULL and its -.Va d_size -member set to the size of the section. -.Pp -If an application wishes to create a section of type -.Dv SHT_NOBITS , -it should add a data buffer to the section using function -.Fn elf_newdata . -It should then set the -.Va d_buf -and -.Va d_size -members of the returned -.Vt Elf_Data -structure to NULL and the desired size of the section respectively. -.Sh RETURN VALUES -These functions return a valid pointer to a data descriptor if successful, or -NULL if an error occurs. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Either of the arguments -.Ar scn -or -.Ar data -was NULL. -.It Bq Er ELF_E_ARGUMENT -The data descriptor referenced by argument -.Ar data -is not associated with section descriptor -.Ar scn . -.It Bq Er ELF_E_ARGUMENT -The section denoted by argument -.Ar scn -had no data associated with it. -.It Bq Er ELF_E_DATA -Retrieval of data from the underlying object failed. -.It Bq Er ELF_E_RESOURCE -An out of memory condition was detected. -.It Bq Er ELF_E_SECTION -Section -.Ar scn -had type -.Dv SHT_NULL . -.It Bq Er ELF_E_SECTION -The type of the section -.Ar scn -was not recognized by the library. -.It Bq Er ELF_E_SECTION -The size of the section -.Ar scn -is not a multiple of the file size for its section type. -.It Bq Er ELF_E_SECTION -The file offset for section -.Ar scn -is incorrect. -.It Bq Er ELF_E_UNIMPL -The section type associated with section -.Ar scn -is currently unsupported by the library. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_flagdata 3 , -.Xr elf_flagscn 3 , -.Xr elf_getscn 3 , -.Xr elf_getshdr 3 , -.Xr elf_newscn 3 , -.Xr elf_rawfile 3 , -.Xr elf_update 3 , -.Xr elf_version 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getident.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getident.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getident.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getident.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,83 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_getident.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd July 3, 2006 -.Os -.Dt ELF_GETIDENT 3 -.Sh NAME -.Nm elf_getident -.Nd return the initial bytes of a file -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft char * -.Fn elf_getident "Elf *elf" "size_t *sz" -.Sh DESCRIPTION -Function -.Fn elf_getident -returns a pointer to the initial bytes of the file for descriptor -.Ar elf . -.Pp -If argument -.Ar sz -is non-null, the size of the identification area returned is written -to the location pointed to by -.Ar sz . -This location is set to zero on errors. -.Sh RETURN VALUES -Function -.Fn elf_getident -will return a non-NULL pointer to the initial bytes of the file if -successful, or NULL if an error condition is detected. -.Sh ERRORS -Function -.Fn elf_getident -can fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -A NULL value was passed in for argument -.Ar elf . -.It Bq Er ELF_E_SEQUENCE -ELF descriptor -.Ar elf -was opened for writing and function -.Fn elf_getident -was called before a call to -.Xr elf_update 3 . -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf32_getehdr 3 , -.Xr elf64_getehdr 3 , -.Xr elf_getarhdr 3 , -.Xr elf_getbase 3 , -.Xr elf_getflags 3 , -.Xr elf_kind 3 , -.Xr elf_rawfile 3 , -.Xr elf_update 3 , -.Xr gelf 3 , -.Xr gelf_getclass 3 , -.Xr gelf_getehdr 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getident.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getident.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getident.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getident.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,66 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_getident.c 3174 2015-03-27 17:13:41Z emaste $"); - -char * -elf_getident(Elf *e, size_t *sz) -{ - - if (e == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - goto error; - } - - if (e->e_cmd == ELF_C_WRITE && e->e_rawfile == NULL) { - LIBELF_SET_ERROR(SEQUENCE, 0); - goto error; - } - - assert(e->e_kind != ELF_K_AR || e->e_cmd == ELF_C_READ); - - if (sz) { - if (e->e_kind == ELF_K_AR) - *sz = SARMAG; - else if (e->e_kind == ELF_K_ELF) - *sz = EI_NIDENT; - else - *sz = e->e_rawsize; - } - - return ((char *) e->e_rawfile); - - error: - if (sz) - *sz = 0; - return (NULL); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getphdrnum.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getphdrnum.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getphdrnum.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getphdrnum.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_getphdrnum.3 467 2009-08-05 18:18:49Z jkoshy $ -.\" -.Dd August 5, 2009 -.Os -.Dt ELF_GETPHDRNUM 3 -.Sh NAME -.Nm elf_getphdrnum -.Nd return the number of program headers in an ELF file -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft int -.Fn elf_getphdrnum "Elf *elf" "size_t *phnum" -.Sh DESCRIPTION -Function -.Fn elf_getphdrnum -retrieves the number of ELF program headers associated with descriptor -.Ar elf -and stores it into the location pointed to by argument -.Ar phnum . -.Pp -This routine allows applications to uniformly process both normal ELF -objects and ELF objects that use extended numbering. -.Pp -.Sh RETURN VALUES -Function -.Fn elf_getphdrnum -returns a zero value if successful, or -1 in case of an error. -.Sh ERRORS -Function -.Fn elf_getphnum -can fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -A NULL value was passed in for argument -.Ar elf . -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not for an ELF file. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -lacks an ELF Executable Header. -.It Bq Er ELF_E_HEADER -The ELF Executable Header associated with argument -.Ar elf -was corrupt. -.It Bq Er ELF_E_SECTION -The section header at index -.Dv SHN_UNDEF -was corrupt. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf32_getehdr 3 , -.Xr elf64_getehdr 3 , -.Xr elf_getident 3 , -.Xr elf_getshdrnum 3 , -.Xr elf_getshdrstrndx 3 , -.Xr gelf 3 , -.Xr gelf_getehdr 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getphnum.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getphnum.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getphnum.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getphnum.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_getphnum.3 467 2009-08-05 18:18:49Z jkoshy $ -.\" -.Dd August 5, 2009 -.Os -.Dt ELF_GETPHNUM 3 -.Sh NAME -.Nm elf_getphnum -.Nd return the number of program headers in an ELF file -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft int -.Fn elf_getphnum "Elf *elf" "size_t *phnum" -.Sh DESCRIPTION -This function is deprecated. -Please use function -.Xr elf_getphdrnum 3 -instead. -.Pp -Function -.Fn elf_getphnum -retrieves the number of ELF program headers associated with descriptor -.Ar elf -and stores it into the location pointed to by argument -.Ar phnum . -.Pp -This routine allows applications to uniformly process both normal ELF -objects and ELF objects that use extended numbering. -.Pp -.Sh RETURN VALUES -Function -.Fn elf_getphnum -returns a non-zero value if successful, or zero in case of an -error. -.Sh ERRORS -Function -.Fn elf_getphnum -can fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -A NULL value was passed in for argument -.Ar elf . -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not for an ELF file. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -lacks an ELF Executable Header. -.It Bq Er ELF_E_HEADER -The ELF Executable Header associated with argument -.Ar elf -was corrupt. -.It Bq Er ELF_E_SECTION -The section header at index -.Dv SHN_UNDEF -was corrupt. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf32_getehdr 3 , -.Xr elf64_getehdr 3 , -.Xr elf_getident 3 , -.Xr elf_getphdrnum 3 , -.Xr elf_getshdrnum 3 , -.Xr elf_getshdrstrndx 3 , -.Xr gelf 3 , -.Xr gelf_getehdr 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getscn.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getscn.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getscn.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getscn.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,151 +0,0 @@ -.\" Copyright (c) 2006-2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_getscn.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd October 22, 2007 -.Os -.Dt ELF_GETSCN 3 -.Sh NAME -.Nm elf_getscn , -.Nm elf_ndxscn , -.Nm elf_newscn , -.Nm elf_nextscn -.Nd get/allocate section information for an ELF object -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "Elf_Scn *" -.Fn elf_getscn "Elf *elf" "size_t index" -.Ft size_t -.Fn elf_ndxscn "Elf_Scn *scn" -.Ft "Elf_Scn *" -.Fn elf_newscn "Elf *elf" -.Ft "Elf_Scn *" -.Fn elf_nextscn "Elf *elf" "Elf_Scn *scn" -.Sh DESCRIPTION -These functions are used to iterate through the sections associated -with an ELF descriptor. -.Pp -Function -.Fn elf_getscn -will return a section descriptor for the section at index -.Ar index -in the object denoted by ELF descriptor -.Ar elf . -An error will be signalled if the specified section does not -exist. -.Pp -Function -.Fn elf_ndxscn -returns the section table index associated with section descriptor -.Ar scn . -.Pp -Function -.Fn elf_newscn -creates a new section and appends it to the list of sections -associated with descriptor -.Ar elf . -The library will automatically increment the -.Va e_shnum -field of the ELF header associated with descriptor -.Ar elf , -and will set the -.Dv ELF_F_DIRTY -flag on the returned section descriptor. -For ELF descriptors opened for writing, the ELF library will -automatically create an empty section at index zero -.Dv ( SHN_UNDEF ) -on the first call to -.Fn elf_newscn . -.Pp -Function -.Fn elf_nextscn -takes a section descriptor -.Ar scn -and returns a pointer to the section descriptor at the next higher -index. -Argument -.Ar scn -is allowed to be NULL, in which case this function will return a -pointer to the section descriptor at index 1. -If no further sections are present, function -.Fn elf_nextscn -will return a NULL pointer. -.Sh RETURN VALUES -Functions -.Fn elf_getscn , -.Fn elf_newscn -and -.Fn elf_nextscn -return a valid pointer to a section descriptor if successful, or -NULL if an error occurs. -.Pp -Function -.Fn elf_ndxscn -returns a valid section table index if successful, or -.Dv SHN_UNDEF -if an error occurs. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Arguments -.Ar elf -or -.Ar scn -were NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar index -exceeded the current number of sections in the ELF object. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not a descriptor for an ELF file. -.It Bq Er ELF_E_ARGUMENT -Section descriptor -.Ar scn -was not associated with ELF descriptor -.Ar elf . -.It Bq Er ELF_E_CLASS -Descriptor -.Ar elf -was of an unknown ELF class. -.It Bq Er ELF_E_SECTION -Argument -.Ar elf -specified extended section numbering in the ELF header with the section header at -index -.Dv SHN_UNDEF -not being of type -.Dv SHT_NULL . -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_flagdata 3 , -.Xr elf_flagscn 3 , -.Xr elf_getdata 3 , -.Xr elf_getshdr 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshdrnum.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshdrnum.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshdrnum.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshdrnum.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_getshdrnum.3 467 2009-08-05 18:18:49Z jkoshy $ -.\" -.Dd August 4, 2009 -.Os -.Dt ELF_GETSHDRNUM 3 -.Sh NAME -.Nm elf_getshdrnum -.Nd return the number of sections in an ELF file -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft int -.Fn elf_getshdrnum "Elf *elf" "size_t *shnum" -.Sh DESCRIPTION -Function -.Fn elf_getshdrnum -retrieves the number of ELF sections associated with descriptor -.Ar elf -and stores it into the location pointed to by argument -.Ar shnum . -.Pp -This routine allows applications to uniformly process both normal ELF -objects, and ELF objects that use extended section numbering. -.Pp -.Sh RETURN VALUES -Function -.Fn elf_getshdrnum -returns zero value if successful, or -1 in case of an error. -.Sh ERRORS -Function -.Fn elf_getshdrnum -can fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -A NULL value was passed in for argument -.Ar elf . -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not for an ELF file. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -lacks an ELF Executable header. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf32_getehdr 3 , -.Xr elf64_getehdr 3 , -.Xr elf_getident 3 , -.Xr elf_getphdrnum 3 , -.Xr elf_getshdrstrndx 3 , -.Xr gelf 3 , -.Xr gelf_getehdr 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshdrstrndx.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshdrstrndx.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshdrstrndx.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshdrstrndx.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_getshdrstrndx.3 467 2009-08-05 18:18:49Z jkoshy $ -.\" -.Dd August 5, 2009 -.Os -.Dt ELF_GETSHDRSTRNDX 3 -.Sh NAME -.Nm elf_getshdrstrndx -.Nd retrieve the index of the section name string table -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft int -.Fn elf_getshdrstrndx "Elf *elf" "size_t *ndxptr" -.Sh DESCRIPTION -Function -.Fn elf_getshdrstrndx -retrieves the section index of the string table containing section -names from descriptor -.Ar elf -and stores it into the location pointed to by argument -.Ar ndxptr . -.Pp -This function allow applications to process both normal ELF -objects and ELF objects that use extended section numbering uniformly. -.Pp -.Sh RETURN VALUES -These functions return zero if successful, or -1 in case of an error. -.Sh ERRORS -These functions can fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -A NULL value was passed in for argument -.Ar elf . -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not for an ELF file. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -lacks an ELF Executable header. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar ndx -contained a value in the reserved range of section indices. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf32_getehdr 3 , -.Xr elf64_getehdr 3 , -.Xr elf_getident 3 , -.Xr elf_getphdrnum 3 , -.Xr elf_getshdrnum 3 , -.Xr gelf 3 , -.Xr gelf_getehdr 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshnum.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshnum.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshnum.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshnum.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,84 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_getshnum.3 467 2009-08-05 18:18:49Z jkoshy $ -.\" -.Dd August 5, 2009 -.Os -.Dt ELF_GETSHNUM 3 -.Sh NAME -.Nm elf_getshnum -.Nd return the number of sections in an ELF file -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft int -.Fn elf_getshnum "Elf *elf" "size_t *shnum" -.Sh DESCRIPTION -This function is deprecated. -Please use -.Xr elf_getshdrnum 3 -instead. -.Pp -Function -.Fn elf_getshnum -retrieves the number of ELF sections associated with descriptor -.Ar elf -and stores it into the location pointed to by argument -.Ar shnum . -.Pp -This routine allows applications to uniformly process both normal ELF -objects, and ELF objects that use extended section numbering. -.Pp -.Sh RETURN VALUES -Function -.Fn elf_getshnum -returns a non-zero value if successful, or zero in case of an -error. -.Sh ERRORS -Function -.Fn elf_getshnum -can fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -A NULL value was passed in for argument -.Ar elf . -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not for an ELF file. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -lacks an ELF Executable header. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf32_getehdr 3 , -.Xr elf64_getehdr 3 , -.Xr elf_getident 3 , -.Xr elf_getphdrnum 3 , -.Xr elf_getshdrstrndx 3 , -.Xr gelf 3 , -.Xr gelf_getehdr 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshstrndx.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshstrndx.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshstrndx.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_getshstrndx.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,94 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_getshstrndx.3 467 2009-08-05 18:18:49Z jkoshy $ -.\" -.Dd August 5, 2009 -.Os -.Dt ELF_GETSHSTRNDX 3 -.Sh NAME -.Nm elf_getshstrndx , -.Nm elf_setshstrndx -.Nd retrieve/update the index of the section name string table -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft int -.Fn elf_getshstrndx "Elf *elf" "size_t *ndxptr" -.Ft int -.Fn elf_setshstrndx "Elf *elf" "size_t ndx" -.Sh DESCRIPTION -Function -.Fn elf_getshstrndx -retrieves the section index of the string table containing section -names from descriptor -.Ar elf -and stores it into the location pointed to by argument -.Ar ndxptr . -Function -.Fn elf_getshstrndx -is deprecated. -Please use -.Xr elf_getshdrstrndx 3 -instead. -.Pp -Function -.Fn elf_setshstrndx -sets the index of the section name string table to argument -.Ar ndx . -.Pp -These routines allow applications to process both normal ELF -objects and ELF objects that use extended section numbering uniformly. -.Pp -.Sh RETURN VALUES -These functions return a non-zero value if successful, or zero in case -of an error. -.Sh ERRORS -These functions can fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -A NULL value was passed in for argument -.Ar elf . -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not for an ELF file. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -lacks an ELF Executable header. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar ndx -contained a value in the reserved range of section indices. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf32_getehdr 3 , -.Xr elf64_getehdr 3 , -.Xr elf_getident 3 , -.Xr elf_getphdrnum 3 , -.Xr elf_getshdrnum 3 , -.Xr gelf 3 , -.Xr gelf_getehdr 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_hash.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_hash.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_hash.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_hash.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_hash.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd August 15, 2006 -.Os -.Dt ELF_HASH 3 -.Sh NAME -.Nm elf_hash -.Nd compute a hash value for a string -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "unsigned long" -.Fn elf_hash "const char *name" -.Sh DESCRIPTION -Function -.Fn elf_hash -computes a portable hash value for the null terminated string -pointed to by argument -.Ar name . -.Pp -The hash value returned is will be identical across -machines of different architectures. -This allows hash tables to be built on one machine and -correctly used on another of a different architecture. -The hash value returned is also guaranteed -.Em not -to be the bit pattern of all ones (~0UL). -.Sh IMPLEMENTATION NOTES -The library internally uses unsigned 32 bit arithmetic to compute -the hash value. -.Sh SEE ALSO -.Xr elf 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_hash.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_hash.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_hash.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_hash.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_hash.c 3174 2015-03-27 17:13:41Z emaste $"); - -/* - * This elf_hash function is defined by the System V ABI. - */ - -unsigned long -elf_hash(const char *name) -{ - unsigned long h, t; - const unsigned char *s; - - s = (const unsigned char *) name; - h = t = 0; - - for (; *s != '\0'; h = h & ~t) { - h = (h << 4) + *s++; - t = h & 0xF0000000UL; - if (t) - h ^= t >> 24; - } - - return (h); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_kind.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_kind.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_kind.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_kind.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,71 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_kind.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd June 1, 2006 -.Os -.Dt ELF_KIND 3 -.Sh NAME -.Nm elf_kind -.Nd determine ELF file type -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft Elf_Kind -.Fn elf_kind "Elf *elf" -.Sh DESCRIPTION -The -.Fn elf_kind -function identifies the kind of file associated with its argument -.Ar elf . -The argument -.Ar elf -is allowed to be NULL. -.Sh RETURN VALUES -The -.Fn elf_kind -function returns one of the following values: -.Bl -tag -width indent -.It Dv ELF_K_AR -The file associated with argument -.Ar elf -is an archive. -.It Dv ELF_K_ELF -The file associated with argument -.Ar elf -is an ELF file. -.It Dv ELF_K_NONE -The argument -.Ar elf -was NULL, or the ELF library could not determine the type of the file -associated with argument -.Ar elf , -or an error occurred when processing. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_begin 3 , -.Xr elf_getident 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_kind.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_kind.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_kind.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_kind.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_kind.c 3174 2015-03-27 17:13:41Z emaste $"); - -Elf_Kind -elf_kind(Elf *e) -{ - if (e == NULL) - return (ELF_K_NONE); - if (e->e_kind == ELF_K_AR || - e->e_kind == ELF_K_ELF) - return (e->e_kind); - return (ELF_K_NONE); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_memory.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_memory.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_memory.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_memory.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_memory.3 2314 2011-12-11 06:19:51Z jkoshy $ -.\" -.Dd June 28, 2006 -.Os -.Dt ELF_MEMORY 3 -.Sh NAME -.Nm elf_memory -.Nd process an ELF or ar(1) archive mapped into memory -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "Elf *" -.Fn elf_memory "char *image" "size_t size" -.Sh DESCRIPTION -Function -.Fn elf_memory -is used to process an ELF file or -.Xr ar 1 -archive whose image is present in memory. -.Pp -Argument -.Ar image -points to the start of the memory image of the file or archive. -Argument -.Ar size -contains the size in bytes of the memory image. -.Pp -The ELF descriptor is created for reading (i.e., analogous to the -use of -.Xr elf_begin 3 -with a command argument value of -.Dv ELF_C_READ Ns ). -.Sh RETURN VALUES -Function -.Fn elf_memory -returns a pointer to a new ELF descriptor if successful, or NULL if an -error occurred. -.Pp -The return value may be queried for the file type using -.Xr elf_kind 3 . -.Sh EXAMPLES -To read parse an elf file, use: -.Bd -literal -offset indent -int fd; -void *p; -struct stat sb; -Elf *e; -\&... -if ((fd = open("./elf-file", O_RDONLY)) < 0 || - fstat(fd, &sb) < 0 || - (p = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, (off_t) 0)) == - MAP_FAILED) { - ... handle system error ... -} - -if ((e = elf_memory(p, sb.st_size)) == NULL) { - ... handle elf(3) error ... -} -\&... use ELF descriptor "e" here ... -.Ed -.Sh ERRORS -Function -.Fn elf_memory -can fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -A NULL value was used for argument -.Ar image -or the value of argument -.Ar sz -was zero. -.It Bq Er ELF_E_HEADER -The header of the ELF object contained an unsupported value in its -.Va e_ident[EI_CLASS] -field. -.It Bq Er ELF_E_HEADER -The header of the ELF object contained an unsupported value in its -.Va e_ident[EI_DATA] -field. -.It Bq Er ELF_E_RESOURCE -An out of memory condition was detected. -.It Bq Er ELF_E_SEQUENCE -Function -.Fn elf_memory -was called before a working version was set using -.Xr elf_version 3 . -.It Bq Er ELF_E_VERSION -The ELF object referenced by argument -.Ar image -was of an unsupported ELF version. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_begin 3 , -.Xr elf_end 3 , -.Xr elf_errno 3 , -.Xr elf_kind 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_memory.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_memory.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_memory.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_memory.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_memory.c 3013 2014-03-23 06:16:59Z jkoshy $"); - -Elf * -elf_memory(char *image, size_t sz) -{ - if (LIBELF_PRIVATE(version) == EV_NONE) { - LIBELF_SET_ERROR(SEQUENCE, 0); - return (NULL); - } - - if (image == NULL || sz == 0) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - return (_libelf_memory((unsigned char *) image, sz, 1)); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_next.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_next.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_next.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_next.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,96 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_next.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd June 17, 2006 -.Os -.Dt ELF_NEXT 3 -.Sh NAME -.Nm elf_next -.Nd provide sequential access to the next archive member -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft Elf_Cmd -.Fn elf_next "Elf *elf" -.Sh DESCRIPTION -The -.Fn elf_next -function causes the ELF archive descriptor corresponding to argument -.Ar elf -to be adjusted to provide access to the next member in -the archive on a subsequent call to -.Fn elf_begin . -.Pp -The return value of -.Fn elf_next -is suitable for use in a loop invoking -.Fn elf_begin . -.Sh RETURN VALUES -If successful, function -.Fn elf_next -returns the value -.Dv ELF_C_READ . -Otherwise, if argument -.Ar elf -was not associated with an archive, or if it was -.Dv NULL , -or if any other error occurred, the value -.Dv ELF_C_NULL -is returned. -.Sh EXAMPLES -To process all the members of an archive use: -.Bd -literal -offset indent -Elf_Cmd cmd; -Elf *archive, *e; -\&... -cmd = ELF_C_READ; -archive = elf_begin(fd, cmd, NULL); -while ((e = elf_begin(fd, cmd, archive)) != (Elf *) 0) -{ - ... process `e' here ... - - cmd = elf_next(e); - elf_end(e); -} -elf_end(archive); -.Ed -.Sh ERRORS -Function -.Fn elf_next -may fail with the following error: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not associated with a containing -.Xr ar 1 -archive. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_begin 3 , -.Xr elf_end 3 , -.Xr elf_rand 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_next.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_next.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_next.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_next.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_next.c 3174 2015-03-27 17:13:41Z emaste $"); - -Elf_Cmd -elf_next(Elf *e) -{ - off_t next; - Elf *parent; - - if (e == NULL) - return (ELF_C_NULL); - - if ((parent = e->e_parent) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (ELF_C_NULL); - } - - assert(parent->e_kind == ELF_K_AR); - assert(parent->e_cmd == ELF_C_READ); - assert(e->e_rawfile > parent->e_rawfile); - - next = e->e_rawfile - parent->e_rawfile + (off_t) e->e_rawsize; - next = (next + 1) & ~1; /* round up to an even boundary */ - - /* - * Setup the 'e_next' field of the archive descriptor for the - * next call to 'elf_begin()'. - */ - parent->e_u.e_ar.e_next = (next >= (off_t) parent->e_rawsize) ? - (off_t) 0 : next; - - return (ELF_C_READ); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_open.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_open.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_open.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_open.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,121 +0,0 @@ -.\" Copyright (c) 2012 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_open.3 3181 2015-04-10 13:22:51Z emaste $ -.\" -.Dd May 31, 2012 -.Os -.Dt ELF_OPEN 3 -.Sh NAME -.Nm elf_open -.Nd open ELF objects and ar(1) archives -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "Elf *" -.Fn elf_open "int fd" -.Ft "Elf *" -.Fn elf_openmemory "char *image" "size_t sz" -.Sh DESCRIPTION -.Em Important : -The functions -.Fn elf_open -and -.Fn elf_openmemory -are extensions to the ELF(3) API, for the internal use of the -Elftoolchain project. -Portable applications should not use these functions. -.Pp -The function -.Fn elf_open -returns an Elf descriptor opened with mode -.Dv ELF_C_READ -for the ELF object or -.Xr ar 1 -archive referenced by the file descriptor in argument -.Ar fd . -.Pp -The function -.Fn elf_openmemory -returns an ELF descriptor opened with mode -.Dv ELF_C_READ -for the ELF object or -.Xr ar 1 -archive contained in the memory area pointed to by the argument -.Ar image . -The argument -.Ar sz -specifies the size of the memory area in bytes. -.Sh COMPATIBILITY -These functions are non-standard extensions to the ELF(3) API set. -.Pp -The behavior of these functions differs from their counterparts -.Xr elf_begin 3 -and -.Xr elf_memory 3 -in that these functions will successfully open malformed ELF objects -and -.Xr ar 1 -archives, returning an Elf descriptor of type -.Dv ELF_K_NONE . -.Sh RETURN VALUES -The function returns a pointer to a ELF descriptor if successful, or -NULL if an error occurred. -.Sh ERRORS -These functions can fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -The argument -.Ar fd -was of an unsupported file type. -.It Bq Er ELF_E_ARGUMENT -The argument -.Ar sz -was zero, or the argument -.Ar image -was NULL. -.It Bq Er ELF_E_IO -The file descriptor in argument -.Ar fd -was invalid. -.It Bq Er ELF_E_IO -The file descriptor in argument -.Ar fd -could not be read. -.It Bq Er ELF_E_RESOURCE -An out of memory condition was encountered. -.It Bq Er ELF_E_SEQUENCE -Functions -.Fn elf_open -or -.Fn elf_openmemory -was called before a working version was established with -.Xr elf_version 3 . -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_begin 3 , -.Xr elf_errno 3 , -.Xr elf_memory 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_open.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_open.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_open.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_open.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -/*- - * Copyright (c) 2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id$"); - -/* - * Extension API: open a file for reading, ignoring parse errors. - */ - -Elf * -elf_open(int fd) -{ - if (LIBELF_PRIVATE(version) == EV_NONE) { - LIBELF_SET_ERROR(SEQUENCE, 0); - return (NULL); - } - - return (_libelf_open_object(fd, ELF_C_READ, 0)); -} - -/* - * Extension API: create an ELF descriptor for an in-memory object, - * ignoring parse errors. - */ - -Elf * -elf_openmemory(char *image, size_t sz) -{ - if (LIBELF_PRIVATE(version) == EV_NONE) { - LIBELF_SET_ERROR(SEQUENCE, 0); - return (NULL); - } - - if (image == NULL || sz == 0) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - return (_libelf_memory((unsigned char *) image, sz, 0)); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_phnum.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_phnum.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_phnum.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_phnum.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_phnum.c 3174 2015-03-27 17:13:41Z emaste $"); - -static int -_libelf_getphdrnum(Elf *e, size_t *phnum) -{ - void *eh; - int ec; - - if (e == NULL || e->e_kind != ELF_K_ELF || - ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (-1); - } - - if ((eh = _libelf_ehdr(e, ec, 0)) == NULL) - return (-1); - - *phnum = e->e_u.e_elf.e_nphdr; - - return (0); -} - -int -elf_getphdrnum(Elf *e, size_t *phnum) -{ - return (_libelf_getphdrnum(e, phnum)); -} - -/* Deprecated API */ -int -elf_getphnum(Elf *e, size_t *phnum) -{ - return (_libelf_getphdrnum(e, phnum) >= 0); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_rand.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_rand.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_rand.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_rand.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,118 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_rand.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd June 17, 2006 -.Os -.Dt ELF_RAND 3 -.Sh NAME -.Nm elf_rand -.Nd provide sequential access to the next archive member -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft off_t -.Fn elf_rand "Elf *archive" "off_t offset" -.Sh DESCRIPTION -The -.Fn elf_rand -function causes the ELF descriptor -.Ar archive -to be adjusted so that the next call to -.Xr elf_begin 3 -will provide access to the archive member at byte offset -.Ar offset -in the archive. -Argument -.Ar offset -is the byte offset from the start of the archive to the beginning of -the archive header for the desired member. -.Pp -Archive member offsets may be retrieved using the -.Xr elf_getarsym 3 -function. -.Sh RETURN VALUES -Function -.Fn elf_rand -returns -.Ar offset -if successful or zero in case of an error. -.Sh EXAMPLES -To process all the members of an archive use: -.Bd -literal -offset indent -off_t off; -Elf *archive, *e; -\&... -cmd = ELF_C_READ; -archive = elf_begin(fd, cmd, NULL); -while ((e = elf_begin(fd, cmd, archive)) != (Elf *) 0) -{ - ... process `e' here ... - elf_end(e); - - off = ...new value...; - if (elf_rand(archive, off) != off) { - ... process error ... - } -} -elf_end(archive); -.Ed -.Pp -To rewind an archive, use: -.Bd -literal -offset indent -Elf *archive; -\&... -if (elf_rand(archive, SARMAG) != SARMAG) { - ... error ... -} -.Ed -.Sh ERRORS -Function -.Fn elf_rand -may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar archive -was null. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar archive -was not a descriptor for an -.Xr ar 1 -archive. -.It Bq Er ELF_E_ARCHIVE -Argument -.Ar offset -did not correspond to the start of an archive member header. -.El -.Sh SEE ALSO -.Xr ar 1 , -.Xr elf 3 , -.Xr elf_begin 3 , -.Xr elf_end 3 , -.Xr elf_getarsym 3 , -.Xr elf_next 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_rand.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_rand.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_rand.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_rand.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_rand.c 3174 2015-03-27 17:13:41Z emaste $"); - -off_t -elf_rand(Elf *ar, off_t offset) -{ - struct ar_hdr *arh; - - if (ar == NULL || ar->e_kind != ELF_K_AR || - (offset & 1) || offset < SARMAG || - (size_t) offset + sizeof(struct ar_hdr) >= ar->e_rawsize) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return 0; - } - - arh = (struct ar_hdr *) (ar->e_rawfile + offset); - - /* a too simple sanity check */ - if (arh->ar_fmag[0] != '`' || arh->ar_fmag[1] != '\n') { - LIBELF_SET_ERROR(ARCHIVE, 0); - return 0; - } - - ar->e_u.e_ar.e_next = offset; - - return (offset); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_rawfile.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_rawfile.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_rawfile.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_rawfile.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,76 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_rawfile.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd July 3, 2006 -.Os -.Dt ELF_RAWFILE 3 -.Sh NAME -.Nm elf_rawfile -.Nd return uninterpreted contents of an ELF file -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft char * -.Fn elf_rawfile "Elf *elf" "size_t *sz" -.Sh DESCRIPTION -Function -.Fn elf_rawfile -returns the uninterpreted contents of the file referenced by ELF descriptor -.Ar elf . -.Pp -If argument -.Ar sz -is non-null, the function stores the file's size in bytes -in the location to which it points. -A value of zero is written to this location if an error is -encountered. -.Sh RETURN VALUES -Function -.Fn elf_rawfile -returns a valid pointer if successful or NULL if an error occurs. -.Sh ERRORS -Function -.Fn elf_rawfile -may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was NULL. -.It Bq Er ELF_E_SEQUENCE -Argument -.Ar elf -was opened for writing and function -.Fn elf_rawfile -was invoked before -.Xr elf_update 3 . -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_getdata 3 , -.Xr elf_getident 3 , -.Xr elf_kind 3 , -.Xr elf_update 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_rawfile.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_rawfile.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_rawfile.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_rawfile.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_rawfile.c 3174 2015-03-27 17:13:41Z emaste $"); - -char * -elf_rawfile(Elf *e, size_t *sz) -{ - size_t size; - unsigned char *ptr; - - size = e ? e->e_rawsize : 0; - ptr = NULL; - - if (e == NULL) - LIBELF_SET_ERROR(ARGUMENT, 0); - else if ((ptr = e->e_rawfile) == NULL && e->e_cmd == ELF_C_WRITE) - LIBELF_SET_ERROR(SEQUENCE, 0); - - if (sz) - *sz = size; - - return ((char *) ptr); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_scn.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_scn.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_scn.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_scn.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,235 +0,0 @@ -/*- - * Copyright (c) 2006,2008-2010 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_scn.c 3177 2015-03-30 18:19:41Z emaste $"); - -/* - * Load an ELF section table and create a list of Elf_Scn structures. - */ -int -_libelf_load_section_headers(Elf *e, void *ehdr) -{ - Elf_Scn *scn; - uint64_t shoff; - Elf32_Ehdr *eh32; - Elf64_Ehdr *eh64; - int ec, swapbytes; - unsigned char *src; - size_t fsz, i, shnum; - int (*xlator)(unsigned char *_d, size_t _dsz, unsigned char *_s, - size_t _c, int _swap); - - assert(e != NULL); - assert(ehdr != NULL); - assert((e->e_flags & LIBELF_F_SHDRS_LOADED) == 0); - -#define CHECK_EHDR(E,EH) do { \ - if (shoff > e->e_rawsize || \ - fsz != (EH)->e_shentsize || \ - shnum > SIZE_MAX / fsz || \ - fsz * shnum > e->e_rawsize - shoff) { \ - LIBELF_SET_ERROR(HEADER, 0); \ - return (0); \ - } \ - } while (0) - - ec = e->e_class; - fsz = _libelf_fsize(ELF_T_SHDR, ec, e->e_version, (size_t) 1); - assert(fsz > 0); - - shnum = e->e_u.e_elf.e_nscn; - - if (ec == ELFCLASS32) { - eh32 = (Elf32_Ehdr *) ehdr; - shoff = (uint64_t) eh32->e_shoff; - CHECK_EHDR(e, eh32); - } else { - eh64 = (Elf64_Ehdr *) ehdr; - shoff = eh64->e_shoff; - CHECK_EHDR(e, eh64); - } - - xlator = _libelf_get_translator(ELF_T_SHDR, ELF_TOMEMORY, ec); - - swapbytes = e->e_byteorder != LIBELF_PRIVATE(byteorder); - src = e->e_rawfile + shoff; - - /* - * If the file is using extended numbering then section #0 - * would have already been read in. - */ - - i = 0; - if (!STAILQ_EMPTY(&e->e_u.e_elf.e_scn)) { - assert(STAILQ_FIRST(&e->e_u.e_elf.e_scn) == - STAILQ_LAST(&e->e_u.e_elf.e_scn, _Elf_Scn, s_next)); - - i = 1; - src += fsz; - } - - for (; i < shnum; i++, src += fsz) { - if ((scn = _libelf_allocate_scn(e, i)) == NULL) - return (0); - - (*xlator)((unsigned char *) &scn->s_shdr, sizeof(scn->s_shdr), - src, (size_t) 1, swapbytes); - - if (ec == ELFCLASS32) { - scn->s_offset = scn->s_rawoff = - scn->s_shdr.s_shdr32.sh_offset; - scn->s_size = scn->s_shdr.s_shdr32.sh_size; - } else { - scn->s_offset = scn->s_rawoff = - scn->s_shdr.s_shdr64.sh_offset; - scn->s_size = scn->s_shdr.s_shdr64.sh_size; - } - } - - e->e_flags |= LIBELF_F_SHDRS_LOADED; - - return (1); -} - - -Elf_Scn * -elf_getscn(Elf *e, size_t index) -{ - int ec; - void *ehdr; - Elf_Scn *s; - - if (e == NULL || e->e_kind != ELF_K_ELF || - ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if ((ehdr = _libelf_ehdr(e, ec, 0)) == NULL) - return (NULL); - - if (e->e_cmd != ELF_C_WRITE && - (e->e_flags & LIBELF_F_SHDRS_LOADED) == 0 && - _libelf_load_section_headers(e, ehdr) == 0) - return (NULL); - - STAILQ_FOREACH(s, &e->e_u.e_elf.e_scn, s_next) - if (s->s_ndx == index) - return (s); - - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); -} - -size_t -elf_ndxscn(Elf_Scn *s) -{ - if (s == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (SHN_UNDEF); - } - return (s->s_ndx); -} - -Elf_Scn * -elf_newscn(Elf *e) -{ - int ec; - void *ehdr; - Elf_Scn *scn; - - if (e == NULL || e->e_kind != ELF_K_ELF) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64) { - LIBELF_SET_ERROR(CLASS, 0); - return (NULL); - } - - if ((ehdr = _libelf_ehdr(e, ec, 0)) == NULL) - return (NULL); - - /* - * The application may be asking for a new section descriptor - * on an ELF object opened with ELF_C_RDWR or ELF_C_READ. We - * need to bring in the existing section information before - * appending a new one to the list. - * - * Per the ELF(3) API, an application is allowed to open a - * file using ELF_C_READ, mess with its internal structure and - * use elf_update(...,ELF_C_NULL) to compute its new layout. - */ - if (e->e_cmd != ELF_C_WRITE && - (e->e_flags & LIBELF_F_SHDRS_LOADED) == 0 && - _libelf_load_section_headers(e, ehdr) == 0) - return (NULL); - - if (STAILQ_EMPTY(&e->e_u.e_elf.e_scn)) { - assert(e->e_u.e_elf.e_nscn == 0); - if ((scn = _libelf_allocate_scn(e, (size_t) SHN_UNDEF)) == - NULL) - return (NULL); - e->e_u.e_elf.e_nscn++; - } - - assert(e->e_u.e_elf.e_nscn > 0); - - if ((scn = _libelf_allocate_scn(e, e->e_u.e_elf.e_nscn)) == NULL) - return (NULL); - - e->e_u.e_elf.e_nscn++; - - (void) elf_flagscn(scn, ELF_C_SET, ELF_F_DIRTY); - - return (scn); -} - -Elf_Scn * -elf_nextscn(Elf *e, Elf_Scn *s) -{ - if (e == NULL || (e->e_kind != ELF_K_ELF) || - (s && s->s_elf != e)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - return (s == NULL ? elf_getscn(e, (size_t) 1) : - STAILQ_NEXT(s, s_next)); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_shnum.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_shnum.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_shnum.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_shnum.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_shnum.c 3174 2015-03-27 17:13:41Z emaste $"); - -static int -_libelf_getshdrnum(Elf *e, size_t *shnum) -{ - void *eh; - int ec; - - if (e == NULL || e->e_kind != ELF_K_ELF || - ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (-1); - } - - if ((eh = _libelf_ehdr(e, ec, 0)) == NULL) - return (-1); - - *shnum = e->e_u.e_elf.e_nscn; - - return (0); -} - -int -elf_getshdrnum(Elf *e, size_t *shnum) -{ - return (_libelf_getshdrnum(e, shnum)); -} - -/* Deprecated API. */ -int -elf_getshnum(Elf *e, size_t *shnum) -{ - return (_libelf_getshdrnum(e, shnum) >= 0); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_shstrndx.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_shstrndx.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_shstrndx.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_shstrndx.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_shstrndx.c 3174 2015-03-27 17:13:41Z emaste $"); - -static int -_libelf_getshdrstrndx(Elf *e, size_t *strndx) -{ - void *eh; - int ec; - - if (e == NULL || e->e_kind != ELF_K_ELF || - ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (-1); - } - - if ((eh = _libelf_ehdr(e, ec, 0)) == NULL) - return (-1); - - *strndx = e->e_u.e_elf.e_strndx; - - return (0); -} - -int -elf_getshdrstrndx(Elf *e, size_t *strndx) -{ - return (_libelf_getshdrstrndx(e, strndx)); -} - -int -elf_getshstrndx(Elf *e, size_t *strndx) /* Deprecated API. */ -{ - return (_libelf_getshdrstrndx(e, strndx) >= 0); -} - -int -elf_setshstrndx(Elf *e, size_t strndx) -{ - void *eh; - int ec; - - if (e == NULL || e->e_kind != ELF_K_ELF || - ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64) || - ((eh = _libelf_ehdr(e, ec, 0)) == NULL)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - return (_libelf_setshstrndx(e, eh, ec, strndx)); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_strptr.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_strptr.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_strptr.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_strptr.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,116 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_strptr.3 1081 2010-08-14 02:23:48Z jkoshy $ -.\" -.Dd December 16, 2006 -.Os -.Dt ELF_STRPTR 3 -.Sh NAME -.Nm elf_strptr -.Nd retrieve a string pointer in a string table -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "char *" -.Fn elf_strptr "Elf *elf" "size_t scndx" "size_t stroffset" -.Sh DESCRIPTION -Function -.Fn elf_strptr -allows an application to convert a string table offset to a string -pointer, correctly translating the offset in the presence -of multiple -.Vt Elf_Data -descriptors covering the contents of the section. -.Pp -Argument -.Ar elf -is a descriptor for an ELF object. -Argument -.Ar scndx -is the section index for an ELF string table. -Argument -.Ar stroffset -is the index of the desired string in the string -table. -.Sh RETURN VALUES -Function -.Fn elf_strptr -returns a valid pointer on success or NULL in case an error was -encountered. -.Sh ERRORS -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was NULL -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not a descriptor for an ELF object. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar scndx -was not the section index for a string table. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar stroffset -exceeded the size of the string table. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar stroffset -index an unallocated region of the string table. -.It Bq Er ELF_E_DATA -Offset -.Ar stroffset -indexed a region that was not covered by any Elf_Data -descriptor. -.It Bq Er ELF_E_DATA -An erroneous -.Vt Elf_Data -descriptor was part of the section specified by argument -.Ar scndx . -.It Bq Er ELF_E_HEADER -ELF descriptor -.Ar elf -contained an invalid section header. -.It Bq Er ELF_E_RESOURCE -An out of memory condition was detected. -.It Bq Er ELF_E_SECTION -Section -.Ar scndx -contained a malformed section header. -.It Bq Er ELF_E_SECTION -The ELF descriptor in argument -.Ar elf -did not adhere to the conventions used for extended numbering. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf32_getshdr 3 , -.Xr elf64_getshdr 3 , -.Xr elf_getdata 3 , -.Xr elf_rawdata 3 , -.Xr gelf 3 , -.Xr gelf_getshdr 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_strptr.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_strptr.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_strptr.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_strptr.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,132 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_strptr.c 2990 2014-03-17 09:56:58Z jkoshy $"); - -/* - * Convert an ELF section#,offset pair to a string pointer. - */ - -char * -elf_strptr(Elf *e, size_t scndx, size_t offset) -{ - Elf_Scn *s; - Elf_Data *d; - GElf_Shdr shdr; - uint64_t alignment, count; - - if (e == NULL || e->e_kind != ELF_K_ELF) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if ((s = elf_getscn(e, scndx)) == NULL || - gelf_getshdr(s, &shdr) == NULL) - return (NULL); - - if (shdr.sh_type != SHT_STRTAB || - offset >= shdr.sh_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - d = NULL; - if (e->e_flags & ELF_F_LAYOUT) { - - /* - * The application is taking responsibility for the - * ELF object's layout, so we can directly translate - * an offset to a `char *' address using the `d_off' - * members of Elf_Data descriptors. - */ - while ((d = elf_getdata(s, d)) != NULL) { - - if (d->d_buf == 0 || d->d_size == 0) - continue; - - if (d->d_type != ELF_T_BYTE) { - LIBELF_SET_ERROR(DATA, 0); - return (NULL); - } - - if (offset >= d->d_off && - offset < d->d_off + d->d_size) - return ((char *) d->d_buf + offset - d->d_off); - } - } else { - /* - * Otherwise, the `d_off' members are not useable and - * we need to compute offsets ourselves, taking into - * account 'holes' in coverage of the section introduced - * by alignment requirements. - */ - count = (uint64_t) 0; /* cumulative count of bytes seen */ - while ((d = elf_getdata(s, d)) != NULL && count <= offset) { - - if (d->d_buf == NULL || d->d_size == 0) - continue; - - if (d->d_type != ELF_T_BYTE) { - LIBELF_SET_ERROR(DATA, 0); - return (NULL); - } - - if ((alignment = d->d_align) > 1) { - if ((alignment & (alignment - 1)) != 0) { - LIBELF_SET_ERROR(DATA, 0); - return (NULL); - } - count = roundup2(count, alignment); - } - - if (offset < count) { - /* offset starts in the 'hole' */ - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if (offset < count + d->d_size) { - if (d->d_buf != NULL) - return ((char *) d->d_buf + - offset - count); - LIBELF_SET_ERROR(DATA, 0); - return (NULL); - } - - count += d->d_size; - } - } - - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_types.m4 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_types.m4 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_types.m4 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_types.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,309 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: elf_types.m4 321 2009-03-07 16:59:14Z jkoshy $ - */ - -/* - * ELF types, defined in the "enum Elf_Type" API. - * - * The members of the list form a 2-tuple: (name, C-type-suffix). - * + `name' is an Elf_Type symbol without the `ELF_T_' prefix. - * + `C-type-suffix' is the suffix for Elf32_ and Elf64_ type names. - */ - -define(`ELF_TYPE_LIST', - ``ADDR, Addr', - `BYTE, Byte', - `CAP, Cap', - `DYN, Dyn', - `EHDR, Ehdr', - `GNUHASH, -', - `HALF, Half', - `LWORD, Lword', - `MOVE, Move', - `MOVEP, MoveP', - `NOTE, Note', - `OFF, Off', - `PHDR, Phdr', - `REL, Rel', - `RELA, Rela', - `SHDR, Shdr', - `SWORD, Sword', - `SXWORD, Sxword', - `SYMINFO, Syminfo', - `SYM, Sym', - `VDEF, Verdef', - `VNEED, Verneed', - `WORD, Word', - `XWORD, Xword', - `NUM, _'') - -/* - * DEFINE_STRUCT(NAME,MEMBERLIST...) - * - * Map a type name to its members. - * - * Each member-list element comprises of pairs of (field name, type), - * in the sequence used in the file representation of `NAME'. - * - * Each member list element comprises a pair containing a field name - * and a basic type. Basic types include IDENT, HALF, WORD, LWORD, - * ADDR{32,64}, OFF{32,64}, SWORD, XWORD, SXWORD. - * - * The last element of a member list is the null element: `_,_'. - */ - -define(`DEFINE_STRUCT',`define(`$1_DEF',shift($@))dnl') - -DEFINE_STRUCT(`Elf32_Cap', - ``c_tag, WORD', - `c_un.c_val, WORD', - `_,_'') - -DEFINE_STRUCT(`Elf64_Cap', - ``c_tag, XWORD', - `c_un.c_val, XWORD', - `_,_'') - -DEFINE_STRUCT(`Elf32_Dyn', - ``d_tag, SWORD', - `d_un.d_ptr, WORD', - `_,_'') - -DEFINE_STRUCT(`Elf64_Dyn', - ``d_tag, SXWORD', - `d_un.d_ptr, XWORD', - `_,_'') - -DEFINE_STRUCT(`Elf32_Ehdr', - ``e_ident, IDENT', - `e_type, HALF', - `e_machine, HALF', - `e_version, WORD', - `e_entry, ADDR', - `e_phoff, OFF', - `e_shoff, OFF', - `e_flags, WORD', - `e_ehsize, HALF', - `e_phentsize, HALF', - `e_phnum, HALF', - `e_shentsize, HALF', - `e_shnum, HALF', - `e_shstrndx, HALF', - `_,_'') - -DEFINE_STRUCT(`Elf64_Ehdr', - ``e_ident, IDENT', - `e_type, HALF', - `e_machine, HALF', - `e_version, WORD', - `e_entry, ADDR', - `e_phoff, OFF', - `e_shoff, OFF', - `e_flags, WORD', - `e_ehsize, HALF', - `e_phentsize, HALF', - `e_phnum, HALF', - `e_shentsize, HALF', - `e_shnum, HALF', - `e_shstrndx, HALF', - `_,_'') - -DEFINE_STRUCT(`Elf32_Move', - ``m_value, LWORD', - `m_info, WORD', - `m_poffset, WORD', - `m_repeat, HALF', - `m_stride, HALF', - `_,_'') - -DEFINE_STRUCT(`Elf64_Move', - ``m_value, LWORD', - `m_info, XWORD', - `m_poffset, XWORD', - `m_repeat, HALF', - `m_stride, HALF', - `_,_'') - -DEFINE_STRUCT(`Elf32_Phdr', - ``p_type, WORD', - `p_offset, OFF', - `p_vaddr, ADDR', - `p_paddr, ADDR', - `p_filesz, WORD', - `p_memsz, WORD', - `p_flags, WORD', - `p_align, WORD', - `_,_'') - -DEFINE_STRUCT(`Elf64_Phdr', - ``p_type, WORD', - `p_flags, WORD', - `p_offset, OFF', - `p_vaddr, ADDR', - `p_paddr, ADDR', - `p_filesz, XWORD', - `p_memsz, XWORD', - `p_align, XWORD', - `_,_'') - -DEFINE_STRUCT(`Elf32_Rel', - ``r_offset, ADDR', - `r_info, WORD', - `_,_'') - -DEFINE_STRUCT(`Elf64_Rel', - ``r_offset, ADDR', - `r_info, XWORD', - `_,_'') - -DEFINE_STRUCT(`Elf32_Rela', - ``r_offset, ADDR', - `r_info, WORD', - `r_addend, SWORD', - `_,_'') - -DEFINE_STRUCT(`Elf64_Rela', - ``r_offset, ADDR', - `r_info, XWORD', - `r_addend, SXWORD', - `_,_'') - -DEFINE_STRUCT(`Elf32_Shdr', - ``sh_name, WORD', - `sh_type, WORD', - `sh_flags, WORD', - `sh_addr, ADDR', - `sh_offset, OFF', - `sh_size, WORD', - `sh_link, WORD', - `sh_info, WORD', - `sh_addralign, WORD', - `sh_entsize, WORD', - `_,_'') - -DEFINE_STRUCT(`Elf64_Shdr', - ``sh_name, WORD', - `sh_type, WORD', - `sh_flags, XWORD', - `sh_addr, ADDR', - `sh_offset, OFF', - `sh_size, XWORD', - `sh_link, WORD', - `sh_info, WORD', - `sh_addralign, XWORD', - `sh_entsize, XWORD', - `_,_'') - -DEFINE_STRUCT(`Elf32_Sym', - ``st_name, WORD', - `st_value, ADDR', - `st_size, WORD', - `st_info, BYTE', - `st_other, BYTE', - `st_shndx, HALF', - `_,_'') - -DEFINE_STRUCT(`Elf64_Sym', - ``st_name, WORD', - `st_info, BYTE', - `st_other, BYTE', - `st_shndx, HALF', - `st_value, ADDR', - `st_size, XWORD', - `_,_'') - -DEFINE_STRUCT(`Elf32_Syminfo', - ``si_boundto, HALF', - `si_flags, HALF', - `_,_'') - -DEFINE_STRUCT(`Elf64_Syminfo', - ``si_boundto, HALF', - `si_flags, HALF', - `_,_'') - -DEFINE_STRUCT(`Elf32_Verdaux', - ``vda_name, WORD', - `vda_next, WORD', - `_,_'') - -DEFINE_STRUCT(`Elf64_Verdaux', - ``vda_name, WORD', - `vda_next, WORD', - `_,_'') - -DEFINE_STRUCT(`Elf32_Verdef', - ``vd_version, HALF', - `vd_flags, HALF', - `vd_ndx, HALF', - `vd_cnt, HALF', - `vd_hash, WORD', - `vd_aux, WORD', - `vd_next, WORD', - `_,_'') - -DEFINE_STRUCT(`Elf64_Verdef', - ``vd_version, HALF', - `vd_flags, HALF', - `vd_ndx, HALF', - `vd_cnt, HALF', - `vd_hash, WORD', - `vd_aux, WORD', - `vd_next, WORD', - `_,_'') - -DEFINE_STRUCT(`Elf32_Verneed', - ``vn_version, HALF', - `vn_cnt, HALF', - `vn_file, WORD', - `vn_aux, WORD', - `vn_next, WORD', - `_,_'') - -DEFINE_STRUCT(`Elf64_Verneed', - ``vn_version, HALF', - `vn_cnt, HALF', - `vn_file, WORD', - `vn_aux, WORD', - `vn_next, WORD', - `_,_'') - -DEFINE_STRUCT(`Elf32_Vernaux', - ``vna_hash, WORD', - `vna_flags, HALF', - `vna_other, HALF', - `vna_name, WORD', - `vna_next, WORD', - `_,_'') - -DEFINE_STRUCT(`Elf64_Vernaux', - ``vna_hash, WORD', - `vna_flags, HALF', - `vna_other, HALF', - `vna_name, WORD', - `vna_next, WORD', - `_,_'') diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_update.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_update.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_update.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_update.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,378 +0,0 @@ -.\" Copyright (c) 2006-2011 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_update.3 1729 2011-08-14 09:13:00Z jkoshy $ -.\" -.Dd August 14, 2011 -.Os -.Dt ELF_UPDATE 3 -.Sh NAME -.Nm elf_update -.Nd update an ELF descriptor -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft off_t -.Fn elf_update "Elf *elf" "Elf_Cmd cmd" -.Sh DESCRIPTION -Function -.Fn elf_update -causes the library to recalculate the structure of an ELF -object and optionally write out the image of the object -to file. -.Pp -Argument -.Ar elf -should reference a valid ELF descriptor. -.Pp -Argument -.Ar cmd -can be one of the following values: -.Bl -tag -width "Dv ELF_C_WRITE" -.It Dv ELF_C_NULL -The library will recalculate structural information flagging -modified structures with the -.Dv ELF_F_DIRTY -flag, but will not write data to the underlying file image. -.It Dv ELF_C_WRITE -The library will recalculate structural information and will -also write the new image to the underlying file. -The ELF descriptor referenced by argument -.Ar elf -should permit the underlying ELF object to be written or updated -(see -.Xr elf_begin 3 ) . -.El -.Pp -All pointers to -.Vt Elf_Scn -and -.Vt Elf_Data -descriptors associated with descriptor -.Ar elf -should be considered invalid after a call to -.Fn elf_update . -.Ss Specifying Object Layout -The -.Lb libelf -supports two layout modes. -.Bl -tag -width indent -.It "Library Layout" -If the -.Dv ELF_F_LAYOUT -flag is not set on the ELF descriptor, the ELF library will lay out -the ELF object according to the following scheme: -.Bl -tag -compact -width "Section Data" -.It Em EHDR -The ELF executable header will be placed at the start of the object. -.It Em PHDR -If the ELF descriptor contains a program header table, it will be -placed after the Executable Header. -.It Em Section Data -ELF section data, if any, will be placed next, keeping each section's -alignment requirements in mind. -.It Em SHDR -The ELF section header table, if any, will be placed last. -.El -.It "Application Controlled Layout" -The application can take full control of the layout of the ELF object -by setting the -.Dv ELF_F_LAYOUT -flag on the ELF descriptor (see -.Xr elf_flagelf 3 ) . -In this case the library will lay out the ELF object using -application-supplied information as below: -.Pp -.Bl -tag -compact -width "Section Data" -.It Em EHDR -The ELF executable header will be placed at the start of the object. -.It Em PHDR -The ELF program header table, if any, it will be placed at the offset -specified in the -.Va e_phoff -field of the ELF executable header. -.It Em Section Data -The data for each ELF section will be placed at the offset specified -by the -.Va sh_offset -field of the section's header. -The size of the section will be taken from the -.Va sh_size -field of the section header. -.It Em SHDR -The ELF section header table, if any, will be placed at the offset -specified by the -.Va e_shoff -field of the executable header. -.El -.El -.Pp -Gaps in the coverage of the file's contents will be set to the fill value -specified by -.Xr elf_fill 3 . -.Ss Application Supplied Information -The application needs to set the following fields in the data -structures associated with the ELF descriptor prior to calling -.Fn elf_update . -.Bl -tag -width indent -.It "Executable Header" -The fields of the ELF executable header that need to be set by the -application are: -.Pp -.Bl -tag -width "e_ident[EI_OSABI]" -compact -.It Va e_entry -To be set to the desired entry address for executables. -.It Va e_flags -To be set to the desired processor specific flags. -.It Va "e_ident[EI_DATA]" -Must be set to one of -.Dv ELFDATA2LSB -or -.Dv ELFDATA2MSB . -.It Va "e_ident[EI_OSABI]" -To be set to the OS ABI desired. -For example, for -.Fx -executables, this field should be set to -.Dv ELFOSABI_FREEBSD . -.It Va e_machine -To be set to the desired machine architecture, one of the -.Dv EM_* -values in the header file -.In elfdefinitions.h . -.It Va e_phoff -If the application is managing the object's layout, it must -set this field to the file offset of the ELF program header table. -.It Va e_shoff -If the application is managing the object's layout, it must -set this field to the file offset of the ELF section header table. -.It Va e_shstrndx -To be set to the index of the string table containing -section names. -.It Va e_type -To be set to the type of the ELF object, one of the -.Dv ET_* -values in the header file -.In elfdefinitions.h . -.It Va e_version -To be set to the desired version of the ELF object. -.El -.It "Program Header" -All fields of the entries in the program header table need to be -set by the application. -.It "Section Header" -The fields of ELF section headers that need to be set by the -application are: -.Pp -.Bl -tag -width "sh_addralign" -compact -.It Va sh_addr -To be set to the memory address where the section should reside. -.It Va sh_addralign -If the application is managing the file layout, it must set this -field to the desired alignment for the section's contents. -This value must be a power of two and must be at least as large as the -largest alignment needed by any -.Vt Elf_Data -descriptor associated with the section. -.It Va sh_entsize -To be set to the size of each entry, for sections containing fixed size -elements, or set to zero for sections without fixed size elements. -If the application is not managing file layout, it may leave this -field as zero for those sections whose types are known to the library. -.It Va sh_flags -To be set to the desired section flags. -.It Va sh_info -To be set as described in -.Xr elf 5 . -.It Va sh_link -To be set as described in -.Xr elf 5 . -.It Va sh_name -To be set to the index of the section's name in the string table -containing section names. -.It Va sh_offset -If the application is managing the file layout, it must set this -field to the file offset of the section's contents. -.It Va sh_size -If the application is managing the file layout, it must set this -field to the file size of the section's contents. -.It Va sh_type -To be set to the type of the section. -.El -.It "Section Data" -The -.Vt Elf_Data -descriptors associated with each section specify its contents -(see -.Xr elf_getdata 3 ) . -While all the fields in these descriptors are under application -control, the following fields influence object layout: -.Bl -tag -width "Va d_align" -compact -.It Va d_align -To be set to the desired alignment, within the containing section, of -the descriptor's data. -.It Va d_off -If the application is managing object layout, it must set this field -to the file offset, within the section, at which the descriptor's data -should be placed. -.It Va d_size -To be set to the size in bytes of the memory representation of the -descriptor's data. -.El -.El -.Sh RETURN VALUES -Function -.Fn elf_update -returns the total size of the file image if successful, or -1 if an -error occurred. -.Sh ERRORS -This function may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was null. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar cmd -was not recognized. -.It Bq Er ELF_E_ARGUMENT -The argument -.Ar elf -was not a descriptor for an ELF object. -.It Bq Er ELF_E_CLASS -The -.Va e_ident[EI_CLASS] -field of the executable header of argument -.Ar elf -did not match the class of the file. -.It Bq Er ELF_E_DATA -An -.Vt Elf_Data -descriptor contained in argument -.Ar elf -specified an unsupported type. -.It Bq Er ELF_E_DATA -An -.Vt Elf_Data -descriptor specified an alignment that was zero or was not a power of -two. -.It Bq Er ELF_E_HEADER -The ELF header in argument -.Ar elf -requested a different byte order from the byte order already -associated with the file. -.It Bq Er ELF_E_IO -An I/O error was encountered. -.It Bq Er ELF_E_LAYOUT -An -.Vt Elf_Data -descriptor contained in argument -.Ar elf -specified an alignment incompatible with its containing section. -.It Bq Er ELF_E_LAYOUT -Argument -.Ar elf -contained section descriptors that overlapped in extent. -.It Bq Er ELF_E_LAYOUT -Argument -.Ar elf -contained section descriptors that were incorrectly aligned or were -too small for their data. -.It Bq Er ELF_E_LAYOUT -The flag -.Dv ELF_F_LAYOUT -was set on the Elf descriptor and the executable header overlapped -with the program header table. -.It Bq Er ELF_E_LAYOUT -The flag -.Dv ELF_F_LAYOUT -was set on the Elf descriptor and the program header table was placed -at a misaligned file offset. -.It Bq Er ELF_E_LAYOUT -The flag -.Dv ELF_F_LAYOUT -was set on the Elf descriptor and the section header table overlapped -an extent mapped by a section descriptor. -.It Bq Er ELF_E_LAYOUT -The -.Dv ELF_F_LAYOUT -flag was set on the Elf descriptor, and the -.Va d_offset -field in an -.Vt Elf_Data -descriptor contained a value that was not a multiple of the -descriptor's specified alignment. -.It Bq Er ELF_E_MODE -An -.Dv ELF_C_WRITE -operation was requested with an ELF descriptor that was not opened for -writing or updating. -.It Bq Er ELF_E_SECTION -Argument -.Ar elf -contained a section with an unrecognized type. -.It Bq Er ELF_E_SECTION -The section header at index -.Dv SHN_UNDEF -had an illegal section type. -.It Bq Er ELF_E_SEQUENCE -An -.Dv ELF_C_WRITE -operation was requested after a prior call to -.Fn elf_cntl elf ELF_C_FDDONE -disassociated the ELF descriptor -.Ar elf -from its underlying file. -.It Bq Er ELF_E_VERSION -Argument -.Ar elf -had an unsupported version or contained an -.Vt Elf_Data -descriptor with an unsupported version. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf32_getehdr 3 , -.Xr elf32_getphdr 3 , -.Xr elf32_newehdr 3 , -.Xr elf32_newphdr 3 , -.Xr elf64_getehdr 3 , -.Xr elf64_getphdr 3 , -.Xr elf64_newehdr 3 , -.Xr elf64_newphdr 3 , -.Xr elf_begin 3 , -.Xr elf_cntl 3 , -.Xr elf_fill 3 , -.Xr elf_flagehdr 3 , -.Xr elf_flagelf 3 , -.Xr elf_getdata 3 , -.Xr elf_getscn 3 , -.Xr elf_newdata 3 , -.Xr elf_newscn 3 , -.Xr elf_rawdata 3 , -.Xr gelf 3 , -.Xr gelf_newehdr 3 , -.Xr gelf_newphdr 3 , -.Xr elf 5 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_update.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_update.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_update.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_update.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1215 +0,0 @@ -/*- - * Copyright (c) 2006-2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "_libelf.h" - -#if ELFTC_HAVE_MMAP -#include -#endif - -ELFTC_VCSID("$Id: elf_update.c 3190 2015-05-04 15:23:08Z jkoshy $"); - -/* - * Layout strategy: - * - * - Case 1: ELF_F_LAYOUT is asserted - * In this case the application has full control over where the - * section header table, program header table, and section data - * will reside. The library only perform error checks. - * - * - Case 2: ELF_F_LAYOUT is not asserted - * - * The library will do the object layout using the following - * ordering: - * - The executable header is placed first, are required by the - * ELF specification. - * - The program header table is placed immediately following the - * executable header. - * - Section data, if any, is placed after the program header - * table, aligned appropriately. - * - The section header table, if needed, is placed last. - * - * There are two sub-cases to be taken care of: - * - * - Case 2a: e->e_cmd == ELF_C_READ or ELF_C_RDWR - * - * In this sub-case, the underlying ELF object may already have - * content in it, which the application may have modified. The - * library will retrieve content from the existing object as - * needed. - * - * - Case 2b: e->e_cmd == ELF_C_WRITE - * - * The ELF object is being created afresh in this sub-case; - * there is no pre-existing content in the underlying ELF - * object. - */ - -/* - * The types of extents in an ELF object. - */ -enum elf_extent { - ELF_EXTENT_EHDR, - ELF_EXTENT_PHDR, - ELF_EXTENT_SECTION, - ELF_EXTENT_SHDR -}; - -/* - * A extent descriptor, used when laying out an ELF object. - */ -struct _Elf_Extent { - SLIST_ENTRY(_Elf_Extent) ex_next; - uint64_t ex_start; /* Start of the region. */ - uint64_t ex_size; /* The size of the region. */ - enum elf_extent ex_type; /* Type of region. */ - void *ex_desc; /* Associated descriptor. */ -}; - -SLIST_HEAD(_Elf_Extent_List, _Elf_Extent); - -/* - * Compute the extents of a section, by looking at the data - * descriptors associated with it. The function returns 1 - * if successful, or zero if an error was detected. - */ -static int -_libelf_compute_section_extents(Elf *e, Elf_Scn *s, off_t rc) -{ - Elf_Data *d; - size_t fsz, msz; - int ec, elftype; - uint32_t sh_type; - uint64_t d_align; - Elf32_Shdr *shdr32; - Elf64_Shdr *shdr64; - struct _Libelf_Data *ld; - uint64_t scn_size, scn_alignment; - uint64_t sh_align, sh_entsize, sh_offset, sh_size; - - ec = e->e_class; - - shdr32 = &s->s_shdr.s_shdr32; - shdr64 = &s->s_shdr.s_shdr64; - if (ec == ELFCLASS32) { - sh_type = shdr32->sh_type; - sh_align = (uint64_t) shdr32->sh_addralign; - sh_entsize = (uint64_t) shdr32->sh_entsize; - sh_offset = (uint64_t) shdr32->sh_offset; - sh_size = (uint64_t) shdr32->sh_size; - } else { - sh_type = shdr64->sh_type; - sh_align = shdr64->sh_addralign; - sh_entsize = shdr64->sh_entsize; - sh_offset = shdr64->sh_offset; - sh_size = shdr64->sh_size; - } - - assert(sh_type != SHT_NULL && sh_type != SHT_NOBITS); - - elftype = _libelf_xlate_shtype(sh_type); - if (elftype > ELF_T_LAST) { - LIBELF_SET_ERROR(SECTION, 0); - return (0); - } - - if (sh_align == 0) - sh_align = _libelf_falign(elftype, ec); - - /* - * Compute the section's size and alignment using the data - * descriptors associated with the section. - */ - if (STAILQ_EMPTY(&s->s_data)) { - /* - * The section's content (if any) has not been read in - * yet. If section is not dirty marked dirty, we can - * reuse the values in the 'sh_size' and 'sh_offset' - * fields of the section header. - */ - if ((s->s_flags & ELF_F_DIRTY) == 0) { - /* - * If the library is doing the layout, then we - * compute the new start offset for the - * section based on the current offset and the - * section's alignment needs. - * - * If the application is doing the layout, we - * can use the value in the 'sh_offset' field - * in the section header directly. - */ - if (e->e_flags & ELF_F_LAYOUT) - goto updatedescriptor; - else - goto computeoffset; - } - - /* - * Otherwise, we need to bring in the section's data - * from the underlying ELF object. - */ - if (e->e_cmd != ELF_C_WRITE && elf_getdata(s, NULL) == NULL) - return (0); - } - - /* - * Loop through the section's data descriptors. - */ - scn_size = 0L; - scn_alignment = 0; - STAILQ_FOREACH(ld, &s->s_data, d_next) { - - d = &ld->d_data; - - /* - * The data buffer's type is known. - */ - if (d->d_type >= ELF_T_NUM) { - LIBELF_SET_ERROR(DATA, 0); - return (0); - } - - /* - * The data buffer's version is supported. - */ - if (d->d_version != e->e_version) { - LIBELF_SET_ERROR(VERSION, 0); - return (0); - } - - /* - * The buffer's alignment is non-zero and a power of - * two. - */ - if ((d_align = d->d_align) == 0 || - (d_align & (d_align - 1))) { - LIBELF_SET_ERROR(DATA, 0); - return (0); - } - - /* - * The buffer's size should be a multiple of the - * memory size of the underlying type. - */ - msz = _libelf_msize(d->d_type, ec, e->e_version); - if (d->d_size % msz) { - LIBELF_SET_ERROR(DATA, 0); - return (0); - } - - /* - * If the application is controlling layout, then the - * d_offset field should be compatible with the - * buffer's specified alignment. - */ - if ((e->e_flags & ELF_F_LAYOUT) && - (d->d_off & (d_align - 1))) { - LIBELF_SET_ERROR(LAYOUT, 0); - return (0); - } - - /* - * Compute the section's size. - */ - if (e->e_flags & ELF_F_LAYOUT) { - if ((uint64_t) d->d_off + d->d_size > scn_size) - scn_size = d->d_off + d->d_size; - } else { - scn_size = roundup2(scn_size, d->d_align); - d->d_off = scn_size; - fsz = _libelf_fsize(d->d_type, ec, d->d_version, - (size_t) d->d_size / msz); - scn_size += fsz; - } - - /* - * The section's alignment is the maximum alignment - * needed for its data buffers. - */ - if (d_align > scn_alignment) - scn_alignment = d_align; - } - - - /* - * If the application is requesting full control over the - * layout of the section, check the section's specified size, - * offsets and alignment for sanity. - */ - if (e->e_flags & ELF_F_LAYOUT) { - if (scn_alignment > sh_align || - sh_offset % sh_align || - sh_size < scn_size || - sh_offset % _libelf_falign(elftype, ec)) { - LIBELF_SET_ERROR(LAYOUT, 0); - return (0); - } - goto updatedescriptor; - } - - /* - * Otherwise, compute the values in the section header. - * - * The section alignment is the maximum alignment for any of - * its contained data descriptors. - */ - if (scn_alignment > sh_align) - sh_align = scn_alignment; - - /* - * If the section entry size is zero, try and fill in an - * appropriate entry size. Per the elf(5) manual page - * sections without fixed-size entries should have their - * 'sh_entsize' field set to zero. - */ - if (sh_entsize == 0 && - (sh_entsize = _libelf_fsize(elftype, ec, e->e_version, - (size_t) 1)) == 1) - sh_entsize = 0; - - sh_size = scn_size; - -computeoffset: - /* - * Compute the new offset for the section based on - * the section's alignment needs. - */ - sh_offset = roundup((uint64_t) rc, sh_align); - - /* - * Update the section header. - */ - if (ec == ELFCLASS32) { - shdr32->sh_addralign = (uint32_t) sh_align; - shdr32->sh_entsize = (uint32_t) sh_entsize; - shdr32->sh_offset = (uint32_t) sh_offset; - shdr32->sh_size = (uint32_t) sh_size; - } else { - shdr64->sh_addralign = sh_align; - shdr64->sh_entsize = sh_entsize; - shdr64->sh_offset = sh_offset; - shdr64->sh_size = sh_size; - } - -updatedescriptor: - /* - * Update the section descriptor. - */ - s->s_size = sh_size; - s->s_offset = sh_offset; - - return (1); -} - -/* - * Free a list of extent descriptors. - */ - -static void -_libelf_release_extents(struct _Elf_Extent_List *extents) -{ - struct _Elf_Extent *ex; - - while ((ex = SLIST_FIRST(extents)) != NULL) { - SLIST_REMOVE_HEAD(extents, ex_next); - free(ex); - } -} - -/* - * Check if an extent 's' defined by [start..start+size) is free. - * This routine assumes that the given extent list is sorted in order - * of ascending extent offsets. - */ - -static int -_libelf_extent_is_unused(struct _Elf_Extent_List *extents, - const uint64_t start, const uint64_t size, struct _Elf_Extent **prevt) -{ - uint64_t tmax, tmin; - struct _Elf_Extent *t, *pt; - const uint64_t smax = start + size; - - /* First, look for overlaps with existing extents. */ - pt = NULL; - SLIST_FOREACH(t, extents, ex_next) { - tmin = t->ex_start; - tmax = tmin + t->ex_size; - - if (tmax <= start) { - /* - * 't' lies entirely before 's': ...| t |...| s |... - */ - pt = t; - continue; - } else if (smax <= tmin) { - /* - * 's' lies entirely before 't', and after 'pt': - * ...| pt |...| s |...| t |... - */ - assert(pt == NULL || - pt->ex_start + pt->ex_size <= start); - break; - } else - /* 's' and 't' overlap. */ - return (0); - } - - if (prevt) - *prevt = pt; - return (1); -} - -/* - * Insert an extent into the list of extents. - */ - -static int -_libelf_insert_extent(struct _Elf_Extent_List *extents, int type, - uint64_t start, uint64_t size, void *desc) -{ - struct _Elf_Extent *ex, *prevt; - - assert(type >= ELF_EXTENT_EHDR && type <= ELF_EXTENT_SHDR); - - prevt = NULL; - - /* - * If the requested range overlaps with an existing extent, - * signal an error. - */ - if (!_libelf_extent_is_unused(extents, start, size, &prevt)) { - LIBELF_SET_ERROR(LAYOUT, 0); - return (0); - } - - /* Allocate and fill in a new extent descriptor. */ - if ((ex = malloc(sizeof(struct _Elf_Extent))) == NULL) { - LIBELF_SET_ERROR(RESOURCE, errno); - return (0); - } - ex->ex_start = start; - ex->ex_size = size; - ex->ex_desc = desc; - ex->ex_type = type; - - /* Insert the region descriptor into the list. */ - if (prevt) - SLIST_INSERT_AFTER(prevt, ex, ex_next); - else - SLIST_INSERT_HEAD(extents, ex, ex_next); - return (1); -} - -/* - * Recompute section layout. - */ - -static off_t -_libelf_resync_sections(Elf *e, off_t rc, struct _Elf_Extent_List *extents) -{ - int ec; - Elf_Scn *s; - size_t sh_type; - - ec = e->e_class; - - /* - * Make a pass through sections, computing the extent of each - * section. - */ - STAILQ_FOREACH(s, &e->e_u.e_elf.e_scn, s_next) { - if (ec == ELFCLASS32) - sh_type = s->s_shdr.s_shdr32.sh_type; - else - sh_type = s->s_shdr.s_shdr64.sh_type; - - if (sh_type == SHT_NOBITS || sh_type == SHT_NULL) - continue; - - if (_libelf_compute_section_extents(e, s, rc) == 0) - return ((off_t) -1); - - if (s->s_size == 0) - continue; - - if (!_libelf_insert_extent(extents, ELF_EXTENT_SECTION, - s->s_offset, s->s_size, s)) - return ((off_t) -1); - - if ((size_t) rc < s->s_offset + s->s_size) - rc = (off_t) (s->s_offset + s->s_size); - } - - return (rc); -} - -/* - * Recompute the layout of the ELF object and update the internal data - * structures associated with the ELF descriptor. - * - * Returns the size in bytes the ELF object would occupy in its file - * representation. - * - * After a successful call to this function, the following structures - * are updated: - * - * - The ELF header is updated. - * - All extents in the ELF object are sorted in order of ascending - * addresses. Sections have their section header table entries - * updated. An error is signalled if an overlap was detected among - * extents. - * - Data descriptors associated with sections are checked for valid - * types, offsets and alignment. - * - * After a resync_elf() successfully returns, the ELF descriptor is - * ready for being handed over to _libelf_write_elf(). - */ - -static off_t -_libelf_resync_elf(Elf *e, struct _Elf_Extent_List *extents) -{ - int ec, eh_class; - unsigned int eh_byteorder, eh_version; - size_t align, fsz; - size_t phnum, shnum; - off_t rc, phoff, shoff; - void *ehdr, *phdr; - Elf32_Ehdr *eh32; - Elf64_Ehdr *eh64; - - rc = 0; - - ec = e->e_class; - - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - /* - * Prepare the EHDR. - */ - if ((ehdr = _libelf_ehdr(e, ec, 0)) == NULL) - return ((off_t) -1); - - eh32 = ehdr; - eh64 = ehdr; - - if (ec == ELFCLASS32) { - eh_byteorder = eh32->e_ident[EI_DATA]; - eh_class = eh32->e_ident[EI_CLASS]; - phoff = (off_t) eh32->e_phoff; - shoff = (off_t) eh32->e_shoff; - eh_version = eh32->e_version; - } else { - eh_byteorder = eh64->e_ident[EI_DATA]; - eh_class = eh64->e_ident[EI_CLASS]; - phoff = (off_t) eh64->e_phoff; - shoff = (off_t) eh64->e_shoff; - eh_version = eh64->e_version; - } - - if (phoff < 0 || shoff < 0) { - LIBELF_SET_ERROR(HEADER, 0); - return ((off_t) -1); - } - - if (eh_version == EV_NONE) - eh_version = EV_CURRENT; - - if (eh_version != e->e_version) { /* always EV_CURRENT */ - LIBELF_SET_ERROR(VERSION, 0); - return ((off_t) -1); - } - - if (eh_class != e->e_class) { - LIBELF_SET_ERROR(CLASS, 0); - return ((off_t) -1); - } - - if (e->e_cmd != ELF_C_WRITE && eh_byteorder != e->e_byteorder) { - LIBELF_SET_ERROR(HEADER, 0); - return ((off_t) -1); - } - - shnum = e->e_u.e_elf.e_nscn; - phnum = e->e_u.e_elf.e_nphdr; - - e->e_byteorder = eh_byteorder; - -#define INITIALIZE_EHDR(E,EC,V) do { \ - unsigned int _version = (unsigned int) (V); \ - (E)->e_ident[EI_MAG0] = ELFMAG0; \ - (E)->e_ident[EI_MAG1] = ELFMAG1; \ - (E)->e_ident[EI_MAG2] = ELFMAG2; \ - (E)->e_ident[EI_MAG3] = ELFMAG3; \ - (E)->e_ident[EI_CLASS] = (unsigned char) (EC); \ - (E)->e_ident[EI_VERSION] = (_version & 0xFFU); \ - (E)->e_ehsize = (uint16_t) _libelf_fsize(ELF_T_EHDR, \ - (EC), _version, (size_t) 1); \ - (E)->e_phentsize = (uint16_t) ((phnum == 0) ? 0 : \ - _libelf_fsize(ELF_T_PHDR, (EC), _version, \ - (size_t) 1)); \ - (E)->e_shentsize = (uint16_t) _libelf_fsize(ELF_T_SHDR, \ - (EC), _version, (size_t) 1); \ - } while (0) - - if (ec == ELFCLASS32) - INITIALIZE_EHDR(eh32, ec, eh_version); - else - INITIALIZE_EHDR(eh64, ec, eh_version); - - (void) elf_flagehdr(e, ELF_C_SET, ELF_F_DIRTY); - - rc += (off_t) _libelf_fsize(ELF_T_EHDR, ec, eh_version, (size_t) 1); - - if (!_libelf_insert_extent(extents, ELF_EXTENT_EHDR, 0, (uint64_t) rc, - ehdr)) - return ((off_t) -1); - - /* - * Compute the layout the program header table, if one is - * present. The program header table needs to be aligned to a - * `natural' boundary. - */ - if (phnum) { - fsz = _libelf_fsize(ELF_T_PHDR, ec, eh_version, phnum); - align = _libelf_falign(ELF_T_PHDR, ec); - - if (e->e_flags & ELF_F_LAYOUT) { - /* - * Check offsets for sanity. - */ - if (rc > phoff) { - LIBELF_SET_ERROR(LAYOUT, 0); - return ((off_t) -1); - } - - if (phoff % (off_t) align) { - LIBELF_SET_ERROR(LAYOUT, 0); - return ((off_t) -1); - } - - } else - phoff = roundup(rc, (off_t) align); - - rc = phoff + (off_t) fsz; - - phdr = _libelf_getphdr(e, ec); - - if (!_libelf_insert_extent(extents, ELF_EXTENT_PHDR, - (uint64_t) phoff, fsz, phdr)) - return ((off_t) -1); - } else - phoff = 0; - - /* - * Compute the layout of the sections associated with the - * file. - */ - - if (e->e_cmd != ELF_C_WRITE && - (e->e_flags & LIBELF_F_SHDRS_LOADED) == 0 && - _libelf_load_section_headers(e, ehdr) == 0) - return ((off_t) -1); - - if ((rc = _libelf_resync_sections(e, rc, extents)) < 0) - return ((off_t) -1); - - /* - * Compute the space taken up by the section header table, if - * one is needed. - * - * If ELF_F_LAYOUT has been asserted, the application may have - * placed the section header table in between existing - * sections, so the net size of the file need not increase due - * to the presence of the section header table. - * - * If the library is responsible for laying out the object, - * the section header table is placed after section data. - */ - if (shnum) { - fsz = _libelf_fsize(ELF_T_SHDR, ec, eh_version, shnum); - align = _libelf_falign(ELF_T_SHDR, ec); - - if (e->e_flags & ELF_F_LAYOUT) { - if (shoff % (off_t) align) { - LIBELF_SET_ERROR(LAYOUT, 0); - return ((off_t) -1); - } - } else - shoff = roundup(rc, (off_t) align); - - if (shoff + (off_t) fsz > rc) - rc = shoff + (off_t) fsz; - - if (!_libelf_insert_extent(extents, ELF_EXTENT_SHDR, - (uint64_t) shoff, fsz, NULL)) - return ((off_t) -1); - } else - shoff = 0; - - /* - * Set the fields of the Executable Header that could potentially use - * extended numbering. - */ - _libelf_setphnum(e, ehdr, ec, phnum); - _libelf_setshnum(e, ehdr, ec, shnum); - - /* - * Update the `e_phoff' and `e_shoff' fields if the library is - * doing the layout. - */ - if ((e->e_flags & ELF_F_LAYOUT) == 0) { - if (ec == ELFCLASS32) { - eh32->e_phoff = (uint32_t) phoff; - eh32->e_shoff = (uint32_t) shoff; - } else { - eh64->e_phoff = (uint64_t) phoff; - eh64->e_shoff = (uint64_t) shoff; - } - } - - return (rc); -} - -/* - * Write out the contents of an ELF section. - */ - -static off_t -_libelf_write_scn(Elf *e, unsigned char *nf, struct _Elf_Extent *ex) -{ - int ec; - off_t rc; - Elf_Scn *s; - int elftype; - Elf_Data *d, dst; - uint32_t sh_type; - struct _Libelf_Data *ld; - uint64_t sh_off, sh_size; - size_t fsz, msz, nobjects; - - assert(ex->ex_type == ELF_EXTENT_SECTION); - - s = ex->ex_desc; - rc = (off_t) ex->ex_start; - - if ((ec = e->e_class) == ELFCLASS32) { - sh_type = s->s_shdr.s_shdr32.sh_type; - sh_size = (uint64_t) s->s_shdr.s_shdr32.sh_size; - } else { - sh_type = s->s_shdr.s_shdr64.sh_type; - sh_size = s->s_shdr.s_shdr64.sh_size; - } - - /* - * Ignore sections that do not allocate space in the file. - */ - if (sh_type == SHT_NOBITS || sh_type == SHT_NULL || sh_size == 0) - return (rc); - - elftype = _libelf_xlate_shtype(sh_type); - assert(elftype >= ELF_T_FIRST && elftype <= ELF_T_LAST); - - sh_off = s->s_offset; - assert(sh_off % _libelf_falign(elftype, ec) == 0); - - /* - * If the section has a `rawdata' descriptor, and the section - * contents have not been modified, use its contents directly. - * The `s_rawoff' member contains the offset into the original - * file, while `s_offset' contains its new location in the - * destination. - */ - - if (STAILQ_EMPTY(&s->s_data)) { - - if ((d = elf_rawdata(s, NULL)) == NULL) - return ((off_t) -1); - - STAILQ_FOREACH(ld, &s->s_rawdata, d_next) { - - d = &ld->d_data; - - if ((uint64_t) rc < sh_off + d->d_off) - (void) memset(nf + rc, - LIBELF_PRIVATE(fillchar), - (size_t) (sh_off + d->d_off - - (uint64_t) rc)); - rc = (off_t) (sh_off + d->d_off); - - assert(d->d_buf != NULL); - assert(d->d_type == ELF_T_BYTE); - assert(d->d_version == e->e_version); - - (void) memcpy(nf + rc, - e->e_rawfile + s->s_rawoff + d->d_off, - (size_t) d->d_size); - - rc += (off_t) d->d_size; - } - - return (rc); - } - - /* - * Iterate over the set of data descriptors for this section. - * The prior call to _libelf_resync_elf() would have setup the - * descriptors for this step. - */ - - dst.d_version = e->e_version; - - STAILQ_FOREACH(ld, &s->s_data, d_next) { - - d = &ld->d_data; - - msz = _libelf_msize(d->d_type, ec, e->e_version); - - if ((uint64_t) rc < sh_off + d->d_off) - (void) memset(nf + rc, - LIBELF_PRIVATE(fillchar), - (size_t) (sh_off + d->d_off - (uint64_t) rc)); - - rc = (off_t) (sh_off + d->d_off); - - assert(d->d_buf != NULL); - assert(d->d_version == e->e_version); - assert(d->d_size % msz == 0); - - nobjects = (size_t) (d->d_size / msz); - - fsz = _libelf_fsize(d->d_type, ec, e->e_version, nobjects); - - dst.d_buf = nf + rc; - dst.d_size = fsz; - - if (_libelf_xlate(&dst, d, e->e_byteorder, ec, ELF_TOFILE) == - NULL) - return ((off_t) -1); - - rc += (off_t) fsz; - } - - return (rc); -} - -/* - * Write out an ELF Executable Header. - */ - -static off_t -_libelf_write_ehdr(Elf *e, unsigned char *nf, struct _Elf_Extent *ex) -{ - int ec; - void *ehdr; - size_t fsz, msz; - Elf_Data dst, src; - - assert(ex->ex_type == ELF_EXTENT_EHDR); - assert(ex->ex_start == 0); /* Ehdr always comes first. */ - - ec = e->e_class; - - ehdr = _libelf_ehdr(e, ec, 0); - assert(ehdr != NULL); - - fsz = _libelf_fsize(ELF_T_EHDR, ec, e->e_version, (size_t) 1); - msz = _libelf_msize(ELF_T_EHDR, ec, e->e_version); - - (void) memset(&dst, 0, sizeof(dst)); - (void) memset(&src, 0, sizeof(src)); - - src.d_buf = ehdr; - src.d_size = msz; - src.d_type = ELF_T_EHDR; - src.d_version = dst.d_version = e->e_version; - - dst.d_buf = nf; - dst.d_size = fsz; - - if (_libelf_xlate(&dst, &src, e->e_byteorder, ec, ELF_TOFILE) == - NULL) - return ((off_t) -1); - - return ((off_t) fsz); -} - -/* - * Write out an ELF program header table. - */ - -static off_t -_libelf_write_phdr(Elf *e, unsigned char *nf, struct _Elf_Extent *ex) -{ - int ec; - void *ehdr; - Elf32_Ehdr *eh32; - Elf64_Ehdr *eh64; - Elf_Data dst, src; - size_t fsz, phnum; - uint64_t phoff; - - assert(ex->ex_type == ELF_EXTENT_PHDR); - - ec = e->e_class; - ehdr = _libelf_ehdr(e, ec, 0); - phnum = e->e_u.e_elf.e_nphdr; - - assert(phnum > 0); - - if (ec == ELFCLASS32) { - eh32 = (Elf32_Ehdr *) ehdr; - phoff = (uint64_t) eh32->e_phoff; - } else { - eh64 = (Elf64_Ehdr *) ehdr; - phoff = eh64->e_phoff; - } - - assert(phoff > 0); - assert(ex->ex_start == phoff); - assert(phoff % _libelf_falign(ELF_T_PHDR, ec) == 0); - - (void) memset(&dst, 0, sizeof(dst)); - (void) memset(&src, 0, sizeof(src)); - - fsz = _libelf_fsize(ELF_T_PHDR, ec, e->e_version, phnum); - assert(fsz > 0); - - src.d_buf = _libelf_getphdr(e, ec); - src.d_version = dst.d_version = e->e_version; - src.d_type = ELF_T_PHDR; - src.d_size = phnum * _libelf_msize(ELF_T_PHDR, ec, - e->e_version); - - dst.d_size = fsz; - dst.d_buf = nf + ex->ex_start; - - if (_libelf_xlate(&dst, &src, e->e_byteorder, ec, ELF_TOFILE) == - NULL) - return ((off_t) -1); - - return ((off_t) (phoff + fsz)); -} - -/* - * Write out an ELF section header table. - */ - -static off_t -_libelf_write_shdr(Elf *e, unsigned char *nf, struct _Elf_Extent *ex) -{ - int ec; - void *ehdr; - Elf_Scn *scn; - uint64_t shoff; - Elf32_Ehdr *eh32; - Elf64_Ehdr *eh64; - size_t fsz, nscn; - Elf_Data dst, src; - - assert(ex->ex_type == ELF_EXTENT_SHDR); - - ec = e->e_class; - ehdr = _libelf_ehdr(e, ec, 0); - nscn = e->e_u.e_elf.e_nscn; - - if (ec == ELFCLASS32) { - eh32 = (Elf32_Ehdr *) ehdr; - shoff = (uint64_t) eh32->e_shoff; - } else { - eh64 = (Elf64_Ehdr *) ehdr; - shoff = eh64->e_shoff; - } - - assert(nscn > 0); - assert(shoff % _libelf_falign(ELF_T_SHDR, ec) == 0); - assert(ex->ex_start == shoff); - - (void) memset(&dst, 0, sizeof(dst)); - (void) memset(&src, 0, sizeof(src)); - - src.d_type = ELF_T_SHDR; - src.d_size = _libelf_msize(ELF_T_SHDR, ec, e->e_version); - src.d_version = dst.d_version = e->e_version; - - fsz = _libelf_fsize(ELF_T_SHDR, ec, e->e_version, (size_t) 1); - - STAILQ_FOREACH(scn, &e->e_u.e_elf.e_scn, s_next) { - if (ec == ELFCLASS32) - src.d_buf = &scn->s_shdr.s_shdr32; - else - src.d_buf = &scn->s_shdr.s_shdr64; - - dst.d_size = fsz; - dst.d_buf = nf + ex->ex_start + scn->s_ndx * fsz; - - if (_libelf_xlate(&dst, &src, e->e_byteorder, ec, - ELF_TOFILE) == NULL) - return ((off_t) -1); - } - - return ((off_t) (ex->ex_start + nscn * fsz)); -} - -/* - * Write out the file image. - * - * The original file could have been mapped in with an ELF_C_RDWR - * command and the application could have added new content or - * re-arranged its sections before calling elf_update(). Consequently - * its not safe to work `in place' on the original file. So we - * malloc() the required space for the updated ELF object and build - * the object there and write it out to the underlying file at the - * end. Note that the application may have opened the underlying file - * in ELF_C_RDWR and only retrieved/modified a few sections. We take - * care to avoid translating file sections unnecessarily. - * - * Gaps in the coverage of the file by the file's sections will be - * filled with the fill character set by elf_fill(3). - */ - -static off_t -_libelf_write_elf(Elf *e, off_t newsize, struct _Elf_Extent_List *extents) -{ - off_t nrc, rc; - Elf_Scn *scn, *tscn; - struct _Elf_Extent *ex; - unsigned char *newfile; - - assert(e->e_kind == ELF_K_ELF); - assert(e->e_cmd == ELF_C_RDWR || e->e_cmd == ELF_C_WRITE); - assert(e->e_fd >= 0); - - if ((newfile = malloc((size_t) newsize)) == NULL) { - LIBELF_SET_ERROR(RESOURCE, errno); - return ((off_t) -1); - } - - nrc = rc = 0; - SLIST_FOREACH(ex, extents, ex_next) { - - /* Fill inter-extent gaps. */ - if (ex->ex_start > (size_t) rc) - (void) memset(newfile + rc, LIBELF_PRIVATE(fillchar), - (size_t) (ex->ex_start - (uint64_t) rc)); - - switch (ex->ex_type) { - case ELF_EXTENT_EHDR: - if ((nrc = _libelf_write_ehdr(e, newfile, ex)) < 0) - goto error; - break; - - case ELF_EXTENT_PHDR: - if ((nrc = _libelf_write_phdr(e, newfile, ex)) < 0) - goto error; - break; - - case ELF_EXTENT_SECTION: - if ((nrc = _libelf_write_scn(e, newfile, ex)) < 0) - goto error; - break; - - case ELF_EXTENT_SHDR: - if ((nrc = _libelf_write_shdr(e, newfile, ex)) < 0) - goto error; - break; - - default: - assert(0); - break; - } - - assert(ex->ex_start + ex->ex_size == (size_t) nrc); - assert(rc < nrc); - - rc = nrc; - } - - assert(rc == newsize); - - /* - * For regular files, throw away existing file content and - * unmap any existing mappings. - */ - if ((e->e_flags & LIBELF_F_SPECIAL_FILE) == 0) { - if (ftruncate(e->e_fd, (off_t) 0) < 0 || - lseek(e->e_fd, (off_t) 0, SEEK_SET)) { - LIBELF_SET_ERROR(IO, errno); - goto error; - } -#if ELFTC_HAVE_MMAP - if (e->e_flags & LIBELF_F_RAWFILE_MMAP) { - assert(e->e_rawfile != NULL); - assert(e->e_cmd == ELF_C_RDWR); - if (munmap(e->e_rawfile, e->e_rawsize) < 0) { - LIBELF_SET_ERROR(IO, errno); - goto error; - } - } -#endif - } - - /* - * Write out the new contents. - */ - if (write(e->e_fd, newfile, (size_t) newsize) != newsize) { - LIBELF_SET_ERROR(IO, errno); - goto error; - } - - /* - * For files opened in ELF_C_RDWR mode, set up the new 'raw' - * contents. - */ - if (e->e_cmd == ELF_C_RDWR) { - assert(e->e_rawfile != NULL); - assert((e->e_flags & LIBELF_F_RAWFILE_MALLOC) || - (e->e_flags & LIBELF_F_RAWFILE_MMAP)); - if (e->e_flags & LIBELF_F_RAWFILE_MALLOC) { - free(e->e_rawfile); - e->e_rawfile = newfile; - newfile = NULL; - } -#if ELFTC_HAVE_MMAP - else if (e->e_flags & LIBELF_F_RAWFILE_MMAP) { - if ((e->e_rawfile = mmap(NULL, (size_t) newsize, - PROT_READ, MAP_PRIVATE, e->e_fd, (off_t) 0)) == - MAP_FAILED) { - LIBELF_SET_ERROR(IO, errno); - goto error; - } - } -#endif /* ELFTC_HAVE_MMAP */ - - /* Record the new size of the file. */ - e->e_rawsize = (size_t) newsize; - } else { - /* File opened in ELF_C_WRITE mode. */ - assert(e->e_rawfile == NULL); - } - - /* - * Reset flags, remove existing section descriptors and - * {E,P}HDR pointers so that a subsequent elf_get{e,p}hdr() - * and elf_getscn() will function correctly. - */ - - e->e_flags &= ~ELF_F_DIRTY; - - STAILQ_FOREACH_SAFE(scn, &e->e_u.e_elf.e_scn, s_next, tscn) - _libelf_release_scn(scn); - - if (e->e_class == ELFCLASS32) { - free(e->e_u.e_elf.e_ehdr.e_ehdr32); - if (e->e_u.e_elf.e_phdr.e_phdr32) - free(e->e_u.e_elf.e_phdr.e_phdr32); - - e->e_u.e_elf.e_ehdr.e_ehdr32 = NULL; - e->e_u.e_elf.e_phdr.e_phdr32 = NULL; - } else { - free(e->e_u.e_elf.e_ehdr.e_ehdr64); - if (e->e_u.e_elf.e_phdr.e_phdr64) - free(e->e_u.e_elf.e_phdr.e_phdr64); - - e->e_u.e_elf.e_ehdr.e_ehdr64 = NULL; - e->e_u.e_elf.e_phdr.e_phdr64 = NULL; - } - - /* Free the temporary buffer. */ - if (newfile) - free(newfile); - - return (rc); - - error: - free(newfile); - - return ((off_t) -1); -} - -/* - * Update an ELF object. - */ - -off_t -elf_update(Elf *e, Elf_Cmd c) -{ - int ec; - off_t rc; - struct _Elf_Extent_List extents; - - rc = (off_t) -1; - - if (e == NULL || e->e_kind != ELF_K_ELF || - (c != ELF_C_NULL && c != ELF_C_WRITE)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (rc); - } - - if ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64) { - LIBELF_SET_ERROR(CLASS, 0); - return (rc); - } - - if (e->e_version == EV_NONE) - e->e_version = EV_CURRENT; - - if (c == ELF_C_WRITE && e->e_cmd == ELF_C_READ) { - LIBELF_SET_ERROR(MODE, 0); - return (rc); - } - - SLIST_INIT(&extents); - - if ((rc = _libelf_resync_elf(e, &extents)) < 0) - goto done; - - if (c == ELF_C_NULL) - goto done; - - if (e->e_fd < 0) { - rc = (off_t) -1; - LIBELF_SET_ERROR(SEQUENCE, 0); - goto done; - } - - rc = _libelf_write_elf(e, rc, &extents); - -done: - _libelf_release_extents(&extents); - return (rc); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_version.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_version.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_version.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_version.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: elf_version.3 2123 2011-11-09 15:40:09Z jkoshy $ -.\" -.Dd November 9, 2011 -.Os -.Dt ELF_VERSION 3 -.Sh NAME -.Nm elf_version -.Nd retrieve or set ELF library operating version -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft unsigned int -.Fn elf_version "unsigned int version" -.Sh DESCRIPTION -The -.Fn elf_version -function is used to query the current operating version of the ELF -library, and to inform the ELF library about the application's desired -operating version. -.Pp -If the argument -.Ar version -is -.Dv EV_NONE , -the -.Fn elf_version -function returns the currently configured operating version for the -ELF library. -.Pp -If the argument -.Ar version -is not -.Dv EV_NONE , -and if argument -.Ar version -is supported by the ELF library, function -.Fn elf_version -sets the library's operating version to -.Ar version , -and returns the previous value of the operating version. -If argument -.Ar version -cannot be supported, then the -.Fn elf_version -function returns -.Dv EV_NONE . -.Sh RETURN VALUES -The -.Fn elf_version -function returns the currently configured ELF library version, or -.Dv EV_NONE -if an unsupported version is requested. -.Sh EXAMPLES -An application program would inform the ELF library about its desired -operating version and check for an error using the following code -snippet: -.Bd -literal -offset indent -if (elf_version(EV_CURRENT) == EV_NONE) - err(EXIT_FAILURE, "ELF library too old"); -.Ed -.Sh ERRORS -Function -.Fn elf_version -may fail with the following error: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er "ELF_E_VERSION" -An unsupported library version number was requested. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_version.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_version.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/elf_version.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/elf_version.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: elf_version.c 3174 2015-03-27 17:13:41Z emaste $"); - -unsigned int -elf_version(unsigned int v) -{ - unsigned int old; - - if ((old = LIBELF_PRIVATE(version)) == EV_NONE) - old = EV_CURRENT; - - if (v == EV_NONE) - return old; - if (v > EV_CURRENT) { - LIBELF_SET_ERROR(VERSION, 0); - return EV_NONE; - } - - LIBELF_PRIVATE(version) = v; - return (old); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,200 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf.3 3195 2015-05-12 17:22:19Z emaste $ -.\" -.Dd September 1, 2006 -.Os -.Dt GELF 3 -.Sh NAME -.Nm GElf -.Nd class-independent API for ELF manipulation -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In gelf.h -.Sh DESCRIPTION -This manual page describes a class independent API for manipulating -ELF objects. -This API allows an application to operate on ELF descriptors without -needing to the know the ELF class of the descriptor. -.Pp -The GElf API may be used alongside the ELF API without restriction. -.Ss GElf Data Structures -The GElf API defines the following class-independent data structures: -.Bl -tag -width GElf_Sxword -.It Vt GElf_Addr -A representation of ELF addresses. -.It Vt GElf_Dyn -A class-independent representation of ELF -.Sy .dynamic -section entries. -.It Vt GElf_Ehdr -A class-independent representation of an ELF Executable Header. -.It Vt GElf_Half -An unsigned 16 bit quantity. -.It Vt GElf_Off -A class-independent representation of a ELF offset. -.It Vt GElf_Phdr -A class-independent representation of an ELF Program Header Table -entry. -.It Vt GElf_Rel -A class-independent representation of an ELF relocation entry. -.It Vt GElf_Rela -A class-independent representation of an ELF relocation entry with -addend. -.It Vt GElf_Shdr -A class-independent representation of an ELF Section Header Table -entry. -.It Vt GElf_Sword -A signed 32 bit quantity. -.It Vt GElf_Sxword -A signed 64 bit quantity. -.It Vt GElf_Sym -A class-independent representation of an ELF symbol table entry. -.It Vt GElf_Word -An unsigned 32 bit quantity. -.It Vt GElf_Xword -An unsigned 64 bit quantity. -.El -.Pp -These data structures are sized to be compatible with the -corresponding 64 bit ELF structures, and have the same internal -structure as their 64 bit class-dependent counterparts. -Class-dependent ELF structures are described in -.Xr elf 5 . -.Ss GElf Programming Model -GElf functions always return a -.Em copy -of the underlying (class-dependent) ELF data structure. -The programming model with GElf is as follows: -.Bl -enum -.It -An application will retrieve data from an ELF descriptor using a -.Fn gelf_get_* -function. -This will copy out data into a private -.Vt GElf_* -data structure. -.It -The application will work with its private copy of the GElf -structure. -.It -Once done, the application copies the new values back to the -underlying ELF data structure using the -.Fn gelf_update_* -functions. -.It -The application will then use the -.Fn elf_flag* -APIs to indicate to the ELF library that an ELF data structure is dirty. -.El -.Pp -When updating an underlying 32 bit ELF data structure, the GElf -routines will signal an error if a GElf value is out of range -for the underlying ELF data type. -.Ss Namespace use -The GElf interface uses the following symbols: -.Bl -tag -.It GElf_* -Class-independent data types. -.It gelf_* -For functions defined in the API set. -.El -.Ss GElf Programming APIs -This section provides an overview of the GElf programming APIs. -Further information is provided in the manual page of each function -listed here. -.Bl -tag -.It "Allocating ELF Data Structures" -.Bl -tag -compact -.It Fn gelf_newehdr -Allocate a new ELF Executable Header. -.It Fn gelf_newphdr -Allocate a new ELF Program Header Table. -.El -.It "Data Translation" -.Bl -tag -compact -.It Fn gelf_xlatetof -Translate the native representation of an ELF data structure to its -file representation. -.It Fn gelf_xlatetom -Translate from the file representation of an ELF data structure to a -native representation. -.El -.It "Retrieving ELF Data" -.Bl -tag -compact -.It Fn gelf_getdyn -Retrieve an ELF -.Sy .dynamic -table entry. -.It Fn gelf_getehdr -Retrieve an ELF Executable Header from the underlying ELF descriptor. -.It Fn gelf_getphdr -Retrieve an ELF Program Header Table entry from the underlying ELF descriptor. -.It Fn gelf_getrel -Retrieve an ELF relocation entry. -.It Fn gelf_getrela -Retrieve an ELF relocation entry with addend. -.It Fn gelf_getshdr -Retrieve an ELF Section Header Table entry from the underlying ELF descriptor. -.It Fn gelf_getsym -Retrieve an ELF symbol table entry. -.El -.It Queries -.Bl -tag -compact -.It Fn gelf_checksum -Retrieves the ELF checksum for an ELF descriptor. -.It Fn gelf_fsize -Retrieves the size of the file representation of an ELF type. -.It Fn gelf_getclass -Retrieves the ELF class of an ELF descriptor. -.El -.It "Updating ELF Data" -.Bl -tag -compact -width ".Fn gelf_update_shdr" -.It Fn gelf_update_dyn -Copy back an ELF -.Sy .dynamic -Table entry. -.It Fn gelf_update_phdr -Copy back an ELF Program Header Table entry. -.It Fn gelf_update_rel -Copy back an ELF relocation entry. -.It Fn gelf_update_rela -Copy back an ELF relocation with addend entry. -.It Fn gelf_update_shdr -Copy back an ELF Section Header Table entry. -.It Fn gelf_update_sym -Copy back an ELF symbol table entry. -.El -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf 5 -.Sh HISTORY -The GELF(3) API first appeared in System V Release 4. -This implementation of the API first appeared in -.Fx 7.0 . -.Sh AUTHORS -The GElf API was implemented by -.An Joseph Koshy Aq Mt jkoshy@FreeBSD.org . diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_cap.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_cap.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_cap.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_cap.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,150 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: gelf_cap.c 3177 2015-03-30 18:19:41Z emaste $"); - -GElf_Cap * -gelf_getcap(Elf_Data *ed, int ndx, GElf_Cap *dst) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - Elf32_Cap *cap32; - Elf64_Cap *cap64; - uint32_t sh_type; - struct _Libelf_Data *d; - - d = (struct _Libelf_Data *) ed; - - if (d == NULL || ndx < 0 || dst == NULL || - (scn = d->d_scn) == NULL || - (e = scn->s_elf) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_CAP) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - msz = _libelf_msize(ELF_T_CAP, ec, e->e_version); - - assert(msz > 0); - - if (msz * (size_t) ndx >= d->d_data.d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if (ec == ELFCLASS32) { - - cap32 = (Elf32_Cap *) d->d_data.d_buf + ndx; - - dst->c_tag = cap32->c_tag; - dst->c_un.c_val = (Elf64_Xword) cap32->c_un.c_val; - - } else { - - cap64 = (Elf64_Cap *) d->d_data.d_buf + ndx; - - *dst = *cap64; - } - - return (dst); -} - -int -gelf_update_cap(Elf_Data *ed, int ndx, GElf_Cap *gc) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - Elf32_Cap *cap32; - Elf64_Cap *cap64; - uint32_t sh_type; - struct _Libelf_Data *d; - - d = (struct _Libelf_Data *) ed; - - if (d == NULL || ndx < 0 || gc == NULL || - (scn = d->d_scn) == NULL || - (e = scn->s_elf) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_CAP) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - msz = _libelf_msize(ELF_T_CAP, ec, e->e_version); - assert(msz > 0); - - if (msz * (size_t) ndx >= d->d_data.d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if (ec == ELFCLASS32) { - cap32 = (Elf32_Cap *) d->d_data.d_buf + ndx; - - LIBELF_COPY_U32(cap32, gc, c_tag); - LIBELF_COPY_U32(cap32, gc, c_un.c_val); - } else { - cap64 = (Elf64_Cap *) d->d_data.d_buf + ndx; - - *cap64 = *gc; - } - - return (1); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_checksum.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_checksum.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_checksum.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_checksum.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,115 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_checksum.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd August 29, 2006 -.Os -.Dt GELF_CHECKSUM 3 -.Sh NAME -.Nm elf32_checksum , -.Nm elf64_checksum , -.Nm gelf_checksum -.Nd return the checksum of an ELF object -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft long -.Fn elf32_checksum "Elf *elf" -.Ft long -.Fn elf64_checksum "Elf *elf" -.In gelf.h -.Ft long -.Fn gelf_checksum "Elf *elf" -.Sh DESCRIPTION -These functions return a simple checksum of the ELF object described -by their argument -.Ar elf . -The checksum is computed in way that allows its value to remain -unchanged in presence of modifications to the ELF object by utilities -like -.Xr strip 1 . -.Pp -Function -.Fn elf32_checksum -returns a checksum for an ELF descriptor -.Ar elf -of class -.Dv ELFCLASS32 . -.Pp -Function -.Fn elf64_checksum -returns a checksum for an ELF descriptor -.Ar elf -of class -.Dv ELFCLASS64 . -.Pp -Function -.Fn gelf_checksum -provides a class-independent way retrieving the checksum -for ELF object -.Ar elf . -.Sh RETURN VALUES -These functions return the checksum of the ELF object, or zero in case -an error was encountered. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not a descriptor for an ELF file. -.It Bq Er ELF_E_ARGUMENT -The ELF descriptor -.Ar elf -was not opened for reading or updating. -.It Bq Er ELF_E_CLASS -For functions -.Fn elf32_checksum -and -.Fn elf64_checksum , -ELF descriptor -.Ar elf -did not match the class of the called function. -.It Bq Er ELF_E_HEADER -The ELF object specified by argument -.Ar elf -had a malformed executable header. -.It Bq Er ELF_E_RESOURCE -An out of memory condition was detected during processing. -.It Bq Er ELF_E_SECTION -The ELF object specified by argument -.Ar elf -contained a section with a malformed section header. -.It Bq Er ELF_E_VERSION -The ELF object was of an unsupported version. -.El -.Sh SEE ALSO -.Xr strip 1 , -.Xr elf 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_checksum.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_checksum.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_checksum.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_checksum.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: gelf_checksum.c 3174 2015-03-27 17:13:41Z emaste $"); - -long -elf32_checksum(Elf *e) -{ - return (_libelf_checksum(e, ELFCLASS32)); -} - -long -elf64_checksum(Elf *e) -{ - return (_libelf_checksum(e, ELFCLASS64)); -} - -long -gelf_checksum(Elf *e) -{ - int ec; - if (e == NULL || - ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0L); - } - return (_libelf_checksum(e, ec)); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_dyn.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_dyn.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_dyn.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_dyn.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,152 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: gelf_dyn.c 3177 2015-03-30 18:19:41Z emaste $"); - -GElf_Dyn * -gelf_getdyn(Elf_Data *ed, int ndx, GElf_Dyn *dst) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - Elf32_Dyn *dyn32; - Elf64_Dyn *dyn64; - uint32_t sh_type; - struct _Libelf_Data *d; - - d = (struct _Libelf_Data *) ed; - - if (d == NULL || ndx < 0 || dst == NULL || - (scn = d->d_scn) == NULL || - (e = scn->s_elf) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_DYN) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - msz = _libelf_msize(ELF_T_DYN, ec, e->e_version); - - assert(msz > 0); - assert(ndx >= 0); - - if (msz * (size_t) ndx >= d->d_data.d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if (ec == ELFCLASS32) { - dyn32 = (Elf32_Dyn *) d->d_data.d_buf + ndx; - - dst->d_tag = dyn32->d_tag; - dst->d_un.d_val = (Elf64_Xword) dyn32->d_un.d_val; - - } else { - - dyn64 = (Elf64_Dyn *) d->d_data.d_buf + ndx; - - *dst = *dyn64; - } - - return (dst); -} - -int -gelf_update_dyn(Elf_Data *ed, int ndx, GElf_Dyn *ds) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - Elf32_Dyn *dyn32; - Elf64_Dyn *dyn64; - uint32_t sh_type; - struct _Libelf_Data *d; - - d = (struct _Libelf_Data *) ed; - - if (d == NULL || ndx < 0 || ds == NULL || - (scn = d->d_scn) == NULL || - (e = scn->s_elf) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_DYN) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - msz = _libelf_msize(ELF_T_DYN, ec, e->e_version); - - assert(msz > 0); - assert(ndx >= 0); - - if (msz * (size_t) ndx >= d->d_data.d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if (ec == ELFCLASS32) { - dyn32 = (Elf32_Dyn *) d->d_data.d_buf + ndx; - - LIBELF_COPY_S32(dyn32, ds, d_tag); - LIBELF_COPY_U32(dyn32, ds, d_un.d_val); - } else { - dyn64 = (Elf64_Dyn *) d->d_data.d_buf + ndx; - - *dyn64 = *ds; - } - - return (1); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_ehdr.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_ehdr.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_ehdr.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_ehdr.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,167 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: gelf_ehdr.c 3177 2015-03-30 18:19:41Z emaste $"); - -Elf32_Ehdr * -elf32_getehdr(Elf *e) -{ - return (_libelf_ehdr(e, ELFCLASS32, 0)); -} - -Elf64_Ehdr * -elf64_getehdr(Elf *e) -{ - return (_libelf_ehdr(e, ELFCLASS64, 0)); -} - -GElf_Ehdr * -gelf_getehdr(Elf *e, GElf_Ehdr *d) -{ - int ec; - Elf32_Ehdr *eh32; - Elf64_Ehdr *eh64; - - if (d == NULL || e == NULL || - ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if (ec == ELFCLASS32) { - if ((eh32 = _libelf_ehdr(e, ELFCLASS32, 0)) == NULL) - return (NULL); - - (void) memcpy(d->e_ident, eh32->e_ident, - sizeof(eh32->e_ident)); - d->e_type = eh32->e_type; - d->e_machine = eh32->e_machine; - d->e_version = eh32->e_version; - d->e_entry = eh32->e_entry; - d->e_phoff = eh32->e_phoff; - d->e_shoff = eh32->e_shoff; - d->e_flags = eh32->e_flags; - d->e_ehsize = eh32->e_ehsize; - d->e_phentsize = eh32->e_phentsize; - d->e_phnum = eh32->e_phnum; - d->e_shentsize = eh32->e_shentsize; - d->e_shnum = eh32->e_shnum; - d->e_shstrndx = eh32->e_shstrndx; - - return (d); - } - - assert(ec == ELFCLASS64); - - if ((eh64 = _libelf_ehdr(e, ELFCLASS64, 0)) == NULL) - return (NULL); - *d = *eh64; - - return (d); -} - -Elf32_Ehdr * -elf32_newehdr(Elf *e) -{ - return (_libelf_ehdr(e, ELFCLASS32, 1)); -} - -Elf64_Ehdr * -elf64_newehdr(Elf *e) -{ - return (_libelf_ehdr(e, ELFCLASS64, 1)); -} - -void * -gelf_newehdr(Elf *e, int ec) -{ - if (e != NULL && - (ec == ELFCLASS32 || ec == ELFCLASS64)) - return (_libelf_ehdr(e, ec, 1)); - - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); -} - -int -gelf_update_ehdr(Elf *e, GElf_Ehdr *s) -{ - int ec; - void *ehdr; - Elf32_Ehdr *eh32; - Elf64_Ehdr *eh64; - - if (s== NULL || e == NULL || e->e_kind != ELF_K_ELF || - ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if (e->e_cmd == ELF_C_READ) { - LIBELF_SET_ERROR(MODE, 0); - return (0); - } - - if ((ehdr = _libelf_ehdr(e, ec, 0)) == NULL) - return (0); - - (void) elf_flagehdr(e, ELF_C_SET, ELF_F_DIRTY); - - if (ec == ELFCLASS64) { - eh64 = (Elf64_Ehdr *) ehdr; - *eh64 = *s; - return (1); - } - - eh32 = (Elf32_Ehdr *) ehdr; - - (void) memcpy(eh32->e_ident, s->e_ident, sizeof(eh32->e_ident)); - - eh32->e_type = s->e_type; - eh32->e_machine = s->e_machine; - eh32->e_version = s->e_version; - LIBELF_COPY_U32(eh32, s, e_entry); - LIBELF_COPY_U32(eh32, s, e_phoff); - LIBELF_COPY_U32(eh32, s, e_shoff); - eh32->e_flags = s->e_flags; - eh32->e_ehsize = s->e_ehsize; - eh32->e_phentsize = s->e_phentsize; - eh32->e_phnum = s->e_phnum; - eh32->e_shentsize = s->e_shentsize; - eh32->e_shnum = s->e_shnum; - eh32->e_shstrndx = s->e_shstrndx; - - return (1); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_fsize.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_fsize.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_fsize.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_fsize.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,96 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_fsize.3 317 2009-03-06 17:29:22Z jkoshy $ -.\" -.Dd February 5, 2008 -.Os -.Dt GELF_FSIZE 3 -.Sh NAME -.Nm gelf_fsize , -.Nm elf32_fsize , -.Nm elf64_fsize -.Nd return the size of a file type -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft size_t -.Fn elf32_fsize "Elf_Type type" "size_t count" "unsigned int version" -.Ft size_t -.Fn elf64_fsize "Elf_Type type" "size_t count" "unsigned int version" -.In gelf.h -.Ft size_t -.Fn gelf_fsize "Elf *elf" "Elf_Type type" "size_t count" "unsigned int version" -.Sh DESCRIPTION -These functions return the size in bytes of the file representation of -.Ar count -numbers of objects of ELF type -.Ar type . -For ELF types that are of variable length, these functions return a -size of one byte. -.Pp -Functions -.Fn elf32_fsize -and -.Fn elf64_fsize -return sizes for files of class -.Dv ELFCLASS32 -and -.Dv ELFCLASS64 -respectively. -Function -.Fn gelf_fsize -returns the size for the class of ELF descriptor -.Ar elf . -.Sh RETURN VALUES -These functions return a non-zero value in case of success, or zero in -case of an error. -.Sh ERRORS -These functions may fail with: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was NULL in a call to -.Fn gelf_fsize . -.It Bq Er ELF_E_ARGUMENT -ELF descriptor -.Ar elf -had an unknown ELF class. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar type -contained an illegal value. -.It Bq Er ELF_E_UNIMPL -Support for ELF type -.Ar type -has not been implemented. -.It Bq Er ELF_E_VERSION -Argument -.Ar version -is not a supported version. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_fsize.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_fsize.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_fsize.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_fsize.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: gelf_fsize.c 3174 2015-03-27 17:13:41Z emaste $"); - -size_t -elf32_fsize(Elf_Type t, size_t c, unsigned int v) -{ - return (_libelf_fsize(t, ELFCLASS32, v, c)); -} - -size_t -elf64_fsize(Elf_Type t, size_t c, unsigned int v) -{ - return (_libelf_fsize(t, ELFCLASS64, v, c)); -} - -size_t -gelf_fsize(Elf *e, Elf_Type t, size_t c, unsigned int v) -{ - - if (e == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if (e->e_class == ELFCLASS32 || e->e_class == ELFCLASS64) - return (_libelf_fsize(t, e->e_class, v, c)); - - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getcap.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getcap.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getcap.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getcap.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,121 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_getcap.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd August 29, 2006 -.Os -.Dt GELF_GETCAP 3 -.Sh NAME -.Nm gelf_getcap , -.Nm gelf_update_cap -.Nd read and update ELF capability information -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In gelf.h -.Ft "GElf_Cap *" -.Fn gelf_getcap "Elf_Data *data" "int ndx" "GElf_Cap *cap" -.Ft int -.Fn gelf_update_cap "Elf_Data *data" "int ndx" "GElf_Cap *cap" -.Sh DESCRIPTION -These convenience functions are used to retrieve and update class-dependent -.Vt Elf32_Cap -or -.Vt Elf64_Cap -information. -.Pp -Argument -.Ar data -is an -.Vt Elf_Data -descriptor associated with a section of type -.Dv SHT_SUNW_cap . -Argument -.Ar ndx -is the index of the entry being retrieved or updated. -The class-independent -.Vt GElf_Cap -structure is described in -.Xr gelf 3 . -.Pp -Function -.Fn gelf_getcap -retrieves the class-dependent entry at index -.Ar ndx -in data buffer -.Ar data -and copies it to the destination pointed to by argument -.Ar cap -after translation to class-independent form. -.Pp -Function -.Fn gelf_update_cap -converts the class-independent entry pointed to -by argument -.Ar cap -to class-dependent form, and writes it to the entry at index -.Ar ndx -in the data buffer described by argument -.Ar data . -Function -.Fn gelf_update_cap -signals an error if any of the values in the class-independent -representation exceeds the representable limits of the target -type. -.Sh RETURN VALUES -Function -.Fn gelf_getcap -returns the value of argument -.Ar cap -if successful, or NULL in case of an error. -Function -.Fn gelf_update_cap -returns a non-zero value if successful, or zero in case of an error. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Arguments -.Ar data -or -.Ar cap -were NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar ndx -was less than zero or larger than the number of entries in the data -descriptor. -.It Bq Er ELF_E_ARGUMENT -Data descriptor -.Ar data -was not associated with a section of type -.Dv SHT_SUNW_cap . -.It Bq Er ELF_E_RANGE -A value was not representable in the target type. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_getdata 3 , -.Xr elf_getscn 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getclass.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getclass.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getclass.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getclass.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_getclass.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd July 3, 2006 -.Os -.Dt GELF_GETCLASS 3 -.Sh NAME -.Nm gelf_getclass -.Nd retrieve the class of an ELF descriptor -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In gelf.h -.Ft int -.Fn gelf_getclass "Elf *elf" -.Sh DESCRIPTION -Function -.Fn gelf_getclass -returns the ELF class of the descriptor supplied in argument -.Ar elf . -.Sh RETURN VALUES -Function -.Fn gelf_getclass -will return one of -.Dv ELFCLASS32 -or -.Dv ELFCLASS64 -if the argument -.Ar elf -is a descriptor for an ELF file. -The value -.Dv ELFCLASSNONE -is returned if argument -.Ar elf -was null, or if it was not a descriptor for an ELF file. -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_kind 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getclass.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getclass.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getclass.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getclass.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: gelf_getclass.c 3174 2015-03-27 17:13:41Z emaste $"); - -int -gelf_getclass(Elf *e) -{ - return (e != NULL ? e->e_class : ELFCLASSNONE); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getdyn.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getdyn.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getdyn.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getdyn.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_getdyn.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd August 29, 2006 -.Os -.Dt GELF_GETDYN 3 -.Sh NAME -.Nm gelf_getdyn , -.Nm gelf_update_dyn -.Nd read and update ELF dynamic entries -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In gelf.h -.Ft "GElf_Dyn *" -.Fn gelf_getdyn "Elf_Data *data" "int ndx" "GElf_Dyn *dyn" -.Ft int -.Fn gelf_update_dyn "Elf_Data *data" "int ndx" "GElf_Dyn *dyn" -.Sh DESCRIPTION -These convenience functions are used to retrieve and update class-dependent -.Vt Elf32_Dyn -or -.Vt Elf64_Dyn -information in the -.Sy dynamic -table of an ELF object. -.Pp -Argument -.Ar data -is an -.Vt Elf_Data -descriptor associated with a section of type -.Dv SHT_DYNAMIC . -Argument -.Ar ndx -is the index of the entry being retrieved or updated. -The class-independent -.Vt GElf_Dyn -structure is described in -.Xr gelf 3 . -.Pp -Function -.Fn gelf_getdyn -retrieves the class-dependent entry at index -.Ar ndx -in data buffer -.Ar data -and copies it to the destination pointed to by argument -.Ar dyn -after translation to class-independent form. -.Pp -Function -.Fn gelf_update_dyn -converts the class-independent entry pointed to -by argument -.Ar dyn -to class-dependent form, and writes it to the entry at index -.Ar ndx -in the data buffer described by argument -.Ar data . -Function -.Fn gelf_update_dyn -signals an error if any of the values in the class-independent -representation exceeds the representable limits of the target -type. -.Sh RETURN VALUES -Function -.Fn gelf_getdyn -returns the value of argument -.Ar dyn -if successful, or NULL in case of an error. -Function -.Fn gelf_update_dyn -returns a non-zero value if successful, or zero in case of an error. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Arguments -.Ar data -or -.Ar dyn -were NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar ndx -was less than zero or larger than the number of entries in the data -descriptor. -.It Bq Er ELF_E_ARGUMENT -Data descriptor -.Ar data -was not associated with a section of type -.Dv SHT_DYNAMIC . -.It Bq Er ELF_E_RANGE -A value was not representable in the target type. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_getdata 3 , -.Xr elf_getscn 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getehdr.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getehdr.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getehdr.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getehdr.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_getehdr.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd December 16, 2006 -.Os -.Dt GELF_GETEHDR 3 -.Sh NAME -.Nm elf32_getehdr , -.Nm elf64_getehdr , -.Nm gelf_getehdr -.Nd retrieve the object file header -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "Elf32_Ehdr *" -.Fn elf32_getehdr "Elf *elf" -.Ft "Elf64_Ehdr *" -.Fn elf64_getehdr "Elf *elf" -.In gelf.h -.Ft "GElf_Ehdr *" -.Fn gelf_getehdr "Elf *elf" "GElf_Ehdr *dst" -.Sh DESCRIPTION -These functions retrieve the ELF object file -header from the ELF descriptor -.Ar elf -and return a translated header descriptor to their callers. -.Pp -Functions -.Fn elf32_getehdr -and -.Fn elf64_getehdr -return a pointer to the appropriate class-specific header descriptor -if it exists in the file referenced by descriptor -.Ar elf . -These functions return -.Dv NULL -if an ELF header was not found in file -.Ar elf . -.Pp -Function -.Fn gelf_getehdr -stores a translated copy of the header for ELF file -.Ar elf -into the descriptor pointed to by argument -.Ar dst . -It returns argument -.Ar dst -if successful or -.Dv NULL -in case of failure. -.Sh RETURN VALUES -These functions return a pointer to a translated header descriptor -if successful, or NULL on failure. -.Sh ERRORS -These functions can fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -The argument -.Ar elf -was null. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not a descriptor for an ELF file. -.It Bq Er ELF_E_ARGUMENT -The elf class of descriptor -.Ar elf -was not recognized. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar dst -was null. -.It Bq Er ELF_E_CLASS -The ELF class of descriptor -.Ar elf -did not match that of the API function being called. -.It Bq Er ELF_E_HEADER -ELF descriptor -.Ar elf -does not have an associated header. -.It Bq Er ELF_E_RESOURCE -An out of memory condition was detected during execution. -.It Bq Er ELF_E_SECTION -The ELF descriptor in argument -.Ar elf -did not adhere to the conventions used for extended numbering. -.It Bq Er ELF_E_VERSION -The ELF descriptor -.Ar elf -had an unsupported ELF version number. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf32_newehdr 3 , -.Xr elf64_newehdr 3 , -.Xr elf_flagehdr 3 , -.Xr elf_getident 3 , -.Xr gelf 3 , -.Xr gelf_newehdr 3 , -.Xr elf 5 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getmove.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getmove.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getmove.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getmove.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,120 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_getmove.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd August 29, 2006 -.Os -.Dt GELF_GETMOVE 3 -.Sh NAME -.Nm gelf_getmove , -.Nm gelf_update_move -.Nd read and update Elf Move information -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In gelf.h -.Ft "GElf_Move *" -.Fn gelf_getmove "Elf_Data *data" "int ndx" "GElf_Move *move" -.Ft int -.Fn gelf_update_move "Elf_Data *data" "int ndx" "GElf_Move *move" -.Sh DESCRIPTION -These convenience functions are used to retrieve and update class-dependent -.Vt Elf32_Move -and -.Vt Elf64_Move -structures in an ELF object. -.Pp -Argument -.Ar data -is an -.Vt Elf_Data -descriptor associated with a section of type -.Dv SHT_SUNW_move . -Argument -.Ar ndx -is the index of the move record being retrieved or updated. -The class-independent -.Vt GElf_Move -structure is described in -.Xr gelf 3 . -.Pp -Function -.Fn gelf_getmove -retrieves class-dependent move record at index -.Ar ndx -in data buffer -.Ar data -and copies it to the destination pointed to by argument -.Ar move -after translation to class-independent form. -.Pp -Function -.Fn gelf_update_move -converts the class-independent move information pointed to -by argument -.Ar move -to class-dependent form, and writes it to the move record at index -.Ar ndx -in the data buffer described by argument -.Ar data . -Function -.Fn gelf_update_move -signals an error if any of the values in the class-independent -representation exceeds the representable limits of the target -type. -.Sh RETURN VALUES -Function -.Fn gelf_getmove -returns the value of argument -.Ar move -if successful, or NULL in case of an error. -Function -.Fn gelf_update_move -returns a non-zero value if successful, or zero in case of an error. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Arguments -.Ar data -or -.Ar move -were NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar ndx -was less than zero or larger than the number of records in the data -descriptor. -.It Bq Er ELF_E_ARGUMENT -Data descriptor -.Ar data -was not associated with a section containing move information. -.It Bq Er ELF_E_RANGE -A value was not representable in the target type. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_getdata 3 , -.Xr elf_getscn 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getphdr.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getphdr.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getphdr.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getphdr.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,141 +0,0 @@ -.\" Copyright (c) 2006-2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_getphdr.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd October 21, 2007 -.Os -.Dt GELF_GETPHDR 3 -.Sh NAME -.Nm elf32_getphdr , -.Nm elf64_getphdr , -.Nm gelf_getphdr -.Nd retrieve an ELF program header table -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "Elf32_Phdr *" -.Fn elf32_getphdr "Elf *elf" -.Ft "Elf64_Phdr *" -.Fn elf64_getphdr "Elf *elf" -.In gelf.h -.Ft "GElf_Phdr *" -.Fn gelf_getphdr "Elf *elf" "int index" "GElf_Phdr *dst" -.Sh DESCRIPTION -These functions retrieve and translate ELF program header information -from an ELF descriptor, if this information exists. -.Pp -Functions -.Fn elf32_getphdr -and -.Fn elf64_getphdr -return a pointer to an array of translated -.Vt Elf32_Phdr -and -.Vt Elf64_Phdr -descriptors respectively. -These descriptors are described in -.Xr elf 5 . -The number of entries in this array may be determined using the -.Xr elf_getphnum 3 -function. -.Pp -Function -.Fn gelf_getphdr -will retrieve the program header table entry at index -.Ar index -from ELF descriptor -.Ar elf. -The translated program header table entry will be written to the -address pointed to be argument -.Ar dst . -.Pp -Applications may inform the library of modifications to a program header table entry -by using the -.Xr elf_flagphdr 3 -API. -Applications using the -.Xr gelf 3 -interface need to use the -.Xr gelf_update_phdr 3 -API to copy modifications to a program header entry back to the underlying -ELF descriptor. -.Sh RETURN VALUES -The functions a valid pointer if successful, or NULL in case an error -was encountered. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not a descriptor for an ELF object. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar dst -was NULL. -.It Bq Er ELF_E_ARGUMENT -Index -.Ar index -was out of range. -.It Bq Er ELF_E_CLASS -The class of ELF descriptor -.Ar elf -did not match the expected class of the function being called. -.It Bq Er ELF_E_HEADER -ELF descriptor -.Ar elf -did not possess an executable header. -.It Bq Er ELF_E_HEADER -ELF descriptor -.Ar elf -had a corrupt executable header. -.It Bq Er ELF_E_RESOURCE -An out of memory condition was detected. -.It Bq Er ELF_E_SECTION -The ELF descriptor in argument -.Ar elf -did not adhere to the conventions used for extended numbering. -.It Bq Er ELF_VERSION -ELF descriptor -.Ar elf -was of an unsupported version. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf32_getehdr 3 , -.Xr elf32_newphdr 3 , -.Xr elf64_getehdr 3 , -.Xr elf64_newphdr 3 , -.Xr elf_flagphdr 3 , -.Xr elf_getphnum 3 , -.Xr gelf 3 , -.Xr gelf_getehdr 3 , -.Xr gelf_newphdr 3 , -.Xr gelf_update_phdr 3 , -.Xr elf 5 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getrel.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getrel.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getrel.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getrel.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,121 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_getrel.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd August 29, 2006 -.Os -.Dt GELF_GETREL 3 -.Sh NAME -.Nm gelf_getrel , -.Nm gelf_update_rel -.Nd read and update ELF relocation entries -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In gelf.h -.Ft "GElf_Rel *" -.Fn gelf_getrel "Elf_Data *data" "int ndx" "GElf_Rel *rel" -.Ft int -.Fn gelf_update_rel "Elf_Data *data" "int ndx" "GElf_Rel *rel" -.Sh DESCRIPTION -These convenience functions are used to retrieve and update class-dependent -.Vt Elf32_Rel -or -.Vt Elf64_Rel -structures in an ELF object. -.Pp -Argument -.Ar data -is an -.Vt Elf_Data -descriptor associated with a section of type -.Dv SHT_REL . -Argument -.Ar ndx -is the index of the entry being retrieved or updated. -The class-independent -.Vt GElf_Rel -structure is described in -.Xr gelf 3 . -.Pp -Function -.Fn gelf_getrel -retrieves the class-dependent entry at index -.Ar ndx -in data buffer -.Ar data -and copies it to the destination pointed to by argument -.Ar rel -after translation to class-independent form. -.Pp -Function -.Fn gelf_update_rel -converts the class-independent entry pointed to -by argument -.Ar rel -to class-dependent form, and writes it to the entry at index -.Ar ndx -in the data buffer described by argument -.Ar data . -Function -.Fn gelf_update_rel -signals an error if any of the values in the class-independent -representation exceeds the representable limits of the target -type. -.Sh RETURN VALUES -Function -.Fn gelf_getrel -returns the value of argument -.Ar rel -if successful, or NULL in case of an error. -Function -.Fn gelf_update_rel -returns a non-zero value if successful, or zero in case of an error. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Arguments -.Ar data -or -.Ar rel -were NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar ndx -was less than zero or larger than the number of entries in the data -descriptor. -.It Bq Er ELF_E_ARGUMENT -Data descriptor -.Ar data -was not associated with a section of type -.Dv SHT_REL . -.It Bq Er ELF_E_RANGE -A value was not representable in the target type. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_getdata 3 , -.Xr elf_getscn 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getrela.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getrela.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getrela.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getrela.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,121 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_getrela.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd August 29, 2006 -.Os -.Dt GELF_GETRELA 3 -.Sh NAME -.Nm gelf_getrela , -.Nm gelf_update_rela -.Nd read and update ELF relocation entries with addends -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In gelf.h -.Ft "GElf_Rela *" -.Fn gelf_getrela "Elf_Data *data" "int ndx" "GElf_Rela *rela" -.Ft int -.Fn gelf_update_rela "Elf_Data *data" "int ndx" "GElf_Rela *rela" -.Sh DESCRIPTION -These convenience functions are used to retrieve and update class-dependent -.Vt Elf32_Rela -or -.Vt Elf64_Rela -structures in an ELF object. -.Pp -Argument -.Ar data -is an -.Vt Elf_Data -descriptor associated with a section of type -.Dv SHT_RELA . -Argument -.Ar ndx -is the index of the entry being retrieved or updated. -The class-independent -.Vt GElf_Rela -structure is described in -.Xr gelf 3 . -.Pp -Function -.Fn gelf_getrela -retrieves the class-dependent entry at index -.Ar ndx -in data buffer -.Ar data -and copies it to the destination pointed to by argument -.Ar rela -after translation to class-independent form. -.Pp -Function -.Fn gelf_update_rela -converts the class-independent entry pointed to -by argument -.Ar rela -to class-dependent form, and writes it to the entry at index -.Ar ndx -in the data buffer described by argument -.Ar data . -Function -.Fn gelf_update_rela -signals an error if any of the values in the class-independent -representation exceeds the representable limits of the target -type. -.Sh RETURN VALUES -Function -.Fn gelf_getrela -returns the value of argument -.Ar rela -if successful, or NULL in case of an error. -Function -.Fn gelf_update_rela -returns a non-zero value if successful, or zero in case of an error. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Arguments -.Ar data -or -.Ar rela -were NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar ndx -was less than zero or larger than the number of entries in the data -descriptor. -.It Bq Er ELF_E_ARGUMENT -Data descriptor -.Ar data -was not associated with a section of type -.Dv SHT_RELA . -.It Bq Er ELF_E_RANGE -A value was not representable in the target type. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_getdata 3 , -.Xr elf_getscn 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getshdr.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getshdr.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getshdr.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getshdr.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,115 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_getshdr.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd August 27, 2006 -.Os -.Dt GELF_GETSHDR 3 -.Sh NAME -.Nm elf32_getshdr , -.Nm elf64_getshdr , -.Nm gelf_getshdr -.Nd retrieve the class-dependent section header -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "Elf32_Shdr *" -.Fn elf32_getshdr "Elf_Scn *scn" -.Ft "Elf64_Shdr *" -.Fn elf64_getshdr "Elf_Scn *scn" -.In gelf.h -.Ft "GElf_Shdr *" -.Fn gelf_getshdr "Elf_Scn *scn" "GElf_Shdr *shdr" -.Sh DESCRIPTION -These functions return a pointer to the ELF Section Header data -structure associated with section descriptor -.Ar scn . -.Pp -Function -.Fn elf32_getshdr -retrieves a pointer to an -.Vt Elf32_Shdr -structure. -Section descriptor -.Ar scn -must be associated with an ELF descriptor of class -.Dv ELFCLASS32 . -.Pp -Function -.Fn elf64_getshdr -retrieves a pointer to an -.Vt Elf64_Shdr -structure. -Section descriptor -.Ar scn -must be associated with an ELF descriptor of class -.Dv ELFCLASS64 . -.Pp -Function -.Fn gelf_getshdr -copies the values in the section header associated with argument -.Ar scn -to the structure pointed to be argument -.Ar dst . -The -.Vt GElf_Shdr -data structure is described in -.Xr gelf 3 . -.Sh RETURN VALUES -Functions -.Fn elf32_getshdr -and -.Fn elf64_getshdr -return a valid pointer to the appropriate section header on success -or NULL if an error was encountered. -.Pp -Function -.Fn gelf_getshdr -returns argument -.Ar dst -if successful, or NULL if an error was encountered. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Arguments -.Ar scn -or -.Ar shdr -were NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar scn -was not associated a descriptor for an ELF object. -.It Bq Er ELF_E_CLASS -The ELF class associated with the section descriptor -.Ar scn -did not match the class expected by the API. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_getscn 3 , -.Xr gelf 3 , -.Xr gelf_update_shdr 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getsym.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getsym.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getsym.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getsym.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,125 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_getsym.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd August 29, 2006 -.Os -.Dt GELF_GETSYM 3 -.Sh NAME -.Nm gelf_getsym , -.Nm gelf_update_sym -.Nd read and update symbol information -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In gelf.h -.Ft "GElf_Sym *" -.Fn gelf_getsym "Elf_Data *data" "int ndx" "GElf_Sym *sym" -.Ft int -.Fn gelf_update_sym "Elf_Data *data" "int ndx" "GElf_Sym *sym" -.Sh DESCRIPTION -These convenience functions are used to retrieve and update class-dependent -.Vt Elf32_Sym -and -.Vt Elf64_Sym -structures in an ELF object. -.Pp -Argument -.Ar data -is an -.Vt Elf_Data -descriptor associated with a section of type -.Dv SHT_SYMTAB , -.Dv SHT_DYNSYM -or -.Dv SHT_GNU_versym . -Argument -.Ar ndx -is the index of the symbol being retrieved or updated. -The class-independent -.Vt GElf_Sym -structure is described in -.Xr gelf 3 . -.Pp -Function -.Fn gelf_getsym -retrieves class-dependent symbol information at index -.Ar ndx -in data buffer -.Ar data -and copies it to the destination pointed to by argument -.Ar sym -after translation to class-independent form. -.Pp -Function -.Fn gelf_update_sym -converts the class-independent symbol information pointed to -by argument -.Ar sym -to class-dependent form, and writes it to the symbol entry at index -.Ar ndx -in the data buffer described by argument -.Ar data . -Function -.Fn gelf_update_sym -signals an error if any of the values in the class-independent -representation exceeds the representable limits of the target -type. -.Sh RETURN VALUES -Function -.Fn gelf_getsym -returns the value of argument -.Ar sym -if successful, or NULL in case of an error. -Function -.Fn gelf_update_sym -returns a non-zero value if successful, or zero in case of an error. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Arguments -.Ar data -or -.Ar sym -were NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar ndx -was less than zero or larger than the number of symbols in the data -descriptor. -.It Bq Er ELF_E_ARGUMENT -Data descriptor -.Ar data -was not associated with a section containing symbol information. -.It Bq Er ELF_E_RANGE -A value was not representable in the target type. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_getdata 3 , -.Xr elf_getscn 3 , -.Xr gelf 3 , -.Xr gelf_getsyminfo 3 , -.Xr gelf_update_syminfo 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getsyminfo.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getsyminfo.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getsyminfo.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getsyminfo.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,115 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_getsyminfo.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd August 29, 2006 -.Os -.Dt GELF_GETSYMINFO 3 -.Sh NAME -.Nm gelf_getsyminfo , -.Nm gelf_update_syminfo -.Nd read and update symbol information -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In gelf.h -.Ft "GElf_Syminfo *" -.Fn gelf_getsyminfo "Elf_Data *data" "int ndx" "GElf_Syminfo *syminfo" -.Ft int -.Fn gelf_update_syminfo "Elf_Data *data" "int ndx" "GElf_Syminfo *syminfo" -.Sh DESCRIPTION -These convenience functions are used to retrieve and update class-dependent -.Vt Elf32_Syminfo -and -.Vt Elf64_Syminfo -records in an ELF object. -.Pp -Argument -.Ar data -is an -.Vt Elf_Data -descriptor associated with a section of type -.Dv SHT_SUNW_syminfo . -Argument -.Ar ndx -is the index of the record being retrieved or updated. -The class-independent -.Vt GElf_Syminfo -structure is described in -.Xr gelf 3 . -.Pp -Function -.Fn gelf_getsyminfo -retrieves class-dependent record at index -.Ar ndx -in data buffer -.Ar data -and copies it to the destination pointed to by argument -.Ar syminfo -after translation to class-independent form. -.Pp -Function -.Fn gelf_update_syminfo -converts the class-independent record pointed to -by argument -.Ar syminfo -to class-dependent form, and writes it to the record at index -.Ar ndx -in the data buffer described by argument -.Ar data . -.Sh RETURN VALUES -Function -.Fn gelf_getsyminfo -returns the value of argument -.Ar syminfo -if successful, or NULL in case of an error. -Function -.Fn gelf_update_syminfo -returns a non-zero value if successful, or zero in case of an error. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Arguments -.Ar data -or -.Ar syminfo -were NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar ndx -was less than zero or larger than the number of symbols in the data -descriptor. -.It Bq Er ELF_E_ARGUMENT -Data descriptor -.Ar data -was not associated with a section containing symbol information. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_getdata 3 , -.Xr elf_getscn 3 , -.Xr gelf 3 , -.Xr gelf_getsym 3 , -.Xr gelf_update_sym 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getsymshndx.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getsymshndx.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getsymshndx.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_getsymshndx.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,162 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_getsymshndx.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd November 5, 2006 -.Os -.Dt GELF_GETSYMSHNDX 3 -.Sh NAME -.Nm gelf_getsymshndx , -.Nm gelf_update_symshndx -.Nd read and update symbol information using extended section indices -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In gelf.h -.Ft "GElf_Sym *" -.Fo gelf_getsymshndx -.Fa "Elf_Data *symdata" -.Fa "Elf_Data *xndxdata" -.Fa "int ndx" -.Fa "GElf_Sym *sym" -.Fa "Elf32_Word *xndxptr" -.Fc -.Ft int -.Fo gelf_update_symshndx -.Fa "Elf_Data *symdata" -.Fa "Elf_Data *xndxdata" -.Fa "int ndx" -.Fa "GElf_Sym *sym" -.Fa "Elf32_Word xndx" -.Fc -.Sh DESCRIPTION -These functions are analogous to -.Fn gelf_getsym -and -.Fn gelf_update_sym -respectively, but are capable of handling symbol tables using extended -section numbering. -.Pp -Argument -.Ar symdata -is an -.Vt Elf_Data -descriptor associated with a section of type -.Dv SHT_SYMTAB . -Argument -.Ar xndxdata -is an -.Vt Elf_Data -descriptor associated with a section of type -.Dv SHT_SYMTAB_SHNDX . -Argument -.Ar ndx -is the index of the symbol table entry being retrieved or updated. -Argument -.Ar sym -is a pointer to a class-independent -.Vt GElf_Sym -structure. -.Vt GElf_Sym -structures are described in detail in -.Xr gelf 3 . -.Pp -Function -.Fn gelf_getsymshndx -retrieves symbol information at index -.Ar ndx -from the data descriptor specified by argument -.Ar symdata -and stores in class-independent form in argument -.Ar sym . -In addition it retrieves the extended section index for the -symbol from data buffer -.Ar xndxdata -and stores it into the location pointed to by argument -.Ar xndxptr . -.Pp -Function -.Fn gelf_update_symshndx -updates the underlying symbol table entry in data -descriptor -.Ar symdata -with the information in argument -.Ar sym . -In addition it sets the extended section index in -data buffer -.Ar xndxdata -to the value of argument -.Ar xndx . -.Sh RETURN VALUES -Function -.Fn gelf_getsymshndx -returns the value of argument -.Ar sym -if successful, or NULL in case of an error. -.Pp -Function -.Fn gelf_update_symshndx -returns a non-zero value if successful, or zero in case of an error. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Arguments -.Ar symdata , -.Ar xndxdata , -.Ar xndxptr -or -.Ar sym -were NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar ndx -was less than zero, or too large for either of descriptors -.Ar symdata -or -.Ar xndxdata . -.It Bq Er ELF_E_ARGUMENT -Data descriptor -.Ar symdata -was not associated with a section of type -.Dv SHT_SYMTAB . -.It Bq Er ELF_E_ARGUMENT -Data descriptor -.Ar xndxdata -was not associated with a section of type -.Dv SHT_SYMTAB_SHNDX . -.It Bq Er ELF_E_ARGUMENT -Data descriptor -.Ar symdata -and -.Ar xndxdata -were associated with different ELF objects. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_getdata 3 , -.Xr elf_getscn 3 , -.Xr gelf 3 , -.Xr gelf_getsym 3 , -.Xr gelf_update_sym 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf.h libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf.h --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf.h 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,110 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: gelf.h 3174 2015-03-27 17:13:41Z emaste $ - */ - -#ifndef _GELF_H_ -#define _GELF_H_ - -#include - -typedef Elf64_Addr GElf_Addr; /* Addresses */ -typedef Elf64_Half GElf_Half; /* Half words (16 bit) */ -typedef Elf64_Off GElf_Off; /* Offsets */ -typedef Elf64_Sword GElf_Sword; /* Signed words (32 bit) */ -typedef Elf64_Sxword GElf_Sxword; /* Signed long words (64 bit) */ -typedef Elf64_Word GElf_Word; /* Unsigned words (32 bit) */ -typedef Elf64_Xword GElf_Xword; /* Unsigned long words (64 bit) */ - -typedef Elf64_Dyn GElf_Dyn; /* ".dynamic" section entries */ -typedef Elf64_Ehdr GElf_Ehdr; /* ELF header */ -typedef Elf64_Phdr GElf_Phdr; /* Program header */ -typedef Elf64_Shdr GElf_Shdr; /* Section header */ -typedef Elf64_Sym GElf_Sym; /* Symbol table entries */ -typedef Elf64_Rel GElf_Rel; /* Relocation entries */ -typedef Elf64_Rela GElf_Rela; /* Relocation entries with addend */ - -typedef Elf64_Cap GElf_Cap; /* SW/HW capabilities */ -typedef Elf64_Move GElf_Move; /* Move entries */ -typedef Elf64_Syminfo GElf_Syminfo; /* Symbol information */ - -#define GELF_M_INFO ELF64_M_INFO -#define GELF_M_SIZE ELF64_M_SIZE -#define GELF_M_SYM ELF64_M_SYM - -#define GELF_R_INFO ELF64_R_INFO -#define GELF_R_SYM ELF64_R_SYM -#define GELF_R_TYPE ELF64_R_TYPE -#define GELF_R_TYPE_DATA ELF64_R_TYPE_DATA -#define GELF_R_TYPE_ID ELF64_R_TYPE_ID -#define GELF_R_TYPE_INFO ELF64_R_TYPE_INFO - -#define GELF_ST_BIND ELF64_ST_BIND -#define GELF_ST_INFO ELF64_ST_INFO -#define GELF_ST_TYPE ELF64_ST_TYPE -#define GELF_ST_VISIBILITY ELF64_ST_VISIBILITY - -#ifdef __cplusplus -extern "C" { -#endif -long gelf_checksum(Elf *_elf); -size_t gelf_fsize(Elf *_elf, Elf_Type _type, size_t _count, - unsigned int _version); -int gelf_getclass(Elf *_elf); -GElf_Dyn *gelf_getdyn(Elf_Data *_data, int _index, GElf_Dyn *_dst); -GElf_Ehdr *gelf_getehdr(Elf *_elf, GElf_Ehdr *_dst); -GElf_Phdr *gelf_getphdr(Elf *_elf, int _index, GElf_Phdr *_dst); -GElf_Rel *gelf_getrel(Elf_Data *_src, int _index, GElf_Rel *_dst); -GElf_Rela *gelf_getrela(Elf_Data *_src, int _index, GElf_Rela *_dst); -GElf_Shdr *gelf_getshdr(Elf_Scn *_scn, GElf_Shdr *_dst); -GElf_Sym *gelf_getsym(Elf_Data *_src, int _index, GElf_Sym *_dst); -GElf_Sym *gelf_getsymshndx(Elf_Data *_src, Elf_Data *_shindexsrc, - int _index, GElf_Sym *_dst, Elf32_Word *_shindexdst); -void * gelf_newehdr(Elf *_elf, int _class); -void * gelf_newphdr(Elf *_elf, size_t _phnum); -int gelf_update_dyn(Elf_Data *_dst, int _index, GElf_Dyn *_src); -int gelf_update_ehdr(Elf *_elf, GElf_Ehdr *_src); -int gelf_update_phdr(Elf *_elf, int _index, GElf_Phdr *_src); -int gelf_update_rel(Elf_Data *_dst, int _index, GElf_Rel *_src); -int gelf_update_rela(Elf_Data *_dst, int _index, GElf_Rela *_src); -int gelf_update_shdr(Elf_Scn *_dst, GElf_Shdr *_src); -int gelf_update_sym(Elf_Data *_dst, int _index, GElf_Sym *_src); -int gelf_update_symshndx(Elf_Data *_symdst, Elf_Data *_shindexdst, - int _index, GElf_Sym *_symsrc, Elf32_Word _shindexsrc); -Elf_Data *gelf_xlatetof(Elf *_elf, Elf_Data *_dst, const Elf_Data *_src, unsigned int _encode); -Elf_Data *gelf_xlatetom(Elf *_elf, Elf_Data *_dst, const Elf_Data *_src, unsigned int _encode); - -GElf_Cap *gelf_getcap(Elf_Data *_data, int _index, GElf_Cap *_cap); -GElf_Move *gelf_getmove(Elf_Data *_src, int _index, GElf_Move *_dst); -GElf_Syminfo *gelf_getsyminfo(Elf_Data *_src, int _index, GElf_Syminfo *_dst); -int gelf_update_cap(Elf_Data *_dst, int _index, GElf_Cap *_src); -int gelf_update_move(Elf_Data *_dst, int _index, GElf_Move *_src); -int gelf_update_syminfo(Elf_Data *_dst, int _index, GElf_Syminfo *_src); -#ifdef __cplusplus -} -#endif - -#endif /* _GELF_H_ */ diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_move.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_move.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_move.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_move.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,159 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: gelf_move.c 3177 2015-03-30 18:19:41Z emaste $"); - -GElf_Move * -gelf_getmove(Elf_Data *ed, int ndx, GElf_Move *dst) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - uint32_t sh_type; - Elf32_Move *move32; - Elf64_Move *move64; - struct _Libelf_Data *d; - - d = (struct _Libelf_Data *) ed; - - if (d == NULL || ndx < 0 || dst == NULL || - (scn = d->d_scn) == NULL || - (e = scn->s_elf) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_MOVE) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - msz = _libelf_msize(ELF_T_MOVE, ec, e->e_version); - - assert(msz > 0); - assert(ndx >= 0); - - if (msz * (size_t) ndx >= d->d_data.d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if (ec == ELFCLASS32) { - - move32 = (Elf32_Move *) d->d_data.d_buf + ndx; - - dst->m_value = move32->m_value; - dst->m_info = (Elf64_Xword) move32->m_info; - dst->m_poffset = (Elf64_Xword) move32->m_poffset; - dst->m_repeat = move32->m_repeat; - dst->m_stride = move32->m_stride; - } else { - - move64 = (Elf64_Move *) d->d_data.d_buf + ndx; - - *dst = *move64; - } - - return (dst); -} - -int -gelf_update_move(Elf_Data *ed, int ndx, GElf_Move *gm) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - uint32_t sh_type; - Elf32_Move *move32; - Elf64_Move *move64; - struct _Libelf_Data *d; - - d = (struct _Libelf_Data *) ed; - - if (d == NULL || ndx < 0 || gm == NULL || - (scn = d->d_scn) == NULL || - (e = scn->s_elf) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_MOVE) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - msz = _libelf_msize(ELF_T_MOVE, ec, e->e_version); - - assert(msz > 0); - assert(ndx >= 0); - - if (msz * (size_t) ndx >= d->d_data.d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if (ec == ELFCLASS32) { - move32 = (Elf32_Move *) d->d_data.d_buf + ndx; - - move32->m_value = gm->m_value; - LIBELF_COPY_U32(move32, gm, m_info); - LIBELF_COPY_U32(move32, gm, m_poffset); - move32->m_repeat = gm->m_repeat; - move32->m_stride = gm->m_stride; - - } else { - move64 = (Elf64_Move *) d->d_data.d_buf + ndx; - - *move64 = *gm; - } - - return (1); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_newehdr.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_newehdr.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_newehdr.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_newehdr.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,185 +0,0 @@ -.\" Copyright (c) 2006-2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_newehdr.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd October 22, 2007 -.Os -.Dt GELF_NEWEHDR 3 -.Sh NAME -.Nm elf32_newehdr , -.Nm elf64_newehdr , -.Nm gelf_newehdr -.Nd retrieve or allocate the object file header -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "Elf32_Ehdr *" -.Fn elf32_newehdr "Elf *elf" -.Ft "Elf64_Ehdr *" -.Fn elf64_newehdr "Elf *elf" -.In gelf.h -.Ft "void *" -.Fn gelf_newehdr "Elf *elf" "int elfclass" -.Sh DESCRIPTION -These functions retrieve the ELF header from the ELF descriptor -.Ar elf , -allocating a new header if needed. -File data structures are translated to their in-memory representations -as described in -.Xr elf 3 . -.Pp -Function -.Fn elf32_newehdr -returns a pointer to a 32 bit -.Vt Elf32_Ehdr -structure. -Function -.Fn elf64_newehdr -returns a pointer to a 64 bit -.Vt Elf64_Ehdr structure. -.Pp -When argument -.Ar elfclass -has value -.Dv ELFCLASS32 , -function -.Fn gelf_newehdr -returns the value returned by -.Fn elf32_newehdr "elf" . -When argument -.Ar elfclass -has value -.Dv ELFCLASS64 -it returns the value returned by -.Fn elf64_newehdr "elf" . -.Pp -If a fresh header structure is allocated, the members of the -structure are initialized as follows: -.Bl -tag -width indent -.It Va "e_ident[EI_MAG0..EI_MAG3]" -Identification bytes at offsets -.Dv EI_MAG0 , -.Dv EI_MAG1 , -.Dv EI_MAG2 -and -.Dv EI_MAG3 -are set to the ELF signature. -.It Va "e_ident[EI_CLASS]" -The identification byte at offset -.Dv EI_CLASS -is set to the ELF class associated with the function being called -or to argument -.Ar elfclass -for function -.Fn gelf_newehdr . -.It Va "e_ident[EI_DATA]" -The identification byte at offset -.Dv EI_DATA -is set to -.Dv ELFDATANONE . -.It Va "e_ident[EI_VERSION]" -The identification byte at offset -.Dv EI_VERSION -is set to the ELF library's operating version set by a prior call to -.Xr elf_version 3 . -.It Va e_machine -is set to -.Dv EM_NONE . -.It Va e_type -is set to -.Dv ELF_K_NONE . -.It Va e_version -is set to the ELF library's operating version set by a prior call to -.Xr elf_version 3 . -.El -.Pp -Other members of the header are set to zero. -The application is responsible for changing these values -as needed before calling -.Fn elf_update . -.Pp -If successful, these three functions set the -.Dv ELF_F_DIRTY -flag on ELF descriptor -.Ar elf . -.Sh RETURN VALUES -These functions return a pointer to a translated header descriptor -if successful, or NULL on failure. -.Sh ERRORS -These functions can fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -The argument -.Ar elf -was null. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not a descriptor for an ELF object. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elfclass -had an unsupported value. -.It Bq Er ELF_E_ARGUMENT -The class of the ELF descriptor -.Ar elf -did not match that of the requested operation. -.It Bq Er ELF_E_ARGUMENT -For function -.Fn gelf_newehdr , -the class of argument -.Ar elf -was not -.Dv ELFCLASSNONE -and did not match the argument -.Ar elfclass . -.It Bq Er ELF_E_CLASS -The ELF class of descriptor -.Ar elf -did not match that of the API function being called. -.It Bq Er ELF_E_HEADER -A malformed ELF header was detected. -.It Bq Er ELF_E_RESOURCE -An out of memory condition was detected during execution. -.It Bq Er ELF_E_SECTION -The ELF descriptor in argument -.Ar elf -did not adhere to the conventions used for extended numbering. -.It Bq Er ELF_E_VERSION -The ELF descriptor -.Ar elf -had an unsupported ELF version number. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf32_getehdr 3 , -.Xr elf64_getehdr 3 , -.Xr elf_flagdata 3 , -.Xr elf_getident 3 , -.Xr elf_update 3 , -.Xr elf_version 3 , -.Xr gelf 3 , -.Xr gelf_getehdr 3 , -.Xr elf 5 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_newphdr.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_newphdr.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_newphdr.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_newphdr.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,133 +0,0 @@ -.\" Copyright (c) 2006-2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_newphdr.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd October 22, 2007 -.Os -.Dt GELF_NEWPHDR 3 -.Sh NAME -.Nm elf32_newphdr , -.Nm elf64_newphdr , -.Nm gelf_newphdr -.Nd allocate an ELF program header table -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "Elf32_Phdr *" -.Fn elf32_newphdr "Elf *elf" "size_t count" -.Ft "Elf64_Phdr *" -.Fn elf64_newphdr "Elf *elf" "size_t count" -.In gelf.h -.Ft "void *" -.Fn gelf_newphdr "Elf *elf" "size_t count" -.Sh DESCRIPTION -These functions allocate an ELF Program Header table -for an ELF descriptor. -.Vt Elf32_Phdr -and -.Vt Elf64_Phdr -descriptors are described further in -.Xr elf 5 . -.Pp -Functions -.Fn elf32_newphdr -and -.Fn elf64_newphdr -allocate a table of -.Ar count -.Vt Elf32_Phdr -and -.Vt Elf64_Phdr -descriptors respectively, -discarding any existing program header table -already present in the ELF descriptor -.Ar elf . -A value of zero for argument -.Ar count -may be used to delete an existing program header table -from an ELF descriptor. -.Pp -Function -.Fn gelf_newphdr -will return a table of -.Vt Elf32_Phdr -or -.Vt Elf64_Phdr -with -.Ar count -elements depending on the ELF class of ELF descriptor -.Ar elf . -.Pp -The functions set the -.Dv ELF_F_DIRTY -flag on the program header table. -All members of the returned array of Phdr structures -will be initialized to zero. -.Pp -After a successful call to these functions, the pointer returned -by a prior call to -.Fn elf32_getphdr -or -.Fn elf64_getphdr -on the same descriptor -.Ar elf -will no longer be valid. -.Sh RETURN VALUES -The functions a valid pointer if successful, or NULL in case an error -was encountered. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not a descriptor for an ELF object. -.It Bq Er ELF_E_CLASS -ELF descriptor -.Ar elf -was of an unrecognized class. -.It Bq Er ELF_E_RESOURCE -An out of memory condition was detected. -.It Bq Er ELF_E_SEQUENCE -An executable header was not allocated for ELF descriptor -.Ar elf -before using these APIs. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf32_getphdr 3 , -.Xr elf32_newehdr 3 , -.Xr elf64_getphdr 3 , -.Xr elf64_newehdr 3 , -.Xr elf_flagphdr 3 , -.Xr elf_getphnum 3 , -.Xr gelf 3 , -.Xr gelf_getphdr 3 , -.Xr gelf_newehdr 3 , -.Xr elf 5 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_phdr.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_phdr.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_phdr.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_phdr.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,177 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: gelf_phdr.c 3177 2015-03-30 18:19:41Z emaste $"); - -Elf32_Phdr * -elf32_getphdr(Elf *e) -{ - return (_libelf_getphdr(e, ELFCLASS32)); -} - -Elf64_Phdr * -elf64_getphdr(Elf *e) -{ - return (_libelf_getphdr(e, ELFCLASS64)); -} - -GElf_Phdr * -gelf_getphdr(Elf *e, int index, GElf_Phdr *d) -{ - int ec; - Elf32_Ehdr *eh32; - Elf64_Ehdr *eh64; - Elf32_Phdr *ep32; - Elf64_Phdr *ep64; - - if (d == NULL || e == NULL || - ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64) || - (e->e_kind != ELF_K_ELF) || index < 0) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if (ec == ELFCLASS32) { - if ((eh32 = _libelf_ehdr(e, ELFCLASS32, 0)) == NULL || - ((ep32 = _libelf_getphdr(e, ELFCLASS32)) == NULL)) - return (NULL); - - if (index >= eh32->e_phnum) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - ep32 += index; - - d->p_type = ep32->p_type; - d->p_offset = ep32->p_offset; - d->p_vaddr = (Elf64_Addr) ep32->p_vaddr; - d->p_paddr = (Elf64_Addr) ep32->p_paddr; - d->p_filesz = (Elf64_Xword) ep32->p_filesz; - d->p_memsz = (Elf64_Xword) ep32->p_memsz; - d->p_flags = ep32->p_flags; - d->p_align = (Elf64_Xword) ep32->p_align; - - } else { - if ((eh64 = _libelf_ehdr(e, ELFCLASS64, 0)) == NULL || - (ep64 = _libelf_getphdr(e, ELFCLASS64)) == NULL) - return (NULL); - - if (index >= eh64->e_phnum) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - ep64 += index; - - *d = *ep64; - } - - return (d); -} - -Elf32_Phdr * -elf32_newphdr(Elf *e, size_t count) -{ - return (_libelf_newphdr(e, ELFCLASS32, count)); -} - -Elf64_Phdr * -elf64_newphdr(Elf *e, size_t count) -{ - return (_libelf_newphdr(e, ELFCLASS64, count)); -} - -void * -gelf_newphdr(Elf *e, size_t count) -{ - if (e == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - return (_libelf_newphdr(e, e->e_class, count)); -} - -int -gelf_update_phdr(Elf *e, int ndx, GElf_Phdr *s) -{ - int ec, phnum; - void *ehdr; - Elf32_Phdr *ph32; - Elf64_Phdr *ph64; - - if (s == NULL || e == NULL || e->e_kind != ELF_K_ELF || - ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if (e->e_cmd == ELF_C_READ) { - LIBELF_SET_ERROR(MODE, 0); - return (0); - } - - if ((ehdr = _libelf_ehdr(e, ec, 0)) == NULL) - return (0); - - if (ec == ELFCLASS32) - phnum = ((Elf32_Ehdr *) ehdr)->e_phnum; - else - phnum = ((Elf64_Ehdr *) ehdr)->e_phnum; - - if (ndx < 0 || ndx > phnum) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - (void) elf_flagphdr(e, ELF_C_SET, ELF_F_DIRTY); - - if (ec == ELFCLASS64) { - ph64 = e->e_u.e_elf.e_phdr.e_phdr64 + ndx; - *ph64 = *s; - return (1); - } - - ph32 = e->e_u.e_elf.e_phdr.e_phdr32 + ndx; - - ph32->p_type = s->p_type; - ph32->p_flags = s->p_flags; - LIBELF_COPY_U32(ph32, s, p_offset); - LIBELF_COPY_U32(ph32, s, p_vaddr); - LIBELF_COPY_U32(ph32, s, p_paddr); - LIBELF_COPY_U32(ph32, s, p_filesz); - LIBELF_COPY_U32(ph32, s, p_memsz); - LIBELF_COPY_U32(ph32, s, p_align); - - return (1); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_rela.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_rela.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_rela.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_rela.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,165 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: gelf_rela.c 3177 2015-03-30 18:19:41Z emaste $"); - -GElf_Rela * -gelf_getrela(Elf_Data *ed, int ndx, GElf_Rela *dst) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - uint32_t sh_type; - Elf32_Rela *rela32; - Elf64_Rela *rela64; - struct _Libelf_Data *d; - - d = (struct _Libelf_Data *) ed; - - if (d == NULL || ndx < 0 || dst == NULL || - (scn = d->d_scn) == NULL || - (e = scn->s_elf) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_RELA) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - msz = _libelf_msize(ELF_T_RELA, ec, e->e_version); - - assert(msz > 0); - assert(ndx >= 0); - - if (msz * (size_t) ndx >= d->d_data.d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if (ec == ELFCLASS32) { - rela32 = (Elf32_Rela *) d->d_data.d_buf + ndx; - - dst->r_offset = (Elf64_Addr) rela32->r_offset; - dst->r_info = ELF64_R_INFO( - (Elf64_Xword) ELF32_R_SYM(rela32->r_info), - ELF32_R_TYPE(rela32->r_info)); - dst->r_addend = (Elf64_Sxword) rela32->r_addend; - - } else { - - rela64 = (Elf64_Rela *) d->d_data.d_buf + ndx; - - *dst = *rela64; - } - - return (dst); -} - -int -gelf_update_rela(Elf_Data *ed, int ndx, GElf_Rela *dr) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - uint32_t sh_type; - Elf32_Rela *rela32; - Elf64_Rela *rela64; - struct _Libelf_Data *d; - - d = (struct _Libelf_Data *) ed; - - if (d == NULL || ndx < 0 || dr == NULL || - (scn = d->d_scn) == NULL || - (e = scn->s_elf) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_RELA) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - msz = _libelf_msize(ELF_T_RELA, ec, e->e_version); - - assert(msz > 0); - assert(ndx >= 0); - - if (msz * (size_t) ndx >= d->d_data.d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if (ec == ELFCLASS32) { - rela32 = (Elf32_Rela *) d->d_data.d_buf + ndx; - - LIBELF_COPY_U32(rela32, dr, r_offset); - - if (ELF64_R_SYM(dr->r_info) > ELF32_R_SYM(~0UL) || - ELF64_R_TYPE(dr->r_info) > ELF32_R_TYPE(~0U)) { - LIBELF_SET_ERROR(RANGE, 0); - return (0); - } - rela32->r_info = ELF32_R_INFO( - (Elf32_Word) ELF64_R_SYM(dr->r_info), - (Elf32_Word) ELF64_R_TYPE(dr->r_info)); - - LIBELF_COPY_S32(rela32, dr, r_addend); - } else { - rela64 = (Elf64_Rela *) d->d_data.d_buf + ndx; - - *rela64 = *dr; - } - - return (1); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_rel.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_rel.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_rel.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_rel.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,162 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: gelf_rel.c 3177 2015-03-30 18:19:41Z emaste $"); - -GElf_Rel * -gelf_getrel(Elf_Data *ed, int ndx, GElf_Rel *dst) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - uint32_t sh_type; - Elf32_Rel *rel32; - Elf64_Rel *rel64; - struct _Libelf_Data *d; - - d = (struct _Libelf_Data *) ed; - - if (d == NULL || ndx < 0 || dst == NULL || - (scn = d->d_scn) == NULL || - (e = scn->s_elf) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_REL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - msz = _libelf_msize(ELF_T_REL, ec, e->e_version); - - assert(msz > 0); - assert(ndx >= 0); - - if (msz * (size_t) ndx >= d->d_data.d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if (ec == ELFCLASS32) { - rel32 = (Elf32_Rel *) d->d_data.d_buf + ndx; - - dst->r_offset = (Elf64_Addr) rel32->r_offset; - dst->r_info = ELF64_R_INFO( - (Elf64_Xword) ELF32_R_SYM(rel32->r_info), - ELF32_R_TYPE(rel32->r_info)); - - } else { - - rel64 = (Elf64_Rel *) d->d_data.d_buf + ndx; - - *dst = *rel64; - } - - return (dst); -} - -int -gelf_update_rel(Elf_Data *ed, int ndx, GElf_Rel *dr) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - uint32_t sh_type; - Elf32_Rel *rel32; - Elf64_Rel *rel64; - struct _Libelf_Data *d; - - d = (struct _Libelf_Data *) ed; - - if (d == NULL || ndx < 0 || dr == NULL || - (scn = d->d_scn) == NULL || - (e = scn->s_elf) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_REL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - msz = _libelf_msize(ELF_T_REL, ec, e->e_version); - - assert(msz > 0); - assert(ndx >= 0); - - if (msz * (size_t) ndx >= d->d_data.d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if (ec == ELFCLASS32) { - rel32 = (Elf32_Rel *) d->d_data.d_buf + ndx; - - LIBELF_COPY_U32(rel32, dr, r_offset); - - if (ELF64_R_SYM(dr->r_info) > ELF32_R_SYM(~0UL) || - ELF64_R_TYPE(dr->r_info) > ELF32_R_TYPE(~0U)) { - LIBELF_SET_ERROR(RANGE, 0); - return (0); - } - rel32->r_info = ELF32_R_INFO( - (Elf32_Word) ELF64_R_SYM(dr->r_info), - (Elf32_Word) ELF64_R_TYPE(dr->r_info)); - } else { - rel64 = (Elf64_Rel *) d->d_data.d_buf + ndx; - - *rel64 = *dr; - } - - return (1); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_shdr.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_shdr.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_shdr.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_shdr.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,130 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: gelf_shdr.c 3177 2015-03-30 18:19:41Z emaste $"); - -Elf32_Shdr * -elf32_getshdr(Elf_Scn *s) -{ - return (_libelf_getshdr(s, ELFCLASS32)); -} - -Elf64_Shdr * -elf64_getshdr(Elf_Scn *s) -{ - return (_libelf_getshdr(s, ELFCLASS64)); -} - -GElf_Shdr * -gelf_getshdr(Elf_Scn *s, GElf_Shdr *d) -{ - int ec; - void *sh; - Elf32_Shdr *sh32; - Elf64_Shdr *sh64; - - if (d == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if ((sh = _libelf_getshdr(s, ELFCLASSNONE)) == NULL) - return (NULL); - - ec = s->s_elf->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) { - sh32 = (Elf32_Shdr *) sh; - - d->sh_name = sh32->sh_name; - d->sh_type = sh32->sh_type; - d->sh_flags = (Elf64_Xword) sh32->sh_flags; - d->sh_addr = (Elf64_Addr) sh32->sh_addr; - d->sh_offset = (Elf64_Off) sh32->sh_offset; - d->sh_size = (Elf64_Xword) sh32->sh_size; - d->sh_link = sh32->sh_link; - d->sh_info = sh32->sh_info; - d->sh_addralign = (Elf64_Xword) sh32->sh_addralign; - d->sh_entsize = (Elf64_Xword) sh32->sh_entsize; - } else { - sh64 = (Elf64_Shdr *) sh; - *d = *sh64; - } - - return (d); -} - -int -gelf_update_shdr(Elf_Scn *scn, GElf_Shdr *s) -{ - int ec; - Elf *e; - Elf32_Shdr *sh32; - - - if (s == NULL || scn == NULL || (e = scn->s_elf) == NULL || - e->e_kind != ELF_K_ELF || - ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if (e->e_cmd == ELF_C_READ) { - LIBELF_SET_ERROR(MODE, 0); - return (0); - } - - (void) elf_flagscn(scn, ELF_C_SET, ELF_F_DIRTY); - - if (ec == ELFCLASS64) { - scn->s_shdr.s_shdr64 = *s; - return (1); - } - - sh32 = &scn->s_shdr.s_shdr32; - - sh32->sh_name = s->sh_name; - sh32->sh_type = s->sh_type; - LIBELF_COPY_U32(sh32, s, sh_flags); - LIBELF_COPY_U32(sh32, s, sh_addr); - LIBELF_COPY_U32(sh32, s, sh_offset); - LIBELF_COPY_U32(sh32, s, sh_size); - sh32->sh_link = s->sh_link; - sh32->sh_info = s->sh_info; - LIBELF_COPY_U32(sh32, s, sh_addralign); - LIBELF_COPY_U32(sh32, s, sh_entsize); - - return (1); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_sym.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_sym.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_sym.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_sym.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,159 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: gelf_sym.c 3177 2015-03-30 18:19:41Z emaste $"); - -GElf_Sym * -gelf_getsym(Elf_Data *ed, int ndx, GElf_Sym *dst) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - uint32_t sh_type; - Elf32_Sym *sym32; - Elf64_Sym *sym64; - struct _Libelf_Data *d; - - d = (struct _Libelf_Data *) ed; - - if (d == NULL || ndx < 0 || dst == NULL || - (scn = d->d_scn) == NULL || - (e = scn->s_elf) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_SYM) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - msz = _libelf_msize(ELF_T_SYM, ec, e->e_version); - - assert(msz > 0); - assert(ndx >= 0); - - if (msz * (size_t) ndx >= d->d_data.d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if (ec == ELFCLASS32) { - sym32 = (Elf32_Sym *) d->d_data.d_buf + ndx; - - dst->st_name = sym32->st_name; - dst->st_value = (Elf64_Addr) sym32->st_value; - dst->st_size = (Elf64_Xword) sym32->st_size; - dst->st_info = sym32->st_info; - dst->st_other = sym32->st_other; - dst->st_shndx = sym32->st_shndx; - } else { - sym64 = (Elf64_Sym *) d->d_data.d_buf + ndx; - - *dst = *sym64; - } - - return (dst); -} - -int -gelf_update_sym(Elf_Data *ed, int ndx, GElf_Sym *gs) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - uint32_t sh_type; - Elf32_Sym *sym32; - Elf64_Sym *sym64; - struct _Libelf_Data *d; - - d = (struct _Libelf_Data *) ed; - - if (d == NULL || ndx < 0 || gs == NULL || - (scn = d->d_scn) == NULL || - (e = scn->s_elf) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_SYM) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - msz = _libelf_msize(ELF_T_SYM, ec, e->e_version); - - assert(msz > 0); - assert(ndx >= 0); - - if (msz * (size_t) ndx >= d->d_data.d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if (ec == ELFCLASS32) { - sym32 = (Elf32_Sym *) d->d_data.d_buf + ndx; - - sym32->st_name = gs->st_name; - sym32->st_info = gs->st_info; - sym32->st_other = gs->st_other; - sym32->st_shndx = gs->st_shndx; - - LIBELF_COPY_U32(sym32, gs, st_value); - LIBELF_COPY_U32(sym32, gs, st_size); - } else { - sym64 = (Elf64_Sym *) d->d_data.d_buf + ndx; - - *sym64 = *gs; - } - - return (1); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_syminfo.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_syminfo.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_syminfo.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_syminfo.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,152 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: gelf_syminfo.c 3174 2015-03-27 17:13:41Z emaste $"); - -GElf_Syminfo * -gelf_getsyminfo(Elf_Data *ed, int ndx, GElf_Syminfo *dst) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - uint32_t sh_type; - struct _Libelf_Data *d; - Elf32_Syminfo *syminfo32; - Elf64_Syminfo *syminfo64; - - d = (struct _Libelf_Data *) ed; - - if (d == NULL || ndx < 0 || dst == NULL || - (scn = d->d_scn) == NULL || - (e = scn->s_elf) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_SYMINFO) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - msz = _libelf_msize(ELF_T_SYMINFO, ec, e->e_version); - - assert(msz > 0); - assert(ndx >= 0); - - if (msz * (size_t) ndx >= d->d_data.d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if (ec == ELFCLASS32) { - - syminfo32 = (Elf32_Syminfo *) d->d_data.d_buf + ndx; - - dst->si_boundto = syminfo32->si_boundto; - dst->si_flags = syminfo32->si_flags; - - } else { - - syminfo64 = (Elf64_Syminfo *) d->d_data.d_buf + ndx; - - *dst = *syminfo64; - } - - return (dst); -} - -int -gelf_update_syminfo(Elf_Data *ed, int ndx, GElf_Syminfo *gs) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - uint32_t sh_type; - struct _Libelf_Data *d; - Elf32_Syminfo *syminfo32; - Elf64_Syminfo *syminfo64; - - d = (struct _Libelf_Data *) ed; - - if (d == NULL || ndx < 0 || gs == NULL || - (scn = d->d_scn) == NULL || - (e = scn->s_elf) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_SYMINFO) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - msz = _libelf_msize(ELF_T_SYMINFO, ec, e->e_version); - - assert(msz > 0); - assert(ndx >= 0); - - if (msz * (size_t) ndx >= d->d_data.d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - if (ec == ELFCLASS32) { - syminfo32 = (Elf32_Syminfo *) d->d_data.d_buf + ndx; - - syminfo32->si_boundto = gs->si_boundto; - syminfo32->si_flags = gs->si_flags; - - } else { - syminfo64 = (Elf64_Syminfo *) d->d_data.d_buf + ndx; - - *syminfo64 = *gs; - } - - return (1); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_symshndx.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_symshndx.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_symshndx.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_symshndx.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,137 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: gelf_symshndx.c 3174 2015-03-27 17:13:41Z emaste $"); - -GElf_Sym * -gelf_getsymshndx(Elf_Data *d, Elf_Data *id, int ndx, GElf_Sym *dst, - Elf32_Word *shindex) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - uint32_t sh_type; - struct _Libelf_Data *ld, *lid; - - ld = (struct _Libelf_Data *) d; - lid = (struct _Libelf_Data *) id; - - if (gelf_getsym(d, ndx, dst) == 0) - return (NULL); - - if (lid == NULL || (scn = lid->d_scn) == NULL || - (e = scn->s_elf) == NULL || (e != ld->d_scn->s_elf) || - shindex == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_WORD || - id->d_type != ELF_T_WORD) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - msz = _libelf_msize(ELF_T_WORD, ec, e->e_version); - - assert(msz > 0); - assert(ndx >= 0); - - if (msz * (size_t) ndx >= id->d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - *shindex = ((Elf32_Word *) id->d_buf)[ndx]; - - return (dst); -} - -int -gelf_update_symshndx(Elf_Data *d, Elf_Data *id, int ndx, GElf_Sym *gs, - Elf32_Word xindex) -{ - int ec; - Elf *e; - size_t msz; - Elf_Scn *scn; - uint32_t sh_type; - struct _Libelf_Data *ld, *lid; - - ld = (struct _Libelf_Data *) d; - lid = (struct _Libelf_Data *) id; - - if (gelf_update_sym(d, ndx, gs) == 0) - return (0); - - if (lid == NULL || (scn = lid->d_scn) == NULL || - (e = scn->s_elf) == NULL || (e != ld->d_scn->s_elf)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - ec = e->e_class; - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (ec == ELFCLASS32) - sh_type = scn->s_shdr.s_shdr32.sh_type; - else - sh_type = scn->s_shdr.s_shdr64.sh_type; - - if (_libelf_xlate_shtype(sh_type) != ELF_T_WORD || - d->d_type != ELF_T_WORD) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - msz = _libelf_msize(ELF_T_WORD, ec, e->e_version); - - assert(msz > 0); - assert(ndx >= 0); - - if (msz * (size_t) ndx >= id->d_size) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0); - } - - *(((Elf32_Word *) id->d_buf) + ndx) = xindex; - - return (1); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_update_ehdr.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_update_ehdr.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_update_ehdr.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_update_ehdr.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_update_ehdr.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd August 27, 2006 -.Os -.Dt GELF_UPDATE_EHDR 3 -.Sh NAME -.Nm gelf_update_ehdr , -.Nm gelf_update_phdr , -.Nm gelf_update_shdr -.Nd update underlying ELF data structures -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In gelf.h -.Ft int -.Fn gelf_update_ehdr "Elf *elf" "GElf_Ehdr *ehdr" -.Ft int -.Fn gelf_update_phdr "Elf *elf" "int ndx" "GElf_Phdr *phdr" -.Ft int -.Fn gelf_update_shdr "Elf_Scn *scn" "GElf_Shdr *shdr" -.Sh DESCRIPTION -These functions are used to update ELF data structures on the underlying -ELF descriptor. -Class-dependent data structures in the underlying ELF descriptor -are updated using the data in the class-independent GElf descriptors -and the underlying ELF data structures are marked -.Dq dirty . -The conversion process signals an error if the values being copied -to the target ELF data structure would exceed representation -limits. -GElf descriptors are described in -.Xr gelf 3 . -.Pp -Function -.Fn gelf_update_ehdr -updates the ELF Executable Header with the values in the -class-independent executable header -.Ar ehdr . -.Pp -Function -.Fn gelf_update_phdr -updates the ELF Program Header structure at index -.Ar ndx -with the values in the class-independent program header -.Ar phdr . -.Pp -Function -.Fn gelf_update_shdr -updates the ELF Section Header structure associated with section -descriptor -.Ar scn -with the values in argument -.Ar shdr . -.Sh RETURN VALUES -These functions return a non-zero integer on success, or zero in case -of an error. -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -Arguments -.Ar elf , -.Ar ehdr , -.Ar phdr , -.Ar scn , -or -.Ar shdr -were NULL. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -was not a descriptor for an ELF object. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar elf -had an unsupported ELF class. -.It Bq Er ELF_E_ARGUMENT -Argument -.Ar ndx -exceeded the number of entries in the program header table. -.It Bq Er ELF_E_ARGUMENT -Section descriptor -.Ar scn -was not associated with an ELF descriptor. -.It Bq Er ELF_E_MODE -ELF descriptor -.Ar elf -was not opened for writing or updating. -.It Bq Er ELF_E_RESOURCE -An out of memory condition was detected. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_flagelf 3 , -.Xr elf_flagphdr 3 , -.Xr elf_flagshdr 3 , -.Xr gelf 3 , -.Xr gelf_getehdr 3 , -.Xr gelf_getphdr 3 , -.Xr gelf_getshdr 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_xlate.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_xlate.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_xlate.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_xlate.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: gelf_xlate.c 3174 2015-03-27 17:13:41Z emaste $"); - -Elf_Data * -elf32_xlatetof(Elf_Data *dst, const Elf_Data *src, unsigned int encoding) -{ - return _libelf_xlate(dst, src, encoding, ELFCLASS32, ELF_TOFILE); -} - -Elf_Data * -elf64_xlatetof(Elf_Data *dst, const Elf_Data *src, unsigned int encoding) -{ - return _libelf_xlate(dst, src, encoding, ELFCLASS64, ELF_TOFILE); -} - -Elf_Data * -elf32_xlatetom(Elf_Data *dst, const Elf_Data *src, unsigned int encoding) -{ - return _libelf_xlate(dst, src, encoding, ELFCLASS32, ELF_TOMEMORY); -} - -Elf_Data * -elf64_xlatetom(Elf_Data *dst, const Elf_Data *src, unsigned int encoding) -{ - return _libelf_xlate(dst, src, encoding, ELFCLASS64, ELF_TOMEMORY); -} - -Elf_Data * -gelf_xlatetom(Elf *e, Elf_Data *dst, const Elf_Data *src, - unsigned int encoding) -{ - if (e != NULL) - return (_libelf_xlate(dst, src, encoding, e->e_class, - ELF_TOMEMORY)); - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); -} - -Elf_Data * -gelf_xlatetof(Elf *e, Elf_Data *dst, const Elf_Data *src, - unsigned int encoding) -{ - if (e != NULL) - return (_libelf_xlate(dst, src, encoding, e->e_class, - ELF_TOFILE)); - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_xlatetof.3 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_xlatetof.3 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/gelf_xlatetof.3 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/gelf_xlatetof.3 1970-01-01 00:00:00.000000000 +0000 @@ -1,247 +0,0 @@ -.\" Copyright (c) 2006,2008 Joseph Koshy. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" This software is provided by Joseph Koshy ``as is'' and -.\" any express or implied warranties, including, but not limited to, the -.\" implied warranties of merchantability and fitness for a particular purpose -.\" are disclaimed. in no event shall Joseph Koshy be liable -.\" for any direct, indirect, incidental, special, exemplary, or consequential -.\" damages (including, but not limited to, procurement of substitute goods -.\" or services; loss of use, data, or profits; or business interruption) -.\" however caused and on any theory of liability, whether in contract, strict -.\" liability, or tort (including negligence or otherwise) arising in any way -.\" out of the use of this software, even if advised of the possibility of -.\" such damage. -.\" -.\" $Id: gelf_xlatetof.3 189 2008-07-20 10:38:08Z jkoshy $ -.\" -.Dd July 24, 2006 -.Os -.Dt GELF_XLATETOF 3 -.Sh NAME -.Nm elf32_xlate , -.Nm elf64_xlate , -.Nm gelf_xlate -.Nd translate data between files and memory -.Sh LIBRARY -.Lb libelf -.Sh SYNOPSIS -.In libelf.h -.Ft "Elf_Data *" -.Fn elf32_xlatetof "Elf_Data *dst" "Elf_Data *src" "unsigned int encode" -.Ft "Elf_Data *" -.Fn elf32_xlatetom "Elf_Data *dst" "Elf_Data *src" "unsigned int encode" -.Ft "Elf_Data *" -.Fn elf64_xlatetof "Elf_Data *dst" "Elf_Data *src" "unsigned int encode" -.Ft "Elf_Data *" -.Fn elf64_xlatetom "Elf_Data *dst" "Elf_Data *src" "unsigned int encode" -.In gelf.h -.Ft "Elf_Data *" -.Fo gelf_xlatetof -.Fa "Elf *elf" -.Fa "Elf_Data *dst" -.Fa "Elf_Data *src" -.Fa "unsigned int encode" -.Fc -.Ft "Elf_Data *" -.Fo gelf_xlatetom -.Fa "Elf *elf" -.Fa "Elf_Data *dst" -.Fa "Elf_Data *src" -.Fa "unsigned int encode" -.Fc -.Sh DESCRIPTION -These functions translate between the file and memory representations -of ELF data structures. -The in-memory representation of an ELF data structure would confirm to -the byte ordering and data alignment restrictions dictated by the host -processor. -A file representation of the same data structure could use a non-native byte -ordering and in addition may be laid out differently with the file. -.Pp -Functions -.Fn elf32_xlatetom , -.Fn elf64_xlatetom , -and -.Fn gelf_xlatetom -translate data from file representations to native, in-memory representations. -Functions -.Fn elf32_xlatetof , -.Fn elf64_xlatetof , -and -.Fn gelf_xlatetof -translate data from in-memory representations to file representations. -.Pp -Argument -.Ar src -denotes an -.Vt Elf_Data -descriptor describing the source to be translated. -The following elements of the descriptor need to be set before -invoking these functions: -.Bl -hang -offset indent -.It Va d_buf -Set to a valid pointer value denoting the beginning of the data area -to be translated. -.It Va d_size -Set to the total size in bytes of the source data area to be -translated. -.It Va d_type -Set to the type of the source data being translated. -This value is one of the values defined in the -.Vt Elf_Type -enumeration. -The -.Vt Elf_Type -enumeration is described in -.Xr elf 3 . -.It Va d_version -Set to the version number of the ELF data structures being -translated. -Currently only version -.Dv EV_CURRENT -is supported. -.El -.Pp -Argument -.Ar dst -describes the destination buffer. -The following elements of the -.Vt Elf_Data -descriptor need to be set before invoking these functions: -.Bl -hang -offset indent -.It Va d_buf -Set to a valid pointer value that denotes the start of the destination -buffer that will hold translated data. -This value may be the same as that of the source buffer, in which case -an in-place conversion will be attempted. -.It Va d_size -Set to the size of the destination buffer in bytes. -This value will be modified if the function call succeeds. -.It Va d_version -Set to the desired version number of the destination. -Currently only version -.Dv EV_CURRENT -is supported. -.El -.Pp -These translations routines allow the source and destination buffers -to coincide, in which case an in-place translation will be done -if the destination is large enough to hold the translated data. -Other kinds of overlap between the source and destination buffers -are not permitted. -.Pp -On successful completion of the translation request the following -fields of the -.Ar dst -descriptor would be modified: -.Bl -hang -offset indent -.It Va d_size -Set to the size in bytes of the translated data. -.It Va d_type -Set to the -.Va d_type -value of the source data descriptor. -.El -.Pp -Argument -.Ar encode -specifies the encoding in which the file objects are represented. -It must be one of: -.Bl -hang -offset indent -.It Dv ELFDATANONE -File objects use the library's native byte ordering. -.It Dv ELFDATA2LSB -File objects use a little-endian ordering. -.It Dv ELFDATA2MSB -File objects use a big-endian ordering. -.El -.Pp -The functions -.Fn gelf_xlatetof -and -.Fn gelf_xlatetom -select the appropriate 32 or 64 bit translations based on the class of argument -.Ar elf . -.Sh RETURN VALUES -These functions return argument -.Ar dst -if successful, or NULL in case of an error. -.Sh EXAMPLES -TODO -.Sh ERRORS -These functions may fail with the following errors: -.Bl -tag -width "[ELF_E_RESOURCE]" -.It Bq Er ELF_E_ARGUMENT -One of arguments -.Ar src , -.Ar dst -or -.Ar elf -was NULL. -.It Bq Er ELF_E_ARGUMENT -Arguments -.Ar src -and -.Ar dst -were equal. -.It Bq Er ELF_E_ARGUMENT -The desired encoding parameter was not one of -.Dv ELFDATANONE , -.Dv ELFDATA2LSB -or -.Dv ELFDATA2MSB . -.It Bq Er ELF_E_ARGUMENT -The -.Ar d_type -field of argument -.Ar src -specified an unsupported type. -.It Bq Er ELF_E_DATA -The -.Ar src -argument specified a buffer size that was not an integral multiple of -its underlying type. -.It Bq Er ELF_E_DATA -The -.Ar dst -argument specified a buffer size that was too small. -.It Bq Er ELF_E_DATA -Argument -.Ar dst -specified a destination buffer that overlaps with the source -buffer. -.It Bq Er ELF_E_DATA -The destination buffer for a conversion to memory had an alignment -inappropriate for the underlying ELF type. -.It Bq Er ELF_E_DATA -The source buffer for a conversion to file had an alignment -inappropriate for the underlying ELF type. -.It Bq Er ELF_E_UNIMPL -The version numbers for arguments -.Ar dst -and -.Ar src -were not identical. -.It Bq Er ELF_E_UNIMPL -The argument -.Ar src -requested conversion for a type which is not currently -supported. -.It Bq Er ELF_E_VERSION -Argument -.Ar src -specified an unsupported version number. -.El -.Sh SEE ALSO -.Xr elf 3 , -.Xr elf_getdata 3 , -.Xr gelf 3 diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_align.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_align.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_align.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_align.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,135 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: libelf_align.c 3174 2015-03-27 17:13:41Z emaste $"); - -struct align { - unsigned int a32; - unsigned int a64; -}; - -#ifdef __GNUC__ -#define MALIGN(N) { \ - .a32 = __alignof__(Elf32_##N), \ - .a64 = __alignof__(Elf64_##N) \ - } -#define MALIGN64(V) { \ - .a32 = 0, \ - .a64 = __alignof__(Elf64_##V) \ - } -#define MALIGN_WORD() { \ - .a32 = __alignof__(int32_t), \ - .a64 = __alignof__(int64_t) \ - } -#else -#error Need the __alignof__ builtin. -#endif -#define UNSUPPORTED() { \ - .a32 = 0, \ - .a64 = 0 \ - } - -static struct align malign[ELF_T_NUM] = { - [ELF_T_ADDR] = MALIGN(Addr), - [ELF_T_BYTE] = { .a32 = 1, .a64 = 1 }, - [ELF_T_CAP] = MALIGN(Cap), - [ELF_T_DYN] = MALIGN(Dyn), - [ELF_T_EHDR] = MALIGN(Ehdr), - [ELF_T_HALF] = MALIGN(Half), - [ELF_T_LWORD] = MALIGN(Lword), - [ELF_T_MOVE] = MALIGN(Move), - [ELF_T_MOVEP] = UNSUPPORTED(), - [ELF_T_NOTE] = MALIGN(Nhdr), - [ELF_T_OFF] = MALIGN(Off), - [ELF_T_PHDR] = MALIGN(Phdr), - [ELF_T_REL] = MALIGN(Rel), - [ELF_T_RELA] = MALIGN(Rela), - [ELF_T_SHDR] = MALIGN(Shdr), - [ELF_T_SWORD] = MALIGN(Sword), - [ELF_T_SXWORD] = MALIGN64(Sxword), - [ELF_T_SYM] = MALIGN(Sym), - [ELF_T_SYMINFO] = MALIGN(Syminfo), - [ELF_T_VDEF] = MALIGN(Verdef), - [ELF_T_VNEED] = MALIGN(Verneed), - [ELF_T_WORD] = MALIGN(Word), - [ELF_T_XWORD] = MALIGN64(Xword), - [ELF_T_GNUHASH] = MALIGN_WORD() -}; - -unsigned int -_libelf_malign(Elf_Type t, int elfclass) -{ - if (t >= ELF_T_NUM || (int) t < 0) - return (0); - - return (elfclass == ELFCLASS32 ? malign[t].a32 : - malign[t].a64); -} - -#define FALIGN(A32,A64) { .a32 = (A32), .a64 = (A64) } - -static struct align falign[ELF_T_NUM] = { - [ELF_T_ADDR] = FALIGN(4,8), - [ELF_T_BYTE] = FALIGN(1,1), - [ELF_T_CAP] = FALIGN(4,8), - [ELF_T_DYN] = FALIGN(4,8), - [ELF_T_EHDR] = FALIGN(4,8), - [ELF_T_HALF] = FALIGN(2,2), - [ELF_T_LWORD] = FALIGN(8,8), - [ELF_T_MOVE] = FALIGN(8,8), - [ELF_T_MOVEP] = UNSUPPORTED(), - [ELF_T_NOTE] = FALIGN(4,4), - [ELF_T_OFF] = FALIGN(4,8), - [ELF_T_PHDR] = FALIGN(4,8), - [ELF_T_REL] = FALIGN(4,8), - [ELF_T_RELA] = FALIGN(4,8), - [ELF_T_SHDR] = FALIGN(4,8), - [ELF_T_SWORD] = FALIGN(4,4), - [ELF_T_SXWORD] = FALIGN(0,8), - [ELF_T_SYM] = FALIGN(4,8), - [ELF_T_SYMINFO] = FALIGN(2,2), - [ELF_T_VDEF] = FALIGN(4,4), - [ELF_T_VNEED] = FALIGN(4,4), - [ELF_T_WORD] = FALIGN(4,4), - [ELF_T_XWORD] = FALIGN(0,8), - [ELF_T_GNUHASH] = FALIGN(4,8) -}; - -unsigned int -_libelf_falign(Elf_Type t, int elfclass) -{ - if (t >= ELF_T_NUM || (int) t < 0) - return (0); - - return (elfclass == ELFCLASS32 ? falign[t].a32 : - falign[t].a64); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_allocate.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_allocate.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_allocate.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_allocate.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,210 +0,0 @@ -/*- - * Copyright (c) 2006,2008,2010 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Internal APIs - */ - -#include -#include -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: libelf_allocate.c 3174 2015-03-27 17:13:41Z emaste $"); - -Elf * -_libelf_allocate_elf(void) -{ - Elf *e; - - if ((e = malloc(sizeof(*e))) == NULL) { - LIBELF_SET_ERROR(RESOURCE, errno); - return NULL; - } - - e->e_activations = 1; - e->e_hdr.e_rawhdr = NULL; - e->e_byteorder = ELFDATANONE; - e->e_class = ELFCLASSNONE; - e->e_cmd = ELF_C_NULL; - e->e_fd = -1; - e->e_flags = 0; - e->e_kind = ELF_K_NONE; - e->e_parent = NULL; - e->e_rawfile = NULL; - e->e_rawsize = 0; - e->e_version = LIBELF_PRIVATE(version); - - (void) memset(&e->e_u, 0, sizeof(e->e_u)); - - return (e); -} - -void -_libelf_init_elf(Elf *e, Elf_Kind kind) -{ - assert(e != NULL); - assert(e->e_kind == ELF_K_NONE); - - e->e_kind = kind; - - switch (kind) { - case ELF_K_ELF: - STAILQ_INIT(&e->e_u.e_elf.e_scn); - break; - default: - break; - } -} - -#define FREE(P) do { \ - if (P) \ - free(P); \ - } while (0) - - -Elf * -_libelf_release_elf(Elf *e) -{ - Elf_Arhdr *arh; - - switch (e->e_kind) { - case ELF_K_AR: - FREE(e->e_u.e_ar.e_symtab); - break; - - case ELF_K_ELF: - switch (e->e_class) { - case ELFCLASS32: - FREE(e->e_u.e_elf.e_ehdr.e_ehdr32); - FREE(e->e_u.e_elf.e_phdr.e_phdr32); - break; - case ELFCLASS64: - FREE(e->e_u.e_elf.e_ehdr.e_ehdr64); - FREE(e->e_u.e_elf.e_phdr.e_phdr64); - break; - } - - assert(STAILQ_EMPTY(&e->e_u.e_elf.e_scn)); - - if (e->e_flags & LIBELF_F_AR_HEADER) { - arh = e->e_hdr.e_arhdr; - FREE(arh->ar_name); - FREE(arh->ar_rawname); - free(arh); - } - - break; - - default: - break; - } - - free(e); - - return (NULL); -} - -struct _Libelf_Data * -_libelf_allocate_data(Elf_Scn *s) -{ - struct _Libelf_Data *d; - - if ((d = calloc((size_t) 1, sizeof(*d))) == NULL) { - LIBELF_SET_ERROR(RESOURCE, 0); - return (NULL); - } - - d->d_scn = s; - - return (d); -} - -struct _Libelf_Data * -_libelf_release_data(struct _Libelf_Data *d) -{ - - if (d->d_flags & LIBELF_F_DATA_MALLOCED) - free(d->d_data.d_buf); - - free(d); - - return (NULL); -} - -Elf_Scn * -_libelf_allocate_scn(Elf *e, size_t ndx) -{ - Elf_Scn *s; - - if ((s = calloc((size_t) 1, sizeof(Elf_Scn))) == NULL) { - LIBELF_SET_ERROR(RESOURCE, errno); - return (NULL); - } - - s->s_elf = e; - s->s_ndx = ndx; - - STAILQ_INIT(&s->s_data); - STAILQ_INIT(&s->s_rawdata); - - STAILQ_INSERT_TAIL(&e->e_u.e_elf.e_scn, s, s_next); - - return (s); -} - -Elf_Scn * -_libelf_release_scn(Elf_Scn *s) -{ - Elf *e; - struct _Libelf_Data *d, *td; - - assert(s != NULL); - - STAILQ_FOREACH_SAFE(d, &s->s_data, d_next, td) { - STAILQ_REMOVE(&s->s_data, d, _Libelf_Data, d_next); - d = _libelf_release_data(d); - } - - STAILQ_FOREACH_SAFE(d, &s->s_rawdata, d_next, td) { - assert((d->d_flags & LIBELF_F_DATA_MALLOCED) == 0); - STAILQ_REMOVE(&s->s_rawdata, d, _Libelf_Data, d_next); - d = _libelf_release_data(d); - } - - e = s->s_elf; - - assert(e != NULL); - - STAILQ_REMOVE(&e->e_u.e_elf.e_scn, s, _Elf_Scn, s_next); - - free(s); - - return (NULL); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_ar.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_ar.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_ar.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_ar.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,466 +0,0 @@ -/*- - * Copyright (c) 2006,2008,2010 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS `AS IS' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include - -#include "_libelf.h" -#include "_libelf_ar.h" - -ELFTC_VCSID("$Id: libelf_ar.c 3174 2015-03-27 17:13:41Z emaste $"); - -#define LIBELF_NALLOC_SIZE 16 - -/* - * `ar' archive handling. - * - * `ar' archives start with signature `ARMAG'. Each archive member is - * preceded by a header containing meta-data for the member. This - * header is described in (struct ar_hdr). The header always - * starts on an even address. File data is padded with "\n" - * characters to keep this invariant. - * - * Special considerations for `ar' archives: - * - * There are two variants of the `ar' archive format: traditional BSD - * and SVR4. These differ in the way long file names are treated, and - * in the layout of the archive symbol table. - * - * The `ar' header only has space for a 16 character file name. - * - * In the SVR4 format, file names are terminated with a '/', so this - * effectively leaves 15 characters for the actual file name. Longer - * file names stored in a separate 'string table' and referenced - * indirectly from the name field. The string table itself appears as - * an archive member with name "// ". An `indirect' file name in an - * `ar' header matches the pattern "/[0-9]*". The digits form a - * decimal number that corresponds to a byte offset into the string - * table where the actual file name of the object starts. Strings in - * the string table are padded to start on even addresses. - * - * In the BSD format, file names can be upto 16 characters. File - * names shorter than 16 characters are padded to 16 characters using - * (ASCII) space characters. File names with embedded spaces and file - * names longer than 16 characters are stored immediately after the - * archive header and the name field set to a special indirect name - * matching the pattern "#1/[0-9]+". The digits form a decimal number - * that corresponds to the actual length of the file name following - * the archive header. The content of the archive member immediately - * follows the file name, and the size field of the archive member - * holds the sum of the sizes of the member and of the appended file - * name. - * - * Archives may also have a symbol table (see ranlib(1)), mapping - * program symbols to object files inside the archive. - * - * In the SVR4 format, a symbol table uses a file name of "/ " in its - * archive header. The symbol table is structured as: - * - a 4-byte count of entries stored as a binary value, MSB first - * - 'n' 4-byte offsets, stored as binary values, MSB first - * - 'n' NUL-terminated strings, for ELF symbol names, stored unpadded. - * - * In the BSD format, the symbol table uses a file name of "__.SYMDEF". - * It is structured as two parts: - * - The first part is an array of "ranlib" structures preceded by - * the size of the array in bytes. Each "ranlib" structure - * describes one symbol. Each structure contains an offset into - * the string table for the symbol name, and a file offset into the - * archive for the member defining the symbol. - * - The second part is a string table containing NUL-terminated - * strings, preceded by the size of the string table in bytes. - * - * If the symbol table and string table are is present in an archive - * they must be the very first objects and in that order. - */ - - -/* - * Retrieve an archive header descriptor. - */ - -Elf_Arhdr * -_libelf_ar_gethdr(Elf *e) -{ - Elf *parent; - Elf_Arhdr *eh; - char *namelen; - size_t n, nlen; - struct ar_hdr *arh; - - if ((parent = e->e_parent) == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - assert((e->e_flags & LIBELF_F_AR_HEADER) == 0); - - arh = (struct ar_hdr *) (uintptr_t) e->e_hdr.e_rawhdr; - - assert((uintptr_t) arh >= (uintptr_t) parent->e_rawfile + SARMAG); - assert((uintptr_t) arh <= (uintptr_t) parent->e_rawfile + - parent->e_rawsize - sizeof(struct ar_hdr)); - - if ((eh = malloc(sizeof(Elf_Arhdr))) == NULL) { - LIBELF_SET_ERROR(RESOURCE, 0); - return (NULL); - } - - e->e_hdr.e_arhdr = eh; - e->e_flags |= LIBELF_F_AR_HEADER; - - eh->ar_name = eh->ar_rawname = NULL; - - if ((eh->ar_name = _libelf_ar_get_translated_name(arh, parent)) == - NULL) - goto error; - - if (_libelf_ar_get_number(arh->ar_uid, sizeof(arh->ar_uid), 10, - &n) == 0) - goto error; - eh->ar_uid = (uid_t) n; - - if (_libelf_ar_get_number(arh->ar_gid, sizeof(arh->ar_gid), 10, - &n) == 0) - goto error; - eh->ar_gid = (gid_t) n; - - if (_libelf_ar_get_number(arh->ar_mode, sizeof(arh->ar_mode), 8, - &n) == 0) - goto error; - eh->ar_mode = (mode_t) n; - - if (_libelf_ar_get_number(arh->ar_size, sizeof(arh->ar_size), 10, - &n) == 0) - goto error; - - /* - * Get the true size of the member if extended naming is being used. - */ - if (IS_EXTENDED_BSD_NAME(arh->ar_name)) { - namelen = arh->ar_name + - LIBELF_AR_BSD_EXTENDED_NAME_PREFIX_SIZE; - if (_libelf_ar_get_number(namelen, sizeof(arh->ar_name) - - LIBELF_AR_BSD_EXTENDED_NAME_PREFIX_SIZE, 10, &nlen) == 0) - goto error; - n -= nlen; - } - - eh->ar_size = n; - - if ((eh->ar_rawname = _libelf_ar_get_raw_name(arh)) == NULL) - goto error; - - eh->ar_flags = 0; - - return (eh); - - error: - if (eh) { - if (eh->ar_name) - free(eh->ar_name); - if (eh->ar_rawname) - free(eh->ar_rawname); - free(eh); - } - - e->e_flags &= ~LIBELF_F_AR_HEADER; - e->e_hdr.e_rawhdr = (unsigned char *) arh; - - return (NULL); -} - -Elf * -_libelf_ar_open_member(int fd, Elf_Cmd c, Elf *elf) -{ - Elf *e; - off_t next; - size_t nsz, sz; - struct ar_hdr *arh; - char *member, *namelen; - - assert(elf->e_kind == ELF_K_AR); - - next = elf->e_u.e_ar.e_next; - - /* - * `next' is only set to zero by elf_next() when the last - * member of an archive is processed. - */ - if (next == (off_t) 0) - return (NULL); - - assert((next & 1) == 0); - - arh = (struct ar_hdr *) (elf->e_rawfile + next); - - /* - * Retrieve the size of the member. - */ - if (_libelf_ar_get_number(arh->ar_size, sizeof(arh->ar_size), 10, - &sz) == 0) { - LIBELF_SET_ERROR(ARCHIVE, 0); - return (NULL); - } - - /* - * Adjust the size field for members in BSD archives using - * extended naming. - */ - if (IS_EXTENDED_BSD_NAME(arh->ar_name)) { - namelen = arh->ar_name + - LIBELF_AR_BSD_EXTENDED_NAME_PREFIX_SIZE; - if (_libelf_ar_get_number(namelen, sizeof(arh->ar_name) - - LIBELF_AR_BSD_EXTENDED_NAME_PREFIX_SIZE, 10, &nsz) == 0) { - LIBELF_SET_ERROR(ARCHIVE, 0); - return (NULL); - } - - member = (char *) (arh + 1) + nsz; - sz -= nsz; - } else - member = (char *) (arh + 1); - - - if ((e = elf_memory(member, sz)) == NULL) - return (NULL); - - e->e_fd = fd; - e->e_cmd = c; - e->e_hdr.e_rawhdr = (unsigned char *) arh; - - elf->e_u.e_ar.e_nchildren++; - e->e_parent = elf; - - return (e); -} - -/* - * A BSD-style ar(1) symbol table has the following layout: - * - * - A count of bytes used by the following array of 'ranlib' - * structures, stored as a 'long'. - * - An array of 'ranlib' structures. Each array element is - * two 'long's in size. - * - A count of bytes used for the following symbol table. - * - The symbol table itself. - */ - -/* - * A helper macro to read in a 'long' value from the archive. - * - * We use memcpy() since the source pointer may be misaligned with - * respect to the natural alignment for a C 'long'. - */ -#define GET_LONG(P, V)do { \ - memcpy(&(V), (P), sizeof(long)); \ - (P) += sizeof(long); \ - } while (0) - -Elf_Arsym * -_libelf_ar_process_bsd_symtab(Elf *e, size_t *count) -{ - Elf_Arsym *symtab, *sym; - unsigned int n, nentries; - unsigned char *end, *p, *p0, *s, *s0; - const size_t entrysize = 2 * sizeof(long); - long arraysize, fileoffset, stroffset, strtabsize; - - assert(e != NULL); - assert(count != NULL); - assert(e->e_u.e_ar.e_symtab == NULL); - - symtab = NULL; - - /* - * The BSD symbol table always contains the count fields even - * if there are no entries in it. - */ - if (e->e_u.e_ar.e_rawsymtabsz < 2 * sizeof(long)) - goto symtaberror; - - p = p0 = (unsigned char *) e->e_u.e_ar.e_rawsymtab; - end = p0 + e->e_u.e_ar.e_rawsymtabsz; - - /* - * Retrieve the size of the array of ranlib descriptors and - * check it for validity. - */ - GET_LONG(p, arraysize); - - if (arraysize < 0 || p0 + arraysize >= end || - ((size_t) arraysize % entrysize != 0)) - goto symtaberror; - - /* - * Check the value of the string table size. - */ - s = p + arraysize; - GET_LONG(s, strtabsize); - - s0 = s; /* Start of string table. */ - if (strtabsize < 0 || s0 + strtabsize > end) - goto symtaberror; - - nentries = (size_t) arraysize / entrysize; - - /* - * Allocate space for the returned Elf_Arsym array. - */ - if ((symtab = malloc(sizeof(Elf_Arsym) * (nentries + 1))) == NULL) { - LIBELF_SET_ERROR(RESOURCE, 0); - return (NULL); - } - - /* Read in symbol table entries. */ - for (n = 0, sym = symtab; n < nentries; n++, sym++) { - GET_LONG(p, stroffset); - GET_LONG(p, fileoffset); - - if (stroffset < 0 || fileoffset < 0 || - (size_t) fileoffset >= e->e_rawsize) - goto symtaberror; - - s = s0 + stroffset; - - if (s >= end) - goto symtaberror; - - sym->as_off = (off_t) fileoffset; - sym->as_hash = elf_hash((char *) s); - sym->as_name = (char *) s; - } - - /* Fill up the sentinel entry. */ - sym->as_name = NULL; - sym->as_hash = ~0UL; - sym->as_off = (off_t) 0; - - /* Remember the processed symbol table. */ - e->e_u.e_ar.e_symtab = symtab; - - *count = e->e_u.e_ar.e_symtabsz = nentries + 1; - - return (symtab); - -symtaberror: - if (symtab) - free(symtab); - LIBELF_SET_ERROR(ARCHIVE, 0); - return (NULL); -} - -/* - * An SVR4-style ar(1) symbol table has the following layout: - * - * - The first 4 bytes are a binary count of the number of entries in the - * symbol table, stored MSB-first. - * - Then there are 'n' 4-byte binary offsets, also stored MSB first. - * - Following this, there are 'n' null-terminated strings. - */ - -#define GET_WORD(P, V) do { \ - (V) = 0; \ - (V) = (P)[0]; (V) <<= 8; \ - (V) += (P)[1]; (V) <<= 8; \ - (V) += (P)[2]; (V) <<= 8; \ - (V) += (P)[3]; \ - } while (0) - -#define INTSZ 4 - - -Elf_Arsym * -_libelf_ar_process_svr4_symtab(Elf *e, size_t *count) -{ - uint32_t off; - size_t n, nentries; - Elf_Arsym *symtab, *sym; - unsigned char *p, *s, *end; - - assert(e != NULL); - assert(count != NULL); - assert(e->e_u.e_ar.e_symtab == NULL); - - symtab = NULL; - - if (e->e_u.e_ar.e_rawsymtabsz < INTSZ) - goto symtaberror; - - p = (unsigned char *) e->e_u.e_ar.e_rawsymtab; - end = p + e->e_u.e_ar.e_rawsymtabsz; - - GET_WORD(p, nentries); - p += INTSZ; - - if (nentries == 0 || p + nentries * INTSZ >= end) - goto symtaberror; - - /* Allocate space for a nentries + a sentinel. */ - if ((symtab = malloc(sizeof(Elf_Arsym) * (nentries+1))) == NULL) { - LIBELF_SET_ERROR(RESOURCE, 0); - return (NULL); - } - - s = p + (nentries * INTSZ); /* start of the string table. */ - - for (n = nentries, sym = symtab; n > 0; n--) { - if (s >= end) - goto symtaberror; - - GET_WORD(p, off); - if (off >= e->e_rawsize) - goto symtaberror; - - sym->as_off = (off_t) off; - sym->as_hash = elf_hash((char *) s); - sym->as_name = (char *) s; - - p += INTSZ; - sym++; - - for (; s < end && *s++ != '\0';) /* skip to next string */ - ; - } - - /* Fill up the sentinel entry. */ - sym->as_name = NULL; - sym->as_hash = ~0UL; - sym->as_off = (off_t) 0; - - *count = e->e_u.e_ar.e_symtabsz = nentries + 1; - e->e_u.e_ar.e_symtab = symtab; - - return (symtab); - -symtaberror: - if (symtab) - free(symtab); - LIBELF_SET_ERROR(ARCHIVE, 0); - return (NULL); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/_libelf_ar.h libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/_libelf_ar.h --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/_libelf_ar.h 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/_libelf_ar.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ -/*- - * Copyright (c) 2010 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS `AS IS' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: _libelf_ar.h 3013 2014-03-23 06:16:59Z jkoshy $ - */ - -#ifndef __LIBELF_AR_H_ -#define __LIBELF_AR_H_ - -/* - * Prototypes and declarations needed by libelf's ar(1) archive - * handling code. - */ - -#include - -#define LIBELF_AR_BSD_EXTENDED_NAME_PREFIX "#1/" -#define LIBELF_AR_BSD_SYMTAB_NAME "__.SYMDEF" -#define LIBELF_AR_BSD_EXTENDED_NAME_PREFIX_SIZE \ - (sizeof(LIBELF_AR_BSD_EXTENDED_NAME_PREFIX) - 1) - -#define IS_EXTENDED_BSD_NAME(NAME) \ - (strncmp((const char *) (NAME), \ - LIBELF_AR_BSD_EXTENDED_NAME_PREFIX, \ - LIBELF_AR_BSD_EXTENDED_NAME_PREFIX_SIZE) == 0) - - -unsigned char *_libelf_ar_get_string(const char *_buf, size_t _sz, - unsigned int _rawname, int _svr4names); -char *_libelf_ar_get_raw_name(const struct ar_hdr *_arh); -char *_libelf_ar_get_translated_name(const struct ar_hdr *_arh, Elf *_ar); -int _libelf_ar_get_number(const char *_buf, size_t _sz, - unsigned int _base, size_t *_ret); - -#endif /* __LIBELF_AR_H_ */ diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_ar_util.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_ar_util.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_ar_util.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_ar_util.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,360 +0,0 @@ -/*- - * Copyright (c) 2006,2009,2010 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS `AS IS' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#include "_libelf.h" -#include "_libelf_ar.h" - -ELFTC_VCSID("$Id: libelf_ar_util.c 3174 2015-03-27 17:13:41Z emaste $"); - -/* - * Convert a string bounded by `start' and `start+sz' (exclusive) to a - * number in the specified base. - */ -int -_libelf_ar_get_number(const char *src, size_t sz, unsigned int base, - size_t *ret) -{ - size_t r; - unsigned int c, v; - const unsigned char *e, *s; - - assert(base <= 10); - - s = (const unsigned char *) src; - e = s + sz; - - /* skip leading blanks */ - for (;s < e && (c = *s) == ' '; s++) - ; - - r = 0L; - for (;s < e; s++) { - if ((c = *s) == ' ') - break; - if (c < '0' || c > '9') - return (0); - v = c - '0'; - if (v >= base) /* Illegal digit. */ - break; - r *= base; - r += v; - } - - *ret = r; - - return (1); -} - -/* - * Return the translated name for an archive member. - */ -char * -_libelf_ar_get_translated_name(const struct ar_hdr *arh, Elf *ar) -{ - char *s; - unsigned char c; - size_t len, offset; - const unsigned char *buf, *p, *q, *r; - const size_t bufsize = sizeof(arh->ar_name); - - assert(arh != NULL); - assert(ar->e_kind == ELF_K_AR); - assert((const unsigned char *) arh >= ar->e_rawfile && - (const unsigned char *) arh < ar->e_rawfile + ar->e_rawsize); - - buf = (const unsigned char *) arh->ar_name; - - /* - * Check for extended naming. - * - * If the name matches the pattern "^/[0-9]+", it is an - * SVR4-style extended name. If the name matches the pattern - * "#1/[0-9]+", the entry uses BSD style extended naming. - */ - if (buf[0] == '/' && (c = buf[1]) >= '0' && c <= '9') { - /* - * The value in field ar_name is a decimal offset into - * the archive string table where the actual name - * resides. - */ - if (_libelf_ar_get_number((const char *) (buf + 1), - bufsize - 1, 10, &offset) == 0) { - LIBELF_SET_ERROR(ARCHIVE, 0); - return (NULL); - } - - if (offset > ar->e_u.e_ar.e_rawstrtabsz) { - LIBELF_SET_ERROR(ARCHIVE, 0); - return (NULL); - } - - p = q = ar->e_u.e_ar.e_rawstrtab + offset; - r = ar->e_u.e_ar.e_rawstrtab + ar->e_u.e_ar.e_rawstrtabsz; - - for (; p < r && *p != '/'; p++) - ; - len = (size_t) (p - q + 1); /* space for the trailing NUL */ - - if ((s = malloc(len)) == NULL) { - LIBELF_SET_ERROR(RESOURCE, 0); - return (NULL); - } - - (void) strncpy(s, (const char *) q, len - 1); - s[len - 1] = '\0'; - - return (s); - } else if (IS_EXTENDED_BSD_NAME(buf)) { - r = buf + LIBELF_AR_BSD_EXTENDED_NAME_PREFIX_SIZE; - - if (_libelf_ar_get_number((const char *) r, bufsize - - LIBELF_AR_BSD_EXTENDED_NAME_PREFIX_SIZE, 10, - &len) == 0) { - LIBELF_SET_ERROR(ARCHIVE, 0); - return (NULL); - } - - /* - * Allocate space for the file name plus a - * trailing NUL. - */ - if ((s = malloc(len + 1)) == NULL) { - LIBELF_SET_ERROR(RESOURCE, 0); - return (NULL); - } - - /* - * The file name follows the archive header. - */ - q = (const unsigned char *) (arh + 1); - - (void) strncpy(s, (const char *) q, len); - s[len] = '\0'; - - return (s); - } - - /* - * A 'normal' name. - * - * Skip back over trailing blanks from the end of the field. - * In the SVR4 format, a '/' is used as a terminator for - * non-special names. - */ - for (q = buf + bufsize - 1; q >= buf && *q == ' '; --q) - ; - - if (q >= buf) { - if (*q == '/') { - /* - * SVR4 style names: ignore the trailing - * character '/', but only if the name is not - * one of the special names "/" and "//". - */ - if (q > buf + 1 || - (q == (buf + 1) && *buf != '/')) - q--; - } - - len = (size_t) (q - buf + 2); /* Space for a trailing NUL. */ - } else { - /* The buffer only had blanks. */ - buf = (const unsigned char *) ""; - len = 1; - } - - if ((s = malloc(len)) == NULL) { - LIBELF_SET_ERROR(RESOURCE, 0); - return (NULL); - } - - (void) strncpy(s, (const char *) buf, len - 1); - s[len - 1] = '\0'; - - return (s); -} - -/* - * Return the raw name for an archive member, inclusive of any - * formatting characters. - */ -char * -_libelf_ar_get_raw_name(const struct ar_hdr *arh) -{ - char *rawname; - const size_t namesz = sizeof(arh->ar_name); - - if ((rawname = malloc(namesz + 1)) == NULL) { - LIBELF_SET_ERROR(RESOURCE, 0); - return (NULL); - } - - (void) strncpy(rawname, arh->ar_name, namesz); - rawname[namesz] = '\0'; - return (rawname); -} - -/* - * Open an 'ar' archive. - */ -Elf * -_libelf_ar_open(Elf *e, int reporterror) -{ - size_t sz; - int scanahead; - struct ar_hdr arh; - unsigned char *s, *end; - - _libelf_init_elf(e, ELF_K_AR); - - e->e_u.e_ar.e_nchildren = 0; - e->e_u.e_ar.e_next = (off_t) -1; - - /* - * Look for special members. - */ - - s = e->e_rawfile + SARMAG; - end = e->e_rawfile + e->e_rawsize; - - assert(e->e_rawsize > 0); - - /* - * We use heuristics to determine the flavor of the archive we - * are examining. - * - * SVR4 flavor archives use the name "/ " and "// " for - * special members. - * - * In BSD flavor archives the symbol table, if present, is the - * first archive with name "__.SYMDEF". - */ - -#define READ_AR_HEADER(S, ARH, SZ, END) \ - do { \ - if ((S) + sizeof((ARH)) > (END)) \ - goto error; \ - (void) memcpy(&(ARH), (S), sizeof((ARH))); \ - if ((ARH).ar_fmag[0] != '`' || (ARH).ar_fmag[1] != '\n') \ - goto error; \ - if (_libelf_ar_get_number((char *) (ARH).ar_size, \ - sizeof((ARH).ar_size), 10, &(SZ)) == 0) \ - goto error; \ - } while (0) - - READ_AR_HEADER(s, arh, sz, end); - - /* - * Handle special archive members for the SVR4 format. - */ - if (arh.ar_name[0] == '/') { - if (sz == 0) - goto error; - - e->e_flags |= LIBELF_F_AR_VARIANT_SVR4; - - scanahead = 0; - - /* - * The symbol table (file name "/ ") always comes before the - * string table (file name "// "). - */ - if (arh.ar_name[1] == ' ') { - /* "/ " => symbol table. */ - scanahead = 1; /* The string table to follow. */ - - s += sizeof(arh); - e->e_u.e_ar.e_rawsymtab = s; - e->e_u.e_ar.e_rawsymtabsz = sz; - - sz = LIBELF_ADJUST_AR_SIZE(sz); - s += sz; - - } else if (arh.ar_name[1] == '/' && arh.ar_name[2] == ' ') { - /* "// " => string table for long file names. */ - s += sizeof(arh); - e->e_u.e_ar.e_rawstrtab = s; - e->e_u.e_ar.e_rawstrtabsz = sz; - - sz = LIBELF_ADJUST_AR_SIZE(sz); - s += sz; - } - - /* - * If the string table hasn't been seen yet, look for - * it in the next member. - */ - if (scanahead) { - READ_AR_HEADER(s, arh, sz, end); - - /* "// " => string table for long file names. */ - if (arh.ar_name[0] == '/' && arh.ar_name[1] == '/' && - arh.ar_name[2] == ' ') { - - s += sizeof(arh); - - e->e_u.e_ar.e_rawstrtab = s; - e->e_u.e_ar.e_rawstrtabsz = sz; - - sz = LIBELF_ADJUST_AR_SIZE(sz); - s += sz; - } - } - } else if (strncmp(arh.ar_name, LIBELF_AR_BSD_SYMTAB_NAME, - sizeof(LIBELF_AR_BSD_SYMTAB_NAME) - 1) == 0) { - /* - * BSD style archive symbol table. - */ - s += sizeof(arh); - e->e_u.e_ar.e_rawsymtab = s; - e->e_u.e_ar.e_rawsymtabsz = sz; - - sz = LIBELF_ADJUST_AR_SIZE(sz); - s += sz; - } - - /* - * Update the 'next' offset, so that a subsequent elf_begin() - * works as expected. - */ - e->e_u.e_ar.e_next = (off_t) (s - e->e_rawfile); - - return (e); - -error: - if (!reporterror) { - e->e_kind = ELF_K_NONE; - return (e); - } - - LIBELF_SET_ERROR(ARCHIVE, 0); - return (NULL); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_checksum.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_checksum.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_checksum.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_checksum.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: libelf_checksum.c 3174 2015-03-27 17:13:41Z emaste $"); - -static unsigned long -_libelf_sum(unsigned long c, const unsigned char *s, size_t size) -{ - if (s == NULL || size == 0) - return (c); - - while (size--) - c += *s++; - - return (c); -} - -long -_libelf_checksum(Elf *e, int elfclass) -{ - size_t shn; - Elf_Scn *scn; - Elf_Data *d; - unsigned long checksum; - GElf_Ehdr eh; - GElf_Shdr shdr; - - if (e == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (0L); - } - - if (e->e_class != elfclass) { - LIBELF_SET_ERROR(CLASS, 0); - return (0L); - } - - if (gelf_getehdr(e, &eh) == NULL) - return (0); - - /* - * Iterate over all sections in the ELF file, computing the - * checksum along the way. - * - * The first section is always SHN_UNDEF and can be skipped. - * Non-allocatable sections are skipped, as are sections that - * could be affected by utilities such as strip(1). - */ - - checksum = 0; - for (shn = 1; shn < e->e_u.e_elf.e_nscn; shn++) { - if ((scn = elf_getscn(e, shn)) == NULL) - return (0); - if (gelf_getshdr(scn, &shdr) == NULL) - return (0); - if ((shdr.sh_flags & SHF_ALLOC) == 0 || - shdr.sh_type == SHT_DYNAMIC || - shdr.sh_type == SHT_DYNSYM) - continue; - - d = NULL; - while ((d = elf_rawdata(scn, d)) != NULL) - checksum = _libelf_sum(checksum, - (unsigned char *) d->d_buf, (size_t) d->d_size); - } - - /* - * Return a 16-bit checksum compatible with Solaris. - */ - return (long) (((checksum >> 16) & 0xFFFFUL) + (checksum & 0xFFFFUL)); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/_libelf_config.h libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/_libelf_config.h --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/_libelf_config.h 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/_libelf_config.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,183 +0,0 @@ -/*- - * Copyright (c) 2008-2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: _libelf_config.h 3168 2015-02-24 19:17:47Z emaste $ - */ - -#if defined(__APPLE__) || defined(__DragonFly__) - -#if defined(__amd64__) -#define LIBELF_ARCH EM_X86_64 -#define LIBELF_BYTEORDER ELFDATA2LSB -#define LIBELF_CLASS ELFCLASS64 -#elif defined(__i386__) -#define LIBELF_ARCH EM_386 -#define LIBELF_BYTEORDER ELFDATA2LSB -#define LIBELF_CLASS ELFCLASS32 -#endif - -#endif /* __DragonFly__ */ - -#ifdef __FreeBSD__ - -/* - * Define LIBELF_{ARCH,BYTEORDER,CLASS} based on the machine architecture. - * See also: . - */ - -#if defined(__amd64__) - -#define LIBELF_ARCH EM_X86_64 -#define LIBELF_BYTEORDER ELFDATA2LSB -#define LIBELF_CLASS ELFCLASS64 - -#elif defined(__aarch64__) - -#define LIBELF_ARCH EM_AARCH64 -#define LIBELF_BYTEORDER ELFDATA2LSB -#define LIBELF_CLASS ELFCLASS64 - -#elif defined(__arm__) - -#define LIBELF_ARCH EM_ARM -#if defined(__ARMEB__) /* Big-endian ARM. */ -#define LIBELF_BYTEORDER ELFDATA2MSB -#else -#define LIBELF_BYTEORDER ELFDATA2LSB -#endif -#define LIBELF_CLASS ELFCLASS32 - -#elif defined(__i386__) - -#define LIBELF_ARCH EM_386 -#define LIBELF_BYTEORDER ELFDATA2LSB -#define LIBELF_CLASS ELFCLASS32 - -#elif defined(__ia64__) - -#define LIBELF_ARCH EM_IA_64 -#define LIBELF_BYTEORDER ELFDATA2LSB -#define LIBELF_CLASS ELFCLASS64 - -#elif defined(__mips__) - -#define LIBELF_ARCH EM_MIPS -#if defined(__MIPSEB__) -#define LIBELF_BYTEORDER ELFDATA2MSB -#else -#define LIBELF_BYTEORDER ELFDATA2LSB -#endif -#define LIBELF_CLASS ELFCLASS32 - -#elif defined(__powerpc__) - -#define LIBELF_ARCH EM_PPC -#define LIBELF_BYTEORDER ELFDATA2MSB -#define LIBELF_CLASS ELFCLASS32 - -#elif defined(__sparc__) - -#define LIBELF_ARCH EM_SPARCV9 -#define LIBELF_BYTEORDER ELFDATA2MSB -#define LIBELF_CLASS ELFCLASS64 - -#else -#error Unknown FreeBSD architecture. -#endif -#endif /* __FreeBSD__ */ - -/* - * Definitions for Minix3. - */ -#ifdef __minix - -#define LIBELF_ARCH EM_386 -#define LIBELF_BYTEORDER ELFDATA2LSB -#define LIBELF_CLASS ELFCLASS32 - -#endif /* __minix */ - -#ifdef __NetBSD__ - -#include - -#if !defined(ARCH_ELFSIZE) -#error ARCH_ELFSIZE is not defined. -#endif - -#if ARCH_ELFSIZE == 32 -#define LIBELF_ARCH ELF32_MACHDEP_ID -#define LIBELF_BYTEORDER ELF32_MACHDEP_ENDIANNESS -#define LIBELF_CLASS ELFCLASS32 -#define Elf_Note Elf32_Nhdr -#else -#define LIBELF_ARCH ELF64_MACHDEP_ID -#define LIBELF_BYTEORDER ELF64_MACHDEP_ENDIANNESS -#define LIBELF_CLASS ELFCLASS64 -#define Elf_Note Elf64_Nhdr -#endif - -#endif /* __NetBSD__ */ - -#if defined(__OpenBSD__) - -#include - -#define LIBELF_ARCH ELF_TARG_MACH -#define LIBELF_BYTEORDER ELF_TARG_DATA -#define LIBELF_CLASS ELF_TARG_CLASS - -#endif - -/* - * GNU & Linux compatibility. - * - * `__linux__' is defined in an environment runs the Linux kernel and glibc. - * `__GNU__' is defined in an environment runs a GNU kernel (Hurd) and glibc. - * `__GLIBC__' is defined for an environment that runs glibc over a non-GNU - * kernel such as GNU/kFreeBSD. - */ - -#if defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) - -#if defined(__linux__) - -#include "native-elf-format.h" - -#define LIBELF_CLASS ELFTC_CLASS -#define LIBELF_ARCH ELFTC_ARCH -#define LIBELF_BYTEORDER ELFTC_BYTEORDER - -#endif /* defined(__linux__) */ - -#if LIBELF_CLASS == ELFCLASS32 -#define Elf_Note Elf32_Nhdr -#elif LIBELF_CLASS == ELFCLASS64 -#define Elf_Note Elf64_Nhdr -#else -#error LIBELF_CLASS needs to be one of ELFCLASS32 or ELFCLASS64 -#endif - -#endif /* defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) */ diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_convert.m4 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_convert.m4 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_convert.m4 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_convert.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,1087 +0,0 @@ -/*- - * Copyright (c) 2006-2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: libelf_convert.m4 3174 2015-03-27 17:13:41Z emaste $"); - -/* WARNING: GENERATED FROM __file__. */ - -divert(-1) - -# Generate conversion routines for converting between in-memory and -# file representations of Elf data structures. -# -# These conversions use the type information defined in `elf_types.m4'. - -include(SRCDIR`/elf_types.m4') - -# For the purposes of generating conversion code, ELF types may be -# classified according to the following characteristics: -# -# 1. Whether the ELF type can be directly mapped to an integral C -# language type. For example, the ELF_T_WORD type maps directly to -# a 'uint32_t', but ELF_T_GNUHASH lacks a matching C type. -# -# 2. Whether the type has word size dependent variants. For example, -# ELT_T_EHDR is represented using C types Elf32_Ehdr and El64_Ehdr, -# and the ELF_T_ADDR and ELF_T_OFF types have integral C types that -# can be 32- or 64- bit wide. -# -# 3. Whether the ELF types has a fixed representation or not. For -# example, the ELF_T_SYM type has a fixed size file representation, -# some types like ELF_T_NOTE and ELF_T_GNUHASH use a variable size -# representation. -# -# We use m4 macros to generate conversion code for ELF types that have -# a fixed size representation. Conversion functions for the remaining -# types are coded by hand. -# -#* Handling File and Memory Representations -# -# `In-memory' representations of an Elf data structure use natural -# alignments and native byte ordering. This allows pointer arithmetic -# and casting to work as expected. On the other hand, the `file' -# representation of an ELF data structure could possibly be packed -# tighter than its `in-memory' representation, and could be of a -# differing byte order. Reading ELF objects that are members of `ar' -# archives present an additional complication: `ar' pads file data to -# even addresses, so file data structures in an archive member -# residing inside an `ar' archive could be at misaligned memory -# addresses when brought into memory. -# -# In summary, casting the `char *' pointers that point to memory -# representations (i.e., source pointers for the *_tof() functions and -# the destination pointers for the *_tom() functions), is safe, as -# these pointers should be correctly aligned for the memory type -# already. However, pointers to file representations have to be -# treated as being potentially unaligned and no casting can be done. - -# NOCVT(TYPE) -- Do not generate the cvt[] structure entry for TYPE -define(`NOCVT',`define(`NOCVT_'$1,1)') - -# NOFUNC(TYPE) -- Do not generate a conversion function for TYPE -define(`NOFUNC',`define(`NOFUNC_'$1,1)') - -# IGNORE(TYPE) -- Completely ignore the type. -define(`IGNORE',`NOCVT($1)NOFUNC($1)') - -# Mark ELF types that should not be processed by the M4 macros below. - -# Types for which we use functions with non-standard names. -IGNORE(`BYTE') # Uses a wrapper around memcpy(). -IGNORE(`NOTE') # Not a fixed size type. - -# Types for which we supply hand-coded functions. -NOFUNC(`GNUHASH') # A type with complex internal structure. -NOFUNC(`VDEF') # See MAKE_VERSION_CONVERTERS below. -NOFUNC(`VNEED') # .. - -# Unimplemented types. -IGNORE(`MOVEP') - -# ELF types that don't exist in a 32-bit world. -NOFUNC(`XWORD32') -NOFUNC(`SXWORD32') - -# `Primitive' ELF types are those that are an alias for an integral -# type. As they have no internal structure, they can be copied using -# a `memcpy()', and byteswapped in straightforward way. -# -# Mark all ELF types that directly map to integral C types. -define(`PRIM_ADDR', 1) -define(`PRIM_BYTE', 1) -define(`PRIM_HALF', 1) -define(`PRIM_LWORD', 1) -define(`PRIM_OFF', 1) -define(`PRIM_SWORD', 1) -define(`PRIM_SXWORD', 1) -define(`PRIM_WORD', 1) -define(`PRIM_XWORD', 1) - -# Note the primitive types that are size-dependent. -define(`SIZEDEP_ADDR', 1) -define(`SIZEDEP_OFF', 1) - -# Generate conversion functions for primitive types. -# -# Macro use: MAKEPRIMFUNCS(ELFTYPE,CTYPE,TYPESIZE,SYMSIZE) -# `$1': Name of the ELF type. -# `$2': C structure name suffix. -# `$3': ELF class specifier for types, one of [`32', `64']. -# `$4': Additional ELF class specifier, one of [`', `32', `64']. -# -# Generates a pair of conversion functions. -define(`MAKEPRIMFUNCS',` -static int -_libelf_cvt_$1$4_tof(unsigned char *dst, size_t dsz, unsigned char *src, - size_t count, int byteswap) -{ - Elf$3_$2 t, *s = (Elf$3_$2 *) (uintptr_t) src; - size_t c; - - (void) dsz; - - if (!byteswap) { - (void) memcpy(dst, src, count * sizeof(*s)); - return (1); - } - - for (c = 0; c < count; c++) { - t = *s++; - SWAP_$1$4(t); - WRITE_$1$4(dst,t); - } - - return (1); -} - -static int -_libelf_cvt_$1$4_tom(unsigned char *dst, size_t dsz, unsigned char *src, - size_t count, int byteswap) -{ - Elf$3_$2 t, *d = (Elf$3_$2 *) (uintptr_t) dst; - size_t c; - - if (dsz < count * sizeof(Elf$3_$2)) - return (0); - - if (!byteswap) { - (void) memcpy(dst, src, count * sizeof(*d)); - return (1); - } - - for (c = 0; c < count; c++) { - READ_$1$4(src,t); - SWAP_$1$4(t); - *d++ = t; - } - - return (1); -} -') - -# -# Handling composite ELF types -# - -# SWAP_FIELD(FIELDNAME,ELFTYPE) -- Generate code to swap one field. -define(`SWAP_FIELD', - `ifdef(`SIZEDEP_'$2, - `SWAP_$2'SZ()`(t.$1); - ', - `SWAP_$2(t.$1); - ')') - -# SWAP_MEMBERS(STRUCT) -- Iterate over a structure definition. -define(`SWAP_MEMBERS', - `ifelse($#,1,`/**/', - `SWAP_FIELD($1)SWAP_MEMBERS(shift($@))')') - -# SWAP_STRUCT(CTYPE,SIZE) -- Generate code to swap an ELF structure. -define(`SWAP_STRUCT', - `pushdef(`SZ',$2)/* Swap an Elf$2_$1 */ - SWAP_MEMBERS(Elf$2_$1_DEF)popdef(`SZ')') - -# WRITE_FIELD(ELFTYPE,FIELDNAME) -- Generate code to write one field. -define(`WRITE_FIELD', - `ifdef(`SIZEDEP_'$2, - `WRITE_$2'SZ()`(dst,t.$1); - ', - `WRITE_$2(dst,t.$1); - ')') - -# WRITE_MEMBERS(ELFTYPELIST) -- Iterate over a structure definition. -define(`WRITE_MEMBERS', - `ifelse($#,1,`/**/', - `WRITE_FIELD($1)WRITE_MEMBERS(shift($@))')') - -# WRITE_STRUCT(CTYPE,SIZE) -- Generate code to write out an ELF structure. -define(`WRITE_STRUCT', - `pushdef(`SZ',$2)/* Write an Elf$2_$1 */ - WRITE_MEMBERS(Elf$2_$1_DEF)popdef(`SZ')') - -# READ_FIELD(ELFTYPE,CTYPE) -- Generate code to read one field. -define(`READ_FIELD', - `ifdef(`SIZEDEP_'$2, - `READ_$2'SZ()`(s,t.$1); - ', - `READ_$2(s,t.$1); - ')') - -# READ_MEMBERS(ELFTYPELIST) -- Iterate over a structure definition. -define(`READ_MEMBERS', - `ifelse($#,1,`/**/', - `READ_FIELD($1)READ_MEMBERS(shift($@))')') - -# READ_STRUCT(CTYPE,SIZE) -- Generate code to read an ELF structure. -define(`READ_STRUCT', - `pushdef(`SZ',$2)/* Read an Elf$2_$1 */ - READ_MEMBERS(Elf$2_$1_DEF)popdef(`SZ')') - - -# MAKECOMPFUNCS -- Generate converters for composite ELF structures. -# -# When converting data to file representation, the source pointer will -# be naturally aligned for a data structure's in-memory -# representation. When converting data to memory, the destination -# pointer will be similarly aligned. -# -# For in-place conversions, when converting to file representations, -# the source buffer is large enough to hold `file' data. When -# converting from file to memory, we need to be careful to work -# `backwards', to avoid overwriting unconverted data. -# -# Macro use: -# `$1': Name of the ELF type. -# `$2': C structure name suffix. -# `$3': ELF class specifier, one of [`', `32', `64'] -define(`MAKECOMPFUNCS', `ifdef(`NOFUNC_'$1$3,`',` -static int -_libelf_cvt_$1$3_tof(unsigned char *dst, size_t dsz, unsigned char *src, - size_t count, int byteswap) -{ - Elf$3_$2 t, *s; - size_t c; - - (void) dsz; - - s = (Elf$3_$2 *) (uintptr_t) src; - for (c = 0; c < count; c++) { - t = *s++; - if (byteswap) { - SWAP_STRUCT($2,$3) - } - WRITE_STRUCT($2,$3) - } - - return (1); -} - -static int -_libelf_cvt_$1$3_tom(unsigned char *dst, size_t dsz, unsigned char *src, - size_t count, int byteswap) -{ - Elf$3_$2 t, *d; - unsigned char *s,*s0; - size_t fsz; - - fsz = elf$3_fsize(ELF_T_$1, (size_t) 1, EV_CURRENT); - d = ((Elf$3_$2 *) (uintptr_t) dst) + (count - 1); - s0 = src + (count - 1) * fsz; - - if (dsz < count * sizeof(Elf$3_$2)) - return (0); - - while (count--) { - s = s0; - READ_STRUCT($2,$3) - if (byteswap) { - SWAP_STRUCT($2,$3) - } - *d-- = t; s0 -= fsz; - } - - return (1); -} -')') - -# MAKE_TYPE_CONVERTER(ELFTYPE,CTYPE) -# -# Make type convertor functions from the type definition -# of the ELF type: -# - Skip convertors marked as `NOFUNC'. -# - Invoke `MAKEPRIMFUNCS' or `MAKECOMPFUNCS' as appropriate. -define(`MAKE_TYPE_CONVERTER', - `ifdef(`NOFUNC_'$1,`', - `ifdef(`PRIM_'$1, - `ifdef(`SIZEDEP_'$1, - `MAKEPRIMFUNCS($1,$2,32,32)dnl - MAKEPRIMFUNCS($1,$2,64,64)', - `MAKEPRIMFUNCS($1,$2,64)')', - `MAKECOMPFUNCS($1,$2,32)dnl - MAKECOMPFUNCS($1,$2,64)')')') - -# MAKE_TYPE_CONVERTERS(ELFTYPELIST) -- Generate conversion functions. -define(`MAKE_TYPE_CONVERTERS', - `ifelse($#,1,`', - `MAKE_TYPE_CONVERTER($1)MAKE_TYPE_CONVERTERS(shift($@))')') - - -# -# Macros to generate entries for the table of convertors. -# - -# CONV(ELFTYPE,SIZE,DIRECTION) -# -# Generate the name of a convertor function. -define(`CONV', - `ifdef(`NOFUNC_'$1$2, - `.$3$2 = NULL', - `ifdef(`PRIM_'$1, - `ifdef(`SIZEDEP_'$1, - `.$3$2 = _libelf_cvt_$1$2_$3', - `.$3$2 = _libelf_cvt_$1_$3')', - `.$3$2 = _libelf_cvt_$1$2_$3')')') - -# CONVERTER_NAME(ELFTYPE) -# -# Generate the contents of one `struct cvt' instance. -define(`CONVERTER_NAME', - `ifdef(`NOCVT_'$1,`', - ` [ELF_T_$1] = { - CONV($1,32,tof), - CONV($1,32,tom), - CONV($1,64,tof), - CONV($1,64,tom) - }, - -')') - -# CONVERTER_NAMES(ELFTYPELIST) -# -# Generate the `struct cvt[]' array. -define(`CONVERTER_NAMES', - `ifelse($#,1,`', - `CONVERTER_NAME($1)CONVERTER_NAMES(shift($@))')') - -# -# Handling ELF version sections. -# - -# _FSZ(FIELD,BASETYPE) - return the file size for a field. -define(`_FSZ', - `ifelse($2,`HALF',2, - $2,`WORD',4)') - -# FSZ(STRUCT) - determine the file size of a structure. -define(`FSZ', - `ifelse($#,1,0, - `eval(_FSZ($1) + FSZ(shift($@)))')') - -# MAKE_VERSION_CONVERTERS(TYPE,BASE,AUX,PFX) -- Generate conversion -# functions for versioning structures. -define(`MAKE_VERSION_CONVERTERS', - `MAKE_VERSION_CONVERTER($1,$2,$3,$4,32) - MAKE_VERSION_CONVERTER($1,$2,$3,$4,64)') - -# MAKE_VERSION_CONVERTOR(TYPE,CBASE,CAUX,PFX,SIZE) -- Generate a -# conversion function. -define(`MAKE_VERSION_CONVERTER',` -static int -_libelf_cvt_$1$5_tof(unsigned char *dst, size_t dsz, unsigned char *src, - size_t count, int byteswap) -{ - Elf$5_$2 t; - Elf$5_$3 a; - const size_t verfsz = FSZ(Elf$5_$2_DEF); - const size_t auxfsz = FSZ(Elf$5_$3_DEF); - const size_t vermsz = sizeof(Elf$5_$2); - const size_t auxmsz = sizeof(Elf$5_$3); - unsigned char * const dstend = dst + dsz; - unsigned char * const srcend = src + count; - unsigned char *dtmp, *dstaux, *srcaux; - Elf$5_Word aux, anext, cnt, vnext; - - for (dtmp = dst, vnext = ~0U; - vnext != 0 && dtmp + verfsz <= dstend && src + vermsz <= srcend; - dtmp += vnext, src += vnext) { - - /* Read in an Elf$5_$2 structure. */ - t = *((Elf$5_$2 *) (uintptr_t) src); - - aux = t.$4_aux; - cnt = t.$4_cnt; - vnext = t.$4_next; - - if (byteswap) { - SWAP_STRUCT($2, $5) - } - - dst = dtmp; - WRITE_STRUCT($2, $5) - - if (aux < verfsz) - return (0); - - /* Process AUX entries. */ - for (anext = ~0U, dstaux = dtmp + aux, srcaux = src + aux; - cnt != 0 && anext != 0 && dstaux + auxfsz <= dstend && - srcaux + auxmsz <= srcend; - dstaux += anext, srcaux += anext, cnt--) { - - /* Read in an Elf$5_$3 structure. */ - a = *((Elf$5_$3 *) (uintptr_t) srcaux); - anext = a.$4a_next; - - if (byteswap) { - pushdef(`t',`a')SWAP_STRUCT($3, $5)popdef(`t') - } - - dst = dstaux; - pushdef(`t',`a')WRITE_STRUCT($3, $5)popdef(`t') - } - - if (anext || cnt) - return (0); - } - - if (vnext) - return (0); - - return (1); -} - -static int -_libelf_cvt_$1$5_tom(unsigned char *dst, size_t dsz, unsigned char *src, - size_t count, int byteswap) -{ - Elf$5_$2 t, *dp; - Elf$5_$3 a, *ap; - const size_t verfsz = FSZ(Elf$5_$2_DEF); - const size_t auxfsz = FSZ(Elf$5_$3_DEF); - const size_t vermsz = sizeof(Elf$5_$2); - const size_t auxmsz = sizeof(Elf$5_$3); - unsigned char * const dstend = dst + dsz; - unsigned char * const srcend = src + count; - unsigned char *dstaux, *s, *srcaux, *stmp; - Elf$5_Word aux, anext, cnt, vnext; - - for (stmp = src, vnext = ~0U; - vnext != 0 && stmp + verfsz <= srcend && dst + vermsz <= dstend; - stmp += vnext, dst += vnext) { - - /* Read in a $1 structure. */ - s = stmp; - READ_STRUCT($2, $5) - if (byteswap) { - SWAP_STRUCT($2, $5) - } - - dp = (Elf$5_$2 *) (uintptr_t) dst; - *dp = t; - - aux = t.$4_aux; - cnt = t.$4_cnt; - vnext = t.$4_next; - - if (aux < vermsz) - return (0); - - /* Process AUX entries. */ - for (anext = ~0U, dstaux = dst + aux, srcaux = stmp + aux; - cnt != 0 && anext != 0 && dstaux + auxmsz <= dstend && - srcaux + auxfsz <= srcend; - dstaux += anext, srcaux += anext, cnt--) { - - s = srcaux; - pushdef(`t',`a')READ_STRUCT($3, $5)popdef(`t') - - if (byteswap) { - pushdef(`t',`a')SWAP_STRUCT($3, $5)popdef(`t') - } - - anext = a.$4a_next; - - ap = ((Elf$5_$3 *) (uintptr_t) dstaux); - *ap = a; - } - - if (anext || cnt) - return (0); - } - - if (vnext) - return (0); - - return (1); -}') - -divert(0) - -/* - * C macros to byte swap integral quantities. - */ - -#define SWAP_BYTE(X) do { (void) (X); } while (0) -#define SWAP_IDENT(X) do { (void) (X); } while (0) -#define SWAP_HALF(X) do { \ - uint16_t _x = (uint16_t) (X); \ - uint32_t _t = _x & 0xFFU; \ - _t <<= 8U; _x >>= 8U; _t |= _x & 0xFFU; \ - (X) = (uint16_t) _t; \ - } while (0) -#define _SWAP_WORD(X, T) do { \ - uint32_t _x = (uint32_t) (X); \ - uint32_t _t = _x & 0xFF; \ - _t <<= 8; _x >>= 8; _t |= _x & 0xFF; \ - _t <<= 8; _x >>= 8; _t |= _x & 0xFF; \ - _t <<= 8; _x >>= 8; _t |= _x & 0xFF; \ - (X) = (T) _t; \ - } while (0) -#define SWAP_ADDR32(X) _SWAP_WORD(X, Elf32_Addr) -#define SWAP_OFF32(X) _SWAP_WORD(X, Elf32_Off) -#define SWAP_SWORD(X) _SWAP_WORD(X, Elf32_Sword) -#define SWAP_WORD(X) _SWAP_WORD(X, Elf32_Word) -#define _SWAP_WORD64(X, T) do { \ - uint64_t _x = (uint64_t) (X); \ - uint64_t _t = _x & 0xFF; \ - _t <<= 8; _x >>= 8; _t |= _x & 0xFF; \ - _t <<= 8; _x >>= 8; _t |= _x & 0xFF; \ - _t <<= 8; _x >>= 8; _t |= _x & 0xFF; \ - _t <<= 8; _x >>= 8; _t |= _x & 0xFF; \ - _t <<= 8; _x >>= 8; _t |= _x & 0xFF; \ - _t <<= 8; _x >>= 8; _t |= _x & 0xFF; \ - _t <<= 8; _x >>= 8; _t |= _x & 0xFF; \ - (X) = (T) _t; \ - } while (0) -#define SWAP_ADDR64(X) _SWAP_WORD64(X, Elf64_Addr) -#define SWAP_LWORD(X) _SWAP_WORD64(X, Elf64_Lword) -#define SWAP_OFF64(X) _SWAP_WORD64(X, Elf64_Off) -#define SWAP_SXWORD(X) _SWAP_WORD64(X, Elf64_Sxword) -#define SWAP_XWORD(X) _SWAP_WORD64(X, Elf64_Xword) - -/* - * C macros to write out various integral values. - * - * Note: - * - The destination pointer could be unaligned. - * - Values are written out in native byte order. - * - The destination pointer is incremented after the write. - */ -#define WRITE_BYTE(P,X) do { \ - unsigned char *const _p = (unsigned char *) (P); \ - _p[0] = (unsigned char) (X); \ - (P) = _p + 1; \ - } while (0) -#define WRITE_HALF(P,X) do { \ - uint16_t _t = (X); \ - unsigned char *const _p = (unsigned char *) (P); \ - const unsigned char *const _q = (unsigned char *) &_t; \ - _p[0] = _q[0]; \ - _p[1] = _q[1]; \ - (P) = _p + 2; \ - } while (0) -#define WRITE_WORD(P,X) do { \ - uint32_t _t = (uint32_t) (X); \ - unsigned char *const _p = (unsigned char *) (P); \ - const unsigned char *const _q = (unsigned char *) &_t; \ - _p[0] = _q[0]; \ - _p[1] = _q[1]; \ - _p[2] = _q[2]; \ - _p[3] = _q[3]; \ - (P) = _p + 4; \ - } while (0) -#define WRITE_ADDR32(P,X) WRITE_WORD(P,X) -#define WRITE_OFF32(P,X) WRITE_WORD(P,X) -#define WRITE_SWORD(P,X) WRITE_WORD(P,X) -#define WRITE_WORD64(P,X) do { \ - uint64_t _t = (uint64_t) (X); \ - unsigned char *const _p = (unsigned char *) (P); \ - const unsigned char *const _q = (unsigned char *) &_t; \ - _p[0] = _q[0]; \ - _p[1] = _q[1]; \ - _p[2] = _q[2]; \ - _p[3] = _q[3]; \ - _p[4] = _q[4]; \ - _p[5] = _q[5]; \ - _p[6] = _q[6]; \ - _p[7] = _q[7]; \ - (P) = _p + 8; \ - } while (0) -#define WRITE_ADDR64(P,X) WRITE_WORD64(P,X) -#define WRITE_LWORD(P,X) WRITE_WORD64(P,X) -#define WRITE_OFF64(P,X) WRITE_WORD64(P,X) -#define WRITE_SXWORD(P,X) WRITE_WORD64(P,X) -#define WRITE_XWORD(P,X) WRITE_WORD64(P,X) -#define WRITE_IDENT(P,X) do { \ - (void) memcpy((P), (X), sizeof((X))); \ - (P) = (P) + EI_NIDENT; \ - } while (0) - -/* - * C macros to read in various integral values. - * - * Note: - * - The source pointer could be unaligned. - * - Values are read in native byte order. - * - The source pointer is incremented appropriately. - */ - -#define READ_BYTE(P,X) do { \ - const unsigned char *const _p = \ - (const unsigned char *) (P); \ - (X) = _p[0]; \ - (P) = (P) + 1; \ - } while (0) -#define READ_HALF(P,X) do { \ - uint16_t _t; \ - unsigned char *const _q = (unsigned char *) &_t; \ - const unsigned char *const _p = \ - (const unsigned char *) (P); \ - _q[0] = _p[0]; \ - _q[1] = _p[1]; \ - (P) = (P) + 2; \ - (X) = _t; \ - } while (0) -#define _READ_WORD(P,X,T) do { \ - uint32_t _t; \ - unsigned char *const _q = (unsigned char *) &_t; \ - const unsigned char *const _p = \ - (const unsigned char *) (P); \ - _q[0] = _p[0]; \ - _q[1] = _p[1]; \ - _q[2] = _p[2]; \ - _q[3] = _p[3]; \ - (P) = (P) + 4; \ - (X) = (T) _t; \ - } while (0) -#define READ_ADDR32(P,X) _READ_WORD(P, X, Elf32_Addr) -#define READ_OFF32(P,X) _READ_WORD(P, X, Elf32_Off) -#define READ_SWORD(P,X) _READ_WORD(P, X, Elf32_Sword) -#define READ_WORD(P,X) _READ_WORD(P, X, Elf32_Word) -#define _READ_WORD64(P,X,T) do { \ - uint64_t _t; \ - unsigned char *const _q = (unsigned char *) &_t; \ - const unsigned char *const _p = \ - (const unsigned char *) (P); \ - _q[0] = _p[0]; \ - _q[1] = _p[1]; \ - _q[2] = _p[2]; \ - _q[3] = _p[3]; \ - _q[4] = _p[4]; \ - _q[5] = _p[5]; \ - _q[6] = _p[6]; \ - _q[7] = _p[7]; \ - (P) = (P) + 8; \ - (X) = (T) _t; \ - } while (0) -#define READ_ADDR64(P,X) _READ_WORD64(P, X, Elf64_Addr) -#define READ_LWORD(P,X) _READ_WORD64(P, X, Elf64_Lword) -#define READ_OFF64(P,X) _READ_WORD64(P, X, Elf64_Off) -#define READ_SXWORD(P,X) _READ_WORD64(P, X, Elf64_Sxword) -#define READ_XWORD(P,X) _READ_WORD64(P, X, Elf64_Xword) -#define READ_IDENT(P,X) do { \ - (void) memcpy((X), (P), sizeof((X))); \ - (P) = (P) + EI_NIDENT; \ - } while (0) - -#define ROUNDUP2(V,N) (V) = ((((V) + (N) - 1)) & ~((N) - 1)) - -/*[*/ -MAKE_TYPE_CONVERTERS(ELF_TYPE_LIST) -MAKE_VERSION_CONVERTERS(VDEF,Verdef,Verdaux,vd) -MAKE_VERSION_CONVERTERS(VNEED,Verneed,Vernaux,vn) -/*]*/ - -/* - * Sections of type ELF_T_BYTE are never byteswapped, consequently a - * simple memcpy suffices for both directions of conversion. - */ - -static int -_libelf_cvt_BYTE_tox(unsigned char *dst, size_t dsz, unsigned char *src, - size_t count, int byteswap) -{ - (void) byteswap; - if (dsz < count) - return (0); - if (dst != src) - (void) memcpy(dst, src, count); - return (1); -} - -/* - * Sections of type ELF_T_GNUHASH start with a header containing 4 32-bit - * words. Bloom filter data comes next, followed by hash buckets and the - * hash chain. - * - * Bloom filter words are 64 bit wide on ELFCLASS64 objects and are 32 bit - * wide on ELFCLASS32 objects. The other objects in this section are 32 - * bits wide. - * - * Argument `srcsz' denotes the number of bytes to be converted. In the - * 32-bit case we need to translate `srcsz' to a count of 32-bit words. - */ - -static int -_libelf_cvt_GNUHASH32_tom(unsigned char *dst, size_t dsz, unsigned char *src, - size_t srcsz, int byteswap) -{ - return (_libelf_cvt_WORD_tom(dst, dsz, src, srcsz / sizeof(uint32_t), - byteswap)); -} - -static int -_libelf_cvt_GNUHASH32_tof(unsigned char *dst, size_t dsz, unsigned char *src, - size_t srcsz, int byteswap) -{ - return (_libelf_cvt_WORD_tof(dst, dsz, src, srcsz / sizeof(uint32_t), - byteswap)); -} - -static int -_libelf_cvt_GNUHASH64_tom(unsigned char *dst, size_t dsz, unsigned char *src, - size_t srcsz, int byteswap) -{ - size_t sz; - uint64_t t64, *bloom64; - Elf_GNU_Hash_Header *gh; - uint32_t n, nbuckets, nchains, maskwords, shift2, symndx, t32; - uint32_t *buckets, *chains; - - sz = 4 * sizeof(uint32_t); /* File header is 4 words long. */ - if (dsz < sizeof(Elf_GNU_Hash_Header) || srcsz < sz) - return (0); - - /* Read in the section header and byteswap if needed. */ - READ_WORD(src, nbuckets); - READ_WORD(src, symndx); - READ_WORD(src, maskwords); - READ_WORD(src, shift2); - - srcsz -= sz; - - if (byteswap) { - SWAP_WORD(nbuckets); - SWAP_WORD(symndx); - SWAP_WORD(maskwords); - SWAP_WORD(shift2); - } - - /* Check source buffer and destination buffer sizes. */ - sz = nbuckets * sizeof(uint32_t) + maskwords * sizeof(uint64_t); - if (srcsz < sz || dsz < sz + sizeof(Elf_GNU_Hash_Header)) - return (0); - - gh = (Elf_GNU_Hash_Header *) (uintptr_t) dst; - gh->gh_nbuckets = nbuckets; - gh->gh_symndx = symndx; - gh->gh_maskwords = maskwords; - gh->gh_shift2 = shift2; - - dsz -= sizeof(Elf_GNU_Hash_Header); - dst += sizeof(Elf_GNU_Hash_Header); - - bloom64 = (uint64_t *) (uintptr_t) dst; - - /* Copy bloom filter data. */ - for (n = 0; n < maskwords; n++) { - READ_XWORD(src, t64); - if (byteswap) - SWAP_XWORD(t64); - bloom64[n] = t64; - } - - /* The hash buckets follows the bloom filter. */ - dst += maskwords * sizeof(uint64_t); - buckets = (uint32_t *) (uintptr_t) dst; - - for (n = 0; n < nbuckets; n++) { - READ_WORD(src, t32); - if (byteswap) - SWAP_WORD(t32); - buckets[n] = t32; - } - - dst += nbuckets * sizeof(uint32_t); - - /* The hash chain follows the hash buckets. */ - dsz -= sz; - srcsz -= sz; - - if (dsz < srcsz) /* Destination lacks space. */ - return (0); - - nchains = srcsz / sizeof(uint32_t); - chains = (uint32_t *) (uintptr_t) dst; - - for (n = 0; n < nchains; n++) { - READ_WORD(src, t32); - if (byteswap) - SWAP_WORD(t32); - *chains++ = t32; - } - - return (1); -} - -static int -_libelf_cvt_GNUHASH64_tof(unsigned char *dst, size_t dsz, unsigned char *src, - size_t srcsz, int byteswap) -{ - uint32_t *s32; - size_t sz, hdrsz; - uint64_t *s64, t64; - Elf_GNU_Hash_Header *gh; - uint32_t maskwords, n, nbuckets, nchains, t0, t1, t2, t3, t32; - - hdrsz = 4 * sizeof(uint32_t); /* Header is 4x32 bits. */ - if (dsz < hdrsz || srcsz < sizeof(Elf_GNU_Hash_Header)) - return (0); - - gh = (Elf_GNU_Hash_Header *) (uintptr_t) src; - - t0 = nbuckets = gh->gh_nbuckets; - t1 = gh->gh_symndx; - t2 = maskwords = gh->gh_maskwords; - t3 = gh->gh_shift2; - - src += sizeof(Elf_GNU_Hash_Header); - srcsz -= sizeof(Elf_GNU_Hash_Header); - dsz -= hdrsz; - - sz = gh->gh_nbuckets * sizeof(uint32_t) + gh->gh_maskwords * - sizeof(uint64_t); - - if (srcsz < sz || dsz < sz) - return (0); - - /* Write out the header. */ - if (byteswap) { - SWAP_WORD(t0); - SWAP_WORD(t1); - SWAP_WORD(t2); - SWAP_WORD(t3); - } - - WRITE_WORD(dst, t0); - WRITE_WORD(dst, t1); - WRITE_WORD(dst, t2); - WRITE_WORD(dst, t3); - - /* Copy the bloom filter and the hash table. */ - s64 = (uint64_t *) (uintptr_t) src; - for (n = 0; n < maskwords; n++) { - t64 = *s64++; - if (byteswap) - SWAP_XWORD(t64); - WRITE_WORD64(dst, t64); - } - - s32 = (uint32_t *) s64; - for (n = 0; n < nbuckets; n++) { - t32 = *s32++; - if (byteswap) - SWAP_WORD(t32); - WRITE_WORD(dst, t32); - } - - srcsz -= sz; - dsz -= sz; - - /* Copy out the hash chains. */ - if (dsz < srcsz) - return (0); - - nchains = srcsz / sizeof(uint32_t); - for (n = 0; n < nchains; n++) { - t32 = *s32++; - if (byteswap) - SWAP_WORD(t32); - WRITE_WORD(dst, t32); - } - - return (1); -} - -/* - * Elf_Note structures comprise a fixed size header followed by variable - * length strings. The fixed size header needs to be byte swapped, but - * not the strings. - * - * Argument `count' denotes the total number of bytes to be converted. - * The destination buffer needs to be at least `count' bytes in size. - */ -static int -_libelf_cvt_NOTE_tom(unsigned char *dst, size_t dsz, unsigned char *src, - size_t count, int byteswap) -{ - uint32_t namesz, descsz, type; - Elf_Note *en; - size_t sz, hdrsz; - - if (dsz < count) /* Destination buffer is too small. */ - return (0); - - hdrsz = 3 * sizeof(uint32_t); - if (count < hdrsz) /* Source too small. */ - return (0); - - if (!byteswap) { - (void) memcpy(dst, src, count); - return (1); - } - - /* Process all notes in the section. */ - while (count > hdrsz) { - /* Read the note header. */ - READ_WORD(src, namesz); - READ_WORD(src, descsz); - READ_WORD(src, type); - - /* Translate. */ - SWAP_WORD(namesz); - SWAP_WORD(descsz); - SWAP_WORD(type); - - /* Copy out the translated note header. */ - en = (Elf_Note *) (uintptr_t) dst; - en->n_namesz = namesz; - en->n_descsz = descsz; - en->n_type = type; - - dsz -= sizeof(Elf_Note); - dst += sizeof(Elf_Note); - count -= hdrsz; - - ROUNDUP2(namesz, 4U); - ROUNDUP2(descsz, 4U); - - sz = namesz + descsz; - - if (count < sz || dsz < sz) /* Buffers are too small. */ - return (0); - - (void) memcpy(dst, src, sz); - - src += sz; - dst += sz; - - count -= sz; - dsz -= sz; - } - - return (1); -} - -static int -_libelf_cvt_NOTE_tof(unsigned char *dst, size_t dsz, unsigned char *src, - size_t count, int byteswap) -{ - uint32_t namesz, descsz, type; - Elf_Note *en; - size_t sz; - - if (dsz < count) - return (0); - - if (!byteswap) { - (void) memcpy(dst, src, count); - return (1); - } - - while (count > sizeof(Elf_Note)) { - - en = (Elf_Note *) (uintptr_t) src; - namesz = en->n_namesz; - descsz = en->n_descsz; - type = en->n_type; - - sz = namesz; - ROUNDUP2(sz, 4U); - sz += descsz; - ROUNDUP2(sz, 4U); - - SWAP_WORD(namesz); - SWAP_WORD(descsz); - SWAP_WORD(type); - - WRITE_WORD(dst, namesz); - WRITE_WORD(dst, descsz); - WRITE_WORD(dst, type); - - src += sizeof(Elf_Note); - - if (count < sz) - sz = count; - - (void) memcpy(dst, src, sz); - - src += sz; - dst += sz; - count -= sz; - } - - return (1); -} - -struct converters { - int (*tof32)(unsigned char *dst, size_t dsz, unsigned char *src, - size_t cnt, int byteswap); - int (*tom32)(unsigned char *dst, size_t dsz, unsigned char *src, - size_t cnt, int byteswap); - int (*tof64)(unsigned char *dst, size_t dsz, unsigned char *src, - size_t cnt, int byteswap); - int (*tom64)(unsigned char *dst, size_t dsz, unsigned char *src, - size_t cnt, int byteswap); -}; - - -static struct converters cvt[ELF_T_NUM] = { - /*[*/ -CONVERTER_NAMES(ELF_TYPE_LIST) - /*]*/ - - /* - * Types that need hand-coded converters follow. - */ - - [ELF_T_BYTE] = { - .tof32 = _libelf_cvt_BYTE_tox, - .tom32 = _libelf_cvt_BYTE_tox, - .tof64 = _libelf_cvt_BYTE_tox, - .tom64 = _libelf_cvt_BYTE_tox - }, - - [ELF_T_NOTE] = { - .tof32 = _libelf_cvt_NOTE_tof, - .tom32 = _libelf_cvt_NOTE_tom, - .tof64 = _libelf_cvt_NOTE_tof, - .tom64 = _libelf_cvt_NOTE_tom - } -}; - -int (*_libelf_get_translator(Elf_Type t, int direction, int elfclass)) - (unsigned char *_dst, size_t dsz, unsigned char *_src, size_t _cnt, - int _byteswap) -{ - assert(elfclass == ELFCLASS32 || elfclass == ELFCLASS64); - assert(direction == ELF_TOFILE || direction == ELF_TOMEMORY); - - if (t >= ELF_T_NUM || - (elfclass != ELFCLASS32 && elfclass != ELFCLASS64) || - (direction != ELF_TOFILE && direction != ELF_TOMEMORY)) - return (NULL); - - return ((elfclass == ELFCLASS32) ? - (direction == ELF_TOFILE ? cvt[t].tof32 : cvt[t].tom32) : - (direction == ELF_TOFILE ? cvt[t].tof64 : cvt[t].tom64)); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_data.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_data.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_data.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_data.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: libelf_data.c 3174 2015-03-27 17:13:41Z emaste $"); - -int -_libelf_xlate_shtype(uint32_t sht) -{ - /* - * Look for known section types. - */ - switch (sht) { - case SHT_DYNAMIC: - return (ELF_T_DYN); - case SHT_DYNSYM: - return (ELF_T_SYM); - case SHT_FINI_ARRAY: - return (ELF_T_ADDR); - case SHT_GNU_HASH: - return (ELF_T_GNUHASH); - case SHT_GNU_LIBLIST: - return (ELF_T_WORD); - case SHT_GROUP: - return (ELF_T_WORD); - case SHT_HASH: - return (ELF_T_WORD); - case SHT_INIT_ARRAY: - return (ELF_T_ADDR); - case SHT_NOBITS: - return (ELF_T_BYTE); - case SHT_NOTE: - return (ELF_T_NOTE); - case SHT_PREINIT_ARRAY: - return (ELF_T_ADDR); - case SHT_PROGBITS: - return (ELF_T_BYTE); - case SHT_REL: - return (ELF_T_REL); - case SHT_RELA: - return (ELF_T_RELA); - case SHT_STRTAB: - return (ELF_T_BYTE); - case SHT_SYMTAB: - return (ELF_T_SYM); - case SHT_SYMTAB_SHNDX: - return (ELF_T_WORD); - case SHT_SUNW_dof: - return (ELF_T_BYTE); - case SHT_SUNW_move: - return (ELF_T_MOVE); - case SHT_SUNW_syminfo: - return (ELF_T_SYMINFO); - case SHT_SUNW_verdef: /* == SHT_GNU_verdef */ - return (ELF_T_VDEF); - case SHT_SUNW_verneed: /* == SHT_GNU_verneed */ - return (ELF_T_VNEED); - case SHT_SUNW_versym: /* == SHT_GNU_versym */ - return (ELF_T_HALF); - default: - /* - * Values in the range [SHT_LOOS..SHT_HIUSER] (i.e., - * OS, processor and user-defined section types) are - * legal, but since we do not know anything more about - * their semantics, we return a type of ELF_T_BYTE. - */ - if (sht >= SHT_LOOS && sht <= SHT_HIUSER) - return (ELF_T_BYTE); - - /* - * Other values are unsupported. - */ - return (-1); - } -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_ehdr.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_ehdr.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_ehdr.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_ehdr.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,204 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: libelf_ehdr.c 3174 2015-03-27 17:13:41Z emaste $"); - -/* - * Retrieve counts for sections, phdrs and the section string table index - * from section header #0 of the ELF object. - */ -static int -_libelf_load_extended(Elf *e, int ec, uint64_t shoff, uint16_t phnum, - uint16_t strndx) -{ - Elf_Scn *scn; - size_t fsz; - int (*xlator)(unsigned char *_d, size_t _dsz, unsigned char *_s, - size_t _c, int _swap); - uint32_t shtype; - - assert(STAILQ_EMPTY(&e->e_u.e_elf.e_scn)); - - fsz = _libelf_fsize(ELF_T_SHDR, ec, e->e_version, 1); - assert(fsz > 0); - - if (e->e_rawsize < shoff + fsz) { /* raw file too small */ - LIBELF_SET_ERROR(HEADER, 0); - return (0); - } - - if ((scn = _libelf_allocate_scn(e, (size_t) 0)) == NULL) - return (0); - - xlator = _libelf_get_translator(ELF_T_SHDR, ELF_TOMEMORY, ec); - (*xlator)((unsigned char *) &scn->s_shdr, sizeof(scn->s_shdr), - (unsigned char *) e->e_rawfile + shoff, (size_t) 1, - e->e_byteorder != LIBELF_PRIVATE(byteorder)); - -#define GET_SHDR_MEMBER(M) ((ec == ELFCLASS32) ? scn->s_shdr.s_shdr32.M : \ - scn->s_shdr.s_shdr64.M) - - if ((shtype = GET_SHDR_MEMBER(sh_type)) != SHT_NULL) { - LIBELF_SET_ERROR(SECTION, 0); - return (0); - } - - e->e_u.e_elf.e_nscn = (size_t) GET_SHDR_MEMBER(sh_size); - e->e_u.e_elf.e_nphdr = (phnum != PN_XNUM) ? phnum : - GET_SHDR_MEMBER(sh_info); - e->e_u.e_elf.e_strndx = (strndx != SHN_XINDEX) ? strndx : - GET_SHDR_MEMBER(sh_link); -#undef GET_SHDR_MEMBER - - return (1); -} - -#define EHDR_INIT(E,SZ) do { \ - Elf##SZ##_Ehdr *eh = (E); \ - eh->e_ident[EI_MAG0] = ELFMAG0; \ - eh->e_ident[EI_MAG1] = ELFMAG1; \ - eh->e_ident[EI_MAG2] = ELFMAG2; \ - eh->e_ident[EI_MAG3] = ELFMAG3; \ - eh->e_ident[EI_CLASS] = ELFCLASS##SZ; \ - eh->e_ident[EI_DATA] = ELFDATANONE; \ - eh->e_ident[EI_VERSION] = LIBELF_PRIVATE(version) & 0xFFU; \ - eh->e_machine = EM_NONE; \ - eh->e_type = ELF_K_NONE; \ - eh->e_version = LIBELF_PRIVATE(version); \ - } while (0) - -void * -_libelf_ehdr(Elf *e, int ec, int allocate) -{ - void *ehdr; - size_t fsz, msz; - uint16_t phnum, shnum, strndx; - uint64_t shoff; - int (*xlator)(unsigned char *_d, size_t _dsz, unsigned char *_s, - size_t _c, int _swap); - - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (e == NULL || e->e_kind != ELF_K_ELF) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if (e->e_class != ELFCLASSNONE && e->e_class != ec) { - LIBELF_SET_ERROR(CLASS, 0); - return (NULL); - } - - if (e->e_version != EV_CURRENT) { - LIBELF_SET_ERROR(VERSION, 0); - return (NULL); - } - - if (e->e_class == ELFCLASSNONE) - e->e_class = ec; - - if (ec == ELFCLASS32) - ehdr = (void *) e->e_u.e_elf.e_ehdr.e_ehdr32; - else - ehdr = (void *) e->e_u.e_elf.e_ehdr.e_ehdr64; - - if (ehdr != NULL) /* already have a translated ehdr */ - return (ehdr); - - fsz = _libelf_fsize(ELF_T_EHDR, ec, e->e_version, (size_t) 1); - assert(fsz > 0); - - if (e->e_cmd != ELF_C_WRITE && e->e_rawsize < fsz) { - LIBELF_SET_ERROR(HEADER, 0); - return (NULL); - } - - msz = _libelf_msize(ELF_T_EHDR, ec, EV_CURRENT); - - assert(msz > 0); - - if ((ehdr = calloc((size_t) 1, msz)) == NULL) { - LIBELF_SET_ERROR(RESOURCE, 0); - return (NULL); - } - - if (ec == ELFCLASS32) { - e->e_u.e_elf.e_ehdr.e_ehdr32 = ehdr; - EHDR_INIT(ehdr,32); - } else { - e->e_u.e_elf.e_ehdr.e_ehdr64 = ehdr; - EHDR_INIT(ehdr,64); - } - - if (allocate) - e->e_flags |= ELF_F_DIRTY; - - if (e->e_cmd == ELF_C_WRITE) - return (ehdr); - - xlator = _libelf_get_translator(ELF_T_EHDR, ELF_TOMEMORY, ec); - (*xlator)((unsigned char*) ehdr, msz, e->e_rawfile, (size_t) 1, - e->e_byteorder != LIBELF_PRIVATE(byteorder)); - - /* - * If extended numbering is being used, read the correct - * number of sections and program header entries. - */ - if (ec == ELFCLASS32) { - phnum = ((Elf32_Ehdr *) ehdr)->e_phnum; - shnum = ((Elf32_Ehdr *) ehdr)->e_shnum; - shoff = ((Elf32_Ehdr *) ehdr)->e_shoff; - strndx = ((Elf32_Ehdr *) ehdr)->e_shstrndx; - } else { - phnum = ((Elf64_Ehdr *) ehdr)->e_phnum; - shnum = ((Elf64_Ehdr *) ehdr)->e_shnum; - shoff = ((Elf64_Ehdr *) ehdr)->e_shoff; - strndx = ((Elf64_Ehdr *) ehdr)->e_shstrndx; - } - - if (shnum >= SHN_LORESERVE || - (shoff == 0LL && (shnum != 0 || phnum == PN_XNUM || - strndx == SHN_XINDEX))) { - LIBELF_SET_ERROR(HEADER, 0); - return (NULL); - } - - if (shnum != 0 || shoff == 0LL) { /* not using extended numbering */ - e->e_u.e_elf.e_nphdr = phnum; - e->e_u.e_elf.e_nscn = shnum; - e->e_u.e_elf.e_strndx = strndx; - } else if (_libelf_load_extended(e, ec, shoff, phnum, strndx) == 0) - return (NULL); - - return (ehdr); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_extended.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_extended.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_extended.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_extended.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,134 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: libelf_extended.c 3174 2015-03-27 17:13:41Z emaste $"); - -/* - * Retrieve section #0, allocating a new section if needed. - */ -static Elf_Scn * -_libelf_getscn0(Elf *e) -{ - Elf_Scn *s; - - if ((s = STAILQ_FIRST(&e->e_u.e_elf.e_scn)) != NULL) - return (s); - - return (_libelf_allocate_scn(e, (size_t) SHN_UNDEF)); -} - -int -_libelf_setshnum(Elf *e, void *eh, int ec, size_t shnum) -{ - Elf_Scn *scn; - - if (shnum >= SHN_LORESERVE) { - if ((scn = _libelf_getscn0(e)) == NULL) - return (0); - - assert(scn->s_ndx == SHN_UNDEF); - - if (ec == ELFCLASS32) - scn->s_shdr.s_shdr32.sh_size = shnum; - else - scn->s_shdr.s_shdr64.sh_size = shnum; - - (void) elf_flagshdr(scn, ELF_C_SET, ELF_F_DIRTY); - - shnum = 0; - } - - if (ec == ELFCLASS32) - ((Elf32_Ehdr *) eh)->e_shnum = shnum & 0xFFFFU; - else - ((Elf64_Ehdr *) eh)->e_shnum = shnum & 0xFFFFU; - - - return (1); -} - -int -_libelf_setshstrndx(Elf *e, void *eh, int ec, size_t shstrndx) -{ - Elf_Scn *scn; - - if (shstrndx >= SHN_LORESERVE) { - if ((scn = _libelf_getscn0(e)) == NULL) - return (0); - - assert(scn->s_ndx == SHN_UNDEF); - - if (ec == ELFCLASS32) - scn->s_shdr.s_shdr32.sh_link = shstrndx; - else - scn->s_shdr.s_shdr64.sh_link = shstrndx; - - (void) elf_flagshdr(scn, ELF_C_SET, ELF_F_DIRTY); - - shstrndx = SHN_XINDEX; - } - - if (ec == ELFCLASS32) - ((Elf32_Ehdr *) eh)->e_shstrndx = shstrndx & 0xFFFFU; - else - ((Elf64_Ehdr *) eh)->e_shstrndx = shstrndx & 0xFFFFU; - - return (1); -} - -int -_libelf_setphnum(Elf *e, void *eh, int ec, size_t phnum) -{ - Elf_Scn *scn; - - if (phnum >= PN_XNUM) { - if ((scn = _libelf_getscn0(e)) == NULL) - return (0); - - assert(scn->s_ndx == SHN_UNDEF); - - if (ec == ELFCLASS32) - scn->s_shdr.s_shdr32.sh_info = phnum; - else - scn->s_shdr.s_shdr64.sh_info = phnum; - - (void) elf_flagshdr(scn, ELF_C_SET, ELF_F_DIRTY); - - phnum = PN_XNUM; - } - - if (ec == ELFCLASS32) - ((Elf32_Ehdr *) eh)->e_phnum = phnum & 0xFFFFU; - else - ((Elf64_Ehdr *) eh)->e_phnum = phnum & 0xFFFFU; - - return (1); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_fsize.m4 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_fsize.m4 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_fsize.m4 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_fsize.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,159 +0,0 @@ -/*- - * Copyright (c) 2006,2008-2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: libelf_fsize.m4 2225 2011-11-26 18:55:54Z jkoshy $"); - -/* WARNING: GENERATED FROM __file__. */ - -/* - * Create an array of file sizes from the elf_type definitions - */ - -divert(-1) -include(SRCDIR`/elf_types.m4') - -/* - * Translations from structure definitions to the size of their file - * representations. - */ - -/* `Basic' types. */ -define(`BYTE_SIZE', 1) -define(`IDENT_SIZE', `EI_NIDENT') - -/* Types that have variable length. */ -define(`GNUHASH_SIZE', 1) -define(`NOTE_SIZE', 1) -define(`VDEF_SIZE', 1) -define(`VNEED_SIZE', 1) - -/* Currently unimplemented types. */ -define(`MOVEP_SIZE', 0) - -/* Overrides for 32 bit types that do not exist. */ -define(`XWORD_SIZE32', 0) -define(`SXWORD_SIZE32', 0) - -/* - * FSZ{32,64} define the sizes of 32 and 64 bit file structures respectively. - */ - -define(`FSZ32',`_FSZ32($1_DEF)') -define(`_FSZ32', - `ifelse($#,1,0, - `_BSZ32($1)+_FSZ32(shift($@))')') -define(`_BSZ32',`$2_SIZE32') - -define(`FSZ64',`_FSZ64($1_DEF)') -define(`_FSZ64', - `ifelse($#,1,0, - `_BSZ64($1)+_FSZ64(shift($@))')') -define(`_BSZ64',`$2_SIZE64') - -/* - * DEFINE_ELF_FSIZES(TYPE,NAME) - * - * Shorthand for defining for 32 and 64 versions - * of elf type TYPE. - * - * If TYPE`'_SIZE is defined, use its value for both 32 bit and 64 bit - * sizes. - * - * Otherwise, look for a explicit 32/64 bit size definition for TYPE, - * TYPE`'_SIZE32 or TYPE`'_SIZE64. If this definition is present, there - * is nothing further to do. - * - * Otherwise, if an Elf{32,64}_`'NAME structure definition is known, - * compute an expression that adds up the sizes of the structure's - * constituents. - * - * If such a structure definition is not known, treat TYPE as a primitive - * (i.e., integral) type and use sizeof(Elf{32,64}_`'NAME) to get its - * file representation size. - */ - -define(`DEFINE_ELF_FSIZE', - `ifdef($1`_SIZE', - `define($1_SIZE32,$1_SIZE) - define($1_SIZE64,$1_SIZE)', - `ifdef($1`_SIZE32',`', - `ifdef(`Elf32_'$2`_DEF', - `define($1_SIZE32,FSZ32(Elf32_$2))', - `define($1_SIZE32,`sizeof(Elf32_'$2`)')')') - ifdef($1`_SIZE64',`', - `ifdef(`Elf64_'$2`_DEF', - `define($1_SIZE64,FSZ64(Elf64_$2))', - `define($1_SIZE64,`sizeof(Elf64_'$2`)')')')')') - -define(`DEFINE_ELF_FSIZES', - `ifelse($#,1,`', - `DEFINE_ELF_FSIZE($1) - DEFINE_ELF_FSIZES(shift($@))')') - -DEFINE_ELF_FSIZES(ELF_TYPE_LIST) -DEFINE_ELF_FSIZE(`IDENT',`') # `IDENT' is a pseudo type - -define(`FSIZE', - `[ELF_T_$1] = { .fsz32 = $1_SIZE32, .fsz64 = $1_SIZE64 }, -') -define(`FSIZES', - `ifelse($#,1,`', - `FSIZE($1) -FSIZES(shift($@))')') - -divert(0) - -struct fsize { - size_t fsz32; - size_t fsz64; -}; - -static struct fsize fsize[ELF_T_NUM] = { -FSIZES(ELF_TYPE_LIST) -}; - -size_t -_libelf_fsize(Elf_Type t, int ec, unsigned int v, size_t c) -{ - size_t sz; - - sz = 0; - if (v != EV_CURRENT) - LIBELF_SET_ERROR(VERSION, 0); - else if ((int) t < ELF_T_FIRST || t > ELF_T_LAST) - LIBELF_SET_ERROR(ARGUMENT, 0); - else { - sz = ec == ELFCLASS64 ? fsize[t].fsz64 : fsize[t].fsz32; - if (sz == 0) - LIBELF_SET_ERROR(UNIMPL, 0); - } - - return (sz*c); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/_libelf.h libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/_libelf.h --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/_libelf.h 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/_libelf.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,239 +0,0 @@ -/*- - * Copyright (c) 2006,2008-2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: _libelf.h 3174 2015-03-27 17:13:41Z emaste $ - */ - -#ifndef __LIBELF_H_ -#define __LIBELF_H_ - -#include - -#include "_libelf_config.h" - -#include "_elftc.h" - -/* - * Library-private data structures. - */ - -#define LIBELF_MSG_SIZE 256 - -struct _libelf_globals { - int libelf_arch; - unsigned int libelf_byteorder; - int libelf_class; - int libelf_error; - int libelf_fillchar; - unsigned int libelf_version; - unsigned char libelf_msg[LIBELF_MSG_SIZE]; -}; - -extern struct _libelf_globals _libelf; - -#define LIBELF_PRIVATE(N) (_libelf.libelf_##N) - -#define LIBELF_ELF_ERROR_MASK 0xFF -#define LIBELF_OS_ERROR_SHIFT 8 - -#define LIBELF_ERROR(E, O) (((E) & LIBELF_ELF_ERROR_MASK) | \ - ((O) << LIBELF_OS_ERROR_SHIFT)) - -#define LIBELF_SET_ERROR(E, O) do { \ - LIBELF_PRIVATE(error) = LIBELF_ERROR(ELF_E_##E, (O)); \ - } while (0) - -#define LIBELF_ADJUST_AR_SIZE(S) (((S) + 1U) & ~1U) - -/* - * Flags for library internal use. These use the upper 16 bits of the - * `e_flags' field. - */ -#define LIBELF_F_API_MASK 0x00FFFFU /* Flags defined by the API. */ -#define LIBELF_F_AR_HEADER 0x010000U /* translated header available */ -#define LIBELF_F_AR_VARIANT_SVR4 0x020000U /* BSD style ar(1) archive */ -#define LIBELF_F_DATA_MALLOCED 0x040000U /* whether data was malloc'ed */ -#define LIBELF_F_RAWFILE_MALLOC 0x080000U /* whether e_rawfile was malloc'ed */ -#define LIBELF_F_RAWFILE_MMAP 0x100000U /* whether e_rawfile was mmap'ed */ -#define LIBELF_F_SHDRS_LOADED 0x200000U /* whether all shdrs were read in */ -#define LIBELF_F_SPECIAL_FILE 0x400000U /* non-regular file */ - -struct _Elf { - int e_activations; /* activation count */ - unsigned int e_byteorder; /* ELFDATA* */ - int e_class; /* ELFCLASS* */ - Elf_Cmd e_cmd; /* ELF_C_* used at creation time */ - int e_fd; /* associated file descriptor */ - unsigned int e_flags; /* ELF_F_* & LIBELF_F_* flags */ - Elf_Kind e_kind; /* ELF_K_* */ - Elf *e_parent; /* non-NULL for archive members */ - unsigned char *e_rawfile; /* uninterpreted bytes */ - size_t e_rawsize; /* size of uninterpreted bytes */ - unsigned int e_version; /* file version */ - - /* - * Header information for archive members. See the - * LIBELF_F_AR_HEADER flag. - */ - union { - Elf_Arhdr *e_arhdr; /* translated header */ - unsigned char *e_rawhdr; /* untranslated header */ - } e_hdr; - - union { - struct { /* ar(1) archives */ - off_t e_next; /* set by elf_rand()/elf_next() */ - int e_nchildren; - unsigned char *e_rawstrtab; /* file name strings */ - size_t e_rawstrtabsz; - unsigned char *e_rawsymtab; /* symbol table */ - size_t e_rawsymtabsz; - Elf_Arsym *e_symtab; - size_t e_symtabsz; - } e_ar; - struct { /* regular ELF files */ - union { - Elf32_Ehdr *e_ehdr32; - Elf64_Ehdr *e_ehdr64; - } e_ehdr; - union { - Elf32_Phdr *e_phdr32; - Elf64_Phdr *e_phdr64; - } e_phdr; - STAILQ_HEAD(, _Elf_Scn) e_scn; /* section list */ - size_t e_nphdr; /* number of Phdr entries */ - size_t e_nscn; /* number of sections */ - size_t e_strndx; /* string table section index */ - } e_elf; - } e_u; -}; - -/* - * The internal descriptor wrapping the "Elf_Data" type. - */ -struct _Libelf_Data { - Elf_Data d_data; /* The exported descriptor. */ - Elf_Scn *d_scn; /* The containing section */ - unsigned int d_flags; - STAILQ_ENTRY(_Libelf_Data) d_next; -}; - -struct _Elf_Scn { - union { - Elf32_Shdr s_shdr32; - Elf64_Shdr s_shdr64; - } s_shdr; - STAILQ_HEAD(, _Libelf_Data) s_data; /* translated data */ - STAILQ_HEAD(, _Libelf_Data) s_rawdata; /* raw data */ - STAILQ_ENTRY(_Elf_Scn) s_next; - struct _Elf *s_elf; /* parent ELF descriptor */ - unsigned int s_flags; /* flags for the section as a whole */ - size_t s_ndx; /* index# for this section */ - uint64_t s_offset; /* managed by elf_update() */ - uint64_t s_rawoff; /* original offset in the file */ - uint64_t s_size; /* managed by elf_update() */ -}; - - -enum { - ELF_TOFILE, - ELF_TOMEMORY -}; - - -/* - * The LIBELF_COPY macros are used to copy fields from a GElf_* - * structure to their 32-bit counterparts, while checking for out of - * range values. - * - * - LIBELF_COPY_U32 :: copy an unsigned 32 bit field. - * - LIBELF_COPY_S32 :: copy a signed 32 bit field. - */ - -#define LIBELF_COPY_U32(DST, SRC, NAME) do { \ - if ((SRC)->NAME > UINT32_MAX) { \ - LIBELF_SET_ERROR(RANGE, 0); \ - return (0); \ - } \ - (DST)->NAME = (SRC)->NAME & 0xFFFFFFFFU; \ - } while (0) - -#define LIBELF_COPY_S32(DST, SRC, NAME) do { \ - if ((SRC)->NAME > INT32_MAX || \ - (SRC)->NAME < INT32_MIN) { \ - LIBELF_SET_ERROR(RANGE, 0); \ - return (0); \ - } \ - (DST)->NAME = (int32_t) (SRC)->NAME; \ - } while (0) - - -/* - * Function Prototypes. - */ - -#ifdef __cplusplus -extern "C" { -#endif -struct _Libelf_Data *_libelf_allocate_data(Elf_Scn *_s); -Elf *_libelf_allocate_elf(void); -Elf_Scn *_libelf_allocate_scn(Elf *_e, size_t _ndx); -Elf_Arhdr *_libelf_ar_gethdr(Elf *_e); -Elf *_libelf_ar_open(Elf *_e, int _reporterror); -Elf *_libelf_ar_open_member(int _fd, Elf_Cmd _c, Elf *_ar); -Elf_Arsym *_libelf_ar_process_bsd_symtab(Elf *_ar, size_t *_dst); -Elf_Arsym *_libelf_ar_process_svr4_symtab(Elf *_ar, size_t *_dst); -long _libelf_checksum(Elf *_e, int _elfclass); -void *_libelf_ehdr(Elf *_e, int _elfclass, int _allocate); -unsigned int _libelf_falign(Elf_Type _t, int _elfclass); -size_t _libelf_fsize(Elf_Type _t, int _elfclass, unsigned int _version, - size_t count); -int (*_libelf_get_translator(Elf_Type _t, int _direction, int _elfclass)) - (unsigned char *_dst, size_t dsz, unsigned char *_src, - size_t _cnt, int _byteswap); -void *_libelf_getphdr(Elf *_e, int _elfclass); -void *_libelf_getshdr(Elf_Scn *_scn, int _elfclass); -void _libelf_init_elf(Elf *_e, Elf_Kind _kind); -int _libelf_load_section_headers(Elf *e, void *ehdr); -unsigned int _libelf_malign(Elf_Type _t, int _elfclass); -Elf *_libelf_memory(unsigned char *_image, size_t _sz, int _reporterror); -size_t _libelf_msize(Elf_Type _t, int _elfclass, unsigned int _version); -void *_libelf_newphdr(Elf *_e, int _elfclass, size_t _count); -Elf *_libelf_open_object(int _fd, Elf_Cmd _c, int _reporterror); -struct _Libelf_Data *_libelf_release_data(struct _Libelf_Data *_d); -Elf *_libelf_release_elf(Elf *_e); -Elf_Scn *_libelf_release_scn(Elf_Scn *_s); -int _libelf_setphnum(Elf *_e, void *_eh, int _elfclass, size_t _phnum); -int _libelf_setshnum(Elf *_e, void *_eh, int _elfclass, size_t _shnum); -int _libelf_setshstrndx(Elf *_e, void *_eh, int _elfclass, - size_t _shstrndx); -Elf_Data *_libelf_xlate(Elf_Data *_d, const Elf_Data *_s, - unsigned int _encoding, int _elfclass, int _direction); -int _libelf_xlate_shtype(uint32_t _sht); -#ifdef __cplusplus -} -#endif - -#endif /* __LIBELF_H_ */ diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf.h libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf.h --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf.h 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,256 +0,0 @@ -/*- - * Copyright (c) 2006,2008-2010 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: libelf.h 3174 2015-03-27 17:13:41Z emaste $ - */ - -#ifndef _LIBELF_H_ -#define _LIBELF_H_ - -#include - -#include - -/* Library private data structures */ -typedef struct _Elf Elf; -typedef struct _Elf_Scn Elf_Scn; - -/* File types */ -typedef enum { - ELF_K_NONE = 0, - ELF_K_AR, /* `ar' archives */ - ELF_K_COFF, /* COFF files (unsupported) */ - ELF_K_ELF, /* ELF files */ - ELF_K_NUM -} Elf_Kind; - -#define ELF_K_FIRST ELF_K_NONE -#define ELF_K_LAST ELF_K_NUM - -/* Data types */ -typedef enum { - ELF_T_ADDR, - ELF_T_BYTE, - ELF_T_CAP, - ELF_T_DYN, - ELF_T_EHDR, - ELF_T_HALF, - ELF_T_LWORD, - ELF_T_MOVE, - ELF_T_MOVEP, - ELF_T_NOTE, - ELF_T_OFF, - ELF_T_PHDR, - ELF_T_REL, - ELF_T_RELA, - ELF_T_SHDR, - ELF_T_SWORD, - ELF_T_SXWORD, - ELF_T_SYMINFO, - ELF_T_SYM, - ELF_T_VDEF, - ELF_T_VNEED, - ELF_T_WORD, - ELF_T_XWORD, - ELF_T_GNUHASH, /* GNU style hash tables. */ - ELF_T_NUM -} Elf_Type; - -#define ELF_T_FIRST ELF_T_ADDR -#define ELF_T_LAST ELF_T_GNUHASH - -/* Commands */ -typedef enum { - ELF_C_NULL = 0, - ELF_C_CLR, - ELF_C_FDDONE, - ELF_C_FDREAD, - ELF_C_RDWR, - ELF_C_READ, - ELF_C_SET, - ELF_C_WRITE, - ELF_C_NUM -} Elf_Cmd; - -#define ELF_C_FIRST ELF_C_NULL -#define ELF_C_LAST ELF_C_NUM - -/* - * An `Elf_Data' structure describes data in an - * ELF section. - */ -typedef struct _Elf_Data { - /* - * `Public' members that are part of the ELF(3) API. - */ - uint64_t d_align; - void *d_buf; - uint64_t d_off; - uint64_t d_size; - Elf_Type d_type; - unsigned int d_version; -} Elf_Data; - -/* - * An `Elf_Arhdr' structure describes an archive - * header. - */ -typedef struct { - time_t ar_date; - char *ar_name; /* archive member name */ - gid_t ar_gid; - mode_t ar_mode; - char *ar_rawname; /* 'raw' member name */ - size_t ar_size; - uid_t ar_uid; - - /* - * Members that are not part of the public API. - */ - unsigned int ar_flags; -} Elf_Arhdr; - -/* - * An `Elf_Arsym' describes an entry in the archive - * symbol table. - */ -typedef struct { - off_t as_off; /* byte offset to member's header */ - unsigned long as_hash; /* elf_hash() value for name */ - char *as_name; /* null terminated symbol name */ -} Elf_Arsym; - -/* - * Error numbers. - */ - -enum Elf_Error { - ELF_E_NONE, /* No error */ - ELF_E_ARCHIVE, /* Malformed ar(1) archive */ - ELF_E_ARGUMENT, /* Invalid argument */ - ELF_E_CLASS, /* Mismatched ELF class */ - ELF_E_DATA, /* Invalid data descriptor */ - ELF_E_HEADER, /* Missing or malformed ELF header */ - ELF_E_IO, /* I/O error */ - ELF_E_LAYOUT, /* Layout constraint violation */ - ELF_E_MODE, /* Wrong mode for ELF descriptor */ - ELF_E_RANGE, /* Value out of range */ - ELF_E_RESOURCE, /* Resource exhaustion */ - ELF_E_SECTION, /* Invalid section descriptor */ - ELF_E_SEQUENCE, /* API calls out of sequence */ - ELF_E_UNIMPL, /* Feature is unimplemented */ - ELF_E_VERSION, /* Unknown API version */ - ELF_E_NUM /* Max error number */ -}; - -/* - * Flags defined by the API. - */ - -#define ELF_F_LAYOUT 0x001U /* application will layout the file */ -#define ELF_F_DIRTY 0x002U /* a section or ELF file is dirty */ - -/* ELF(3) API extensions. */ -#define ELF_F_ARCHIVE 0x100U /* archive creation */ -#define ELF_F_ARCHIVE_SYSV 0x200U /* SYSV style archive */ - -#ifdef __cplusplus -extern "C" { -#endif -Elf *elf_begin(int _fd, Elf_Cmd _cmd, Elf *_elf); -int elf_cntl(Elf *_elf, Elf_Cmd _cmd); -int elf_end(Elf *_elf); -const char *elf_errmsg(int _error); -int elf_errno(void); -void elf_fill(int _fill); -unsigned int elf_flagarhdr(Elf_Arhdr *_arh, Elf_Cmd _cmd, - unsigned int _flags); -unsigned int elf_flagdata(Elf_Data *_data, Elf_Cmd _cmd, - unsigned int _flags); -unsigned int elf_flagehdr(Elf *_elf, Elf_Cmd _cmd, unsigned int _flags); -unsigned int elf_flagelf(Elf *_elf, Elf_Cmd _cmd, unsigned int _flags); -unsigned int elf_flagphdr(Elf *_elf, Elf_Cmd _cmd, unsigned int _flags); -unsigned int elf_flagscn(Elf_Scn *_scn, Elf_Cmd _cmd, unsigned int _flags); -unsigned int elf_flagshdr(Elf_Scn *_scn, Elf_Cmd _cmd, unsigned int _flags); -Elf_Arhdr *elf_getarhdr(Elf *_elf); -Elf_Arsym *elf_getarsym(Elf *_elf, size_t *_ptr); -off_t elf_getbase(Elf *_elf); -Elf_Data *elf_getdata(Elf_Scn *, Elf_Data *); -char *elf_getident(Elf *_elf, size_t *_ptr); -int elf_getphdrnum(Elf *_elf, size_t *_dst); -int elf_getphnum(Elf *_elf, size_t *_dst); /* Deprecated */ -Elf_Scn *elf_getscn(Elf *_elf, size_t _index); -int elf_getshdrnum(Elf *_elf, size_t *_dst); -int elf_getshnum(Elf *_elf, size_t *_dst); /* Deprecated */ -int elf_getshdrstrndx(Elf *_elf, size_t *_dst); -int elf_getshstrndx(Elf *_elf, size_t *_dst); /* Deprecated */ -unsigned long elf_hash(const char *_name); -Elf_Kind elf_kind(Elf *_elf); -Elf *elf_memory(char *_image, size_t _size); -size_t elf_ndxscn(Elf_Scn *_scn); -Elf_Data *elf_newdata(Elf_Scn *_scn); -Elf_Scn *elf_newscn(Elf *_elf); -Elf_Scn *elf_nextscn(Elf *_elf, Elf_Scn *_scn); -Elf_Cmd elf_next(Elf *_elf); -Elf *elf_open(int _fd); -Elf *elf_openmemory(char *_image, size_t _size); -off_t elf_rand(Elf *_elf, off_t _off); -Elf_Data *elf_rawdata(Elf_Scn *_scn, Elf_Data *_data); -char *elf_rawfile(Elf *_elf, size_t *_size); -int elf_setshstrndx(Elf *_elf, size_t _shnum); -char *elf_strptr(Elf *_elf, size_t _section, size_t _offset); -off_t elf_update(Elf *_elf, Elf_Cmd _cmd); -unsigned int elf_version(unsigned int _version); - -long elf32_checksum(Elf *_elf); -size_t elf32_fsize(Elf_Type _type, size_t _count, - unsigned int _version); -Elf32_Ehdr *elf32_getehdr(Elf *_elf); -Elf32_Phdr *elf32_getphdr(Elf *_elf); -Elf32_Shdr *elf32_getshdr(Elf_Scn *_scn); -Elf32_Ehdr *elf32_newehdr(Elf *_elf); -Elf32_Phdr *elf32_newphdr(Elf *_elf, size_t _count); -Elf_Data *elf32_xlatetof(Elf_Data *_dst, const Elf_Data *_src, - unsigned int _enc); -Elf_Data *elf32_xlatetom(Elf_Data *_dst, const Elf_Data *_src, - unsigned int _enc); - -long elf64_checksum(Elf *_elf); -size_t elf64_fsize(Elf_Type _type, size_t _count, - unsigned int _version); -Elf64_Ehdr *elf64_getehdr(Elf *_elf); -Elf64_Phdr *elf64_getphdr(Elf *_elf); -Elf64_Shdr *elf64_getshdr(Elf_Scn *_scn); -Elf64_Ehdr *elf64_newehdr(Elf *_elf); -Elf64_Phdr *elf64_newphdr(Elf *_elf, size_t _count); -Elf_Data *elf64_xlatetof(Elf_Data *_dst, const Elf_Data *_src, - unsigned int _enc); -Elf_Data *elf64_xlatetom(Elf_Data *_dst, const Elf_Data *_src, - unsigned int _enc); -#ifdef __cplusplus -} -#endif - -#endif /* _LIBELF_H_ */ diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_memory.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_memory.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_memory.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_memory.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,96 +0,0 @@ -/*- - * Copyright (c) 2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: libelf_memory.c 3013 2014-03-23 06:16:59Z jkoshy $"); - -/* - * Create an ELF descriptor for a memory image, optionally reporting - * parse errors. - */ - -Elf * -_libelf_memory(unsigned char *image, size_t sz, int reporterror) -{ - Elf *e; - int e_class; - enum Elf_Error error; - unsigned int e_byteorder, e_version; - - assert(image != NULL); - assert(sz > 0); - - if ((e = _libelf_allocate_elf()) == NULL) - return (NULL); - - e->e_cmd = ELF_C_READ; - e->e_rawfile = image; - e->e_rawsize = sz; - -#undef LIBELF_IS_ELF -#define LIBELF_IS_ELF(P) ((P)[EI_MAG0] == ELFMAG0 && \ - (P)[EI_MAG1] == ELFMAG1 && (P)[EI_MAG2] == ELFMAG2 && \ - (P)[EI_MAG3] == ELFMAG3) - - if (sz > EI_NIDENT && LIBELF_IS_ELF(image)) { - e_byteorder = image[EI_DATA]; - e_class = image[EI_CLASS]; - e_version = image[EI_VERSION]; - - error = ELF_E_NONE; - - if (e_version > EV_CURRENT) - error = ELF_E_VERSION; - else if ((e_byteorder != ELFDATA2LSB && e_byteorder != - ELFDATA2MSB) || (e_class != ELFCLASS32 && e_class != - ELFCLASS64)) - error = ELF_E_HEADER; - - if (error != ELF_E_NONE) { - if (reporterror) { - LIBELF_PRIVATE(error) = LIBELF_ERROR(error, 0); - (void) _libelf_release_elf(e); - return (NULL); - } - } else { - _libelf_init_elf(e, ELF_K_ELF); - - e->e_byteorder = e_byteorder; - e->e_class = e_class; - e->e_version = e_version; - } - } else if (sz >= SARMAG && - strncmp((const char *) image, ARMAG, (size_t) SARMAG) == 0) - return (_libelf_ar_open(e, reporterror)); - - return (e); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_msize.m4 libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_msize.m4 --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_msize.m4 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_msize.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,106 +0,0 @@ -/*- - * Copyright (c) 2006,2008-2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: libelf_msize.m4 3174 2015-03-27 17:13:41Z emaste $"); - -/* WARNING: GENERATED FROM __file__. */ - -struct msize { - size_t msz32; - size_t msz64; -}; - -divert(-1) -include(SRCDIR`/elf_types.m4') - -/* - * ELF types whose memory representations have a variable size. - */ -define(BYTE_SIZE, 1) -define(GNUHASH_SIZE, 1) -define(NOTE_SIZE, 1) -define(VDEF_SIZE, 1) -define(VNEED_SIZE, 1) - -/* - * Unimplemented types. - */ -define(MOVEP_SIZE, 0) -define(SXWORD_SIZE32, 0) -define(XWORD_SIZE32, 0) - -define(`DEFINE_ELF_MSIZE', - `ifdef($1`_SIZE', - `define($1_SIZE32,$1_SIZE) - define($1_SIZE64,$1_SIZE)', - `ifdef($1`_SIZE32',`', - `define($1_SIZE32,sizeof(Elf32_$2))') - ifdef($1`_SIZE64',`', - `define($1_SIZE64,sizeof(Elf64_$2))')')') -define(`DEFINE_ELF_MSIZES', - `ifelse($#,1,`', - `DEFINE_ELF_MSIZE($1) - DEFINE_ELF_MSIZES(shift($@))')') - -DEFINE_ELF_MSIZES(ELF_TYPE_LIST) - -define(`MSIZE', - `[ELF_T_$1] = { .msz32 = $1_SIZE32, .msz64 = $1_SIZE64 }, -') -define(`MSIZES', - `ifelse($#,1,`', - `MSIZE($1) -MSIZES(shift($@))')') - -divert(0) - -static struct msize msize[ELF_T_NUM] = { -MSIZES(ELF_TYPE_LIST) -}; - -size_t -_libelf_msize(Elf_Type t, int elfclass, unsigned int version) -{ - size_t sz; - - assert(elfclass == ELFCLASS32 || elfclass == ELFCLASS64); - assert((signed) t >= ELF_T_FIRST && t <= ELF_T_LAST); - - if (version != EV_CURRENT) { - LIBELF_SET_ERROR(VERSION, 0); - return (0); - } - - sz = (elfclass == ELFCLASS32) ? msize[t].msz32 : msize[t].msz64; - - return (sz); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_open.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_open.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_open.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_open.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,249 +0,0 @@ -/*- - * Copyright (c) 2006,2008-2011 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include - -#include -#include -#include -#include -#include - -#include "_libelf.h" - -#if ELFTC_HAVE_MMAP -#include -#endif - -ELFTC_VCSID("$Id: libelf_open.c 3007 2014-03-22 08:10:14Z jkoshy $"); - -#define _LIBELF_INITSIZE (64*1024) - -/* - * Read from a device file, pipe or socket. - */ -static void * -_libelf_read_special_file(int fd, size_t *fsz) -{ - ssize_t readsz; - size_t bufsz, datasz; - unsigned char *buf, *t; - - datasz = 0; - readsz = 0; - bufsz = _LIBELF_INITSIZE; - if ((buf = malloc(bufsz)) == NULL) - goto resourceerror; - - /* - * Read data from the file descriptor till we reach EOF, or - * till an error is encountered. - */ - do { - /* Check if we need to expand the data buffer. */ - if (datasz == bufsz) { - bufsz *= 2; - if ((t = realloc(buf, bufsz)) == NULL) - goto resourceerror; - buf = t; - } - - do { - assert(bufsz - datasz > 0); - t = buf + datasz; - if ((readsz = read(fd, t, bufsz - datasz)) <= 0) - break; - datasz += (size_t) readsz; - } while (datasz < bufsz); - - } while (readsz > 0); - - if (readsz < 0) { - LIBELF_SET_ERROR(IO, errno); - goto error; - } - - assert(readsz == 0); - - /* - * Free up extra buffer space. - */ - if (bufsz > datasz) { - if (datasz > 0) { - if ((t = realloc(buf, datasz)) == NULL) - goto resourceerror; - buf = t; - } else { /* Zero bytes read. */ - LIBELF_SET_ERROR(ARGUMENT, 0); - free(buf); - buf = NULL; - } - } - - *fsz = datasz; - return (buf); - -resourceerror: - LIBELF_SET_ERROR(RESOURCE, 0); -error: - if (buf != NULL) - free(buf); - return (NULL); -} - -/* - * Read the contents of the file referenced by the file descriptor - * 'fd'. - */ - -Elf * -_libelf_open_object(int fd, Elf_Cmd c, int reporterror) -{ - Elf *e; - void *m; - mode_t mode; - size_t fsize; - struct stat sb; - unsigned int flags; - - assert(c == ELF_C_READ || c == ELF_C_RDWR || c == ELF_C_WRITE); - - if (fstat(fd, &sb) < 0) { - LIBELF_SET_ERROR(IO, errno); - return (NULL); - } - - mode = sb.st_mode; - fsize = (size_t) sb.st_size; - - /* - * Reject unsupported file types. - */ - if (!S_ISREG(mode) && !S_ISCHR(mode) && !S_ISFIFO(mode) && - !S_ISSOCK(mode)) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - /* - * For ELF_C_WRITE mode, allocate and return a descriptor. - */ - if (c == ELF_C_WRITE) { - if ((e = _libelf_allocate_elf()) != NULL) { - _libelf_init_elf(e, ELF_K_ELF); - e->e_byteorder = LIBELF_PRIVATE(byteorder); - e->e_fd = fd; - e->e_cmd = c; - if (!S_ISREG(mode)) - e->e_flags |= LIBELF_F_SPECIAL_FILE; - } - - return (e); - } - - - /* - * ELF_C_READ and ELF_C_RDWR mode. - */ - m = NULL; - flags = 0; - if (S_ISREG(mode)) { - - /* - * Reject zero length files. - */ - if (fsize == 0) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - -#if ELFTC_HAVE_MMAP - /* - * Always map regular files in with 'PROT_READ' - * permissions. - * - * For objects opened in ELF_C_RDWR mode, when - * elf_update(3) is called, we remove this mapping, - * write file data out using write(2), and map the new - * contents back. - */ - m = mmap(NULL, fsize, PROT_READ, MAP_PRIVATE, fd, (off_t) 0); - - if (m == MAP_FAILED) - m = NULL; - else - flags = LIBELF_F_RAWFILE_MMAP; -#endif - - /* - * Fallback to a read() if the call to mmap() failed, - * or if mmap() is not available. - */ - if (m == NULL) { - if ((m = malloc(fsize)) == NULL) { - LIBELF_SET_ERROR(RESOURCE, 0); - return (NULL); - } - - if (read(fd, m, fsize) != (ssize_t) fsize) { - LIBELF_SET_ERROR(IO, errno); - free(m); - return (NULL); - } - - flags = LIBELF_F_RAWFILE_MALLOC; - } - } else if ((m = _libelf_read_special_file(fd, &fsize)) != NULL) - flags = LIBELF_F_RAWFILE_MALLOC | LIBELF_F_SPECIAL_FILE; - else - return (NULL); - - if ((e = _libelf_memory(m, fsize, reporterror)) == NULL) { - assert((flags & LIBELF_F_RAWFILE_MALLOC) || - (flags & LIBELF_F_RAWFILE_MMAP)); - if (flags & LIBELF_F_RAWFILE_MALLOC) - free(m); -#if ELFTC_HAVE_MMAP - else - (void) munmap(m, fsize); -#endif - return (NULL); - } - - /* ar(1) archives aren't supported in RDWR mode. */ - if (c == ELF_C_RDWR && e->e_kind == ELF_K_AR) { - (void) elf_end(e); - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - e->e_flags |= flags; - e->e_fd = fd; - e->e_cmd = c; - - return (e); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_phdr.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_phdr.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_phdr.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_phdr.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,153 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: libelf_phdr.c 3174 2015-03-27 17:13:41Z emaste $"); - -void * -_libelf_getphdr(Elf *e, int ec) -{ - size_t phnum; - size_t fsz, msz; - uint64_t phoff; - Elf32_Ehdr *eh32; - Elf64_Ehdr *eh64; - void *ehdr, *phdr; - int (*xlator)(unsigned char *_d, size_t _dsz, unsigned char *_s, - size_t _c, int _swap); - - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - - if (e == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if ((phdr = (ec == ELFCLASS32 ? - (void *) e->e_u.e_elf.e_phdr.e_phdr32 : - (void *) e->e_u.e_elf.e_phdr.e_phdr64)) != NULL) - return (phdr); - - /* - * Check the PHDR related fields in the EHDR for sanity. - */ - - if ((ehdr = _libelf_ehdr(e, ec, 0)) == NULL) - return (NULL); - - phnum = e->e_u.e_elf.e_nphdr; - - if (ec == ELFCLASS32) { - eh32 = (Elf32_Ehdr *) ehdr; - phoff = (uint64_t) eh32->e_phoff; - } else { - eh64 = (Elf64_Ehdr *) ehdr; - phoff = (uint64_t) eh64->e_phoff; - } - - fsz = gelf_fsize(e, ELF_T_PHDR, phnum, e->e_version); - - assert(fsz > 0); - - if ((uint64_t) e->e_rawsize < (phoff + fsz)) { - LIBELF_SET_ERROR(HEADER, 0); - return (NULL); - } - - msz = _libelf_msize(ELF_T_PHDR, ec, EV_CURRENT); - - assert(msz > 0); - - if ((phdr = calloc(phnum, msz)) == NULL) { - LIBELF_SET_ERROR(RESOURCE, 0); - return (NULL); - } - - if (ec == ELFCLASS32) - e->e_u.e_elf.e_phdr.e_phdr32 = phdr; - else - e->e_u.e_elf.e_phdr.e_phdr64 = phdr; - - - xlator = _libelf_get_translator(ELF_T_PHDR, ELF_TOMEMORY, ec); - (*xlator)(phdr, phnum * msz, e->e_rawfile + phoff, phnum, - e->e_byteorder != LIBELF_PRIVATE(byteorder)); - - return (phdr); -} - -void * -_libelf_newphdr(Elf *e, int ec, size_t count) -{ - void *ehdr, *newphdr, *oldphdr; - size_t msz; - - if (e == NULL) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if ((ehdr = _libelf_ehdr(e, ec, 0)) == NULL) { - LIBELF_SET_ERROR(SEQUENCE, 0); - return (NULL); - } - - assert(e->e_class == ec); - assert(ec == ELFCLASS32 || ec == ELFCLASS64); - assert(e->e_version == EV_CURRENT); - - msz = _libelf_msize(ELF_T_PHDR, ec, e->e_version); - - assert(msz > 0); - - newphdr = NULL; - if (count > 0 && (newphdr = calloc(count, msz)) == NULL) { - LIBELF_SET_ERROR(RESOURCE, 0); - return (NULL); - } - - if (ec == ELFCLASS32) { - if ((oldphdr = (void *) e->e_u.e_elf.e_phdr.e_phdr32) != NULL) - free(oldphdr); - e->e_u.e_elf.e_phdr.e_phdr32 = (Elf32_Phdr *) newphdr; - } else { - if ((oldphdr = (void *) e->e_u.e_elf.e_phdr.e_phdr64) != NULL) - free(oldphdr); - e->e_u.e_elf.e_phdr.e_phdr64 = (Elf64_Phdr *) newphdr; - } - - e->e_u.e_elf.e_nphdr = count; - - elf_flagphdr(e, ELF_C_SET, ELF_F_DIRTY); - - return (newphdr); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_shdr.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_shdr.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_shdr.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_shdr.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: libelf_shdr.c 3174 2015-03-27 17:13:41Z emaste $"); - -void * -_libelf_getshdr(Elf_Scn *s, int ec) -{ - Elf *e; - - if (s == NULL || (e = s->s_elf) == NULL || - e->e_kind != ELF_K_ELF) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - if (ec == ELFCLASSNONE) - ec = e->e_class; - - if (ec != e->e_class) { - LIBELF_SET_ERROR(CLASS, 0); - return (NULL); - } - - return ((void *) &s->s_shdr); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_xlate.c libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_xlate.c --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/libelf_xlate.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/libelf_xlate.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,148 +0,0 @@ -/*- - * Copyright (c) 2006,2008 Joseph Koshy - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include - -#include "_libelf.h" - -ELFTC_VCSID("$Id: libelf_xlate.c 3174 2015-03-27 17:13:41Z emaste $"); - -/* - * Translate to/from the file representation of ELF objects. - * - * Translation could potentially involve the following - * transformations: - * - * - an endianness conversion, - * - a change of layout, as the file representation of ELF objects - * can differ from their in-memory representation. - * - a change in representation due to a layout version change. - */ - -Elf_Data * -_libelf_xlate(Elf_Data *dst, const Elf_Data *src, unsigned int encoding, - int elfclass, int direction) -{ - int byteswap; - size_t cnt, dsz, fsz, msz; - uintptr_t sb, se, db, de; - - if (encoding == ELFDATANONE) - encoding = LIBELF_PRIVATE(byteorder); - - if ((encoding != ELFDATA2LSB && encoding != ELFDATA2MSB) || - dst == NULL || src == NULL || dst == src) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - - assert(elfclass == ELFCLASS32 || elfclass == ELFCLASS64); - assert(direction == ELF_TOFILE || direction == ELF_TOMEMORY); - - if (dst->d_version != src->d_version) { - LIBELF_SET_ERROR(UNIMPL, 0); - return (NULL); - } - - if (src->d_buf == NULL || dst->d_buf == NULL) { - LIBELF_SET_ERROR(DATA, 0); - return (NULL); - } - - if ((int) src->d_type < 0 || src->d_type >= ELF_T_NUM) { - LIBELF_SET_ERROR(DATA, 0); - return (NULL); - } - - if ((fsz = (elfclass == ELFCLASS32 ? elf32_fsize : elf64_fsize) - (src->d_type, (size_t) 1, src->d_version)) == 0) - return (NULL); - - msz = _libelf_msize(src->d_type, elfclass, src->d_version); - - assert(msz > 0); - - if (src->d_size % (direction == ELF_TOMEMORY ? fsz : msz)) { - LIBELF_SET_ERROR(DATA, 0); - return (NULL); - } - - /* - * Determine the number of objects that need to be converted, and - * the space required for the converted objects in the destination - * buffer. - */ - if (direction == ELF_TOMEMORY) { - cnt = (size_t) src->d_size / fsz; - dsz = cnt * msz; - } else { - cnt = (size_t) src->d_size / msz; - dsz = cnt * fsz; - } - - if (dst->d_size < dsz) { - LIBELF_SET_ERROR(DATA, 0); - return (NULL); - } - - sb = (uintptr_t) src->d_buf; - se = sb + (size_t) src->d_size; - db = (uintptr_t) dst->d_buf; - de = db + (size_t) dst->d_size; - - /* - * Check for overlapping buffers. Note that db == sb is - * allowed. - */ - if (db != sb && de > sb && se > db) { - LIBELF_SET_ERROR(DATA, 0); - return (NULL); - } - - if ((direction == ELF_TOMEMORY ? db : sb) % - _libelf_malign(src->d_type, elfclass)) { - LIBELF_SET_ERROR(DATA, 0); - return (NULL); - } - - dst->d_type = src->d_type; - dst->d_size = dsz; - - byteswap = encoding != LIBELF_PRIVATE(byteorder); - - if (src->d_size == 0 || - (db == sb && !byteswap && fsz == msz)) - return (dst); /* nothing more to do */ - - if (!(_libelf_get_translator(src->d_type, direction, elfclass)) - (dst->d_buf, dsz, src->d_buf, cnt, byteswap)) { - LIBELF_SET_ERROR(DATA, 0); - return (NULL); - } - - return (dst); -} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/Makefile libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/Makefile --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/Makefile 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/Makefile 1970-01-01 00:00:00.000000000 +0000 @@ -1,165 +0,0 @@ -# $Id: Makefile 2605 2012-10-02 17:52:20Z jkoshy $ - -TOP= ${.CURDIR}/.. - -LIB= elf - -SRCS= elf.c \ - elf_begin.c \ - elf_cntl.c \ - elf_end.c elf_errmsg.c elf_errno.c \ - elf_data.c \ - elf_fill.c \ - elf_flag.c \ - elf_getarhdr.c \ - elf_getarsym.c \ - elf_getbase.c \ - elf_getident.c \ - elf_hash.c \ - elf_kind.c \ - elf_memory.c \ - elf_next.c \ - elf_open.c \ - elf_rand.c \ - elf_rawfile.c \ - elf_phnum.c \ - elf_shnum.c \ - elf_shstrndx.c \ - elf_scn.c \ - elf_strptr.c \ - elf_update.c \ - elf_version.c \ - gelf_cap.c \ - gelf_checksum.c \ - gelf_dyn.c \ - gelf_ehdr.c \ - gelf_getclass.c \ - gelf_fsize.c \ - gelf_move.c \ - gelf_phdr.c \ - gelf_rel.c \ - gelf_rela.c \ - gelf_shdr.c \ - gelf_sym.c \ - gelf_syminfo.c \ - gelf_symshndx.c \ - gelf_xlate.c \ - libelf_align.c \ - libelf_allocate.c \ - libelf_ar.c \ - libelf_ar_util.c \ - libelf_checksum.c \ - libelf_data.c \ - libelf_ehdr.c \ - libelf_extended.c \ - libelf_memory.c \ - libelf_open.c \ - libelf_phdr.c \ - libelf_shdr.c \ - libelf_xlate.c \ - ${GENSRCS} - -INCS= libelf.h gelf.h -INCSDIR= /usr/include - -GENSRCS= libelf_fsize.c libelf_msize.c libelf_convert.c -CLEANFILES= ${GENSRCS} - -SHLIB_MAJOR= 1 - -WARNS?= 6 - -MAN= elf.3 \ - elf_begin.3 \ - elf_cntl.3 \ - elf_end.3 \ - elf_errmsg.3 \ - elf_fill.3 \ - elf_flagdata.3 \ - elf_getarhdr.3 \ - elf_getarsym.3 \ - elf_getbase.3 \ - elf_getdata.3 \ - elf_getident.3 \ - elf_getscn.3 \ - elf_getphdrnum.3 \ - elf_getphnum.3 \ - elf_getshdrnum.3 \ - elf_getshnum.3 \ - elf_getshdrstrndx.3 \ - elf_getshstrndx.3 \ - elf_hash.3 \ - elf_kind.3 \ - elf_memory.3 \ - elf_next.3 \ - elf_open.3 \ - elf_rawfile.3 \ - elf_rand.3 \ - elf_strptr.3 \ - elf_update.3 \ - elf_version.3 \ - gelf.3 \ - gelf_checksum.3 \ - gelf_fsize.3 \ - gelf_getcap.3 \ - gelf_getclass.3 \ - gelf_getdyn.3 \ - gelf_getehdr.3 \ - gelf_getmove.3 \ - gelf_getphdr.3 \ - gelf_getrel.3 \ - gelf_getrela.3 \ - gelf_getshdr.3 \ - gelf_getsym.3 \ - gelf_getsyminfo.3 \ - gelf_getsymshndx.3 \ - gelf_newehdr.3 \ - gelf_newphdr.3 \ - gelf_update_ehdr.3 \ - gelf_xlatetof.3 - -MLINKS+= \ - elf_errmsg.3 elf_errno.3 \ - elf_flagdata.3 elf_flagarhdr.3 \ - elf_flagdata.3 elf_flagehdr.3 \ - elf_flagdata.3 elf_flagelf.3 \ - elf_flagdata.3 elf_flagphdr.3 \ - elf_flagdata.3 elf_flagscn.3 \ - elf_flagdata.3 elf_flagshdr.3 \ - elf_getdata.3 elf_newdata.3 \ - elf_getdata.3 elf_rawdata.3 \ - elf_getscn.3 elf_ndxscn.3 \ - elf_getscn.3 elf_newscn.3 \ - elf_getscn.3 elf_nextscn.3 \ - elf_getshstrndx.3 elf_setshstrndx.3 \ - elf_open.3 elf_openmemory.3 \ - gelf_getcap.3 gelf_update_cap.3 \ - gelf_getdyn.3 gelf_update_dyn.3 \ - gelf_getmove.3 gelf_update_move.3 \ - gelf_getrel.3 gelf_update_rel.3 \ - gelf_getrela.3 gelf_update_rela.3 \ - gelf_getsym.3 gelf_update_sym.3 \ - gelf_getsyminfo.3 gelf_update_syminfo.3 \ - gelf_getsymshndx.3 gelf_update_symshndx.3 \ - gelf_update_ehdr.3 gelf_update_phdr.3 \ - gelf_update_ehdr.3 gelf_update_shdr.3 \ - gelf_xlatetof.3 gelf_xlatetom.3 - -.for E in 32 64 -MLINKS+= \ - gelf_checksum.3 elf${E}_checksum.3 \ - gelf_fsize.3 elf${E}_fsize.3 \ - gelf_getehdr.3 elf${E}_getehdr.3 \ - gelf_getphdr.3 elf${E}_getphdr.3 \ - gelf_getshdr.3 elf${E}_getshdr.3 \ - gelf_newehdr.3 elf${E}_newehdr.3 \ - gelf_newphdr.3 elf${E}_newphdr.3 \ - gelf_xlatetof.3 elf${E}_xlatetof.3 \ - gelf_xlatetof.3 elf${E}_xlatetom.3 -.endfor - -libelf_convert.c: elf_types.m4 libelf_convert.m4 -libelf_fsize.c: elf_types.m4 libelf_fsize.m4 -libelf_msize.c: elf_types.m4 libelf_msize.m4 - -.include "${TOP}/mk/elftoolchain.lib.mk" diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/os.FreeBSD.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/os.FreeBSD.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/os.FreeBSD.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/os.FreeBSD.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -# -# Building for a FreeBSD target. -# -# $Id: os.FreeBSD.mk 710 2010-02-17 14:21:38Z jkoshy $ - -# Symbol versioning support [FreeBSD 7.X and later] -VERSION_MAP= ${.CURDIR}/Version.map diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/os.NetBSD.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/os.NetBSD.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/os.NetBSD.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/os.NetBSD.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -# -# Build recipes for NetBSD. -# -# $Id: os.NetBSD.mk 710 2010-02-17 14:21:38Z jkoshy $ -# - -MKLINT= no # lint dies with a sigbus diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/Version.map libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/Version.map --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/libelf/Version.map 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/libelf/Version.map 1970-01-01 00:00:00.000000000 +0000 @@ -1,96 +0,0 @@ -/* $Id: Version.map 2574 2012-09-11 15:11:59Z jkoshy $ */ - -R1.0 { -global: - elf32_checksum; - elf32_fsize; - elf32_getehdr; - elf32_getphdr; - elf32_getshdr; - elf32_newehdr; - elf32_newphdr; - elf32_xlatetof; - elf32_xlatetom; - elf64_checksum; - elf64_fsize; - elf64_getehdr; - elf64_getphdr; - elf64_getshdr; - elf64_newehdr; - elf64_newphdr; - elf64_xlatetof; - elf64_xlatetom; - elf_begin; - elf_cntl; - elf_end; - elf_errmsg; - elf_errno; - elf_fill; - elf_flagarhdr; - elf_flagdata; - elf_flagehdr; - elf_flagelf; - elf_flagphdr; - elf_flagscn; - elf_flagshdr; - elf_getarhdr; - elf_getarsym; - elf_getbase; - elf_getdata; - elf_getident; - elf_getphdrnum; - elf_getphnum; - elf_getscn; - elf_getshdrnum; - elf_getshdrstrndx; - elf_getshnum; - elf_getshstrndx; - elf_hash; - elf_kind; - elf_memory; - elf_ndxscn; - elf_newdata; - elf_newscn; - elf_next; - elf_nextscn; - elf_open; - elf_openmemory; - elf_rand; - elf_rawdata; - elf_rawfile; - elf_setshstrndx; - elf_strptr; - elf_update; - elf_version; - gelf_checksum; - gelf_fsize; - gelf_getcap; - gelf_getclass; - gelf_getdyn; - gelf_getehdr; - gelf_getmove; - gelf_getphdr; - gelf_getrel; - gelf_getrela; - gelf_getshdr; - gelf_getsym; - gelf_getsyminfo; - gelf_getsymshndx; - gelf_newehdr; - gelf_newphdr; - gelf_update_cap; - gelf_update_dyn; - gelf_update_ehdr; - gelf_update_move; - gelf_update_phdr; - gelf_update_rel; - gelf_update_rela; - gelf_update_shdr; - gelf_update_sym; - gelf_update_syminfo; - gelf_update_symshndx; - gelf_xlatetof; - gelf_xlatetom; -local: - *; -}; diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.components.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.components.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.components.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.components.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -# -# $Id: elftoolchain.components.mk 3316 2016-01-11 22:48:22Z jkoshy $ -# - -# Knobs to turn parts of the source tree on or off. - -# Build the automation tools. -WITH_BUILD_TOOLS= no - -# Build additional tutorial documentation. (Manual page generation is -# controlled by the 'MKDOC' knob). -WITH_DOCUMENTATION=yes - -# Build the instruction set analyser. -WITH_ISA= no - -# Build PE support. -WITH_PE= yes - -# Build test suites. -WITH_TESTS= yes diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.inc.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.inc.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.inc.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.inc.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -# -# Rules for handling include files. -# -# $Id: elftoolchain.inc.mk 3245 2015-08-31 19:54:13Z emaste $ - -.if !defined(TOP) -.error Make variable \"TOP\" has not been defined. -.endif - -.include "${TOP}/mk/elftoolchain.os.mk" - -.include - -.if ${OS_HOST} == "Darwin" || ${OS_HOST} == "DragonFly" || \ - ${OS_HOST} == "FreeBSD" || ${OS_HOST} == "OpenBSD" -# Simulate . - -NOBINMODE?= 444 # Missing in OpenBSD's rule set. - -.PHONY: incinstall -includes: ${INCS} incinstall -.for inc in ${INCS} -install incinstall:: ${DESTDIR}${INCSDIR}/${inc} -.PRECIOUS: ${DESTDIR}${INCSDIR}/${inc} -${DESTDIR}${INCSDIR}/${inc}: ${inc} - cmp -s $> $@ > /dev/null 2>&1 || \ - ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m ${NOBINMODE} $> $@ -.endfor -.else - -# Provide a default 'install' target. -install: incinstall .PHONY - -# Use the standard . -.include -.endif diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.lib.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.lib.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.lib.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.lib.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -# -# $Id: elftoolchain.lib.mk 3026 2014-04-18 16:20:30Z jkoshy $ -# - -.if !defined(TOP) -.error Make variable \"TOP\" has not been defined. -.endif - -.include "${TOP}/mk/elftoolchain.os.mk" - -.include - -# Support a 'clobber' target. -clobber: clean os-specific-clobber .PHONY - -# Remove '.depend' files on a "make clean". -CLEANFILES+= .depend - -# Adjust CFLAGS -CFLAGS+= -I. # OBJDIR -CFLAGS+= -I${.CURDIR} # Sources -CFLAGS+= -I${TOP}/common # common code - -.if defined(LDADD) -_LDADD_LIBELF=${LDADD:M-lelf} -.if !empty(_LDADD_LIBELF) -CFLAGS+= -I${TOP}/libelf -LDFLAGS+= -L${TOP}/libelf -.endif -.endif - -# Note: include the M4 ruleset after bsd.lib.mk. -.include "${TOP}/mk/elftoolchain.m4.mk" - -.if defined(DEBUG) -CFLAGS:= ${CFLAGS:N-O*} -g -.endif - -.if ${OS_HOST} == "DragonFly" || ${OS_HOST} == "FreeBSD" -# Install headers too, in the 'install' phase. -install: includes -.elif ${OS_HOST} == "Linux" || ${OS_HOST} == "NetBSD" || ${OS_HOST} == "Minix" -install: incinstall -.elif ${OS_HOST} == "OpenBSD" - -# OpenBSD's standard make ruleset does not install header files. Provide -# an alternative. - -NOBINMODE?= 444 - -install: ${INCS} incinstall - -.for inc in ${INCS} -incinstall:: ${DESTDIR}${INCSDIR}/${inc} -.PRECIOUS: ${DESTDIR}${INCSDIR}/${inc} -${DESTDIR}${INCSDIR}/${inc}: ${inc} - cmp -s $> $@ > /dev/null 2>&1 || \ - ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m ${NOBINMODE} $> $@ -.endfor - -.endif # OpenBSD - -# Bring in rules related to test code. -.include "${TOP}/mk/elftoolchain.test.mk" diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.m4.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.m4.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.m4.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.m4.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -# -# $Id: elftoolchain.m4.mk 2795 2012-12-19 12:39:09Z jkoshy $ -# - -# Implicit rules for the M4 pre-processor. - -.if !defined(TOP) -.error Make variable \"TOP\" has not been defined. -.endif - -.SUFFIXES: .m4 .c -.m4.c: - m4 -D SRCDIR=${.CURDIR} ${M4FLAGS} ${.IMPSRC} > ${.TARGET} - diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.os.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.os.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.os.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.os.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -# -# $Id: elftoolchain.os.mk 2985 2014-03-06 03:24:35Z jkoshy $ -# - -# OS specific build instructions - -.if !defined(OS_HOST) - -# Determine the host operating system flavor. -OS_HOST != uname -s - -# Bring in OS-specific Makefiles, if they exist -.if exists(${TOP}/mk/os.${OS_HOST}.mk) -.include "${TOP}/mk/os.${OS_HOST}.mk" -.endif - -# Bring in per-subproject OS-specific Makefiles, if they exist -.if exists(${.CURDIR}/os.${OS_HOST}.mk) -.include "${.CURDIR}/os.${OS_HOST}.mk" -.endif - -# Supply an OS-specific "clobber" rule, if one was not specified. -.if !target(os-specific-clobber) -os-specific-clobber: .PHONY -.endif -.endif diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.prog.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.prog.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.prog.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.prog.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -# -# Rules for building programs. -# -# $Id: elftoolchain.prog.mk 3352 2016-01-18 21:50:10Z jkoshy $ - -.if !defined(TOP) -.error Make variable \"TOP\" has not been defined. -.endif - -.include "${TOP}/mk/elftoolchain.os.mk" - -LIBDWARF?= ${TOP}/libdwarf -LIBELF?= ${TOP}/libelf -LIBELFTC?= ${TOP}/libelftc - -BINDIR?= /usr/bin - -CFLAGS+= -I. -I${.CURDIR} -I${TOP}/common -CLEANFILES+= .depend - -.if defined(LDADD) -_LDADD_LIBDWARF=${LDADD:M-ldwarf} -.if !empty(_LDADD_LIBDWARF) -CFLAGS+= -I${TOP}/libdwarf -LDFLAGS+= -L${TOP}/libdwarf -.endif - -_LDADD_LIBELF=${LDADD:M-lelf} -.if !empty(_LDADD_LIBELF) -CFLAGS+= -I${TOP}/libelf -LDFLAGS+= -L${TOP}/libelf -.endif - -_LDADD_LIBELFTC=${LDADD:M-lelftc} -.if !empty(_LDADD_LIBELFTC) -CFLAGS+= -I${TOP}/libelftc -LDFLAGS+= -L${TOP}/libelftc -.endif - -_LDADD_LIBPE=${LDADD:M-lpe} -.if !empty(_LDADD_LIBPE) -CFLAGS+= -I${TOP}/libpe -LDFLAGS+= -L${TOP}/libpe -.endif -.endif - -_LDADD_LIBARCHIVE=${LDADD:M-larchive} -.if !empty(_LDADD_LIBARCHIVE) && ${OS_HOST} == NetBSD -CFLAGS+= -I/usr/pkg/include -LDFLAGS+= -L/usr/pkg/lib -.endif - -# -# Handle lex(1) and yacc(1) in a portable fashion. -# -# New makefile variables used: -# -# LSRC -- a lexer definition suitable for use with lex(1) -# YSRC -- a parser definition for use with yacc(1) - -# Use standard rules from for building lexers. -.if defined(LSRC) -SRCS+= ${LSRC} -.endif - -# Handle the generation of yacc based parsers. -# If the program uses a lexer, add an automatic dependency -# on the generated parser header. -.if defined(YSRC) -.for _Y in ${YSRC} -SRCS+= ${_Y:R}.c -CLEANFILES+= ${_Y:R}.c ${_Y:R}.h -${_Y:R}.c ${_Y:R}.h: ${_Y} - ${YACC} -d -o ${_Y:R}.c ${.ALLSRC} - -.if defined(LSRC) -.for _L in ${LSRC} -${_L:R}.o: ${_Y:R}.h -.endfor -.endif - -.endfor -.endif - -.include - -# Note: include the M4 ruleset after bsd.prog.mk. -.include "${TOP}/mk/elftoolchain.m4.mk" - -# Support a 'clobber' target. -clobber: clean os-specific-clobber .PHONY - -.if defined(DEBUG) -CFLAGS:= ${CFLAGS:N-O*} -g -.endif - -# Bring in rules related to test code. -.include "${TOP}/mk/elftoolchain.test.mk" diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.subdir.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.subdir.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.subdir.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.subdir.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -# -# Rules for recursing into directories -# $Id: elftoolchain.subdir.mk 3023 2014-04-17 18:06:06Z jkoshy $ - -# Pass down 'test' as a valid target. - -.include "$(TOP)/mk/elftoolchain.os.mk" - -.if ${OS_HOST} == DragonFly -clobber test:: _SUBDIR -.elif ${OS_HOST} == FreeBSD -SUBDIR_TARGETS+= clobber test -.elif ${OS_HOST} == OpenBSD -clobber test:: _SUBDIRUSE -.else # NetBSD, pmake on Linux -TARGETS+= cleandepend clobber test -.endif - -.include diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.test.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.test.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.test.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.test.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -# $Id: elftoolchain.test.mk 2068 2011-10-26 15:49:07Z jkoshy $ - -# -# Rules for invoking test suites. -# - -TEST_DIRECTORY= test -TEST_TARGET= test - -# The special target 'test' runs the test suite associated with a -# utility or library. -test: all .PHONY - cd ${TOP}/${TEST_DIRECTORY}/${.CURDIR:T} && \ - ${MAKE} all ${TEST_TARGET} diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tetbase.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tetbase.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tetbase.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tetbase.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -# $Id$ - -# Convenience rules for the top level directory containing a TET-based test -# suite. - -.if !defined(TOP) -.error Make variable \"TOP\" has not been defined. -.endif - -.include "${TOP}/mk/elftoolchain.tetvars.mk" - -.MAIN: all -.PHONY: clobber execute tccbuild tccclean test - - -# Set up the environment for invoking "tcc", based on the target -# specified. - -.if !defined(TET_EXECUTE) -TET_EXECUTE= ${.OBJDIR} -.endif - -.if make(tccbuild) -TET_OPTIONS+= -b -.endif - -.if make(tccclean) -TET_OPTIONS+= -c -.endif - -.if make(execute) || make(test) -TET_OPTIONS+= -e -.endif - -execute tccbuild tccclean test: - TET_ROOT=${TET_ROOT} TET_EXECUTE=${TET_EXECUTE} \ - TET_SUITE_ROOT=${.CURDIR} ${TET_ROOT}/bin/tcc ${TET_OPTIONS} . - -clobber: clean - rm -rf ${TET_RESULTS_DIR} ${TET_TMP_DIR} - -# Ensure that a 'make test' does not recurse further into the test suite's -# directory hierarchy. -.if !make(test) -.include "${TOP}/mk/elftoolchain.subdir.mk" -.endif diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tet.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tet.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tet.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tet.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -# $Id: elftoolchain.tet.mk 2844 2012-12-31 03:30:20Z jkoshy $ -# -# Rules for handling TET based test suites. -# - -.if !defined(TOP) -.error Make variable \"TOP\" has not been defined. -.endif - -.include "${TOP}/mk/elftoolchain.tetvars.mk" - -# Inform make(1) about the suffixes we use. -.SUFFIXES: .lsb32 .lsb64 .msb32 .msb64 .yaml - -TS_ROOT?= ${.CURDIR:H} -TS_OBJROOT?= ${.OBJDIR:H} - -TS_BASE= ${TOP}/test/tet - -TET_LIBS= ${TET_ROOT}/lib/tet3 -TET_OBJS= ${TET_LIBS}/tcm.o - -CFLAGS+= -I${TET_ROOT}/inc/tet3 -I${TS_ROOT}/common - -# Bring in test-suite specific definitions, if any. -.if exists(${.CURDIR}/../Makefile.tset) -.include "${.CURDIR}/../Makefile.tset" -.endif - -.if defined(TS_SRCS) -PROG= tc_${.CURDIR:T:R} - -_C_SRCS= ${TS_SRCS:M*.c} -_M4_SRCS= ${TS_SRCS:M*.m4} - -SRCS= ${_C_SRCS} ${_M4_SRCS} # See . -CLEANFILES+= ${_M4_SRCS:S/.m4$/.c/g} ${TS_DATA} - -${PROG}: ${TS_DATA} - -.if defined(GENERATE_TEST_SCAFFOLDING) -_TC_SRC= ${.OBJDIR}/tc.c # Test driver. -_TC_SCN= tet_scen # Scenario file. - -SRCS+= ${_TC_SRC} -CLEANFILES+= ${_TC_SRC} ${_TC_SCN} - -# Generate the driver file "tc.c" from the objects comprising the test case. -_TS_OBJS= ${_C_SRCS:S/.c$/.o/g} ${_M4_SRCS:S/.m4$/.o/g} -_MUNGE_TS= ${TS_BASE}/bin/munge-ts -${_TC_SRC}: ${_TS_OBJS} - ${_MUNGE_TS} -o ${.TARGET} -p ${.CURDIR:H:T}/${.CURDIR:T:R}/${PROG} \ - -s ${_TC_SCN} ${.ALLSRC} -.endif -.endif - -# M4->C translation. -M4FLAGS+= -I${TS_ROOT}/common -I${TS_BASE}/common - -.include "${TOP}/mk/elftoolchain.m4.mk" - -LDADD+= ${TET_OBJS} -L${TET_LIBS} -lapi -CLEANFILES+= tet_xres tet_captured - -ELFTOOLCHAIN_AR= ${TOP}/ar/ar - -.include "${TOP}/mk/elftoolchain.prog.mk" diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tetvars.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tetvars.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tetvars.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tetvars.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -# -# Configuration information for TET. -# -# $Id: elftoolchain.tetvars.mk 2137 2011-11-10 13:09:30Z jkoshy $ -# - -.if !defined(TOP) -.error Make variable \"TOP\" has not been defined. -.endif - -# Set TET_ROOT and version. -TET_VERSION?= 3.8 -TET_ROOT?= ${TOP}/test/tet/tet${TET_VERSION} - -TET_DOWNLOAD_URL= \ - http://tetworks.opengroup.org/downloads/38/software/Sources/${TET_VERSION}/tet${TET_VERSION}-src.tar.gz - -# The directory where test journals are placed. -TET_RESULTS_DIR?= results - -# The temporary directory used by TET. -TET_TMP_DIR?= tet_tmp_dir diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tex.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tex.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tex.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/elftoolchain.tex.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -# -# Rules to build LateX documentation. -# -# $Id: elftoolchain.tex.mk 2552 2012-08-28 03:39:09Z jkoshy $ -# - -.include "${TOP}/mk/elftoolchain.os.mk" - -.if defined(MKTEX) && ${MKTEX} == "yes" && exists(${MPOST}) && exists(${PDFLATEX}) - -TEXINPUTS= `kpsepath tex`:${.CURDIR} -_TEX= TEXINPUTS=${TEXINPUTS} ${PDFLATEX} -file-line-error \ - -halt-on-error - -DOCSUBDIR= elftoolchain # Destination directory. - -.MAIN: all - -all: ${DOC}.pdf .PHONY - -# Build an index. -# -# First, we need to remove the existing ".ind" file and run `latex` once -# to generate it afresh. This generates the appropriate ".idx" files used -# by `makeindex`. -# Next, `makeindex` is used to create the ".ind" file. -# Then another set of `latex` runs serves to typeset the index. -index: .PHONY - rm -f ${DOC}.ind - ${_TEX} ${DOC}.tex - ${MAKEINDEX} ${DOC}.idx - ${_TEX} ${DOC}.tex - @if grep 'Rerun to get' ${DOC}.log > /dev/null; then \ - ${_TEX} ${DOC}.tex; \ - fi - -# Recognize additional suffixes. -.SUFFIXES: .mp .eps .tex .pdf - -# Rules to build MetaPost figures. -.mp.eps: - @if [ "${.OBJDIR}" != "${.CURDIR}" ]; then cp ${.CURDIR}/${.IMPSRC:T} ${.OBJDIR}/; fi - TEX=${MPOSTTEX} ${MPOST} -halt-on-error ${.IMPSRC:T} || (rm ${.IMPSRC:T:R}.1; false) - mv ${.IMPSRC:T:R}.1 ${.TARGET} -.eps.pdf: - ${EPSTOPDF} ${.IMPSRC} > ${.TARGET} || (rm ${.TARGET}; false) - -.for f in ${IMAGES_MP} -${f:R}.eps: ${.CURDIR}/${f} -CLEANFILES+= ${f:R}.eps ${f:R}.log ${f:R}.pdf ${f:R}.mpx -.endfor - -CLEANFILES+= mpxerr.tex mpxerr.log makempx.log missfont.log - -${DOC}.pdf: ${SRCS} ${IMAGES_MP:S/.mp$/.pdf/g} - ${_TEX} ${.CURDIR}/${DOC}.tex > /dev/null || \ - (cat ${DOC}.log; rm -f ${.TARGET}; exit 1) - @if grep 'undefined references' ${DOC}.log > /dev/null; then \ - ${_TEX} ${.CURDIR}/${DOC}.tex > /dev/null; \ - fi - @if grep 'Rerun to get' ${DOC}.log > /dev/null; then \ - ${_TEX} ${.CURDIR}/${DOC}.tex > /dev/null; \ - fi - -.for f in aux log out pdf toc ind idx ilg -CLEANFILES+= ${DOC}.${f} -.endfor - -# Do something sensible for the `depend` and `cleandepend` targets. -depend: .depend - @true -.depend: - @echo ${DOC}.pdf: ${SRCS} ${IMAGES_MP:S/.mp$/.pdf/g} > ${.TARGET} -cleandepend: .PHONY - rm -f .depend - -clean clobber: .PHONY - rm -f ${CLEANFILES} - -install: all - @mkdir -p ${DESTDIR}/${DOCDIR}/${DOCSUBDIR} - ${INSTALL} -g ${DOCGRP} -o ${DOCOWN} ${DOC}.pdf \ - ${DESTDIR}/${DOCDIR}/${DOCSUBDIR} - -# Include rules for `make obj` -.include - -.else - -all clean clobber depend install obj: .PHONY .SILENT - echo -n WARNING: make \"${.TARGET}\" in \"${.CURDIR:T}\" skipped: -.if defined(MKTEX) && ${MKTEX} == "yes" - echo " missing tools." -.else - echo " builds of TeX documentation are disabled." -.endif - true -.endif diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/os.Darwin.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/os.Darwin.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/os.Darwin.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/os.Darwin.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -# $Id$ -# -# Build definitions for Darwin - -# Apple ships libarchive, but for some reason does not provide the headers. -# Build against a homebrew-provided libarchive library and headers. -LDFLAGS+= -L/usr/local/opt/libarchive/lib -CFLAGS+= -I/usr/local/opt/libarchive/include diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/os.DragonFly.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/os.DragonFly.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/os.DragonFly.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/os.DragonFly.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -# $Id: os.DragonFly.mk 2569 2012-09-04 16:34:04Z jkoshy $ -# -# Build definitions for DragonFly - -MKTESTS?= yes # Enable the test suites. -MKDOC?= yes # Build documentation. -MKNOWEB?= no # Build literate programs. - -NOSHARED= yes # Link programs statically by default. diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/os.FreeBSD.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/os.FreeBSD.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/os.FreeBSD.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/os.FreeBSD.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -# $Id: os.FreeBSD.mk 2569 2012-09-04 16:34:04Z jkoshy $ -# -# Build definitions for FreeBSD - -MKDOC?= yes # Build documentation. -MKTESTS?= yes # Enable the test suites. -MKTEX?= yes # TeX and friends are packaged in the teTeX package. -MKNOWEB?= no # Build literate programs. - -# Link programs statically by default. -NO_SHARED?= yes - -.if defined(MKTEX) && ${MKTEX} == "yes" -EPSTOPDF?= /usr/local/bin/epstopdf -MAKEINDEX?= /usr/local/bin/makeindex -MPOSTTEX?= /usr/local/bin/latex -MPOST?= /usr/local/bin/mpost -PDFLATEX?= /usr/local/bin/pdflatex -.endif - -# Translate the spelling of a build knob (see ticket #316). -.if defined(NOMAN) -NO_MAN= yes -.endif - -# Literate programming utility. -NOWEB?= /usr/local/bin/noweb diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/os.Linux.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/os.Linux.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/os.Linux.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/os.Linux.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -# $Id: os.Linux.mk 3103 2014-11-02 10:07:01Z jkoshy $ -# -# Build recipes for GNU/Linux based operating systems. - -OS_DISTRIBUTION != lsb_release -s -i || echo unknown -OS_DISTRIBUTION_VERSION != lsb_release -s -r || echo unknown - -.if ${OS_DISTRIBUTION} == "unknown" || \ - ${OS_DISTRIBUTION_VERSION} == "unknown" -.error ERROR: Unknown host OS distribution. -.endif - -MKDOC?= yes # Build documentation. -MKLINT?= no -MKPIC?= no -MKNOWEB?= yes # Build literate programs. -MKTESTS?= yes # Enable the test suites. -MKTEX?= yes # Build TeX-based documentation. - -OBJECT_FORMAT= ELF # work around a bug in the pmake package - -YFLAGS+= -d # force bison to write y.tab.h - -EPSTOPDF?= /usr/bin/epstopdf -MAKEINDEX?= /usr/bin/makeindex -MPOST?= /usr/bin/mpost -MPOSTTEX?= /usr/bin/latex -NOWEB?= /usr/bin/noweb -PDFLATEX?= /usr/bin/pdflatex diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/os.Minix.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/os.Minix.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/os.Minix.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/os.Minix.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -# $Id: os.Minix.mk 2569 2012-09-04 16:34:04Z jkoshy $ -# -# Build definitions for Minix 3.2.0. - -MKDOC?= yes # Build documentation. -MKTESTS?= no # Enable the test suites. -MKNOWEB?= no # Build literate programs. - -# Use GCC to compile the source tree. -CC=/usr/pkg/bin/gcc - -# Use the correct compiler type (override ). -COMPILER_TYPE=gnu - -# Also choose GNU 'ar'. -AR=ar diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/os.NetBSD.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/os.NetBSD.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/os.NetBSD.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/os.NetBSD.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -# $Id: os.NetBSD.mk 2986 2014-03-06 03:29:12Z jkoshy $ -# -# Build recipes for NetBSD. - -LDSTATIC?= -static # link programs statically - -MKDOC?= yes # Build documentation. -MKLINT?= no # lint dies with a sigbus -MKTESTS?= yes # Enable the test suites. -MKNOWEB?= no # Build literate programs. - -# Literate programming utility. -NOWEB?= /usr/pkgsrc/bin/noweb - -# NetBSD's 'clean' target does not remove 'cat[0-9]' and 'html[0-9]' -# files generate from manual page sources. Augment the 'clobber' -# target to remove these. -os-specific-clobber: .PHONY -.for f in cat html - rm -f ${MANPAGES:@M@${M:R}.$f${M:E}@} -.endfor diff -Nru libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/os.OpenBSD.mk libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/os.OpenBSD.mk --- libnvidia-container-1.3.0/deps/src/elftoolchain-0.7.1/mk/os.OpenBSD.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/deps/src/elftoolchain-0.7.1/mk/os.OpenBSD.mk 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -# $Id$ -# -# Build recipes for OpenBSD. - -MKDOC?= no # Build documentation. -MKTESTS?= no # Enable the test suites. -MKNOWEB?= no # Build literate programs. - -NOPIC?= yes Binary files /tmp/tmpivobny88/1DDCwbDLg8/libnvidia-container-1.3.0/deps/src/nvidia-modprobe-450.57/modprobe-utils/libnvidia-modprobe-utils.a and /tmp/tmpivobny88/7DioykifVm/libnvidia-container-1.4.0/deps/src/nvidia-modprobe-450.57/modprobe-utils/libnvidia-modprobe-utils.a differ Binary files /tmp/tmpivobny88/1DDCwbDLg8/libnvidia-container-1.3.0/deps/src/nvidia-modprobe-450.57/modprobe-utils/nvidia-modprobe-utils.o and /tmp/tmpivobny88/7DioykifVm/libnvidia-container-1.4.0/deps/src/nvidia-modprobe-450.57/modprobe-utils/nvidia-modprobe-utils.o differ Binary files /tmp/tmpivobny88/1DDCwbDLg8/libnvidia-container-1.3.0/deps/src/nvidia-modprobe-450.57/modprobe-utils/pci-sysfs.o and /tmp/tmpivobny88/7DioykifVm/libnvidia-container-1.4.0/deps/src/nvidia-modprobe-450.57/modprobe-utils/pci-sysfs.o differ diff -Nru libnvidia-container-1.3.0/deps/usr/include/nvidia-modprobe-utils.h libnvidia-container-1.4.0/deps/usr/include/nvidia-modprobe-utils.h --- libnvidia-container-1.3.0/deps/usr/include/nvidia-modprobe-utils.h 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/deps/usr/include/nvidia-modprobe-utils.h 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2013, NVIDIA CORPORATION. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * This file provides utility functions on Linux for loading the + * NVIDIA kernel module and creating NVIDIA device files. + */ + +#ifndef __NVIDIA_MODPROBE_UTILS_H__ +#define __NVIDIA_MODPROBE_UTILS_H__ + +#include + +#define NV_MAX_CHARACTER_DEVICE_FILE_STRLEN 128 +#define NV_CTL_DEVICE_NUM 255 +#define NV_MODESET_MINOR_DEVICE_NUM 254 +#define NV_NVSWITCH_CTL_MINOR 255 + +#define NV_DEVICE_FILE_PATH "/dev/nvidia%d" +#define NV_CTRL_DEVICE_FILE_PATH "/dev/nvidiactl" +#define NV_MODESET_DEVICE_NAME "/dev/nvidia-modeset" +#define NV_VGPU_VFIO_DEVICE_NAME "/dev/nvidia-vgpu%d" +#define NV_NVLINK_DEVICE_NAME "/dev/nvidia-nvlink" +#define NV_NVSWITCH_CTL_NAME "/dev/nvidia-nvswitchctl" +#define NV_NVSWITCH_DEVICE_NAME "/dev/nvidia-nvswitch%d" + +#define NV_CAPS_MODULE_NAME "nvidia-caps" +#define NV_CAP_DEVICE_NAME "/dev/" NV_CAPS_MODULE_NAME "/nvidia-cap%d" + +#if defined(NV_LINUX) + +typedef enum +{ + NvDeviceFileStateFileExists = 0, + NvDeviceFileStateChrDevOk, + NvDeviceFileStatePermissionsOk +} NvDeviceFileState; + +static __inline__ void nvidia_update_file_state(int *state, + NvDeviceFileState value) +{ + *state |= (1 << value); +} + +static __inline__ int nvidia_test_file_state(int state, + NvDeviceFileState value) +{ + return !!(state & (1 << value)); +} + +int nvidia_get_file_state(int minor); +int nvidia_modprobe(const int print_errors); +int nvidia_mknod(int minor); +int nvidia_uvm_modprobe(void); +int nvidia_uvm_mknod(int base_minor); +int nvidia_modeset_modprobe(void); +int nvidia_modeset_mknod(void); +int nvidia_vgpu_vfio_mknod(int minor_num); +int nvidia_nvlink_mknod(void); +int nvidia_nvlink_get_file_state(void); +int nvidia_nvswitch_mknod(int minor); +int nvidia_nvswitch_get_file_state(int minor); +int nvidia_cap_mknod(const char* cap_file_path, int *minor); +int nvidia_cap_get_file_state(const char* cap_file_path); +int nvidia_cap_get_device_file_attrs(const char* cap_file_path, int *major, int *minor, char *name); +int nvidia_get_chardev_major(const char *name); + +#endif /* NV_LINUX */ + +/* + * Construct the device file name, based on 'minor'. If an error + * occurs, the nul terminator will be written to name[0]. + */ +static __inline__ void assign_device_file_name +( + char name[NV_MAX_CHARACTER_DEVICE_FILE_STRLEN], + int minor +) +{ + int ret; + + if ((minor < 0) || (minor > NV_CTL_DEVICE_NUM)) + { + goto fail; + } + + if (minor == NV_CTL_DEVICE_NUM) + { + ret = snprintf(name, + NV_MAX_CHARACTER_DEVICE_FILE_STRLEN, + NV_CTRL_DEVICE_FILE_PATH); + } + else + { + ret = snprintf(name, + NV_MAX_CHARACTER_DEVICE_FILE_STRLEN, + NV_DEVICE_FILE_PATH, minor); + } + + if (ret <= 0) + { + goto fail; + } + + name[NV_MAX_CHARACTER_DEVICE_FILE_STRLEN - 1] = '\0'; + + return; + +fail: + + name[0] = '\0'; +} + +#endif /* __NVIDIA_MODPROBE_UTILS_H__ */ diff -Nru libnvidia-container-1.3.0/deps/usr/include/pci-enum.h libnvidia-container-1.4.0/deps/usr/include/pci-enum.h --- libnvidia-container-1.3.0/deps/usr/include/pci-enum.h 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/deps/usr/include/pci-enum.h 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,112 @@ +/* + * (C) Copyright IBM Corporation 2006 + * + * Copyright (c) 2007 Paulo R. Zanoni, Tiago Vignatti + * + * Copyright 2009 Red Hat, Inc. + * + * Copyright (c) 2014 NVIDIA Corporation + * + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +/** + * pci-enum.h + * + * Based on libpciaccess/include/pciaccess.h from libpciaccess-0.12.1, which + * can be found here: + * + * http://cgit.freedesktop.org/xorg/lib/libpciaccess + * + * Original authors: Ian Romanick , Paulo R. Zanoni, + * Tiago Vignatti + */ + +#ifndef PCI_ENUM_H +#define PCI_ENUM_H + +#include + +struct pci_id_match; + +#ifdef __cplusplus +extern "C" { +#endif + +int pci_enum_match_id(struct pci_id_match *); + +#ifdef __cplusplus +} +#endif + +#define PCI_MATCH_ANY (~0U) + +#define PCI_BASE_CLASS_MASK 0xff00 +#define PCI_SUB_CLASS_MASK 0x00ff +#define PCI_FULL_CLASS_MASK PCI_BASE_CLASS_MASK | PCI_SUB_CLASS_MASK + +/** + * Compare two PCI ID values (either vendor or device). This is used + * internally to compare the fields of pci_id_match to the fields of + * pci_device. + */ +#define PCI_ID_COMPARE(a, b) \ + (((a) == PCI_MATCH_ANY) || ((a) == (b))) + +/** + */ +struct pci_id_match { + /** + * Device/vendor matching controls + * + * Control the search based on the device, vendor, subdevice, or subvendor + * IDs. Setting any of these fields to PCI_MATCH_ANY will cause the field + * to not be used in the comparison. + */ + /*@{*/ + uint32_t vendor_id; + uint32_t device_id; + uint32_t subvendor_id; + uint32_t subdevice_id; + /*@}*/ + + + /** + * Device class matching controls + * + * Device's class and subclass. The class is at bits [15:8], subclass is at + * bits [7:0]. + */ + /*@{*/ + uint16_t device_class; + uint16_t device_class_mask; + /*@}*/ + + /** + * Match results + * + * Specifies the number of devices found that match this criteria. + */ + /*@{*/ + uint16_t num_matches; +}; + +#endif /* PCI_ENUM_H */ Binary files /tmp/tmpivobny88/1DDCwbDLg8/libnvidia-container-1.3.0/deps/usr/lib/x86_64-linux-gnu/libnvidia-modprobe-utils.a and /tmp/tmpivobny88/7DioykifVm/libnvidia-container-1.4.0/deps/usr/lib/x86_64-linux-gnu/libnvidia-modprobe-utils.a differ diff -Nru libnvidia-container-1.3.0/.gitattributes libnvidia-container-1.4.0/.gitattributes --- libnvidia-container-1.3.0/.gitattributes 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/.gitattributes 2021-08-12 09:45:44.000000000 +0000 @@ -1,2 +1 @@ -assets/elftoolchain.tar.bz2 filter=lfs diff=lfs merge=lfs -text -assets/nvidia-modprobe.tar.gz filter=lfs diff=lfs merge=lfs -text +deps/src/nvidia-modprobe-450.57/ filter=lfs diff=lfs merge=lfs -text diff -Nru libnvidia-container-1.3.0/.gitignore libnvidia-container-1.4.0/.gitignore --- libnvidia-container-1.3.0/.gitignore 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/.gitignore 2021-08-12 09:45:44.000000000 +0000 @@ -9,6 +9,7 @@ libnvidia-container.so* .debug +deps src/build.h src/driver_clt.c diff -Nru libnvidia-container-1.3.0/.gitlab-ci.yml libnvidia-container-1.4.0/.gitlab-ci.yml --- libnvidia-container-1.3.0/.gitlab-ci.yml 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/.gitlab-ci.yml 2021-08-12 09:45:44.000000000 +0000 @@ -64,41 +64,41 @@ build-one-amd64: <<: *build-one-setup script: - - make ubuntu18.04-amd64 + - make -f mk/docker.mk ubuntu18.04-amd64 build-one-ppc64le: <<: *build-one-setup script: - - make ubuntu18.04-ppc64le + - make -f mk/docker.mk ubuntu18.04-ppc64le build-one-arm64: <<: *build-one-setup script: - - make ubuntu18.04-arm64 + - make -f mk/docker.mk ubuntu18.04-arm64 # The full set of build-all jobs organized to # have builds for each ARCH run in parallel. build-all-amd64: <<: *build-all-setup script: - - make docker-amd64 + - make -f mk/docker.mk docker-amd64 build-all-x86_64: <<: *build-all-setup script: - - make docker-x86_64 + - make -f mk/docker.mk docker-x86_64 build-all-ppc64le: <<: *build-all-setup script: - - make docker-ppc64le + - make -f mk/docker.mk docker-ppc64le build-all-arm64: <<: *build-all-setup script: - - make docker-arm64 + - make -f mk/docker.mk docker-arm64 build-all-aarch64: <<: *build-all-setup script: - - make docker-aarch64 + - make -f mk/docker.mk docker-aarch64 diff -Nru libnvidia-container-1.3.0/Jenkinsfile libnvidia-container-1.4.0/Jenkinsfile --- libnvidia-container-1.3.0/Jenkinsfile 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/Jenkinsfile 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,70 @@ +/* +# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +*/ + +def getBuildClosure(def architecture, def makeCommand, def makeTarget) { + return { + container('docker') { + stage(architecture) { + sh "${makeCommand} -f mk/docker.mk ${makeTarget}" + } + } + } +} + +def getBuildStagesForArchitectures(def architectures, def makeCommand, def makeTargetPrefix) { + stages = [:] + + for (a in architectures) { + stages[a] = getBuildClosure(a, makeCommand, "${makeTargetPrefix}-${a}") + } + + return stages +} + +def getSingleBuildForArchitectures(def architectures) { + return getBuildStagesForArchitectures(architectures, "make", "ubuntu18.04") +} + +def getAllBuildForArchitectures(def architectures) { + // TODO: For the time being we only echo the command for the "all" stages + return getBuildStagesForArchitectures(architectures, "echo make", "docker") +} + +podTemplate (cloud:'sw-gpu-cloudnative', + containers: [ + containerTemplate(name: 'docker', image: 'docker:dind', ttyEnabled: true, privileged: true) + ]) { + node(POD_LABEL) { + stage('checkout') { + checkout scm + } + stage('dependencies') { + container('docker') { + sh 'apk add --no-cache make bash' + } + } + stage('build-one') { + parallel ( + getSingleBuildForArchitectures(["amd64", "ppc64le", "arm64"]) + ) + } + stage('build-all') { + parallel ( + getAllBuildForArchitectures(["amd64", "ppc64le", "arm64", "x86_64", "aarch64"]) + ) + } + } +} \ No newline at end of file diff -Nru libnvidia-container-1.3.0/Makefile libnvidia-container-1.4.0/Makefile --- libnvidia-container-1.3.0/Makefile 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/Makefile 2021-08-12 09:45:44.000000000 +0000 @@ -1,18 +1,27 @@ +# Copyright (c) 2017-2021, NVIDIA CORPORATION. All rights reserved. # -# Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. .PHONY: all tools shared static deps install uninstall dist depsclean mostlyclean clean distclean .DEFAULT_GOAL := all ##### Global variables ##### -WITH_LIBELF ?= no +WITH_LIBELF ?= yes WITH_TIRPC ?= no WITH_SECCOMP ?= yes ##### Global definitions ##### - export prefix = /usr export exec_prefix = $(prefix) export bindir = $(exec_prefix)/bin @@ -108,13 +117,12 @@ ##### Flags definitions ##### # Common flags -CPPFLAGS := -D_GNU_SOURCE -D_FORTIFY_SOURCE=2 $(CPPFLAGS) +CPPFLAGS := -D_GNU_SOURCE -D_FORTIFY_SOURCE=2 -fPIC $(CPPFLAGS) CFLAGS := -std=gnu11 -O2 -g -fdata-sections -ffunction-sections -fstack-protector -fno-strict-aliasing -fvisibility=hidden \ -Wall -Wextra -Wcast-align -Wpointer-arith -Wmissing-prototypes -Wnonnull \ -Wwrite-strings -Wlogical-op -Wformat=2 -Wmissing-format-attribute -Winit-self -Wshadow \ -Wstrict-prototypes -Wunreachable-code -Wconversion -Wsign-conversion \ - -Wno-unknown-warning-option -Wno-format-extra-args -Wno-gnu-alignof-expression \ - -I/usr/include/tirpc $(CFLAGS) + -Wno-unknown-warning-option -Wno-format-extra-args -Wno-gnu-alignof-expression -fPIC $(CFLAGS) LDFLAGS := -Wl,-zrelro -Wl,-znow -Wl,-zdefs -Wl,--gc-sections $(LDFLAGS) LDLIBS := $(LDLIBS) @@ -123,21 +131,22 @@ LIB_CFLAGS = -fPIC LIB_LDFLAGS = -L$(DEPS_DIR)$(libdir) -shared -Wl,-soname=$(LIB_SONAME) LIB_LDLIBS_STATIC = -l:libnvidia-modprobe-utils.a -LIB_LDLIBS_SHARED = -ldl -lcap -ltirpc +LIB_LDLIBS_SHARED = -ldl -lcap ifeq ($(WITH_LIBELF), yes) LIB_CPPFLAGS += -DWITH_LIBELF LIB_LDLIBS_SHARED += -lelf else LIB_LDLIBS_STATIC += -l:libelf.a endif -ifeq ($(WITH_TIRPC), yes) -LIB_CPPFLAGS += -isystem $(DEPS_DIR)$(includedir)/tirpc -DWITH_TIRPC -LIB_LDLIBS_STATIC += -l:libtirpc.a -LIB_LDLIBS_SHARED += -lpthread -endif +# ifeq ($(WITH_TIRPC), yes) +# LIB_CPPFLAGS += -isystem $(DEPS_DIR)$(includedir)/tirpc -DWITH_TIRPC +# LIB_LDLIBS_STATIC += -l:libtirpc.a +# LIB_LDLIBS_SHARED += -lpthread +# endif +CFLAGS += -I/usr/include/tirpc ifeq ($(WITH_SECCOMP), yes) -LIB_CPPFLAGS += -DWITH_SECCOMP $(shell pkg-config --cflags libseccomp) -LIB_LDLIBS_SHARED += $(shell pkg-config --libs libseccomp) +LIB_CPPFLAGS += -DWITH_SECCOMP -DWITH_TIRPC $(shell pkg-config --cflags libseccomp libtirpc) +LIB_LDLIBS_SHARED += $(shell pkg-config --libs libseccomp libtirpc) endif LIB_CPPFLAGS += $(CPPFLAGS) LIB_CFLAGS += $(CFLAGS) @@ -152,10 +161,6 @@ BIN_LDFLAGS = -L. -pie $(LDFLAGS) -Wl,-rpath='$$ORIGIN/../$$LIB' BIN_LDLIBS = -l:$(LIB_SHARED) -lcap $(LDLIBS) -ifeq ($(WITH_TIRPC), yes) -BIN_CPPFLAGS += -isystem $(DEPS_DIR)$(includedir)/tirpc -DWITH_TIRPC -endif - $(word 1,$(LIB_RPC_SRCS)): RPCGENFLAGS=-h $(word 2,$(LIB_RPC_SRCS)): RPCGENFLAGS=-c $(word 3,$(LIB_RPC_SRCS)): RPCGENFLAGS=-m @@ -177,7 +182,10 @@ $(LIB_RPC_SRCS): $(LIB_RPC_SPEC) $(RM) $@ - cd $(dir $@) && $(RPCGEN) $(RPCGENFLAGS) -C -M -N -o $(notdir $@) $(LIB_RPC_SPEC) + if cd $(dir $@); then \ + $(RPCGEN) $(RPCGENFLAGS) -C -M -N -o $(notdir $@) $(LIB_RPC_SPEC); \ + sed "s#$(CURDIR)/src/##g" -i "$@"; \ + fi $(LIB_OBJS): %.lo: %.c | deps $(CC) $(LIB_CFLAGS) $(LIB_CPPFLAGS) -MMD -MF $*.d -c $(OUTPUT_OPTION) $< @@ -222,14 +230,15 @@ static: $(LIB_STATIC)($(LIB_STATIC_OBJ)) +deps: export DESTDIR:=$(DEPS_DIR) deps: $(LIB_RPC_SRCS) $(BUILD_DEFS) $(MKDIR) -p $(DEPS_DIR) - $(MAKE) -f $(MAKE_DIR)/nvidia-modprobe.mk DESTDIR=$(DEPS_DIR) install + $(MAKE) -f $(MAKE_DIR)/nvidia-modprobe.mk install ifeq ($(WITH_LIBELF), no) - $(MAKE) -f $(MAKE_DIR)/elftoolchain.mk DESTDIR=$(DEPS_DIR) install + $(MAKE) -f $(MAKE_DIR)/elftoolchain.mk install endif ifeq ($(WITH_TIRPC), yes) - $(MAKE) -f $(MAKE_DIR)/libtirpc.mk DESTDIR=$(DEPS_DIR) install + $(MAKE) -f $(MAKE_DIR)/libtirpc.mk install endif install: all @@ -291,7 +300,7 @@ deb: DESTDIR:=$(DIST_DIR)/$(LIB_NAME)_$(VERSION)_$(ARCH) deb: prefix:=/usr -deb: libdir:=/usr/lib/x86_64-linux-gnu +deb: libdir:=/usr/lib/@DEB_HOST_MULTIARCH@ deb: install $(CP) -T $(PKG_DIR)/deb $(DESTDIR)/debian cd $(DESTDIR) && debuild -eDISTRIB -eSECTION --dpkg-buildpackage-hook='debian/prepare %v' -a$(ARCH) -us -uc -B diff -Nru libnvidia-container-1.3.0/mk/common.mk libnvidia-container-1.4.0/mk/common.mk --- libnvidia-container-1.3.0/mk/common.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/mk/common.mk 2021-08-12 09:45:44.000000000 +0000 @@ -22,16 +22,16 @@ UID := $(shell id -u) GID := $(shell id -g) DATE := $(shell date -u --iso-8601=minutes) -REVISION := 0000000000000000000000000000000000000000 +REVISION := $(shell git rev-parse HEAD) COMPILER := $(realpath $(shell which $(CC))) PLATFORM ?= $(shell uname -m) ifeq ($(DATE),) $(error Invalid date format) endif -ifeq ($(REVISION),) -$(error Invalid commit hash) -endif +# ifeq ($(REVISION),) +# $(error Invalid commit hash) +# endif ifeq ($(COMPILER),) $(error Invalid compiler) endif diff -Nru libnvidia-container-1.3.0/mk/Dockerfile.centos libnvidia-container-1.4.0/mk/Dockerfile.centos --- libnvidia-container-1.3.0/mk/Dockerfile.centos 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/mk/Dockerfile.centos 2021-08-12 09:45:44.000000000 +0000 @@ -3,7 +3,7 @@ ARG OS_VERSION RUN if [ "${OS_VERSION}" = "8" ]; then \ - yum --enablerepo=PowerTools install -y \ + yum --enablerepo=powertools install -y \ rpcgen \ libseccomp-devel; \ else \ diff -Nru libnvidia-container-1.3.0/mk/docker.mk libnvidia-container-1.4.0/mk/docker.mk --- libnvidia-container-1.3.0/mk/docker.mk 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/mk/docker.mk 2021-08-12 09:45:44.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2017-2021, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,6 +13,19 @@ # limitations under the License. # +# Global definitions. These are defined here to allow the docker targets to be +# invoked directly without the root makefile. +WITH_LIBELF ?= no +WITH_TIRPC ?= no +WITH_SECCOMP ?= yes + +DOCKER ?= docker +LIB_NAME ?= libnvidia-container +PLATFORM ?= $(shell uname -m) + +DIST_DIR ?= $(CURDIR)/dist +MAKE_DIR ?= $(CURDIR)/mk + # Supported OSs by architecture AMD64_TARGETS := ubuntu20.04 ubuntu18.04 ubuntu16.04 debian10 debian9 X86_64_TARGETS := centos7 centos8 rhel7 rhel8 amazonlinux1 amazonlinux2 opensuse-leap15.1 @@ -126,18 +139,18 @@ docker-build-%: @echo "Building for $(TARGET_PLATFORM)" - docker pull --platform=linux/$(ARCH) $(BASEIMAGE) + $(DOCKER) pull --platform=linux/$(ARCH) $(BASEIMAGE) DOCKER_BUILDKIT=1 \ $(DOCKER) build \ --progress=plain \ - --build-arg BASEIMAGE=$(BASEIMAGE) \ - --build-arg OS_VERSION=$(VERSION) \ - --build-arg OS_ARCH=$(ARCH) \ - --build-arg WITH_LIBELF=$(WITH_LIBELF) \ - --build-arg WITH_TIRPC=$(WITH_TIRPC) \ - --build-arg WITH_SECCOMP=$(WITH_SECCOMP) \ - --build-arg CFLAGS=$(CFLAGS) \ - --build-arg LDLIBS=$(LDLIBS) \ + --build-arg BASEIMAGE="$(BASEIMAGE)" \ + --build-arg OS_VERSION="$(VERSION)" \ + --build-arg OS_ARCH="$(ARCH)" \ + --build-arg WITH_LIBELF="$(WITH_LIBELF)" \ + --build-arg WITH_TIRPC="$(WITH_TIRPC)" \ + --build-arg WITH_SECCOMP="$(WITH_SECCOMP)" \ + --build-arg CFLAGS="$(CFLAGS)" \ + --build-arg LDLIBS="$(LDLIBS)" \ $(EXTRA_BUILD_ARGS) \ --tag $(BUILDIMAGE) \ --file $(DOCKERFILE) . diff -Nru libnvidia-container-1.3.0/pkg/deb/changelog libnvidia-container-1.4.0/pkg/deb/changelog --- libnvidia-container-1.3.0/pkg/deb/changelog 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/deb/changelog 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,235 @@ +libnvidia-container (1.4.0-1) UNRELEASED; urgency=medium + + [ NVIDIA CORPORATION ] + * Mount all of /proc/.../nvidia/capabilities with --mig-{config, monitor} + * Add fabricmanager as a valid IPC to inject into a container + * Added libnvidia-nscq.so as an optional injected utility lib + * Add Jenkinsfile for internal CI + * Invoke docker make file separately + * WSL - Add full NVML support for WSL in the container library + + -- NVIDIA CORPORATION Sat, 24 Apr 2021 04:34:26 -0700 + +libnvidia-container (1.3.3-1) UNRELEASED; urgency=medium + + * Promote 1.3.3~rc.2 to 1.3.3-1 + + -- NVIDIA CORPORATION Fri, 05 Feb 2021 02:13:49 -0700 + +libnvidia-container (1.3.3~rc.2-1) experimental; urgency=medium + + * Remove path_join() with already chrooted directory + + -- NVIDIA CORPORATION Wed, 03 Feb 2021 13:36:45 -0700 + +libnvidia-container (1.3.3~rc.1-1) experimental; urgency=medium + + * Pre-create MIG related nvcaps at startup + * Add more logging around device node creation with --load-kmods + + -- NVIDIA CORPORATION Wed, 03 Feb 2021 03:34:23 -0700 + +libnvidia-container (1.3.2-1) UNRELEASED; urgency=medium + + * Fix handling of /proc/PID/cgroups entries with colons in paths + * Add pread64 as allowed syscall for ldconfig + + -- NVIDIA CORPORATION Mon, 25 Jan 2021 01:48:49 -0700 + +libnvidia-container (1.3.1-1) UNRELEASED; urgency=medium + + * Honor OPT_NO_CGROUPS in nvc_device_mig_caps_mount + * Fix bug in resolving absolute symlinks in find_library_paths() + + -- NVIDIA CORPORATION Mon, 07 Dec 2020 14:55:38 -0700 + +libnvidia-container (1.3.0-1) UNRELEASED; urgency=medium + + * Promote 1.3.0~rc.1-1 to 1.3.0-1 + + -- NVIDIA CORPORATION Wed, 16 Sep 2020 13:32:02 -0700 + +libnvidia-container (1.3.0~rc.1-1) experimental; urgency=medium + + * 2bda067f Add support to "list" command to print /dev based capabilities + * 3c2ad6aa Add logic to conditionally mount /dev based nvidia-capabilities + * 4d432175 Change default "list" command to set mig-config / mig-monitor = NULL + * 3ec7f3ba Fix minor bug that would not unmount paths on failure + * b5c0a394 Update nvidia-modprobe dependency to 450.57 + + -- NVIDIA CORPORATION Fri, 21 Aug 2020 13:30:28 -0700 + +libnvidia-container (1.2.0-1) UNRELEASED; urgency=medium + + * Promote 1.2.0~rc.3-1 to 1.2.0-1 + + -- NVIDIA CORPORATION Wed, 08 Jul 2020 20:44:10 -0700 + +libnvidia-container (1.2.0~rc.3-1) experimental; urgency=medium + + * 7deea6b8 WSL2 Support - Remove unnecessary umount and free + * 53739009 WSL2 Support - Fix error path when mounting the driver + * 38198a81 WSL2 Support - Fix error path in dxcore + * 31f5ea35 Changed email for travis.ci to kklues@nvidia.com + * abdd5175 Update license and copyright in packages + * 65827fe7 Update license clause to reflect actual licensing + * 77499d88 Transition Travis CI build to Ubuntu 18.04 + + -- NVIDIA CORPORATION Wed, 01 Jul 2020 14:24:59 -0700 + +libnvidia-container (1.2.0~rc.2-1) experimental; urgency=medium + + * 4ea9b59f Update debian based dockerfiles to set distribution in changelog + * a57fcea5 Add 'ngx' as a new capability for a container + * 6f16ccd3 Allow --mig-monitor and --mig-config on machines without MIG capable GPUs + + -- NVIDIA CORPORATION Thu, 18 Jun 2020 21:09:59 -0700 + +libnvidia-container (1.2.0~rc.1-1) experimental; urgency=medium + + * 4263e684 Add support for Windows Subsystem for Linux (WSL2) + * e768f8bc Fix ability to build RC packages via TAG=rc. + + -- NVIDIA CORPORATION Thu, 11 Jun 2020 15:12:59 -0700 + +libnvidia-container (1.1.1-1) UNRELEASED; urgency=medium + + * deeb499 Fixup deb packaging files to remove warnings + * 6003504 nvmlSystemGetCudaDriverVersion_v2 to nvmlSystemGetCudaDriverVersion + * 1ee8b60 Update centos8/rhel8 to conditionally set appropriate CFLAGS and LDLIBS + * d746370 Add smoke test to verify functioning build for all OSs on amd64/x86_64 + + -- NVIDIA CORPORATION Tue, 19 May 2020 12:05:32 -0700 + +libnvidia-container (1.1.0-1) UNRELEASED; urgency=medium + + * b217c6ad Update build system to support multi-arch builds + * 1ddcdfc1 Add support for MIG (Milti-Instance-GPUs) + * ddae363a Add libnvidia-allocator.so as a compute-lib + * 6ed0f129 Add option to not use pivot_root + * e18e9b7a Allow devices to be identified by PCI bus ID + + -- NVIDIA CORPORATION Fri, 15 May 2020 12:05:32 -0700 + +libnvidia-container (1.0.7-1) UNRELEASED; urgency=medium + + * 8d90918a Add Raytracing library + + -- NVIDIA CORPORATION Mon, 11 Nov 2019 13:23:58 -0700 + +libnvidia-container (1.0.6-1) UNRELEASED; urgency=medium + + * b6aff41 Update error messages for CUDA version requirements + + -- NVIDIA CORPORATION Fri, 13 Sep 2019 15:38:16 -0700 + +libnvidia-container (1.0.5-1) UNRELEASED; urgency=medium + + * 688495e Add Opensuse15.1 support + + -- NVIDIA CORPORATION Wed, 04 Sep 2019 10:50:40 -0700 + +libnvidia-container (1.0.4-1) UNRELEASED; urgency=medium + + * 61bfaf38 Update DSL to output the first element instead of the last in case of failure + * 5ce32c6c Add initial support for Optix + * acc38a22 Fix execveat typo + * b5e491b1 arm64: Add support for AARCH64 architecture + + -- NVIDIA CORPORATION Wed, 21 Aug 2019 16:48:40 -0700 + +libnvidia-container (1.0.3-1) UNRELEASED; urgency=medium + + * b9545d7 Add support for Vulkan + + -- NVIDIA CORPORATION Thu, 18 Jul 2019 13:34:30 -0700 + +libnvidia-container (1.0.2-1) UNRELEASED; urgency=medium + + * 4045013 Adds support for libnvidia-opticalflow + + -- NVIDIA CORPORATION Mon, 04 Feb 2019 15:24:12 -0700 + +libnvidia-container (1.0.1-1) UNRELEASED; urgency=medium + + * deccb28 Allow yet more syscalls in ldconfig + + -- NVIDIA CORPORATION Mon, 14 Jan 2019 17:52:52 -0700 + +libnvidia-container (1.0.0-1) UNRELEASED; urgency=medium + + * 35a9f27 Add support for CUDA forward compatibility + * ebed710 Add device brand to the device informations and requirements + * a141a7a Handle 32-bit PCI domains in procfs + * 391c4b6 Preload glibc libraries before switching root + * bcf69c6 Bump libtirpc to 1.1.4 + * 30aec17 Bump nvidia-modprobe-utils to 396.51 + * d05745f Bump the address space limits for ldconfig + + -- NVIDIA CORPORATION Thu, 20 Sep 2018 11:52:52 -0700 + +libnvidia-container (1.0.0~rc.2-1) UNRELEASED; urgency=medium + + * 7ea554a Rework capabilities to support more unprivileged use-cases + * f06cbbb Fix driver process DEATHSIG teardown + * 931bd4f Allow more syscalls in ldconfig + * a0644ea Fix off-by-one error + + -- NVIDIA CORPORATION Mon, 11 Jun 2018 13:39:47 -0700 + +libnvidia-container (1.0.0~rc.1-1) UNRELEASED; urgency=medium + + * 4d43665 Bump nvidia-modprobe-utils to 396.18 + * d8338a6 Bump libtirpc to 1.0.3 + * cef6c8f Add execveat to the list of allowed syscalls + + -- NVIDIA CORPORATION Thu, 26 Apr 2018 15:35:29 -0700 + +libnvidia-container (1.0.0~beta.1-1) UNRELEASED; urgency=medium + + * 6822b13 Bump nvidia-modprobe-utils to 390.25 + * 8245f6c Slightly improve RPC error messages + * 9398d41 Add support for display capability + * 57a0dd5 Increase driver service timeout from 1s to 10s + * e48a0d4 Add device minor to the CLI info command + * 019fdc1 Add support for custom driver root directory + * b78a28c Add ppc64le support + * 41656bf Add --ldcache option to the CLI + + -- NVIDIA CORPORATION Mon, 05 Mar 2018 16:10:35 -0800 + +libnvidia-container (1.0.0~alpha.3-1) UNRELEASED; urgency=medium + + * d268f8f Improve error message if driver installed in the container + * 3fdac29 Add optional support for libelf from the elfutils project + * 584bca5 Remove top directory bind mounts to prevent EXDEV errors + * c6dc820 Add info command to nvidia-container-cli + * 44b74ee Add device model to the device informations + * cbdd58f Strip RPC prefix from error messages + * d4ee216 Rework the CLI list command + * b0c4865 Improve the --userspec CLI option and rename it to --user + * e6fa331 Refactor the CLI and split it into multiple files + * fa9853b Bump nvidia-modprobe-utils to 387.34 + * 7888296 Move the driver capabilities to the container options + * ea2f780 Add support for EGL device isolation + * b5bffa3 Fix driver procfs remount to work with unpatched kernels + + -- NVIDIA CORPORATION Wed, 10 Jan 2018 16:01:11 -0800 + +libnvidia-container (1.0.0~alpha.2-1) UNRELEASED; urgency=medium + + * b80e4b6 Relax some requirement constraints + * 3cd1bb6 Handle 32-bit PCI domains + * 6c67a19 Add support for device architecture requirement + * 7584e96 Filter NVRM proc filesystem based on visible devices + * 93c46e1 Prevent the driver process from triggering MPS + * fe4925e Reject invalid device identifier "GPU-" + * dabef1c Do not change bind mount attributes on top-level directories + + -- NVIDIA CORPORATION Mon, 30 Oct 2017 14:03:39 -0700 + +libnvidia-container (1.0.0~alpha.1-1) UNRELEASED; urgency=medium + + * Initial release + + -- NVIDIA CORPORATION Tue, 05 Sep 2017 14:31:33 -0700 diff -Nru libnvidia-container-1.3.0/pkg/deb/compat libnvidia-container-1.4.0/pkg/deb/compat --- libnvidia-container-1.3.0/pkg/deb/compat 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/deb/compat 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1 @@ +9 diff -Nru libnvidia-container-1.3.0/pkg/deb/control libnvidia-container-1.4.0/pkg/deb/control --- libnvidia-container-1.3.0/pkg/deb/control 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/deb/control 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,57 @@ +Source: libnvidia-container +Build-Depends: debhelper (>=9) +Standards-Version: 3.9.6 +Maintainer: NVIDIA CORPORATION +Homepage: https://github.com/NVIDIA/libnvidia-container + +Package: libnvidia-container@MAJOR@ +Section: @SECTION@libs +Priority: optional +Architecture: any +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: NVIDIA container runtime library + The nvidia-container library provides an interface to configure GNU/Linux + containers leveraging NVIDIA hardware. The implementation relies on several + kernel subsystems and is designed to be agnostic of the container runtime. + . + This package requires the NVIDIA driver (>= 340.29) to be installed separately. + +Package: libnvidia-container-dev +Section: @SECTION@libdevel +Priority: optional +Architecture: any +Multi-Arch: same +Depends: libnvidia-container@MAJOR@ (= ${binary:Version}), ${misc:Depends} +Description: NVIDIA container runtime library (development files) + The nvidia-container library provides an interface to configure GNU/Linux + containers leveraging NVIDIA hardware. The implementation relies on several + kernel subsystems and is designed to be agnostic of the container runtime. + . + This package contains the files required to compile programs with the library. + +Package: libnvidia-container@MAJOR@-dbg +Section: @SECTION@debug +Priority: optional +Architecture: any +Multi-Arch: same +Depends: libnvidia-container@MAJOR@ (= ${binary:Version}), ${misc:Depends} +Description: NVIDIA container runtime library (debugging symbols) + The nvidia-container library provides an interface to configure GNU/Linux + containers leveraging NVIDIA hardware. The implementation relies on several + kernel subsystems and is designed to be agnostic of the container runtime. + . + This package contains the debugging symbols for the library. + +Package: libnvidia-container-tools +Section: @SECTION@utils +Priority: optional +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: NVIDIA container runtime library (command-line tools) + The nvidia-container library provides an interface to configure GNU/Linux + containers leveraging NVIDIA hardware. The implementation relies on several + kernel subsystems and is designed to be agnostic of the container runtime. + . + This package contains command-line tools that facilitate using the library. diff -Nru libnvidia-container-1.3.0/pkg/deb/copyright libnvidia-container-1.4.0/pkg/deb/copyright --- libnvidia-container-1.3.0/pkg/deb/copyright 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/deb/copyright 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,92 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: libnvidia-container +Source: https://github.com/NVIDIA/libnvidia-container + +Files: * +Copyright: 2017-2020 NVIDIA CORPORATION +License: Apache-2.0 + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + . + http://www.apache.org/licenses/LICENSE-2.0 + . + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +Files: src/elftool.* +Copyright: 2017-2020 NVIDIA CORPORATION +Comment: If these files have been compiled and dynamically linked against libelf from the + elfutils package (usually characterized by the definition of the macro `WITH_LIBELF'), + the following license notice covers the use of said library. +License: LGPL-3+ + elfutils is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + . + elfutils is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + . + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see . + . + On Debian systems, the full text of the GNU General Public License and + the GNU Lesser General Public License can be found in the files + `/usr/share/common-licenses/GPL-3' and `/usr/share/common-licenses/LGPL-3'. + +Files: src/elftoolchain.* +Copyright: 2017-2020 NVIDIA CORPORATION +License: BSD-3-Clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of NVIDIA CORPORATION nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Files: src/nvidia-modprobe.* +Copyright: 2017-2020 NVIDIA CORPORATION +License: MIT + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. diff -Nru libnvidia-container-1.3.0/pkg/deb/libnvidia-container-dev.install libnvidia-container-1.4.0/pkg/deb/libnvidia-container-dev.install --- libnvidia-container-1.3.0/pkg/deb/libnvidia-container-dev.install 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/deb/libnvidia-container-dev.install 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,4 @@ +usr/include/*.h +usr/lib/@DEB_HOST_MULTIARCH@/lib*.so +usr/lib/@DEB_HOST_MULTIARCH@/lib*.a +usr/lib/@DEB_HOST_MULTIARCH@/pkgconfig/*.pc diff -Nru libnvidia-container-1.3.0/pkg/deb/libnvidia-container-dev.lintian-overrides libnvidia-container-1.4.0/pkg/deb/libnvidia-container-dev.lintian-overrides --- libnvidia-container-1.3.0/pkg/deb/libnvidia-container-dev.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/deb/libnvidia-container-dev.lintian-overrides 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1 @@ +new-package-should-close-itp-bug diff -Nru libnvidia-container-1.3.0/pkg/deb/libnvidia-container@MAJOR@-dbg.install libnvidia-container-1.4.0/pkg/deb/libnvidia-container@MAJOR@-dbg.install --- libnvidia-container-1.3.0/pkg/deb/libnvidia-container@MAJOR@-dbg.install 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/deb/libnvidia-container@MAJOR@-dbg.install 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/debug/usr/lib/@DEB_HOST_MULTIARCH@/lib*.so.* diff -Nru libnvidia-container-1.3.0/pkg/deb/libnvidia-container@MAJOR@-dbg.lintian-overrides libnvidia-container-1.4.0/pkg/deb/libnvidia-container@MAJOR@-dbg.lintian-overrides --- libnvidia-container-1.3.0/pkg/deb/libnvidia-container@MAJOR@-dbg.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/deb/libnvidia-container@MAJOR@-dbg.lintian-overrides 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1 @@ +new-package-should-close-itp-bug diff -Nru libnvidia-container-1.3.0/pkg/deb/libnvidia-container@MAJOR@.install libnvidia-container-1.4.0/pkg/deb/libnvidia-container@MAJOR@.install --- libnvidia-container-1.3.0/pkg/deb/libnvidia-container@MAJOR@.install 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/deb/libnvidia-container@MAJOR@.install 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/lib*.so.* diff -Nru libnvidia-container-1.3.0/pkg/deb/libnvidia-container@MAJOR@.lintian-overrides libnvidia-container-1.4.0/pkg/deb/libnvidia-container@MAJOR@.lintian-overrides --- libnvidia-container-1.3.0/pkg/deb/libnvidia-container@MAJOR@.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/deb/libnvidia-container@MAJOR@.lintian-overrides 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1 @@ +new-package-should-close-itp-bug diff -Nru libnvidia-container-1.3.0/pkg/deb/libnvidia-container@MAJOR@.symbols libnvidia-container-1.4.0/pkg/deb/libnvidia-container@MAJOR@.symbols --- libnvidia-container-1.3.0/pkg/deb/libnvidia-container@MAJOR@.symbols 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/deb/libnvidia-container@MAJOR@.symbols 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,27 @@ +libnvidia-container.so.1 libnvidia-container1 #MINVER# + NVC_1.0@NVC_1.0 1.4.0 + nvc_config_free@NVC_1.0 1.4.0 + nvc_config_new@NVC_1.0 1.4.0 + nvc_container_config_free@NVC_1.0 1.4.0 + nvc_container_config_new@NVC_1.0 1.4.0 + nvc_container_free@NVC_1.0 1.4.0 + nvc_container_new@NVC_1.0 1.4.0 + nvc_context_free@NVC_1.0 1.4.0 + nvc_context_new@NVC_1.0 1.4.0 + nvc_device_info_free@NVC_1.0 1.4.0 + nvc_device_info_new@NVC_1.0 1.4.0 + nvc_nvcaps_style@NVC_1.0 1.4.0 + nvc_nvcaps_device_from_proc_path@NVC_1.0 1.4.0 + nvc_device_mount@NVC_1.0 1.4.0 + nvc_mig_device_access_caps_mount@NVC_1.0 1.4.0 + nvc_mig_config_global_caps_mount@NVC_1.0 1.4.0 + nvc_mig_monitor_global_caps_mount@NVC_1.0 1.4.0 + nvc_device_mig_caps_mount@NVC_1.0 1.4.0 + nvc_driver_info_free@NVC_1.0 1.4.0 + nvc_driver_info_new@NVC_1.0 1.4.0 + nvc_driver_mount@NVC_1.0 1.4.0 + nvc_error@NVC_1.0 1.4.0 + nvc_init@NVC_1.0 1.4.0 + nvc_ldcache_update@NVC_1.0 1.4.0 + nvc_shutdown@NVC_1.0 1.4.0 + nvc_version@NVC_1.0 1.4.0 diff -Nru libnvidia-container-1.3.0/pkg/deb/libnvidia-container-tools.install libnvidia-container-1.4.0/pkg/deb/libnvidia-container-tools.install --- libnvidia-container-1.3.0/pkg/deb/libnvidia-container-tools.install 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/deb/libnvidia-container-tools.install 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1 @@ +usr/bin/* diff -Nru libnvidia-container-1.3.0/pkg/deb/libnvidia-container-tools.lintian-overrides libnvidia-container-1.4.0/pkg/deb/libnvidia-container-tools.lintian-overrides --- libnvidia-container-1.3.0/pkg/deb/libnvidia-container-tools.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/deb/libnvidia-container-tools.lintian-overrides 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,2 @@ +new-package-should-close-itp-bug +binary-without-manpage diff -Nru libnvidia-container-1.3.0/pkg/deb/prepare libnvidia-container-1.4.0/pkg/deb/prepare --- libnvidia-container-1.3.0/pkg/deb/prepare 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/deb/prepare 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,30 @@ +#! /bin/bash + +set -e + +# Replace templated files/contents according to the package version and architecture. +# Also set the package distribution and section area if the environment specifies it. + +VERSION=${1%%[-~+]*} +MAJOR=${1%%.*} + +if [ -z "$VERSION" ] || [ -z "$MAJOR" ] || [ -z "$DEB_HOST_MULTIARCH" ]; then + echo "Error: invalid package version or architecture" + exit 1 +fi + +find . -type d -name '*@DEB_HOST_MULTIARCH@*' | sed "p;s;@DEB_HOST_MULTIARCH@;$DEB_HOST_MULTIARCH;" | \ + xargs -r -n2 sh -c 'rm -rf $1 && mv -T $0 $1' + +find . -type f -name '*@MAJOR@*' | sed "p;s;@MAJOR@;$MAJOR;" | \ + xargs -r -n2 sh -c 'rm -f $1 && mv -T $0 $1' + +grep -rIlE '@(SECTION|VERSION|MAJOR|DEB_HOST_MULTIARCH)@' . | \ + xargs -r sed -i "s;@SECTION@;${SECTION:+$SECTION/}; + s;@VERSION@;$VERSION; + s;@MAJOR@;$MAJOR; + s;@DEB_HOST_MULTIARCH@;$DEB_HOST_MULTIARCH;" + +if [ -n "$DISTRIB" ]; then + sed -i "s;UNRELEASED;$DISTRIB;" debian/changelog +fi diff -Nru libnvidia-container-1.3.0/pkg/deb/rules libnvidia-container-1.4.0/pkg/deb/rules --- libnvidia-container-1.3.0/pkg/deb/rules 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/deb/rules 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,8 @@ +#!/usr/bin/make -f +#export DH_VERBOSE = 1 + +override_dh_fixperms: + dh_fixperms -X libnvidia-container.so.@VERSION@ + +%: + dh $@ diff -Nru libnvidia-container-1.3.0/pkg/rpm/SPECS/libnvidia-container.spec libnvidia-container-1.4.0/pkg/rpm/SPECS/libnvidia-container.spec --- libnvidia-container-1.3.0/pkg/rpm/SPECS/libnvidia-container.spec 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/pkg/rpm/SPECS/libnvidia-container.spec 2021-08-12 09:45:44.000000000 +0000 @@ -99,6 +99,32 @@ %{_bindir}/* %changelog +* Sat Apr 24 2021 NVIDIA CORPORATION 1.4.0-1 +- Mount all of /proc/.../nvidia/capabilities with --mig-{config, monitor} +- Add fabricmanager as a valid IPC to inject into a container +- Added libnvidia-nscq.so as an optional injected utility lib +- Add Jenkinsfile for internal CI +- Invoke docker make file separately +- WSL - Add full NVML support for WSL in the container library + +* Fri Feb 05 2021 NVIDIA CORPORATION 1.3.3-1 +- Promote 1.3.3-0.1.rc.2 to 1.3.3-1 + +* Wed Feb 03 2021 NVIDIA CORPORATION 1.3.3-0.1.rc.2 +- Remove path_join() with already chrooted directory + +* Wed Feb 03 2021 NVIDIA CORPORATION 1.3.3-0.1.rc.1 +- Pre-create MIG related nvcaps at startup +- Add more logging around device node creation with --load-kmods + +* Mon Jan 25 2021 NVIDIA CORPORATION 1.3.2-1 +- Fix handling of /proc/PID/cgroups entries with colons in paths +- Add pread64 as allowed syscall for ldconfig + +* Mon Dec 07 2020 NVIDIA CORPORATION 1.3.1-1 +- Honor OPT_NO_CGROUPS in nvc_device_mig_caps_mount +- Fix bug in resolving absolute symlinks in find_library_paths() + * Wed Sep 16 2020 NVIDIA CORPORATION 1.3.0-1 - Promote 1.3.0-0.1.rc.1 to 1.3.0-1 diff -Nru libnvidia-container-1.3.0/README.md libnvidia-container-1.4.0/README.md --- libnvidia-container-1.3.0/README.md 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/README.md 2021-08-12 09:45:44.000000000 +0000 @@ -52,7 +52,7 @@ sudo unshare --mount --pid --fork # Setup a rootfs based on Ubuntu 16.04 inside the new namespaces -curl http://cdimage.ubuntu.com/ubuntu-base/releases/16.04/release/ubuntu-base-16.04-core-amd64.tar.gz | tar -C rootfs -xz +curl http://cdimage.ubuntu.com/ubuntu-base/releases/16.04/release/ubuntu-base-16.04.6-base-amd64.tar.gz | tar -C rootfs -xz useradd -R $(realpath rootfs) -U -u 1000 -s /bin/bash nvidia mount --bind rootfs rootfs mount --make-private rootfs diff -Nru libnvidia-container-1.3.0/src/build.h libnvidia-container-1.4.0/src/build.h --- libnvidia-container-1.3.0/src/build.h 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/src/build.h 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,5 @@ +#define BUILD_DATE "2021-08-12T10:32+00:00" +#define BUILD_COMPILER "x86_64-linux-gnu-gcc-7 " __VERSION__ +#define BUILD_FLAGS "-D_GNU_SOURCE -D_FORTIFY_SOURCE=2 -fPIC -Wdate-time -D_FORTIFY_SOURCE=2 -std=gnu11 -O2 -g -fdata-sections -ffunction-sections -fstack-protector -fno-strict-aliasing -fvisibility=hidden -Wall -Wextra -Wcast-align -Wpointer-arith -Wmissing-prototypes -Wnonnull -Wwrite-strings -Wlogical-op -Wformat=2 -Wmissing-format-attribute -Winit-self -Wshadow -Wstrict-prototypes -Wunreachable-code -Wconversion -Wsign-conversion -Wno-unknown-warning-option -Wno-format-extra-args -Wno-gnu-alignof-expression -fPIC -g -O2 -fdebug-prefix-map=/jenkins/workspace/pop-os/repos/_build/source/c24a1c088a7a1cabb6c6457104acad37bd608b62_focal=. -fstack-protector-strong -Wformat -Werror=format-security -I/usr/include/tirpc -Wl,-zrelro -Wl,-znow -Wl,-zdefs -Wl,--gc-sections -Wl,-Bsymbolic-functions -Wl,-z,relro" +#define BUILD_REVISION "632db10671ff20697d05ab1405b1fe7eb17d82c9" +#define BUILD_PLATFORM "x86_64" diff -Nru libnvidia-container-1.3.0/src/driver.c libnvidia-container-1.4.0/src/driver.c --- libnvidia-container-1.3.0/src/driver.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/src/driver.c 2021-08-12 09:45:44.000000000 +0000 @@ -33,7 +33,7 @@ #define REAP_TIMEOUT_MS 10 static int setup_rpc_client(struct driver *); -static noreturn void setup_rpc_service(struct driver *, const char *, uid_t, gid_t, pid_t); +static noreturn void setup_rpc_service(struct driver *, struct dxcore_context* dxcore, const char *, uid_t, gid_t, pid_t); static int reap_process(struct error *, pid_t, int, bool); struct mig_device { @@ -94,7 +94,7 @@ } static void -setup_rpc_service(struct driver *ctx, const char *root, uid_t uid, gid_t gid, pid_t ppid) +setup_rpc_service(struct driver *ctx, struct dxcore_context* dxcore, const char *root, uid_t uid, gid_t gid, pid_t ppid) { int rv = EXIT_FAILURE; @@ -143,7 +143,14 @@ if (getppid() != ppid) kill(getpid(), SIGTERM); - if ((ctx->nvml_dl = xdlopen(ctx->err, SONAME_LIBNVML, RTLD_NOW)) == NULL) + + if (dxcore->initialized) { + char nvml_path[PATH_MAX]; + if (path_join(ctx->err, nvml_path, dxcore->adapterList[0].pDriverStorePath, SONAME_LIBNVML) < 0) + goto fail; + if ((ctx->nvml_dl = xdlopen(ctx->err, nvml_path, RTLD_NOW)) == NULL) + goto fail; + } else if ((ctx->nvml_dl = xdlopen(ctx->err, SONAME_LIBNVML, RTLD_NOW)) == NULL) goto fail; if ((ctx->rpc_svc = svcunixfd_create(ctx->fd[SOCK_SVC], 0, 0)) == NULL || @@ -205,7 +212,7 @@ } int -driver_init(struct driver *ctx, struct error *err, const char *root, uid_t uid, gid_t gid) +driver_init(struct driver *ctx, struct error *err, struct dxcore_context *dxcore, const char *root, uid_t uid, gid_t gid) { int ret; pid_t pid; @@ -219,7 +226,7 @@ goto fail; } if (ctx->pid == 0) - setup_rpc_service(ctx, root, uid, gid, pid); + setup_rpc_service(ctx, dxcore, root, uid, gid, pid); if (setup_rpc_client(ctx) < 0) goto fail; diff -Nru libnvidia-container-1.3.0/src/driver_clt.c libnvidia-container-1.4.0/src/driver_clt.c --- libnvidia-container-1.3.0/src/driver_clt.c 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/src/driver_clt.c 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,191 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#include /* for memset */ +#include "driver_rpc.h" +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wunused-variable" + +/* Default timeout can be changed using clnt_control() */ +static struct timeval TIMEOUT = { 25, 0 }; + +enum clnt_stat +driver_init_1(ptr_t arg1, driver_init_res *clnt_res, CLIENT *clnt) +{ + return (clnt_call(clnt, DRIVER_INIT, + (xdrproc_t) xdr_ptr_t, (caddr_t) &arg1, + (xdrproc_t) xdr_driver_init_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_shutdown_1(ptr_t arg1, driver_shutdown_res *clnt_res, CLIENT *clnt) +{ + return (clnt_call(clnt, DRIVER_SHUTDOWN, + (xdrproc_t) xdr_ptr_t, (caddr_t) &arg1, + (xdrproc_t) xdr_driver_shutdown_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_get_rm_version_1(ptr_t arg1, driver_get_rm_version_res *clnt_res, CLIENT *clnt) +{ + return (clnt_call(clnt, DRIVER_GET_RM_VERSION, + (xdrproc_t) xdr_ptr_t, (caddr_t) &arg1, + (xdrproc_t) xdr_driver_get_rm_version_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_get_cuda_version_1(ptr_t arg1, driver_get_cuda_version_res *clnt_res, CLIENT *clnt) +{ + return (clnt_call(clnt, DRIVER_GET_CUDA_VERSION, + (xdrproc_t) xdr_ptr_t, (caddr_t) &arg1, + (xdrproc_t) xdr_driver_get_cuda_version_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_get_device_count_1(ptr_t arg1, driver_get_device_count_res *clnt_res, CLIENT *clnt) +{ + return (clnt_call(clnt, DRIVER_GET_DEVICE_COUNT, + (xdrproc_t) xdr_ptr_t, (caddr_t) &arg1, + (xdrproc_t) xdr_driver_get_device_count_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_get_device_1(ptr_t arg1, u_int arg2, driver_get_device_res *clnt_res, CLIENT *clnt) +{ + driver_get_device_1_argument arg; + arg.arg1 = arg1; + arg.arg2 = arg2; + return (clnt_call (clnt, DRIVER_GET_DEVICE, (xdrproc_t) xdr_driver_get_device_1_argument, (caddr_t) &arg, + (xdrproc_t) xdr_driver_get_device_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_get_device_minor_1(ptr_t arg1, ptr_t arg2, driver_get_device_minor_res *clnt_res, CLIENT *clnt) +{ + driver_get_device_minor_1_argument arg; + arg.arg1 = arg1; + arg.arg2 = arg2; + return (clnt_call (clnt, DRIVER_GET_DEVICE_MINOR, (xdrproc_t) xdr_driver_get_device_minor_1_argument, (caddr_t) &arg, + (xdrproc_t) xdr_driver_get_device_minor_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_get_device_busid_1(ptr_t arg1, ptr_t arg2, driver_get_device_busid_res *clnt_res, CLIENT *clnt) +{ + driver_get_device_busid_1_argument arg; + arg.arg1 = arg1; + arg.arg2 = arg2; + return (clnt_call (clnt, DRIVER_GET_DEVICE_BUSID, (xdrproc_t) xdr_driver_get_device_busid_1_argument, (caddr_t) &arg, + (xdrproc_t) xdr_driver_get_device_busid_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_get_device_uuid_1(ptr_t arg1, ptr_t arg2, driver_get_device_uuid_res *clnt_res, CLIENT *clnt) +{ + driver_get_device_uuid_1_argument arg; + arg.arg1 = arg1; + arg.arg2 = arg2; + return (clnt_call (clnt, DRIVER_GET_DEVICE_UUID, (xdrproc_t) xdr_driver_get_device_uuid_1_argument, (caddr_t) &arg, + (xdrproc_t) xdr_driver_get_device_uuid_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_get_device_arch_1(ptr_t arg1, ptr_t arg2, driver_get_device_arch_res *clnt_res, CLIENT *clnt) +{ + driver_get_device_arch_1_argument arg; + arg.arg1 = arg1; + arg.arg2 = arg2; + return (clnt_call (clnt, DRIVER_GET_DEVICE_ARCH, (xdrproc_t) xdr_driver_get_device_arch_1_argument, (caddr_t) &arg, + (xdrproc_t) xdr_driver_get_device_arch_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_get_device_model_1(ptr_t arg1, ptr_t arg2, driver_get_device_model_res *clnt_res, CLIENT *clnt) +{ + driver_get_device_model_1_argument arg; + arg.arg1 = arg1; + arg.arg2 = arg2; + return (clnt_call (clnt, DRIVER_GET_DEVICE_MODEL, (xdrproc_t) xdr_driver_get_device_model_1_argument, (caddr_t) &arg, + (xdrproc_t) xdr_driver_get_device_model_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_get_device_brand_1(ptr_t arg1, ptr_t arg2, driver_get_device_brand_res *clnt_res, CLIENT *clnt) +{ + driver_get_device_brand_1_argument arg; + arg.arg1 = arg1; + arg.arg2 = arg2; + return (clnt_call (clnt, DRIVER_GET_DEVICE_BRAND, (xdrproc_t) xdr_driver_get_device_brand_1_argument, (caddr_t) &arg, + (xdrproc_t) xdr_driver_get_device_brand_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_get_device_mig_mode_1(ptr_t arg1, ptr_t arg2, driver_get_device_mig_mode_res *clnt_res, CLIENT *clnt) +{ + driver_get_device_mig_mode_1_argument arg; + arg.arg1 = arg1; + arg.arg2 = arg2; + return (clnt_call (clnt, DRIVER_GET_DEVICE_MIG_MODE, (xdrproc_t) xdr_driver_get_device_mig_mode_1_argument, (caddr_t) &arg, + (xdrproc_t) xdr_driver_get_device_mig_mode_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_get_device_max_mig_device_count_1(ptr_t arg1, ptr_t arg2, driver_get_device_max_mig_device_count_res *clnt_res, CLIENT *clnt) +{ + driver_get_device_max_mig_device_count_1_argument arg; + arg.arg1 = arg1; + arg.arg2 = arg2; + return (clnt_call (clnt, DRIVER_GET_DEVICE_MAX_MIG_DEVICE_COUNT, (xdrproc_t) xdr_driver_get_device_max_mig_device_count_1_argument, (caddr_t) &arg, + (xdrproc_t) xdr_driver_get_device_max_mig_device_count_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_get_device_mig_device_1(ptr_t arg1, ptr_t arg2, u_int arg3, driver_get_device_mig_device_res *clnt_res, CLIENT *clnt) +{ + driver_get_device_mig_device_1_argument arg; + arg.arg1 = arg1; + arg.arg2 = arg2; + arg.arg3 = arg3; + return (clnt_call (clnt, DRIVER_GET_DEVICE_MIG_DEVICE, (xdrproc_t) xdr_driver_get_device_mig_device_1_argument, (caddr_t) &arg, + (xdrproc_t) xdr_driver_get_device_mig_device_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_get_device_gpu_instance_id_1(ptr_t arg1, ptr_t arg2, driver_get_device_gpu_instance_id_res *clnt_res, CLIENT *clnt) +{ + driver_get_device_gpu_instance_id_1_argument arg; + arg.arg1 = arg1; + arg.arg2 = arg2; + return (clnt_call (clnt, DRIVER_GET_DEVICE_GPU_INSTANCE_ID, (xdrproc_t) xdr_driver_get_device_gpu_instance_id_1_argument, (caddr_t) &arg, + (xdrproc_t) xdr_driver_get_device_gpu_instance_id_res, (caddr_t) clnt_res, + TIMEOUT)); +} + +enum clnt_stat +driver_get_device_compute_instance_id_1(ptr_t arg1, ptr_t arg2, driver_get_device_compute_instance_id_res *clnt_res, CLIENT *clnt) +{ + driver_get_device_compute_instance_id_1_argument arg; + arg.arg1 = arg1; + arg.arg2 = arg2; + return (clnt_call (clnt, DRIVER_GET_DEVICE_COMPUTE_INSTANCE_ID, (xdrproc_t) xdr_driver_get_device_compute_instance_id_1_argument, (caddr_t) &arg, + (xdrproc_t) xdr_driver_get_device_compute_instance_id_res, (caddr_t) clnt_res, + TIMEOUT)); +} diff -Nru libnvidia-container-1.3.0/src/driver.h libnvidia-container-1.4.0/src/driver.h --- libnvidia-container-1.3.0/src/driver.h 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/src/driver.h 2021-08-12 09:45:44.000000000 +0000 @@ -17,6 +17,7 @@ #include #include "error.h" +#include "dxcore.h" #define SONAME_LIBCUDA "libcuda.so.1" #define SONAME_LIBNVML "libnvidia-ml.so.1" @@ -39,7 +40,7 @@ void driver_program_1(struct svc_req *, register SVCXPRT *); -int driver_init(struct driver *, struct error *, const char *, uid_t, gid_t); +int driver_init(struct driver *, struct error *, struct dxcore_context *, const char *, uid_t, gid_t); int driver_shutdown(struct driver *); int driver_get_rm_version(struct driver *, char **); int driver_get_cuda_version(struct driver *, char **); diff -Nru libnvidia-container-1.3.0/src/driver_rpc.h libnvidia-container-1.4.0/src/driver_rpc.h --- libnvidia-container-1.3.0/src/driver_rpc.h 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/src/driver_rpc.h 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,456 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#ifndef _DRIVER_RPC_H_RPCGEN +#define _DRIVER_RPC_H_RPCGEN + +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wunused-variable" + +typedef int64_t ptr_t; + +struct driver_init_res { + int errcode; + union { + char *errmsg; + } driver_init_res_u; +}; +typedef struct driver_init_res driver_init_res; + +struct driver_shutdown_res { + int errcode; + union { + char *errmsg; + } driver_shutdown_res_u; +}; +typedef struct driver_shutdown_res driver_shutdown_res; + +struct driver_get_rm_version_res { + int errcode; + union { + char *vers; + char *errmsg; + } driver_get_rm_version_res_u; +}; +typedef struct driver_get_rm_version_res driver_get_rm_version_res; + +struct driver_cuda_version { + u_int major; + u_int minor; +}; +typedef struct driver_cuda_version driver_cuda_version; + +struct driver_get_cuda_version_res { + int errcode; + union { + driver_cuda_version vers; + char *errmsg; + } driver_get_cuda_version_res_u; +}; +typedef struct driver_get_cuda_version_res driver_get_cuda_version_res; + +struct driver_device_arch { + u_int major; + u_int minor; +}; +typedef struct driver_device_arch driver_device_arch; + +struct driver_get_device_arch_res { + int errcode; + union { + driver_device_arch arch; + char *errmsg; + } driver_get_device_arch_res_u; +}; +typedef struct driver_get_device_arch_res driver_get_device_arch_res; + +struct driver_get_device_count_res { + int errcode; + union { + u_int count; + char *errmsg; + } driver_get_device_count_res_u; +}; +typedef struct driver_get_device_count_res driver_get_device_count_res; + +struct driver_get_device_res { + int errcode; + union { + ptr_t dev; + char *errmsg; + } driver_get_device_res_u; +}; +typedef struct driver_get_device_res driver_get_device_res; + +struct driver_get_device_minor_res { + int errcode; + union { + u_int minor; + char *errmsg; + } driver_get_device_minor_res_u; +}; +typedef struct driver_get_device_minor_res driver_get_device_minor_res; + +struct driver_get_device_busid_res { + int errcode; + union { + char *busid; + char *errmsg; + } driver_get_device_busid_res_u; +}; +typedef struct driver_get_device_busid_res driver_get_device_busid_res; + +struct driver_get_device_uuid_res { + int errcode; + union { + char *uuid; + char *errmsg; + } driver_get_device_uuid_res_u; +}; +typedef struct driver_get_device_uuid_res driver_get_device_uuid_res; + +struct driver_get_device_model_res { + int errcode; + union { + char *model; + char *errmsg; + } driver_get_device_model_res_u; +}; +typedef struct driver_get_device_model_res driver_get_device_model_res; + +struct driver_get_device_brand_res { + int errcode; + union { + char *brand; + char *errmsg; + } driver_get_device_brand_res_u; +}; +typedef struct driver_get_device_brand_res driver_get_device_brand_res; + +struct driver_device_mig_mode { + int error; + u_int current; + u_int pending; +}; +typedef struct driver_device_mig_mode driver_device_mig_mode; + +struct driver_get_device_mig_mode_res { + int errcode; + union { + driver_device_mig_mode mode; + char *errmsg; + } driver_get_device_mig_mode_res_u; +}; +typedef struct driver_get_device_mig_mode_res driver_get_device_mig_mode_res; + +struct driver_get_device_max_mig_device_count_res { + int errcode; + union { + u_int count; + char *errmsg; + } driver_get_device_max_mig_device_count_res_u; +}; +typedef struct driver_get_device_max_mig_device_count_res driver_get_device_max_mig_device_count_res; + +struct driver_get_device_mig_device_res { + int errcode; + union { + ptr_t dev; + char *errmsg; + } driver_get_device_mig_device_res_u; +}; +typedef struct driver_get_device_mig_device_res driver_get_device_mig_device_res; + +struct driver_get_device_gpu_instance_id_res { + int errcode; + union { + u_int id; + char *errmsg; + } driver_get_device_gpu_instance_id_res_u; +}; +typedef struct driver_get_device_gpu_instance_id_res driver_get_device_gpu_instance_id_res; + +struct driver_get_device_compute_instance_id_res { + int errcode; + union { + u_int id; + char *errmsg; + } driver_get_device_compute_instance_id_res_u; +}; +typedef struct driver_get_device_compute_instance_id_res driver_get_device_compute_instance_id_res; + +struct driver_get_device_1_argument { + ptr_t arg1; + u_int arg2; +}; +typedef struct driver_get_device_1_argument driver_get_device_1_argument; + +struct driver_get_device_minor_1_argument { + ptr_t arg1; + ptr_t arg2; +}; +typedef struct driver_get_device_minor_1_argument driver_get_device_minor_1_argument; + +struct driver_get_device_busid_1_argument { + ptr_t arg1; + ptr_t arg2; +}; +typedef struct driver_get_device_busid_1_argument driver_get_device_busid_1_argument; + +struct driver_get_device_uuid_1_argument { + ptr_t arg1; + ptr_t arg2; +}; +typedef struct driver_get_device_uuid_1_argument driver_get_device_uuid_1_argument; + +struct driver_get_device_arch_1_argument { + ptr_t arg1; + ptr_t arg2; +}; +typedef struct driver_get_device_arch_1_argument driver_get_device_arch_1_argument; + +struct driver_get_device_model_1_argument { + ptr_t arg1; + ptr_t arg2; +}; +typedef struct driver_get_device_model_1_argument driver_get_device_model_1_argument; + +struct driver_get_device_brand_1_argument { + ptr_t arg1; + ptr_t arg2; +}; +typedef struct driver_get_device_brand_1_argument driver_get_device_brand_1_argument; + +struct driver_get_device_mig_mode_1_argument { + ptr_t arg1; + ptr_t arg2; +}; +typedef struct driver_get_device_mig_mode_1_argument driver_get_device_mig_mode_1_argument; + +struct driver_get_device_max_mig_device_count_1_argument { + ptr_t arg1; + ptr_t arg2; +}; +typedef struct driver_get_device_max_mig_device_count_1_argument driver_get_device_max_mig_device_count_1_argument; + +struct driver_get_device_mig_device_1_argument { + ptr_t arg1; + ptr_t arg2; + u_int arg3; +}; +typedef struct driver_get_device_mig_device_1_argument driver_get_device_mig_device_1_argument; + +struct driver_get_device_gpu_instance_id_1_argument { + ptr_t arg1; + ptr_t arg2; +}; +typedef struct driver_get_device_gpu_instance_id_1_argument driver_get_device_gpu_instance_id_1_argument; + +struct driver_get_device_compute_instance_id_1_argument { + ptr_t arg1; + ptr_t arg2; +}; +typedef struct driver_get_device_compute_instance_id_1_argument driver_get_device_compute_instance_id_1_argument; + +#define DRIVER_PROGRAM 0x1 +#define DRIVER_VERSION 1 + +#if defined(__STDC__) || defined(__cplusplus) +#define DRIVER_INIT 1 +extern enum clnt_stat driver_init_1(ptr_t , driver_init_res *, CLIENT *); +extern bool_t driver_init_1_svc(ptr_t , driver_init_res *, struct svc_req *); +#define DRIVER_SHUTDOWN 2 +extern enum clnt_stat driver_shutdown_1(ptr_t , driver_shutdown_res *, CLIENT *); +extern bool_t driver_shutdown_1_svc(ptr_t , driver_shutdown_res *, struct svc_req *); +#define DRIVER_GET_RM_VERSION 3 +extern enum clnt_stat driver_get_rm_version_1(ptr_t , driver_get_rm_version_res *, CLIENT *); +extern bool_t driver_get_rm_version_1_svc(ptr_t , driver_get_rm_version_res *, struct svc_req *); +#define DRIVER_GET_CUDA_VERSION 4 +extern enum clnt_stat driver_get_cuda_version_1(ptr_t , driver_get_cuda_version_res *, CLIENT *); +extern bool_t driver_get_cuda_version_1_svc(ptr_t , driver_get_cuda_version_res *, struct svc_req *); +#define DRIVER_GET_DEVICE_COUNT 5 +extern enum clnt_stat driver_get_device_count_1(ptr_t , driver_get_device_count_res *, CLIENT *); +extern bool_t driver_get_device_count_1_svc(ptr_t , driver_get_device_count_res *, struct svc_req *); +#define DRIVER_GET_DEVICE 6 +extern enum clnt_stat driver_get_device_1(ptr_t , u_int , driver_get_device_res *, CLIENT *); +extern bool_t driver_get_device_1_svc(ptr_t , u_int , driver_get_device_res *, struct svc_req *); +#define DRIVER_GET_DEVICE_MINOR 7 +extern enum clnt_stat driver_get_device_minor_1(ptr_t , ptr_t , driver_get_device_minor_res *, CLIENT *); +extern bool_t driver_get_device_minor_1_svc(ptr_t , ptr_t , driver_get_device_minor_res *, struct svc_req *); +#define DRIVER_GET_DEVICE_BUSID 8 +extern enum clnt_stat driver_get_device_busid_1(ptr_t , ptr_t , driver_get_device_busid_res *, CLIENT *); +extern bool_t driver_get_device_busid_1_svc(ptr_t , ptr_t , driver_get_device_busid_res *, struct svc_req *); +#define DRIVER_GET_DEVICE_UUID 9 +extern enum clnt_stat driver_get_device_uuid_1(ptr_t , ptr_t , driver_get_device_uuid_res *, CLIENT *); +extern bool_t driver_get_device_uuid_1_svc(ptr_t , ptr_t , driver_get_device_uuid_res *, struct svc_req *); +#define DRIVER_GET_DEVICE_ARCH 10 +extern enum clnt_stat driver_get_device_arch_1(ptr_t , ptr_t , driver_get_device_arch_res *, CLIENT *); +extern bool_t driver_get_device_arch_1_svc(ptr_t , ptr_t , driver_get_device_arch_res *, struct svc_req *); +#define DRIVER_GET_DEVICE_MODEL 11 +extern enum clnt_stat driver_get_device_model_1(ptr_t , ptr_t , driver_get_device_model_res *, CLIENT *); +extern bool_t driver_get_device_model_1_svc(ptr_t , ptr_t , driver_get_device_model_res *, struct svc_req *); +#define DRIVER_GET_DEVICE_BRAND 12 +extern enum clnt_stat driver_get_device_brand_1(ptr_t , ptr_t , driver_get_device_brand_res *, CLIENT *); +extern bool_t driver_get_device_brand_1_svc(ptr_t , ptr_t , driver_get_device_brand_res *, struct svc_req *); +#define DRIVER_GET_DEVICE_MIG_MODE 13 +extern enum clnt_stat driver_get_device_mig_mode_1(ptr_t , ptr_t , driver_get_device_mig_mode_res *, CLIENT *); +extern bool_t driver_get_device_mig_mode_1_svc(ptr_t , ptr_t , driver_get_device_mig_mode_res *, struct svc_req *); +#define DRIVER_GET_DEVICE_MAX_MIG_DEVICE_COUNT 14 +extern enum clnt_stat driver_get_device_max_mig_device_count_1(ptr_t , ptr_t , driver_get_device_max_mig_device_count_res *, CLIENT *); +extern bool_t driver_get_device_max_mig_device_count_1_svc(ptr_t , ptr_t , driver_get_device_max_mig_device_count_res *, struct svc_req *); +#define DRIVER_GET_DEVICE_MIG_DEVICE 15 +extern enum clnt_stat driver_get_device_mig_device_1(ptr_t , ptr_t , u_int , driver_get_device_mig_device_res *, CLIENT *); +extern bool_t driver_get_device_mig_device_1_svc(ptr_t , ptr_t , u_int , driver_get_device_mig_device_res *, struct svc_req *); +#define DRIVER_GET_DEVICE_GPU_INSTANCE_ID 16 +extern enum clnt_stat driver_get_device_gpu_instance_id_1(ptr_t , ptr_t , driver_get_device_gpu_instance_id_res *, CLIENT *); +extern bool_t driver_get_device_gpu_instance_id_1_svc(ptr_t , ptr_t , driver_get_device_gpu_instance_id_res *, struct svc_req *); +#define DRIVER_GET_DEVICE_COMPUTE_INSTANCE_ID 17 +extern enum clnt_stat driver_get_device_compute_instance_id_1(ptr_t , ptr_t , driver_get_device_compute_instance_id_res *, CLIENT *); +extern bool_t driver_get_device_compute_instance_id_1_svc(ptr_t , ptr_t , driver_get_device_compute_instance_id_res *, struct svc_req *); +extern int driver_program_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t); + +#else /* K&R C */ +#define DRIVER_INIT 1 +extern enum clnt_stat driver_init_1(); +extern bool_t driver_init_1_svc(); +#define DRIVER_SHUTDOWN 2 +extern enum clnt_stat driver_shutdown_1(); +extern bool_t driver_shutdown_1_svc(); +#define DRIVER_GET_RM_VERSION 3 +extern enum clnt_stat driver_get_rm_version_1(); +extern bool_t driver_get_rm_version_1_svc(); +#define DRIVER_GET_CUDA_VERSION 4 +extern enum clnt_stat driver_get_cuda_version_1(); +extern bool_t driver_get_cuda_version_1_svc(); +#define DRIVER_GET_DEVICE_COUNT 5 +extern enum clnt_stat driver_get_device_count_1(); +extern bool_t driver_get_device_count_1_svc(); +#define DRIVER_GET_DEVICE 6 +extern enum clnt_stat driver_get_device_1(); +extern bool_t driver_get_device_1_svc(); +#define DRIVER_GET_DEVICE_MINOR 7 +extern enum clnt_stat driver_get_device_minor_1(); +extern bool_t driver_get_device_minor_1_svc(); +#define DRIVER_GET_DEVICE_BUSID 8 +extern enum clnt_stat driver_get_device_busid_1(); +extern bool_t driver_get_device_busid_1_svc(); +#define DRIVER_GET_DEVICE_UUID 9 +extern enum clnt_stat driver_get_device_uuid_1(); +extern bool_t driver_get_device_uuid_1_svc(); +#define DRIVER_GET_DEVICE_ARCH 10 +extern enum clnt_stat driver_get_device_arch_1(); +extern bool_t driver_get_device_arch_1_svc(); +#define DRIVER_GET_DEVICE_MODEL 11 +extern enum clnt_stat driver_get_device_model_1(); +extern bool_t driver_get_device_model_1_svc(); +#define DRIVER_GET_DEVICE_BRAND 12 +extern enum clnt_stat driver_get_device_brand_1(); +extern bool_t driver_get_device_brand_1_svc(); +#define DRIVER_GET_DEVICE_MIG_MODE 13 +extern enum clnt_stat driver_get_device_mig_mode_1(); +extern bool_t driver_get_device_mig_mode_1_svc(); +#define DRIVER_GET_DEVICE_MAX_MIG_DEVICE_COUNT 14 +extern enum clnt_stat driver_get_device_max_mig_device_count_1(); +extern bool_t driver_get_device_max_mig_device_count_1_svc(); +#define DRIVER_GET_DEVICE_MIG_DEVICE 15 +extern enum clnt_stat driver_get_device_mig_device_1(); +extern bool_t driver_get_device_mig_device_1_svc(); +#define DRIVER_GET_DEVICE_GPU_INSTANCE_ID 16 +extern enum clnt_stat driver_get_device_gpu_instance_id_1(); +extern bool_t driver_get_device_gpu_instance_id_1_svc(); +#define DRIVER_GET_DEVICE_COMPUTE_INSTANCE_ID 17 +extern enum clnt_stat driver_get_device_compute_instance_id_1(); +extern bool_t driver_get_device_compute_instance_id_1_svc(); +extern int driver_program_1_freeresult (); +#endif /* K&R C */ + +/* the xdr functions */ + +#if defined(__STDC__) || defined(__cplusplus) +extern bool_t xdr_ptr_t (XDR *, ptr_t*); +extern bool_t xdr_driver_init_res (XDR *, driver_init_res*); +extern bool_t xdr_driver_shutdown_res (XDR *, driver_shutdown_res*); +extern bool_t xdr_driver_get_rm_version_res (XDR *, driver_get_rm_version_res*); +extern bool_t xdr_driver_cuda_version (XDR *, driver_cuda_version*); +extern bool_t xdr_driver_get_cuda_version_res (XDR *, driver_get_cuda_version_res*); +extern bool_t xdr_driver_device_arch (XDR *, driver_device_arch*); +extern bool_t xdr_driver_get_device_arch_res (XDR *, driver_get_device_arch_res*); +extern bool_t xdr_driver_get_device_count_res (XDR *, driver_get_device_count_res*); +extern bool_t xdr_driver_get_device_res (XDR *, driver_get_device_res*); +extern bool_t xdr_driver_get_device_minor_res (XDR *, driver_get_device_minor_res*); +extern bool_t xdr_driver_get_device_busid_res (XDR *, driver_get_device_busid_res*); +extern bool_t xdr_driver_get_device_uuid_res (XDR *, driver_get_device_uuid_res*); +extern bool_t xdr_driver_get_device_model_res (XDR *, driver_get_device_model_res*); +extern bool_t xdr_driver_get_device_brand_res (XDR *, driver_get_device_brand_res*); +extern bool_t xdr_driver_device_mig_mode (XDR *, driver_device_mig_mode*); +extern bool_t xdr_driver_get_device_mig_mode_res (XDR *, driver_get_device_mig_mode_res*); +extern bool_t xdr_driver_get_device_max_mig_device_count_res (XDR *, driver_get_device_max_mig_device_count_res*); +extern bool_t xdr_driver_get_device_mig_device_res (XDR *, driver_get_device_mig_device_res*); +extern bool_t xdr_driver_get_device_gpu_instance_id_res (XDR *, driver_get_device_gpu_instance_id_res*); +extern bool_t xdr_driver_get_device_compute_instance_id_res (XDR *, driver_get_device_compute_instance_id_res*); +extern bool_t xdr_driver_get_device_1_argument (XDR *, driver_get_device_1_argument*); +extern bool_t xdr_driver_get_device_minor_1_argument (XDR *, driver_get_device_minor_1_argument*); +extern bool_t xdr_driver_get_device_busid_1_argument (XDR *, driver_get_device_busid_1_argument*); +extern bool_t xdr_driver_get_device_uuid_1_argument (XDR *, driver_get_device_uuid_1_argument*); +extern bool_t xdr_driver_get_device_arch_1_argument (XDR *, driver_get_device_arch_1_argument*); +extern bool_t xdr_driver_get_device_model_1_argument (XDR *, driver_get_device_model_1_argument*); +extern bool_t xdr_driver_get_device_brand_1_argument (XDR *, driver_get_device_brand_1_argument*); +extern bool_t xdr_driver_get_device_mig_mode_1_argument (XDR *, driver_get_device_mig_mode_1_argument*); +extern bool_t xdr_driver_get_device_max_mig_device_count_1_argument (XDR *, driver_get_device_max_mig_device_count_1_argument*); +extern bool_t xdr_driver_get_device_mig_device_1_argument (XDR *, driver_get_device_mig_device_1_argument*); +extern bool_t xdr_driver_get_device_gpu_instance_id_1_argument (XDR *, driver_get_device_gpu_instance_id_1_argument*); +extern bool_t xdr_driver_get_device_compute_instance_id_1_argument (XDR *, driver_get_device_compute_instance_id_1_argument*); + +#else /* K&R C */ +extern bool_t xdr_ptr_t (); +extern bool_t xdr_driver_init_res (); +extern bool_t xdr_driver_shutdown_res (); +extern bool_t xdr_driver_get_rm_version_res (); +extern bool_t xdr_driver_cuda_version (); +extern bool_t xdr_driver_get_cuda_version_res (); +extern bool_t xdr_driver_device_arch (); +extern bool_t xdr_driver_get_device_arch_res (); +extern bool_t xdr_driver_get_device_count_res (); +extern bool_t xdr_driver_get_device_res (); +extern bool_t xdr_driver_get_device_minor_res (); +extern bool_t xdr_driver_get_device_busid_res (); +extern bool_t xdr_driver_get_device_uuid_res (); +extern bool_t xdr_driver_get_device_model_res (); +extern bool_t xdr_driver_get_device_brand_res (); +extern bool_t xdr_driver_device_mig_mode (); +extern bool_t xdr_driver_get_device_mig_mode_res (); +extern bool_t xdr_driver_get_device_max_mig_device_count_res (); +extern bool_t xdr_driver_get_device_mig_device_res (); +extern bool_t xdr_driver_get_device_gpu_instance_id_res (); +extern bool_t xdr_driver_get_device_compute_instance_id_res (); +extern bool_t xdr_driver_get_device_1_argument (); +extern bool_t xdr_driver_get_device_minor_1_argument (); +extern bool_t xdr_driver_get_device_busid_1_argument (); +extern bool_t xdr_driver_get_device_uuid_1_argument (); +extern bool_t xdr_driver_get_device_arch_1_argument (); +extern bool_t xdr_driver_get_device_model_1_argument (); +extern bool_t xdr_driver_get_device_brand_1_argument (); +extern bool_t xdr_driver_get_device_mig_mode_1_argument (); +extern bool_t xdr_driver_get_device_max_mig_device_count_1_argument (); +extern bool_t xdr_driver_get_device_mig_device_1_argument (); +extern bool_t xdr_driver_get_device_gpu_instance_id_1_argument (); +extern bool_t xdr_driver_get_device_compute_instance_id_1_argument (); + +#endif /* K&R C */ + +#ifdef __cplusplus +} +#endif + +#endif /* !_DRIVER_RPC_H_RPCGEN */ diff -Nru libnvidia-container-1.3.0/src/driver_svc.c libnvidia-container-1.4.0/src/driver_svc.c --- libnvidia-container-1.3.0/src/driver_svc.c 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/src/driver_svc.c 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,297 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#include "driver_rpc.h" +#include +#include +#include +#include +#include +#include +#include + +#ifndef SIG_PF +#define SIG_PF void(*)(int) +#endif +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wunused-variable" + +int +_driver_init_1 (ptr_t *argp, void *result, struct svc_req *rqstp) +{ + return (driver_init_1_svc(*argp, result, rqstp)); +} + +int +_driver_shutdown_1 (ptr_t *argp, void *result, struct svc_req *rqstp) +{ + return (driver_shutdown_1_svc(*argp, result, rqstp)); +} + +int +_driver_get_rm_version_1 (ptr_t *argp, void *result, struct svc_req *rqstp) +{ + return (driver_get_rm_version_1_svc(*argp, result, rqstp)); +} + +int +_driver_get_cuda_version_1 (ptr_t *argp, void *result, struct svc_req *rqstp) +{ + return (driver_get_cuda_version_1_svc(*argp, result, rqstp)); +} + +int +_driver_get_device_count_1 (ptr_t *argp, void *result, struct svc_req *rqstp) +{ + return (driver_get_device_count_1_svc(*argp, result, rqstp)); +} + +int +_driver_get_device_1 (driver_get_device_1_argument *argp, void *result, struct svc_req *rqstp) +{ + return (driver_get_device_1_svc(argp->arg1, argp->arg2, result, rqstp)); +} + +int +_driver_get_device_minor_1 (driver_get_device_minor_1_argument *argp, void *result, struct svc_req *rqstp) +{ + return (driver_get_device_minor_1_svc(argp->arg1, argp->arg2, result, rqstp)); +} + +int +_driver_get_device_busid_1 (driver_get_device_busid_1_argument *argp, void *result, struct svc_req *rqstp) +{ + return (driver_get_device_busid_1_svc(argp->arg1, argp->arg2, result, rqstp)); +} + +int +_driver_get_device_uuid_1 (driver_get_device_uuid_1_argument *argp, void *result, struct svc_req *rqstp) +{ + return (driver_get_device_uuid_1_svc(argp->arg1, argp->arg2, result, rqstp)); +} + +int +_driver_get_device_arch_1 (driver_get_device_arch_1_argument *argp, void *result, struct svc_req *rqstp) +{ + return (driver_get_device_arch_1_svc(argp->arg1, argp->arg2, result, rqstp)); +} + +int +_driver_get_device_model_1 (driver_get_device_model_1_argument *argp, void *result, struct svc_req *rqstp) +{ + return (driver_get_device_model_1_svc(argp->arg1, argp->arg2, result, rqstp)); +} + +int +_driver_get_device_brand_1 (driver_get_device_brand_1_argument *argp, void *result, struct svc_req *rqstp) +{ + return (driver_get_device_brand_1_svc(argp->arg1, argp->arg2, result, rqstp)); +} + +int +_driver_get_device_mig_mode_1 (driver_get_device_mig_mode_1_argument *argp, void *result, struct svc_req *rqstp) +{ + return (driver_get_device_mig_mode_1_svc(argp->arg1, argp->arg2, result, rqstp)); +} + +int +_driver_get_device_max_mig_device_count_1 (driver_get_device_max_mig_device_count_1_argument *argp, void *result, struct svc_req *rqstp) +{ + return (driver_get_device_max_mig_device_count_1_svc(argp->arg1, argp->arg2, result, rqstp)); +} + +int +_driver_get_device_mig_device_1 (driver_get_device_mig_device_1_argument *argp, void *result, struct svc_req *rqstp) +{ + return (driver_get_device_mig_device_1_svc(argp->arg1, argp->arg2, argp->arg3, result, rqstp)); +} + +int +_driver_get_device_gpu_instance_id_1 (driver_get_device_gpu_instance_id_1_argument *argp, void *result, struct svc_req *rqstp) +{ + return (driver_get_device_gpu_instance_id_1_svc(argp->arg1, argp->arg2, result, rqstp)); +} + +int +_driver_get_device_compute_instance_id_1 (driver_get_device_compute_instance_id_1_argument *argp, void *result, struct svc_req *rqstp) +{ + return (driver_get_device_compute_instance_id_1_svc(argp->arg1, argp->arg2, result, rqstp)); +} + +void +driver_program_1(struct svc_req *rqstp, register SVCXPRT *transp) +{ + union { + ptr_t driver_init_1_arg; + ptr_t driver_shutdown_1_arg; + ptr_t driver_get_rm_version_1_arg; + ptr_t driver_get_cuda_version_1_arg; + ptr_t driver_get_device_count_1_arg; + driver_get_device_1_argument driver_get_device_1_arg; + driver_get_device_minor_1_argument driver_get_device_minor_1_arg; + driver_get_device_busid_1_argument driver_get_device_busid_1_arg; + driver_get_device_uuid_1_argument driver_get_device_uuid_1_arg; + driver_get_device_arch_1_argument driver_get_device_arch_1_arg; + driver_get_device_model_1_argument driver_get_device_model_1_arg; + driver_get_device_brand_1_argument driver_get_device_brand_1_arg; + driver_get_device_mig_mode_1_argument driver_get_device_mig_mode_1_arg; + driver_get_device_max_mig_device_count_1_argument driver_get_device_max_mig_device_count_1_arg; + driver_get_device_mig_device_1_argument driver_get_device_mig_device_1_arg; + driver_get_device_gpu_instance_id_1_argument driver_get_device_gpu_instance_id_1_arg; + driver_get_device_compute_instance_id_1_argument driver_get_device_compute_instance_id_1_arg; + } argument; + union { + driver_init_res driver_init_1_res; + driver_shutdown_res driver_shutdown_1_res; + driver_get_rm_version_res driver_get_rm_version_1_res; + driver_get_cuda_version_res driver_get_cuda_version_1_res; + driver_get_device_count_res driver_get_device_count_1_res; + driver_get_device_res driver_get_device_1_res; + driver_get_device_minor_res driver_get_device_minor_1_res; + driver_get_device_busid_res driver_get_device_busid_1_res; + driver_get_device_uuid_res driver_get_device_uuid_1_res; + driver_get_device_arch_res driver_get_device_arch_1_res; + driver_get_device_model_res driver_get_device_model_1_res; + driver_get_device_brand_res driver_get_device_brand_1_res; + driver_get_device_mig_mode_res driver_get_device_mig_mode_1_res; + driver_get_device_max_mig_device_count_res driver_get_device_max_mig_device_count_1_res; + driver_get_device_mig_device_res driver_get_device_mig_device_1_res; + driver_get_device_gpu_instance_id_res driver_get_device_gpu_instance_id_1_res; + driver_get_device_compute_instance_id_res driver_get_device_compute_instance_id_1_res; + } result; + bool_t retval; + xdrproc_t _xdr_argument, _xdr_result; + bool_t (*local)(char *, void *, struct svc_req *); + + switch (rqstp->rq_proc) { + case NULLPROC: + (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL); + return; + + case DRIVER_INIT: + _xdr_argument = (xdrproc_t) xdr_ptr_t; + _xdr_result = (xdrproc_t) xdr_driver_init_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_init_1; + break; + + case DRIVER_SHUTDOWN: + _xdr_argument = (xdrproc_t) xdr_ptr_t; + _xdr_result = (xdrproc_t) xdr_driver_shutdown_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_shutdown_1; + break; + + case DRIVER_GET_RM_VERSION: + _xdr_argument = (xdrproc_t) xdr_ptr_t; + _xdr_result = (xdrproc_t) xdr_driver_get_rm_version_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_get_rm_version_1; + break; + + case DRIVER_GET_CUDA_VERSION: + _xdr_argument = (xdrproc_t) xdr_ptr_t; + _xdr_result = (xdrproc_t) xdr_driver_get_cuda_version_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_get_cuda_version_1; + break; + + case DRIVER_GET_DEVICE_COUNT: + _xdr_argument = (xdrproc_t) xdr_ptr_t; + _xdr_result = (xdrproc_t) xdr_driver_get_device_count_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_get_device_count_1; + break; + + case DRIVER_GET_DEVICE: + _xdr_argument = (xdrproc_t) xdr_driver_get_device_1_argument; + _xdr_result = (xdrproc_t) xdr_driver_get_device_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_get_device_1; + break; + + case DRIVER_GET_DEVICE_MINOR: + _xdr_argument = (xdrproc_t) xdr_driver_get_device_minor_1_argument; + _xdr_result = (xdrproc_t) xdr_driver_get_device_minor_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_get_device_minor_1; + break; + + case DRIVER_GET_DEVICE_BUSID: + _xdr_argument = (xdrproc_t) xdr_driver_get_device_busid_1_argument; + _xdr_result = (xdrproc_t) xdr_driver_get_device_busid_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_get_device_busid_1; + break; + + case DRIVER_GET_DEVICE_UUID: + _xdr_argument = (xdrproc_t) xdr_driver_get_device_uuid_1_argument; + _xdr_result = (xdrproc_t) xdr_driver_get_device_uuid_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_get_device_uuid_1; + break; + + case DRIVER_GET_DEVICE_ARCH: + _xdr_argument = (xdrproc_t) xdr_driver_get_device_arch_1_argument; + _xdr_result = (xdrproc_t) xdr_driver_get_device_arch_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_get_device_arch_1; + break; + + case DRIVER_GET_DEVICE_MODEL: + _xdr_argument = (xdrproc_t) xdr_driver_get_device_model_1_argument; + _xdr_result = (xdrproc_t) xdr_driver_get_device_model_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_get_device_model_1; + break; + + case DRIVER_GET_DEVICE_BRAND: + _xdr_argument = (xdrproc_t) xdr_driver_get_device_brand_1_argument; + _xdr_result = (xdrproc_t) xdr_driver_get_device_brand_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_get_device_brand_1; + break; + + case DRIVER_GET_DEVICE_MIG_MODE: + _xdr_argument = (xdrproc_t) xdr_driver_get_device_mig_mode_1_argument; + _xdr_result = (xdrproc_t) xdr_driver_get_device_mig_mode_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_get_device_mig_mode_1; + break; + + case DRIVER_GET_DEVICE_MAX_MIG_DEVICE_COUNT: + _xdr_argument = (xdrproc_t) xdr_driver_get_device_max_mig_device_count_1_argument; + _xdr_result = (xdrproc_t) xdr_driver_get_device_max_mig_device_count_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_get_device_max_mig_device_count_1; + break; + + case DRIVER_GET_DEVICE_MIG_DEVICE: + _xdr_argument = (xdrproc_t) xdr_driver_get_device_mig_device_1_argument; + _xdr_result = (xdrproc_t) xdr_driver_get_device_mig_device_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_get_device_mig_device_1; + break; + + case DRIVER_GET_DEVICE_GPU_INSTANCE_ID: + _xdr_argument = (xdrproc_t) xdr_driver_get_device_gpu_instance_id_1_argument; + _xdr_result = (xdrproc_t) xdr_driver_get_device_gpu_instance_id_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_get_device_gpu_instance_id_1; + break; + + case DRIVER_GET_DEVICE_COMPUTE_INSTANCE_ID: + _xdr_argument = (xdrproc_t) xdr_driver_get_device_compute_instance_id_1_argument; + _xdr_result = (xdrproc_t) xdr_driver_get_device_compute_instance_id_res; + local = (bool_t (*) (char *, void *, struct svc_req *))_driver_get_device_compute_instance_id_1; + break; + + default: + svcerr_noproc (transp); + return; + } + memset ((char *)&argument, 0, sizeof (argument)); + if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { + svcerr_decode (transp); + return; + } + retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp); + if (retval > 0 && !svc_sendreply(transp, (xdrproc_t) _xdr_result, (char *)&result)) { + svcerr_systemerr (transp); + } + if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) { + fprintf (stderr, "%s", "unable to free arguments"); + exit (1); + } + if (!driver_program_1_freeresult (transp, _xdr_result, (caddr_t) &result)) + fprintf (stderr, "%s", "unable to free results"); + + return; +} diff -Nru libnvidia-container-1.3.0/src/driver_xdr.c libnvidia-container-1.4.0/src/driver_xdr.c --- libnvidia-container-1.3.0/src/driver_xdr.c 1970-01-01 00:00:00.000000000 +0000 +++ libnvidia-container-1.4.0/src/driver_xdr.c 2021-08-12 09:45:44.000000000 +0000 @@ -0,0 +1,515 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#include "driver_rpc.h" +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wunused-variable" + +bool_t +xdr_ptr_t (XDR *xdrs, ptr_t *objp) +{ + register int32_t *buf; + + if (!xdr_int64_t (xdrs, objp)) + return FALSE; + return TRUE; +} + +bool_t +xdr_driver_init_res (XDR *xdrs, driver_init_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + break; + default: + if (!xdr_string (xdrs, &objp->driver_init_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_shutdown_res (XDR *xdrs, driver_shutdown_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + break; + default: + if (!xdr_string (xdrs, &objp->driver_shutdown_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_get_rm_version_res (XDR *xdrs, driver_get_rm_version_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + if (!xdr_string (xdrs, &objp->driver_get_rm_version_res_u.vers, ~0)) + return FALSE; + break; + default: + if (!xdr_string (xdrs, &objp->driver_get_rm_version_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_cuda_version (XDR *xdrs, driver_cuda_version *objp) +{ + register int32_t *buf; + + if (!xdr_u_int (xdrs, &objp->major)) + return FALSE; + if (!xdr_u_int (xdrs, &objp->minor)) + return FALSE; + return TRUE; +} + +bool_t +xdr_driver_get_cuda_version_res (XDR *xdrs, driver_get_cuda_version_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + if (!xdr_driver_cuda_version (xdrs, &objp->driver_get_cuda_version_res_u.vers)) + return FALSE; + break; + default: + if (!xdr_string (xdrs, &objp->driver_get_cuda_version_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_device_arch (XDR *xdrs, driver_device_arch *objp) +{ + register int32_t *buf; + + if (!xdr_u_int (xdrs, &objp->major)) + return FALSE; + if (!xdr_u_int (xdrs, &objp->minor)) + return FALSE; + return TRUE; +} + +bool_t +xdr_driver_get_device_arch_res (XDR *xdrs, driver_get_device_arch_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + if (!xdr_driver_device_arch (xdrs, &objp->driver_get_device_arch_res_u.arch)) + return FALSE; + break; + default: + if (!xdr_string (xdrs, &objp->driver_get_device_arch_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_get_device_count_res (XDR *xdrs, driver_get_device_count_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + if (!xdr_u_int (xdrs, &objp->driver_get_device_count_res_u.count)) + return FALSE; + break; + default: + if (!xdr_string (xdrs, &objp->driver_get_device_count_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_get_device_res (XDR *xdrs, driver_get_device_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + if (!xdr_ptr_t (xdrs, &objp->driver_get_device_res_u.dev)) + return FALSE; + break; + default: + if (!xdr_string (xdrs, &objp->driver_get_device_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_get_device_minor_res (XDR *xdrs, driver_get_device_minor_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + if (!xdr_u_int (xdrs, &objp->driver_get_device_minor_res_u.minor)) + return FALSE; + break; + default: + if (!xdr_string (xdrs, &objp->driver_get_device_minor_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_get_device_busid_res (XDR *xdrs, driver_get_device_busid_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + if (!xdr_string (xdrs, &objp->driver_get_device_busid_res_u.busid, ~0)) + return FALSE; + break; + default: + if (!xdr_string (xdrs, &objp->driver_get_device_busid_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_get_device_uuid_res (XDR *xdrs, driver_get_device_uuid_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + if (!xdr_string (xdrs, &objp->driver_get_device_uuid_res_u.uuid, ~0)) + return FALSE; + break; + default: + if (!xdr_string (xdrs, &objp->driver_get_device_uuid_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_get_device_model_res (XDR *xdrs, driver_get_device_model_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + if (!xdr_string (xdrs, &objp->driver_get_device_model_res_u.model, ~0)) + return FALSE; + break; + default: + if (!xdr_string (xdrs, &objp->driver_get_device_model_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_get_device_brand_res (XDR *xdrs, driver_get_device_brand_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + if (!xdr_string (xdrs, &objp->driver_get_device_brand_res_u.brand, ~0)) + return FALSE; + break; + default: + if (!xdr_string (xdrs, &objp->driver_get_device_brand_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_device_mig_mode (XDR *xdrs, driver_device_mig_mode *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->error)) + return FALSE; + if (!xdr_u_int (xdrs, &objp->current)) + return FALSE; + if (!xdr_u_int (xdrs, &objp->pending)) + return FALSE; + return TRUE; +} + +bool_t +xdr_driver_get_device_mig_mode_res (XDR *xdrs, driver_get_device_mig_mode_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + if (!xdr_driver_device_mig_mode (xdrs, &objp->driver_get_device_mig_mode_res_u.mode)) + return FALSE; + break; + default: + if (!xdr_string (xdrs, &objp->driver_get_device_mig_mode_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_get_device_max_mig_device_count_res (XDR *xdrs, driver_get_device_max_mig_device_count_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + if (!xdr_u_int (xdrs, &objp->driver_get_device_max_mig_device_count_res_u.count)) + return FALSE; + break; + default: + if (!xdr_string (xdrs, &objp->driver_get_device_max_mig_device_count_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_get_device_mig_device_res (XDR *xdrs, driver_get_device_mig_device_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + if (!xdr_ptr_t (xdrs, &objp->driver_get_device_mig_device_res_u.dev)) + return FALSE; + break; + default: + if (!xdr_string (xdrs, &objp->driver_get_device_mig_device_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_get_device_gpu_instance_id_res (XDR *xdrs, driver_get_device_gpu_instance_id_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + if (!xdr_u_int (xdrs, &objp->driver_get_device_gpu_instance_id_res_u.id)) + return FALSE; + break; + default: + if (!xdr_string (xdrs, &objp->driver_get_device_gpu_instance_id_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_get_device_compute_instance_id_res (XDR *xdrs, driver_get_device_compute_instance_id_res *objp) +{ + register int32_t *buf; + + if (!xdr_int (xdrs, &objp->errcode)) + return FALSE; + switch (objp->errcode) { + case 0: + if (!xdr_u_int (xdrs, &objp->driver_get_device_compute_instance_id_res_u.id)) + return FALSE; + break; + default: + if (!xdr_string (xdrs, &objp->driver_get_device_compute_instance_id_res_u.errmsg, ~0)) + return FALSE; + break; + } + return TRUE; +} + +bool_t +xdr_driver_get_device_1_argument (XDR *xdrs, driver_get_device_1_argument *objp) +{ + if (!xdr_ptr_t (xdrs, &objp->arg1)) + return FALSE; + if (!xdr_u_int (xdrs, &objp->arg2)) + return FALSE; + return TRUE; +} + +bool_t +xdr_driver_get_device_minor_1_argument (XDR *xdrs, driver_get_device_minor_1_argument *objp) +{ + if (!xdr_ptr_t (xdrs, &objp->arg1)) + return FALSE; + if (!xdr_ptr_t (xdrs, &objp->arg2)) + return FALSE; + return TRUE; +} + +bool_t +xdr_driver_get_device_busid_1_argument (XDR *xdrs, driver_get_device_busid_1_argument *objp) +{ + if (!xdr_ptr_t (xdrs, &objp->arg1)) + return FALSE; + if (!xdr_ptr_t (xdrs, &objp->arg2)) + return FALSE; + return TRUE; +} + +bool_t +xdr_driver_get_device_uuid_1_argument (XDR *xdrs, driver_get_device_uuid_1_argument *objp) +{ + if (!xdr_ptr_t (xdrs, &objp->arg1)) + return FALSE; + if (!xdr_ptr_t (xdrs, &objp->arg2)) + return FALSE; + return TRUE; +} + +bool_t +xdr_driver_get_device_arch_1_argument (XDR *xdrs, driver_get_device_arch_1_argument *objp) +{ + if (!xdr_ptr_t (xdrs, &objp->arg1)) + return FALSE; + if (!xdr_ptr_t (xdrs, &objp->arg2)) + return FALSE; + return TRUE; +} + +bool_t +xdr_driver_get_device_model_1_argument (XDR *xdrs, driver_get_device_model_1_argument *objp) +{ + if (!xdr_ptr_t (xdrs, &objp->arg1)) + return FALSE; + if (!xdr_ptr_t (xdrs, &objp->arg2)) + return FALSE; + return TRUE; +} + +bool_t +xdr_driver_get_device_brand_1_argument (XDR *xdrs, driver_get_device_brand_1_argument *objp) +{ + if (!xdr_ptr_t (xdrs, &objp->arg1)) + return FALSE; + if (!xdr_ptr_t (xdrs, &objp->arg2)) + return FALSE; + return TRUE; +} + +bool_t +xdr_driver_get_device_mig_mode_1_argument (XDR *xdrs, driver_get_device_mig_mode_1_argument *objp) +{ + if (!xdr_ptr_t (xdrs, &objp->arg1)) + return FALSE; + if (!xdr_ptr_t (xdrs, &objp->arg2)) + return FALSE; + return TRUE; +} + +bool_t +xdr_driver_get_device_max_mig_device_count_1_argument (XDR *xdrs, driver_get_device_max_mig_device_count_1_argument *objp) +{ + if (!xdr_ptr_t (xdrs, &objp->arg1)) + return FALSE; + if (!xdr_ptr_t (xdrs, &objp->arg2)) + return FALSE; + return TRUE; +} + +bool_t +xdr_driver_get_device_mig_device_1_argument (XDR *xdrs, driver_get_device_mig_device_1_argument *objp) +{ + if (!xdr_ptr_t (xdrs, &objp->arg1)) + return FALSE; + if (!xdr_ptr_t (xdrs, &objp->arg2)) + return FALSE; + if (!xdr_u_int (xdrs, &objp->arg3)) + return FALSE; + return TRUE; +} + +bool_t +xdr_driver_get_device_gpu_instance_id_1_argument (XDR *xdrs, driver_get_device_gpu_instance_id_1_argument *objp) +{ + if (!xdr_ptr_t (xdrs, &objp->arg1)) + return FALSE; + if (!xdr_ptr_t (xdrs, &objp->arg2)) + return FALSE; + return TRUE; +} + +bool_t +xdr_driver_get_device_compute_instance_id_1_argument (XDR *xdrs, driver_get_device_compute_instance_id_1_argument *objp) +{ + if (!xdr_ptr_t (xdrs, &objp->arg1)) + return FALSE; + if (!xdr_ptr_t (xdrs, &objp->arg2)) + return FALSE; + return TRUE; +} diff -Nru libnvidia-container-1.3.0/src/dxcore.c libnvidia-container-1.4.0/src/dxcore.c --- libnvidia-container-1.3.0/src/dxcore.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/src/dxcore.c 2021-08-12 09:45:44.000000000 +0000 @@ -13,9 +13,10 @@ */ static const char * const dxcore_nvidia_libs[] = { "libcuda.so.1.1", /* Core library for cuda support */ - "libcuda_loader.so", /* Core library for cuda support */ + "libcuda_loader.so", /* Core library for cuda support on WSL */ "libnvidia-ptxjitcompiler.so.1", /* Core library for PTX Jit support */ "libnvidia-ml.so.1", /* Core library for nvml */ + "libnvidia-ml_loader.so", /* Core library for nvml on WSL */ }; diff -Nru libnvidia-container-1.3.0/src/nvc.c libnvidia-container-1.4.0/src/nvc.c --- libnvidia-container-1.3.0/src/nvc.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/src/nvc.c 2021-08-12 09:45:44.000000000 +0000 @@ -143,6 +143,88 @@ } static int +mig_nvcaps_mknodes(struct error *err, int num_gpus) { + FILE *fp; + char line[PATH_MAX]; + char path[PATH_MAX]; + int gpu = -1, gi = -1, ci = -1, mig_minor = -1; + int rv = -1; + + // If the NV_CAPS_MIG_MINORS_PATH does not exist, then we are not on a + // MIG capable machine, so there is nothing to do. + if (!file_exists(NULL, NV_CAPS_MIG_MINORS_PATH)) + return (0); + + // Open NV_CAPS_MIG_MINORS_PATH for walking. + // The format of this file is discussed in: + // https://docs.nvidia.com/datacenter/tesla/mig-user-guide/index.html#unique_1576522674 + if ((fp = fopen(NV_CAPS_MIG_MINORS_PATH, "r")) == NULL) { + error_setx(err, "unable to open: %s", NV_CAPS_MIG_MINORS_PATH); + return (-1); + } + + // Walk through each line of NV_CAPS_MIG_MINORS_PATH + memset(line, 0, PATH_MAX); + memset(path, 0, PATH_MAX); + while (fgets(line, PATH_MAX - 1, fp)) { + // Look for a ci access entry and construct a path into /proc from it + if (sscanf(line, "gpu%d/gi%d/ci%d/access %d", &gpu, &gi, &ci, &mig_minor) == 4) { + if (gpu >= num_gpus) + continue; + if (sprintf(path, NV_COMP_INST_CAPS_PATH "/" NV_MIG_ACCESS_FILE, gpu, gi, ci) < 0) { + error_setx(err, "error constructing path for ci access file"); + goto fail; + } + // Look for a gi access entry and construct a path into /proc from it + } else if (sscanf(line, "gpu%d/gi%d/access %d", &gpu, &gi, &mig_minor) == 3) { + if (gpu >= num_gpus) + continue; + if (sprintf(path, NV_GPU_INST_CAPS_PATH "/" NV_MIG_ACCESS_FILE, gpu, gi) < 0) { + error_setx(err, "error constructing path for gi access file"); + goto fail; + } + // Look for a mig config entry and construct a path into /proc from it + } else if (sscanf(line, "config %d", &mig_minor) == 1) { + if (sprintf(path, NV_MIG_CAPS_PATH "/" NV_MIG_CONFIG_FILE) < 0) { + error_setx(err, "error constructing path for mig config file"); + goto fail; + } + // Look for a mig monitor entry and construct a path into /proc from it + } else if (sscanf(line, "monitor %d", &mig_minor) == 1) { + if (sprintf(path, NV_MIG_CAPS_PATH "/" NV_MIG_MONITOR_FILE) < 0) { + error_setx(err, "error constructing path for mig monitor file"); + goto fail; + } + // We encountered an unexpected pattern, so error out + } else { + error_setx(err, "unexpected line in mig-monitors file: %s", line); + goto fail; + } + + // This file contains entries for all possible MIG nvcaps on up + // to 32 GPUs. If the newly constructed path does not exist, + // then just move on because there are many entries in this + // file that will not be present on the machine. + if (!file_exists(NULL, path)) + continue; + + // Call into nvidia-modprobe code to perform the mknod() on + // /dev/nvidia-caps/nvidia-cap from the canonial + // /proc path we constructed. + log_infof("running mknod for " NV_CAPS_DEVICE_PATH " from %s", mig_minor, path); + if (nvidia_cap_mknod(path, &mig_minor) == 0) { + error_setx(err, "error running mknod for nvcap: %s", path); + goto fail; + } + } + rv = 0; + +fail: + fclose(fp); + return (rv); +} + +static int load_kernel_modules(struct error *err, const char *root) { int userns; @@ -193,18 +275,25 @@ if (nvidia_modprobe(0) == 0) log_err("could not load kernel module nvidia"); else { + log_info("running mknod for " NV_CTL_DEVICE_PATH); if (nvidia_mknod(NV_CTL_DEVICE_MINOR) == 0) log_err("could not create kernel module device node"); for (int i = 0; i < (int)devs.num_matches; ++i) { + log_infof("running mknod for " NV_DEVICE_PATH, i); if (nvidia_mknod(i) == 0) log_err("could not create kernel module device node"); } + log_info("running mknod for all nvcaps in " NV_CAPS_DEVICE_DIR); + if (mig_nvcaps_mknodes(err, devs.num_matches) < 0) + log_errf("could not create kernel module device nodes: %s", err->msg); + error_reset(err); } log_info("loading kernel module nvidia_uvm"); if (nvidia_uvm_modprobe() == 0) log_err("could not load kernel module nvidia_uvm"); else { + log_info("running mknod for " NV_UVM_DEVICE_PATH); if (nvidia_uvm_mknod(0) == 0) log_err("could not create kernel module device node"); } @@ -213,6 +302,7 @@ if (nvidia_modeset_modprobe() == 0) log_err("could not load kernel module nvidia_modeset"); else { + log_info("running mknod for " NV_MODESET_DEVICE_PATH); if (nvidia_modeset_mknod() == 0) log_err("could not create kernel module device node"); } @@ -309,11 +399,7 @@ goto fail; } - // NVML is not yet supported on WSL so we skip driver initialization. - // Once NVML support is added to WSL, this short-circuit will be removed. - if (ctx->dxcore.initialized) - log_warn("skipping driver initialization on WSL"); - else if (driver_init(&ctx->drv, &ctx->err, ctx->cfg.root, ctx->cfg.uid, ctx->cfg.gid) < 0) + if (driver_init(&ctx->drv, &ctx->err, &ctx->dxcore, ctx->cfg.root, ctx->cfg.uid, ctx->cfg.gid) < 0) goto fail; ctx->initialized = true; @@ -335,11 +421,7 @@ return (0); log_info("shutting down library context"); - // NVML is not yet supported on WSL so we skip driver shutdown. - // Once NVML support is added to WSL, this short-circuit will be removed. - if (ctx->dxcore.initialized) - log_warn("skipping driver shutdown on WSL"); - else if (driver_shutdown(&ctx->drv) < 0) + if (driver_shutdown(&ctx->drv) < 0) return (-1); if (ctx->dxcore.initialized) dxcore_deinit_context(&ctx->dxcore); diff -Nru libnvidia-container-1.3.0/src/nvc_container.c libnvidia-container-1.4.0/src/nvc_container.c --- libnvidia-container-1.3.0/src/nvc_container.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/src/nvc_container.c 2021-08-12 09:45:44.000000000 +0000 @@ -83,24 +83,48 @@ static char * cgroup_root(char *line, char *prefix, const char *subsys) { - char *root, *substr; + char *heirarchy_id, *controller_list, *cgroup_path; - for (int i = 0; i < 2; ++i) - substr = strsep(&line, ":"); - root = strsep(&line, ":"); - - if (root == NULL || substr == NULL) + // From: https://man7.org/linux/man-pages/man7/cgroups.7.html + // The lines of the /proc/{pid}/cgroup file have the following format: + // hierarchy-ID:controller-list:cgroup-path + // Here we attempt to parse the separate sections. If this is not + // possible, we return NULL + heirarchy_id = strsep(&line, ":"); + if (heirarchy_id == NULL) { + // line contained no colons + return (NULL); + } + controller_list = strsep(&line, ":"); + if (controller_list == NULL) { + // line contains only a single colon + return (NULL); + } + // Since strsep modifies the pointer *line, + // the remaining string is the cgroup path + cgroup_path = line; + if (cgroup_path == NULL) { return (NULL); - if (*root == '\0' || *substr == '\0') + } + if (*cgroup_path == '\0' || *controller_list == '\0') { + // The controller list or cgroup_path are empty strings return (NULL); - if (strstr(substr, subsys) == NULL) + } + if (strstr(controller_list, subsys) == NULL) { + // The desired subsystem name is not in the controller list return (NULL); - if (strlen(root) >= PATH_MAX || str_has_prefix(root, "/..")) + } + if (strlen(cgroup_path) >= PATH_MAX || str_has_prefix(cgroup_path, "/..")) { + // The cgroup path is malformed: It is too long or is a relative path return (NULL); - if (!str_equal(prefix, "/") && str_has_prefix(root, prefix)) - root += strlen(prefix); + } + if (!str_equal(prefix, "/") && str_has_prefix(cgroup_path, prefix)) { + // Strip the supplied prefix from the cgroup path unless + // it is a "/" + cgroup_path += strlen(prefix); + } - return (root); + return (cgroup_path); } static char * @@ -192,7 +216,7 @@ if (!(cnt->flags & OPT_COMPUTE_LIBS)) return (0); - if (path_join(err, path, cnt->cfg.rootfs, cnt->cfg.cudart_dir) < 0) + if (path_resolve_full(err, path, cnt->cfg.rootfs, cnt->cfg.cudart_dir) < 0) return (-1); if (path_append(err, path, "compat/lib*.so.*") < 0) return (-1); diff -Nru libnvidia-container-1.3.0/src/nvc.h libnvidia-container-1.4.0/src/nvc.h --- libnvidia-container-1.3.0/src/nvc.h 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/src/nvc.h 2021-08-12 09:45:44.000000000 +0000 @@ -14,9 +14,9 @@ #endif /* __cplusplus */ #define NVC_MAJOR 1 -#define NVC_MINOR 3 +#define NVC_MINOR 4 #define NVC_PATCH 0 -#define NVC_VERSION "1.3.0" +#define NVC_VERSION "1.4.0" #define NVC_ARG_MAX 256 diff -Nru libnvidia-container-1.3.0/src/nvc_info.c libnvidia-container-1.4.0/src/nvc_info.c --- libnvidia-container-1.3.0/src/nvc_info.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/src/nvc_info.c 2021-08-12 09:45:44.000000000 +0000 @@ -45,8 +45,6 @@ static int lookup_ipcs(struct error *, struct nvc_driver_info *, const char *, int32_t); static int fill_mig_device_info(struct nvc_context *, bool mig_enabled, struct driver_device *, struct nvc_device *); static void clear_mig_device_info(struct nvc_mig_device_info *); -static int init_nvc_device_dxcore(struct nvc_context *ctx, unsigned int index, struct nvc_device *gpu); -static int init_nvc_device_native(struct nvc_context *ctx, unsigned int index, struct nvc_device *gpu); /* * Display libraries are not needed. @@ -62,6 +60,7 @@ "nvidia-smi", /* System management interface */ "nvidia-debugdump", /* GPU coredump utility */ "nvidia-persistenced", /* Persistence mode utility */ + "nv-fabricmanager", /* NVSwitch fabrimanager utility */ //"nvidia-modprobe", /* Kernel module loader */ //"nvidia-settings", /* X server settings */ //"nvidia-xconfig", /* X xorg.conf editor */ @@ -75,6 +74,7 @@ static const char * const utility_libs[] = { "libnvidia-ml.so", /* Management library */ "libnvidia-cfg.so", /* GPU configuration */ + "libnvidia-nscq.so", /* Topology info for NVSwitches and GPUs */ }; static const char * const compute_libs[] = { @@ -445,7 +445,7 @@ char **ptr; const char *mps; - info->nipcs = 2; + info->nipcs = 3; info->ipcs = ptr = array_new(err, info->nipcs); if (info->ipcs == NULL) return (-1); @@ -454,6 +454,10 @@ if (find_ipc_path(err, root, NV_PERSISTENCED_SOCKET, ptr++) < 0) return (-1); } + if (!(flags & OPT_NO_FABRICMANAGER)) { + if (find_ipc_path(err, root, NV_FABRICMANAGER_SOCKET, ptr++) < 0) + return (-1); + } if (!(flags & OPT_NO_MPS)) { if ((mps = secure_getenv("CUDA_MPS_PIPE_DIRECTORY")) == NULL) mps = NV_MPS_PIPE_DIR; @@ -565,32 +569,7 @@ } static int -init_nvc_device_dxcore(struct nvc_context *ctx, unsigned int index, struct nvc_device *gpu) -{ - // Support for NVML on WSL is not yet complete. Until then we will use dummy values - // for WSL GPUs. - gpu->model = xstrdup(&ctx->err, "UNKNOWN"); - gpu->uuid = xstrdup(&ctx->err, "GPU-00000000-0000-0000-0000-000000000000"); - gpu->brand = xstrdup(&ctx->err, "UNKNOWN"); - gpu->busid = xstrdup(&ctx->err, "0"); - gpu->arch = xstrdup(&ctx->err, "UNKNOWN"); - - // No Device associated to a WSL GPU. Everything uses /dev/dxg - gpu->node.path = NULL; - - // No MIG support for WSL - gpu->mig_capable = 0; - gpu->mig_caps_path = NULL; - gpu->mig_devices.ndevices = 0; - gpu->mig_devices.devices = NULL; - - log_infof("listing dxcore adapter %d (%s at %s)", index, gpu->uuid, gpu->busid); - - return 0; -} - -static int -init_nvc_device_native(struct nvc_context *ctx, unsigned int index, struct nvc_device *gpu) +init_nvc_device(struct nvc_context *ctx, unsigned int index, struct nvc_device *gpu) { struct driver_device *dev; struct driver *drv = &ctx->drv; @@ -610,22 +589,39 @@ goto fail; if (driver_get_device_brand(drv, dev, &gpu->brand) < 0) goto fail; - if (driver_get_device_minor(drv, dev, &minor) < 0) - goto fail; - if (xasprintf(err, &gpu->mig_caps_path, NV_GPU_CAPS_PATH, minor) < 0) - goto fail; - if (xasprintf(err, &gpu->node.path, NV_DEVICE_PATH, minor) < 0) - goto fail; - if (driver_get_device_mig_capable(drv, dev, &gpu->mig_capable) < 0) - goto fail; - if (driver_get_device_mig_enabled(drv, dev, &mig_enabled) < 0) - goto fail; - gpu->node.id = makedev(NV_DEVICE_MAJOR, minor); + if (ctx->dxcore.initialized) + { + // No Device associated to a WSL GPU. Everything uses /dev/dxg + gpu->node.path = NULL; + minor = 0; + + // No MIG support for WSL + gpu->mig_capable = 0; + gpu->mig_caps_path = NULL; + gpu->mig_devices.ndevices = 0; + gpu->mig_devices.devices = NULL; - if (fill_mig_device_info(ctx, mig_enabled, dev, gpu) < 0) - goto fail; + log_infof("listing dxcore adapter %d (%s at %s)", index, gpu->uuid, gpu->busid); + } + else + { + if (driver_get_device_minor(drv, dev, &minor) < 0) + goto fail; + if (xasprintf(err, &gpu->mig_caps_path, NV_GPU_CAPS_PATH, minor) < 0) + goto fail; + if (xasprintf(err, &gpu->node.path, NV_DEVICE_PATH, minor) < 0) + goto fail; + if (driver_get_device_mig_capable(drv, dev, &gpu->mig_capable) < 0) + goto fail; + if (driver_get_device_mig_enabled(drv, dev, &mig_enabled) < 0) + goto fail; + gpu->node.id = makedev(NV_DEVICE_MAJOR, minor); - log_infof("listing device %s (%s at %s)", gpu->node.path, gpu->uuid, gpu->busid); + if (fill_mig_device_info(ctx, mig_enabled, dev, gpu) < 0) + goto fail; + + log_infof("listing device %s (%s at %s)", gpu->node.path, gpu->uuid, gpu->busid); + } return 0; @@ -681,17 +677,9 @@ if ((info = xcalloc(&ctx->err, 1, sizeof(*info))) == NULL) return (NULL); - if (ctx->dxcore.initialized) { - log_info("no NVML support on early WSL2 build, assuming RM version is 460"); - info->nvrm_version = xstrdup(&ctx->err, "460.0"); - } - else if (driver_get_rm_version(&ctx->drv, &info->nvrm_version) < 0) + if (driver_get_rm_version(&ctx->drv, &info->nvrm_version) < 0) goto fail; - if (ctx->dxcore.initialized) { - log_info("no NVML support on early WSL2 build, assuming CUDA version is 11.0"); - info->cuda_version = xstrdup(&ctx->err, "11.0"); - } - else if (driver_get_cuda_version(&ctx->drv, &info->cuda_version) < 0) + if (driver_get_cuda_version(&ctx->drv, &info->cuda_version) < 0) goto fail; if (lookup_libraries(&ctx->err, &ctx->dxcore, info, ctx->cfg.root, flags, ctx->cfg.ldcache) < 0) goto fail; @@ -746,10 +734,8 @@ if ((info = xcalloc(&ctx->err, 1, sizeof(*info))) == NULL) return (NULL); - if (ctx->dxcore.initialized) - n = ctx->dxcore.adapterCount; - else if (driver_get_device_count(&ctx->drv, &n) < 0) - goto fail; + if (driver_get_device_count(&ctx->drv, &n) < 0) + goto fail; info->ngpus = n; info->gpus = gpu = xcalloc(&ctx->err, info->ngpus, sizeof(*info->gpus)); @@ -757,10 +743,7 @@ goto fail; for (unsigned int i = 0; i < n; ++i, ++gpu) { - if (ctx->dxcore.initialized) - rv = init_nvc_device_dxcore(ctx, i, gpu); - else rv = init_nvc_device_native(ctx, i, gpu); - + rv = init_nvc_device(ctx, i, gpu); if (rv < 0) goto fail; } diff -Nru libnvidia-container-1.3.0/src/nvc_internal.h libnvidia-container-1.4.0/src/nvc_internal.h --- libnvidia-container-1.3.0/src/nvc_internal.h 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/src/nvc_internal.h 2021-08-12 09:45:44.000000000 +0000 @@ -34,6 +34,7 @@ #define NV_CAPS_DEVICE_DIR _PATH_DEV "nvidia-caps" #define NV_CAPS_DEVICE_PATH NV_CAPS_DEVICE_DIR "/nvidia-cap%d" #define NV_PERSISTENCED_SOCKET _PATH_VARRUN "nvidia-persistenced/socket" +#define NV_FABRICMANAGER_SOCKET _PATH_VARRUN "nvidia-fabricmanager/socket" #define NV_MPS_PIPE_DIR _PATH_TMP "nvidia-mps" #define NV_PROC_DRIVER "/proc/driver/nvidia" #define NV_CAPS_PROC_DRIVER "/proc/driver/nvidia-caps" diff -Nru libnvidia-container-1.3.0/src/nvc_ldcache.c libnvidia-container-1.4.0/src/nvc_ldcache.c --- libnvidia-container-1.3.0/src/nvc_ldcache.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/src/nvc_ldcache.c 2021-08-12 09:45:44.000000000 +0000 @@ -275,6 +275,7 @@ SCMP_SYS(newfstatat), SCMP_SYS(open), SCMP_SYS(openat), + SCMP_SYS(pread64), SCMP_SYS(read), SCMP_SYS(readlink), SCMP_SYS(readv), diff -Nru libnvidia-container-1.3.0/src/nvc_mount.c libnvidia-container-1.4.0/src/nvc_mount.c --- libnvidia-container-1.3.0/src/nvc_mount.c 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/src/nvc_mount.c 2021-08-12 09:45:44.000000000 +0000 @@ -780,8 +780,8 @@ /* IPC mounts */ for (size_t i = 0; i < info->nipcs; ++i) { - /* XXX Only utility libraries require persistenced IPC, everything else is compute only. */ - if (str_has_suffix(NV_PERSISTENCED_SOCKET, info->ipcs[i])) { + /* XXX Only utility libraries require persistenced or fabricmanager IPC, everything else is compute only. */ + if (str_has_suffix(NV_PERSISTENCED_SOCKET, info->ipcs[i]) || str_has_suffix(NV_FABRICMANAGER_SOCKET, info->ipcs[i])) { if (!(cnt->flags & OPT_UTILITY_LIBS)) continue; } else if (!(cnt->flags & OPT_COMPUTE_LIBS)) @@ -937,12 +937,8 @@ if (ns_enter(&ctx->err, cnt->mnt_ns, CLONE_NEWNS) < 0) return (-1); - // Construct the path to the global MIG 'config' file in '/proc'. - if (path_join(&ctx->err, config, NV_MIG_CAPS_PATH, NV_MIG_CONFIG_FILE) < 0) - goto fail; - - // Mount the 'config' file into the container. - if ((proc_mnt = mount_procfs_mig(&ctx->err, ctx->cfg.root, cnt, config)) == NULL) + // Mount the entire 'nvidia-capabilities' folder from '/proc' into the container. + if ((proc_mnt = mount_procfs_mig(&ctx->err, ctx->cfg.root, cnt, NV_PROC_DRIVER_CAPS)) == NULL) goto fail; // Check if NV_CAPS_MODULE_NAME exists as a major device, @@ -951,6 +947,9 @@ if ((dev_mnt = mount_directory(&ctx->err, ctx->cfg.root, cnt, NV_CAPS_DEVICE_DIR)) == NULL) goto fail; + if (path_join(&ctx->err, config, NV_MIG_CAPS_PATH, NV_MIG_CONFIG_FILE) < 0) + goto fail; + if (nvc_nvcaps_device_from_proc_path(ctx, config, &node) < 0) goto fail; @@ -1000,12 +999,8 @@ if (ns_enter(&ctx->err, cnt->mnt_ns, CLONE_NEWNS) < 0) return (-1); - // Construct the path to the global MIG 'monitor' file in '/proc'. - if (path_join(&ctx->err, monitor, NV_MIG_CAPS_PATH, NV_MIG_MONITOR_FILE) < 0) - goto fail; - - // Mount the 'monitor' file into the container. - if ((proc_mnt = mount_procfs_mig(&ctx->err, ctx->cfg.root, cnt, monitor)) == NULL) + // Mount the entire 'nvidia-capabilities' folder from '/proc' into the container. + if ((proc_mnt = mount_procfs_mig(&ctx->err, ctx->cfg.root, cnt, NV_PROC_DRIVER_CAPS)) == NULL) goto fail; // Check if NV_CAPS_MODULE_NAME exists as a major device, @@ -1014,6 +1009,9 @@ if ((dev_mnt = mount_directory(&ctx->err, ctx->cfg.root, cnt, NV_CAPS_DEVICE_DIR)) == NULL) goto fail; + if (path_join(&ctx->err, monitor, NV_MIG_CAPS_PATH, NV_MIG_MONITOR_FILE) < 0) + goto fail; + if (nvc_nvcaps_device_from_proc_path(ctx, monitor, &node) < 0) goto fail; @@ -1047,7 +1045,6 @@ nvc_device_mig_caps_mount(struct nvc_context *ctx, const struct nvc_container *cnt, const struct nvc_device *dev) { // Initialize local variables. - char *proc_mnt = NULL; int nvcaps_major = -1; int rv = -1; @@ -1061,15 +1058,12 @@ if (ns_enter(&ctx->err, cnt->mnt_ns, CLONE_NEWNS) < 0) return (-1); - // Mount the path to the mig MIG capabilities directory for this device in '/proc'. - if ((proc_mnt = mount_procfs_mig(&ctx->err, ctx->cfg.root, cnt, dev->mig_caps_path)) == NULL) - goto fail; - // Check if NV_CAPS_MODULE_NAME exists as a major device, and if so, // mount in the appropriate /dev based capabilities as devices. if ((nvcaps_major = nvidia_get_chardev_major(NV_CAPS_MODULE_NAME)) != -1) { - if (setup_mig_minor_cgroups(&ctx->err, cnt, nvcaps_major, &dev->node) < 0) - goto fail; + if (!(cnt->flags & OPT_NO_CGROUPS)) + if (setup_mig_minor_cgroups(&ctx->err, cnt, nvcaps_major, &dev->node) < 0) + goto fail; } // Set the return value to indicate success. @@ -1077,17 +1071,10 @@ fail: if (rv < 0) { - // If we failed above for any reason, unmount the 'access' file - // we mounted and exit the mount namespace. - unmount(proc_mnt); assert_func(ns_enter_at(NULL, ctx->mnt_ns, CLONE_NEWNS)); } else { - // Otherwise, just exit the mount namespace. rv = ns_enter_at(&ctx->err, ctx->mnt_ns, CLONE_NEWNS); } - // In all cases, free the string associated with the mounted 'access' - // file and return. - free(proc_mnt); return (rv); } diff -Nru libnvidia-container-1.3.0/src/options.h libnvidia-container-1.4.0/src/options.h --- libnvidia-container-1.3.0/src/options.h 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/src/options.h 2021-08-12 09:45:44.000000000 +0000 @@ -27,11 +27,12 @@ /* Driver options */ enum { - OPT_NO_GLVND = 1 << 0, - OPT_NO_UVM = 1 << 1, - OPT_NO_MODESET = 1 << 2, - OPT_NO_MPS = 1 << 3, - OPT_NO_PERSISTENCED = 1 << 4, + OPT_NO_GLVND = 1 << 0, + OPT_NO_UVM = 1 << 1, + OPT_NO_MODESET = 1 << 2, + OPT_NO_MPS = 1 << 3, + OPT_NO_PERSISTENCED = 1 << 4, + OPT_NO_FABRICMANAGER = 1 << 5, }; static const struct option driver_opts[] = { @@ -40,6 +41,7 @@ {"no-modeset", OPT_NO_MODESET}, {"no-mps", OPT_NO_MPS}, {"no-persistenced", OPT_NO_PERSISTENCED}, + {"no-fabricmanager", OPT_NO_FABRICMANAGER}, }; static const char * const default_driver_opts = ""; diff -Nru libnvidia-container-1.3.0/vendor.sh libnvidia-container-1.4.0/vendor.sh --- libnvidia-container-1.3.0/vendor.sh 2020-09-30 18:34:33.000000000 +0000 +++ libnvidia-container-1.4.0/vendor.sh 2021-08-12 09:45:44.000000000 +0000 @@ -7,4 +7,4 @@ rm -rf deps make -f mk/nvidia-modprobe.mk deps/src/nvidia-modprobe-450.57/.download_stamp -make -f mk/elftoolchain.mk deps/src/elftoolchain-0.7.1/.download_stamp +# make -f mk/elftoolchain.mk deps/src/elftoolchain-0.7.1/.download_stamp \ No newline at end of file