Commit Graph

4099 Commits

Author SHA1 Message Date
Alan Modra
5ab88688f0 Typo fixes in binutils doc
* doc/binutils.texi: Fix typos.
2021-12-21 16:58:57 +10:30
Alan Modra
682351b932 readelf: avoid a possible divide by zero
* readelf.c (process_section_headers): Check SHT_RELR entsize.
2021-12-19 12:24:16 +10:30
Alan Modra
dbc6a0e2e4 try_build_id_prefix gcc-10 -Wformat-security errors
dwarf.c:11300:3: error: format not a string literal and no format arguments [-Werror=format-security]
11300 |   f += sprintf (f, prefix);

	PR 28697
	* dwarf.c (try_build_id_prefix): Avoid -Wformat-security error.
2021-12-17 11:42:18 +10:30
Nick Clifton
61ab1364c7 When loading separate debug info files, also attempt to locate a file based upon the build-id.
PR 28697
	* dwarf.c (load_build_id_debug_file): New function.
	(try_build_id_prefix): New function.
	(check_for_and_load_links): Call load_build_id_debug_file.
	(debug_displays): Add entry for .note.gnu.build-id.
	* dwarf.h (enum dwarf_section_display_enum): Add
	note_gnu_build_id.
	* testsuite/binutils-all/debuginfod.exp (test_fetch_debuglink):
	Fix regexp for loads via debuglink section.
2021-12-16 14:05:40 +00:00
Alan Modra
161e87d121 PR28694, Out-of-bounds write in stab_xcoff_builtin_type
PR 28694
	* stabs.c (stab_xcoff_builtin_type): Make typenum unsigned.
	Negate typenum earlier, simplifying bounds checking.  Correct
	off-by-one indexing.  Adjust switch cases.
2021-12-15 11:51:26 +10:30
H.J. Lu
40eb8b92a1 Don't return the main file as the separate debug info
On Fedora 35,

$ readelf -d /usr/bin/npc

caused readelf to run out of stack since load_separate_debug_info
returned the input main file as the separate debug info:

(gdb) bt
 #0  load_separate_debug_info (
    main_filename=main_filename@entry=0x510f50 "/export/home/hjl/.cache/debuginfod_client/dcc33c51c49e7dafc178fdb5cf8bd8946f965295/debuginfo",
    xlink=xlink@entry=0x4e5180 <debug_displays+4480>,
    parse_func=parse_func@entry=0x431550 <parse_gnu_debuglink>,
    check_func=check_func@entry=0x432ae0 <check_gnu_debuglink>,
    func_data=func_data@entry=0x7fffffffdb60, file=file@entry=0x51d430)
    at /export/gnu/import/git/sources/binutils-gdb/binutils/dwarf.c:11057
 #1  0x000000000043328d in check_for_and_load_links (file=0x51d430,
    filename=0x510f50 "/export/home/hjl/.cache/debuginfod_client/dcc33c51c49e7dafc178fdb5cf8bd8946f965295/debuginfo")
    at /export/gnu/import/git/sources/binutils-gdb/binutils/dwarf.c:11381
 #2  0x00000000004332ae in check_for_and_load_links (file=0x51b070,
    filename=0x518dd0 "/export/home/hjl/.cache/debuginfod_client/dcc33c51c49e7dafc178fdb5cf8bd8946f965295/debuginfo")

Return NULL if the separate debug info is the same as the input main
file to avoid infinite recursion.

	PR binutils/28679
	* dwarf.c (load_separate_debug_info): Don't return the input
	main file.
2021-12-10 17:52:40 -08:00
Alan Modra
d91c67e873 Re: Add support for AArch64 EFI (efi-*-aarch64)
Commit b69c9d41e8 was broken in multiple ways regarding the realloc
of the target string, most notably in that "-little" wasn't actually
appended to the input_target or output_target.  This caused asan
errors and "FAIL: Check if efi app format is recognized".  I also
noticed that the input_target string wasn't being copied but rather
the output_target when dealing with the input target.  Fix that too.

	PR 26206
	* objcopy.c (convert_efi_target): Rewrite.  Allocate modified
	target strings here..
	(copy_main): ..rather than here.  Do handle input_target,
	not output_target for input.
2021-12-07 16:10:27 +10:30
Chenghua Xu
066624ff52 Add myself and Zhensong Liu as the LoongArch port maintainer. 2021-12-03 10:15:44 +08:00
Nick Clifton
117e35f519 Fix illegal memory access whilst parsing corrupt DWARF debug information.
PR 28645
	* dwarf.c (process_cu_tu_index): Add test for overruning section
	whilst processing slots.
2021-12-02 17:48:20 +00:00
Mike Frysinger
cd06c1cab2 binutils: add missing prefix for binutils/index.html rule 2021-12-01 16:00:49 -05:00
Luca Boccassi
3ac925fcf5 readelf: recognize FDO Packaging Metadata ELF note. (Correcting snafu during patch application) 2021-12-01 16:16:13 +00:00
Luca Boccassi
e5382207cd readelf: recognize FDO Packaging Metadata ELF note
As defined on: https://systemd.io/COREDUMP_PACKAGE_METADATA/
this note will be used starting from Fedora 36. Allow
readelf --notes to pretty print it:

