Commit graph

16840 commits

Author SHA1 Message Date
GDB Administrator
9ef1d5f4c9 Automatic date update in version.in 2021-05-09 00:00:37 +00:00
Mike Frysinger
cf758b3960 support generating multi-html pages in parallel
Use the pattern from other projects where we generate the html pages
in a dir named the same as the project.  So now we have:
gas/doc/gas.html - single html page
gas/doc/gas/ - multiple html pages

This works for projects that have a doc/ subdir already, but gprof &
ld require a little tweaking since they generate their docs in their
respective toplevels.
2021-05-08 12:06:07 -04:00
Mike Frysinger
2faf902da5 generate single html manual page by default
This better matches other GNU projects like autoconf/automake where
the html manual is the single page form.  We'll support the multi-page
form in a follow up change.
2021-05-08 11:58:19 -04:00
GDB Administrator
f6593c3d4b Automatic date update in version.in 2021-05-08 00:00:38 +00:00
Cl?ment Chigot
97834047e1 Fix .dwsect generation for XCOFF. Handle .function generated with DWARF on XCOFF.
gas	* config/tc-ppc.c (ppc_function): Update comment for
	fifth argument.
	(ppc_frob_symbol): Remove ppc_last_function check.
	Make sure coff_last_function is reset.
	Correctly set fsize when not provided in .function.
	* testsuite/gas/ppc/aix.exp: New tests.
	* testsuite/gas/ppc/xcoff-function-1-32.d: New test.
	* testsuite/gas/ppc/xcoff-function-1-64.d: New test.
	* testsuite/gas/ppc/xcoff-function-1.s: New test.

bfd	* coff-rs6000.c (xcoff_dwsect_names): Add new DWARF
	sections.
	* coffgen.c (coff_pointerize_aux): Handle C_DWARF.
	(coff_print_symbol): Likewise.
	* libxcoff.h (XCOFF_DWSECT_NBR_NAMES): Update.

gas	* config/obj-coff.c (coff_frob_symbol): Don't skip C_DWARF.
	(coff_adjust_section_syms): Use corrext auxent for C_DWARF.
	(coff_frob_section): Likewise.
	* config/obj-coff.h (SA_GET_SECT_SCNLEN,
	SA_GET_SECT_NRELOC, SA_SET_SECT_SCNLEN,
	SA_SET_SECT_NRELOC) New defines.
	(SET_SECTION_RELOCS): Adjust for C_DWARF.
	* config/tc-ppc.c (ppc_frob_symbol): Don't skip C_DWARF.
	(ppc_adjust_symtab): Reorder C_DWARF symbols.
	* testsuite/gas/ppc/aix.exp: New tests.
	* testsuite/gas/ppc/xcoff-dwsect-2-32.d: New test.
	* testsuite/gas/ppc/xcoff-dwsect-2-64.d: New test.
	* testsuite/gas/ppc/xcoff-dwsect-2.s: New test.

include	* coff/internal.h (C_DWARF): New define.
	* coff/xcoff.h (SSUBTYP_DWLOC, SSUBTYP_DWFRAME,
	SSUBTYP_DWMAC): New defines.
2021-05-07 15:29:49 +01:00
Jan Beulich
17c6c3b991 x86-64/ELF: clear src_mask for all reloc types
x86-64 uses rela relocations. The comment next to the field's declaration
says "Non-zero values for ELF USE_RELA targets should be viewed with
suspicion ..." And indeed the fields being non-zero causes section
contents to be accumulated into the final relocated values in addition to
the relocations' addends, which is contrary to the ELF spec.
2021-05-07 12:05:12 +02:00
Alan Modra
a41513efec Regenerate bfd-in2.h and libbfd.h
Commit 0b3e14c902 edited these by hand.

	* bfd-in2.h: Regenerate.
	* libbfd.h: Regenerate.
