Author: emaste
Date: Sun Mar  8 20:40:38 2020
New Revision: 358779
URL: https://svnweb.freebsd.org/changeset/base/358779

Log:
  MFC r355413: Update ELF Tool Chain to upstream r3769
  
  This contains many small bugfixes and documentation improvements.
  
  Sponsored by: The FreeBSD Foundation

Added:
  stable/12/contrib/elftoolchain/.cirrus.yml
     - copied unchanged from r355413, head/contrib/elftoolchain/.cirrus.yml
  stable/12/contrib/elftoolchain/libelf/os.Linux.mk
     - copied unchanged from r355413, 
head/contrib/elftoolchain/libelf/os.Linux.mk
Modified:
  stable/12/contrib/elftoolchain/README.rst
  stable/12/contrib/elftoolchain/addr2line/addr2line.c
  stable/12/contrib/elftoolchain/common/elfdefinitions.h
  stable/12/contrib/elftoolchain/common/native-elf-format
  stable/12/contrib/elftoolchain/elfcopy/ascii.c
  stable/12/contrib/elftoolchain/elfcopy/binary.c
  stable/12/contrib/elftoolchain/elfcopy/elfcopy.h
  stable/12/contrib/elftoolchain/elfcopy/main.c
  stable/12/contrib/elftoolchain/elfcopy/sections.c
  stable/12/contrib/elftoolchain/elfdump/elfdump.c
  stable/12/contrib/elftoolchain/libdwarf/dwarf.h
  stable/12/contrib/elftoolchain/libdwarf/dwarf_dump.c
  stable/12/contrib/elftoolchain/libdwarf/libdwarf_attr.c
  stable/12/contrib/elftoolchain/libdwarf/libdwarf_reloc.c
  stable/12/contrib/elftoolchain/libelf/_libelf.h
  stable/12/contrib/elftoolchain/libelf/_libelf_config.h
  stable/12/contrib/elftoolchain/libelf/elf.3
  stable/12/contrib/elftoolchain/libelf/elf_data.c
  stable/12/contrib/elftoolchain/libelf/elf_end.c
  stable/12/contrib/elftoolchain/libelf/elf_flagdata.3
  stable/12/contrib/elftoolchain/libelf/elf_getdata.3
  stable/12/contrib/elftoolchain/libelf/elf_getident.c
  stable/12/contrib/elftoolchain/libelf/elf_next.3
  stable/12/contrib/elftoolchain/libelf/elf_next.c
  stable/12/contrib/elftoolchain/libelf/elf_open.3
  stable/12/contrib/elftoolchain/libelf/elf_rand.c
  stable/12/contrib/elftoolchain/libelf/elf_rawfile.c
  stable/12/contrib/elftoolchain/libelf/elf_scn.c
  stable/12/contrib/elftoolchain/libelf/elf_update.3
  stable/12/contrib/elftoolchain/libelf/elf_update.c
  stable/12/contrib/elftoolchain/libelf/gelf.3
  stable/12/contrib/elftoolchain/libelf/gelf_cap.c
  stable/12/contrib/elftoolchain/libelf/gelf_dyn.c
  stable/12/contrib/elftoolchain/libelf/gelf_getcap.3
  stable/12/contrib/elftoolchain/libelf/gelf_getdyn.3
  stable/12/contrib/elftoolchain/libelf/gelf_getmove.3
  stable/12/contrib/elftoolchain/libelf/gelf_getrel.3
  stable/12/contrib/elftoolchain/libelf/gelf_getrela.3
  stable/12/contrib/elftoolchain/libelf/gelf_getsym.3
  stable/12/contrib/elftoolchain/libelf/gelf_getsyminfo.3
  stable/12/contrib/elftoolchain/libelf/gelf_getsymshndx.3
  stable/12/contrib/elftoolchain/libelf/gelf_move.c
  stable/12/contrib/elftoolchain/libelf/gelf_newehdr.3
  stable/12/contrib/elftoolchain/libelf/gelf_newphdr.3
  stable/12/contrib/elftoolchain/libelf/gelf_rel.c
  stable/12/contrib/elftoolchain/libelf/gelf_rela.c
  stable/12/contrib/elftoolchain/libelf/gelf_sym.c
  stable/12/contrib/elftoolchain/libelf/gelf_syminfo.c
  stable/12/contrib/elftoolchain/libelf/gelf_symshndx.c
  stable/12/contrib/elftoolchain/libelf/libelf_allocate.c
  stable/12/contrib/elftoolchain/libelf/libelf_ar.c
  stable/12/contrib/elftoolchain/libelf/libelf_convert.m4
  stable/12/contrib/elftoolchain/libelf/libelf_data.c
  stable/12/contrib/elftoolchain/libelf/libelf_ehdr.c
  stable/12/contrib/elftoolchain/libelf/libelf_extended.c
  stable/12/contrib/elftoolchain/libelf/libelf_memory.c
  stable/12/contrib/elftoolchain/libelf/libelf_msize.m4
  stable/12/contrib/elftoolchain/libelf/libelf_phdr.c
  stable/12/contrib/elftoolchain/libelf/libelf_xlate.c
  stable/12/contrib/elftoolchain/libelftc/elftc_bfd_find_target.3
  stable/12/contrib/elftoolchain/libelftc/elftc_string_table.c
  stable/12/contrib/elftoolchain/libelftc/elftc_string_table_create.3
  stable/12/contrib/elftoolchain/libelftc/libelftc.h
  stable/12/contrib/elftoolchain/libelftc/libelftc_bfdtarget.c
  stable/12/contrib/elftoolchain/libelftc/make-toolchain-version
  stable/12/contrib/elftoolchain/nm/nm.c
  stable/12/contrib/elftoolchain/readelf/readelf.1
  stable/12/contrib/elftoolchain/readelf/readelf.c
  stable/12/lib/libelftc/elftc_version.c
Directory Properties:
  stable/12/   (props changed)