Displaying notes found in: .note.package
  Owner                Data size 	Description
  FDO                  0x00000039	FDO_PACKAGING_METADATA
    Packaging Metadata: {"type":"deb","name":"fsverity-utils","version":"1.3-1"}

Signed-off-by: Luca Boccassi <luca.boccassi@microsoft.com>
2021-12-01 14:44:25 +00:00
Mike Frysinger
10e1e79e58 binutils: regenerate Makefile.in after doc/ changes 2021-11-30 14:02:05 -05:00
Roland McGrath
6e2acee1b5 Fix missing build dependency for binutils man pages
binutils/
	* doc/local.mk: Give each man page target its missing dependency on
	doc/$(am__dirstamp).
2021-11-30 10:16:45 -08:00
Nick Clifton
9745b5a753 Use dwarf_vma type for offsets, ranges and section sizes in DWARF decoder.
* dwarf.c (find_debug_info_for_offset): Use dwarf_vma type for
	offsets, sizes and ranges.
	(display_loc_list): Likewise.  Also use print_dwarf_vma to print
	the offset.
	(display_loclists_list): Likewise.
	(display_loc_list_dwo): Likewise.
	(display_debug_str): Likewise.
	(display_debug_aranges): Likewise.
	(display_debug_ranges_list): Likewise.
	(display_debug_rnglists_list): Likewise.
	(display_debug_ranges): Likewise.
2021-11-30 13:17:49 +00:00
Mike Frysinger
45c06bb712 binutils: merge doc subdir up a level
This avoids a recursive make into the doc subdir and speeds up the
build slightly.  It also allows for more parallelism.
2021-11-29 20:26:26 -05:00
Mike Frysinger
d8bbdb9dd5 binutils: enable silent build rules
Also add $(AM_V_xxx) to various manual rules in here.
2021-11-29 20:26:26 -05:00
Nick Clifton
584294c406 strings: Replace references to -u option with references to -U.
PR 28632
2021-11-29 15:37:24 +00:00
Nick Clifton
8fee99c3c8 Update description of string's -n option.
PR 28632
	* strings.c (usage): Update desciption of -n option.
	* doc/binutils.texi: Likewise.
2021-11-29 14:52:42 +00:00
Nick Clifton
d8ed269e5c Fix an illegal memory access parsing a corrupt sysroff file.
PR 28564
	* sysdump.c (getCHARS): Check for an out of bounds read.
2021-11-24 17:02:02 +00:00
Tamar Christina
b69c9d41e8 AArch64: Add support for AArch64 EFI (efi-*-aarch64).
This adds support for efi-*-aarch64 by virtue of adding a new PEI target
pei-aarch64-little.  This is not a full target and only exists to support EFI
at this time.

This means that this target does not support relocation processing and is mostly
a container format.  This format has been added to elf based aarch64 targets
such that efi images can be made natively on Linux.

However this target is not valid for use with gas but only with objcopy.

With these changes the resulting file is recognized as an efi image by
third party tools:

>  pecli info hello.efi

Metadata
================================================================================
MD5:            598c32a778b0f0deebe977fef8578c4e
SHA1:           4580121edd5cb4dc40f51b28f171fd15250df84c
SHA256:         3154bd7cf42433d1c957f6bf55a17ad8c57ed41b29df2d485703349fd6ff1d5c
Imphash:
Size:           47561 bytes
Type:           PE32+ executable (EFI application) (stripped to external PDB), for MS Windows
Compile Time:   1970-01-01 00:00:00 (UTC - 0x0       )
Entry point:    0x2000 (section .text)

Sections
================================================================================
Name      RWX  VirtSize   VirtAddr   RawAddr   RawSize   Entropy  md5
.text     R-X  0x5bb0     0x2000     0x400     0x5c00      6.39 551fbc264256a3f387de8a891500ae0d
.reloc    R--  0xc        0x8000     0x6000    0x200       0.02 0c45f6d812d079821c1d54c09ab89e1d
.data     RW-  0x1d88     0x9000     0x6200    0x1e00      4.18 5d1137c09f01289dc62bf754f7290db3
.dynamic  RW-  0xf0       0xb000     0x8000    0x200       0.34 5c94ed3206f05a277e6f04fbf131f131
.rela     R--  0xe58      0xc000     0x8200    0x1000      1.87 8b5c6bc30f3acb7ca7bf2e6789d68519
.dynsym   R--  0x138      0xd000     0x9200    0x200       0.96 bdcf5101da51aadc663ca8859f88138c

Imports
================================================================================

Any magic number is based on the Microsoft PE specification [1].

[1] https://docs.microsoft.com/en-us/windows/win32/debug/pe-format

bfd/ChangeLog:

