2023-03-03 Mark Wielaard * libelf.h: Define ELFCOMPRESS_ZSTD if undefined. (elf_compress): Document ELFCOMPRESS_ZSTD compression type. 2023-02-20 Mark Wielaard * gnuhash_xlate.h (elf_cvt_gnuhash): memmove any left over bytes. 2022-11-30 Mark Wielaard * elf.h: Update from glibc. 2022-10-28 Mark Wielaard * elf.h: Update from glibc. 2022-10-21 Yonggang Luo * libelf_crc32.c: Remove LIB_SYSTEM_H define. 2022-09-20 Yonggang Luo * elf32_checksum.c: Use BYTE_ORDER, LITTLE_ENDIAN and BIG_ENDIAN. * elf32_xlatetof.c: Likewise. * elf_getarsym.c: Likewise. 2022-10-16 Yonggang Luo * common.h: Remove ar.h, byteswap.h and endian.h. * elf32_checksum.c: Remove endian.h. * elf32_getphdr.c: Remove unistd.h and system.h. * elf32_getshdr.c: Remove unistd.h.h and system.h. * elf32_updatefile.c: Remove unistd.h, sys/mman.h and system.h. * elf32_updatenull.c: Remove endian.h and system.h. * elf32_xlatetof.c: Remove endian.h. * elf32_xlatetom.c: Likewise. * elf_begin.c: Remove unistd.h, sys/mman.h and system.h. * elf_cntl.c: Remove unistd.h. * elf_compress.c: Remove system.h and unistd.h. * elf_end.c: Remove sys.mman.h. * elf_getarsym.c: Remove byteswap.h, endian.h, unistd.h and system.h. * elf_getdata.c: Remove unistd.h and system.h. * elf_getdata_rawchunk.c: Remove unistd.h and system.h. * elf_getshdrstrndx.c: Likewise. * elf_readall.c: Likewise. * elf_update.c: Remove unistd.h and sys/mman.h. * gelf_xlate.c: Remove byteswap.h. * libelfP.h: Add system.h. * nlist.c: Remove unistd.h. 2022-08-28 Mark Wielaard * elf_begin.c (__libelf_next_arhdr_wrlock): Add OCT_FIELD macro, like INT_FIELD but use strtol with octal base 8. Use for ar_mode. 2022-08-08 Andreas Schwab * elf.h: Update from glibc. 2022-04-24 Mark Wielaard * elf_update.c (write_file): Check HAVE_MREMAP. 2022-04-01 Mark Wielaard * libelfP.h (struct Elf_Data_Chunk): Add an int64_t offset field. * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Check whether the requested chunk, offset, size and type, was already handed out. Set new Elf_Data_Chunk offset field. 2022-03-29 Mark Wielaard * gelf_xlate.c (START): Define and use sz variable. (END): Use sz variable to decide whether to do a memmove. 2022-03-24 Mark Wielaard * elf.h: Update from glibc. 2022-03-22 Mark Wielaard * elf_getdata.c (__libelf_type_aligns): ELF_T_GNUHASH has different alignment for ELFCLASS32 and ELFCLASS64. 2022-03-20 Mark Wielaard * version_xlate.h (elf_cvt_Verdef): Make sure aux_offset and def_offset don't overflow. (elf_cvt_Verneed): Make sure aux_offset and need_offset don't overflow. 2022-03-18 Mark Wielaard * version_xlate.h (elf_cvt_Verdef): Check alignment of def_offset and aux_offset. (elf_cvt_Verneed): Check alignment of need_offset and aux_offset. 2022-03-17 Mark Wielaard * elf_begin.c (read_long_names): Check ar_size starts with a digit. 2022-03-17 Mark Wielaard * elf_begin.c (get_shnum): Take offset into account for Shdr alignment check. 2021-12-19 Mark Wielaard * elf_begin.c (file_read_elf): Cast ehdr to uintptr_t before e_shoff alignment check. Only set shdr state when scncnt is larger than zero. 2021-12-16 Mark Wielaard * libelfP.h (NOTE_ALIGN4): And with negative unsigned long. (NOTE_ALIGN8): Likewise. 2021-12-15 Mark Wielaard * elf_begin.c (get_shnum): Use offsetof to get field of unaligned struct. 2021-09-06 Dmitry V. Levin * common.h (allocate_elf): Remove cast of calloc return value. * elf_newdata.c (elf_newdata): Likewise. * elf_getscn.c (elf_getscn): Remove casts of calloc return values. * elf_newscn.c (elf_newscn): Likewise. * elf32_updatefile.c (__elfw2): Remove casts of malloc return values. * elf_getdata.c (convert_data): Likewise. (__libelf_set_rawdata_wrlock): Remove cast of malloc return value. * elf_begin.c (read_long_names): Remove cast of malloc return value. * elf_readall.c (__libelf_readall): Likewise. * elf_getarsym.c (elf_getarsym): Remove casts of malloc and realloc return values. 2021-07-19 Mark Wielaard * elf_strptr.c (validate_str): Check last char is zero first before calling memrchr on the whole block. 2021-06-09 Andrei Homescu * elf_getdata.c: Fix d_align for sections where alignment is larger than offset. 2020-12-12 Mark Wielaard * elf.h: Update from glibc. 2020-12-16 Dmitry V. Levin * libelfP.h (_): Remove. 2020-12-15 Mark Wielaard * elf_begin.c (get_shnum): Make sure the full Ehdr is available. 2020-12-12 Dmitry V. Levin * common.h: Fix spelling typo in comment. * gelf.h: Likewise. * libelf.h: Likewise. * libelfP.h: Likewise. * elf32_checksum.c (elfw2): Likewise. * elf_begin.c (dup_elf, write_file): Likewise. * elf_compress.c (__libelf_compress): Likewise. * elf_compress_gnu.c (elf_compress_gnu): Likewise. 2020-12-11 Dmitry V. Levin * Makefile.am (GCC_INCLUDE): Remove. 2020-12-09 Dmitry V. Levin * Makefile.am (noinst_PROGRAMS): Rename to noinst_DATA. (libelf_so_SOURCES): Remove. (CLEANFILES): Add libelf.so. 2020-11-30 Dmitry V. Levin * Makefile.am (libelf.so$(EXEEXT)): Drop $(EXEEXT) suffix. 2020-11-06 Mark Wielaard * elf-knowledge.h (SH_ENTSIZE_HASH): Update comment. 2020-11-01 Mark Wielaard * elf_strptr.c (elf_strptr): Check shdr is not NULL. 2020-11-01 Mark Wielaard * elf_getphdrnum.c (__elf_getphdrnum_rdlock): Set *dst to zero on error. 2020-11-01 Mark Wielaard * libelfP.h (__libelf_data_type): Take an GElf_Ehdr instead of an Elf handle. * elf_getdata.c (__libelf_data_type): Likewise. And check ehdr directly instead of fetching a new one. (__libelf_set_rawdata_wrlock): Fetch Ehdr, report an error when that fails, otherwise call __libelf_data_type. 2020-10-28 Mark Wielaard * elf.h: Update from glibc. 2020-08-28 Mark Wielaard * elf.h: Update from glibc. 2020-08-19 Mark Wielaard * elf32_updatenull.c (updatenull_wrlock): Fixup the sh_addralign of an SHF_COMPRESSED section if necessary. 2020-06-04 Mark Wielaard * elf.h: Update from glibc. 2020-05-08 Mark Wielaard * elf_strptr.c (elf_strptr): Check shdr is not NULL. 2020-05-08 Mark Wielaard * elf_getdata.c (__libelf_set_rawdata_wrlock): Check __gelf_getehdr_rdlock return value. 2020-04-25 Mark Wielaard * elf_compress.c (__libelf_compress): Remove free (out_buf). 2020-03-18 Omar Sandoval * elf_getphdrnum.c (__elf_getphdrnum_rdlock): Call __elf{32,64}_getshdr_rdlock if the shdr is not cached. 2019-03-20 Matthias Maennich * elf_compress.c (__libelf_compress): Always call deflate_cleanup in failure path. Call deflateEnd only once. (__libelf_decompress): Call inflateEnd only once. 2019-06-18 Mark Wielaard * common.h (allocate_elf): Use int64_t instead of off_t for offset. * elf32_newphdr.c (newphdr): Document why Elf32/64_Word is correct. * elf32_updatefile.c (fill): Use int64_t instead of off_t for pos. (updatefile): Define last_offset, shdr_offset and scn_start as int64_t instead of off_t. * elf32_updatenull.c: Define Elf32_SizeWord and Elf64_SizeWord. (updatenull_wrlock): Return int64_t instead of off_t. Define size, sh_entsize, sh_align and sh_size as SizeWords. Define offset as int64_t. Cast data->d_off to SizeWord instead of GElf_Word. Drop size GElf_Word cast. Cast offset to SizeWord instead of GElf_Word when comparing with sh_size. * elf_begin.c (get_shnum): Define offset as int64_t instead of off_t. Document why use GElf_Word is correct. (file_read_elf): Define offset as int64_t instead of off_t. (__libelf_read_mmaped_file): Likewise. (read_unmmaped_file): Likewise. (read_file): Likewise. * elf_getaroff.c (elf_getaroff): Return int64_t. * elf_getbase.c (elf_getbase): Likewise. * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Define offset as int64_t instead of off_t. * elf_update.c (write_file): Return int64_t instead of off_t, define size as int64_t instead of off_t. (elf_update): Likewise. * libelfP.h (struct Elf): Define start_offset, sizestr_offset and offset as int64_t. (__libelf_read_mmaped_file): Define offset as int64_t. (__elf32_updatenull_wrlock): Return int64_t. (__elf64_updatenull_wrlock): Return int64_t. 2019-05-12 Mark Wielaard * elf32_updatenull.c (updatenull_wrlock): Mark shdr_flags dirty if either offset or size changed. 2019-05-01 Mark Wielaard * gelf_getnote.c (gelf_getnote): Check n_namesz doesn't overflow offset. 2019-04-30 Mark Wielaard * note_xlate.h (elf_cvt_note): Indicate we only translated the note header if we ran out of data by updating len, src and dest. 2019-04-01 Mao Han * elf.h: Update from glibc. 2019-03-07 Mark Wielaard * elf32_updatefile.c (updatemmap): Use posix_memalign instead of aligned_alloc. 2019-03-06 Mark Wielaard * elf32_updatefile.c (updatemmap): Free scns before returning allocation failure. 2019-02-24 Mark Wielaard * gelf_xlate.c (__elf_xfctstof): Remove alias. * libelfP.h (__elf_xfctstof): Remove definition. 2019-02-24 Mark Wielaard * elf32_fsize.c (local_strong_alias): Remove definition. (msize): Remove alias. * libelfP.h (__elf32_msize): Remove definition. (__elf64_msize): Likewise. 2019-02-21 Mark Wielaard * common.h (determine_kind): Only accept EV_CURRENT. * elf32_fsize.c (fsize): Just check version is EV_CURRENT. Use __libelf_type_size without version dimension. * elf32_updatefile.c (updatemmap): Define fctp from __elf_xfctstom without version dimension. (updatefile): Likewise. * elf32_updatenull.c (default_ehdr): Check e_version is EV_CURRENT. (updatenull_wrlock): Check d_version is EV_CURRENT. (elf32_xlatetof): Likewise. And get recsize without version dimension from __elf_xfctstom. (elf32_xlatetom): Likewise. * elf_begin.c (elf_begin): Check __libelf_version is EV_CURRENT. * elf_compress.c (__libelf_reset_rawdata): Set d_version to EV_CURRENT. * elf_getdata.c (shtype_map): Remove version dimension. (__libelf_type_aligns): Likewise. (__libelf_data_type): Use shtype_map without version dimension. (convert_data): Remove unused version argument. Get fp from __elf_xfctstom without version dimensions. (__libelf_set_data_list_rdlock): Call convert_data without version. * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Call __elfcfctstom conversion function without version dimensions. Set d_version to EV_CURRENT. * elf_newdata.c (elf_newdata): Set d_version to EV_CURRENT. * elf_version.c (__libelf_version_initialized): Removed. (__libelf_version): Initialized to EV_NONE. (elf_version): Always return EV_CURRENT for EV_NONE version. Only accept (and return) EV_CURRENT as version. * gelf_fsize.c (__libelf_type_sizes): Remove version dimension. (gelf_fsize): Only accept EV_CURRENT as version. Use __libelf_type_sizes without version dimension. * gelf_xlate.c (__elf_xftstom): Remove version dimensions. * libelfP.h (__elf_xfctstom): Defined without version dimensions. (__elf_xfctstof): Likewise. (__libelf_type_sizes): Define without version dimension. (elf_typesize): Define using __libelf_type_sizes without version dimension. (__libelf_version_initialized): Remove definition. (__libelf_version): Add definition. (LIBELF_EV_IDX): Removed define. (__libelf_type_aligns): Remove version dimension. * nlist.c (nlist): Call elf_version unconditionally. 2019-02-19 Mark Wielaard * elf_compress.c (do_deflate_cleanup): Remove ei_data argument, check cdatap is not NULL before calling free. (deflate_cleanup): Add cdata as argument. (__libelf_compress): Also check whether the d_size is not zero before converting data. Call deflate_cleanup with an extra argument depending on whether there is converted data to free. Always allocate allocate at least one byte for buf_out. 2019-02-14 Mark Wielaard * elf_begin.c (read_long_names): Make sure ar_size is properly terminated. Sanity check len early if we can. 2019-01-18 Mark Wielaard * Makefile.am (INSTALL_ELFH): Add elf.h to include_HEADERS when defined, otherwise (the default) add elf.h to noinst_HEADERS. 2019-01-16 Mark Wielaard * note_xlate.h (elf_cvt_note): Check n_namesz and n_descsz don't overflow note_len into note header. 2018-11-17 Mark Wielaard * elf32_updatefile.c (updatemmap): Make sure to call convert function on a properly aligned destination. 2018-11-16 Mark Wielaard * libebl.h (__elf32_msize): Mark with const attribute. (__elf64_msize): Likewise. 2018-11-13 Mark Wielaard * elf_getdata.c (__libelf_set_rawdata_wrlock): Explicitly set the alignment of SHF_COMPRESSED data to the alignment of ELF_T_CHDR. * elf_compress.c (elf_compress): After compression set sh_addralign to the alignment of ELF_T_CHDR. 2018-11-09 Mark Wielaard * elf_compress_gnu.c (elf_compress_gnu): Use elf_getdata. 2018-11-12 Mark Wielaard * elf-knowledge.c (ELF_NOTE_GNU_BUILD_ATTRIBUTE_PREFIX): New define. (NT_GNU_BUILD_ATTRIBUTE_{OPEN,FUNC}): Likewise. (GNU_BUILD_ATTRIBUTE_TYPE_{NUMERIC,STRING,BOOL_TRUE,BOOL_FALSE}): Likewise. (GNU_BUILD_ATTRIBUTE_{VERSION,STACK_PROT,RELRO,STACK_SIZE,TOOL,ABI, PIC,SHORT_ENUM}): Likewise. 2018-11-09 Mark Wielaard * elf_compress.c (__libelf_reset_rawdata): Make rawdata change explicit by calling __libelf_set_data_list. * elf_getdata.c (convert_data): Don't convert if type is ELF_T_BYTE even if endianness is different. 2018-10-18 Mark Wielaard * libelf.h (Elf_Type): Add ELF_T_NHDR8. * libelfP.h (__libelf_data_type): Add align argument. (NOTE_ALIGN): Split into... (NOTE_ALIGN4): ... and ... (NOTE_ALIGN8): this. * elf32_xlatetom.c (xlatetom): Recognize both ELF_T_NHDR and ELF_T_NHDR8. * elf_compress.c (elf_compress): Pass zdata_align to __libelf_data_type. * elf_compress_gnu.c (elf_compress_gnu): Pass sh_addralign to __libelf_data_type. * elf_getdata.c (shtype_map): Add ELF_T_NHDR8. (__libelf_data_type): Take align as extra argument, use it to determine Elf_Type. (__libelf_set_rawdata_wrlock): Recognize ELF_T_NHDR8. Pass align to __libelf_data_type. * gelf_fsize.c (__libelf_type_sizes): Add ELF_T_NHDR8. * gelf_getnote.c (gelf_getnote): Use Elf_Type of Elf_Data to calculate padding. * gelf_xlate.c (__elf_xfctstom): Set ELF_T_NHDR to elf_cvt_note4, add ELF_T_NHDR8. * note_xlate.h (elf_cvt_note): Take nhdr8 argument and use it to determine padding. (elf_cvt_note4): New function. (elf_cvt_note8): Likewise. 2018-09-13 Mark Wielaard * elf32_updatefile.c (updatemmap): Use shnum, not ehdr->e_shnum. * elf_getscn.c (elf_getscn): Create section zero if it is requested, but doesn't exist yet. 2018-09-12 Mark Wielaard * elf32_updatefile.c (updatemmap): Use memmove, not memcpy. * elf_update.c (write_file): Try to mremap if file needs to be extended. 2018-08-18 Mark Wielaard * libelf.h (elf_compress_gnu): Add documentation about interaction between SHF_COMPRESED and elf_compress_gnu. * elf_compress_gnu.c (elf_compress_gnu): Return error if section sh_flags has SHF_COMPRESSED set. 2018-07-27 Mark Wielaard * libelf.h (elf_getshdrstrndx): Fix documentation. (elf_getshstrndx): Likewise. 2018-06-19 Mark Wielaard * libelfP.h (__libelf_type_align): Remove !ALLOW_UNALIGNED guard. * elf_getdata.c (__libelf_type_aligns): Likewise. (convert_data): Remove ALLOW_UNALIGNED check. * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Likewise. 2018-06-21 Mark Wielaard * elf.h: Update from glibc. 2018-04-19 Andreas Schwab * elf.h: Update from glibc. 2018-02-16 Mark Wielaard * elf.h: Update from glibc. 2018-02-09 Joshua Watt * elf32_updatenull.c (updatenull_wrlock): Use FALLTHROUGH macro instead of comment. * elf_begin.c (read_unmmaped_file): Likewise. (elf_begin): Likewise. * elf_cntl.c (elf_cntl): Likewise. 2017-10-04 Mark Wielaard * elf_begin.c (file_read_elf): Skip sanity checking e_shoff if scncnt is zero, we won't use it then. 2017-10-04 Mark Wielaard * libelfP.h: Add ELF_E_INVALID_ELF to error values enum. * elf_error.c (ELF_E_INVALID_ELF_IDX): New define. Use it as value for ELF_E_INVALID_ELF in msgidx. * elf_getshdrstrndx.c (elf_getshdrstrndx): Distinquish between pread failing and not having enough data. * elf_begin.c (get_shnum): Likewise. Explicitly set libelf errno on too large value. (file_read_elf): Make sure to always set libelf errno when returning NULL. Distinquish between i/o file and elf data errors. 2017-08-18 Ulf Hermann * gelf_xlate.c: Use attribute_packed. 2017-04-27 Ulf Hermann * libelfP.h: Use attribute_hidden. 2017-04-27 Ulf Hermann * Makefile.am: Use fpic_CFLAGS and dso_LDFLAGS. 2017-08-15 Mark Wielaard * elf.h: Update from glibc. Add new powerpc note descriptors. 2017-07-19 Gustavo Romero * elf.h: Add known type in notes segment descriptor for HTM SPRs. 2017-02-17 Ulf hermann * Makefile.am: Add libelf_so_DEPS, which include libeu.a, libelf_so_LIBS. (libelf_so_LDLIBS): Add $(libelf_so_DEPS). (libelf.so$(EXEEXT): Use $(libelf_so_LIBS), require libelf.map from the right directory. 2017-04-20 Ulf Hermann * libelfP.h: Don't include config.h. 2017-04-20 Ulf Hermann * elf_begin.c: Use F_GETFD rather than F_GETFL. 2017-04-20 Ulf Hermann * libelf.h: Define macros for various function attributes and use them. 2017-04-20 Ulf Hermann * elf_update.c: Set ELF_F_MMAPPED flag if we mmap from elf_update. 2017-04-19 Mark Wielaard * elf_getarsym.c (elf_getarsym): Initialize n to zero. 2017-03-27 Mark Wielaard * elf32_updatefile.c (updatemmap): Always update last_positition. (updatefile): Likewise. 2017-03-24 Mark Wielaard * elf_compress.c (__libelf_decompress): Check insane compression ratios before trying to allocate output buffer. 2016-10-11 Akihiko Odaki Mark Wielaard * gelf.h (gelf_newehdr): Change return type to void *. (gelf_newphdr): Likewise. * gelf_newehdr.c (gelf_newehdr): Likewise. * gelf_newphdr.c (gelf_newphdr): Likewise. 2016-10-21 Mark Wielaard * elf_getdata.c (__libelf_set_rawdata_wrlock): Sanity check offset and size before trying to malloc and read data. 2016-10-26 Mark Wielaard * elf_begin.c (read_file): Always set maxsize when parent == NULL. 2016-10-11 Akihiko Odaki * elf_getarsym.c (elf_getarsym): Open code rawmemchr when not available. * elf_strptr.c: Include stdbool.h. (validate_str): New function. (elf_strptr): Use validate_str instead of memrchr. 2016-10-11 Akihiko Odaki * elf32_updatefile.c: Remove sys/param.h include. * elf32_updatenull.c: Likewise. Add system.h include. * elf_begin.c: Remove sys/param.h. * elf_compress: Likewise. Add system.h include. (MAX): Remove definition. 2016-08-07 Mark Wielaard * elf_compress.c (__libelf_reset_rawdata): Check scn->flags and free rawdata_base when malloced. Set ELF_F_MALLOCED for scn->flags. * elf_end.c (elf_end): Check scn->flags and free rawdata_base if malloced. * libelfP.h (struct Elf_Scn): Document flags ELF_F_MALLOCED usage. 2016-07-06 Mark Wielaard * elf-knowledge.h (SH_FLAGS_COMBINE): Removed. (SH_FLAGS_IMPORTANT): Likewise. 2016-07-06 Mark Wielaard * elf32_updatenull.c (updatenull_wrlock): Ignore e_type when updating phdrs. * elf_getphdrnum.c (__elf_getphdrnum_chk_rdlock): Only do sanity checking if phdrs haven't been read in yet. 2016-06-24 John Ogness * elf32_updatenull.c (updatenull_wrlock): Find first section. * elf_nextscn.c (elf_nextscn): When scn is NULL start from 0th section. 2016-06-28 Richard Henderson * elf.h: Update from glibc. Add lots of new EM_* definitions. 2016-04-14 Mark Wielaard * elf_compress.c (__libelf_compress): Free out_buf if deflateInit fails. 2016-02-13 Mark Wielaard * elf32_updatefile.c (updatemmap): Free scns when out of memory. 2016-01-28 Mark Wielaard * elf.h: Update from glibc. Add new i386 and x86_64 relocations. 2016-02-12 Mark Wielaard * elf.h: Update from glibc. Add NT_ARM_SYSTEM_CALL. 2016-02-04 Mark Wielaard * elf_getdata.c (__libelf_set_rawdata_wrlock): Don't adjust align for SHT_NOBITS sections. 2016-01-22 Chih-Hung Hsieh * elf_compress.c (__libelf_compress): Move nested function 'do_deflate_cleanup' to file scope to compile with clang. * elf_strptr.c (elf_strptr): Move nested function 'get_zdata' to file scope to compile with clang. 2016-01-13 Mark Wielaard * libelf.h: Check SHF_COMPRESSED is defined. If not define it and the associated ELF compression types/defines. 2015-11-26 Mark Wielaard * elf_compress.c (__libelf_decompress_elf): New function, extracted from... (elf_compress): here. Check zdata_base use __libelf_decompress_elf. * elf_strptr.c (elf_strptr): If SHF_COMPRESSED check, uncompress and use zdata. * libelfP.h (struct Elf_Scn): Add zdata_size and zdata_align. (__libelf_decompress_elf): New internal function definition. 2015-10-21 Mark Wielaard * Makefile.am (libelf_a_SOURCES): Add elf_compress.c and elf_compress_gnu.c. * elf_compress.c: New file. * elf_compress_gnu.c: Likewise. * elf_begin.c (file_read_elf): Make a writable copy of the shdrs for ELF_C_READ_MMAP. * elf_end.c (elf_end): Free zdata_base. * elf_error.c: Add ELF_E_ALREADY_COMPRESSED, ELF_E_UNKNOWN_COMPRESSION_TYPE, ELF_E_COMPRESS_ERROR and ELF_E_DECOMPRESS_ERROR. * elf_data.c (__libelf_data_type): New internal function extracted from convert_data. (convert_data): Handle SHF_COMPRESSED. * elf32_updatenull.c (updatenull_wrlock): Check sh_entsize against uncompressed section data size if SHF_COMPRESSED. * elf32_getshdr.c (load_shdr_wrlock): Adjust assert to account for ELF_C_READ_MMAP. * libelf.h: Define elf_compress and elf_compress_gnu. * libelf.map (ELFUTILS_1.7): Add elf_compress and elf_compress_gnu. * libelfP.h: Add ELF_E_ALREADY_COMPRESSED, ELF_E_UNKNOWN_COMPRESSION_TYPE, ELF_E_COMPRESS_ERROR and ELF_E_DECOMPRESS_ERROR. Define __libelf_data_type. (__libelf_compress): New internal function definition. (__libelf_decompress): Likewise. (__libelf_reset_rawdata): Likewise. (__libelf_data_type): Likewise. (struct Elf_Scn): Add zdata_base. 2015-11-19 Mark Wielaard * Makefile.am (libelf_a_SOURCES): Add elf32_getchdr.c, elf64_getchdr.c and gelf_getchdr.c. (noinst_HEADERS): Add chdr_xlate.h. * abstract.h: Define Chdr32 and Chdr64. * chdr_xlate.h: New file. * elf32_getchdr.c: New file. * elf64_getchdr.c: New file. * elf_error.c: Add ELF_E_NOT_COMPRESSED, ELF_E_INVALID_SECTION_TYPE and ELF_E_INVALID_SECTION_FLAGS. * elf_getdata.c (__libelf_set_rawdata_wrlock): Set d_type to ELF_T_CHDR for SHF_COMPRESSED sections. * exttypes.h: Add Chdr32 and Chdr64. * gelf.h (GElf_Chdr): New typedef. (gelf_getchdr): New function definition. * gelf_fsize.c (__libelf_type_sizes): Add ELF_T_CHDR. * gelf_getchdr.c: New file. * gelf_xlate.c (__elf_xfctstom): Add ELF_T_CHDR cvt_chdr. * gelf_xlate.h: Add Chdr. * libelf.h (Elf_Type): Add ELF_T_CHDR. (elf32_getchdr): New function definition. (elf64_getchdr): Likewise. * libelf.map (ELFUTILS_1.7): New sections add elf32_getchdr, elf64_getchdr and gelf_getchdr. * libelfP.h: Add ELF_E_NOT_COMPRESSED, ELF_E_INVALID_SECTION_TYPE and ELF_E_INVALID_SECTION_FLAGS. 2015-10-16 Mark Wielaard * Makefile.am (libelf_so_LDLIBS): Add -lz. 2015-10-14 Mark Wielaard * elf.h: Update from glibc. Add section compression constants and structures. 2015-10-20 Jose E. Marchesi * elf_begin.c (get_shnum): Elf64_Shdr.sh_size is an Elf64_Xword. Fix the size argument to pread_retry. 2015-10-13 Chih-Hung Hsieh * elf32_updatefile.c (__elfw2(LIBELFBITS,updatemmap)): Move nested function 'fill_mmap' to file scope. * elf_begin.c (elf_begin): Move nested function 'lock_dup_elf' to file scope. 2015-10-09 Josh Stone * libelf.h: Replace loff_t with int64_t throughout. 2015-10-05 Mark Wielaard * elf_update.c (write_file): Only use posix_fallocate when using mmap. Only report failure when errno is ENOSPC. 2015-10-09 Josh Stone * libelfP.h (struct Elf): Replace off64_t with off_t. * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Likewise. 2015-10-05 Chih-Hung Hsieh * elf_getarsym.c (elf_getarsym): Do not use union of variable length arrays. 2015-10-05 Josh Stone * Makefile.am (libelf.so): Add AM_V_CCLD and AM_V_at silencers. 2015-09-24 Jose E. Marchesi * Makefile.am (AM_CFLAGS): Use -fPIC instead of -fpic to avoid relocation overflows in some platforms. 2015-09-29 Mark Wielaard * elf32_updatenull.c (default_ehdr): Set e_version when EV_NONE. (updatenull_wrlock): Always set e_shentsize. 2015-09-23 Mark Wielaard * elf32_getehdr.c (getehdr_wrlock): Mark as internal_function. * elf32_getshdr.c (getshdr_rdlock): Likewise. (getshdr_wrlock): Likewise. * elf_error.c (__libelf_seterrno): Likewise. * elf_getphdrnum.c (__elf_getphdrnum_rdlock): Likewise. (__elf_getphdrnum_chk_rdlock): Likewise. * elf_getshdrnum.c (__elf_getphdrnum_rdlock): Likewise. (__elf_getphdrnum_chk_rdlock): Likewise. * elf_getshdrnum.c (__elf_getshdrnum_rdlock): Likewise. * elf_readall.c (__libelf_readall): Likewise. * gelf_getehdr.c (__gelf_getehdr_rdlock): Likewise. 2015-09-22 Mark Wielaard * *.c: Remove old-style function definitions. 2015-06-22 Mark Wielaard * dl-hash.h: Update from glibc. 2015-06-18 Mark Wielaard * elf32_updatefile.c (updatefile): Always free shdr_data and scns when allocated on failure paths. 2015-06-18 Mark Wielaard * nlist.c (nlist): Check symscn shdr exists before use. 2015-06-16 Mark Wielaard * elf_update.c (write_file): Always also use ftruncate before posix_fallocate to make sure file has the right size. 2015-06-04 Mark Wielaard * elf_getdata.c (__libelf_type_aligns): Add entries for ELF_T_EHDR, ELF_T_OFF, ELF_T_PHDR, ELF_T_SHDR, ELF_T_SWORD, ELF_T_XWORD, ELF_T_SXWORD, ELF_T_GNUHASH, ELF_T_AUXV. * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Check alignment of rawdata against requested type. 2015-06-02 Mark Wielaard * elf_getdata.c (convert_data): Make sure source data is properly aligned for type before calling actual conversion function. 2015-06-04 Mark Wielaard * elf_begin.c (get_shnum): Check alignment of Shdr, not Ehdr before direct access. 2015-06-02 Mark Wielaard * elf_begin.c (file_read_elf): Split checks for ehdr and shdr alignment, drop phdr alignment check. 2015-05-31 Mark Wielaard * elf32_getshdr.c (load_shdr_wrlock): Allocate shdrs with malloc, not alloca and free after conversion when a copy needs to be made. 2015-05-31 Mark Wielaard * elf32_getphdr.c (getphdr_wrlock): Allocate phdrs with malloc, not alloca and free after conversion when a copy needs to be made. 2015-05-31 Mark Wielaard * elf_getarsym.c (elf_getarsym): Allocate temporary file_date with malloc, not alloca also in !ALLOW_UNALIGNED case. 2015-05-30 Mark Wielaard * gelf_xlate.c (elf_cvt_Byte): Only call memmove with non-zero size. 2015-05-30 Mark Wielaard * elf32_updatefile.c (updatemmap): Only call mempcpy and update last_position when d_size is non-zero. 2015-05-17 Mark Wielaard * elf32_updatefile.c (updatefile): Allocate shdr_data and scns with malloc, not alloca. Free after writing section headers. 2015-05-16 Mark Wielaard * elf32_updatefile.c (updatemmap): Allocate temporary shdr storage with malloc, not alloca. Free after writing section header. 2015-05-16 Mark Wielaard * elf_getarsym.c (elf_getarsym): Allocate temporary file_date with malloc, not alloca. Call free after out. 2015-05-14 Mark Wielaard * elf_update.c (write_file): Use posix_fallocate instead of ftruncate to extend file if necessary. 2015-05-13 Mark Wielaard * elf32_updatenull.c (default_ehdr): If e_phnum is zero then set e_phoff also to zero. 2015-05-12 Mark Wielaard * elf32_updatenull.c (updatenull_wrlock): Check that sh_addralign is a powerof2. * elf_getdata.c (__libelf_set_rawdata_wrlock): Clamp large d_aligns to the elf image offset. 2015-05-12 Mark Wielaard * elf32_newphdr.c (newphdr): Call __libelf_seterrno with ELF_E_INVALID_INDEX before failing. Check whether section zero shdr actually exists if we need to put extended phnum in section zero. 2015-05-08 Mark Wielaard * nlist.c (nlist): Call gelf_fsize with EV_CURRENT. 2015-01-03 Mark Wielaard * version_xlate.h (elf_cvt_Verdef): Use memmove to copy src to dest. (elf_cvt_Verneed): Likewise. 2015-03-28 Mark Wielaard * elf.h: Update from glibc. 2015-03-23 Mark Wielaard * elf32_updatenull.c (updatenull_wrlock): Don't extend size with SHT_NOBITS sh_offset. 2015-02-18 Mark Wielaard * libelfP.h (__libelf_set_data_list_rdlock): Make internal_function. 2015-02-07 Jan Kratochvil * elf32_updatenull.c (__elfw2(LIBELFBITS,updatenull_wrlock)): Consider sh_addralign 0 as 1. 2015-01-22 Mark Wielaard * elf_strptr (elf_strptr): Make sure returned string is NUL terminated. 2015-01-21 Mark Wielaard * elf_strptr.c (elf_strptr): Check data_list_rear == NULL instead of rawdata_base != NULL before using rawdata directly. 2015-01-20 Mark Wielaard * libelfP.h (__elf_strptr_internal): New function declaration. * elf_getdata.c (__libelf_set_data_list_rdlock): New internal function extracted from... (__elf_getdata_rdlock): ... here. * elf_newdata.c (elf_newdata): Check scn->rawdata_base and update datalist if necessary. 2015-01-20 Mark Wielaard * elf_strptr.c (elf_strptr): Call __elf[32|64]_getshdr_rdlock if necessary. 2014-12-30 Mark Wielaard * elf_getphdrnum.c (__elf_getphdrnum_chk_rdlock): New function. (elf_getphdrnum): Call __elf_getphdrnum_chk_rdlock. * gelf_getphdr (gelf_getphdr): Call __elf_getphdrnum_chk_rdlock and always check ndx against phnum. * libelfP.h (__elf_getphdrnum_chk_rdlock): New internal function. 2014-12-25 Mark Wielaard * elf_begin.c (__libelf_next_arhdr_wrlock): ar_size cannot be negative. Include start_offset in maxsize. 2014-12-28 Alexander Cherepanov * elf_begin.c (read_long_names): Don't miss '/' right after another '/'. Fixes a dir traversal vuln in ar extraction. 2014-12-18 Ulrich Drepper * Makefile.am: Suppress output of textrel_check command. 2014-12-16 Mark Wielaard * elf_begin.c (read_long_names): Make sure long_names len fits in mapped ELF file. 2014-12-15 Mark Wielaard * elf_getarsym.c (elf_getarsym): Check index_size doesn't overflow. 2014-12-15 Mark Wielaard * elf_begin.c (read_long_names): Clear any garbage left in the name table. 2014-12-11 Mark Wielaard * elf_begin.c (file_read_elf): Correct ELF64 section offset check. 2014-12-11 Mark Wielaard * elf_begin.c (read_long_names): Check for offset overflow. (__libelf_next_arhdr_wrlock): Likewise. Sanity check the ar_size. Don't allow it to go beyond end of file. 2014-12-09 Mark Wielaard * elf_getarsym.c (elf_getarsym): Make sure n * w doesn't overflow. 2014-11-27 Mark Wielaard * Makefile.am (libelf.so): Use textrel_check. 2014-11-23 Mark Wielaard * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Change signed overflow check to unsigned. 2014-11-23 Mark Wielaard * note_xlate.h (elf_cvt_note): Copy over any leftover data if src != dest. The data is probably part of truncated name/desc. 2014-11-22 Mark Wielaard * elf_getphdrnum.c (elf_getphdrnum): Sanity check the __elf_getphdrnum_rdlock result. 2014-11-18 Mark Wielaard * version_xlate.h (elf_cvt_Verdef): Check for overflow. (elf_cvt_Verneed): Likewise. 2014-11-17 Mark Wielaard * elf-knowledge.h (SECTION_STRIP_P): Check name is not NULL. 2014-11-16 Mark Wielaard * elf_getshdrstrndx.c: Check there are section headers before handling SHN_XINDEX. 2014-11-16 Mark Wielaard * elf32_getphdr.c (getphdr_wrlock): Check e_phoff isn't zero. Check for too many pheaders. * elf_getphdrnum.c (__elf_getphdrnum_rdlock): Check section zero actually exists before handling PN_XNUM. 2014-11-16 Mark Wielaard * gelf_getnote.c (gelf_getnote): Check padding overflow. 2014-11-16 Mark Wielaard * elf_getdata.c (__libelf_set_rawdata_wrlock): Declare offset, size and align as Elf64_Off and Elf64_Xword not size_t. 2014-11-14 Mark Wielaard * gelf_getnote.c (gelf_getnote): Check offset overflow. 2014-11-13 Mark Wielaard * elf_getdata.c (__libelf_set_rawdata_wrlock): Fix unsigned overflow check. 2014-11-08 Mark Wielaard * elf_begin.c (__libelf_next_arhdr_wrlock): Use mempcpy not __mempcpy. 2014-11-07 Mark Wielaard * elf_begin.c (file_read_elf): Correct sh_size check. * elf_getdata.c (__libelf_set_rawdata_wrlock): Check for unsigned overflow. 2014-09-10 Petr Machata * elf_begin (read_unmmaped_file): Call __libelf_seterrno if the file is unreadable. 2014-07-07 Mark Wielaard * elf.h: Update from glibc. 2014-04-13 Mark Wielaard * Makefile.am: Remove !MUDFLAP conditions. * elf_begin.c (read_file): Don't clear use_mmap when _MUDFLAP is defined. * elf_update.c (write_file): Remove _MUDFLAP condition. 2014-01-17 Jakub Jelinek Roland McGrath * libelfP.h (INVALID_NDX): Define. * gelf_getdyn.c (gelf_getdyn): Use it. Remove ndx < 0 test if any. * gelf_getlib.c (gelf_getlib): Likewise. * gelf_getmove.c (gelf_getmove): Likewise. * gelf_getrel.c (gelf_getrel): Likewise. * gelf_getrela.c (gelf_getrela): Likewise. * gelf_getsym.c (gelf_getsym): Likewise. * gelf_getsyminfo.c (gelf_getsyminfo): Likewise. * gelf_getsymshndx.c (gelf_getsymshndx): Likewise. * gelf_getversym.c (gelf_getversym): Likewise. * gelf_update_dyn.c (gelf_update_dyn): Likewise. * gelf_update_lib.c (gelf_update_lib): Likewise. * gelf_update_move.c (gelf_update_move): Likewise. * gelf_update_rel.c (gelf_update_rel): Likewise. * gelf_update_rela.c (gelf_update_rela): Likewise. * gelf_update_sym.c (gelf_update_sym): Likewise. * gelf_update_syminfo.c (gelf_update_syminfo): Likewise. * gelf_update_symshndx.c (gelf_update_symshndx): Likewise. * gelf_update_versym.c (gelf_update_versym): Likewise. 2014-01-17 Jakub Jelinek * elf32_getphdr.c (elfw2(LIBELFBITS,getphdr)): Check if program header table fits into object's bounds. * elf_getshdrstrndx.c (elf_getshstrndx): Add elf->start_offset to elf->map_address. Check if first section header fits into object's bounds. * elf32_getshdr.c (elfw2(LIBELFBITS,getshdr)): Check if section header table fits into object's bounds. * elf_begin.c (get_shnum): Ensure section headers fits into object's bounds. (file_read_elf): Make sure scncnt is small enough to allocate both ElfXX_Shdr and Elf_Scn array. Make sure section and program header tables fit into object's bounds. Avoid memory leak on failure. * elf_newscn.c (elf_newscn): Check for overflow. * elf32_updatefile.c (__elfw2(LIBELFBITS,updatemmap)): Likewise. (__elfw2(LIBELFBITS,updatefile)): Likewise. * elf32_newphdr.c (elfw2(LIBELFBITS,newphdr)): Likewise. * elf_getarsym.c (elf_getarsym): Likewise. 2013-11-08 Mark Wielaard * elf32_updatefile.c (elfXX_updatemmap): Only memcpy ehdr when not already directly mmapped. 2013-11-05 Mark Wielaard * elf32_updatefile.c (elfXX_updatefile): Copy all section headers if elf->flags dirty. 2013-11-01 Michael Forney * Makefile.am: Use READELF. 2013-10-01 Petr Machata * elf.h: Update from glibc. 2013-06-17 Petr Machata * elf.h: Update from glibc. 2013-08-28 Namhyung Kim * gelf.h (gelf_fsize): Fix typo in comment. 2013-08-28 Mark Wielaard * gelf_getauxv.c (gelf_getauxv): Add missing whitespace. 2013-08-27 Mark Wielaard * gelf_getauxv.c (gelf_getauxv): Remove unnecessary casts to char *. 2013-08-25 Kurt Roeckx * gelf_getauxv.c (gelf_getauxv): Use memcpy instead of pointer dereference to avoid alignment problems. 2013-01-07 Roland McGrath * elf_getarsym.c (elf_getarsym): Copy FILE_DATA into stack space if it would be unaligned and !ALLOW_UNALIGNED. * elf_getarsym.c (read_number_entries): Use memcpy instead of pointer dereference so as not to assume the field is naturally aligned. 2012-09-17 Petr Machata * elf.h: Update from glibc. 2012-08-16 Roland McGrath * elf.h: Update from glibc. 2012-08-14 Mark Wielaard * elf32_checksum.c (ebl_debugscn_p): Removed unused define and confusing outdated comment. 2012-08-01 Petr Machata * elf_getarsym (read_number_entries): New function. (elf_getarsym): Handle 64-bit symbol table, stored in special entry named "/SYM64/". * elf_begin.c (__libelf_next_arhdr_wrlock): Don't reject archive because it contains 64-bit symbol table. 2012-07-19 Mark Wielaard * elf32_getshdr.c (load_shdr_wrlock): Add elf->flags & ELF_F_MALLOCED to asserts. 2012-07-17 Petr Machata * elf32_xlatetom.c (elfw2(LIBELFBITS, xlatetom)): Do not check for integer number of records in case of ELF_T_NHDR. 2012-04-02 Mark Wielaard * elf32_offscn.c: Do not match SHT_NOBITS sections at OFFSET unless there are no nonempty sections at that offset. 2012-03-21 Roland McGrath * elf-knowledge.h (SECTION_STRIP_P): Remove < SHT_NUM check. 2011-02-26 Mark Wielaard * elf_end.c (elf_end): Call rwlock_unlock before rwlock_fini. 2011-01-05 Jan Kratochvil * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Fix off64_t overflow when MAXIMUM_SIZE == ~0. 2010-08-18 Roland McGrath * gelf_fsize.c (__libelf_type_sizes): Add entries for ELF_T_LIB and ELF_T_GNUHASH. Reported by Mark Hatle . * exttypes.h: Add cases for ElfNN_Lib. Reported by Mark Hatle . 2010-06-14 Ulrich Drepper * gelf_update_shdr.c: Implicitly set ELF_F_DIRTY bit. * gelf_update_phdr.c: Likewise. * gelf_update_ehdr.c: Likewise. 2010-04-14 Roland McGrath * elf32_getphdr.c: Check for e_phoff/size outside the file bounds. * elf_begin.c (file_read_elf): Don't set .phdr here. 2010-04-13 Roland McGrath * elf.h: Update from glibc. 2010-04-06 Roland McGrath * elf_error.c (ELF_E_FD_MISMATCH_IDX): Avoid nonobvious abbreviation in error message. 2010-04-01 Petr Machata * elf_getdata.c (__elf_getdata_rdlock): Initialize data.s for data that do not need a conversion. 2010-03-11 Roland McGrath * elf.h: Update from glibc. 2010-03-04 Ulrich Drepper * elf.h: Update from glibc. 2010-02-17 Roland McGrath * elf_begin.c (file_read_elf): Leave section rawdata_base and data_base pointers null when [sh_offset,sh_size) points outside the mapped file. 2010-02-15 Roland McGrath * Makefile.am: Use config/eu.am for common stuff. 2010-01-07 Roland McGrath * elf32_getphdr.c: Use __elf_getphdrnum_rdlock. * gelf_getphdr.c: Likewise. * gelf_update_phdr.c: Likewise. * elf32_updatefile.c (__elf32_updatemmap, __elf32_updatefile): Likewise. * elf32_updatenull.c (__elf32_updatenull_wrlock): Likewise. * elf32_newphdr.c: Clear section 0's sh_info when resetting e_phnum. If COUNT is too large, use store PN_XNUM instead and set sh_info. * elf_begin.c (file_read_elf): Always allocate space we can use later for section 0 if doing RDWR. * elf_getphdrnum.c: New file. * Makefile.am (libelf_a_SOURCES): Add it. * libelf.h: Declare elf_getphdrnum. * libelfP.h: Declare __elf_getphdrnum_rdlock. * libelf.map (ELFUTILS_1.6): New set, add elf_getphdrnum. * elf.h: Update from glibc. 2009-10-23 Lubomir Rintel * elf32_updatefile.c (fill_mmap): When starting past shdr_end, start filling from section start, not shdr_end. 2009-11-10 Roland McGrath * elf_readall.c (__libelf_readall): Fetch file size if not yet known. 2009-11-06 Mark Wielaard * elf_next.c (elf_next): Mark the archive header as unusable when there is no next ar element. 2009-08-12 Mark Wielaard * Makefile.am (libelf.so): Use -Wl,-z,defs not -defs. 2009-07-26 Ulrich Drepper * elf.h: Update from glibc. 2009-07-21 Ulrich Drepper * elf32_updatefile.c (__elfXX_updatemmap): Fix handling of gaps between sections. Patch by Lubomir Rintel . 2009-07-08 Roland McGrath * libelfP.h (struct Elf): Remove unused ar.has_index field. Reorder various members for optimal packing. 2009-07-08 Ulrich Drepper * elf.h: Update from glibc. 2009-06-13 Ulrich Drepper * Makefile.am (libelf_a_SOURCES): Replace elf_getshnum.c and elf_getshstrndx.c with elf_getshdrnum.c and elf_getshdrstrndx.c. * elf_getshnum.c: Renamed to... * elf_getshdrnum.c: ...this. Rename function and add old name as alias. Likewise for internal functions with derived names. * elf_getshstrndx.c: Renamed to... * elf_getshdrstrndx.c: ...this. Rename function and add old name as alias. Likewise for internal functions with derived names. * libelf.h: Add prototypes for new names. Make old names as deprecated. * libelfP.h: Rename internal function prototypes. * libelf.map: Export for names. * elf32_checksum.c: Don't use deprecated functions. * elf32_getshdr.c: Likewise. 2009-06-01 Ulrich Drepper * elf.h: Update from glibc. 2009-04-14 Roland McGrath * elf.h: Update from glibc. 2009-04-01 Roland McGrath * elf.h: Update from glibc. 2009-02-10 Ulrich Drepper * elf32_updatefile.c (updatefile): For the zeroth section we still have to copy the section header. 2009-02-01 Ulrich Drepper * elf_strptr.c: Add comment re possible problem. 2009-01-26 Ulrich Drepper * elf32_updatenull.c (updatenull_wrlock): Fix comment of ELF_F_LAYOUT behaviour re section header table. 2009-01-22 Ulrich Drepper * elf32_updatefile.c (__elfXX_updatemmap): Fill the gap between sections even if only the section at the start of the gap has been changed. (__elfXX_updatefile): Likewise. 2009-01-21 Ulrich Drepper * elf32_updatefile.c (__elfXX_updatemmap): Skip most of the loop to handle sections for NOBITS sections. (elfXX_updatefile): Likewise. * elf32_updatefile.c (__elfXX_updatemmap): When skipping non-NOBITS sections we haven't loaded, update last_position based on scn_start, not based on old value. Don't run the loop for the dummy section 0. (elfXX_updatefile): Don't run the loop for the dummy section 0. 2009-01-10 Ulrich Drepper * libelfP.h (_): We only have one translation domain, elfutils. * Makefile.am: Use USE_LOCKS instead of USE_TLS. * elf_error.c: Always use __thread. Remove all !USE_TLS code. 2009-01-04 Roland McGrath * note_xlate.h (elf_cvt_note): Don't examine a size too small to container a note header. 2008-12-11 Roland McGrath * elf32_updatefile.c (__elfw2(LIBELFBITS,updatemmap)): Handle placement offset going backwards, for out-of-order or overlapping (bogus) sh_offset layouts. It's a dumb use, but should not crash. (__elfw2(LIBELFBITS,updatefile)): Likewise. Fixes RHBZ#476136. * libelf.h (Elf_Data): Whitespace fix. 2008-12-10 Roland McGrath * elf_getarhdr.c (elf_getarhdr): Fix missing rename in last change. 2008-10-22 Petr Machata * elf_rawfile.c (elf_rawfile): Lock around elf-> references. 2008-10-21 Petr Machata * libelfP.h: Rename getehdr_rdlock to getehdr_wrlock. * elf32_getehdr.c (getehdr_rdlock): Move the code to new function getehdr_impl and make it a wrapper. Rename to getehdr_wrlock. (getehdr_impl): Guard elf->class init with wrlock. (getehdr): Also make it a wrapper of getehdr_impl. * elf32_updatenull.c (updatenull_wrlock): Call getehdr_wrlock. 2008-10-20 Petr Machata * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Lock around the code that reads mutable elf state. Relock to write lock to chain the new chunk on the elf rawchunks list. 2008-10-20 Petr Machata * elf32_checksum.c (checksum): Place a lock around the code that processes data. Make it wrlock if the code needs to xlate the data before processing. 2008-10-16 Petr Machata * elf_begin.c (__libelf_next_arhdr): Rename to __libelf_next_arhdr_wrlock. (dup_elf): Adjust the call. (elf_begin): New local function lock_dup_elf. Relocks the elf if necessary before calling dup. Call this instead of dup_elf. * elf_getarhdr.c (elf_getarhdr): Lock before calling __libelf_next_arhdr_wrlock. * elf_next.c (elf_next): Likewise. * elf_rand.c (elf_rand): Likewise. 2008-10-14 Petr Machata * elf_getdata.c (__elf_getdata_rdlock): Lock before converting. 2008-11-26 Roland McGrath * elf.h: Update from glibc. 2008-10-06 Roland McGrath * elf_getarhdr.c (elf_getarhdr): Return NULL when passed NULL. 2008-08-27 Roland McGrath * elf_begin.c (get_shnum): Avoid misaligned reads for matching endian. * libelfP.h [!ALLOW_UNALIGNED] (__libelf_type_align): Fix CLASS index. 2008-08-25 Roland McGrath * Makefile.am (libelf_so_LDLIBS): New variable. (libelf.so): Use it in the link. 2008-08-21 Petr Machata * elf_getdata.c, libelfP.h (__elf_getdata_internal): Rename to __elf_getdata_rdlock. (__libelf_set_rawdata_wrlock): New function. (__libelf_set_rawdata): Make it a wrapper that calls *_wrlock. * elf32_updatenull.c, libelfP.h (__elfNN_updatenull): Rename to __elfNN_updatenull_wrlock. 2008-08-21 Petr Machata * elf32_getphdr.c, libelfP.h (__elfNN_getphdr_internal): Drop. Move __elfNN_getphdr_internal code to __elfNN_getphdr_wrlock. (__elfNN_getphdr_rdlock, __elfNN_getphdr_wrlock): New functions. (__elfNN_getphdr_rdlock, __elfNN_getphdr_wrlock): Make these wrappers of getphdr_impl. 2008-08-21 Petr Machata * elf32_getehdr.c, libelfP.h (__elfNN_getehdr_internal): Rename to __elfNN_getehdr_rdlock. * gelf_getehdr, libelfP.h: (__gelf_getehdr_internal): Rename to __gelf_getehdr_rdlock. 2008-08-21 Petr Machata * elf32_getshdr.c (__elfNN_getshdr_internal): Drop. (load_shdr_wrlock, scn_valid): New functions, contain bits of behaviour from __elfNN_getshdr_internal. (__elfNN_getshdr_rdlock, __elfNN_getshdr_wrlock): Replacements for dropped _internal functions above. * elf_getshnum.c (__elf_getshnum_internal): Rename to __elf_getshnum_rdlock. 2008-08-04 Petr Machata * libelfP.h (RWLOCK_RDLOCK, RWLOCK_WRLOCK, RWLOCK_UNLOCK): New macros. 2008-07-28 Roland McGrath * elf.h: Update from glibc. 2008-03-31 Roland McGrath * elf32_offscn.c: Make sure shdrs have been read in. 2008-02-19 Roland McGrath * elf.h: Update from glibc. 2008-02-08 Roland McGrath * elf.h: Update from glibc. 2008-01-31 Ulrich Drepper * elf_strptr.c (elf_strptr): Don't fail if the ELF file is currently under construction and no raw data can be read from disk. 2008-01-30 Roland McGrath * elf.h: Update from glibc. 2008-01-26 Roland McGrath * elf_begin.c (__libelf_next_arhdr): Rewrite conversions using a macro. Fixes various pastos in wrong type in sizeof, wrong string parsed. 2008-01-20 Roland McGrath * elf_getaroff.c: Calculate from start_offset, instead of using parent's state.ar.offset field. 2008-01-08 Roland McGrath * Makefile.am (euinclude): Variable removed. (pkginclude_HEADERS): Set this instead of euinclude_HEADERS. 2008-01-03 Roland McGrath * common.h: Add __attribute__ ((unused)) to static functions. 2007-12-20 Ulrich Drepper * Makefile.am (libelf_a_SOURCES): Add elf_scnshndx. * libelfP.h (struct Elf_Scn): Add shndx_index field. Declare __elf_scnshndx_internal. * elf32_getshdr.c: Record location of extended section header. * elf_begin.c (file_read_elf): Likewise. * elf_scnshndx.c: New file. * libelf.h: Declare elf_scnshndx. * libelf.map: Add elf_scnshndx to version ELFUTILS_1.4. 2007-11-12 Roland McGrath * libelf.h: Replace off64_t with loff_t throughout. Only that type name is unconditionally defined by 2007-11-03 Roland McGrath * libelf.h (Elf_Data): Comment fix. 2007-10-18 Roland McGrath * elf.h: Update from glibc. 2007-10-07 Roland McGrath * elf_begin.c (__libelf_next_arhdr): Fix fencepost error and wrong member access in terminating name with no trailing /. Trim trailing spaces when there is no /. 2007-10-04 Roland McGrath * elf_end.c (elf_end): Don't free ELF->state.ar.ar_sym when it's -1l. 2007-10-03 Roland McGrath * libelf.h (Elf_Data): Use off64_t for d_off. (Elf_Arhdr): Use off64_t for ar_size. (elf_update, elf_getbase, elf_getaroff): Return off64_t. * gelf_rawchunk.c: File removed. * gelf_freechunk.c: File removed. * Makefile.am (libelf_a_SOURCES): Remove them. * libelf.map (ELFUTILS_1.0): Remove exports. * gelf.h: Remove decls. * elf_getdata_rawchunk.c: New file. * Makefile.am (libelf_a_SOURCES): Add it. * libelf.map (ELFUTILS_1.3): Add elf_getdata_rawchunk. * libelf.h: Declare it. * libelfP.h (Elf_Data_Chunk): New type. (struct Elf.elf): New member `rawchunks'. * elf_end.c (elf_end): Free recorded rawchunk buffers. 2007-08-24 Roland McGrath * gelf_getnote.c: New file. * Makefile.am (libelf_a_SOURCES): Add it. * gelf.h: Declare gelf_getnote. * libelf.map (ELFUTILS_1.3): Add gelf_getnote. * libelfP.h (NOTE_ALIGN): New macro. * note_xlate.h: New file. * Makefile.am (noinst_HEADERS): Add it. * gelf_xlate.c: Include it. (__elf_xfctstom): Use elf_cvt_note. * elf_getdata.c (shtype_map, __libelf_type_align): Handle SHT_NOTE. (__libelf_set_rawdata): Likewise. 2007-08-19 Roland McGrath * gelf_update_auxv.c: New file. * gelf_getauxv.c: New file. * Makefile.am (libelf_a_SOURCES): Add them. * gelf.h: Declare gelf_getauxv, gelf_update_auxv. * libelf.map (ELFUTILS_1.3): New set, inherits fom ELFUTILS_1.2. Export gelf_getauxv, gelf_update_auxv. * libelf.h (Elf_Type): Add ELF_T_AUXV. * abstract.h: Add auxv_t entries. * exttypes.h: Likewise. * gelf_xlate.h: Likewise. * gelf_xlate.c (__elf_xfctstom): Add ELF_T_AUXV entries. * gelf_fsize.c (__libelf_type_sizes): Likewise. 2007-08-12 Roland McGrath * elf32_updatefile.c (compare_sections): Sort secondarily on sh_size, and only tertiarily on index. 2007-07-09 Roland McGrath * elf.h: Update from glibc. 2007-04-22 Roland McGrath * elf.h: Update from glibc. 2007-03-18 Roland McGrath * elf_begin.c (get_shnum): Fix test for e_shoff being out of bounds. Return zero when the section headers do not fit within MAXSIZE. 2007-03-09 Roland McGrath * libelfP.h (LIBELF_EV_IDX): New macro. (__libelf_type_align): New macro. [! ALLOW_UNALIGNED]: Declare __libc_type_aligns array. * elf_getdata.c (shtype_map): Convert to just Elf_Type[][]. (convert_data, __libelf_set_rawdata): Use that, __libelf_type_align, and __libelf_type_sizes, in place of old table. (__libc_type_aligns): New const variable. 2007-02-04 Ulrich Drepper * Makefile (libelf.so): Build with -z relro. * elf_begin.c (read_file): When using ELF_C_READ_MMAP use MAP_PRIVATE. 2007-01-30 Ulrich Drepper * nlist.c: Close file descriptor before returning. 2007-01-20 Roland McGrath * gnuhash_xlate.h (elf_cvt_gnuhash): Fix fence-post error so we convert the final word. * elf32_getshdr.c: Don't byteswap shdr fields when EI_DATA matches MY_ELFDATA on !ALLOW_UNALIGNED machines. 2007-01-18 Roland McGrath * gelf_rawchunk.c (gelf_rawchunk): Clear RESULT pointer after freeing it on read error. 2006-10-13 Roland McGrath * elf32_updatenull.c: Look for and accept phdr also for ET_CORE. * elf_error.c (msgstr): Change ELF_E_INVALID_PHDR string. 2006-08-29 Roland McGrath * elf32_getphdr.c: Don't byteswap phdr fields when EI_DATA matches MY_ELFDATA on !ALLOW_UNALIGNED machines. Reported by Christian Aichinger . * Makefile.am (CLEANFILES): Add libelf.so.$(VERSION). 2006-08-08 Ulrich Drepper * elf.h (DT_VALNUM): Update. (DT_ADDRNUM): Likewise. 2006-07-12 Ulrich Drepper * elf32_updatefile.c: Adjust for internal_function_def removal. * elf32_updatenull.c: Likewise. * elf_begin.c: Likewise. * elf_getdata.c: Likewise. 2006-07-11 Ulrich Drepper * libelf.h: Define ELF_T_GNUHASH. * elf_getdata.c (TYPEIDX): Handle SHT_GNU_HASH. (shtype_map): Add SHT_GNU_HASH entries. * gelf_xlate.c (__elf_xfctstom): Add ELF_T_GNUHASH entries. * gnuhash_xlate.h: New file. * Makefile.am (noinst_HEADERS): Add gnuhash_xlate.h. 2006-07-06 Ulrich Drepper * elf_gnu_hash.c: New file. * libelf.h: Declare elf_gnu_hash. * Makefile.am (libelf_a_SOURCES): Add elf_gnu_hash. * libelf.map: Add elf_gnu_map for version ELFUTILS_1.2. 2006-06-15 Roland McGrath * libelf.h (elf_getarsym): Fix comment typo. Rename second parameter to be more explanatory. (elf_getident, elf_rawhide): Likewise. 2006-05-28 Ulrich Drepper * elf32_updatefile.c (updatemmap): Preserve section content if copying would overwrite them. Fix msync paramters. 2006-04-04 Roland McGrath * elf32_updatefile.c (updatemmap): Handle other-endian case. 2006-04-04 Ulrich Drepper * elf32_updatefile.c (updatemmap): Cleanups. Remove shdr_dest variable. Before writing sections, make a copy of the section header data if necessary. Don't write section header while writing the section constent, it might overwrite some sections. Restore the pointer afterwards. * elf32_updatenull.c (updatenull): If the offset of a section in a file changed make sure we read the section so that it'll be written out. * elf_update.c: Remove debug message. 2005-12-07 Roland McGrath * gelf_xlate.c [! ALLOW_UNALIGNED] (union unaligned): New type. (FETCH, STORE): New macros. (INLINE3): Use those to do alignment-friendly conversion. * elf32_getshdr.c: Include map_address and start_offset in alignment calculations. * elf32_getphdr.c: Likewise. 2005-11-19 Roland McGrath * elf.h: Update from glibc. 2005-11-17 Roland McGrath * elf.h: Update from glibc. 2005-11-10 Roland McGrath * elf.h: Update from glibc. 2005-09-09 Roland McGrath * elf_update.c (write_file): Stat the file and fchmod it after update if its mode had S_ISUID or S_ISGID bits set. 2005-08-28 Ulrich Drepper * elf32_getphdr.c: Include . Use pread_retry instead of pread. And branch prediction where useful. * elf_begin.c: Likewise. * elf_getdata.c: Likewise. * elf_getshstrndx.c: Likewise. * elf_readall.c: Likewise. * gelf_rawchunk.c: Likewise. * elf32_updatefile.c: Include . Use pread_retry instead of pread. And branch prediction where useful. * elf_getarsym.c: Don't define pread_retry here. * Makefile.am: Use $(LINK) not $(CC) when creating DSO. (%.os): Use COMPILE.os. (COMPILE.os): Filter out gconv options. 2005-08-27 Ulrich Drepper * elf_begin.c (file_read_elf): Avoid reading ELF header from file again. Instead accept additional parameter which points to it if we don't use mmap. (get_shnum): Use passed in e_ident value as source of ELF header. 2005-08-15 Ulrich Drepper * elf_begin.c (__libelf_next_arhdr): Use TEMP_FAILURE_RETRY. * Makefile (libelf_a_SOURCES): Add elf_getaroff.c. * libelf.map: Export elf_getaroff. * libelf.h: Declare elf_getaroff. * elf_getaroff.c: New file. 2005-08-13 Ulrich Drepper * elf_begin.c (get_shnum): Optimize memory handling. Always read from mapped file if available. Fix access to 64-bit sh_size. Recognize overflow. (file_read_elf): Likewise. 2005-08-12 Roland McGrath * elf32_offscn.c: Do not match empty sections at OFFSET unless there are no nonempty sections at that offset. 2005-08-07 Ulrich Drepper * elf.h: Update from glibc. 2005-08-06 Ulrich Drepper * Makefile.am (AM_CFLAGS): Add -fpic when BUILD_STATIC. 2005-08-03 Ulrich Drepper * libelf.map: Move elf32_offscn, elf64_offscn, and gelf_offscn in new version ELFUTILS_1.1.1. 2005-08-02 Ulrich Drepper * elf_error.c: Add handling of ELF_E_INVALID_OFFSET. * elf32_offscn.c: New file. * elf64_offscn.c: New file. * gelf_offscn.c: New file. * Makefile.am (libelf_a_SOURCES): Add elf32_offscn.c, elf64_offscn.c, and gelf_offscn.c. * libelf.sym: Export new symbols. 2005-07-23 Ulrich Drepper * elf-knowledge.h (SECTION_STRIP_P): Don't handle removal of debug sections here anymore. * elf32_checksum.c: Adjust for change in SECTION_STRIP_P interface. * elf_update.c (elf_update): Get write lock, not read lock. * elf32_updatenull.c (updatenull): Get section headers if necessary and possible. 2005-07-22 Ulrich Drepper * elf32_updatenull.c (updatenull): If program header hasn't been loaded yet, try to do it now. Don't unnecessarily update overflow of section count in zeroth section sh_size field. If section content hasn't been read yet, do it before looking for the block size. If no section data present, infer size of section header. 2005-05-11 Ulrich Drepper * elf.h: Update again. 2005-05-09 Ulrich Drepper * elf.h: Update from glibc. 2005-05-08 Roland McGrath * elf_begin.c (read_file) [_MUDFLAP]: Don't use mmap for now. * elf_update.c (write_file) [_MUDFLAP]: Likewise. 2005-03-29 Ulrich Drepper * elf32_checksum.c: Use INTUSE and INTDEF to avoid PLTs. * elf_end.c: Likewise. * elf_getdata.c: Likewise. * gelf_getehdr.c: Likewise. * nlist.c: Likewise. * libelfP.h: Add declarations of internal functions. 2005-02-15 Ulrich Drepper * common.h (CONVERT): Make sure all values are unsigned. (CONVERT_TO): Likewise. * Makefile.am (AM_CFLAGS): Add -Wformat=2. Fix rule to build libelf.so. 2005-02-06 Ulrich Drepper * Makefile.am: Cleanup AM_CFLAGS handling. Add -Wunused -Wextra. Remove lint handling. * elf32_getphdr.c: Minor cleanups. * elf32_getshdr.c: Likewise. * elf32_updatefile.c: Likewise. * elf32_updatenull.c: Likewise. * elf_begin.c: Likewise. * elf_error.c: Likewise. * elf_getarsym.c: Likewise. * elf_getdata.c: Likewise. * elf_update.c: Likewise. * gelf_xlate.c: Likewise. 2005-02-05 Ulrich Drepper * Makefile.am: Check for text relocations in constructed DSO. * Makefile.am [MUDFLAP] (AM_CFLAGS): Add -Werror -fpic -fmudflap. 2005-02-04 Ulrich Drepper * gelf_getehdr.c (gelf_getehdr): Slight optimization. * elf32_checksum.c (checksum): Do not look at NOBITS sections. * gelf.h: Add gelf_checksum prototype. 2004-09-25 Ulrich Drepper * elf32_checksum.c: Make compile with gcc 4.0. * elf32_updatefile.c: Likewise. * elf32_updatenull.c: Likewise. * elf_begin.c: Likewise. * elf_error.c: Likewise. * elf_getdata.c: Likewise. * elf_getident.c: Likewise. 2004-04-01 Ulrich Drepper * elf.h: Update from glibc. 2004-01-23 Ulrich Drepper * elf_update.c: Fix locking. * elf_clone.c: Likewise. * libelf.h: Define ELF_T_LIB. * gelf_getlib.c: New file. * gelf_update_lib.c: New file. * gelf.h: Declare the new functions. Define GElf_Lib. * abstract.h: Define Lib, Lib32, Lib64. * gelf_xlate.c (__elf_xfctstom): Add ELF_T_LIB entry. * gelf_xlate.h: Add entry for ElfXX_Lib. * elf_getdata.c: Recognize SHT_GNU_LIBLIST as a known section type. * libelf.map: Add new symbols to ELFUTILS_1.1. * Makefile.am (libelf_a_SOURCES): Add gelf_getlib.c and gelf_update_lib.c. 2004-01-17 Ulrich Drepper * Makefile.am: Support building with mudflap. * gelf_xlate.c (INLINE3): Avoid using cast as lvalue. * dl-hash.h (_dl_elf_hash): Likewise. 2004-01-05 Ulrich Drepper * elf-knowledge.h: New file. From libelf subdir. * Makefile.am (euincludedir): Define. (euinclude_HEADERS): Add elf-knowledge.h. 2003-09-24 Ulrich Drepper * elf.h: Define some PT_IA_64_HP_* constants. 2003-09-23 Jakub Jelinek * libelfP.h (struct Elf): Move state.elf64.sizestr_offset after state.elf64.scnincr to match state.elf{,32}. 2003-08-12 Ulrich Drepper * elf32_updatefile.c (__updatemmap): When writing back file where some sections have not been read in, count their sizes based on the section header. 2003-08-11 Ulrich Drepper * Moved to CVS archive.