Copied: stable/12/contrib/elftoolchain/.cirrus.yml (from r355413, 
head/contrib/elftoolchain/.cirrus.yml)
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ stable/12/contrib/elftoolchain/.cirrus.yml  Sun Mar  8 20:40:38 2020        
(r358779, copy of r355413, head/contrib/elftoolchain/.cirrus.yml)
@@ -0,0 +1,22 @@
+freebsd_11_task:
+  freebsd_instance:
+    image: freebsd-11-2-release-amd64
+  install_script: pkg install -y git py27-yaml
+  script:
+    - fetch 
http://tetworks.opengroup.org/downloads/38/software/Sources/3.8/tet3.8-src.tar.gz
+    - tar -x -C test/tet -f tet3.8-src.tar.gz
+    - make
+
+debian_stable_task:
+  container:
+    image: debian:stable
+  setup_script:
+    - apt-get update
+    - apt-get install -y
+      binutils bison bmake curl flex g++ gcc git
+      libarchive-dev libbsd-dev libc6-dev libexpat1-dev lsb-release
+      m4 perl python-yaml sharutils zlib1g-dev
+  script:
+    - curl -O 
http://tetworks.opengroup.org/downloads/38/software/Sources/3.8/tet3.8-src.tar.gz
+    - tar -x -C test/tet -z -f tet3.8-src.tar.gz
+    - bmake

Modified: stable/12/contrib/elftoolchain/README.rst
==============================================================================
--- stable/12/contrib/elftoolchain/README.rst   Sun Mar  8 20:35:00 2020        
(r358778)
+++ stable/12/contrib/elftoolchain/README.rst   Sun Mar  8 20:40:38 2020        
(r358779)
@@ -62,12 +62,12 @@ The project uses subversion_ for its version control s
 The subversion branch for the current set of sources may be accessed
 at the following URL::
 
-    https://elftoolchain.svn.sourceforge.net/svnroot/elftoolchain/trunk
+    https://sourceforge.net/p/elftoolchain/code/HEAD/tree/trunk/
 
 The project's source tree may be checked out from its repository by
 using the ``svn checkout`` command::
 
-    % svn checkout 
https://elftoolchain.svn.sourceforge.net/svnroot/elftoolchain/trunk
+    % svn checkout https://svn.code.sf.net/p/elftoolchain/code/trunk
 
 Checked-out sources may be kept upto-date by running ``svn update``
 inside the source directory::
@@ -105,10 +105,10 @@ The project's developers may be contacted using the ma
 Reporting Bugs
 --------------
 
-Please use our `Trac instance`_ for viewing existing bug reports and
+Please use our `bug tracker`_ for viewing existing bug reports and
 for submitting new bug reports.
 
-.. _`Trac instance`: http://sourceforge.net/apps/trac/elftoolchain/report
+.. _`bug tracker`: https://sourceforge.net/p/elftoolchain/tickets/
 
 
 Additional Information
@@ -119,7 +119,7 @@ website`_.
 
 .. _project website:  http://elftoolchain.sourceforge.net/
 
-.. $Id: README.rst 3656 2018-12-26 09:46:24Z jkoshy $
+.. $Id: README.rst 3677 2019-02-11 09:37:09Z jkoshy $
 
 .. Local Variables:
 .. mode: rst

Modified: stable/12/contrib/elftoolchain/addr2line/addr2line.c
==============================================================================
--- stable/12/contrib/elftoolchain/addr2line/addr2line.c        Sun Mar  8 
20:35:00 2020        (r358778)
+++ stable/12/contrib/elftoolchain/addr2line/addr2line.c        Sun Mar  8 
20:40:38 2020        (r358779)
@@ -42,7 +42,7 @@
 
 #include "_elftc.h"
 
-ELFTC_VCSID("$Id: addr2line.c 3544 2017-06-05 14:51:44Z emaste $");
+ELFTC_VCSID("$Id: addr2line.c 3499 2016-11-25 16:06:29Z emaste $");
 
 struct Func {
        char *name;

Modified: stable/12/contrib/elftoolchain/common/elfdefinitions.h
==============================================================================
--- stable/12/contrib/elftoolchain/common/elfdefinitions.h      Sun Mar  8 
20:35:00 2020        (r358778)
+++ stable/12/contrib/elftoolchain/common/elfdefinitions.h      Sun Mar  8 
20:40:38 2020        (r358779)
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: elfdefinitions.h 3515 2017-01-24 22:04:22Z emaste $
+ * $Id: elfdefinitions.h 3769 2019-06-29 15:15:02Z emaste $
  */
 
 /*
@@ -72,7 +72,39 @@ _ELF_DEFINE_DF(DF_TEXTREL,          0x4,                     
\
 _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")
+       "uses static thread-local storage")                     \
+_ELF_DEFINE_DF(DF_1_BIND_NOW,       0x1,                       \
+       "process relocation entries at load time")              \
+_ELF_DEFINE_DF(DF_1_GLOBAL,         0x2,                       \
+       "unused")                                               \
+_ELF_DEFINE_DF(DF_1_GROUP,          0x4,                       \
+       "object is a member of a group")                        \
+_ELF_DEFINE_DF(DF_1_NODELETE,       0x8,                       \
+       "object cannot be deleted from a process")              \
+_ELF_DEFINE_DF(DF_1_LOADFLTR,       0x10,                      \
+       "immediate load filtees")                               \
+_ELF_DEFINE_DF(DF_1_INITFIRST,      0x20,                      \
+       "initialize object first")                              \
+_ELF_DEFINE_DF(DF_1_NOOPEN,         0x40,                      \
+       "disallow dlopen()")                                    \
+_ELF_DEFINE_DF(DF_1_ORIGIN,         0x80,                      \
+       "object being loaded may refer to $ORIGIN")             \
+_ELF_DEFINE_DF(DF_1_DIRECT,         0x100,                     \
+       "direct bindings enabled")                              \
+_ELF_DEFINE_DF(DF_1_INTERPOSE,      0x400,                     \
+       "object is interposer")                                 \
+_ELF_DEFINE_DF(DF_1_NODEFLIB,       0x800,                     \
+       "ignore default library search path")                   \
+_ELF_DEFINE_DF(DF_1_NODUMP,         0x1000,                    \
+       "disallow dldump()")                                    \
+_ELF_DEFINE_DF(DF_1_CONFALT,        0x2000,                    \
+       "object is a configuration alternative")                \
+_ELF_DEFINE_DF(DF_1_ENDFILTEE,      0x4000,                    \
+       "filtee terminates filter search")                      \
+_ELF_DEFINE_DF(DF_1_DISPRELDNE,     0x8000,                    \
+       "displacement relocation done")                         \
+_ELF_DEFINE_DF(DF_1_DISPRELPND,     0x10000,                   \
+       "displacement relocation pending")
 #undef _ELF_DEFINE_DF
 #define        _ELF_DEFINE_DF(N, V, DESCR)     N = V ,
 enum {
@@ -2464,7 +2496,10 @@ _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")
+_ELF_DEFINE_NT(NT_LWPSINFO,    17,     "Linux lwpinfo_t type")         \
+_ELF_DEFINE_NT(NT_FREEBSD_NOINIT_TAG,  2,      "FreeBSD no .init tag") \
+_ELF_DEFINE_NT(NT_FREEBSD_ARCH_TAG,    3,      "FreeBSD arch tag")     \
+_ELF_DEFINE_NT(NT_FREEBSD_FEATURE_CTL, 4,      "FreeBSD feature control")
 
 #undef _ELF_DEFINE_NT
 #define        _ELF_DEFINE_NT(N, V, DESCR)     N = V ,
@@ -2822,7 +2857,8 @@ typedef struct {
 
 #define ELF64_R_SYM(I)         ((I) >> 32)
 #define ELF64_R_TYPE(I)                ((I) & 0xFFFFFFFFUL)
-#define ELF64_R_INFO(S,T)      (((S) << 32) + ((T) & 0xFFFFFFFFUL))
+#define ELF64_R_INFO(S,T)      \
+       (((Elf64_Xword) (S) << 32) + ((T) & 0xFFFFFFFFUL))
 
 /*
  * Symbol versioning structures.

Modified: stable/12/contrib/elftoolchain/common/native-elf-format
==============================================================================
--- stable/12/contrib/elftoolchain/common/native-elf-format     Sun Mar  8 
20:35:00 2020        (r358778)
+++ stable/12/contrib/elftoolchain/common/native-elf-format     Sun Mar  8 
20:40:38 2020        (r358779)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $Id: native-elf-format 3650 2018-11-25 12:06:28Z jkoshy $
+# $Id: native-elf-format 3735 2019-04-25 19:44:47Z jkoshy $
 #
 # Find the native ELF format for a host platform by compiling a
 # test object and examining the resulting object.
@@ -37,6 +37,8 @@ $1 ~ "Machine:" {
             elfarch = "EM_MIPS";
         } else if (match($0, ".*[xX]86[-_]64")) {
             elfarch = "EM_X86_64";
+        } else if (match($0, "PowerPC64")) {
+            elfarch = "EM_PPC64";
         } else {
             elfarch = "unknown";
         }

Modified: stable/12/contrib/elftoolchain/elfcopy/ascii.c
==============================================================================
--- stable/12/contrib/elftoolchain/elfcopy/ascii.c      Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/elfcopy/ascii.c      Sun Mar  8 20:40:38 
2020        (r358779)
@@ -36,7 +36,7 @@
 
 #include "elfcopy.h"
 
-ELFTC_VCSID("$Id: ascii.c 3487 2016-08-24 18:12:08Z emaste $");
+ELFTC_VCSID("$Id: ascii.c 3757 2019-06-28 01:15:28Z emaste $");
 
 static void append_data(struct section *s, const void *buf, size_t sz);
 static char hex_digit(uint8_t n);

Modified: stable/12/contrib/elftoolchain/elfcopy/binary.c
==============================================================================
--- stable/12/contrib/elftoolchain/elfcopy/binary.c     Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/elfcopy/binary.c     Sun Mar  8 20:40:38 
2020        (r358779)
@@ -36,7 +36,7 @@
 
 #include "elfcopy.h"
 
-ELFTC_VCSID("$Id: binary.c 3611 2018-04-16 21:35:18Z jkoshy $");
+ELFTC_VCSID("$Id: binary.c 3757 2019-06-28 01:15:28Z emaste $");
 
 /*
  * Convert ELF object to `binary'. Sections with SHF_ALLOC flag set