2021-10-21  Tamar Christina  <tamar.christina@arm.com>

	PR binutils/26206
	* .gitignore (pe-aarch64igen.c): New.
	* Makefile.am (pei-aarch64.lo, pe-aarch64igen.lo, pei-aarch64.c,
	pe-aarch64igen.c): Add support.
	* Makefile.in: Likewise.
	* bfd.c (bfd_get_sign_extend_vma): Add pei-aarch64-little.
	* coff-aarch64.c: New file.
	* coffcode.h (coff_set_arch_mach_hook, coff_set_flags,
	coff_write_object_contents) Add aarch64 (aarch64_pei_vec) support.
	* config.bfd: Likewise.
	* configure: Likewise.
	* configure.ac: Likewise.
	* libpei.h (GET_OPTHDR_IMAGE_BASE, PUT_OPTHDR_IMAGE_BASE,
	GET_OPTHDR_SIZE_OF_STACK_RESERVE, PUT_OPTHDR_SIZE_OF_STACK_RESERVE,
	GET_OPTHDR_SIZE_OF_STACK_COMMIT, PUT_OPTHDR_SIZE_OF_STACK_COMMIT,
	GET_OPTHDR_SIZE_OF_HEAP_RESERVE, PUT_OPTHDR_SIZE_OF_HEAP_RESERVE,
	GET_OPTHDR_SIZE_OF_HEAP_COMMIT, PUT_OPTHDR_SIZE_OF_HEAP_COMMIT,
	GET_PDATA_ENTRY, _bfd_peAArch64_bfd_copy_private_bfd_data_common,
	_bfd_peAArch64_bfd_copy_private_section_data,
	_bfd_peAArch64_get_symbol_info, _bfd_peAArch64_only_swap_filehdr_out,
	_bfd_peAArch64_print_private_bfd_data_common,
	_bfd_peAArch64i_final_link_postscript,
	_bfd_peAArch64i_only_swap_filehdr_out, _bfd_peAArch64i_swap_aouthdr_in,
	_bfd_peAArch64i_swap_aouthdr_out, _bfd_peAArch64i_swap_aux_in,
	_bfd_peAArch64i_swap_aux_out, _bfd_peAArch64i_swap_lineno_in,
	_bfd_peAArch64i_swap_lineno_out, _bfd_peAArch64i_swap_scnhdr_out,
	_bfd_peAArch64i_swap_sym_in, _bfd_peAArch64i_swap_sym_out,
	_bfd_peAArch64i_swap_debugdir_in, _bfd_peAArch64i_swap_debugdir_out,
	_bfd_peAArch64i_write_codeview_record,
	_bfd_peAArch64i_slurp_codeview_record,
	_bfd_peAArch64_print_ce_compressed_pdata): New.
	* peXXigen.c (_bfd_XXi_swap_aouthdr_in, _bfd_XXi_swap_aouthdr_out,
	pe_print_pdata, _bfd_XX_print_private_bfd_data_common,
	_bfd_XX_bfd_copy_private_section_data, _bfd_XXi_final_link_postscript):
	Support COFF_WITH_peAArch64,
	* pei-aarch64.c: New file.
	* peicode.h (coff_swap_scnhdr_in, pe_ILF_build_a_bfd, pe_ILF_object_p):
	Support COFF_WITH_peAArch64.
	(jtab): Add dummy entry that traps.
	* targets.c (aarch64_pei_vec): New.

binutils/ChangeLog:

2021-10-21  Tamar Christina  <tamar.christina@arm.com>

	PR binutils/26206
	* NEWS: Add new support.
	* objcopy.c (convert_efi_target): Add efi-*-aarch64 support.
	* testsuite/binutils-all/aarch64/pei-aarch64-little.d: New test.
	* testsuite/binutils-all/aarch64/pei-aarch64-little.s: New test.

include/ChangeLog:

2021-10-21  Tamar Christina  <tamar.christina@arm.com>

	PR binutils/26206
	* coff/aarch64.h: New file.
	* coff/pe.h (IMAGE_FILE_MACHINE_ARM64): New.
2021-11-23 09:36:39 +00:00
Alan Modra
0c3e266dc2 binutils debuginfod test
A missing "return" resulted in this non-ELF fail:
x86_64-w64-mingw32  +FAIL: debuginfod (create separate debug info file)

Also, the debuginfod I have installed does not appear to handle
non-native ELF objects, so only run the test when native.

	* testsuite/binutils-all/debuginfod.exp: Don't run test unless
	native ELF.
2021-11-23 15:39:26 +10:30
Alan Modra
2990bf4096 Update bug reporting address
https://sourceware.org/bugzilla/ everywhere

bfd/
	* configure.ac (ACX_BUGURL): Set to https://sourceware.org/bugzilla/
	* po/Make-in (msgid-bugs-address): Likewise.
	* README: Report bugs to the above.
	* configure: Regenerate.
binutils/
	* po/Make-in (msgid-bugs-address): Update.
