summaryrefslogtreecommitdiffstats
path: root/libasm
Commit message (Collapse)AuthorAgeFilesLines
* Consolidate and add files to clean target variablesupstream/users/amerey/try-cleanMichael Pratt2024-11-081-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | To increase the consistency of how automatic clean targets run, define the variables together without +=, default to MOSTLYCLEANFILES when there is no need for different levels or add more clean levels to match other subdirectories, add more files that are built, remove duplication, and cleanup. Do the same for EXTRA_DIST where it is equally messy. * backends/Makefile.am: add more objects to clean, improve spacing. * debuginfod/Makefile.am: Likewise, and remove duplicates. * lib/Makefile.am: improve spacing. * libasm/Makefile.am: add more objects to clean, split similar to debuginfod. * libcpu/Makefile.am: use normal =, add more objects to clean. * libdw/Makefile.am: add more objects to clean, split similar to debuginfod. * libdwelf/Makefile.am: add more objects to clean, use lowest clean level. * libdwfl/Makefile.am: Likewise. * libebl/Makefile.am: add more objects to clean. * libelf/Makefile.am: add more objects to clean, split similar to debuginfod. * src/Makefile.am: consolidate including EXTRA_DIST, split clean levels, define with normal =, define with variables. * tests/Makefile.am: Likewise, but not including EXTRA_DIST. Signed-off-by: Michael Pratt <[email protected]>
* Remove usage of "unlocked" variant of stdio print functionsMichael Pratt2024-10-171-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These "unlocked" Linux Standard Base variants of standard functions are not available on some systems that are still capable of building Linux and ELFs. The difference is negligible for simple printing to stdout. POSIX also states for the similar putc_unlocked(): These functions can safely be used in a multi-threaded program if and only if they are called while the invoking thread owns the (FILE *) object, as is the case after a successful call to the flockfile() or ftrylockfile() functions. ... These unlocked versions can be safely used only within explicitly locked program regions, using exported locking primitives. and these precautions were never done. Use the standard forms of these print functions. There is inconsistent use of fputc_unlocked() with putc_unlocked(), so consistently use the safer fputc() instead. Signed-off-by: Michael Pratt <[email protected]>
* libasm: Fix use-after-free issue with circular single linked list cleanupMark Wielaard2023-02-212-8/+14
| | | | | | | | | | | | | | | | Pointed out by gcc 12 with -Wuse-after-free=3 In function ‘free_section’ asm_end.c:552:17: error: pointer ‘data’ used after ‘free’ [-Werror=use-after-free] 552 | while (oldp != scnp->content); | ~~~~~^~~~~~~~~~~~~~~~ asm_end.c:550:9: note: call to ‘free’ here 550 | free (oldp); | ^~~~~~~~~~~ Fix by freeing scnp->content last. Signed-off-by: Mark Wielaard <[email protected]>
* configure: Add --enable-sanitize-memoryIlya Leoshkevich2023-02-141-1/+2
| | | | | | | | | | | | | | | | | | | | Add support for clang Memory Sanitizer [1], which detects the usage of uninitialized values. While elfutils itself is already checked with valgrind, checking code that depends on elfutils requires elfutils to be built with MSan. MSan is not linked into shared libraries, and is linked into executables statically. Therefore, unlike the other sanitizers, MSan needs to be configured fairly early, since we need to drop -D_FORTIFY_SOURCE [2], -Wl,-z,defs and --no-undefined. Disable a few tests that run for more than 5 minutes due to test files being statically linked with MSan. [1] https://clang.llvm.org/docs/MemorySanitizer.html [2] https://github.com/google/sanitizers/issues/247 Signed-off-by: Ilya Leoshkevich <[email protected]>
* libasm: Fix xdefault_pattern initializationIlya Leoshkevich2023-02-091-5/+11
| | | | | | | | | | | | | | | | | | | clang complains: asm_newscn.c:48:22: error: field 'pattern' with variable sized type 'struct FillPattern' not at the end of a struct or class is a GNU extension [-Werror,-Wgnu-variable-sized-type-not-at-end] struct FillPattern pattern; ^ Fix by using a union instead. Define the second union member to be a char array 1 byte larger than struct FillPattern. This should be legal according to 6.7.9: If an object that has static or thread storage duration is not initialized explicitly, then ... if it is a union, the first named member is initialized (recursively) according to these rules, and any padding is initialized to zero bits. Signed-off-by: Ilya Leoshkevich <[email protected]>
* Do not use relative include paths in library files.Mark Wielaard2022-12-203-2/+8
| | | | | | | | | Rely on include dirs being set up correctly. Setup libdw AM_CPPFLAGS to include libebl directory. In libdwfl note that debuginfod.h is a generated file in the builddir. Only include it in the one file debuginfod-client.c that really needs it. Signed-off-by: Mark Wielaard <[email protected]>
* lib{asm,cpu,dw,dwfl,dwelf}: Move platform depended include into system.hYonggang Luo2022-10-286-7/+11
| | | | Signed-off-by: Yonggang Luo <[email protected]>
* Move the #include <libintl.h> into eu-config.hYonggang Luo2022-10-163-3/+0
| | | | | | | | | | So we do not need include in each file. And indeed the macro #define _(Str) dgettext ("elfutils", Str) access libintl function dgettext, so it's make more sense #include <libintl.h> in file eu-config.h Signed-off-by: Yonggang Luo <[email protected]>
* Remove redundant casts of memory allocating functions returning void *Dmitry V. Levin2021-09-0911-14/+25
| | | | | | | Return values of functions returning "void *", e.g. calloc, malloc, realloc, xcalloc, xmalloc, and xrealloc, do not need explicit casts. Signed-off-by: Dmitry V. Levin <[email protected]>
* Come up with startswith function.Martin Liska2021-05-122-1/+5
| | | | | | | New function in system.h that returns true if a string has a given prefix, false otherwise. Use it in place of strncmp. Signed-off-by: Martin Liška <[email protected]>
* Consistently define _(Str) using dgettext ("elfutils", Str)Dmitry V. Levin2020-12-162-3/+4
| | | | | | | | | | | | | | Move the definition of _(Str) macro to lib/eu-config.h which already provides a definition of N_(Str) macro. Since lib/eu-config.h is appended to config.h, it is included into every compilation unit and therefore both macros are now universally available. Remove all other definitions of N_(Str) and _(Str) macros from other files to avoid conflicts and redundancies. The next step is to replace all uses of gettext(Str) with _(Str). Signed-off-by: Dmitry V. Levin <[email protected]>
* libasm: fix spelling typos in commentsDmitry V. Levin2020-12-123-2/+7
| | | | | | | endianess -> endianness setion -> section Signed-off-by: Dmitry V. Levin <[email protected]>
* Remove unused Makefile variable GCC_INCLUDEDmitry V. Levin2020-12-112-1/+4
| | | | | | It appears to be unused since the first commit in the revision history. Signed-off-by: Dmitry V. Levin <[email protected]>
* Fix automake warningsDmitry V. Levin2020-12-102-3/+8
| | | | | | | | | | | | | | | | | | | Apparently, commit 2f02e81510946a4c8e9157ad0b72d92894b9acd7 that removed $(EXEEXT) suffix from shared libraries was incomplete: it missed the fact that some libraries were included into noinst_PROGRAMS, resulting to the following automake warnings: libasm/Makefile.am:66: warning: deprecated feature: target 'libasm.so' overrides 'libasm.so$(EXEEXT)' libdw/Makefile.am:114: warning: deprecated feature: target 'libdw.so' overrides 'libdw.so$(EXEEXT)' libelf/Makefile.am:116: warning: deprecated feature: target 'libelf.so' overrides 'libelf.so$(EXEEXT)' Fix this by renaming noinst_PROGRAMS to noinst_DATA and removing no longer needed lib{asm,dw,elf}_so_SOURCES variables and add lib{asm,dw,elf).so to CLEANFILES. Fixes: 2f02e8151094 ("Drop $(EXEEXT) suffix from shared libraries") Signed-off-by: Dmitry V. Levin <[email protected]> Signed-off-by: Mark Wielaard <[email protected]>
* Drop $(EXEEXT) suffix from shared librariesDmitry V. Levin2020-12-062-1/+5
| | | | | | | | | According to GNU Automake documentation [1], $(EXEEXT) is the suffix that should be used for executables, it is not applicable for shared libraries. [1] https://www.gnu.org/software/automake/manual/html_node/EXEEXT.html Signed-off-by: Dmitry V. Levin <[email protected]>
* tests: Run valgrind also on binary tests.Mark Wielaard2020-10-312-2/+7
| | | | | | | | | | | When configuring with --enable-valgrind we were only running valgrind on tests with a shell wrapper script. This patch makes sure to also run valgrind on "pure" binary tests. This found one small issue in libasm where we could be writing some uninitialized padding to an ELF file. And there were a couple tests that didn't clean up all the resources they used. Both issues are also fixed with this patch. Signed-off-by: Mark Wielaard <[email protected]>
* Only typedef Ebl once.Mark Wielaard2020-07-232-1/+5
| | | | | | | | | | | | | | | | Since commit 287a18452 libasm.h defines an opague Ebl handle. This is fine, except for (internal) code that also includes libebl.h. Since C11 having multiple typedefs for the same thing is fine, but we do build using GNU/C99. This also allows multiple same typedefs, except for (very) old GCCs. This only affects internal code, since libebl.h isn't a public header. For internal code, only add the typedef in libebl.h when libasm.h hasn't been included. Make sure all code that includes both headers includes libasm.h first. Signed-off-by: Mark Wielaard <[email protected]>
* libasm: Make libasm.h include work without relying on any other include.Mark Wielaard2020-07-182-0/+5
| | | | | | | | | | | | | The public headers should be usable when includes as is. libasm.h wasn't because it was using gelf.h data structures without include gelf.h. Include it now in libasm.h. Add a new testcase run-test-includes.sh to test all public headers can be included "standalone". https://sourceware.org/bugzilla/show_bug.cgi?id=26176 Signed-off-by: Mark Wielaard <[email protected]>
* libasm: Fix double fclose in asm_end.Mark Wielaard2020-04-262-1/+5
| | | | | | | | | | | GCC10 -fanalyzer found a double fclose in asm_end. asm_end can call text_end, which calls fclose and checks for errors, then asm_end calls __libasm_finictx which can call fclose again (but doesn't check for errors). Call fflush in text_end instead. fflush will generate the same error fclose would if something went wrong writing out the file. Signed-off-by: Mark Wielaard <[email protected]>
* libasm.h: Don't include libebl.h. Define an opaque Ebl handle.Mark Wielaard2020-01-123-1/+7
| | | | | | | | | Using libasm isn't really usable without a way to create an Ebl handle. But we don't support libebl.h (and libebl itself). Just define the Ebl handle as an opaque struct. Code that uses it needs to figure out how to instantiate one itself (they cannot in any supportable way...) Signed-off-by: Mark Wielaard <[email protected]>
* libasm: Link against libebl_pic.a.Mark Wielaard2019-08-282-1/+5
| | | | Signed-off-by: Mark Wielaard <[email protected]>
* libasm: Check return value of gelf_update_ehdr in asm_end.Mark Wielaard2019-03-062-1/+9
| | | | | | | In theory the gelf_update_ehdr call could fail. Immediately report an error in that case. Signed-off-by: Mark Wielaard <[email protected]>
* Check sh_entsize is not zero.Mark Wielaard2018-10-202-0/+6
| | | | | | | | | There were some recent bug reports where we trusted the ELF section header to be sane and divided the sh_size by the sh_entsize to get the number of objects in the section. This would cause a divide by zero if the file was corrupt and the sh_entsize was zero. Add checks for any such code. Signed-off-by: Mark Wielaard <[email protected]>
* Consolidate error.h inclusion in system.hRoss Burton2018-07-053-2/+8
| | | | | | | | | error.h isn't standard and so isn't part of the musl C library. To easy future porting, consolidate the inclusion of error.h into system.h. https://sourceware.org/bugzilla/show_bug.cgi?id=21008 Signed-off-by: Ross Burton <[email protected]>
* Check for -z,defs, -z,relro, -fPIC, -fPIE before using themUlf Hermann2017-08-182-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | Those flags are not available on all platforms, and omitting them when not available will not cause any harm. In particular: -z,defs disallows undefined symbols in object files. This option is unsupported if the target binary format enforces the same condition already. Furthermore it is only a compile time sanity check. When it is omitted, the same binary is produced. -z,relro instructs the loader to mark sections read-only after loading the library, where possible. This is a hardening mechanism. If it is unavailable, the functionality of the code is not affected in any way. -fPIC instructs the compiler to produce position independent code. While this is preferable to relocatable code, relocatable code also works and may even be faster. Relocatable code might just be loaded into memory multiple times for different processes. -fPIE is the same thing as -fPIC for executables rather than shared libraries. Signed-off-by: Ulf Hermann <[email protected]>
* Unify linking of libasm, libelf, libdw, backendsUlf Hermann2017-07-242-6/+19
| | | | | | | | | | Link them all with -z,defs,-z,relro,--no-undefined, provide complete dependencies for the link steps, and add libeu.a to each one. libeu.a contains useful library functionality that each of them might use. The linker will strip unneeded symbols, so linking it in won't hurt even if none of the functions are used. Signed-off-by: Ulf Hermann <[email protected]>
* Fix nesting of bracesUlf Hermann2017-04-282-1/+5
| | | | | | | | The way it was before it didn't actually test if elf_update failed, but rather did something random. !!(<some number>) is a boolean and boolean true can be represented as anything non-0, including negative numbers. Signed-off-by: Ulf Hermann <[email protected]>
* libasm: Fix one GCC7 -Wformat-truncation=2 warning.Mark Wielaard2017-03-242-3/+9
| | | | | | | | | | | Make sure that if we have really lots of labels the tempsym doesn't get truncated because it is too small to hold the whole name. This doesn't enable -Wformat-truncation=2 or fix other "issues" pointed out by enabling this warning because there are currently some issues with it. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79448 Signed-off-by: Mark Wielaard <[email protected]>
* Check for existence of mempcpyUlf Hermann2017-02-172-1/+5
| | | | | | If it doesn't exist, provide a definition based on memcpy. Signed-off-by: Ulf Hermann <[email protected]>
* lib: Provide MAX and MIN in system.hAkihiko Odaki2016-10-122-1/+4
| | | | | | | | | | This change also creates a new header file libeu.h to provide the prototypes for the function of libeu. That hides the definition of function crc32, which can conflict with zlib, from libelf. It also prevents mistakes to refer those functions from a component which doesn't link with libeu, such as libelf. Signed-off-by: Akihiko Odaki <[email protected]>
* dwelf: Add string table functions from ebl.Mark Wielaard2016-08-0312-50/+72
| | | | | | | | | | | | | | | | Move the strtab functions from libebl to libdw. Programs often want to create ELF/DWARF string tables. We don't want (static) linking against ebl since those are internal functions that might change. This introduces dwelf_strtab_init, dwelf_strtab_add, dwelf_strtab_add_len, dwelf_strtab_finalize, dwelf_strent_off, dwelf_strent_str and dwelf_strtab_free. Documentation for each has been added to libdwelf.h. The add fucntion got a variant that takes the length explicitly and finalize was changed to return NULL on out of memory instead of aborting. All code and tests now uses the new functions. Signed-off-by: Mark Wielaard <[email protected]>
* Add support for BPFRichard Henderson2016-06-282-2/+6
| | | | Signed-off-by: Richard Henderson <[email protected]>
* Fix GCC6 -Wnull-dereference warnings.Mark Wielaard2016-02-222-2/+7
| | | | | | | | | | | | | | | | | | | | | | | asm_begin.c: In function ‘asm_begin’: asm_begin.c:62:7: error: potential null pointer dereference [-Werror=null-dereference] __fsetlocking (result->out.file, FSETLOCKING_BYCALLER); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ We set result to NULL just before this call in case of error. Fixed by only calling __fsetlocking when result is not NULL. strip.c: In function ‘handle_elf.constprop’: strip.c:1270:31: error: null pointer dereference [-Werror=null-dereference] elf_assert ((versiondata->d_size / sizeof (Elf32_Word)) ~~~~~~~~~~~^~~ src/strip.c:597:37: note: in definition of macro ‘elf_assert’ #define elf_assert(test) do { if (!(test)) goto illformed; } while (0) ^~~~ That is the wrong check, we want to check shndxdata, not versiondata here. Signed-off-by: Mark Wielaard <[email protected]>
* Improve AM_SILENT_RULES coverageJosh Stone2015-10-062-2/+6
| | | | | | | | | | | Note, elfutils does not explicitly enable AM_SILENT_RULES. It's only available starting from automake 1.11, but starting from automake 1.13 silent rules are always generated, defaulting to verbose. $(AM_V_foo) additions should be no-ops on systems that don't support silent rules. To be silent, use "./configure --enable-silent-rules" or "make V=0". Signed-off-by: Josh Stone <[email protected]>
* Properly mark all internal function definitions.Mark Wielaard2015-09-234-0/+10
| | | | | | | | | | | | | | | | | Since we banned old style function definitions GCC is able to diagnose function definitions that don't match the function declaration: elf32_getehdr.c:78: error: conflicting types for ‘__elf64_getehdr_wrlock’ libelfP.h:498: note: previous declaration of ‘__elf64_getehdr_wrlock’ This happens on i386 because there internal functions are marked with: # define internal_function __attribute__ ((regparm (3), stdcall)) Make sure all internal function declarations and definitions are marked with internal_function. Signed-off-by: Mark Wielaard <[email protected]>
* Remove old-style function definitions.Mark Wielaard2015-09-2318-72/+30
| | | | | | | We already require -std=gnu99 and old-style function definitions might hide some compiler warnings. Signed-off-by: Mark Wielaard <[email protected]>
* Replace some K&R function definitions with ansi-C definitions.Chih-Hung Hsieh2015-09-074-10/+10
| | | | | Signed-off-by: Chih-Hung Hsieh <[email protected]> Signed-off-by: Mark Wielaard <[email protected]>
* avoid scary command outputUlrich Drepper2014-12-182-2/+6
| | | | | | The commands to check for invalid text relocations in the generated DSOs shouldn't be displayed. They contain an echo which prints the text. This patch suppresses the commands from being printed.
* Add configure --disable-textrelcheck option to enable CC=afl-fuzz on 32bit.Mark Wielaard2014-12-042-1/+5
| | | | | | | | | | | | | | | Using american fuzzy lop has found a lot of issues. It would be nice to make using it a bit easier. Our build files make sure that no shared library uses text relocations, but afl-gcc will insert some on i686. http://www.akkadia.org/drepper/textrelocs.html Now CC=afl-gcc ./configure --disable-textrelcheck will allow them so that afl can instrument the libraries. Don't try to use or install them except with afl-fuzz. When selinux is enabled it might prevent loading the libraries with DT_TEXTREL set. Signed-off-by: Mark Wielaard <[email protected]>
* Remove mudflap build option.Mark Wielaard2014-04-182-5/+5
| | | | | | | | | The --enable-mudflap configure build has been broken for 2 years without anybody apparently noticing. GCC 4.9 removed mudflap support. Before release we now run make distcheck with valgrind support. Removal of the mudflap configure option simplifies the build a little. Signed-off-by: Mark Wielaard <[email protected]>
* Check for prefixed ar, readelf, and nmMichael Forney2013-11-051-1/+1
| | | | | | | | Sometimes with cross-compile toolchains, the tools are prefixed with the target arch. Using AC_CHECK_TOOL looks for tools named like this. Signed-off-by: Michael Forney <[email protected]> Signed-off-by: Mark Wielaard <[email protected]>
* Updates for Automake 1.13.Mark Wielaard2013-04-262-1/+5
| | | | | | | autoreconf will install config/test-driver, ignore it. Update gettext m4 and po files to version 0.18.2. Use AM_CPPFLAGS instead of INCLUDES. All changes are backward compatible with Automake 1.11.
* Update name, license and contributor policy.Mark Wielaard2012-06-0535-560/+665
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Change name from "Red Hat elfutils" to "elfutils". * Update license of standalone tools and test from GPLv2 to GPLv3+. * Change license of libraries from GPLv2+exception to GPLv2/LGPLv3+. * Add Developer Certificate of Origin based contributor policy. top-level: - COPYING: Upgraded from GPLv2 to GPLv3. - CONTRIBUTING, COPYING-GPLv2, COPYING-LGPLv3: New files. - NEWS: Added note about new contribution and license policy. - Makefile.am: Updated to GPLv3, added new files to EXTRA_DIST. - configure.ac: Update to GPLv3, changed AC_INIT name to 'elfutils'. backends, lib, libasm, libcpu, libdw, libdwfl, libebl, libelf: - All files updated to GPLv2/LGPLv3+. Except some very small files (<5 lines) which didn't have any headers at all before, the linker .maps files and the libcpu/defs files which only contain data and libelf/elf.h which comes from glibc and is under LGPLv2+. config: - elfutils.spec.in: Add new License: headers and new %doc files. - Update all license headers to GPLv2/LGPLv3+ for files used by libs. src, tests: - All files updated to GPLv3+. Except for the test bz2 data files, the linker maps and script files and some very small files (<5 lines) that don't have any headers. Signed-off-by: Richard Fontana <[email protected]> Signed-off-by: Mark Wielaard <[email protected]>
* Remove .mtn-ignore and .cvsignore files.Mark Wielaard2012-06-051-1/+0
| | | | We use .gitignore these days.
* libasm: Remove an unused variable.Roland McGrath2011-02-082-4/+5
|
* Clean up and consolidate automake magic to reduce duplication and to work ↵Roland McGrath2010-02-152-24/+9
| | | | with --disable-dependency-tracking.
* Require __thread support in compiler.Ulrich Drepper2009-01-103-110/+11
| | | | Rename --enable-tls to more appropriate --enable-thread-safety.
* merge of '4c5dbb5e116d9a9c7f9014a3dcbabba8e7d89327'Roland McGrath2008-12-042-1/+10
| | | | and 'fddaff07d3c095a3d26f41fe7a7da147c024bd96'
* propagate from branch 'com.redhat.elfutils.roland.pending.libelf-threads' ↵Ulrich Drepper2008-12-042-10/+1
| | | | | | (head fc97c9c202b5d7d7699a3b1d5c53007a2ef37bb1) to branch 'com.redhat.elfutils' (head 67cccb9bfffc1a7fe3d8d355a2d9b6d0e489ff81)
* [USE_TLS] Link libasm.so with libpthread.Ulrich Drepper2008-12-042-1/+10
|