Modified: stable/12/contrib/elftoolchain/elfcopy/elfcopy.h
==============================================================================
--- stable/12/contrib/elftoolchain/elfcopy/elfcopy.h    Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/elfcopy/elfcopy.h    Sun Mar  8 20:40:38 
2020        (r358779)
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: elfcopy.h 3615 2018-05-17 04:12:24Z kaiwang27 $
+ * $Id: elfcopy.h 3757 2019-06-28 01:15:28Z emaste $
  */
 
 #include <sys/queue.h>

Modified: stable/12/contrib/elftoolchain/elfcopy/main.c
==============================================================================
--- stable/12/contrib/elftoolchain/elfcopy/main.c       Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/elfcopy/main.c       Sun Mar  8 20:40:38 
2020        (r358779)
@@ -39,7 +39,7 @@
 
 #include "elfcopy.h"
 
-ELFTC_VCSID("$Id: main.c 3577 2017-09-14 02:19:42Z emaste $");
+ELFTC_VCSID("$Id: main.c 3757 2019-06-28 01:15:28Z emaste $");
 
 enum options
 {

Modified: stable/12/contrib/elftoolchain/elfcopy/sections.c
==============================================================================
--- stable/12/contrib/elftoolchain/elfcopy/sections.c   Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/elfcopy/sections.c   Sun Mar  8 20:40:38 
2020        (r358779)
@@ -34,7 +34,7 @@
 
 #include "elfcopy.h"
 
-ELFTC_VCSID("$Id: sections.c 3646 2018-10-27 02:25:39Z emaste $");
+ELFTC_VCSID("$Id: sections.c 3758 2019-06-28 01:16:50Z emaste $");
 
 static void    add_gnu_debuglink(struct elfcopy *ecp);
 static uint32_t calc_crc32(const char *p, size_t len, uint32_t crc);

Modified: stable/12/contrib/elftoolchain/elfdump/elfdump.c
==============================================================================
--- stable/12/contrib/elftoolchain/elfdump/elfdump.c    Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/elfdump/elfdump.c    Sun Mar  8 20:40:38 
2020        (r358779)
@@ -50,7 +50,7 @@
 
 #include "_elftc.h"
 
-ELFTC_VCSID("$Id: elfdump.c 3584 2017-11-05 20:51:43Z jkoshy $");
+ELFTC_VCSID("$Id: elfdump.c 3762 2019-06-28 21:06:24Z emaste $");
 
 #if defined(ELFTC_NEED_ELF_NOTE_DEFINITION)
 #include "native-elf-format.h"

Modified: stable/12/contrib/elftoolchain/libdwarf/dwarf.h
==============================================================================
--- stable/12/contrib/elftoolchain/libdwarf/dwarf.h     Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/libdwarf/dwarf.h     Sun Mar  8 20:40:38 
2020        (r358779)
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: dwarf.h 3494 2016-09-20 17:16:13Z emaste $
+ * $Id: dwarf.h 3749 2019-06-28 01:10:44Z emaste $
  */
 
 #ifndef        _DWARF_H_

Modified: stable/12/contrib/elftoolchain/libdwarf/dwarf_dump.c
==============================================================================
--- stable/12/contrib/elftoolchain/libdwarf/dwarf_dump.c        Sun Mar  8 
20:35:00 2020        (r358778)
+++ stable/12/contrib/elftoolchain/libdwarf/dwarf_dump.c        Sun Mar  8 
20:40:38 2020        (r358779)
@@ -27,7 +27,7 @@
 
 #include "_libdwarf.h"
 
-ELFTC_VCSID("$Id: dwarf_dump.c 3494 2016-09-20 17:16:13Z emaste $");
+ELFTC_VCSID("$Id: dwarf_dump.c 3749 2019-06-28 01:10:44Z emaste $");
 
 int
 dwarf_get_ACCESS_name(unsigned access, const char **s)
@@ -605,7 +605,7 @@ dwarf_get_DS_name(unsigned ds, const char **s)
        case DW_DS_leading_separate:
                *s = "DW_DS_leading_separate"; break;
        case DW_DS_trailing_separate:
-               *s = "DW_DS_trailing_separate";
+               *s = "DW_DS_trailing_separate"; break;
        default:
                return (DW_DLV_NO_ENTRY);
        }