2021-05-07 11:26:44 +09:30
GDB Administrator
5790a27645 Automatic date update in version.in 2021-05-07 00:00:35 +00:00
Stafford Horne
284a130902 or1k: Support large plt_relocs when generating plt entries
The current PLT generation code will generate invalid code when the PLT
relocation offset exceeds 64k.  This fixes the issue by detecting large
plt_reloc offsets and generare code sequences to create larger plt
relocations.

The "large" plt code needs 2 extra instructions to create 32-bit offsets.

bfd/ChangeLog:

	PR 27746
	* elf32-or1k.c (PLT_ENTRY_SIZE_LARGE, PLT_MAX_INSN_COUNT,
	OR1K_ADD, OR1K_ORI): New macros to help with plt creation.
	(elf_or1k_link_hash_table): New field plt_count.
	(elf_or1k_link_hash_entry): New field plt_index.
	(elf_or1k_plt_entry_size): New function.
	(or1k_write_plt_entry): Update to support variable size PLTs.
	(or1k_elf_finish_dynamic_sections): Use new or1k_write_plt_entry
	API.
	(or1k_elf_finish_dynamic_symbol): Update to write large PLTs
	when needed.
	(allocate_dynrelocs): Use elf_or1k_plt_entry_size to account for
	PLT size.

ld/ChangeLog:

	PR 27746
	testsuite/ld-or1k/or1k.exp (or1kplttests): Add tests for linking
	along with gotha() relocations.
	testsuite/ld-or1k/gotha1.dd: New file.
	testsuite/ld-or1k/gotha1.s: New file.
	testsuite/ld-or1k/gotha2.dd: New file.
	testsuite/ld-or1k/gotha2.s: New file
	testsuite/ld-or1k/pltlib.s (x): Define size to avoid link
	failure.
2021-05-06 20:51:25 +09:00
Stafford Horne
3c3de29b04 or1k: Avoid R_OR1K_GOT16 overflow failures in presence of R_OR1K_GOT_AHI16
Now that we support R_OR1K_GOT_AHI16 we can relax the R_OR1K_GOT16
overflow validation check if the section has R_OR1K_GOT_AHI16.

We cannot simple disable R_OR1K_GOT16 overflow validation as there will
still be binaries that will have only R_OR1K_GOT16.  The
R_OR1K_GOT_AHI16 relocation will only be added by GCC when building with
the option -mcmodel=large.

This assumes that R_OR1K_GOT_AHI16 will come before R_OR1K_GOT16, which
is the code pattern that will be emitted by GCC.

bfd/ChangeLog:

	PR 21464
	* elf32-or1k.c (or1k_elf_relocate_section): Relax R_OR1K_GOT16
	overflow check if we have R_OR1K_GOT_AHI16 followed by
	R_OR1K_GOT16.
2021-05-06 20:51:25 +09:00
Stafford Horne
0b3e14c902 or1k: Implement relocation R_OR1K_GOT_AHI16 for gotha()
The gotha() relocation mnemonic will be outputted by OpenRISC GCC when
using the -mcmodel=large option.  This relocation is used along with
got() to generate 32-bit GOT offsets.  This increases the previous GOT
offset limit from the previous 16-bit (64K) limit.

This is needed on large binaries where the GOT grows larger than 64k.

bfd/ChangeLog:

	PR 21464
	* bfd-in2.h: Add BFD_RELOC_OR1K_GOT_AHI16 relocation.
	* elf32-or1k.c (or1k_elf_howto_table, or1k_reloc_map): Likewise.
	(or1k_final_link_relocate, or1k_elf_relocate_section,
	or1k_elf_check_relocs): Likewise.
	* libbfd.h (bfd_reloc_code_real_names): Likewise.
	* reloc.c: Likewise.

cpu/ChangeLog:

	PR 21464
	* or1k.opc (or1k_imm16_relocs, parse_reloc): Define parse logic
	for gotha() relocation.

