Date: Sat, 7 Nov 2020 23:57:57 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r367466 - in stable/11: contrib/elftoolchain contrib/elftoolchain/addr2line contrib/elftoolchain/ar contrib/elftoolchain/common contrib/elftoolchain/cxxfilt contrib/elftoolchain/elfcopy... Message-ID: <202011072357.0A7NvvGF053619@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dim Date: Sat Nov 7 23:57:57 2020 New Revision: 367466 URL: https://svnweb.freebsd.org/changeset/base/367466 Log: Sync up elftoolchain with head, except for the capsicum-related commits, which are incompatible with stable/11. MFC r308465 (by emaste): c++filt: flush output after newline Some tools spawn c++filt and pass it a single line at a time for demangling. This is akin to r276689 for addr2line. Sponsored by: The FreeBSD Foundation MFC r317626 (by emaste): revert r308465: c++filt: flush output after newline The ELF Tool Chain update to r3520 uses setvbuf to set line buffering. Sponsored by: The FreeBSD Foundation MFC r340746 (by oshogbo): strings: fix style nits Reviewed by: cem, emaste, Joseph Koshy <jkoshy@users.sourceforge.net> Differential Revision: https://reviews.freebsd.org/D18036 MFC r340750 (by mjg): strings: unbreak the build after r340746 Discussed with: oshogbo Sponsored by: The FreeBSD Foundation MFC r342918 (by emaste): Update to ELF Tool Chain r3668 Highlights: - Make sure that only TLS sections are sorted into TLS segment. - Fixed multiple errors in "Section to Segment mapping". - Man page updates - ar improvements - elfcopy: avoid filter_reloc uninitialized variable for rela - elfcopy: avoid stripping relocations from static binaries - readelf: avoid printing directory in front of absolute path - readelf: add NT_FREEBSD_FEATURE_CTL FreeBSD note type - test improvements NOTES: Some of these changes originated in FreeBSD and simply reduce diffs between contrib and vendor. ELF Tool Chain ar is not (currently) used in FreeBSD, and there are improvements in both FreeBSD and ELF Tool Chain ar that are not in the other. Sponsored by: The FreeBSD Foundation MFC r343592 (by emaste): readelf: decode flag bits in DT_FLAGS/DT_FLAGS_1 Decode d_val when the tag is DT_FLAGS or DT_FLAGS_1 based on the information at: https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-42444.html PR: 232983 Submitted by: Bora Ozarslan borako.ozarslan@gmail.com Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D18784 MFC r343593 (by emaste): readelf: fix i386 build Use %jx and (uintmax_t) cast. PR: 232983 Sponsored by: The FreeBSD Foundation MFC r343614 (by emaste): readelf: dump elf note data Output format is compatible with GNU readelf's handling of unknown note types (modulo a GNU char signedness bug); future changes will add type- specific decoding. Reviewed by: kib Relnotes: Yes Sponsored by: The FreeBSD Foundation MFC r343665 (by emaste): readelf: use table-based DT_FLAGS and DT_FLAGS_1 decoding Fewer lines of code and more maintainable. Reviewed by: brooks, kib Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D19053 MFC r343669 (by emaste): readelf: decode FreeBSD note types Decode NT_FREEBSD_ABI_TAG, NT_FREEBSD_ARCH_TAG, and NT_FREEBSD_FEATURE_CTL. Reviewed by: brooks, kib (earlier) Relnotes: Yes Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D19054 MFC r345360 (by oshogbo): strings: do not depend on stdin Instead of depending on one stdin FILE structure and use freopen(3), pass to the functions appropriate FILE structure. Reviewed by: cem Discussed with: emaste Differential Revision: https://reviews.freebsd.org/D18037 MFC r345361 (by oshogbo): strings: do not continue if getc or getcharacter returns EOF Reported by: cem MFC r345362 (by oshogbo): Fix powerpc and arm builds after r345361. Reported by: jenkins MFC r345364 (by oshogbo): In case of ENCODING_8BIT the EOF code will be pass to putchar. EOF check should be done before (uint8_t)c > 127 test. Reported by: cem MFC r345431 (by oshogbo): strings: return an error code and the char value separately If we returning 32 bits value it's hard to distinguish if the returned value is a valid one or if its an error (in case of EOF). For that reason separate exit code of the function from the returned character. Reported by: cem, se MFC r345593 (by markj): Prepend DW_AT_comp_dir to relative line number directory table entries. Relative directories may appear in the line number program for a CPU if files were included via a relative path, for instance with "-I.". Previously, dwarf_srclines(3) and dwarf_srcfiles(3) would return the relative path, so addr2line, for instance, would do the same. However, we can get an absolute path by prepending the compilation directory, so change libdwarf to do that to improve compatibility with GNU binutils and since it is more useful in general. Reviewed by: jhb Discussed with: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D19705 MFC r345646 (by emaste): readelf: add newline after dumping dynamic FLAGS / FLAGS_1 All three dump_flags() callers need a newline after printing the flags. Sponsored by: The FreeBSD Foundation MFC r346323 (by emaste): readelf: speed up readelf -wo Use an array instead of STAILQ, and sort at the end instead of while adding new elements. PR: 212539 Submitted by: Bora ?zarslan <borako.ozarslan@gmail.com> Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC r346327 (by emaste): readelf: use size_t for object counts PR: 212539 Reported by: cem Sponsored by: The FreeBSD Foundation MFC r348347 (by jhibbits): Add missing powerpc64 relocation support to libdwarf Summary: Due to missing relocation support in libdwarf for powerpc64, handling of dwarf info on unlinked objects was bogus. Examining raw dwarf data on objects compiled on ppc64 with a modern compiler (in-tree gcc tends to hide the issue, since it only rarely generates relocations in .debug_info and uses DW_FORM_str instead of DW_FORM_strp for everything), you will find that the dwarf data appears corrupt, with repeated references to the compiler version where things like types and function names should appear. This happens because the 0 offset of .debug_str contains the compiler version, and without applying the relocations, *all* indirect strings in .dwarf_info will end up pointing to it. This corruption then propogates to the CTF data, as ctfconvert relies on libdwarf to read the dwarf info, for every compiled object (when building a kernel.) However, if you examine the dwarf data on a compiled executable, it will appear correct, because during final link the relocations get applied and baked in by the linker. Submitted by: Brandon Bergren Reviewed By: emaste Differential Revision: https://reviews.freebsd.org/D20367 MFC r348430 (by markj): elfcopy: Remove an unneeded memset. Reviewed by: emaste, trasz Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D20445 MFC r348431 (by markj): elfcopy: Optimize for insertions at the end of the section list. This is the common case when strip(1) is creating the output file. The change provides a significant speedup when running on ELF files with many sections. PR: 234949 Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D20444 MFC r348443 (by markj): readelf: Make -t imply -S, for compatibility with GNU binutils. Reported by: jhb Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D20475 MFC r348444 (by markj): libelftc: Add MLINKS. Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D20474 MFC r348652 (by markj): libelf: Use a red-black tree to manage the section list. The tree is indexed by section number. This speeds up elf_getscn() and its callers, which previously had to traverse a linked list. In particular, since .shstrtab is often the last section in a file, elf_strptr() would have to traverse the entire list. PR: 234949 Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D20443 MFC r348654 (by markj): elfcopy: Use elf_getscn() instead of iterating over all sections. When removing a section, we would loop over all sections looking for a corresponding relocation section. With r348652 it is much faster to just use elf_getscn(). PR: 234949 Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D20471 MFC r348655 (by markj): libelftc: Fix some minor style bugs. Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D20472 MFC r348657 (by markj): elfcopy: Use libelftc's string table routines to build .shstrtab. This replaces some hand-rolled routines and is substantially faster since libelftc uses a hash table for lookups and insertions, whereas elfcopy would perform a linear scan of the table. PR: 234949 Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D20473 MFC r348776 (by csjp): Teach readelf about some OpenBSD ELF program headers - Add constants for OpenBSD wxneeded, bootdata and randomize to the FreeBSD elf_common.h file. This is the file that gets used by the elftoolchain library. - Update readelf and elfdump utilities to decode these program headers if they are encountered. Note: FreeBSD has it's own version of elfdump(1), which will be updated in a subsequent commit. I am adding it here anyway because this diff is going to be submitted upstream. Discussed with: emaste Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D20548 MFC r349420 (by markj): libelftc: Micro-optimize string table insertion. The string's length is already known, so use memcpy() instead of strcpy() to add it to the string table image. Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D20760 MFC r349421 (by markj): libelftc: Consistently use size_t for string table offsets and sizes. Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D20702 MFC r349422 (by markj): libelftc: Fix the documented prototype for elftc_string_table_destroy(). Sponsored by: The FreeBSD Foundation MFC r349423 (by markj): elfcopy: Provide a size hint when creating the section string table. Use the input file's .shstrtab size as the hint if it exists. This gives a small performance improvement when processing files with many sections. Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D20544 MFC r349424 (by markj): libdwarf: Use the cached strtab pointer when reading string attributes. Previously we would perform a linear search of the DWARF section list for ".debug_str". However, libdwarf always caches a pointer to the strtab image in its debug descriptor. Using it gives a modest performance improvement when iterating over the attributes of each DIE. Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D20759 MFC r349481 (by mhorne): Add some missing RISC-V ELF defines This adds defines for the RISC-V specific e_flags values, and some of the missing static relocations. Reviewed by: markj Approved by: markj (mentor) Differential Revision: https://reviews.freebsd.org/D20766 MFC r349482 (by mhorne): readelf: Add support for RISC-V specific e_flags Reviewed by: markj Approved by: markj (mentor) Differential Revision: https://reviews.freebsd.org/D20767 MFC r349483 (by mhorne): libelftc: add RISC-V bfd targets This adds the following targets: elf32-riscv, elf64-riscv, elf64-riscv-freebsd Reviewed by: emaste, markj, jkoshy@users.sourceforge.net Approved by: markj (mentor) Differential Revision: https://reviews.freebsd.org/D20768 MFC r349510 (by luporl): [PowerPC64] readelf: print description for 'e_flags' in ELF header (ABI type) This prints out description text with the meaning of 'Flags' value in PowerPC64. Example: $ readelf -h ~/tmp/t1-Flag2 ELF Header: Magic: 7f 45 4c 46 02 02 01 09 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, big endian Version: 1 (current) OS/ABI: FreeBSD ABI Version: 0 Type: EXEC (Executable file) Machine: PowerPC 64-bit Version: 0x1 Entry point address: 0x10010000 Start of program headers: 64 (bytes into file) Start of section headers: 209368 (bytes into file) Flags: 0x2, OpenPOWER ELF V2 ABI Size of this header: 64 (bytes) Size of program headers: 56 (bytes) Number of program headers: 10 Size of section headers: 64 (bytes) Number of section headers: 34 Section header string table index: 31 Submitted by: alfredo.junior_eldorado.org.br Reviewed by: luporl Differential Revision: https://reviews.freebsd.org/D20782 MFC r349562 (by mhorne): elftoolchain: fix an incorrect e_flags description r349482 introduced the definitions and descriptions of the RISC-V specific e_flags values to elftoolchain. However, the description for the EF_RISCV_RVE flag was incorrectly duplicated from EF_RISCV_RVC. Fix this by providing the proper description for this flag. Reported by: jhb Approved by: markj (mentor) MFC r349563 (by mhorne): readelf: Add RISC-V DWARF register aliases This allows DWARF debugging output to use the common register mneumonics, such as ra, sp, or t0. DWARF registers 0-31 are mapped to the 32 general purpose registers, which are then followed by the 32 floating point registers. Reviewed by: markj Approved by: markj (mentor) Differential Revision: https://reviews.freebsd.org/D20779 MFC r349577 (by arichardson): Allow bootstrapping elftoolchain on MacOS and Linux This is required in order to build on non-FreeBSD systems without setting all the XAR/XSTRINGS/etc. variables Reviewed By: emaste Differential Revision: https://reviews.freebsd.org/D16771 MFC r349730 (by markj): elfcopy: Clear errors after fetching the shstrtab index. Otherwise a future call to elf_errno() will return a non-zero value. update_shdr(), for example, treats any errors associated with the ELF descriptor as fatal. Clear the error per the first example in elf_errmsg.3. Convert to elf_getshdrstrndx() while here since elf_getshstrndx() is apparently deprecated. Reported by: royger Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D20852 MFC r350432 (by markj): Merge r3778 and r3779 from ELFToolchain. Modify strip(1) to not accept multiple input files when an output file is specified. There is no good way to handle this combination, and the change is compatible with binutils. Sponsored by: The FreeBSD Foundation MFC r350511 (by emaste): readelf: decode NT_GNU_PROPERTY_TYPE_0 / GNU_PROPERTY_X86_FEATURE_1_AND These bits are used for Intel CET IBT/Shadow Stack. Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D20516 MFC r350679 (by markj): Merge r3780 from elftoolchain. Adjust argc and argv by optind before using them. This slightly simplifies the code. No functional change intended. Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D21079 MFC r352875 (by ray): ections into expected offset in binary format. Calculate binary file offset using address field, bacause software know only offset to known data, not where to load segment. With that patch, kernel .data section can have any alignment/offset - kernel boor fine. PR: 235391 Reviewed by: markj Differential Revision: D21827 MFC r352878 (by ray): Initialize baseaddr to suppres warning. Pointy hat to: ray MFC r352908 (by markj): nm: Adjust argc and argv in get_opt(). This refactoring makes it slightly easier to capsicumize nm(1). Discussed with: emaste Sponsored by: The FreeBSD Foundation MFC r354544 (by emaste): elfcopy/strip: Ensure sections have required alignment on output Object files may specify insufficient alignment on certain sections, for example due to a bug in NASM[1]. When we detect that case in elfcopy or strip, emit a warning and increase the alignment to the minimum required. The NASM bug was fixed in 2015[2], but we might as well have this fixup (and warning) in elfcopy in case we encounter such a file for any other reason. This might be reworked somewhat upstream - see ELF Tool Chain ticket 485[3]. [1] https://bugzilla.nasm.us/show_bug.cgi?id=3392307 [2] https://repo.or.cz/w/nasm.git/commit/1f0cb0f2c1ba632c0fab02424928cfb756a9160c [3] https://sourceforge.net/p/elftoolchain/tickets/485/ PR: 198611 Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D2292 MFC r354842 (by jhibbits): ELF toolchain: Add PowerPC VMX and VSX note decode to readelf Summary: A follow-on to r276634, which added the VMX note to userland cores, and r334538 for VSX notes. Copied from note_type_linux_core(). Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D22404 MFC r355413 (by emaste): Update ELF Tool Chain to upstream r3769 This contains many small bugfixes and documentation improvements. Sponsored by: The FreeBSD Foundation MFC r357450 (by markj): addr2line: Cache CU DIEs upon a successful address lookup. Previously, addr2line would sequentially search all CUs for each input address. For some uses, notably syzkaller's code coverage map generator, this was extremely slow. Add a CU cache into which entries are added following a successful lookup, and search the cache before falling back to a scan. When translating a large number of addresses this yields slightly better performance than GNU addr2line. Garbage-collect an unused hash table which appears to have been intended for the same purpose. A hash table doesn't seem particularly suitable since each CU spans a range of addresses. Submitted by: Tiger Gao <tig@freebsdfoundation.org> Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D23418 MFC r357462 (by markj): addr2line: Avoid a name collision. The RB_ macros define functions with a parameter named head, and gcc warns about this. MFC r357531 (by markj): libdwarf: Remove unnecessary NULL checks. All callers of _dwarf_add_expr() and _dwarf_expr_into_block() pass a non-NULL expr pointer, and these functions assume that expr is non-NULL anyway. CID: 1193305, 1193306 Sponsored by: The FreeBSD Foundation MFC r357532 (by markj): libdwarf: Fix a possible memory leak in dwarf_add_AT_location_expr(). CID: 1193364 Sponsored by: The FreeBSD Foundation MFC r357533 (by markj): libdwarf: Make an out-pointer of _dwarf_abbrev_add() mandatory. All callers pass a non-NULL pointer, and otherwise it was possible to leak memory if the abbrev was not added to a CU. CID: 1193365 Sponsored by: The FreeBSD Foundation MFC r357534 (by markj): libdwarf: Fix a memory leak in _dwarf_frame_section_init(). If frame length validation failed we would leak memory. CID: 1193366 Sponsored by: The FreeBSD Foundation MFC r357535 (by markj): libelftc: Fix memory leaks in the C++ demanglers. CID: 1262518, 1262519, 1262520, 1262529 Sponsored by: The FreeBSD Foundation MFC r357536 (by markj): libelftc: Add a missing check for an error from vector_str_init(). While here consistently use the same spelling for such checks. CID: 1376769 Sponsored by: The FreeBSD Foundation MFC r357537 (by markj): elfcopy: Handle multiple data descriptors properly. The code clearly meant to resize the buffer in the case where a section was backed by multiple data descriptors. In practice this shouldn't have been a problem since libelf would return a single data descriptor for each section in a newly opened file. CID: 1262522 Sponsored by: The FreeBSD Foundation MFC r357538 (by markj): elfcopy: Avoid leaking dst's fd when we fail to copy a file. We should really create the output file in the same directory as the destination file so that rename() works. This will be done in a future change as part of some work to run in capability mode. CID: 1262523 Sponsored by: The FreeBSD Foundation MFC r357539 (by markj): size: Avoid returning a stack pointer from xlatetom(). The callers only check whether the returned pointer is non-NULL, so this was harmless in practice, but change the return value to guard against the issue. CID: 1411597 Sponsored by: The FreeBSD Foundation MFC r357540 (by markj): readelf: Fix a double close of the input file. The caller of dump_object() is responsible for opening the file, let it be responsible for closing too. CID: 1411588 Sponsored by: The FreeBSD Foundation MFC r357541 (by markj): readelf: Fix the check for an error from realloc(). Use err() instead of errx() while here, since realloc() sets errno. CID: 1401326 Sponsored by: The FreeBSD Foundation MFC r357542 (by markj): readelf: Don't leak memory when dwarf_get_fde_info_for_all_regs() fails. CID: 1292493 Sponsored by: The FreeBSD Foundation MFC r357826 (by emaste): elfcopy: set ELF OS/ABI field when converting from binary PR: 228934 Submitted by: Tiger Gao <tig@freebsdfoundation.org> Reviewed by: markj, jkoshy Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D23504 MFC r357844 (by emaste): addr2line: Handle DW_AT_ranges in compile units Based on original submission by Marat Radchenko in ELF Tool Chain ticket #545, rebased and updated by Tiger Gao. PR: 217736 Submitted by: Marat Radchenko <marat@slonopotamus.org> Submitted by: Tiger Gao <tig@freebsdfoundation.org> Reviewed by: markj Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D23501 MFC r357862 (by emaste): addr2line: use stdbool.h header for bool Presumably a bool definition is obtained via header contamination on FreeBSD-CURRENT. Found while trying to upstream FreeBSD addr2line changes - the FreeBSD 11.2 CI build failed there. Reported by: Cirrus-CI, upstream ELF Tool Chain Sponsored by: The FreeBSD Foundation MFC r358499 (by emaste): readelf: add PROTMAX_DISABLE and STKGAP_DISABLE From r349609 (PROTMAX_DISABLE) and r354790 (STKGAP_DISABLE). Commited upstream (in a slightly different form) as r3831. Sponsored by: The FreeBSD Foundation MFC r358631 (by emaste): Reserve WXNEEDED ELF feature control flag This will be used to tag binaries that require W+X mappings, in advance of the ability to prevent W^X in mmap/mprotect. There is still some discussion about the flag's name, but the ABI won't change even if the name does (as kib pointed out in the review). Reviewed by: csjp, kib Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D23909 MFC r358637 (by emaste): readelf: check note namesz and descsz Previously corrupt note namesz or descsz (perhaps caused by readelf's current lack of endian support for notes) resulted in a crash. Check that namesz and descsz do not extend beyond the end of the buffer before trying to access name and desc data. Reported by: jhb Sponsored by: The FreeBSD Foundation MFC r358639 (by emaste): readelf: simplify namesz / descsz checks Sponsored by: The FreeBSD Foundation MFC r358685 (by emaste): libelf: rationalize error handling in ELF note conversion Previously _libelf_cvt_NOTE_tom (to host) returned false if a note's namesz + descsz exceeded the buffer size, while _libelf_cvt_NOTE_tof (to file) silently truncated. Return false in the latter case too. Sponsored by: The FreeBSD Foundation MFC r358706 (by emaste): readelf: add XEN_ELFNOTE_PHYS32_ENTRY note See r336469 for details. Sponsored by: The FreeBSD Foundation MFC r358708 (by emaste): readelf: decode and print Xen ELF note strings Sponsored by: The FreeBSD Foundation MFC r358713 (by emaste): readelf: print GNU Build-ID Sponsored by: The FreeBSD Foundation MFC r358778 (by emaste): readelf: hoist file opening out of dump_object Diff reduction with HEAD to facilitate other MFCs. MFC r359166 (by emaste): objcopy: add new sections also when there is no .shstrtab Previously objcopy (elfcopy) --add-sections inserted new sections before .shstrtab, but omitted them if there was no .shstrtab. Now, after processing existing sections add new sections if they were not yet added. PR: 241437 Reported by: arrowd Submitted by: Tiger Gao <tig@FreeBSDFoundation.org> Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D23571 MFC r359172 (by markj): libdwarf: Make an out-pointer assignment unconditional. There is no reason for diep to ever be NULL, since in that case we would simply be leaking memory. CID: 1418801 Sponsored by: The FreeBSD Foundation MFC r359173 (by markj): libpe: Avoid a potential use-after-free in pe_update_symtab(). This function appears to be unused within FreeBSD and ELFToolChain. CID: 1418982 Sponsored by: The FreeBSD Foundation MFC r359174 (by markj): readelf: Avoid leaking ELF descriptors for archive entries. CID: 1292494 Sponsored by: The FreeBSD Foundation MFC r359175 (by markj): readelf: Fix another instance of the leak mentioned in r357542. CID: 1292493 Sponsored by: The FreeBSD Foundation MFC r359176 (by markj): libelftc: Fix a memory leak in cpp_demangle_read_type(). CID: 1305425 Sponsored by: The FreeBSD Foundation MFC r359189 (by emaste): readelf: simplify Xen string note printing Reviewed by: markj Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D24140 MFC r361104 (by jhibbits): elftoolchain: Add powerpc64 definition to elftoolchain config powerpc is already in place, but powerpc64 is needed separately. MFC r361662 (by emaste): readelf: add more DT_FLAGS_1 flags Reference: https://docs.oracle.com/cd/E36784_01/html/E36857/chapter6-42444.html > DF_1_SINGLETON Singleton symbols exist. > DF_1_STUB Object is a stub. > DF_1_PIE Object is a position-independent executable. Sponsored by: The FreeBSD Foundation MFC r365489 (by bdragon): [PowerPC64LE] PPC64LE support for libelf. Fix native detection when building on powerpc64le. I will be submitting this and r361104 upstream shortly. Sponsored by: Tag1 Consulting, Inc. MFC r366977 (by emaste): libelf: add compression header support GNU and Oracle libelf implementations added support for section compression, intended to reduce the size of DWARF debug info (which might be an order of magnitude larger than the code). There are two compressed ELF section formats: 1. Old GNU - sections are renmaed to start with 'z'. Section contains a magic number, uncompressed size, and compressed data. 2. Oracle and New GNU - compressed sections use the SHF_COMPRESSED flag. The compression header contains the compression type, uncompressed size, and uncompressed alignment. The second style is preferred and this change implements only that one. Submitted by: Tiger Gao <tig@FreeBSDFoundation.org> Reviewed by: markj Relnotes: Yes Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D24566 MFC r367209 (by emaste): readelf: Add -z decompression support Compatible with GNU readelf, -z decompresses sections displayed by -x or -p. ELF Tool Chain ticket #555 https://sourceforge.net/p/elftoolchain/tickets/555/ Submitted by: Tiger Gao <tig@FreeBSDFoundation.org> Reviewed by: markj Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D26909 MFC r367238 (by bdragon): Fix 32-bit build after r367209 Fix build on systems with a 32-bit size_t. Since it's being passed as a pointer, a 64-bit write to it will overflow. MFC r367322 (by dim): Merge elftoolchain r3877 (by jkoshy): Incorporate fixes from Dimitry Andric: - Use a BUFFER_GROW() macro to avoid rounding errors in capacity calculations. - Fix a bug introduced in [r3531]. - Fix handling of nested template parameters. Ticket: #581 This should fix a number of assertions on elftoolchain's cxxfilt, and allow it to correctly demangle several names that it could not handle before. Obtained from: https://sourceforge.net/p/elftoolchain/code/3877/ PR: 250702 Added: stable/11/contrib/elftoolchain/.cirrus.yml - copied unchanged from r355413, head/contrib/elftoolchain/.cirrus.yml stable/11/contrib/elftoolchain/README.rst - copied, changed from r342918, head/contrib/elftoolchain/README.rst stable/11/contrib/elftoolchain/libelf/gelf_chdr.c - copied unchanged from r366977, head/contrib/elftoolchain/libelf/gelf_chdr.c stable/11/contrib/elftoolchain/libelf/gelf_getchdr.3 - copied unchanged from r366977, head/contrib/elftoolchain/libelf/gelf_getchdr.3 stable/11/contrib/elftoolchain/libelf/libelf_chdr.c - copied unchanged from r366977, head/contrib/elftoolchain/libelf/libelf_chdr.c stable/11/contrib/elftoolchain/libelf/libelf_elfmachine.c - copied unchanged from r342918, head/contrib/elftoolchain/libelf/libelf_elfmachine.c stable/11/contrib/elftoolchain/libelf/os.Linux.mk - copied unchanged from r355413, head/contrib/elftoolchain/libelf/os.Linux.mk Modified: stable/11/contrib/elftoolchain/addr2line/addr2line.1 stable/11/contrib/elftoolchain/addr2line/addr2line.c stable/11/contrib/elftoolchain/ar/ar.1 stable/11/contrib/elftoolchain/ar/ar.5 stable/11/contrib/elftoolchain/ar/ar.c stable/11/contrib/elftoolchain/ar/ar.h stable/11/contrib/elftoolchain/ar/ranlib.1 stable/11/contrib/elftoolchain/ar/read.c stable/11/contrib/elftoolchain/ar/write.c stable/11/contrib/elftoolchain/common/_elftc.h stable/11/contrib/elftoolchain/common/elfdefinitions.h stable/11/contrib/elftoolchain/common/native-elf-format stable/11/contrib/elftoolchain/cxxfilt/c++filt.1 stable/11/contrib/elftoolchain/elfcopy/ascii.c stable/11/contrib/elftoolchain/elfcopy/binary.c stable/11/contrib/elftoolchain/elfcopy/elfcopy.1 stable/11/contrib/elftoolchain/elfcopy/elfcopy.h stable/11/contrib/elftoolchain/elfcopy/main.c stable/11/contrib/elftoolchain/elfcopy/mcs.1 stable/11/contrib/elftoolchain/elfcopy/sections.c stable/11/contrib/elftoolchain/elfcopy/segments.c stable/11/contrib/elftoolchain/elfcopy/strip.1 stable/11/contrib/elftoolchain/elfdump/elfdump.c stable/11/contrib/elftoolchain/libdwarf/dwarf.3 stable/11/contrib/elftoolchain/libdwarf/dwarf.h stable/11/contrib/elftoolchain/libdwarf/dwarf_add_AT_comp_dir.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_AT_const_value_string.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_AT_dataref.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_AT_flag.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_AT_location_expr.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_AT_name.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_AT_producer.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_AT_ref_address.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_AT_reference.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_AT_signed_const.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_AT_string.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_AT_targ_address.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_arange.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_die_to_debug.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_directory_decl.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_expr_addr.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_expr_gen.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_fde_inst.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_file_decl.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_frame_cie.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_frame_fde.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_funcname.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_line_entry.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_pubname.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_typename.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_varname.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_add_weakname.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_attr.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_attrlist.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_attroffset.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_attrval_signed.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_child.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_dealloc.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_def_macro.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_die_abbrev_code.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_die_link.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_diename.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_dieoffset.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_dump.c stable/11/contrib/elftoolchain/libdwarf/dwarf_end_macro_file.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_errmsg.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_errno.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_expand_frame_instructions.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_expr_current_offset.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_expr_into_block.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_fde_cfa_offset.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_find_macro_value_start.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_finish.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_formaddr.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_formblock.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_formexprloc.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_formflag.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_formref.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_formsig8.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_formstring.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_formudata.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_AT_name.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_abbrev.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_abbrev_children_flag.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_abbrev_code.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_abbrev_entry.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_abbrev_tag.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_address_size.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_arange.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_arange_info.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_aranges.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_cie_index.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_cie_info.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_cie_of_fde.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_cu_die_offset.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_die_infotypes_flag.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_elf.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_fde_at_pc.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_fde_info_for_all_regs.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_fde_info_for_all_regs3.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_fde_info_for_cfa_reg3.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_fde_info_for_reg.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_fde_info_for_reg3.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_fde_instr_bytes.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_fde_list.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_fde_n.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_fde_range.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_form_class.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_funcs.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_globals.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_loclist_entry.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_macro_details.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_pubtypes.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_ranges.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_relocation_info.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_relocation_info_count.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_section_bytes.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_section_max_offsets.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_str.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_types.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_vars.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_get_weaks.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_hasattr.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_hasform.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_highpc.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_init.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_lineno.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_lne_end_sequence.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_lne_set_address.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_loclist.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_loclist_from_expr.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_new_die.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_new_expr.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_new_fde.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_next_cu_header.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_next_types_section.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_object_init.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_pro_attr.c stable/11/contrib/elftoolchain/libdwarf/dwarf_pro_expr.c stable/11/contrib/elftoolchain/libdwarf/dwarf_producer_init.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_producer_set_isa.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_reset_section_bytes.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_set_frame_cfa_value.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_set_reloc_application.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_seterrarg.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_srcfiles.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_srclines.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_start_macro_file.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_tag.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_transform_to_disk_form.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_undef_macro.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_vendor_ext.3 stable/11/contrib/elftoolchain/libdwarf/dwarf_whatattr.3 stable/11/contrib/elftoolchain/libdwarf/libdwarf_abbrev.c stable/11/contrib/elftoolchain/libdwarf/libdwarf_attr.c stable/11/contrib/elftoolchain/libdwarf/libdwarf_die.c stable/11/contrib/elftoolchain/libdwarf/libdwarf_frame.c stable/11/contrib/elftoolchain/libdwarf/libdwarf_lineno.c stable/11/contrib/elftoolchain/libdwarf/libdwarf_reloc.c stable/11/contrib/elftoolchain/libelf/Makefile stable/11/contrib/elftoolchain/libelf/Version.map stable/11/contrib/elftoolchain/libelf/_libelf.h stable/11/contrib/elftoolchain/libelf/_libelf_config.h stable/11/contrib/elftoolchain/libelf/elf.3 stable/11/contrib/elftoolchain/libelf/elf_begin.3 stable/11/contrib/elftoolchain/libelf/elf_cntl.3 stable/11/contrib/elftoolchain/libelf/elf_data.c stable/11/contrib/elftoolchain/libelf/elf_end.3 stable/11/contrib/elftoolchain/libelf/elf_end.c stable/11/contrib/elftoolchain/libelf/elf_errmsg.3 stable/11/contrib/elftoolchain/libelf/elf_fill.3 stable/11/contrib/elftoolchain/libelf/elf_flagdata.3 stable/11/contrib/elftoolchain/libelf/elf_getarhdr.3 stable/11/contrib/elftoolchain/libelf/elf_getarsym.3 stable/11/contrib/elftoolchain/libelf/elf_getbase.3 stable/11/contrib/elftoolchain/libelf/elf_getdata.3 stable/11/contrib/elftoolchain/libelf/elf_getident.3 stable/11/contrib/elftoolchain/libelf/elf_getident.c stable/11/contrib/elftoolchain/libelf/elf_getphdrnum.3 stable/11/contrib/elftoolchain/libelf/elf_getphnum.3 stable/11/contrib/elftoolchain/libelf/elf_getscn.3 stable/11/contrib/elftoolchain/libelf/elf_getshdrnum.3 stable/11/contrib/elftoolchain/libelf/elf_getshdrstrndx.3 stable/11/contrib/elftoolchain/libelf/elf_getshnum.3 stable/11/contrib/elftoolchain/libelf/elf_getshstrndx.3 stable/11/contrib/elftoolchain/libelf/elf_hash.3 stable/11/contrib/elftoolchain/libelf/elf_kind.3 stable/11/contrib/elftoolchain/libelf/elf_memory.3 stable/11/contrib/elftoolchain/libelf/elf_next.3 stable/11/contrib/elftoolchain/libelf/elf_next.c stable/11/contrib/elftoolchain/libelf/elf_open.3 stable/11/contrib/elftoolchain/libelf/elf_rand.3 stable/11/contrib/elftoolchain/libelf/elf_rand.c stable/11/contrib/elftoolchain/libelf/elf_rawfile.3 stable/11/contrib/elftoolchain/libelf/elf_rawfile.c stable/11/contrib/elftoolchain/libelf/elf_scn.c stable/11/contrib/elftoolchain/libelf/elf_strptr.3 stable/11/contrib/elftoolchain/libelf/elf_update.3 stable/11/contrib/elftoolchain/libelf/elf_update.c stable/11/contrib/elftoolchain/libelf/elf_version.3 stable/11/contrib/elftoolchain/libelf/gelf.3 stable/11/contrib/elftoolchain/libelf/gelf.h stable/11/contrib/elftoolchain/libelf/gelf_cap.c stable/11/contrib/elftoolchain/libelf/gelf_checksum.3 stable/11/contrib/elftoolchain/libelf/gelf_dyn.c stable/11/contrib/elftoolchain/libelf/gelf_fsize.3 stable/11/contrib/elftoolchain/libelf/gelf_getcap.3 stable/11/contrib/elftoolchain/libelf/gelf_getclass.3 stable/11/contrib/elftoolchain/libelf/gelf_getdyn.3 stable/11/contrib/elftoolchain/libelf/gelf_getehdr.3 stable/11/contrib/elftoolchain/libelf/gelf_getmove.3 stable/11/contrib/elftoolchain/libelf/gelf_getphdr.3 stable/11/contrib/elftoolchain/libelf/gelf_getrel.3 stable/11/contrib/elftoolchain/libelf/gelf_getrela.3 stable/11/contrib/elftoolchain/libelf/gelf_getshdr.3 stable/11/contrib/elftoolchain/libelf/gelf_getsym.3 stable/11/contrib/elftoolchain/libelf/gelf_getsyminfo.3 stable/11/contrib/elftoolchain/libelf/gelf_getsymshndx.3 stable/11/contrib/elftoolchain/libelf/gelf_move.c stable/11/contrib/elftoolchain/libelf/gelf_newehdr.3 stable/11/contrib/elftoolchain/libelf/gelf_newphdr.3 stable/11/contrib/elftoolchain/libelf/gelf_rel.c stable/11/contrib/elftoolchain/libelf/gelf_rela.c stable/11/contrib/elftoolchain/libelf/gelf_sym.c stable/11/contrib/elftoolchain/libelf/gelf_syminfo.c stable/11/contrib/elftoolchain/libelf/gelf_symshndx.c stable/11/contrib/elftoolchain/libelf/gelf_update_ehdr.3 stable/11/contrib/elftoolchain/libelf/gelf_xlate.c stable/11/contrib/elftoolchain/libelf/gelf_xlatetof.3 stable/11/contrib/elftoolchain/libelf/libelf.h stable/11/contrib/elftoolchain/libelf/libelf_allocate.c stable/11/contrib/elftoolchain/libelf/libelf_ar.c stable/11/contrib/elftoolchain/libelf/libelf_convert.m4 stable/11/contrib/elftoolchain/libelf/libelf_data.c stable/11/contrib/elftoolchain/libelf/libelf_ehdr.c stable/11/contrib/elftoolchain/libelf/libelf_extended.c stable/11/contrib/elftoolchain/libelf/libelf_memory.c stable/11/contrib/elftoolchain/libelf/libelf_msize.m4 stable/11/contrib/elftoolchain/libelf/libelf_phdr.c stable/11/contrib/elftoolchain/libelf/libelf_xlate.c stable/11/contrib/elftoolchain/libelftc/_libelftc.h stable/11/contrib/elftoolchain/libelftc/elftc.3 stable/11/contrib/elftoolchain/libelftc/elftc_bfd_find_target.3 stable/11/contrib/elftoolchain/libelftc/elftc_bfdtarget.c stable/11/contrib/elftoolchain/libelftc/elftc_copyfile.3 stable/11/contrib/elftoolchain/libelftc/elftc_demangle.3 stable/11/contrib/elftoolchain/libelftc/elftc_reloc_type_str.3 stable/11/contrib/elftoolchain/libelftc/elftc_set_timestamps.3 stable/11/contrib/elftoolchain/libelftc/elftc_set_timestamps.c stable/11/contrib/elftoolchain/libelftc/elftc_string_table.c stable/11/contrib/elftoolchain/libelftc/elftc_string_table_create.3 stable/11/contrib/elftoolchain/libelftc/elftc_timestamp.3 stable/11/contrib/elftoolchain/libelftc/elftc_version.3 stable/11/contrib/elftoolchain/libelftc/libelftc.h stable/11/contrib/elftoolchain/libelftc/libelftc_bfdtarget.c stable/11/contrib/elftoolchain/libelftc/libelftc_dem_arm.c stable/11/contrib/elftoolchain/libelftc/libelftc_dem_gnu2.c stable/11/contrib/elftoolchain/libelftc/libelftc_dem_gnu3.c stable/11/contrib/elftoolchain/libelftc/libelftc_vstr.c stable/11/contrib/elftoolchain/libelftc/make-toolchain-version stable/11/contrib/elftoolchain/libpe/pe_symtab.c stable/11/contrib/elftoolchain/nm/nm.1 stable/11/contrib/elftoolchain/nm/nm.c stable/11/contrib/elftoolchain/readelf/readelf.1 stable/11/contrib/elftoolchain/readelf/readelf.c stable/11/contrib/elftoolchain/size/size.c stable/11/contrib/elftoolchain/strings/strings.c stable/11/lib/libelf/Makefile stable/11/lib/libelftc/Makefile stable/11/lib/libelftc/elftc_version.c stable/11/sys/sys/elf_common.h stable/11/usr.bin/readelf/Makefile Directory Properties: stable/11/ (props changed) Copied: stable/11/contrib/elftoolchain/.cirrus.yml (from r355413, head/contrib/elftoolchain/.cirrus.yml) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/11/contrib/elftoolchain/.cirrus.yml Sat Nov 7 23:57:57 2020 (r367466, 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 Copied and modified: stable/11/contrib/elftoolchain/README.rst (from r342918, head/contrib/elftoolchain/README.rst) ============================================================================== --- head/contrib/elftoolchain/README.rst Thu Jan 10 14:35:23 2019 (r342918, copy source) +++ stable/11/contrib/elftoolchain/README.rst Sat Nov 7 23:57:57 2020 (r367466) @@ -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/11/contrib/elftoolchain/addr2line/addr2line.1 ============================================================================== --- stable/11/contrib/elftoolchain/addr2line/addr2line.1 Sat Nov 7 21:46:27 2020 (r367465) +++ stable/11/contrib/elftoolchain/addr2line/addr2line.1 Sat Nov 7 23:57:57 2020 (r367466) @@ -22,11 +22,11 @@ .\" (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: addr2line.1 3263 2015-11-30 04:25:54Z kaiwang27 $ +.\" $Id: addr2line.1 3642 2018-10-14 14:24:28Z jkoshy $ .\" .Dd November 30, 2015 -.Os .Dt ADDR2LINE 1 +.Os .Sh NAME .Nm addr2line .Nd translate program addresses to source file names and line numbers Modified: stable/11/contrib/elftoolchain/addr2line/addr2line.c ============================================================================== --- stable/11/contrib/elftoolchain/addr2line/addr2line.c Sat Nov 7 21:46:27 2020 (r367465) +++ stable/11/contrib/elftoolchain/addr2line/addr2line.c Sat Nov 7 23:57:57 2020 (r367466) @@ -25,6 +25,8 @@ */ #include <sys/param.h> +#include <sys/tree.h> + #include <dwarf.h> #include <err.h> #include <fcntl.h> @@ -33,11 +35,11 @@ #include <libdwarf.h> #include <libelftc.h> #include <libgen.h> +#include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> -#include "uthash.h" #include "_elftc.h" ELFTC_VCSID("$Id: addr2line.c 3499 2016-11-25 16:06:29Z emaste $"); @@ -55,13 +57,15 @@ struct Func { }; struct CU { + RB_ENTRY(CU) entry; Dwarf_Off off; Dwarf_Unsigned lopc; Dwarf_Unsigned hipc; char **srcfiles; Dwarf_Signed nsrcfiles; STAILQ_HEAD(, Func) funclist; - UT_hash_handle hh; + Dwarf_Die die; + Dwarf_Debug dbg; }; static struct option longopts[] = { @@ -78,11 +82,23 @@ static struct option longopts[] = { {"version", no_argument, NULL, 'V'}, {NULL, 0, NULL, 0} }; + static int demangle, func, base, inlines, print_addr, pretty_print; static char unknown[] = { '?', '?', '\0' }; static Dwarf_Addr section_base; -static struct CU *culist; +/* Need a new curlopc that stores last lopc value. */ +static Dwarf_Unsigned curlopc = ~0ULL; +static RB_HEAD(cutree, CU) cuhead = RB_INITIALIZER(&cuhead); +static int +lopccmp(struct CU *e1, struct CU *e2) +{ + return (e1->lopc < e2->lopc ? -1 : e1->lopc > e2->lopc); +} + +RB_PROTOTYPE(cutree, CU, entry, lopccmp); +RB_GENERATE(cutree, CU, entry, lopccmp) + #define USAGE_MESSAGE "\ Usage: %s [options] hexaddress...\n\ Map program addresses to source file names and line numbers.\n\n\ @@ -330,7 +346,8 @@ cont_search: collect_func(dbg, ret_die, parent, cu); /* Cleanup */ - dwarf_dealloc(dbg, die, DW_DLA_DIE); + if (die != cu->die) + dwarf_dealloc(dbg, die, DW_DLA_DIE); if (abst_die != NULL) dwarf_dealloc(dbg, abst_die, DW_DLA_DIE); @@ -376,6 +393,122 @@ print_inlines(struct CU *cu, struct Func *f, Dwarf_Uns f->call_line); } +static struct CU * +culookup(Dwarf_Unsigned addr) +{ + struct CU find, *res; + + find.lopc = addr; + res = RB_NFIND(cutree, &cuhead, &find); + if (res != NULL) { + if (res->lopc != addr) + res = RB_PREV(cutree, &cuhead, res); + if (res != NULL && addr >= res->lopc && addr < res->hipc) + return (res); + } else { + res = RB_MAX(cutree, &cuhead); + if (res != NULL && addr >= res->lopc && addr < res->hipc) + return (res); + } + return (NULL); +} + +/* + * Check whether addr falls into range(s) of current CU, and save current CU + * to lookup tree if so. + */ +static int +check_range(Dwarf_Debug dbg, Dwarf_Die die, Dwarf_Unsigned addr, + struct CU **cu) +{ + Dwarf_Error de; + Dwarf_Unsigned addr_base, lopc, hipc; + Dwarf_Off ranges_off; + Dwarf_Signed ranges_cnt; + Dwarf_Ranges *ranges; + int i, ret; + bool in_range; + + addr_base = 0; + ranges = NULL; + ranges_cnt = 0; + in_range = false; + + ret = dwarf_attrval_unsigned(die, DW_AT_ranges, &ranges_off, &de); + if (ret == DW_DLV_NO_ENTRY) { + if (dwarf_attrval_unsigned(die, DW_AT_low_pc, &lopc, &de) == + DW_DLV_OK) { + if (lopc == curlopc) + return (DW_DLV_ERROR); + if (dwarf_attrval_unsigned(die, DW_AT_high_pc, &hipc, + &de) == DW_DLV_OK) { + /* + * Check if the address falls into the PC + * range of this CU. + */ + if (handle_high_pc(die, lopc, &hipc) != + DW_DLV_OK) + return (DW_DLV_ERROR); + } else { + /* Assume ~0ULL if DW_AT_high_pc not present */ + hipc = ~0ULL; + } + + if (addr >= lopc && addr < hipc) { + in_range = true; + } + } + } else if (ret == DW_DLV_OK) { + ret = dwarf_get_ranges(dbg, ranges_off, &ranges, + &ranges_cnt, NULL, &de); + if (ret != DW_DLV_OK) + return (ret); + + if (!ranges || ranges_cnt <= 0) + return (DW_DLV_ERROR); + + for (i = 0; i < ranges_cnt; i++) { + if (ranges[i].dwr_type == DW_RANGES_END) + return (DW_DLV_NO_ENTRY); + + if (ranges[i].dwr_type == + DW_RANGES_ADDRESS_SELECTION) { + addr_base = ranges[i].dwr_addr2; + continue; + } + + /* DW_RANGES_ENTRY */ + lopc = ranges[i].dwr_addr1 + addr_base; + hipc = ranges[i].dwr_addr2 + addr_base; + + if (lopc == curlopc) + return (DW_DLV_ERROR); + + if (addr >= lopc && addr < hipc){ + in_range = true; + break; + } + } + } else { + return (DW_DLV_ERROR); + } + + if (in_range) { + if ((*cu = calloc(1, sizeof(struct CU))) == NULL) + err(EXIT_FAILURE, "calloc"); + (*cu)->lopc = lopc; + (*cu)->hipc = hipc; + (*cu)->die = die; + (*cu)->dbg = dbg; + STAILQ_INIT(&(*cu)->funclist); + RB_INSERT(cutree, &cuhead, *cu); + curlopc = lopc; + return (DW_DLV_OK); + } else { + return (DW_DLV_NO_ENTRY); + } +} + static void translate(Dwarf_Debug dbg, Elf *e, const char* addrstr) { @@ -383,10 +516,9 @@ translate(Dwarf_Debug dbg, Elf *e, const char* addrstr Dwarf_Line *lbuf; Dwarf_Error de; Dwarf_Half tag; - Dwarf_Unsigned lopc, hipc, addr, lineno, plineno; + Dwarf_Unsigned addr, lineno, plineno; Dwarf_Signed lcount; Dwarf_Addr lineaddr, plineaddr; - Dwarf_Off off; struct CU *cu; struct Func *f; const char *funcname; @@ -398,11 +530,31 @@ translate(Dwarf_Debug dbg, Elf *e, const char* addrstr addr += section_base; lineno = 0; file = unknown; - cu = NULL; die = NULL; + ret = DW_DLV_OK; - while ((ret = dwarf_next_cu_header(dbg, NULL, NULL, NULL, NULL, NULL, - &de)) == DW_DLV_OK) { + cu = culookup(addr); + if (cu != NULL) { + die = cu->die; + dbg = cu->dbg; + goto status_ok; + } + + while (true) { + /* + * We resume the CU scan from the last place we found a match. + * Because when we have 2 sequential addresses, and the second + * one is of the next CU, it is faster to just go to the next CU + * instead of starting from the beginning. + */ + ret = dwarf_next_cu_header(dbg, NULL, NULL, NULL, NULL, NULL, + &de); + if (ret == DW_DLV_NO_ENTRY) { + if (curlopc == ~0ULL) + goto out; + ret = dwarf_next_cu_header(dbg, NULL, NULL, NULL, NULL, + NULL, &de); + } die = NULL; while (dwarf_siblingof(dbg, die, &ret_die, &de) == DW_DLV_OK) { if (die != NULL) @@ -418,51 +570,17 @@ translate(Dwarf_Debug dbg, Elf *e, const char* addrstr if (tag == DW_TAG_compile_unit) break; } + if (ret_die == NULL) { warnx("could not find DW_TAG_compile_unit die"); goto next_cu; } - if (dwarf_attrval_unsigned(die, DW_AT_low_pc, &lopc, &de) == - DW_DLV_OK) { - if (dwarf_attrval_unsigned(die, DW_AT_high_pc, &hipc, - &de) == DW_DLV_OK) { - /* - * Check if the address falls into the PC - * range of this CU. - */ - if (handle_high_pc(die, lopc, &hipc) != - DW_DLV_OK) - goto out; - } else { - /* Assume ~0ULL if DW_AT_high_pc not present */ - hipc = ~0ULL; - } - - /* - * Record the CU in the hash table for faster lookup - * later. - */ - if (dwarf_dieoffset(die, &off, &de) != DW_DLV_OK) { - warnx("dwarf_dieoffset failed: %s", - dwarf_errmsg(de)); - goto out; - } - HASH_FIND(hh, culist, &off, sizeof(off), cu); - if (cu == NULL) { - if ((cu = calloc(1, sizeof(*cu))) == NULL) - err(EXIT_FAILURE, "calloc"); - cu->off = off; - cu->lopc = lopc; - cu->hipc = hipc; - STAILQ_INIT(&cu->funclist); - HASH_ADD(hh, culist, off, sizeof(off), cu); - } - - if (addr >= lopc && addr < hipc) - break; - } - - next_cu: + ret = check_range(dbg, die, addr, &cu); + if (ret == DW_DLV_OK) + break; + if (ret == DW_DLV_ERROR) + goto out; +next_cu: if (die != NULL) { dwarf_dealloc(dbg, die, DW_DLA_DIE); die = NULL; @@ -472,6 +590,7 @@ translate(Dwarf_Debug dbg, Elf *e, const char* addrstr if (ret != DW_DLV_OK || die == NULL) goto out; +status_ok: switch (dwarf_srclines(die, &lbuf, &lcount, &de)) { case DW_DLV_OK: break; @@ -570,21 +689,6 @@ out: cu->srcfiles != NULL && f != NULL && f->inlined_caller != NULL) print_inlines(cu, f->inlined_caller, f->call_file, f->call_line); - - if (die != NULL) - dwarf_dealloc(dbg, die, DW_DLA_DIE); - - /* - * Reset internal CU pointer, so we will start from the first CU - * next round. - */ - while (ret != DW_DLV_NO_ENTRY) { - if (ret == DW_DLV_ERROR) - errx(EXIT_FAILURE, "dwarf_next_cu_header: %s", - dwarf_errmsg(de)); - ret = dwarf_next_cu_header(dbg, NULL, NULL, NULL, NULL, NULL, - &de); - } } static void Modified: stable/11/contrib/elftoolchain/ar/ar.1 ============================================================================== --- stable/11/contrib/elftoolchain/ar/ar.1 Sat Nov 7 21:46:27 2020 (r367465) +++ stable/11/contrib/elftoolchain/ar/ar.1 Sat Nov 7 23:57:57 2020 (r367466) @@ -21,51 +21,52 @@ .\" out of the use of this software, even if advised of the possibility of .\" such damage. .\" -.\" $Id: ar.1 3230 2015-07-27 17:11:38Z emaste $ +.\" $Id: ar.1 3642 2018-10-14 14:24:28Z jkoshy $ .\" -.Dd July 27, 2015 -.Os +.Dd September 30, 2018 .Dt AR 1 +.Os .Sh NAME .Nm ar .Nd manage archives .Sh SYNOPSIS .Nm .Fl d -.Op Fl T .Op Fl f .Op Fl j +.Op Fl T .Op Fl v .Op Fl z .Ar archive .Ar .Nm .Fl m -.Op Fl T .Op Fl a Ar position-after .Op Fl b Ar position-before .Op Fl f .Op Fl i Ar position-before .Op Fl j .Op Fl s | Fl S +.Op Fl T .Op Fl z .Ar archive .Ar .Nm .Fl p -.Op Fl T .Op Fl f +.Op Fl s +.Op Fl T .Op Fl v .Ar archive .Op Ar .Nm .Fl q -.Op Fl T .Op Fl c .Op Fl D .Op Fl f .Op Fl F Ar flavor | Fl -flavor Ar flavor .Op Fl s | Fl S +.Op Fl T .Op Fl U .Op Fl v .Op Fl z @@ -73,7 +74,6 @@ .Ar .Nm .Fl r -.Op Fl T .Op Fl a Ar position-after .Op Fl b Ar position-before .Op Fl c @@ -83,6 +83,7 @@ .Op Fl i Ar position-before .Op Fl j .Op Fl s | Fl S +.Op Fl T .Op Fl u .Op Fl U .Op Fl v @@ -99,6 +100,7 @@ .Nm .Fl t .Op Fl f +.Op Fl s .Op Fl T .Op Fl v .Ar archive @@ -106,9 +108,10 @@ .Nm .Fl x .Op Fl C -.Op Fl T .Op Fl f .Op Fl o +.Op Fl s +.Op Fl T .Op Fl u .Op Fl v .Ar archive Modified: stable/11/contrib/elftoolchain/ar/ar.5 ============================================================================== --- stable/11/contrib/elftoolchain/ar/ar.5 Sat Nov 7 21:46:27 2020 (r367465) +++ stable/11/contrib/elftoolchain/ar/ar.5 Sat Nov 7 23:57:57 2020 (r367466) @@ -21,11 +21,11 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $Id: ar.5 3182 2015-04-10 16:08:10Z emaste $ +.\" $Id: ar.5 3642 2018-10-14 14:24:28Z jkoshy $ .\" -.Dd November 28, 2010 -.Os +.Dd September 30, 2018 .Dt AR 5 +.Os .Sh NAME .Nm ar .Nd archive file format for @@ -84,6 +84,8 @@ An archive header comprises the following fixed sized .Bl -tag -width "Li ar_name" .It Ar ar_name (16 bytes) The file name of the archive member. +This field names a leaf file; absolute paths and relative paths containing +directory names are not supported. The format of this field varies between the BSD and SVR4/GNU formats and is described in more detail in the section .Sx "Representing File Names" Modified: stable/11/contrib/elftoolchain/ar/ar.c ============================================================================== --- stable/11/contrib/elftoolchain/ar/ar.c Sat Nov 7 21:46:27 2020 (r367465) +++ stable/11/contrib/elftoolchain/ar/ar.c Sat Nov 7 23:57:57 2020 (r367466) @@ -72,7 +72,7 @@ #include "ar.h" -ELFTC_VCSID("$Id: ar.c 3319 2016-01-13 21:37:53Z jkoshy $"); +ELFTC_VCSID("$Id: ar.c 3629 2018-09-30 19:26:28Z jkoshy $"); enum options { @@ -100,11 +100,12 @@ main(int argc, char **argv) struct bsdar *bsdar, bsdar_storage; char *arcmd, *argv1_saved; size_t len; - int i, opt; + int exitcode, i, opt; bsdar = &bsdar_storage; memset(bsdar, 0, sizeof(*bsdar)); + exitcode = EXIT_SUCCESS; arcmd = argv1_saved = NULL; bsdar->output = stdout; @@ -152,9 +153,9 @@ main(int argc, char **argv) bsdar->options |= AR_S; while ((bsdar->filename = *argv++) != NULL) - ar_write_archive(bsdar, 's'); + exitcode |= ar_write_archive(bsdar, 's'); - exit(EXIT_SUCCESS); + exit(exitcode); } else { if (argc < 2) bsdar_usage(); @@ -331,30 +332,33 @@ main(int argc, char **argv) if ((!bsdar->mode || strchr("ptx", bsdar->mode)) && bsdar->options & AR_S) { - ar_write_archive(bsdar, 's'); + exitcode = ar_write_archive(bsdar, 's'); if (!bsdar->mode) - exit(EXIT_SUCCESS); + exit(exitcode); } switch(bsdar->mode) { case 'd': case 'm': case 'q': case 'r': - ar_write_archive(bsdar, bsdar->mode); + exitcode = ar_write_archive(bsdar, bsdar->mode); break; case 'p': case 't': case 'x': - ar_read_archive(bsdar, bsdar->mode); + exitcode = ar_read_archive(bsdar, bsdar->mode); break; default: bsdar_usage(); /* NOTREACHED */ } - for (i = 0; i < bsdar->argc; i++) - if (bsdar->argv[i] != NULL) + for (i = 0; i < bsdar->argc; i++) { + if (bsdar->argv[i] != NULL) { bsdar_warnc(bsdar, 0, "%s: not found in archive", bsdar->argv[i]); + exitcode = EXIT_FAILURE; + } + } - exit(EXIT_SUCCESS); + exit(exitcode); } static void Modified: stable/11/contrib/elftoolchain/ar/ar.h ============================================================================== --- stable/11/contrib/elftoolchain/ar/ar.h Sat Nov 7 21:46:27 2020 (r367465) +++ stable/11/contrib/elftoolchain/ar/ar.h Sat Nov 7 23:57:57 2020 (r367466) @@ -23,7 +23,7 @@ * (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: ar.h 2496 2012-04-24 02:33:40Z jkoshy $ + * $Id: ar.h 3629 2018-09-30 19:26:28Z jkoshy $ */ #include <libelf.h> @@ -135,8 +135,8 @@ struct bsdar { }; void ar_mode_script(struct bsdar *ar); -void ar_read_archive(struct bsdar *_ar, int _mode); -void ar_write_archive(struct bsdar *_ar, int _mode); +int ar_read_archive(struct bsdar *_ar, int _mode); +int ar_write_archive(struct bsdar *_ar, int _mode); void bsdar_errc(struct bsdar *, int _code, const char *fmt, ...); int bsdar_is_pseudomember(struct bsdar *_ar, const char *_name); const char *bsdar_strmode(mode_t m); Modified: stable/11/contrib/elftoolchain/ar/ranlib.1 ============================================================================== --- stable/11/contrib/elftoolchain/ar/ranlib.1 Sat Nov 7 21:46:27 2020 (r367465) +++ stable/11/contrib/elftoolchain/ar/ranlib.1 Sat Nov 7 23:57:57 2020 (r367466) @@ -21,11 +21,11 @@ .\" out of the use of this software, even if advised of the possibility of .\" such damage. .\" -.\" $Id: ranlib.1 3195 2015-05-12 17:22:19Z emaste $ +.\" $Id: ranlib.1 3642 2018-10-14 14:24:28Z jkoshy $ .\" .Dd December 9, 2012 -.Os .Dt RANLIB 1 +.Os .Sh NAME .Nm ranlib .Nd update archive symbol tables Modified: stable/11/contrib/elftoolchain/ar/read.c ============================================================================== --- stable/11/contrib/elftoolchain/ar/read.c Sat Nov 7 21:46:27 2020 (r367465) +++ stable/11/contrib/elftoolchain/ar/read.c Sat Nov 7 23:57:57 2020 (r367466) @@ -34,16 +34,20 @@ #include <errno.h> #include <libgen.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> #include "ar.h" -ELFTC_VCSID("$Id: read.c 3180 2015-04-09 15:13:57Z emaste $"); +ELFTC_VCSID("$Id: read.c 3629 2018-09-30 19:26:28Z jkoshy $"); /* * Handle read modes: 'x', 't' and 'p'. + * + * Returns EXIT_SUCCESS if all operations completed successfully or returns + * EXIT_FAILURE otherwise. */ -void +int ar_read_archive(struct bsdar *bsdar, int mode) { FILE *out; @@ -60,8 +64,8 @@ ar_read_archive(struct bsdar *bsdar, int mode) gid_t gid; char **av; char buf[25]; - char find; - int i, flags, r; + int found; + int exitcode, i, flags, r; assert(mode == 'p' || mode == 't' || mode == 'x'); @@ -70,6 +74,7 @@ ar_read_archive(struct bsdar *bsdar, int mode) archive_read_support_format_ar(a); AC(archive_read_open_filename(a, bsdar->filename, DEF_BLKSZ)); + exitcode = EXIT_SUCCESS; out = bsdar->output; for (;;) { @@ -96,12 +101,27 @@ ar_read_archive(struct bsdar *bsdar, int mode) if (bsdar_is_pseudomember(bsdar, name)) continue; + /* The ar(5) format only supports 'leaf' file names. */ + if (strchr(name, '/')) { + bsdar_warnc(bsdar, 0, "ignoring entry: %s", + name); + continue; + } + + /* + * If we had been given a list of file names to process, check + * that the current entry is present in this list. + */ if (bsdar->argc > 0) { - find = 0; + found = 0; for(i = 0; i < bsdar->argc; i++) { av = &bsdar->argv[i]; if (*av == NULL) continue; + /* + * Per POSIX, only the basename of a file + * argument should be compared. + */ if ((bname = basename(*av)) == NULL) bsdar_errc(bsdar, errno, "basename failed"); @@ -109,10 +129,10 @@ ar_read_archive(struct bsdar *bsdar, int mode) continue; *av = NULL; - find = 1; + found = 1; break; } - if (!find) + if (!found) continue; } @@ -157,7 +177,7 @@ ar_read_archive(struct bsdar *bsdar, int mode) /* mode == 'x' */ if (stat(name, &sb) != 0) { if (errno != ENOENT) { - bsdar_warnc(bsdar, 0, + bsdar_warnc(bsdar, errno, "stat %s failed", bsdar->filename); continue; @@ -174,12 +194,6 @@ ar_read_archive(struct bsdar *bsdar, int mode) if (bsdar->options & AR_V) (void)fprintf(out, "x - %s\n", name); - /* Disallow absolute paths. */ - if (name[0] == '/') { - bsdar_warnc(bsdar, 0, - "Absolute path '%s'", name); - continue; - } /* Basic path security flags. */ flags = ARCHIVE_EXTRACT_SECURE_SYMLINKS | ARCHIVE_EXTRACT_SECURE_NODOTDOT; @@ -189,11 +203,19 @@ ar_read_archive(struct bsdar *bsdar, int mode) r = archive_read_extract(a, entry, flags); } - if (r) + if (r) { bsdar_warnc(bsdar, 0, "%s", archive_error_string(a)); + exitcode = EXIT_FAILURE; + } } } + + if (r == ARCHIVE_FATAL) + exitcode = EXIT_FAILURE; + AC(archive_read_close(a)); ACV(archive_read_free(a)); + + return (exitcode); } Modified: stable/11/contrib/elftoolchain/ar/write.c ============================================================================== --- stable/11/contrib/elftoolchain/ar/write.c Sat Nov 7 21:46:27 2020 (r367465) +++ stable/11/contrib/elftoolchain/ar/write.c Sat Nov 7 23:57:57 2020 (r367466) @@ -40,7 +40,7 @@ #include "ar.h" -ELFTC_VCSID("$Id: write.c 3183 2015-04-10 16:18:42Z emaste $"); +ELFTC_VCSID("$Id: write.c 3629 2018-09-30 19:26:28Z jkoshy $"); #define _ARMAG_LEN 8 /* length of the magic string */ #define _ARHDR_LEN 60 /* length of the archive header */ @@ -352,17 +352,20 @@ read_objs(struct bsdar *bsdar, const char *archive, in /* * Write an archive. + * + * Returns EXIT_SUCCESS if the write succeeded or EXIT_FAILURE otherwise. */ -void +int ar_write_archive(struct bsdar *bsdar, int mode) { struct ar_obj *nobj, *obj, *obj_temp, *pos; struct stat sb; const char *bname; char **av; - int i; + int exitcode, i; TAILQ_INIT(&bsdar->v_obj); + exitcode = EXIT_SUCCESS; nobj = NULL; pos = NULL; memset(&sb, 0, sizeof(sb)); @@ -376,16 +379,16 @@ ar_write_archive(struct bsdar *bsdar, int mode) */ if (stat(bsdar->filename, &sb) != 0) { if (errno != ENOENT) { - bsdar_warnc(bsdar, 0, "stat %s failed", + bsdar_warnc(bsdar, errno, "stat %s failed", bsdar->filename); - return; + return (EXIT_FAILURE); } /* We do not create archive in mode 'd', 'm' and 's'. */ if (mode != 'r' && mode != 'q') { bsdar_warnc(bsdar, 0, "%s: no such file", bsdar->filename); - return; + return (EXIT_FAILURE); } /* Issue a message if the '-c' option was not specified. */ @@ -474,8 +477,10 @@ ar_write_archive(struct bsdar *bsdar, int mode) */ nobj = create_obj_from_file(bsdar, *av, obj->mtime); - if (nobj == NULL) + if (nobj == NULL) { + exitcode = EXIT_FAILURE; goto skip_obj; + } } if (bsdar->options & AR_V) @@ -510,9 +515,13 @@ new_archive: av = &bsdar->argv[i]; if (*av != NULL && (mode == 'r' || mode == 'q')) { nobj = create_obj_from_file(bsdar, *av, 0); - if (nobj != NULL) - insert_obj(bsdar, nobj, pos); - if (bsdar->options & AR_V && nobj != NULL) + if (nobj == NULL) { + exitcode = EXIT_FAILURE; + *av = NULL; + continue; + } + insert_obj(bsdar, nobj, pos); + if (bsdar->options & AR_V) (void)fprintf(bsdar->output, "a - %s\n", *av); *av = NULL; } @@ -521,6 +530,8 @@ new_archive: write_objs: write_objs(bsdar); write_cleanup(bsdar); + + return (exitcode); } /* Modified: stable/11/contrib/elftoolchain/common/_elftc.h ============================================================================== --- stable/11/contrib/elftoolchain/common/_elftc.h Sat Nov 7 21:46:27 2020 (r367465) +++ stable/11/contrib/elftoolchain/common/_elftc.h Sat Nov 7 23:57:57 2020 (r367466) @@ -374,11 +374,14 @@ extern const char *__progname; #include <libkern/OSByteOrder.h> #define htobe32(x) OSSwapHostToBigInt32(x) +#define htole32(x) OSSwapHostToLittleInt32(x) +#ifndef roundup2 #define roundup2 roundup +#endif -#define ELFTC_BYTE_ORDER _BYTE_ORDER -#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN _LITTLE_ENDIAN -#define ELFTC_BYTE_ORDER_BIG_ENDIAN _BIG_ENDIAN +#define ELFTC_BYTE_ORDER __DARWIN_BYTE_ORDER +#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN __DARWIN_LITTLE_ENDIAN +#define ELFTC_BYTE_ORDER_BIG_ENDIAN __DARWIN_BIG_ENDIAN #define ELFTC_HAVE_MMAP 1 #define ELFTC_HAVE_STRMODE 1 @@ -418,7 +421,9 @@ extern const char *__progname; /* Whether we need to supply {be,le}32dec. */ #define ELFTC_NEED_BYTEORDER_EXTENSIONS 1 +#ifndef roundup2 #define roundup2 roundup +#endif #endif /* __GLIBC__ || __linux__ */ Modified: stable/11/contrib/elftoolchain/common/elfdefinitions.h ============================================================================== --- stable/11/contrib/elftoolchain/common/elfdefinitions.h Sat Nov 7 21:46:27 2020 (r367465) +++ stable/11/contrib/elftoolchain/common/elfdefinitions.h Sat Nov 7 23:57:57 2020 (r367466) @@ -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 $ */ /* @@ -33,7 +33,7 @@ * 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. + * ia64, powerpc, and RISC-V processors. * - The "Linkers and Libraries Guide", from Sun Microsystems. */ @@ -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 { @@ -426,6 +458,22 @@ _ELF_DEFINE_EF(EF_PPC_RELOCATABLE, 0x00010000UL, \ "-mrelocatable flag") \ _ELF_DEFINE_EF(EF_PPC_RELOCATABLE_LIB, 0x00008000UL, \ "-mrelocatable-lib flag") \ +_ELF_DEFINE_EF(EF_RISCV_RVC, 0x00000001UL, \ + "Compressed instruction extension") \ +_ELF_DEFINE_EF(EF_RISCV_FLOAT_ABI_MASK, 0x00000006UL, \ + "Floating point ABI") \ +_ELF_DEFINE_EF(EF_RISCV_FLOAT_ABI_SOFT, 0x00000000UL, \ + "Software emulated floating point") \ +_ELF_DEFINE_EF(EF_RISCV_FLOAT_ABI_SINGLE, 0x00000002UL, \ + "Single precision floating point") \ +_ELF_DEFINE_EF(EF_RISCV_FLOAT_ABI_DOUBLE, 0x00000004UL, \ + "Double precision floating point") \ +_ELF_DEFINE_EF(EF_RISCV_FLOAT_ABI_QUAD, 0x00000006UL, \ + "Quad precision floating point") \ +_ELF_DEFINE_EF(EF_RISCV_RVE, 0x00000008UL, \ + "RV32E embedded ABI") \ +_ELF_DEFINE_EF(EF_RISCV_TSO, 0x00000010UL, \ + "RVTSO memory consistency model") \ _ELF_DEFINE_EF(EF_SPARC_EXT_MASK, 0x00ffff00UL, \ "Vendor Extension mask") \ _ELF_DEFINE_EF(EF_SPARC_32PLUS, 0x00000100UL, \ @@ -2448,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") *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202011072357.0A7NvvGF053619>