gas/
	* README: Update bug address.  Delete mention of gcc.
	* po/Make-in: Update bug address.
gold/
	* po/Make-in: Update bug address.
gprof/
	* po/Make-in: Update bug address.
ld/
	* po/Make-in: Update bug address.
opcodes/
	* po/Make-in: Update bug address.
2021-11-23 15:39:26 +10:30
H.J. Lu
b6e7fb9573 elfedit: Align --[in|out]put-abiversion usage
Align

  --input-abiversion [0-255]  Set input ABIVERSION
  --output-abiversion [0-255] Set output ABIVERSION

instead of

  --input-abiversion [0-255]
                              Set input ABIVERSION
  --output-abiversion [0-255]
                              Set output ABIVERSION

	* elfedit.c (usage): Align --[in|out]put-abiversion usage.
2021-11-19 08:11:59 -08:00
Nelson Chu
8155b8539b RISC-V: Support STO_RISCV_VARIANT_CC and DT_RISCV_VARIANT_CC.
This is the original discussion,
https://github.com/riscv/riscv-elf-psabi-doc/pull/190

And here is the glibc part,
https://sourceware.org/pipermail/libc-alpha/2021-August/129931.html

For binutils part, we need to support a new direcitve: .variant_cc.
The function symbol marked by .variant_cc means it need to be resolved
directly without resolver for dynamic linker.  We also add a new dynamic
entry, STO_RISCV_VARIANT_CC, to indicate there are symbols with the
special attribute in the dynamic symbol table of the object.

I heard that llvm already have supported this in their mainline, so
I think it's time to commit this.

bfd/
	* elfnn-riscv.c (riscv_elf_link_hash_table): Added variant_cc
	flag. It is used to check if relocations for variant CC symbols
	may be present.
	(allocate_dynrelocs): If the symbol has STO_RISCV_VARIANT_CC
	flag, then raise the variant_cc flag of riscv_elf_link_hash_table.
	(riscv_elf_size_dynamic_sections): Added dynamic entry for
	variant_cc.
	(riscv_elf_merge_symbol_attribute): New function, used to merge
	non-visibility st_other attributes, including STO_RISCV_VARIANT_CC.
binutils/
	* readelf.c (get_riscv_dynamic_type): New function.
	(get_dynamic_type): Called get_riscv_dynamic_type for riscv targets.
	(get_riscv_symbol_other): New function.
	(get_symbol_other): Called get_riscv_symbol_other for riscv targets.
gas/
	* config/tc-riscv.c (s_variant_cc): Marked symbol that it follows a
	variant CC convention.
	(riscv_elf_copy_symbol_attributes): Same as elf_copy_symbol_attributes,
	but without copying st_other.  If a function symbol has special st_other
	value set via directives, then attaching an IFUNC resolver to that symbol
	should not override the st_other setting.
	(riscv_pseudo_table): Support variant_cc diretive.
	* config/tc-riscv.h (OBJ_COPY_SYMBOL_ATTRIBUTES): Defined.
	* testsuite/gas/riscv/variant_cc-set.d: New testcase.
	* testsuite/gas/riscv/variant_cc-set.s: Likewise.
	* testsuite/gas/riscv/variant_cc.d: Likewise.
	* testsuite/gas/riscv/variant_cc.s: Likewise.
include/
	* elf/riscv.h (DT_RISCV_VARIANT_CC): Defined to (DT_LOPROC + 1).
	(STO_RISCV_VARIANT_CC): Defined to 0x80.
ld/
	* testsuite/ld-riscv-elf/variant_cc-1.s: New testcase.
	* testsuite/ld-riscv-elf/variant_cc-2.s: Likewise.
	* testsuite/ld-riscv-elf/variant_cc-now.d: Likewise.
	* testsuite/ld-riscv-elf/variant_cc-r.d: Likewise.
	* testsuite/ld-riscv-elf/variant_cc-shared.d: Likewise.
	* testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated.
2021-11-19 09:32:19 +08:00
Alan Modra
2cd93e7081 Pass DEBUGINFOD_CFLAGS when compiling dwarf.c
Pick up the elfutils/debuginfod.h install location -I flags from
a variable set by debuginfod.m4 (via pkg.m4 and pkg-config).

	* Makefile.am (DEBUGINFOD_CFLAGS): Define.
	(dwarf.@OBJECT@): New rule.
2021-11-18 18:48:24 +10:30
H.J. Lu
c9dcc18f8d elfedit: Add --output-abiversion option to update ABIVERSION
* NEWS: Mention --output-abiversion.
	* elfedit.c (input_elf_abiversion): New.
	(output_elf_abiversion): Likewise.
	(update_elf_header): Update EI_ABIVERSION.
	(command_line_switch): Add OPTION_INPUT_ABIVERSION and
	OPTION_OUTPUT_ABIVERSION.
	(options): Add --input-abiversion and --output-abiversion.
	(usage): Likewise.
	(main): Handle --input-abiversion and --output-abiversion.
	* doc/binutils.texi: Document --input-abiversion and
	--output-abiversion.
	* testsuite/binutils-all/elfedit.exp: Run elfedit-6.
	* testsuite/binutils-all/elfedit-6.d: New file.