include/ChangeLog:

	PR 21464
	* elf/or1k.h (elf_or1k_reloc_type): Define R_OR1K_GOT_AHI16 number.

opcodes/ChangeLog:

	PR 21464
	* or1k-asm.c: Regenerate.

gas/ChangeLog:

	PR 21464
	* testsuite/gas/or1k/reloc-1.s: Add test for new relocation.
	* testsuite/gas/or1k/reloc-1.d: Add test result for new
	relocation.

Cc: Giulio Benetti <giulio.benetti@benettiengineering.com>

fixup reloc, add tests
2021-05-06 20:51:24 +09:00
Stafford Horne
a76ef689b6 or1k: Fix issue with plt link failure for local calls
When building protobuf we were seeing the assert failure:

    /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld:
    BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377
    /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld:
    BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377
    /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld:
    BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377
    collect2: error: ld returned 1 exit status

This failure happens while writing out PLT entries, there is a check
"BFD_ASSERT (h->dynindx != -1)" to confirm all plt entries have dynamic
symbol attributes.  This was failing for symbols that were
"forced_local" in previous linking code.

The fix adds logic to or1k_elf_adjust_dynamic_symbol to identify
"forced_local" symbols and exclude them from the the PLT.

bfd/ChangeLog:

	PR 27624
	* elf32-or1k.c (or1k_elf_adjust_dynamic_symbol): Change
	condition used to cleanup plt entries to cleanup forced local
	entries.

Cc: Giulio Benetti <giulio.benetti@benettiengineering.com>
2021-05-06 20:51:24 +09:00
H.J. Lu
4467df35a9 elf: Always append ".COUNT" to local symbols
Always append ".COUNT" to local symbols to avoid potential conflicts
with existing local symbol "XXX.COUNT".

bfd/

	PR ld/27825
	* elflink.c (elf_link_output_symstrtab): Always append ".COUNT"
	to local symbols.

ld/

	PR ld/27825
	* testsuite/ld-elf/pr27825-1.d: New file.
	* testsuite/ld-elf/pr27825-1a.s: Likewise.
	* testsuite/ld-elf/pr27825-1b.s: Likewise.
	* testsuite/ld-elf/pr27825-2.d: Likewise.
	* testsuite/ld-elf/pr27825-2a.s: Likewise.
	* testsuite/ld-elf/pr27825-2b.s: Likewise.
2021-05-05 20:29:01 -07:00
GDB Administrator
9311cd60e1 Automatic date update in version.in 2021-05-06 00:00:37 +00:00
Alan Modra
c38c6234f2 asan: stack-buffer-overflow vms-lib.c:367
* vms-lib.c (vms_traverse_index): Account for vms_kbn size when
	sanity checking keylen.
2021-05-05 13:35:45 +09:30
GDB Administrator
3897046fe0 Automatic date update in version.in 2021-05-05 00:00:35 +00:00
Nick Clifton
bd6d8601f3 Define bfd_realloc(ptr,0) to return allocated memory, whilst bfd_realloc_or_free(ptr,0) frees ptr.
* libbfd.c (bfd_malloc): Provide some documenation.  Treat a size
	of 0 as 1.
	(bfd_realloc): Likewise.
	(bfd_zmalloc): Likewise.
	(bfd_realloc_or_free): Provide some documentation.  Treat a size
	of 0 as a request to free.
	* libbfd-in.h (bfd_realloc): Remove prototype.
	(bfd_realloc_or_free): Remove prototype.
	(bfd_zmalloc): Remove prototype.
	* libbfd.h: Regenerate.
2021-05-04 14:29:04 +01:00
GDB Administrator
ae0373ce07 Automatic date update in version.in 2021-05-04 00:00:34 +00:00
Jan Beulich
4c398cc06d x86: don't request useless overflow checking
Relocations with a bitsize matching the architecture's address width
can't usefully use an overflow checking approach other than "dont" or
"signed": All others involve perhaps complex calculations in
_bfd_relocate_contents() (or, not as severe, in bfd_check_overflow())
without ever finding anything to complain about - because of the address
width masking applied. Avoid this unnecessary overhead and switch all
such reloc types to "dont".