Modified: stable/12/contrib/elftoolchain/libdwarf/libdwarf_attr.c
==============================================================================
--- stable/12/contrib/elftoolchain/libdwarf/libdwarf_attr.c     Sun Mar  8 
20:35:00 2020        (r358778)
+++ stable/12/contrib/elftoolchain/libdwarf/libdwarf_attr.c     Sun Mar  8 
20:40:38 2020        (r358779)
@@ -27,7 +27,7 @@
 
 #include "_libdwarf.h"
 
-ELFTC_VCSID("$Id: libdwarf_attr.c 3064 2014-06-06 19:35:55Z kaiwang27 $");
+ELFTC_VCSID("$Id: libdwarf_attr.c 3748 2019-06-28 01:11:13Z emaste $");
 
 int
 _dwarf_attr_alloc(Dwarf_Die die, Dwarf_Attribute *atp, Dwarf_Error *error)

Modified: stable/12/contrib/elftoolchain/libdwarf/libdwarf_reloc.c
==============================================================================
--- stable/12/contrib/elftoolchain/libdwarf/libdwarf_reloc.c    Sun Mar  8 
20:35:00 2020        (r358778)
+++ stable/12/contrib/elftoolchain/libdwarf/libdwarf_reloc.c    Sun Mar  8 
20:40:38 2020        (r358779)
@@ -26,7 +26,7 @@
 
 #include "_libdwarf.h"
 
-ELFTC_VCSID("$Id: libdwarf_reloc.c 3578 2017-09-14 02:21:28Z emaste $");
+ELFTC_VCSID("$Id: libdwarf_reloc.c 3741 2019-06-07 06:32:01Z jkoshy $");
 
 Dwarf_Unsigned
 _dwarf_get_reloc_type(Dwarf_P_Debug dbg, int is64)

Modified: stable/12/contrib/elftoolchain/libelf/_libelf.h
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/_libelf.h     Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/_libelf.h     Sun Mar  8 20:40:38 
2020        (r358779)
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: _libelf.h 3632 2018-10-10 21:12:43Z jkoshy $
+ * $Id: _libelf.h 3738 2019-05-05 21:49:06Z jkoshy $
  */
 
 #ifndef        __LIBELF_H_