2021-11-17 05:15:48 -08:00
Fangrui Song
a7fd118627 readelf: Support SHT_RELR/DT_RELR for -r
The -r output for SHT_RELR looks like:

Relocation section '.relr.dyn' at offset 0x530 contains 4 entries:
  7 offsets
00000000000028c0
00000000000028c8
0000000000003ad0
0000000000003ad8
0000000000003ae0
0000000000003ae8
0000000000003af0

For --use-dynamic, the header looks like

    'RELR' relocation section at offset 0x530 contains 32 bytes:

include/
    * elf/common.h (DT_ENCODING): Bump to 38.
    * elf/external.h (Elf32_External_Relr): New.
    (Elf64_External_Relr): New.
binutils/
    * readelf.c (enum relocation_type): New.
    (slurp_relr_relocs): New.
    (dump_relocations): Change is_rela to rel_type.
    Dump RELR.
    (dynamic_relocations): Add DT_RELR.
    (process_relocs): Check SHT_RELR and DT_RELR.
    (process_dynamic_section): Store into dynamic_info for
    DT_RELR/DT_RELRENT/DT_RELRSZ.
2021-11-16 13:04:33 -08:00
Jim Wilson
a66ddb5899 Update my email address.
I've left SiFive and have a new gmail account because it is convenient
to use with git send-email.  I'm planning to use this for my RISC-V
work.  My tuliptree address still works, it just isn't as convenient.

	binutils:
	* MAINTAINERS (RISC-V): Update my address.
2021-11-15 16:51:05 -08:00
Alan Modra
0d64622696 Fix demangle style usage info
Extract allowed styles from libiberty, so we don't have to worry about
our help messages getting out of date.  The function probably belongs
in libiberty/cplus-dem.c but it can be here for a while to iron out
bugs.

	PR 28581
	* demanguse.c: New file.
	* demanguse.h: New file.
	* nm.c (usage): Break up output.  Use display_demangler_styles.
	* objdump.c (usage): Use display_demangler_styles.
	* readelf.c (usage): Likewise.
	* Makefile.am: Add demanguse.c and demanguse.h.
	* Makefile.in: Regenerate.
	* po/POTFILESin: Regenerate.
2021-11-12 14:33:31 +10:30
Pekka Seppänen
795588aec4 PR28575, readelf.c and strings.c use undefined type uint
Since --unicode support (commit b3aa80b45c) both binutils/readelf.c
and binutils/strings.c use 'uint' in a few locations.  It likely
should be 'unsigned int' since there isn't anything defining 'uint'
within binutils (besides zlib) and AFAIK it isn't a standard type.

	* readelf.c (print_symbol): Replace uint with unsigned int.
	* strings.c (string_min, display_utf8_char): Likewise.
	(print_unicode_stream_body, print_unicode_stream): Likewise.
	(print_strings): Likewise.
	(get_unicode_byte): Wrap long line.
2021-11-10 20:24:36 +10:30
Alan Modra
9b49454b4a Re: Add --unicode option
* objdump: Whitespace fixes.
	(long_options): Correct "ctf" entry.
2021-11-10 12:02:52 +10:30
Alan Modra
a9a09f5114 Re: Add --unicode option
At low optimisation levels gcc may warn.

	* strings.c (print_unicode_stream_body): Avoid bogus "may be
	used unitialised" warning.
2021-11-10 10:32:11 +10:30
Alan Modra
84f82c95bc PR28543, readelf entered an infinite loop
This little tweak terminates fuzzed binary readelf output a little
quicker.

	PR 28543
	* dwarf.c (read_and_display_attr_value): Consume a byte when
	form is unrecognized.
2021-11-10 09:20:10 +10:30
Alan Modra
b9af637988 PR28542, Undefined behaviours in readelf.c
PR 28542
	* readelf.c (dump_relocations): Check that section headers have
	been read before attempting to access section name.
	(print_dynamic_symbol): Likewise.
	(process_mips_specific): Delete dead code.
2021-11-10 09:20:10 +10:30
Nick Clifton
b3aa80b45c Add --unicode option to control how unicode characters are handled by display tools.
* nm.c: Add --unicode option to control how unicode characters are
	handled.
	* objdump.c: Likewise.
	* readelf.c: Likewise.
	* strings.c: Likewise.
	* binutils.texi: Document the new feature.
	* NEWS: Document the new feature.
	* testsuite/binutils-all/unicode.exp: New file.
	* testsuite/binutils-all/nm.hex.unicode
	* testsuite/binutils-all/strings.escape.unicode
	* testsuite/binutils-all/objdump.highlight.unicode
	* testsuite/binutils-all/readelf.invalid.unicode
2021-11-09 13:25:42 +00:00
Alan Modra
314ec7aeeb Modernise yyerror
Newer versions of bison emit a prototype for yyerror
	void yyerror (const char *);