Note that "signed" checking with rela relocations (i.e. x86-64 here) is
only going to be useful if the addend actually got passed to
_bfd_relocate_contents() (and maybe others) instead of bogusly adding in
prior section contents (which apparently is assumed to be zero, and
hence again no overflow would ever be detected). See
https://sourceware.org/pipermail/binutils/2021-April/116164.html.
2021-05-03 13:25:12 +02:00
Alan Modra
4916030821 PPC: undefweak dynamic relocs
This makes the default for ppc to keep dynamic relocs on undefweak
symbols when the code won't cause DT_TEXTREL (for instance when -fPIE
or -fPIC).  If ld is given -z dynamic-undefined-weak then dynamic
relocations will be created for non-PIC at the expense of possibly
causing DT_TEXTREL to be set on ppc32.  Note that DT_TEXTREL and GNU
indirect functions are incompatible.

	* elf32-ppc.c (allocate_dynrelocs): Keep dyn_relocs for undefweak
	symbols when -z dynamic-undefined-weak or when there are no
	dynamic relocs in read-only sections and -z nodynamic-undefined-weak
	is not given.
	* elf64-ppc.c (allocate_dynrelocs): Likewise.
2021-05-03 15:34:17 +09:30
Alan Modra
b293661219 PPC: ensure_undef_dynamic on weak undef only in plt
It's slightly weird to have a call to a weak function not protected by
a test of that function being non-NULL, but the non-NULL test might be
covered by a test of another function.  For example:
  if (func1)
    {
      func1 ();
      func2 ();
    }
where func2 is known to exist if func1 exists.

	* elf32-ppc.c (allocate_dynrelocs): Call ensure_undef_dynamic for
	weak undefined symols that only appear on PLT relocs.
	* elf64-ppc.c (allocate_dynrelocs): Likewise.
2021-05-03 15:34:17 +09:30
Alan Modra
337d0bf887 PR27755, powerpc-ld infinite loop
PR 27755
	* elf32-ppc.c (ppc_elf_inline_plt): Do increment rel in loop.
2021-05-03 15:34:17 +09:30
Alan Modra
5072b52d28 csky: fix annobin test fails
* elf32-csky.c (is_mapping_symbol_name): New function.
	(csky_elf_is_target_special_symbol): Likewise.
	(csky_elf_maybe_function_sym): Likewise.
	(bfd_elf32_bfd_is_target_special_symbol): Define.
	(elf_backend_maybe_function_sym): Define.
2021-05-03 15:34:17 +09:30
GDB Administrator
d68fbfe75d Automatic date update in version.in 2021-05-03 00:00:35 +00:00
GDB Administrator
d113096b47 Automatic date update in version.in 2021-05-02 00:00:30 +00:00
GDB Administrator
698d38980e Automatic date update in version.in 2021-05-01 00:00:31 +00:00
Nick Clifton
d1fbc3ba09 Fix illegal memory access parsing a corrupt MACH-O format file.
PR 27801
	* mach-o.c (bfd_mach_o_core_fetch_environment): Use bfd_get_32 to
	read 32-bit value.
2021-04-30 14:31:03 +01:00
Nick Clifton
9f84cb380e Fix an illegal memory access when parsing a corrupt core note.
PR 27799
	* elf32-xtensa.c (elf_xtensa_grok_prstatus): Check for core notes
	that are too small.
2021-04-30 14:19:24 +01:00
Nick Clifton
6cb40a679b Fix a double free when re-allocating a buffer to size 0.
PR 27797
	* libbfd.c (bfd_realloc_or_free): Do not free a pointer than has
	been realloc'ed to size 0.
