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.