This clashes with some of our old code that declares yyerror to return
an int.  Fix that in most cases by modernizing yyerror.  bfin-parse.y
uses the return value all over the place, so for there disable
generation of the prototype as specified by posix.

binutils/
	* arparse.y (yyerror): Return void.
	* dlltool.c (yyerror): Likewise.
	* dlltool.h (yyerror): Likewise.
	* sysinfo.y (yyerror): Likewise.
	* windmc.h (yyerror): Likewise.
	* mclex.c (mc_error): Extract from ..
	(yyerror): ..here, both now returning void.
gas/
	* config/bfin-parse.y (yyerror): Define.
	(yyerror): Make static.
	* itbl-parse.y (yyerror): Return void.
ld/
	* deffilep.y (def_error): Return void.
2021-11-06 21:15:49 +10:30
Fangrui Song
dd207c1302 readelf: Support RELR in -S and -d and output
readelf -r dumping support is not added in this patch.

include/
	* elf/common.h: Add SHT_RELR, DT_RELR{,SZ,ENT}
bfd/
	* elf.c (_bfd_elf_print_private_bfd_data): Add DT_RELR{,SZ,ENT}.
binutils/
	* readelf.c (get_dynamic_type): Add DT_RELR{,SZ,ENT}.
	(get_section_type_name): Add SHT_RELR.
2021-11-06 17:11:08 +10:30
Fangrui Song
04d8355ac6 readelf: Make DT_PREINIT_ARRAYSZ's output style match DT_INIT_ARRAYSZ
The output now looks like:

- 0x0000000000000021 (PREINIT_ARRAYSZ)    0x10
+ 0x0000000000000021 (PREINIT_ARRAYSZ)    16 (bytes)
  0x0000000000000019 (INIT_ARRAY)         0xbefc90
  0x000000000000001b (INIT_ARRAYSZ)       536 (bytes)

	* readelf.c (process_dynamic_section): Handle DT_PREINIT_ARRAYSZ.
2021-11-06 17:11:08 +10:30
Alan Modra
ca8775833b PR28541, unstable cie offset in the output of readelf
Calculating "0 - pointer" can indeed result in seeming randomness as
the pointer address varies.

	PR 28541
	* dwarf.c (display_debug_frames): Don't print cie offset when
	invalid, print "invalid" instead.  Remove now redundant warning.
2021-11-05 21:32:02 +10:30
Alan Modra
f2f105f518 PR28540, segmentation fault on NULL byte_get
PR 28540
	* objdump.c (dump_bfd): Don't attempt load_separate_debug_files
	when byte_get is NULL.
2021-11-04 14:16:53 +10:30
Tom Tromey
dac784d0e4 Use section name in warnings in display_debug_loc
While looking at an apparently malformed executable with
"readelf --debug-dump=loc", I got this warning:

    readelf: ./main: Warning: There is a hole [0x89 - 0x95] in .debug_loc section.

However, the executable only has a .debug_loclists section.

This patch fixes the warning messages in display_debug_loc to use the
name of the section that is being processed.

binutils/ChangeLog
2021-11-03  Tom Tromey  <tromey@adacore.com>

	* dwarf.c (display_debug_loc): Use section name in warnings.
2021-11-03 07:33:24 -06:00
Alan Modra
6ef4fa071e asan: dlltool buffer overflow: embedded NUL in string
yyleng gives the pattern length, xstrdup just copies up to the NUL.
So it is quite possible writing at an index of yyleng-2 overflows
the xstrdup allocated string buffer.  xmemdup quite handily avoids
this problem, even writing the terminating NUL over the trailing
quote.  Use it in ldlex.l too where we'd already had a report of this
problem and fixed it by hand, and to implement xmemdup0 in gas.

binutils/
	* deflex.l (single and double quote strings): Use xmemdup.
gas/
	* as.h (xmemdup0): Use xmemdup.
ld/
	PR 20906
	* ldlex.l (double quote string): Use xmemdup.
2021-11-03 17:06:09 +10:30
Alan Modra
359c74415c asan: assert (addr_ranges) <= (start)
That assert would be more obvious if it were reported as
"addr_ranges <= end_ranges".  Fix that by using the obvious variable
in the final loop.  Stop the assertion by using a signed comparison:
It's possible for the rounding up of the arange pointer to exceed the
end of the block when the block size is fuzzed.

	* dwarf.c (display_debug_aranges): Use "end_ranges" in loop
	displaying ranges rather that "start".  Simplify rounding up
	to 2*address_size boundary.  Use signed comparison in loop.
2021-11-03 15:43:23 +10:30
Alan Modra
c27cdb4c53 objcopy buffer overflow
"tocopy" in this code was an int, which when the size to be copied was
larger than MAXINT could result in tocopy being negative.  A negative
value of course is less than BUFSIZE, but when converted to
bfd_size_type is extremely large.

	PR 995
	* objcopy.c (copy_unknown_object): Correct calculation of "tocopy".
	Use better variable types.