2021-04-30 14:04:08 +01:00
Nick Clifton
bceb87ef4d Fix illegal memory access when parsing a corrupt PE format file.
PR 27795
	* coff-rs6000.c (_bfd_xcoff_read_ar_hdr): Check for invalid name
	lengths.
2021-04-30 12:11:35 +01:00
GDB Administrator
7a8238b072 Automatic date update in version.in 2021-04-30 00:00:29 +00:00
Nick Clifton
09e40e44ad Fix an access through a null pointer when parsing a corrupt SOM format fle.
PR 27793
	* som.c (som_slurp_symbol_table): Assign symbols without any scope
	to the undefined section.
	(som_decode_symclass): Check for a missing symbol section.
	* syms.c (bfd_decode_symclass): Likewise.
2021-04-29 17:55:43 +01:00
Nick Clifton
063e75c9e4 Fix illegal memory accesses when parsing a corrupt SOM format file.
PR 27792
	* som.c (som_slurp_string_table): Place a terminating NUL byte at
	the end of the table.
	(som_slurp_symbol_table): Check for an over-large offset into the
	string string table.
2021-04-29 17:41:43 +01:00
GDB Administrator
ae95c78d26 Automatic date update in version.in 2021-04-29 00:00:33 +00:00
Nick Clifton
24aebc79b1 Stop the BFD library from treating annobin symbols as potential function symbols.
bfd	* elf.c (_bfd_elf_maybe_function_sym): Do not accept annobin
	symbols as potential function symbols.
	* elfnn-aarch64.c (elfNN_aarch64_maybe_function_sym): Likewise.
	* elf64-ppc.c (ppc64_elf_maybe_function_sym): Likewise.
	* elf32-arm.c (elf32_arm_maybe_function_sym): Likewise.

ld	* testsuite/ld-elf/anno-sym.s: New test source file.
	* testsuite/ld-elf/anno-sym.d: New test driver.
	* testsuite/ld-elf/anno-sym.l: New test error output.
2021-04-28 11:49:09 +01:00
GDB Administrator
6c356992b4 Automatic date update in version.in 2021-04-28 00:00:32 +00:00
Mike Frysinger
3955e34670 bfd: add stdlib.h when using abort
Since this file calls abort() now, we need to include stdlib.h for
its prototype.
2021-04-26 21:02:38 -04:00
GDB Administrator
674c58574b Automatic date update in version.in 2021-04-27 00:00:18 +00:00
Jan Beulich
a7664973b2 x86: correct overflow checking for 16-bit PC-relative relocs
The only insn requiring a truly 16-bit PC-relative relocation outside of
16-bit mode is XBEGIN (with an operand size override). For it, the
relocation generated should behave similar to 8- and (for 64-bit) 32-bit
PC-relatives ones, i.e. be checked for a signed value to fit the field.
This same mode is also correct for 16-bit code. Outside of 16-bit code,
branches with operand size overrides act in a truly PC-relative way only
when living in the low 32k of address space, as they truncate rIP to 16
bits. This can't be expressed by a PC-relative relocation.