@@ -94,7 +94,7 @@ struct _Elf {
        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 */
+       off_t           e_rawsize;      /* size of uninterpreted bytes */
        unsigned int    e_version;      /* file version */
 
        /*
@@ -233,7 +233,7 @@ Elf *_libelf_open_object(int _fd, Elf_Cmd _c, int _rep
 Elf64_Xword _libelf_mips64el_r_info_tof(Elf64_Xword r_info);
 Elf64_Xword _libelf_mips64el_r_info_tom(Elf64_Xword r_info);
 struct _Libelf_Data *_libelf_release_data(struct _Libelf_Data *_d);
-Elf    *_libelf_release_elf(Elf *_e);
+void   _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);

Modified: stable/12/contrib/elftoolchain/libelf/_libelf_config.h
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/_libelf_config.h      Sun Mar  8 
20:35:00 2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/_libelf_config.h      Sun Mar  8 
20:40:38 2020        (r358779)
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $Id: _libelf_config.h 3566 2017-08-31 02:28:40Z emaste $
+ * $Id: _libelf_config.h 3764 2019-06-28 21:44:46Z emaste $
  */
 
 #if defined(__APPLE__) || defined(__DragonFly__)
@@ -98,6 +98,12 @@
 #define        LIBELF_CLASS            ELFCLASS32
 
 #elif  defined(__riscv) && (__riscv_xlen == 64)
+
+#define        LIBELF_ARCH             EM_RISCV
+#define        LIBELF_BYTEORDER        ELFDATA2LSB
+#define        LIBELF_CLASS            ELFCLASS64
+
+#elif  defined(__riscv64)
 
 #define        LIBELF_ARCH             EM_RISCV
 #define        LIBELF_BYTEORDER        ELFDATA2LSB

Modified: stable/12/contrib/elftoolchain/libelf/elf.3
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/elf.3 Sun Mar  8 20:35:00 2020        
(r358778)
+++ stable/12/contrib/elftoolchain/libelf/elf.3 Sun Mar  8 20:40:38 2020        
(r358779)
@@ -1,4 +1,4 @@
-.\" Copyright (c) 2006-2008,2011 Joseph Koshy.  All rights reserved.
+.\" Copyright (c) 2006-2008,2011,2019 Joseph Koshy.  All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
 .\" modification, are permitted provided that the following conditions
@@ -21,9 +21,9 @@
 .\" out of the use of this software, even if advised of the possibility of
 .\" such damage.
 .\"
-.\" $Id: elf.3 3643 2018-10-14 21:09:24Z jkoshy $
+.\" $Id: elf.3 3743 2019-06-12 19:36:30Z jkoshy $
 .\"
-.Dd October 10, 2018
+.Dd June 12, 2019
 .Dt ELF 3
 .Os
 .Sh NAME
@@ -266,36 +266,43 @@ The operating version for the data in this buffer.
 .El
 .Pp
 .Vt Elf_Data
-descriptors are usually associated with
+descriptors are usually used in conjunction 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.
+descriptors represent sections in an ELF object.
+These descriptors are opaque and contain no application modifiable
+fields.
 .Pp
-They are retrieved using the
+The
+.Vt Elf_Scn
+descriptor for a specific section in an ELF object can be
+retrieved using the
 .Fn elf_getscn
 function.
-An application may iterate through the existing sections of an ELF
-object using the
+The sections contained in an ELF object can be traversed using the
 .Fn elf_nextscn
 function.
-New sections may be allocated using the
+New sections are allocated using the
 .Fn elf_newscn
 function.
 .Pp
 The
-.Vt Elf_Scn
-descriptor is opaque and contains no application modifiable fields.
+.Vt Elf_Data
+descriptors associated with a given section can be retrieved
+using the
+.Fn elf_getdata
+function.
+New data descriptors can be added to a section
+descriptor using the
+.Fn elf_newdata
+function.
+The untranslated
+.Dq file
+representation of data in a section can be retrieved using the
+.Fn elf_rawdata
+function.
 .El
 .Ss Supported Elf Types
 The following ELF datatypes are supported by the library.
@@ -608,8 +615,11 @@ descriptor itself.
 .Xr ar 5 ,
 .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
+The original
+.Nm
+API was developed for
+.At V .
+The current implementation of the API appeared in
 .Fx 7.0 .
 .Sh AUTHORS
 The ELF library was written by

Modified: stable/12/contrib/elftoolchain/libelf/elf_data.c
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/elf_data.c    Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/elf_data.c    Sun Mar  8 20:40:38 
2020        (r358779)
@@ -32,7 +32,7 @@
 
 #include "_libelf.h"
 
-ELFTC_VCSID("$Id: elf_data.c 3632 2018-10-10 21:12:43Z jkoshy $");
+ELFTC_VCSID("$Id: elf_data.c 3732 2019-04-22 11:08:38Z jkoshy $");
 
 Elf_Data *
 elf_getdata(Elf_Scn *s, Elf_Data *ed)
@@ -42,7 +42,7 @@ elf_getdata(Elf_Scn *s, Elf_Data *ed)
        int elfclass, elftype;
        size_t count, fsz, msz;
        struct _Libelf_Data *d;
-       uint64_t sh_align, sh_offset, sh_size;
+       uint64_t sh_align, sh_offset, sh_size, raw_size;
        _libelf_translator_function *xlate;
 
        d = (struct _Libelf_Data *) ed;
@@ -59,7 +59,8 @@ elf_getdata(Elf_Scn *s, Elf_Data *ed)
                return (&d->d_data);
 
        if (d != NULL)
-               return (&STAILQ_NEXT(d, d_next)->d_data);
+               return (STAILQ_NEXT(d, d_next) ?
+                   &STAILQ_NEXT(d, d_next)->d_data : NULL);
 
        if (e->e_rawfile == NULL) {
                /*
@@ -91,9 +92,10 @@ elf_getdata(Elf_Scn *s, Elf_Data *ed)
                return (NULL);
        }
 
+       raw_size = (uint64_t) e->e_rawsize;
        if ((elftype = _libelf_xlate_shtype(sh_type)) < ELF_T_FIRST ||
            elftype > ELF_T_LAST || (sh_type != SHT_NOBITS &&
-           (sh_offset > e->e_rawsize || sh_size > e->e_rawsize - sh_offset))) {
+           (sh_offset > raw_size || sh_size > raw_size - sh_offset))) {
                LIBELF_SET_ERROR(SECTION, 0);
                return (NULL);
        }
@@ -116,7 +118,8 @@ elf_getdata(Elf_Scn *s, Elf_Data *ed)
 
        count = (size_t) (sh_size / fsz);
 
-       msz = _libelf_msize(elftype, elfclass, e->e_version);
+       if ((msz = _libelf_msize(elftype, elfclass, e->e_version)) == 0)
+               return (NULL);
 
        if (count > 0 && msz > SIZE_MAX / count) {
                LIBELF_SET_ERROR(RANGE, 0);
@@ -215,7 +218,7 @@ elf_rawdata(Elf_Scn *s, Elf_Data *ed)
        int elf_class;
        uint32_t sh_type;
        struct _Libelf_Data *d;
-       uint64_t sh_align, sh_offset, sh_size;
+       uint64_t sh_align, sh_offset, sh_size, raw_size;
 
        if (s == NULL || (e = s->s_elf) == NULL || e->e_rawfile == NULL) {
                LIBELF_SET_ERROR(ARGUMENT, 0);
@@ -253,8 +256,9 @@ elf_rawdata(Elf_Scn *s, Elf_Data *ed)
                return (NULL);
        }
 
+       raw_size = (uint64_t) e->e_rawsize;
        if (sh_type != SHT_NOBITS &&
-           (sh_offset > e->e_rawsize || sh_size > e->e_rawsize - sh_offset)) {
+           (sh_offset > raw_size || sh_size > raw_size - sh_offset)) {
                LIBELF_SET_ERROR(SECTION, 0);
                return (NULL);
        }

Modified: stable/12/contrib/elftoolchain/libelf/elf_end.c
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/elf_end.c     Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/elf_end.c     Sun Mar  8 20:40:38 
2020        (r358779)
@@ -34,7 +34,7 @@
 #include <sys/mman.h>
 #endif
 
-ELFTC_VCSID("$Id: elf_end.c 3174 2015-03-27 17:13:41Z emaste $");
+ELFTC_VCSID("$Id: elf_end.c 3738 2019-05-05 21:49:06Z jkoshy $");
 
 int
 elf_end(Elf *e)
@@ -80,14 +80,14 @@ elf_end(Elf *e)
                                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);
+                               (void) munmap(e->e_rawfile, (size_t) 
e->e_rawsize);
 #endif
                }
 
                sv = e;
                if ((e = e->e_parent) != NULL)
                        e->e_u.e_ar.e_nchildren--;
-               sv = _libelf_release_elf(sv);
+               _libelf_release_elf(sv);
        }
 
        return (0);

Modified: stable/12/contrib/elftoolchain/libelf/elf_flagdata.3
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/elf_flagdata.3        Sun Mar  8 
20:35:00 2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/elf_flagdata.3        Sun Mar  8 
20:40:38 2020        (r358779)
@@ -21,9 +21,9 @@
 .\" out of the use of this software, even if advised of the possibility of
 .\" such damage.
 .\"
-.\" $Id: elf_flagdata.3 3639 2018-10-14 14:07:02Z jkoshy $
+.\" $Id: elf_flagdata.3 3743 2019-06-12 19:36:30Z jkoshy $
 .\"
-.Dd December 3, 2011
+.Dd June 12, 2019
 .Dt ELF_FLAGDATA 3
 .Os
 .Sh NAME
@@ -34,7 +34,7 @@
 .Nm elf_flagphdr ,
 .Nm elf_flagscn ,
 .Nm elf_flagshdr
-.Nd manipulate flags associated with ELF(3) data structures
+.Nd manipulate flags associated with ELF data structures
 .Sh LIBRARY
 .Lb libelf
 .Sh SYNOPSIS
@@ -65,7 +65,9 @@ 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:
+functions in the
+.Xr elf 3
+API set:
 .Bl -bullet -compact
 .It
 Argument
@@ -175,7 +177,9 @@ function and the
 .Dv ELF_F_ARCHIVE
 and
 .Dv ELF_F_ARCHIVE_SYSV
-flags are an extension to the ELF(3) API.
+flags are an extension to the
+.Xr elf 3
+API.
 .Sh ERRORS
 These functions may fail with the following errors:
 .Bl -tag -width "[ELF_E_RESOURCE]"

Modified: stable/12/contrib/elftoolchain/libelf/elf_getdata.3
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/elf_getdata.3 Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/elf_getdata.3 Sun Mar  8 20:40:38 
2020        (r358779)
@@ -21,9 +21,9 @@
 .\" out of the use of this software, even if advised of the possibility of
 .\" such damage.
 .\"
-.\" $Id: elf_getdata.3 3643 2018-10-14 21:09:24Z jkoshy $
+.\" $Id: elf_getdata.3 3734 2019-04-22 14:10:49Z jkoshy $
 .\"
-.Dd January 26, 2011
+.Dd April 22, 2019
 .Dt ELF_GETDATA 3
 .Os
 .Sh NAME
@@ -214,7 +214,12 @@ is incorrect.
 .It Bq Er ELF_E_UNIMPL
 The section type associated with section
 .Ar scn
-is currently unsupported by the library.
+is not supported.
+.It Bq Er ELF_E_VERSION
+Section
+.Ar scn
+was associated with an ELF object with an unsupported
+version.
 .El
 .Sh SEE ALSO
 .Xr elf 3 ,

Modified: stable/12/contrib/elftoolchain/libelf/elf_getident.c
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/elf_getident.c        Sun Mar  8 
20:35:00 2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/elf_getident.c        Sun Mar  8 
20:40:38 2020        (r358779)
@@ -30,7 +30,7 @@
 
 #include "_libelf.h"
 
-ELFTC_VCSID("$Id: elf_getident.c 3174 2015-03-27 17:13:41Z emaste $");
+ELFTC_VCSID("$Id: elf_getident.c 3712 2019-03-16 22:23:34Z jkoshy $");
 
 char *
 elf_getident(Elf *e, size_t *sz)
@@ -54,7 +54,7 @@ elf_getident(Elf *e, size_t *sz)
                else if (e->e_kind == ELF_K_ELF)
                        *sz = EI_NIDENT;
                else
-                       *sz = e->e_rawsize;
+                       *sz = (size_t) e->e_rawsize;
        }
 
        return ((char *) e->e_rawfile);

Modified: stable/12/contrib/elftoolchain/libelf/elf_next.3
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/elf_next.3    Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/elf_next.3    Sun Mar  8 20:40:38 
2020        (r358779)
@@ -21,9 +21,9 @@
 .\" out of the use of this software, even if advised of the possibility of
 .\" such damage.
 .\"
-.\" $Id: elf_next.3 3639 2018-10-14 14:07:02Z jkoshy $
+.\" $Id: elf_next.3 3698 2019-02-28 06:34:42Z jkoshy $
 .\"
-.Dd June 17, 2006
+.Dd February 27, 2019
 .Dt ELF_NEXT 3
 .Os
 .Sh NAME
@@ -88,6 +88,9 @@ Argument
 was not associated with a containing
 .Xr ar 1
 archive.
+.It Bq Er ELF_E_ARGUMENT
+An error was encountered while parsing the archive containing argument
+.Ar elf .
 .El
 .Sh SEE ALSO
 .Xr elf 3 ,

Modified: stable/12/contrib/elftoolchain/libelf/elf_next.c
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/elf_next.c    Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/elf_next.c    Sun Mar  8 20:40:38 
2020        (r358779)
@@ -30,7 +30,7 @@
 
 #include "_libelf.h"
 
-ELFTC_VCSID("$Id: elf_next.c 3174 2015-03-27 17:13:41Z emaste $");
+ELFTC_VCSID("$Id: elf_next.c 3710 2019-03-12 09:42:35Z jkoshy $");
 
 Elf_Cmd
 elf_next(Elf *e)
@@ -59,6 +59,20 @@ elf_next(Elf *e)
         */
        parent->e_u.e_ar.e_next = (next >= (off_t) parent->e_rawsize) ?
            (off_t) 0 : next;
+
+       /*
+        * Return an error if the 'e_next' field falls outside the current
+        * file.
+        *
+        * This check is performed after updating the parent descriptor's
+        * 'e_next' field so that the next call to elf_begin(3) will terminate
+        * traversal of a too-small archive even if client code forgets to
+        * check the return value from elf_next(3).
+        */
+       if (next > (off_t) parent->e_rawsize) {
+               LIBELF_SET_ERROR(ARGUMENT, 0);
+               return (ELF_C_NULL);
+       }
 
        return (ELF_C_READ);
 }

Modified: stable/12/contrib/elftoolchain/libelf/elf_open.3
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/elf_open.3    Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/elf_open.3    Sun Mar  8 20:40:38 
2020        (r358779)
@@ -21,9 +21,9 @@
 .\" out of the use of this software, even if advised of the possibility of
 .\" such damage.
 .\"
-.\" $Id: elf_open.3 3643 2018-10-14 21:09:24Z jkoshy $
+.\" $Id: elf_open.3 3743 2019-06-12 19:36:30Z jkoshy $
 .\"
-.Dd May 31, 2012
+.Dd June 12, 2019
 .Dt ELF_OPEN 3
 .Os
 .Sh NAME
@@ -43,7 +43,9 @@ The functions
 .Fn elf_open
 and
 .Fn elf_openmemory
-are extensions to the ELF(3) API, for the internal use of the
+are extensions to the
+.Xr elf 3
+API, for the internal use of the
 Elftoolchain project.
 Portable applications should not use these functions.
 .Pp
@@ -71,7 +73,9 @@ specifies the size of the memory area in bytes.
 The function returns a pointer to a ELF descriptor if successful, or
 NULL if an error occurred.
 .Sh COMPATIBILITY
-These functions are non-standard extensions to the ELF(3) API set.
+These functions are non-standard extensions to the
+.Xr elf 3
+API set.
 .Pp
 The behavior of these functions differs from their counterparts
 .Xr elf_begin 3

Modified: stable/12/contrib/elftoolchain/libelf/elf_rand.c
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/elf_rand.c    Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/elf_rand.c    Sun Mar  8 20:40:38 
2020        (r358779)
@@ -29,16 +29,25 @@
 
 #include "_libelf.h"
 
-ELFTC_VCSID("$Id: elf_rand.c 3174 2015-03-27 17:13:41Z emaste $");
+ELFTC_VCSID("$Id: elf_rand.c 3716 2019-03-18 22:01:01Z jkoshy $");
 
 off_t
 elf_rand(Elf *ar, off_t offset)
 {
        struct ar_hdr *arh;
+       off_t offset_of_member;
 
        if (ar == NULL || ar->e_kind != ELF_K_AR ||
            (offset & 1) || offset < SARMAG ||
-           (size_t) offset + sizeof(struct ar_hdr) >= ar->e_rawsize) {
+           offset >= ar->e_rawsize) {
+               LIBELF_SET_ERROR(ARGUMENT, 0);
+               return 0;
+       }
+
+       offset_of_member = offset + (off_t) sizeof(struct ar_hdr);
+
+       if (offset_of_member <= 0 || /* Numeric overflow. */
+           offset_of_member >= ar->e_rawsize) {
                LIBELF_SET_ERROR(ARGUMENT, 0);
                return 0;
        }

Modified: stable/12/contrib/elftoolchain/libelf/elf_rawfile.c
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/elf_rawfile.c Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/elf_rawfile.c Sun Mar  8 20:40:38 
2020        (r358779)
@@ -28,15 +28,13 @@
 
 #include "_libelf.h"
 
-ELFTC_VCSID("$Id: elf_rawfile.c 3174 2015-03-27 17:13:41Z emaste $");
+ELFTC_VCSID("$Id: elf_rawfile.c 3712 2019-03-16 22:23:34Z jkoshy $");
 
 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)
@@ -45,7 +43,7 @@ elf_rawfile(Elf *e, size_t *sz)
                LIBELF_SET_ERROR(SEQUENCE, 0);
 
        if (sz)
-               *sz = size;
+               *sz = e ? (size_t) e->e_rawsize : 0;
 
        return ((char *) ptr);
 }