2021-11-01 22:30:33 +10:30
Przemyslaw Wirkus
3197e593d8 arm: add armv9-a architecture to -march
Update also include:
	+ New value of Tag_CPU_arch EABI attribute (22) is added.
	+ Updated missing Tag_CPU_arch EABI attributes.
	+ Updated how we combine archs 'v4t_plus_v6_m' as this mechanism
	  have to handle new Armv9 as well.

Regression tested on `arm-none-eabi` cross Binutils and no issues.

bfd/

	* archures.c: Define bfd_mach_arm_9.
	* bfd-in2.h (bfd_mach_arm_9): Define bfd_mach_arm_9.
	* cpu-arm.c: Add 'armv9-a' option to -march.
	* elf32-arm.c (using_thumb2_bl): Update assert check.
	(arch_has_arm_nop): Add TAG_CPU_ARCH_V9.
	(bfd_arm_get_mach_from_attributes): Add case for TAG_CPU_ARCH_V9.
	Update assert.
	(tag_cpu_arch_combine): Updated table.
	(v9): New table..

binutils/

	* readelf.c (arm_attr_tag_CPU_arch): Update with

elfcpp/

	* arm.h: Update TAG_CPU_ARCH_ enums with correct values.

gas/

	* NEWS: Update docs.
	* config/tc-arm.c (get_aeabi_cpu_arch_from_fset): Return Armv9-a
	for -amarch=all.
	(aeabi_set_public_attributes): Update assert.
	* doc/c-arm.texi: Update docs.
	* testsuite/gas/arm/armv9-a_arch.d: New test.
	* testsuite/gas/arm/attr-march-all.d: Update test with v9.

include/

	* elf/arm.h Update TAG_CPU_ARCH_ defines with correct values.
	* opcode/arm.h (ARM_EXT3_V9A): New macro.
	(ARM_ARCH_NONE): Updated with arm_feature_set.core size.
	(FPU_NONE): Updated.
	(ARM_ANY): Updated.
	(ARM_ARCH_UNKNOWN): New macro.
	(ARM_FEATURE_LOW): Updated.
	(ARM_FEATURE_CORE): Updated.
	(ARM_FEATURE_CORE_LOW): Updated.
	(ARM_FEATURE_CORE_HIGH): Updated.
	(ARM_FEATURE_COPROC): Updated.
	(ARM_FEATURE): Updated.
	(ARM_FEATURE_ALL): New macro.

opcodes/

	* arm-dis.c (select_arm_features): Support bfd_mach_arm_9.
	Also Update bfd_mach_arm_unknown to use new macro ARM_ARCH_UNKNOWN.
2021-11-01 10:51:03 +00:00
Tejas Belagod
09854a8870 Support for a new pacbti unwind opcode.
This patch adds readelf support for decoding the exception table
opcode for restoring the RA_AUTH_CODE pseudo register defined by the
EHABI
(https://github.com/ARM-software/abi-aa/releases/download/2021Q1/ehabi32.pdf
Section 10.3).

	* readelf.c (decode_arm_unwind_bytecode): Add support to decode
	restoring RA_AUTH_CODE pseudo register.
2021-10-29 20:37:17 +10:30
Nick Alcock
10909ea819 binutils, ld: make objdump --ctf's parameter optional
ld by default (and always, unless adjusted with a hand-rolled linker
script) emits deduplicated CTF into the .ctf section.  But viewing
it needs you to explicitly tell objdump this: it doesn't default
its argument, even though what you always end up typing is
--ctf=.ctf.

This is annoying, so make the argument optional.

binutils/ChangeLog
2021-10-25  Nick Alcock  <nick.alcock@oracle.com>

	* objdump.c (usage): --ctf now has an optional argument.
	(main): Adjust accordingly.
	(dump_ctf): Default it.
	* doc/ctf.options.texi: Adjust.