Putting in place a new testcase, I'd like to note that the two existing
ones (pcrel16 and pcrel16abs) appear to be pretty pointless: They don't
expect any error despite supposedly checking for overflow, and in fact
there can't possibly be any error for the
- former since gas doesn't emit any relocation in the first place there,
- latter because the way the relocation gets expressed by gas doesn't
  allow the linker to notice the overflow; it should be detected by gas
  if at all, but see above (an error would be reported here for x86-64
  afaict, but this test doesn't get re-used there).
2021-04-26 10:41:35 +02:00
GDB Administrator
6476ec743f Automatic date update in version.in 2021-04-26 00:00:16 +00:00
GDB Administrator
219df3d924 Automatic date update in version.in 2021-04-25 00:00:17 +00:00
GDB Administrator
b2d14d3d8f Automatic date update in version.in 2021-04-24 00:00:15 +00:00
Eric Botcazou
f5e98b7d67 Fix type of .persistent.bss section
The change implementing the .persistent family of sections broke the
existing support for the .persistent.bss section in the compiler:

int a __attribute__ ((section (".persistent.bss")));

t.s: Assembler messages:
t.s:4: Warning: setting incorrect section type for .persistent.bss

The compiler encodes it as @nobits but the assembler expects @progbits.
The assembler is incorrect and should treat the section like the compiler.

bfd/
	* elf.c (special_sections_p): Add .persistent.bss.
gas/
	* testsuite/gas/elf/section25.d: Run it everywhere.
	* testsuite/gas/elf/section26.d: Likewise.
	* testsuite/gas/elf/section26.s: Add test for .persistent.bss.
2021-04-23 19:13:52 +02:00
Jan Beulich
c21346c5e2 x86: TLS desc call relocs target zero-size fields
These are marker relocations, so together with their bit size being zero
their byte size should be zero as well. This is expressed by a value of
3, not 0.
2021-04-23 09:18:48 +02:00
GDB Administrator
ae6a3f81a1 Automatic date update in version.in 2021-04-23 00:00:15 +00:00
Cl?ment Chigot
bdd2aaf69e fix string table generation for XCOFF64 .debug section
bfd	* hash.c (struct bfd_strtab_hash): Remove xcoff field.
	Add length_field_size field.
	(_bfd_stringtab_init): Change prototype.
	Adapt to new length_field_size.
	(_bfd_xcoff_stringtab_init): Likewise.
	(_bfd_stringtab_add): Likewise.
	(_bfd_stringtab_emit): Likewise.
	* libbfd-in.h (_bfd_xcoff_stringtab_init):
	Change prototype.
	* libbfd.h: Regenerate.
	* xcofflink.c (_bfd_xcoff_bfd_link_hash_table_create):
	Call _bfd_xcoff_stringtab_init with isxcoff64 value.
2021-04-22 15:31:02 +01:00
Cl?ment Chigot
b11b2969a9 Harmonize and improve auxiliary entries support for XCOFF
bfd/ChangeLog:
	* coff-rs6000.c (_bfd_xcoff_swap_aux_in): Add errors for
	unsupported storage class or auxialiry entries.
	Improve and adapt to new aux structures.
	Add C_DWARF support.
	(_bfd_xcoff_swap_aux_out): Likewise.
	* coff64-rs6000.c (_bfd_xcoff64_swap_aux_in): Likewise.
	(_bfd_xcoff64_swap_aux_out): Likewise.

binutils/ChangeLog:
	* od-xcoff.c (dump_xcoff32_symbols): Adapt to new
	aux structures.

include/ChangeLog:
	* coff/internal.h (union internal_auxent):
	 Add x_sect structure.
	* coff/rs6000.h (union external_auxent): Rework to
	match official documentation.
	* coff/rs6k64.h (union external_auxent): Likewise.
	(_AUX_SECT): New define.
2021-04-22 12:28:50 +01:00
GDB Administrator
1202f464b2 Automatic date update in version.in 2021-04-22 00:00:15 +00:00
Eli Zaretskii
18e9a809e8 Extend the description of PE header flags.
PR 27760
include	* coff/pe.h (IMAGE_DLLCHARACTERISTICS_APPCONTAINER): Define.
	(IMAGE_DLLCHARACTERISTICS_GUARD_CF): Define.

bfd	* peXXigen.c (_bfd_XX_print_private_bfd_data_common): Add display
	of IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP,
	IMAGE_FILE_NET_RUN_FROM_SWAP and IMAGE_FILE_UP_SYSTEM_ONLY flags.
	Decode the contents of the DllCharacteristics field.
2021-04-21 17:38:52 +01:00
Nick Clifton
33fe00c123 Fix an assertion failure in the BFD library when parsing a corrupt SREC format file.
PR 27759
	* srec.c (srec_read_section): Replace assertions with error
	returns.
2021-04-21 11:09:11 +01:00