From owner-svn-src-vendor@freebsd.org Fri Apr 27 12:02:14 2018 Return-Path: Delivered-To: svn-src-vendor@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 135F2FA6662; Fri, 27 Apr 2018 12:02:14 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id B16F581876; Fri, 27 Apr 2018 12:02:13 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id ABAD326319; Fri, 27 Apr 2018 12:02:13 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w3RC2DFl060391; Fri, 27 Apr 2018 12:02:13 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3RC2BFc060365; Fri, 27 Apr 2018 12:02:11 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201804271202.w3RC2BFc060365@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Fri, 27 Apr 2018 12:02:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r333057 - in vendor/elftoolchain/dist: . ar as common documentation/libelf-by-example elfcopy elfdump ld libdwarf libelf libelftc libpe mk nm readelf strings test/ar/plugin test/elfcopy... X-SVN-Group: vendor X-SVN-Commit-Author: emaste X-SVN-Commit-Paths: in vendor/elftoolchain/dist: . ar as common documentation/libelf-by-example elfcopy elfdump ld libdwarf libelf libelftc libpe mk nm readelf strings test/ar/plugin test/elfcopy/plugin test/libdwarf/ts/... X-SVN-Commit-Revision: 333057 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 27 Apr 2018 12:02:14 -0000 Author: emaste Date: Fri Apr 27 12:02:11 2018 New Revision: 333057 URL: https://svnweb.freebsd.org/changeset/base/333057 Log: Import ELF Tool Chain snapshot at r3614 From http://svn.code.sf.net/p/elftoolchain/code/ Added: vendor/elftoolchain/dist/tools/build-automation/cli/ vendor/elftoolchain/dist/tools/build-automation/cli/yabs.1 (contents, props changed) vendor/elftoolchain/dist/tools/build-automation/executor/ vendor/elftoolchain/dist/tools/build-automation/executor/yabs-executor.1 (contents, props changed) Deleted: vendor/elftoolchain/dist/tools/build-automation/Makefile.documentation vendor/elftoolchain/dist/tools/build-automation/Makefile.manuals vendor/elftoolchain/dist/tools/build-automation/Makefile.program vendor/elftoolchain/dist/tools/build-automation/build-system.post.nw vendor/elftoolchain/dist/tools/build-automation/build-system.pre.nw vendor/elftoolchain/dist/tools/build-automation/implementation.nw vendor/elftoolchain/dist/tools/build-automation/introduction.nw vendor/elftoolchain/dist/tools/build-automation/master.nw vendor/elftoolchain/dist/tools/build-automation/slave.nw vendor/elftoolchain/dist/tools/build-automation/userguide.nw vendor/elftoolchain/dist/tools/build-automation/utilities.nw vendor/elftoolchain/dist/tools/build-automation/yabs-slave.1 vendor/elftoolchain/dist/tools/build-automation/yabs.1 Modified: vendor/elftoolchain/dist/INSTALL vendor/elftoolchain/dist/Makefile vendor/elftoolchain/dist/ar/Makefile vendor/elftoolchain/dist/as/as.c vendor/elftoolchain/dist/common/Makefile vendor/elftoolchain/dist/common/os.Linux.mk vendor/elftoolchain/dist/documentation/libelf-by-example/Makefile vendor/elftoolchain/dist/elfcopy/Makefile vendor/elftoolchain/dist/elfcopy/binary.c vendor/elftoolchain/dist/elfcopy/elfcopy.1 vendor/elftoolchain/dist/elfcopy/main.c vendor/elftoolchain/dist/elfdump/elfdump.c vendor/elftoolchain/dist/ld/Makefile vendor/elftoolchain/dist/ld/ld_script.awk vendor/elftoolchain/dist/libdwarf/Makefile vendor/elftoolchain/dist/libdwarf/libdwarf.h vendor/elftoolchain/dist/libdwarf/libdwarf_frame.c vendor/elftoolchain/dist/libdwarf/libdwarf_reloc.c vendor/elftoolchain/dist/libelf/Makefile vendor/elftoolchain/dist/libelf/_libelf_config.h vendor/elftoolchain/dist/libelf/gelf_phdr.c vendor/elftoolchain/dist/libelf/libelf_ehdr.c vendor/elftoolchain/dist/libelftc/Makefile vendor/elftoolchain/dist/libelftc/elftc_reloc_type_str.c vendor/elftoolchain/dist/libelftc/libelftc_dem_gnu3.c vendor/elftoolchain/dist/libpe/Makefile vendor/elftoolchain/dist/mk/elftoolchain.components.mk vendor/elftoolchain/dist/mk/elftoolchain.inc.mk vendor/elftoolchain/dist/mk/elftoolchain.lib.mk vendor/elftoolchain/dist/mk/elftoolchain.prog.mk vendor/elftoolchain/dist/mk/elftoolchain.subdir.mk vendor/elftoolchain/dist/mk/elftoolchain.tex.mk vendor/elftoolchain/dist/nm/nm.1 vendor/elftoolchain/dist/readelf/readelf.c vendor/elftoolchain/dist/strings/strings.c vendor/elftoolchain/dist/test/ar/plugin/Makefile.ardiff vendor/elftoolchain/dist/test/elfcopy/plugin/Makefile.ardiff vendor/elftoolchain/dist/test/libdwarf/ts/common/driver.c vendor/elftoolchain/dist/test/libelf/tset/bin/elf-hash vendor/elftoolchain/dist/test/libelf/tset/bin/elfc vendor/elftoolchain/dist/test/tet/Makefile vendor/elftoolchain/dist/tools/build-automation/Makefile vendor/elftoolchain/dist/tools/build-automation/README Modified: vendor/elftoolchain/dist/INSTALL ============================================================================== --- vendor/elftoolchain/dist/INSTALL Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/INSTALL Fri Apr 27 12:02:11 2018 (r333057) @@ -13,12 +13,12 @@ operating systems. ================= ======== ======================= Operating System Version Supported Architectures ----------------- -------- ----------------------- - `DragonFly BSD`_ 2.10.1 i386 - FreeBSD_ 10.2 amd64 & i386 + `DragonFly BSD`_ 5.2 amd64 + FreeBSD_ 11.1 amd64 & i386 Minix_ 3.0.2 i386 - NetBSD_ 7.0 i386 - OpenBSD_ v5.0 i386 - Ubuntu_ GNU/Linux 14.04LTS x86_64 + NetBSD_ 7.1.2 i386 + OpenBSD_ 6.3 amd64 + Ubuntu_ GNU/Linux 17.10 x86_64 ================= ======== ======================= .. _DragonFly BSD: http://www.dragonflybsd.org/ @@ -40,7 +40,7 @@ directories are present. Prerequisites ------------- -:DragonFly BSD 2.10.1: +:DragonFly BSD 5.2: - The core libraries and utilities should build out of the box on a stock install of DragonFly BSD. @@ -49,14 +49,14 @@ Prerequisites #. The current release of the `Test Execution Toolkit`_ needs to be downloaded and unpacked into the ``test/tet/`` directory. - #. The ``py26-yaml`` package needs to be installed:: + #. The ``py27-yaml`` package needs to be installed:: - % sudo pkgin install py26-yaml + % sudo pkg install py27-yaml - Building additional documentation is not currently supported under DragonFly BSD. -:FreeBSD 10.2: +:FreeBSD 11.1: - The core libraries and utilities should build out of the box on a stock install of FreeBSD. @@ -73,7 +73,7 @@ Prerequisites % sudo pkg install python py27-yaml - Building additional documentation is not currently supported under - FreeBSD 10.2. + FreeBSD 11.1. :Minix 3.2.0: - The following packages are pre-requisites for building the @@ -95,9 +95,9 @@ Prerequisites - Building additional documentation is not currently supported under Minix. -:OpenBSD 5.0: +:OpenBSD 6.3: - The following packages are pre-requisites for building the - sources on OpenBSD 5.0: + sources on OpenBSD 6.3: =================== ===================================== **Package** **Description** @@ -108,26 +108,6 @@ Prerequisites The following command line may be used to install the necessary pre-requisites:: - # pkg_add libarchive-2.8.4p0 - - - The test suites cannot currently be built under OpenBSD. - - - Building additional documentation is not currently supported - under OpenBSD. - -:OpenBSD 5.4: - - The following packages are pre-requisites for building the - sources on OpenBSD 5.4: - - =================== ===================================== - **Package** **Description** - =================== ===================================== - ``libarchive`` An archive access library. - =================== ===================================== - - The following command line may be used to install the necessary - pre-requisites:: - # pkg_add libarchive - The test suites cannot currently be built under OpenBSD. @@ -135,21 +115,10 @@ Prerequisites - Building additional documentation is not currently supported under OpenBSD. -:NetBSD 7.0: - - The following packages are pre-requisites for building the - sources on NetBSD 7.0: +:NetBSD 7.1.2: + - The core libraries and utilities should build out of the box on + a stock install of NetBSD 7.1.2. - =================== ===================================== - **Package** **Description** - =================== ===================================== - ``libarchive`` An archive access library. - =================== ===================================== - - The following command line may be used to install the necessary - pre-requisites:: - - # pkg_add libarchive - - To build and run the test suite: #. The current release of the `Test Execution Toolkit`_, needs @@ -159,14 +128,14 @@ Prerequisites #. The following additional package needs to be installed, as listed in the example command line below :: - % sudo pkg_add py27-yaml + % sudo pkgin install py27-yaml - Building additional documentation is not currently supported under NetBSD. -:Ubuntu GNU/Linux 10.04: +:Ubuntu GNU/Linux 17.10: - The following packages are pre-requisites for building the - sources on Ubuntu GNU/Linux 10.04: + sources on Ubuntu GNU/Linux 17.10: =================== ===================================== **Package** **Description** @@ -176,10 +145,11 @@ Prerequisites ``flex`` Lexical analyser. ``gcc`` C compiler. ``libarchive-dev`` Archive access library. + ``libbsd-dev`` BSD headers and libraries. ``libc6-dev`` Files for C language development. ``libexpat1-dev`` An XML processing library. ``m4`` Macro processor. - ``pmake`` A ``make`` that uses BSD-make syntax. + ``bmake`` NetBSD ``make``. ``python-yaml`` A YAML library for Python. ``sharutils`` For ``uudecode``. ``zlib1g-dev`` Compression library. @@ -189,7 +159,7 @@ Prerequisites pre-requisites:: % sudo apt-get install binutils bison flex gcc libarchive-dev \ - libc6-dev m4 pmake zlib1g-dev + libc6-dev m4 bmake zlib1g-dev - To build and run the test suite: @@ -202,50 +172,12 @@ Prerequisites % sudo apt-get install libexpat1-dev python-yaml sharutils - - To build additional documentation, the ``pgf`` package is - needed:: + - To build additional documentation, the packages listed in the + example command line below are needed:: - % sudo apt-get install pgf + % sudo apt-get install texlive-latex-recommended texlive-pictures \ + libbsd-dev -:Ubuntu GNU/Linux 14.04: - - The following packages are pre-requisites for building the - sources on Ubuntu GNU/Linux 14.04: - - =================== ===================================== - **Package** **Description** - =================== ===================================== - ``bison`` Parser generator. - ``build-essential`` Basic build tools. - ``flex`` Lexical analyser. - ``libarchive-dev`` Archive access library. - ``libexpat1-dev`` An XML processing library. - ``m4`` Macro processor. - ``bmake`` NetBSD ``make``. - ``python-yaml`` A YAML library for Python. - ``sharutils`` For ``uudecode``. - ``zlib1g-dev`` Compression library. - =================== ===================================== - - The following command line may be used to install the necessary - pre-requisites:: - - % sudo apt-get install bison build-essential flex libarchive-dev \ - m4 bmake zlib1g-dev - - - To build and run the test suite: - - #. The current release of the `Test Execution Toolkit`_, needs - to be downloaded and unpacked into the ``test/tet/`` - directory. - - #. The following additional packages need to be installed, as - listed in the example command line below:: - - % sudo apt-get install libexpat1-dev python-yaml sharutils - - - Builds of additional documentation are not currently supported - under Ubuntu GNU/Linux 14.04. - .. _Test Execution Toolkit: http://tetworks.opengroup.org/ .. _OpenGroup: http://www.opengroup.org/ @@ -259,9 +191,9 @@ On `DragonFly BSD`_, FreeBSD_, Minix_, NetBSD_ and Op % make -On Ubuntu GNU/Linux with the **pmake** package installed, use:: +On Ubuntu GNU/Linux with the **bmake** package installed, use:: - % pmake + % bmake Testing the software @@ -274,9 +206,9 @@ On `DragonFly BSD`_, FreeBSD_ and NetBSD_, use:: % make run-tests -On Ubuntu GNU/Linux with the **pmake** package installed, use:: +On Ubuntu GNU/Linux with the **bmake** package installed, use:: - % pmake run-tests + % bmake run-tests Installing the Software ======================= @@ -287,9 +219,9 @@ On `DragonFly BSD`_, FreeBSD_, Minix_, NetBSD_ and Ope % make install -On Ubuntu GNU/Linux with the **pmake** package installed, use:: +On Ubuntu GNU/Linux with the **bmake** package installed, use:: - % pmake install + % bmake install By default the ``install`` target will install utilities into @@ -299,7 +231,7 @@ By default the ``install`` target will install utiliti The installation directory may be changed using the ``DESTDIR`` variable. For example:: - % pmake DESTDIR=$HOME/local install + % bmake DESTDIR=$HOME/local install Additional Information @@ -310,7 +242,7 @@ website`_. .. _project website: http://elftoolchain.sourceforge.net/ -.. $Id: INSTALL 3353 2016-01-18 21:50:13Z jkoshy $ +.. $Id: INSTALL 3613 2018-04-21 19:34:37Z jkoshy $ .. Local Variables: .. mode: rst Modified: vendor/elftoolchain/dist/Makefile ============================================================================== --- vendor/elftoolchain/dist/Makefile Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/Makefile Fri Apr 27 12:02:11 2018 (r333057) @@ -1,4 +1,4 @@ -# $Id: Makefile 3382 2016-01-31 12:31:08Z jkoshy $ +# $Id: Makefile 3605 2018-04-13 18:15:09Z jkoshy $ TOP= . @@ -14,12 +14,12 @@ SUBDIR += libdwarf # Build additional APIs. SUBDIR += libelftc -.if defined(WITH_PE) && ${WITH_PE:tl} == "yes" +.if defined(WITH_PE) && ${WITH_PE} == "yes" SUBDIR += libpe .endif # The instruction set analyser. -.if defined(WITH_ISA) && ${WITH_ISA:tl} == "yes" +.if defined(WITH_ISA) && ${WITH_ISA} == "yes" SUBDIR += isa # ('isa' does not build on all platforms yet). .endif @@ -39,18 +39,19 @@ SUBDIR += strings SUBDIR += tools # Build the test suites. -.if exists(${.CURDIR}/test) && defined(WITH_TESTS) && ${WITH_TESTS:tl} == "yes" +.if exists(${.CURDIR}/test) && defined(WITH_TESTS) && ${WITH_TESTS} == "yes" SUBDIR += test .endif # Build additional build tooling. -.if defined(WITH_BUILD_TOOLS) && ${WITH_BUILD_TOOLS:tl} == "yes" +.if defined(WITH_BUILD_TOOLS) && ${WITH_BUILD_TOOLS} == "yes" SUBDIR += tools .endif # Build documentation at the end. -.if exists(${.CURDIR}/documentation) && defined(WITH_DOCUMENTATION) && \ - ${WITH_DOCUMENTATION:tl} == "yes" +.if exists(${.CURDIR}/documentation) && \ + defined(WITH_ADDITIONAL_DOCUMENTATION) && \ + ${WITH_ADDITIONAL_DOCUMENTATION} == "yes" SUBDIR += documentation .endif @@ -61,7 +62,7 @@ SUBDIR += documentation # # Run the test suites. -.if exists(${.CURDIR}/test) && defined(WITH_TESTS) && ${WITH_TESTS:tl} == "yes" +.if exists(${.CURDIR}/test) && defined(WITH_TESTS) && ${WITH_TESTS} == "yes" run-tests: all .PHONY (cd ${.CURDIR}/test; ${MAKE} test) .endif Modified: vendor/elftoolchain/dist/ar/Makefile ============================================================================== --- vendor/elftoolchain/dist/ar/Makefile Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/ar/Makefile Fri Apr 27 12:02:11 2018 (r333057) @@ -1,4 +1,4 @@ -# $Id: Makefile 3107 2014-12-20 08:31:58Z kaiwang27 $ +# $Id: Makefile 3608 2018-04-14 21:23:04Z jkoshy $ TOP= .. @@ -32,4 +32,6 @@ ${EXTRA_TARGETS}: ${PROG} .if ${OS_HOST} == "OpenBSD" CFLAGS+= -I/usr/local/include LDFLAGS+= -L/usr/local/lib +.elif ${OS_HOST} == "DragonFly" +LDADD+= -lbz2 .endif Modified: vendor/elftoolchain/dist/as/as.c ============================================================================== --- vendor/elftoolchain/dist/as/as.c Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/as/as.c Fri Apr 27 12:02:11 2018 (r333057) @@ -24,6 +24,7 @@ * SUCH DAMAGE. */ +#include #include #include #include @@ -34,7 +35,7 @@ #include -ELFTC_VCSID("$Id: as.c 2799 2012-12-22 09:03:29Z jkoshy $"); +ELFTC_VCSID("$Id: as.c 3581 2017-10-13 23:27:45Z emaste $"); enum as_long_option_index { AS_OPT_DEFSYM, @@ -204,7 +205,7 @@ main(int argc, char **argv) if (option_index >= 0) errx(1, "ERROR: option \"--%s\" is unimplemented.", - as_option_long_options[option_index]); + as_option_long_options[option_index].name); else errx(1, "ERROR: option '-%c' is unimplemented.", Modified: vendor/elftoolchain/dist/common/Makefile ============================================================================== --- vendor/elftoolchain/dist/common/Makefile Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/common/Makefile Fri Apr 27 12:02:11 2018 (r333057) @@ -1,4 +1,4 @@ -# $Id: Makefile 3022 2014-04-17 18:05:58Z jkoshy $ +# $Id: Makefile 3594 2018-04-11 18:26:50Z jkoshy $ TOP= .. @@ -7,12 +7,12 @@ INCSDIR= /usr/include .PHONY: all clean clobber depend obj -all depend obj: +all depend: clean clobber: rm -f ${CLEANFILES} cleandepend: - rm -f .depend + rm -f ${.OBJDIR}/.depend .include "${TOP}/mk/elftoolchain.inc.mk" Modified: vendor/elftoolchain/dist/common/os.Linux.mk ============================================================================== --- vendor/elftoolchain/dist/common/os.Linux.mk Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/common/os.Linux.mk Fri Apr 27 12:02:11 2018 (r333057) @@ -1,13 +1,15 @@ # # Build recipes for Linux based operating systems. # -# $Id: os.Linux.mk 2064 2011-10-26 15:12:32Z jkoshy $ +# $Id: os.Linux.mk 3594 2018-04-11 18:26:50Z jkoshy $ _NATIVE_ELF_FORMAT = native-elf-format -.BEGIN: ${_NATIVE_ELF_FORMAT}.h +.if !make(obj) +.BEGIN: ${.OBJDIR}/${_NATIVE_ELF_FORMAT}.h -${_NATIVE_ELF_FORMAT}.h: +${.OBJDIR}/${_NATIVE_ELF_FORMAT}.h: ${.CURDIR}/${_NATIVE_ELF_FORMAT} > ${.TARGET} || rm ${.TARGET} +.endif -CLEANFILES += ${_NATIVE_ELF_FORMAT}.h +CLEANFILES += ${.OBJDIR}/${_NATIVE_ELF_FORMAT}.h Modified: vendor/elftoolchain/dist/documentation/libelf-by-example/Makefile ============================================================================== --- vendor/elftoolchain/dist/documentation/libelf-by-example/Makefile Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/documentation/libelf-by-example/Makefile Fri Apr 27 12:02:11 2018 (r333057) @@ -1,7 +1,7 @@ # # Libelf by Example # -# $Id: Makefile 2441 2012-02-21 05:46:43Z jkoshy $ +# $Id: Makefile 3600 2018-04-12 06:45:40Z jkoshy $ TOP = ../.. @@ -10,19 +10,30 @@ DOC= libelf-by-example SRCS= libelf-by-example.tex prog1.txt prog2.txt prog3.txt \ prog4.txt prog5.txt prog6.txt +CLEANFILES+= ${SRCS:Mprog*:S/.txt/.c/} + .include "${TOP}/mk/elftoolchain.tex.mk" .if ${OS_HOST} == "Linux" +EXTRA_FLAGS= -I/usr/include/bsd -DLIBBSD_OVERLAY EXTRA_LIBS= -lbsd .endif check-example-syntax: .PHONY -.for f in ${SRCS:Mprog*} - @c=$$(basename ${f} .txt).c; sed -e 's/@[^@]*@//' \ - ${.CURDIR}/${f} > ${.OBJDIR}/$${c}; \ - echo -n $${c} ' '; cc -I${.CURDIR}/${TOP}/common \ - -I${.CURDIR}/${TOP}/libelf ${.OBJDIR}/$${c} \ - -L${.CURDIR}/${TOP}/libelf -lelf ${EXTRA_LIBS} && \ - rm ${.OBJDIR}/$${c} a.out +.for f in ${SRCS:Mprog*:S/.txt//} + @sed -e 's/@[^@]*@//' \ + ${.CURDIR}/${f}.txt > ${.OBJDIR}/${f}.c; \ + echo -n ${f} ' '; \ + libelf="${.OBJDIR}/${TOP}/libelf"; \ + if [ ! -d $${libelf} -a "${.CURDIR}" != "${.OBJDIR}" ]; then \ + suffix="${.OBJDIR:S,${.CURDIR}/,,}"; \ + libelf="${.CURDIR}/${TOP}/libelf/$${suffix}"; \ + fi; \ + cc -I${.CURDIR}/${TOP}/common \ + -I${.CURDIR}/${TOP}/libelf \ + ${EXTRA_FLAGS} \ + ${.OBJDIR}/${f}.c \ + -L"$${libelf}" -lelf ${EXTRA_LIBS} && \ + rm ${.OBJDIR}/a.out .endfor @echo Modified: vendor/elftoolchain/dist/elfcopy/Makefile ============================================================================== --- vendor/elftoolchain/dist/elfcopy/Makefile Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/elfcopy/Makefile Fri Apr 27 12:02:11 2018 (r333057) @@ -1,4 +1,4 @@ -# $Id: Makefile 3381 2016-01-30 19:39:47Z jkoshy $ +# $Id: Makefile 3608 2018-04-14 21:23:04Z jkoshy $ TOP= .. @@ -18,7 +18,7 @@ LDADD= -lelf -lelftc LDADD+= -larchive .endif -.if defined(WITH_PE) && ${WITH_PE:tl} == "yes" +.if defined(WITH_PE) && ${WITH_PE} == "yes" SRCS+= pe.c CFLAGS+= -DWITH_PE=1 @@ -51,4 +51,6 @@ ${EXTRA_TARGETS}: ${PROG} .if ${OS_HOST} == "OpenBSD" CFLAGS+= -I/usr/local/include LDFLAGS+= -L/usr/local/lib +.elif ${OS_HOST} == "DragonFly" +LDADD+= -lbz2 .endif Modified: vendor/elftoolchain/dist/elfcopy/binary.c ============================================================================== --- vendor/elftoolchain/dist/elfcopy/binary.c Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/elfcopy/binary.c Fri Apr 27 12:02:11 2018 (r333057) @@ -36,7 +36,7 @@ #include "elfcopy.h" -ELFTC_VCSID("$Id: binary.c 3445 2016-04-20 19:08:30Z emaste $"); +ELFTC_VCSID("$Id: binary.c 3611 2018-04-16 21:35:18Z jkoshy $"); /* * Convert ELF object to `binary'. Sections with SHF_ALLOC flag set @@ -215,7 +215,7 @@ create_elf_from_binary(struct elfcopy *ecp, int ifd, c if ((sym_basename = strdup(ifn)) == NULL) err(1, "strdup"); for (p = sym_basename; *p != '\0'; p++) - if (!isalnum(*p)) + if (!isalnum(*p & 0xFF)) *p = '_'; #define _GEN_SYMNAME(S) do { \ snprintf(name, sizeof(name), "%s%s%s", "_binary_", sym_basename, S); \ Modified: vendor/elftoolchain/dist/elfcopy/elfcopy.1 ============================================================================== --- vendor/elftoolchain/dist/elfcopy/elfcopy.1 Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/elfcopy/elfcopy.1 Fri Apr 27 12:02:11 2018 (r333057) @@ -21,9 +21,9 @@ .\" out of the use of this software, even if advised of the possibility of .\" such damage. .\" -.\" $Id: elfcopy.1 3426 2016-03-05 13:32:28Z emaste $ +.\" $Id: elfcopy.1 3565 2017-08-31 02:24:19Z emaste $ .\" -.Dd March 5, 2016 +.Dd August 30, 2017 .Os .Dt ELFCOPY 1 .Sh NAME @@ -83,6 +83,7 @@ .Op Fl -srec-forceS3 .Op Fl -srec-len Ns = Ns Ar val .Op Fl -strip-dwo +.Op Fl -strip-symbols= Ns Ar filename .Op Fl -strip-unneeded .Ar infile .Op Ar outfile @@ -339,6 +340,10 @@ This option is only meaningful when the output target .Dq srec . .It Fl -strip-dwo Do not copy .dwo debug sections to the output file. +.It Fl -strip-symbols= Ns Ar filename +Do not copy any of the symbols specified by +.Ar filename +to the output. .It Fl -strip-unneeded Do not copy symbols that are not needed for relocation processing. .El Modified: vendor/elftoolchain/dist/elfcopy/main.c ============================================================================== --- vendor/elftoolchain/dist/elfcopy/main.c Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/elfcopy/main.c Fri Apr 27 12:02:11 2018 (r333057) @@ -39,7 +39,7 @@ #include "elfcopy.h" -ELFTC_VCSID("$Id: main.c 3520 2017-04-17 01:47:52Z kaiwang27 $"); +ELFTC_VCSID("$Id: main.c 3577 2017-09-14 02:19:42Z emaste $"); enum options { @@ -679,6 +679,8 @@ create_file(struct elfcopy *ecp, const char *src, cons if ((ifd = open(elftemp, O_RDONLY)) == -1) err(EXIT_FAILURE, "open %s failed", src); close(efd); + if (unlink(elftemp) < 0) + err(EXIT_FAILURE, "unlink %s failed", elftemp); free(elftemp); } @@ -1283,8 +1285,9 @@ parse_symlist_file(struct elfcopy *ecp, const char *fn err(EXIT_FAILURE, "can not open %s", fn); if ((data = malloc(sb.st_size + 1)) == NULL) err(EXIT_FAILURE, "malloc failed"); - if (fread(data, 1, sb.st_size, fp) == 0 || ferror(fp)) - err(EXIT_FAILURE, "fread failed"); + if (sb.st_size > 0) + if (fread(data, sb.st_size, 1, fp) != 1) + err(EXIT_FAILURE, "fread failed"); fclose(fp); data[sb.st_size] = '\0'; @@ -1534,6 +1537,22 @@ print_version(void) exit(EXIT_SUCCESS); } +/* + * Compare the ending of s with end. + */ +static int +strrcmp(const char *s, const char *end) +{ + size_t endlen, slen; + + slen = strlen(s); + endlen = strlen(end); + + if (slen >= endlen) + s += slen - endlen; + return (strcmp(s, end)); +} + int main(int argc, char **argv) { @@ -1567,12 +1586,16 @@ main(int argc, char **argv) if ((ecp->progname = ELFTC_GETPROGNAME()) == NULL) ecp->progname = "elfcopy"; - if (strcmp(ecp->progname, "strip") == 0) + if (strrcmp(ecp->progname, "strip") == 0) strip_main(ecp, argc, argv); - else if (strcmp(ecp->progname, "mcs") == 0) + else if (strrcmp(ecp->progname, "mcs") == 0) mcs_main(ecp, argc, argv); - else + else { + if (strrcmp(ecp->progname, "elfcopy") != 0 && + strrcmp(ecp->progname, "objcopy") != 0) + warnx("program mode not known, defaulting to elfcopy"); elfcopy_main(ecp, argc, argv); + } free_sec_add(ecp); free_sec_act(ecp); Modified: vendor/elftoolchain/dist/elfdump/elfdump.c ============================================================================== --- vendor/elftoolchain/dist/elfdump/elfdump.c Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/elfdump/elfdump.c Fri Apr 27 12:02:11 2018 (r333057) @@ -50,7 +50,7 @@ #include "_elftc.h" -ELFTC_VCSID("$Id: elfdump.c 3521 2017-06-04 20:07:09Z jkoshy $"); +ELFTC_VCSID("$Id: elfdump.c 3584 2017-11-05 20:51:43Z jkoshy $"); #if defined(ELFTC_NEED_ELF_NOTE_DEFINITION) #include "native-elf-format.h" @@ -915,7 +915,7 @@ elf_print_ar(struct elfdump *ed, int fd) Elf_Arhdr *arh; Elf_Arsym *arsym; Elf_Cmd cmd; - char idx[10]; + char idx[21]; size_t cnt, i; ed->ar = ed->elf; @@ -1496,7 +1496,7 @@ elf_print_symtab(struct elfdump *ed, int i) struct section *s; const char *name; uint16_t *vs; - char idx[10]; + char idx[13]; Elf_Data *data; GElf_Sym sym; int len, j, elferr, nvs; @@ -1590,7 +1590,7 @@ elf_print_dynamic(struct elfdump *ed) { struct section *s; const char *name; - char idx[10]; + char idx[13]; Elf_Data *data; GElf_Dyn dyn; int elferr, i, len; @@ -2052,7 +2052,7 @@ elf_print_note(struct elfdump *ed) size_t count; int elferr, i; uint8_t *src; - char idx[10]; + char idx[17]; s = NULL; for (i = 0; (size_t)i < ed->shnum; i++) { Modified: vendor/elftoolchain/dist/ld/Makefile ============================================================================== --- vendor/elftoolchain/dist/ld/Makefile Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/ld/Makefile Fri Apr 27 12:02:11 2018 (r333057) @@ -1,4 +1,4 @@ -# $Id: Makefile 3407 2016-02-14 17:47:23Z jkoshy $ +# $Id: Makefile 3594 2018-04-11 18:26:50Z jkoshy $ TOP= .. @@ -47,6 +47,6 @@ YFLAGS= -d .SUFFIXES: .ld .c .ld.c: - awk -f ld_script.awk ${.ALLSRC} > ${.TARGET} + awk -f ${.CURDIR}/ld_script.awk ${.ALLSRC} > ${.TARGET} .include "${TOP}/mk/elftoolchain.prog.mk" Modified: vendor/elftoolchain/dist/ld/ld_script.awk ============================================================================== --- vendor/elftoolchain/dist/ld/ld_script.awk Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/ld/ld_script.awk Fri Apr 27 12:02:11 2018 (r333057) @@ -1,10 +1,19 @@ -# $Id: ld_script.awk 2493 2012-04-15 18:59:09Z kaiwang27 $ +# Transform text file contents into a string literal. +# +# Usage: awk -f THIS-SCRIPT INPUT > OUTPUT +# +# $Id: ld_script.awk 3593 2018-04-11 18:26:20Z jkoshy $ BEGIN { + # Generate a symbol name based on the last component + # of the input file name. split(ARGV[1], s, "."); + sub(".*/", "", s[1]); printf "const char *%s = ", s[1]; } +# Enclose each line of text with a preceding and trailing '"', +# escaping any '"' characters that are present. { printf "\""; gsub("\"", "\\\""); Modified: vendor/elftoolchain/dist/libdwarf/Makefile ============================================================================== --- vendor/elftoolchain/dist/libdwarf/Makefile Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/libdwarf/Makefile Fri Apr 27 12:02:11 2018 (r333057) @@ -1,6 +1,6 @@ -# $Id: Makefile 3097 2014-09-02 22:10:18Z kaiwang27 $ +# $Id: Makefile 3594 2018-04-11 18:26:50Z jkoshy $ -TOP= ${.CURDIR}/.. +TOP= .. LIB= dwarf Modified: vendor/elftoolchain/dist/libdwarf/libdwarf.h ============================================================================== --- vendor/elftoolchain/dist/libdwarf/libdwarf.h Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/libdwarf/libdwarf.h Fri Apr 27 12:02:11 2018 (r333057) @@ -24,7 +24,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: libdwarf.h 3295 2016-01-08 22:08:10Z jkoshy $ + * $Id: libdwarf.h 3578 2017-09-14 02:21:28Z emaste $ */ #ifndef _LIBDWARF_H_ @@ -440,6 +440,7 @@ enum Dwarf_ISA { DW_ISA_X86, DW_ISA_X86_64, DW_ISA_AARCH64, + DW_ISA_RISCV, DW_ISA_MAX }; Modified: vendor/elftoolchain/dist/libdwarf/libdwarf_frame.c ============================================================================== --- vendor/elftoolchain/dist/libdwarf/libdwarf_frame.c Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/libdwarf/libdwarf_frame.c Fri Apr 27 12:02:11 2018 (r333057) @@ -26,7 +26,7 @@ #include "_libdwarf.h" -ELFTC_VCSID("$Id: libdwarf_frame.c 3106 2014-12-19 16:00:58Z kaiwang27 $"); +ELFTC_VCSID("$Id: libdwarf_frame.c 3589 2018-03-13 20:34:33Z kaiwang27 $"); static int _dwarf_frame_find_cie(Dwarf_FrameSec fs, Dwarf_Unsigned offset, @@ -142,6 +142,8 @@ _dwarf_frame_parse_lsb_cie_augment(Dwarf_Debug dbg, Dw augdata_p = cie->cie_augdata; while (*aug_p != '\0') { switch (*aug_p) { + case 'S': + break; case 'L': /* Skip one augment in augment data. */ augdata_p++; Modified: vendor/elftoolchain/dist/libdwarf/libdwarf_reloc.c ============================================================================== --- vendor/elftoolchain/dist/libdwarf/libdwarf_reloc.c Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/libdwarf/libdwarf_reloc.c Fri Apr 27 12:02:11 2018 (r333057) @@ -26,7 +26,7 @@ #include "_libdwarf.h" -ELFTC_VCSID("$Id: libdwarf_reloc.c 3198 2015-05-14 18:36:19Z emaste $"); +ELFTC_VCSID("$Id: libdwarf_reloc.c 3578 2017-09-14 02:21:28Z emaste $"); Dwarf_Unsigned _dwarf_get_reloc_type(Dwarf_P_Debug dbg, int is64) @@ -49,6 +49,8 @@ _dwarf_get_reloc_type(Dwarf_P_Debug dbg, int is64) return (R_ARM_ABS32); case DW_ISA_MIPS: return (is64 ? R_MIPS_64 : R_MIPS_32); + case DW_ISA_RISCV: + return (is64 ? R_RISCV_64 : R_RISCV_32); case DW_ISA_IA64: return (is64 ? R_IA_64_DIR64LSB : R_IA_64_DIR32LSB); default: @@ -99,6 +101,12 @@ _dwarf_get_reloc_size(Dwarf_Debug dbg, Dwarf_Unsigned if (rel_type == R_MIPS_32) return (4); else if (rel_type == R_MIPS_64) + return (8); + break; + case EM_RISCV: + if (rel_type == R_RISCV_32) + return (4); + else if (rel_type == R_RISCV_64) return (8); break; case EM_IA_64: Modified: vendor/elftoolchain/dist/libelf/Makefile ============================================================================== --- vendor/elftoolchain/dist/libelf/Makefile Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/libelf/Makefile Fri Apr 27 12:02:11 2018 (r333057) @@ -1,6 +1,6 @@ -# $Id: Makefile 2605 2012-10-02 17:52:20Z jkoshy $ +# $Id: Makefile 3594 2018-04-11 18:26:50Z jkoshy $ -TOP= ${.CURDIR}/.. +TOP= .. LIB= elf Modified: vendor/elftoolchain/dist/libelf/_libelf_config.h ============================================================================== --- vendor/elftoolchain/dist/libelf/_libelf_config.h Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/libelf/_libelf_config.h Fri Apr 27 12:02:11 2018 (r333057) @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: _libelf_config.h 3400 2016-02-12 18:38:49Z emaste $ + * $Id: _libelf_config.h 3566 2017-08-31 02:28:40Z emaste $ */ #if defined(__APPLE__) || defined(__DragonFly__) @@ -97,7 +97,7 @@ #define LIBELF_BYTEORDER ELFDATA2MSB #define LIBELF_CLASS ELFCLASS32 -#elif defined(__riscv64) +#elif defined(__riscv) && (__riscv_xlen == 64) #define LIBELF_ARCH EM_RISCV #define LIBELF_BYTEORDER ELFDATA2LSB Modified: vendor/elftoolchain/dist/libelf/gelf_phdr.c ============================================================================== --- vendor/elftoolchain/dist/libelf/gelf_phdr.c Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/libelf/gelf_phdr.c Fri Apr 27 12:02:11 2018 (r333057) @@ -31,7 +31,7 @@ #include "_libelf.h" -ELFTC_VCSID("$Id: gelf_phdr.c 3177 2015-03-30 18:19:41Z emaste $"); +ELFTC_VCSID("$Id: gelf_phdr.c 3576 2017-09-14 02:15:29Z emaste $"); Elf32_Phdr * elf32_getphdr(Elf *e) @@ -53,24 +53,26 @@ gelf_getphdr(Elf *e, int index, GElf_Phdr *d) Elf64_Ehdr *eh64; Elf32_Phdr *ep32; Elf64_Phdr *ep64; + size_t phnum; if (d == NULL || e == NULL || ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64) || - (e->e_kind != ELF_K_ELF) || index < 0) { + (e->e_kind != ELF_K_ELF) || index < 0 || + elf_getphdrnum(e, &phnum) < 0) { LIBELF_SET_ERROR(ARGUMENT, 0); return (NULL); } + if ((size_t)index >= phnum) { + 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; @@ -87,11 +89,6 @@ gelf_getphdr(Elf *e, int index, GElf_Phdr *d) (ep64 = _libelf_getphdr(e, ELFCLASS64)) == NULL) return (NULL); - if (index >= eh64->e_phnum) { - LIBELF_SET_ERROR(ARGUMENT, 0); - return (NULL); - } - ep64 += index; *d = *ep64; @@ -125,13 +122,15 @@ gelf_newphdr(Elf *e, size_t count) int gelf_update_phdr(Elf *e, int ndx, GElf_Phdr *s) { - int ec, phnum; + int ec; + size_t 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)) { + ((ec = e->e_class) != ELFCLASS32 && ec != ELFCLASS64) || + elf_getphdrnum(e, &phnum) < 0) { LIBELF_SET_ERROR(ARGUMENT, 0); return (0); } @@ -144,12 +143,7 @@ gelf_update_phdr(Elf *e, int ndx, GElf_Phdr *s) 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) { + if (ndx < 0 || (size_t)ndx > phnum) { LIBELF_SET_ERROR(ARGUMENT, 0); return (0); } Modified: vendor/elftoolchain/dist/libelf/libelf_ehdr.c ============================================================================== --- vendor/elftoolchain/dist/libelf/libelf_ehdr.c Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/libelf/libelf_ehdr.c Fri Apr 27 12:02:11 2018 (r333057) @@ -31,7 +31,7 @@ #include "_libelf.h" -ELFTC_VCSID("$Id: libelf_ehdr.c 3174 2015-03-27 17:13:41Z emaste $"); +ELFTC_VCSID("$Id: libelf_ehdr.c 3575 2017-09-14 02:13:36Z emaste $"); /* * Retrieve counts for sections, phdrs and the section string table index @@ -170,10 +170,6 @@ _libelf_ehdr(Elf *e, int ec, int allocate) (*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; @@ -193,12 +189,19 @@ _libelf_ehdr(Elf *e, int ec, int allocate) return (NULL); } - if (shnum != 0 || shoff == 0LL) { /* not using extended numbering */ + /* + * If extended numbering is being used, read the correct + * number of sections and program header entries. + */ + if ((shnum == 0 && shoff != 0) || phnum == PN_XNUM || strndx == SHN_XINDEX) { + if (_libelf_load_extended(e, ec, shoff, phnum, strndx) == 0) + return (NULL); + } else { + /* 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); } Modified: vendor/elftoolchain/dist/libelftc/Makefile ============================================================================== --- vendor/elftoolchain/dist/libelftc/Makefile Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/libelftc/Makefile Fri Apr 27 12:02:11 2018 (r333057) @@ -1,6 +1,6 @@ -# $Id: Makefile 3489 2016-08-31 00:12:15Z emaste $ +# $Id: Makefile 3601 2018-04-12 16:58:53Z jkoshy $ -TOP= ${.CURDIR}/.. +TOP= .. LIB= elftc @@ -28,7 +28,8 @@ SHLIB_MAJOR= 1 WARNS?= 6 -CLEANFILES+= elftc_version.c +ELFTC_VERSION_FILE= ${.OBJDIR}/elftc_version.c +CLEANFILES+= ${ELFTC_VERSION_FILE} LDADD+= -lelf @@ -50,10 +51,10 @@ MLINKS= elftc_bfd_find_target.3 elftc_bfd_target_byteo elftc_string_table_create.3 elftc_string_table_insert.3 \ elftc_string_table_create.3 elftc_string_table_lookup.3 -.if !make(clean) && !make(clobber) +.if !make(clean) && !make(clobber) && !make(obj) .BEGIN: .SILENT - ${.CURDIR}/make-toolchain-version -t ${TOP} -r ${RELEASE} \ - -h ${OS_HOST} + ${.CURDIR}/make-toolchain-version -t ${.CURDIR}/${TOP} \ + -r ${RELEASE} -h ${OS_HOST} -o ${ELFTC_VERSION_FILE} .endif .include "${TOP}/mk/elftoolchain.lib.mk" Modified: vendor/elftoolchain/dist/libelftc/elftc_reloc_type_str.c ============================================================================== --- vendor/elftoolchain/dist/libelftc/elftc_reloc_type_str.c Fri Apr 27 11:00:12 2018 (r333056) +++ vendor/elftoolchain/dist/libelftc/elftc_reloc_type_str.c Fri Apr 27 12:02:11 2018 (r333057) @@ -501,6 +501,120 @@ elftc_reloc_type_str(unsigned int mach, unsigned int t case 116: return "R_PPC_EMB_RELSDA"; } break; + case EM_PPC64: + switch(type) { + case 0: return "R_PPC64_NONE"; + case 1: return "R_PPC64_ADDR32"; + case 2: return "R_PPC64_ADDR24"; + case 3: return "R_PPC64_ADDR16"; + case 4: return "R_PPC64_ADDR16_LO"; + case 5: return "R_PPC64_ADDR16_HI"; + case 6: return "R_PPC64_ADDR16_HA"; + case 7: return "R_PPC64_ADDR14"; + case 8: return "R_PPC64_ADDR14_BRTAKEN"; + case 9: return "R_PPC64_ADDR14_BRNTAKEN"; *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***