ld/ChangeLog
2021-10-25  Nick Alcock  <nick.alcock@oracle.com>

	* testsuite/ld-ctf/array.d: Change --ctf=.ctf to --ctf.
	* testsuite/ld-ctf/conflicting-cycle-1.B-1.d: Likewise.
	* testsuite/ld-ctf/conflicting-cycle-1.B-2.d: Likewise.
	* testsuite/ld-ctf/conflicting-cycle-1.parent.d: Likewise.
	* testsuite/ld-ctf/conflicting-cycle-2.A-1.d: Likewise.
	* testsuite/ld-ctf/conflicting-cycle-2.A-2.d: Likewise.
	* testsuite/ld-ctf/conflicting-cycle-2.parent.d: Likewise.
	* testsuite/ld-ctf/conflicting-cycle-3.C-1.d: Likewise.
	* testsuite/ld-ctf/conflicting-cycle-3.C-2.d: Likewise.
	* testsuite/ld-ctf/conflicting-cycle-3.parent.d: Likewise.
	* testsuite/ld-ctf/conflicting-enums.d: Likewise.
	* testsuite/ld-ctf/conflicting-typedefs.d: Likewise.
	* testsuite/ld-ctf/cross-tu-cyclic-conflicting.d: Likewise.
	* testsuite/ld-ctf/cross-tu-cyclic-nonconflicting.d: Likewise.
	* testsuite/ld-ctf/cross-tu-into-cycle.d: Likewise.
	* testsuite/ld-ctf/cross-tu-noncyclic.d: Likewise.
	* testsuite/ld-ctf/cycle-1.d: Likewise.
	* testsuite/ld-ctf/cycle-2.A.d: Likewise.
	* testsuite/ld-ctf/cycle-2.B.d: Likewise.
	* testsuite/ld-ctf/cycle-2.C.d: Likewise.
	* testsuite/ld-ctf/data-func-conflicted.d: Likewise.
	* testsuite/ld-ctf/diag-cttname-null.d: Likewise.
	* testsuite/ld-ctf/diag-cuname.d: Likewise.
	* testsuite/ld-ctf/diag-parlabel.d: Likewise.
	* testsuite/ld-ctf/enum-forward.d: Likewise.
	* testsuite/ld-ctf/enums.d: Likewise.
	* testsuite/ld-ctf/forward.d: Likewise.
	* testsuite/ld-ctf/function.d: Likewise.
	* testsuite/ld-ctf/nonrepresentable.d: Likewise.
	* testsuite/ld-ctf/slice.d: Likewise.
	* testsuite/ld-ctf/super-sub-cycles.d: Likewise.
2021-10-25 11:17:03 +01:00
Nick Alcock
80b56fad5c binutils: make objdump/readelf --ctf-parent actually useful
This option has been present since the very early days of the
development of libctf as part of binutils, and it shows.  Back in the
earliest days, I thought we might handle ambiguous types by introducing
new ELF sections on the fly named things like .ctf.foo.c for ambiguous
types found only in foo.c, etc.  This turned out to be a terrible idea,
so we moved to using a CTF archive in the .ctf section which contained
all the CTF dictionaries -- but the --ctf-parent option in objdump and
readelf was never adjusted, and lingered as a mechanism to specify CTF
parent dictionaries in sections other than .ctf, even though the linker
has no way to produce parent dictionaries in different sections from
their children, libctf's ctf_open can't handle such split-up
parent/child dicts, and they are never found in the wild, emitted by GNU
ld or by any known third-party linking tool.

Meanwhile, the actually-useful ctf_link feature (albeit not used by ld)
which lets you remap the names of CTF archive members (so you can end up
with a parent archive member named something other than ".ctf", still
contained with all its children in a single .ctf section) had no support
in objdump or readelf: there was no way to tell them that these members
were parents, so all the types in the associated child dicts always
appeared corrupted, referencing nonexistent types from a parent objdump
couldn't find.

So adjust --ctf-parent so that rather than taking a section name it
takes a member name instead (if not specified, the name is ".ctf", which
is what GNU ld emits).  Because the option was always useless before
now, this is expected to have no backward-compatibility implications.

As part of this, we have to slightly adjust the code which skips the
archive member name if redundant: right now it skips it if it's ".ctf",
on the assumption that this name will almost always be at the start
of the objdump output and thus we'll end up with a shared dump
and then smaller, headed dumps for the per-TU child dicts; but if
the parent name has been changed, that won't be true any more.

So change the rules to "members named .ctf which appear first in the
first have their member name skipped".  Since we now need to count
members, move from ctf_archive_iter (for which passing in extra
parameters requires defining a new struct and is clumsy) to
ctf_archive_next, allowing us to just *call* dump_ctf_archive_member and
maintain a member count in the obvious way.  In the process we fix a
tiny difference between readelf and objdump: if a ctf_dump ever failed,
readelf skipped every later member, while objdump tried to keep going as
much as it could.  For a dumping tool the former is clearly preferable.

binutils/ChangeLog
2021-10-25  Nick Alcock  <nick.alcock@oracle.com>

	* objdump.c (usage): --ctf-parent now takes a name, not a section.
	(dump_ctf): Don't open a separate section; use the parent_name in
	ctf_dict_open instead.  Use ctf_archive_next, not ctf_archive_iter,
	so we can pass down a member count.
	(dump_ctf_archive_member): Add the member count; don't return
	anything.  Import parents into children no matter what the
	parent's name, while still avoiding displaying the header for the
	common parent name of ".ctf".
	* readelf.c (usage): Adjust similarly.
	(dump_section_as_ctf): Likewise.
	(dump_ctf_archive_member): Likewise.  Never stop iterating over
	archive members, even if ctf_dump of one member fails.
	* doc/ctf.options.texi: Adjust.
2021-10-25 11:17:03 +01:00
Alan Modra
5513527b59 objdump doesn't accept -L option
A followup to commit ca0e11aa4b.

	* objdump.c (main): Add 'L' to short options and sort them.
2021-10-25 16:47:36 +10:30