Modified: stable/12/contrib/elftoolchain/libelf/elf_scn.c
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/elf_scn.c     Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/elf_scn.c     Sun Mar  8 20:40:38 
2020        (r358779)
@@ -36,7 +36,7 @@
 
 #include "_libelf.h"
 
-ELFTC_VCSID("$Id: elf_scn.c 3632 2018-10-10 21:12:43Z jkoshy $");
+ELFTC_VCSID("$Id: elf_scn.c 3712 2019-03-16 22:23:34Z jkoshy $");
 
 static int
 elfscn_cmp(struct _Elf_Scn *s1, struct _Elf_Scn *s2)
@@ -71,10 +71,11 @@ _libelf_load_section_headers(Elf *e, void *ehdr)
        assert((e->e_flags & LIBELF_F_SHDRS_LOADED) == 0);
 
 #define        CHECK_EHDR(E,EH)        do {                            \
-               if (shoff > e->e_rawsize ||                     \
+               uintmax_t rawsize = (uintmax_t) e->e_rawsize;   \
+               if (shoff > (uintmax_t) e->e_rawsize ||         \
                    fsz != (EH)->e_shentsize ||                 \
                    shnum > SIZE_MAX / fsz ||                   \
-                   fsz * shnum > e->e_rawsize - shoff) {       \
+                   fsz * shnum > rawsize - shoff) {            \
                        LIBELF_SET_ERROR(HEADER, 0);            \
                        return (0);                             \
                }                                               \

Modified: stable/12/contrib/elftoolchain/libelf/elf_update.3
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/elf_update.3  Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/elf_update.3  Sun Mar  8 20:40:38 
2020        (r358779)
@@ -21,9 +21,9 @@
 .\" out of the use of this software, even if advised of the possibility of
 .\" such damage.
 .\"
-.\" $Id: elf_update.3 3639 2018-10-14 14:07:02Z jkoshy $
+.\" $Id: elf_update.3 3734 2019-04-22 14:10:49Z jkoshy $
 .\"
-.Dd August 14, 2011
+.Dd April 22, 2019
 .Dt ELF_UPDATE 3
 .Os
 .Sh NAME
@@ -345,6 +345,10 @@ operation was requested after a prior call to
 disassociated the ELF descriptor
 .Ar elf
 from its underlying file.
+.It Bq Er ELF_E_UNIMPL
+Argument
+.Ar elf
+contained a section with an unsupported ELF type.
 .It Bq Er ELF_E_VERSION
 Argument
 .Ar elf

Modified: stable/12/contrib/elftoolchain/libelf/elf_update.c
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/elf_update.c  Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/elf_update.c  Sun Mar  8 20:40:38 
2020        (r358779)
@@ -41,7 +41,7 @@
 #include <sys/mman.h>
 #endif
 
-ELFTC_VCSID("$Id: elf_update.c 3632 2018-10-10 21:12:43Z jkoshy $");
+ELFTC_VCSID("$Id: elf_update.c 3763 2019-06-28 21:43:27Z emaste $");
 
 /*
  * Layout strategy:
@@ -142,7 +142,7 @@ _libelf_compute_section_extents(Elf *e, Elf_Scn *s, of
        assert(sh_type != SHT_NULL && sh_type != SHT_NOBITS);
 
        elftype = _libelf_xlate_shtype(sh_type);
-       if (elftype > ELF_T_LAST) {
+       if (elftype < ELF_T_FIRST || elftype > ELF_T_LAST) {
                LIBELF_SET_ERROR(SECTION, 0);
                return (0);
        }
@@ -222,10 +222,16 @@ _libelf_compute_section_extents(Elf *e, Elf_Scn *s, of
                }
 
                /*
+                * The data buffer's ELF type, ELF class and ELF version
+                * should be supported.
+                */
+               if ((msz = _libelf_msize(d->d_type, ec, e->e_version)) == 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);
@@ -802,7 +808,8 @@ _libelf_write_scn(Elf *e, unsigned char *nf, struct _E
 
                d = &ld->d_data;
 
-               msz = _libelf_msize(d->d_type, ec, e->e_version);
+               if ((msz = _libelf_msize(d->d_type, ec, e->e_version)) == 0)
+                       return ((off_t) -1);
 
                if ((uint64_t) rc < sh_off + d->d_off)
                        (void) memset(nf + rc,
@@ -813,8 +820,8 @@ _libelf_write_scn(Elf *e, unsigned char *nf, struct _E
 
                assert(d->d_buf != NULL);
                assert(d->d_version == e->e_version);
-               assert(msz != 0);
                assert(d->d_size % msz == 0);
+               assert(msz != 0);
 
                nobjects = (size_t) (d->d_size / msz);
 
@@ -854,7 +861,8 @@ _libelf_write_ehdr(Elf *e, unsigned char *nf, struct _
        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);
+       if ((msz = _libelf_msize(ELF_T_EHDR, ec, e->e_version)) == 0)
+               return ((off_t) -1);
 
        em = _libelf_elfmachine(e);
 
@@ -888,15 +896,17 @@ _libelf_write_phdr(Elf *e, unsigned char *nf, struct _
        Elf32_Ehdr *eh32;
        Elf64_Ehdr *eh64;
        Elf_Data dst, src;
-       size_t fsz, phnum;
+       size_t fsz, msz, 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(ehdr != NULL);
 
+       phnum = e->e_u.e_elf.e_nphdr;
        assert(phnum > 0);
 
        if (ec == ELFCLASS32) {
@@ -916,14 +926,15 @@ _libelf_write_phdr(Elf *e, unsigned char *nf, struct _
        (void) memset(&dst, 0, sizeof(dst));
        (void) memset(&src, 0, sizeof(src));
 
+       if ((msz = _libelf_msize(ELF_T_PHDR, ec, e->e_version)) == 0)
+               return ((off_t) -1);
        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);
+       src.d_size = phnum * msz;
 
        dst.d_size = fsz;
        dst.d_buf = nf + ex->ex_start;
@@ -948,13 +959,16 @@ _libelf_write_shdr(Elf *e, unsigned char *nf, struct _
        uint64_t shoff;
        Elf32_Ehdr *eh32;
        Elf64_Ehdr *eh64;
-       size_t fsz, nscn;
+       size_t fsz, msz, nscn;
        Elf_Data dst, src;
 
        assert(ex->ex_type == ELF_EXTENT_SHDR);
 
        ec = e->e_class;
+
        ehdr = _libelf_ehdr(e, ec, 0);
+       assert(ehdr != NULL);
+
        nscn = e->e_u.e_elf.e_nscn;
 
        if (ec == ELFCLASS32) {
@@ -974,8 +988,11 @@ _libelf_write_shdr(Elf *e, unsigned char *nf, struct _
        (void) memset(&dst, 0, sizeof(dst));
        (void) memset(&src, 0, sizeof(src));
 
+       if ((msz = _libelf_msize(ELF_T_SHDR, ec, e->e_version)) == 0)
+               return ((off_t) -1);
+
        src.d_type = ELF_T_SHDR;
-       src.d_size = _libelf_msize(ELF_T_SHDR, ec, e->e_version);
+       src.d_size = msz;
        src.d_version = dst.d_version = e->e_version;
 
        fsz = _libelf_fsize(ELF_T_SHDR, ec, e->e_version, (size_t) 1);
@@ -1087,7 +1104,7 @@ _libelf_write_elf(Elf *e, off_t newsize, struct _Elf_E
                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) {
+                       if (munmap(e->e_rawfile, (size_t) e->e_rawsize) < 0) {
                                LIBELF_SET_ERROR(IO, errno);
                                goto error;
                        }
@@ -1112,12 +1129,14 @@ _libelf_write_elf(Elf *e, off_t newsize, struct _Elf_E
                assert((e->e_flags & LIBELF_F_RAWFILE_MALLOC) ||
                    (e->e_flags & LIBELF_F_RAWFILE_MMAP));
                if (e->e_flags & LIBELF_F_RAWFILE_MALLOC) {
+                       assert((e->e_flags & LIBELF_F_RAWFILE_MMAP) == 0);
                        free(e->e_rawfile);
                        e->e_rawfile = newfile;
                        newfile = NULL;
                }
 #if    ELFTC_HAVE_MMAP
                else if (e->e_flags & LIBELF_F_RAWFILE_MMAP) {
+                       assert((e->e_flags & LIBELF_F_RAWFILE_MALLOC) == 0);
                        if ((e->e_rawfile = mmap(NULL, (size_t) newsize,
                            PROT_READ, MAP_PRIVATE, e->e_fd, (off_t) 0)) ==
                            MAP_FAILED) {
@@ -1128,7 +1147,7 @@ _libelf_write_elf(Elf *e, off_t newsize, struct _Elf_E
 #endif /* ELFTC_HAVE_MMAP */
 
                /* Record the new size of the file. */
-               e->e_rawsize = (size_t) newsize;
+               e->e_rawsize = newsize;
        } else {
                /* File opened in ELF_C_WRITE mode. */
                assert(e->e_rawfile == NULL);

Modified: stable/12/contrib/elftoolchain/libelf/gelf.3
==============================================================================
--- stable/12/contrib/elftoolchain/libelf/gelf.3        Sun Mar  8 20:35:00 
2020        (r358778)
+++ stable/12/contrib/elftoolchain/libelf/gelf.3        Sun Mar  8 20:40:38 
2020        (r358779)

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to