summaryrefslogtreecommitdiff
path: root/src/ChangeLog
Commit message (Collapse)AuthorAgeFilesLines
* libdw,readelf: Recognize DW_CFA_AARCH64_negate_ra_stateMark Wielaard2020-09-071-0/+7
| | | | | | | | | | | | | | | | | | | | DW_CFA_AARCH64_negate_ra_state is used on aarch64 to indicate whether or not the return address is mangled or not. This has the same value as the DW_CFA_GNU_window_save. So we have to pass around the e_machine value of the process or core we are inspecting to know which one to use. Note that it isn't actually implemented yet. It needs ARMv8.3 hardware. If we don't have such hardware it is enough to simply ignore the DW_CFA_AARCH64_negate_ra_state (and not confuse it with DW_CFA_GNU_window_save) to get backtraces to work on aarch64. Add a testcase for eu-readelf --debug-dump=frames to show the value is correctly recognized. Also don't warn we cannot find any DWARF if we are just dumping frames (those will come from .eh_frame if there is no .debug_frame). Signed-off-by: Mark Wielaard <mark@klomp.org>
* readelf: base address entry can be firstMark Wielaard2020-09-071-0/+6
| | | | | | | | | In both debug_ranges and debug_loc a base address entry can be the first in the range or loc list. If so print the offset and set first to false. Otherwise don't print the entry list offset, but do set first to false. Signed-off-by: Mark Wielaard <mark@klomp.org>
* elflint: Handle .debug_line_str as .debug_strMark Wielaard2020-09-051-0/+4
| | | | | | The new DWARF5 .debug_line_str is identical to the .debug_str section. Signed-off-by: Mark Wielaard <mark@klomp.org>
* readelf: It is not an error if there are no line number statementsMark Wielaard2020-08-261-0/+5
| | | | | | | | | | It can happen that there are no line number statements at the end of a debug line section. So don't check that there are any more bytes after the last file entry. And print "No line number statements." libdw already got this corner case correct. Signed-off-by: Mark Wielaard <mark@klomp.org>
* elfclassify: Handle fwrite to stdout failing.Mark Wielaard2020-07-231-0/+4
| | | | | | In theory an fwrite can fail, if so, signal it by calling issue (). Signed-off-by: Mark Wielaard <mark@klomp.org>
* libdwfl, src: Replace some asserts with proper check or error messages.Mark Wielaard2020-07-191-0/+7
| | | | | | | | | library code really shouldn't assert and for utilities a proper error message is better than crashing with an assert. https://sourceware.org/bugzilla/show_bug.cgi?id=26176 Signed-off-by: Mark Wielaard <mark@klomp.org>
* ar, ranlib: Call fchown before fchmod, explicitly check and ignore errors.Mark Wielaard2020-06-191-0/+8
| | | | | | | | | | | | | In ar and ranlib we don't mind if the fchown call fails (it normally would, then the file simply gets own by the current user). We used to call fchown before fchmod, but that might ignore (or reset) some mode flags, so call fchown first, then try fchmod (like we already do in elfcompress). Also explicitly test and then ignore any errors for chown. We used to do some asm trick, but that confuses some static analyzers (and it is somewhat unreadable). Also split out the giant if statements to make them a little bit more understandable. Signed-off-by: Mark Wielaard <mark@klomp.org>
* elflint: Explicitly check and ignore elf_compress error.Mark Wielaard2020-06-191-0/+5
| | | | | | | | | | We just want to make sure that any section data is decompressed before use, if the section was already decompressed that is fine, so just ignore any errors. The make this more clear, explicitly check for errors, then don't do anything. This is better than silently ignoring since everywhere else in the code we do explicitly check for errors. Signed-off-by: Mark Wielaard <mark@klomp.org>
* nm: Handle corrupt symbol name table.Mark Wielaard2020-06-071-0/+8
| | | | | | | | | We try to sort symbol by name (when neither -n nor -p are given). This could crash if the symbol name table was corrupt. Use elf_strptr to get the symbol name and use the empty string in case a name couldn't be found. Signed-off-by: Mark Wielaard <mark@klomp.org>
* nm: Explicitly print weak 'V' or 'T' and common 'C' symbols.Mark Wielaard2020-06-071-0/+10
| | | | | | | | | | | | | Mimic binutils nm for bsd and posix formats which uses 'V' for weak symbols, 'C' for common symbols and 'T' for weak functions. Also fix some formatting issues. Don't print undefined addresses as zeros, but make sure there is enough padding instead. Just print UNIQUE for GNU_UNIQUE to make it fit 6 chars, like other binding names in sysv format. https://sourceware.org/bugzilla/show_bug.cgi?id=25227 Signed-off-by: Mark Wielaard <mark@klomp.org>
* libelf: Sync elf.h from glibc.Mark Wielaard2020-06-041-0/+4
| | | | | | | There is now finally a PT_GNU_PROPERTY define. Also EM_ARC_COMPACT2 got renamed to EM_ARCV2. Signed-off-by: Mark Wielaard <mark@klomp.org>
* size: Also obey radix printing for bsd format.Mark Wielaard2020-05-141-0/+4
| | | | | | | | eu-size already prints according to the given radix for sysv format, but not for the bsd format. Fix that. Reported-by: Ulrich Drepper <drepper@redhat.com> Signed-off-by: Mark Wielaard <mark@klomp.org>
* src: Check ebl_openbackend result before using ebl handle.Mark Wielaard2020-05-141-0/+7
| | | | | | | | | GCC10 -fanalyzer plus -flto sees that ebl_openbackend can fail and return NULL. Most of the time we will get a dummy ebl, but in case of out of memory or corrupt ELF header it might return NULL. Make sure that we report a (fatal) error in that case in all tools. Signed-off-by: Mark Wielaard <mark@klomp.org>
* libdw, readelf: Handle GCC LTO .gnu.debuglto_ prefix.Mark Wielaard2020-04-221-0/+4
| | | | | | | | | GCC puts (partial) DWARF debuginfo into sections prefixed with .gnu.debuglto_. Handle those sections as if they are normal .debug sections (which they are). This allows showing the DWARF that gcc puts into ET_REL files compiled with -flto. Signed-off-by: Mark Wielaard <mark@klomp.org>
* elflint: Allow SHF_EXCLUDE as generic section flag when --gnu is given.Mark Wielaard2020-04-211-0/+5
| | | | | | | | Strictly speaking SHF_EXCLUDE is a processor specific section flag, but it is used generically in the GNU toolchain. For example when adding .gnu.lto_ sections. Signed-off-by: Mark Wielaard <mark@klomp.org>
* readelf, elflint: Handle PT_GNU_PROPERTY.Mark Wielaard2020-02-181-0/+4
| | | | | | | | | binutils 2.32 ld emits a new PT_GNU_PROPERTY segment that overlaps with the PT_NOTE segment covering the .note.gnu.property section data. https://sourceware.org/bugzilla/show_bug.cgi?id=25511 Signed-off-by: Mark Wielaard <mark@klomp.org>
* elflint: Check sh_info for symtab isn't too big.Mark Wielaard2020-02-181-0/+4
| | | | | | | | The sh_info field of the symtab says how many symbols are in the section. Make sure at least that many symbols fit in the section. Reported-by: Ulrich Drepper <drepper@redhat.com> Signed-off-by: Mark Wielaard <mark@klomp.org>
* nm: Fix nm --external sysv format output.Mark Wielaard2020-01-161-0/+5
| | | | | | | | | | | Partial revert of commit 66f4c37d497bdde040a33f299b12163f044b1bf2. If index zero wasn't a real symbol it has already been filtered out in show_symbols so don't skip it in show_symbols_sysv. https://sourceware.org/bugzilla/show_bug.cgi?id=25227 Reported-by: Enzo Matsumiya <ematsumiya@suse.com> Signed-off-by: Mark Wielaard <mark@klomp.org>
* Fix BUILD_STATIC build and enable gcov for debuginfod.Mark Wielaard2019-11-261-0/+4
| | | | | | | | libdw now always needs -lpthread and -ld even when BUILD_STATIC. BUILD_STATIC is only used when doing a gcov enabled build. Enable gcov coverage also for debuginfod. Signed-off-by: Mark Wielaard <mark@klomp.org>
* unstrip: Check symbol strings are terminated.Mark Wielaard2019-10-291-0/+5
| | | | | | | | | | | A corrupt ELF file could contain a .strtab section that wasn't properly zero terminated. If so we could add a non-terminated string to the dwelf_strtab functions, which could then crash because they would read past the .strtab section data. https://sourceware.org/bugzilla/show_bug.cgi?id=25069 Signed-off-by: Mark Wielaard <mark@klomp.org>
* unstrip: Don't try to write extra bogus versym data.Mark Wielaard2019-10-261-0/+5
| | | | | | | | | | | If the sh_entsize of the symver section was bogus (bigger than necessary) then some bogus data would be written out (except that then fails because pwrite would probably fail). Fix that by ignoring the bogus sh_entsize and use the actual symver data size. https://sourceware.org/bugzilla/show_bug.cgi?id=25077 Signed-off-by: Mark Wielaard <mark@klomp.org>
* unstrip: Add sanity check for bogus sh_offset of allocated sections.Mark Wielaard2019-10-261-0/+4
| | | | | | | | | | | | | | unstrip tries to preserve any allocated section offset in an executable or shared library. If the offset is extremely large that would cause the disk to fill up because we will write out a file with lots of padding to put the section contents at that particular offset. Add a sanity check that makes sure we just error out if there is such a bogus offset by checking that no offset is larger than the original ELF file size. https://sourceware.org/bugzilla/show_bug.cgi?id=25083 Signed-off-by: Mark Wielaard <mark@klomp.org>
* unstrip: Add various checks for bad input data.Mark Wielaard2019-10-261-0/+18
| | | | | | | | | | There were various ways to crash eu-unstrip with bad ELF input data. Add various tests against bad data and allocate some structures on the heap instead of on the stack. https://sourceware.org/bugzilla/show_bug.cgi?id=25082 Signed-off-by: Mark Wielaard <mark@klomp.org>
* elflint, readelf: enhance error diagnosticsDmitry V. Levin2019-10-041-0/+6
| | | | | | | When an input file cannot be opened, include its name into the error diagnostics. Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
* readelf: Add --dyn-sym option.Mark Wielaard2019-09-101-0/+8
| | | | | | | | | | | It is already possible to select the symbol table to print by name, using --symbols=SECTION. This allows printing the dynamic symbol table with --symbols=.dynsym. binutils readelf allows printing just the dynamic symbol table by type using --dyn-sym. Add the same option and document it. Also add a testcase to show --symbols=.dynsym and --dyn-sym produce the same output. Signed-off-by: Mark Wielaard <mark@klomp.org>
* readelf: Actually dump hex or strings when -p or -x get section number.Mark Wielaard2019-08-291-0/+5
| | | | | | | | The readelf code did parse section numbers, but then failed to actually dump the section found. Fixed by actually calling the dump function (either the hex or string variant). Add testcase for readelf -x num. Signed-off-by: Mark Wielaard <mark@klomp.org>
* nm: Fix latent memory leak in show_symbols.Mark Wielaard2019-08-291-0/+5
| | | | | | | | | | | | If there are just a handful of symbols then memory for them is allocated on the stack, otherwise the memory is malloced. So before freeing the memory we need to check the number of entries to know if the memory was heap allocated or not. But since not all entries might be used we might have decreased the number of entries to the number we will actually show. Remember the original symbol entries to not have a memory leak. Signed-off-by: Mark Wielaard <mark@klomp.org>
* Don't use dlopen() for libebl modulesOmar Sandoval2019-08-291-0/+7
| | | | | | | | | | | | Currently, architecture-specific code for libebl exists in separate libebl_$ARCH.so libraries which libebl loads with dlopen() at runtime. This makes it impossible to have standalone, statically-linked binaries which use libdwfl if they depend on any architecture-specific functionality. Additionally, when these libraries cannot be found, the failure modes are non-obvious. So, let's get rid of libebl_$arch.so and move it all into libdw.so/libdw.a, which simplifies things considerably. Signed-off-by: Omar Sandoval <osandov@fb.com>
* readelf: Add optional "SECTION" argument for --notes.Mark Wielaard2019-08-261-0/+7
| | | | | | | | | There are multiple sections that can contain ELF Notes. It is sometimes nice to just list the notes from a specific section. -n, --notes[=SECTION] Display the ELF notes Signed-off-by: Mark Wielaard <mark@klomp.org>
* elfclassify: New tool to analyze ELF objects.Florian Weimer2019-08-131-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Usage: elfclassify [OPTION...] FILE... Determine the type of an ELF file. All of the classification options must apply at the same time to a particular file. Classification options can be negated using a "--not-" prefix. Since modern ELF does not clearly distinguish between programs and dynamic shared objects, you should normally use either --executable or --shared to identify the primary purpose of a file. Only one of the --shared and --executable checks can pass for a file. If you want to know whether an ELF object might a program or a shared library (but could be both), then use --program or --library. Some ELF files will classify as both a program and a library. If you just want to know whether an ELF file is loadable (as program or library) use --loadable. Note that files that only contain (separate) debug information (--debug-only) are never --loadable (even though they might contain program headers). Linux kernel modules are also not --loadable (in the normal sense). Without any of the --print options, the program exits with status 0 if the requested checks pass for all input files, with 1 if a check fails for any file, and 2 if there is an environmental issue (such as a file read error or a memory allocation error). When printing file names, the program exits with status 0 even if no file names are printed, and exits with status 2 if there is an environmental issue. On usage error (e.g. a bad option was given), the program exits with a status code larger than 2. The --quiet or -q oose_filestion suppresses some error warning output, but doesn't change the exit status. Classification options --core File is an ELF core dump file --debug-only File is a debug only ELF file (separate .debug, .dwo or dwz multi-file) --elf File looks like an ELF object or archive/static library (default) --elf-archive File is an ELF archive or static library --elf-file File is an regular ELF object (not an archive/static library) --executable File is (primarily) an ELF program executable (not primarily a DSO) --library File is an ELF shared object (DSO) (might also be an executable) --linux-kernel-module File is a linux kernel module --loadable File is a loadable ELF object (program or shared object) --program File is an ELF program executable (might also be a DSO) --shared File is (primarily) an ELF shared object (DSO) (not primarily an executable) --unstripped File is an ELF file with symbol table or .debug_* sections and can be stripped further Input flags -f, --file Only classify regular (not symlink nor special device) files --no-stdin Do not read files from standard input (default) --stdin Also read file names to process from standard input, separated by newlines --stdin0 Also read file names to process from standard input, separated by ASCII NUL bytes -z, --compressed Try to open compressed files or embedded (kernel) ELF images Output flags --matching If printing file names, print matching files (default) --no-print Do not output file names --not-matching If printing file names, print files that do not match --print Output names of files, separated by newline --print0 Output names of files, separated by ASCII NUL Additional flags -q, --quiet Suppress some error output (counterpart to --verbose) -v, --verbose Output additional information (can be specified multiple times) -?, --help Give this help list --usage Give a short usage message -V, --version Print program version Report bugs to https://sourceware.org/bugzilla. Signed-off-by: Florian Weimer <fweimer@redhat.com> Signed-off-by: Mark Wielaard <mark@klomp.org>
* Add backend support for C-SKYMao Han2019-07-171-0/+4
| | | | | | | | | C-SKY V2 ABI manual: https://github.com/c-sky/csky-doc/blob/master/C-SKY_V2_CPU_Applications_Binary_Interface_Standards_Manual.pdf C-SKY architecture user guide: https://github.com/c-sky/csky-doc/blob/master/CSKY%20Architecture%20user_guide.pdf Signed-off-by: Mao Han <han_mao@c-sky.com>
* libdwelf: Add dwelf_elf_e_machine_string and use it in readelf.Mark Wielaard2019-07-101-0/+5
| | | | | | | | | | | | | | | | To print eh human readable description of the ELF e_machine header field we used the ebl name. But this is not set for most EM constants. Introduce a new function dwelf_elf_e_machine_string that does work for all known EM values. Use that in eu-readelf to print a string representation of the e_machine value. Since this was the only usage of ebl->name, remove that from struct ebl. Also add a testcase that makes sure dwelf_elf_e_machine_string works for all EM values in the libelf/elf.h header so we will immediately notice when a new value appears. Signed-off-by: Mark Wielaard <mark@klomp.org>
* stack: Fix error message when dwfl_core_file_attach fails.Mark Wielaard2019-06-251-0/+4
| | | | | Reported-by: Mao Han <han_mao@c-sky.com> Signed-off-by: Mark Wielaard <mark@klomp.org>
* strip don't mmap debug output file.Mark Wielaard2019-06-241-0/+5
| | | | | | | | | | | | | | | | | Using ELF_C_WRITE_MMAP sometimes causes unexpected errors when disk space is low. When writing out the file, the output file is first extended so that it covers the whole file/mmap size. But it might be that the file system allowed the extension as a sparse file. In that case writing to the file through the mmap might still fail and produce a SIGBUS if the disk is full. This is confusing to the user. Using ELF_C_WRITE will produce "normal" errors when the file cannot be written out. It also seems to use less memory because the debug file is created from scratch. So the memory is first read into the ELF data structure buffers, then written out as a whole. In this case the mmap output buffer is just overhead. Signed-off-by: Mark Wielaard <mark@klomp.org>
* readelf: Decode DW_AT_discr_list block attributes.Mark Wielaard2019-05-141-0/+7
| | | | | | | | | | | | | | | | Decode DW_AT_descr_list blocks using the DW_DSC values. This requires knowing the signedness of the discriminant. Which means the attr_callback function needs access to the parent DIE. Pass the whole DIE path, plus the current level. That way the type of the discriminant can be looked up in the variant_part (parent) DIE of the variant DIE (which has the discr_list attribute). Add a testcase using both signed and unsigned discriminants. https://sourceware.org/bugzilla/show_bug.cgi?id=24509 Signed-off-by: Mark Wielaard <mark@klomp.org>
* readelf: Clean up section lists after usage.Mark Wielaard2019-05-141-0/+5
| | | | Signed-off-by: Mark Wielaard <mark@klomp.org>
* unstrip: Robustify gelf_getshdr and gelf_getsymshndx calls.Mark Wielaard2019-04-281-0/+6
| | | | Signed-off-by: Mark Wielaard <mark@klomp.org>
* size: Robustify against gelf_getshdr returning NULL.Mark Wielaard2019-04-281-0/+7
| | | | Signed-off-by: Mark Wielaard <mark@klomp.org>
* nm: Simplify naming of invalid sections, check shdr isn't NULL.Mark Wielaard2019-04-281-0/+5
| | | | | | | | | When shdr is NULL or the sh_name index is invalid, don't try to use it. Just call the section "[invalid section name]". Don't try to be too smart by creating a dynamic invalid name using alloca to simplify memory usage in this exceptional case. Signed-off-by: Mark Wielaard <mark@klomp.org>
* elfcmp: Handle bad sections without crashing.Mark Wielaard2019-04-281-0/+4
| | | | | | | If we cannot get the Shdr of a section then don't try to use or compare them. Signed-off-by: Mark Wielaard <mark@klomp.org>
* readelf: Print DW_AT_data_member_location as decimal offset, not hex number.Mark Wielaard2019-04-101-0/+5
| | | | | | | | | | | | | The data_member_location attribute was printed as a hex number, but other constant attributes like bit_offset, byte_size or alignment were printed as decimal numbers. This is confusing. The reason that data_member_location was printed as hex seemed to have been because it could also have been a location description, in which case it might have been of DW_FORM_loclist, for which it makes sense to print as hex offset (between square brackets). Signed-off-by: Mark Wielaard <mark@klomp.org>
* readelf: print_debug_macinfo_section, check cus[0] is not the sentinel.Mark Wielaard2019-03-291-1/+6
| | | | | | | | If there are no CUs at all we can not find any CU DIE file. https://sourceware.org/bugzilla/show_bug.cgi?id=24398 Signed-off-by: Mark Wielaard <mark@klomp.org>
* strip: Files with symbols referring to non-existing sections are illformedMark Wielaard2019-03-271-0/+4
| | | | | | | | | | The check added in commit 4540ea98c "strip: Fix check test for SHN_XINDEX symbol" was not complete. The (extended) section index should also exist. If it doesn't exist, mark the file as illformed. https://sourceware.org/bugzilla/show_bug.cgi?id=24385 Signed-off-by: Mark Wielaard <mark@klomp.org>
* strip: Fix check test for SHN_XINDEX symbol.Mark Wielaard2019-01-241-0/+4
| | | | | | | | | | | | | The check for whether a symbol used the extended section table was wrong causing the run-strip-test-many.sh testcase to declare the testfile was an illformed file. Fixing this exposed a strict elfutils check for the '.shstrtab' section having this exact name and a SHT_STRTAB type. This might be a little too strict, but easily worked around by changing the name of the "old" shstrtab section in the addsections program. Signed-off-by: Mark Wielaard <mark@klomp.org>
* readelf: Don't go past end of line data reading unknown opcode parameters.Mark Wielaard2019-01-221-0/+5
| | | | | | https://sourceware.org/bugzilla/show_bug.cgi?id=24116 Signed-off-by: Mark Wielaard <mark@klomp.org>
* libdw: Check terminating NUL byte in dwarf_getsrclines for dir/file table.Mark Wielaard2019-01-221-0/+5
| | | | | | | | | | | | | For DWARF version < 5 the .debug_line directory and file tables consist of a terminating NUL byte after all strings. The code used to just skip this without checking it actually existed. This could case a spurious read past the end of data. Fix the same issue in readelf. https://sourceware.org/bugzilla/show_bug.cgi?id=24102 Signed-off-by: Mark Wielaard <mark@klomp.org>
* libebl: Check NT_PLATFORM core notes contain a zero terminated string.Mark Wielaard2019-01-161-0/+4
| | | | | | | | | | Most strings in core notes are fixed size. But NT_PLATFORM contains just a variable length string. Check that it is actually zero terminated before passing to readelf to print. https://sourceware.org/bugzilla/show_bug.cgi?id=24089 Signed-off-by: Mark Wielaard <mark@klomp.org>
* elflint: Allow PT_GNU_EH_FRAME segment to match SHT_X86_64_UNWIND section.Mark Wielaard2018-11-131-0/+5
| | | | | | | The gold linker might generate an .eh_frame_hdr with a SHT_X86_64_UNWIND type instead of a SHT_PROGBITS type. Signed-off-by: Mark Wielaard <mark@klomp.org>
* strip: Also handle gnu compressed debug sections with --reloc-debug-sectionsMark Wielaard2018-11-131-0/+5
| | | | | | | | | | | | | Check whether a section was gnu compressed and decompress it first before trying to resolve relocations. Recompress it afterwards. This found a bug in elf_compress_gnu which would use the "raw" file contents even if the user had just created the section (copying over the section from the original input file). Add compressed ET_REL tests to run-strip-reloc.sh testcase. Signed-off-by: Mark Wielaard <mark@klomp.org>
* Handle GNU Build Attribute ELF Notes.Mark Wielaard2018-11-131-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | GNU Build Attribute ELF Notes are generated by the GCC annobin plugin and described at https://fedoraproject.org/wiki/Toolchain/Watermark Unfortunately the constants aren't yet described in the standard glibc elf.h so they have been added to the elfutils specific elf-knowledge.h. The notes abuse the name owner field to encode some data not in the description. This makes it a bit hard to parse. We have to match the note owner name prefix (to "GA") to be sure the type is valid. We also cannot rely on the owner name being a valid C string since the attribute name and value can contain zero (terminators). So pass around namesz to the ebl note parsing functions. eu-elflint will recognize and eu-readelf -n will now show the notes: Note section [27] '.gnu.build.attributes' of 56080 bytes at offset 0x114564: Owner Data size Type GA 16 GNU Build Attribute OPEN Address Range: 0x2f30f - 0x2f30f VERSION: "3p8" GA 0 GNU Build Attribute OPEN TOOL: "gcc 8.2.1 20180801" GA 0 GNU Build Attribute OPEN "GOW": 45 GA 0 GNU Build Attribute OPEN STACK_PROT: 0 GA 0 GNU Build Attribute OPEN "stack_clash": TRUE GA 0 GNU Build Attribute OPEN "cf_protection": 0 GA 0 GNU Build Attribute OPEN "GLIBCXX_ASSERTIONS": TRUE GA 0 GNU Build Attribute OPEN "FORTIFY": 0 GA 0 GNU Build Attribute OPEN PIC: 3 GA 0 GNU Build Attribute OPEN SHORT_ENUM: FALSE GA 0 GNU Build Attribute OPEN ABI: c001100000012 GA 0 GNU Build Attribute OPEN "stack_realign": FALSE A new test was added to run-readelf -n for the existing annobin file. Signed-off-by: Mark Wielaard <mark@klomp.org>