]> git.ipfire.org Git - thirdparty/binutils-gdb.git/log
thirdparty/binutils-gdb.git
6 months agobuffer overflow in mmix_elf_relocate_section
Alan Modra [Fri, 17 Jan 2025 04:11:39 +0000 (14:41 +1030)] 
buffer overflow in mmix_elf_relocate_section

* elf64-mmix.c (mmix_elf_relocate_section): Correct size of
relocs shuffled by memmove.

6 months agoxtensa unnecessary free
Alan Modra [Thu, 16 Jan 2025 23:13:34 +0000 (09:43 +1030)] 
xtensa unnecessary free

No path to "cleanup" label has internal_relocs malloc'd.

* emultempl/xtensaelf.em (replace_insn_sec_with_prop_sec): Don't
free internal_relocs in cleanup.

6 months agoRISC-V: Added lost zcmt in gas imply testcase.
Nelson Chu [Fri, 17 Jan 2025 04:30:00 +0000 (12:30 +0800)] 
RISC-V: Added lost zcmt in gas imply testcase.

6 months agogas/NEWS: Updated risc-v assembler support in 2.44.
Nelson Chu [Fri, 17 Jan 2025 04:20:30 +0000 (12:20 +0800)] 
gas/NEWS: Updated risc-v assembler support in 2.44.

6 months agoRISC-V: Use t2 for tail if Zicfilp enabled
Kito Cheng [Fri, 17 Jan 2025 01:53:01 +0000 (09:53 +0800)] 
RISC-V: Use t2 for tail if Zicfilp enabled

This change is to make tail conform with software guarded jump of Zicfilp. The
reason to not choose t1 as the label register is that t1 is also as .got.plt
offset of _dl_runtime_resolve in PLT.

See more: https://github.com/riscv-non-isa/riscv-asm-manual/pull/93

6 months agoRISC-V: Support CFI Zicfiss and Zicfilp instructions and CSR.
Monk Chiang [Fri, 17 Jan 2025 01:53:00 +0000 (09:53 +0800)] 
RISC-V: Support CFI Zicfiss and Zicfilp instructions and CSR.

https://github.com/riscv/riscv-cfi/releases/tag/v1.0

This patch only support the CFI instructions and CSR in assembler.

6 months agoRISC-V: Support ssctr/smctr extensions with version 1.0.
Nelson Chu [Tue, 18 Jun 2024 04:48:26 +0000 (12:48 +0800)] 
RISC-V: Support ssctr/smctr extensions with version 1.0.

https://github.com/riscv/riscv-control-transfer-records/releases/tag/v1.0

The privileged spec v1.10 already removed the sfence.vm instruction, and the
encoding of sfence.vm instruction is overlapped with the sctrclr instruction
of ssctr/smctr.  But since the privileged spec v1.10 already removed the
sfence.vm, and we no longer support the privileged spec v1.9.1 for now, we
had to remove the sfence.vm.

bfd/
* elfxx-riscv.c (riscv_implicit_subsets): Imply zicsr for ssctr/smctr.
(riscv_supported_std_s_ext): Added ssctr/smctr with version 1.0.
(riscv_multi_subset_supports): Handle INSN_CLASS for ssctr/smctr.
(riscv_multi_subset_supports_ext): Likewise.
gas/
* config/tc-riscv.c (enum riscv_csr_class, riscv_csr_address):
Added and handle CSR_CLASS_SSCTR and CSR_CLASS_SMCTR.
(riscv_is_priv_insn): Removed SFENCE_VM check.
* testsuite/gas/riscv/attribute-14e.d: Removed since sfence.vm is no
longer supported since privileged spec v1.10.
* testsuite/gas/riscv/attribute-14.s: Likewise.
* testsuite/gas/riscv/csr-version-1p10.d: Updated for ssctr/smctr CSRs.
* testsuite/gas/riscv/csr-version-1p10.l: Likewise.
* testsuite/gas/riscv/csr-version-1p11.d: Likewise.
* testsuite/gas/riscv/csr-version-1p11.l: Likewise.
* testsuite/gas/riscv/csr-version-1p12.d: Likewise.
* testsuite/gas/riscv/csr-version-1p12.l: Likewise.
* testsuite/gas/riscv/csr.s: Likewise.
* testsuite/gas/riscv/csr-dw-regnums.d: Likewise.
* testsuite/gas/riscv/csr-dw-regnums.s: Likewise.
* testsuite/gas/riscv/march-help.l: Updated for ssctr/smctr.
* testsuite/gas/riscv/smctr-ssctr.d: New testcase for sctr instruction.
* testsuite/gas/riscv/smctr-ssctr.s: Likewise.
include/
* opcode/riscv-opc.h: Added encoding macro for sctrclr, but removed
encoding macro for sfence.vm since encoding conflict.  Added CSR
numbers for ssctr/smctr CSRs.
* opcode/riscv.h (enum riscv_insn_class): Added
INSN_CLASS_SMCTR_OR_SSCTR for sctrclr.
opcodes/
* riscv-opc.c (riscv_opcodes): Added sctrclr, but removed sfence.vm
since encoding conflict.

6 months agogprofng: don't check Elf when file is in archive
Vladimir Mezentsev [Thu, 16 Jan 2025 03:42:43 +0000 (19:42 -0800)] 
gprofng: don't check Elf when file is in archive

map.xml contains a checksum for all Elf files.
gprofng-archive archives a file only with the same checksum.
In gprofng-display-text no additional check is required.

gprofng/ChangeLog
2025-01-15  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>

* src/parse.cc: Don't check Elf when file is in archive.

6 months agoRe: ld parser buffer leak
Alan Modra [Fri, 17 Jan 2025 03:53:43 +0000 (14:23 +1030)] 
Re: ld parser buffer leak

Apparently reflex doesn't have yyalloc.

* ldlex.l (yy_create_string_buffer): Revert last change.

6 months agox86: Ignore rounding for vcvt[,u]si2sd under r32 and vcvt[,u]dq2pd instead of reporti...
Haochen Jiang [Tue, 14 Jan 2025 08:18:50 +0000 (16:18 +0800)] 
x86: Ignore rounding for vcvt[,u]si2sd under r32 and vcvt[,u]dq2pd instead of reporting bad for disassembler

According to SDM, vcvt[,u]si2sd under r32 and vcvt[,u]dq2pd treat
Rounding as Ignored when trying to using them. Thus, disassembler
should accept bytecode with rounding instead of reporting bad.

For assembler, it needs some more time to decide how to deal
with that.

gas/ChangeLog:

* testsuite/gas/i386/evex.d: Add new testcase for vcvt[,u]dq2pd.
Change the output for vcvt[,u]si2sd.
* testsuite/gas/i386/evex.s: Ditto.
* testsuite/gas/i386/x86-64-evex.d: Ditto.

opcodes/ChangeLog:

* i386-dis-evex-w.h: Add EXxEVexR64 for vcvt[,u]dq2pd.
* i386-dis.c (OP_Rounding): Mark EVEX_b as used to change the handle
for ignored rounding.

6 months agoAutomatic date update in version.in
GDB Administrator [Fri, 17 Jan 2025 00:00:28 +0000 (00:00 +0000)] 
Automatic date update in version.in

6 months agoplugin_get_ir_dummy_bfd leak
Alan Modra [Sat, 11 Jan 2025 05:47:20 +0000 (16:17 +1030)] 
plugin_get_ir_dummy_bfd leak

* plugin.c (plugin_get_ir_dummy_bfd): Free bfd filename.

6 months agold parser buffer leak
Alan Modra [Sat, 11 Jan 2025 05:46:14 +0000 (16:16 +1030)] 
ld parser buffer leak

* ldlex.l (<<EOF>>): yy_delete_buffer current.
(yy_create_string_buffer): Use yyalloc.

6 months agowrite_build_id and write_package_metadata leaks
Alan Modra [Sat, 11 Jan 2025 05:43:51 +0000 (16:13 +1030)] 
write_build_id and write_package_metadata leaks

There isn't much sense in stashing contents in sec->contents
after those contents have been written.

* ldelf.c (write_build_id): Don't assign sec->contents.
Free contents if malloc'd here.
(write_package_metadata): Likewise.

6 months agoldelf_search_needed leak
Alan Modra [Sat, 11 Jan 2025 05:42:42 +0000 (16:12 +1030)] 
ldelf_search_needed leak

* ldelf.c (ldelf_search_needed): Free filename before returning.

6 months agofree ldfile search paths
Alan Modra [Sat, 11 Jan 2025 05:35:06 +0000 (16:05 +1030)] 
free ldfile search paths

* ldfile.c (ldfile_remap_input_free): Make static, call from..
(ldfile_free): ..here.  New function.
(ldfile_library_path_free, ldfile_script_free),
( ldfile_arch_free): New functions.
(ldfile_find_command_file): Free script_dir.  Move
script_search to file scope.
(ldfile_open_command_file_1): Delete FIXME comment.
* ldfile.h (ldfile_remap_input_free): Delete.
(ldfile_free): Declare.
* ldlang.c (lang_finish): Update.

6 months agooutput_section_statement leak
Alan Modra [Sat, 11 Jan 2025 05:30:55 +0000 (16:00 +1030)] 
output_section_statement leak

This frees output_section_statement data, which is currently only used
by elf targets but doing so for all targets is simpler and more
future proof than adding ths to ldelf_finish.  (Doing it there
requires moving the function to ldelfgen.c.)

* ldemul.c (finish_default): Free os->data.

6 months agoNEWS: Mention mixed LTO and non-LTO output support for ld -r
H.J. Lu [Thu, 16 Jan 2025 10:58:29 +0000 (18:58 +0800)] 
NEWS: Mention mixed LTO and non-LTO output support for ld -r

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
6 months agoCopy gcc commit e76df3586417d645dd84e8a1ab165605a8924796 to sourceware
Nick Clifton [Thu, 16 Jan 2025 15:51:52 +0000 (15:51 +0000)] 
Copy gcc commit e76df3586417d645dd84e8a1ab165605a8924796  to sourceware

6 months agoHave readelf sanitize the program interpreter string before displaying it.
Nick Clifton [Thu, 16 Jan 2025 15:48:40 +0000 (15:48 +0000)] 
Have readelf sanitize the program interpreter string before displaying it.

6 months ago[gdb/testsuite] Fix gdb.dwarf2/implptr.exp regression
Tom de Vries [Thu, 16 Jan 2025 14:00:11 +0000 (15:00 +0100)] 
[gdb/testsuite] Fix gdb.dwarf2/implptr.exp regression

When running test-case gdb.dwarf2/implptr.exp on target board unix/-m32, we
get:
...
(gdb) PASS: gdb.dwarf2/implptr.exp: print ***l in implptr:bar
break implptr.c:34^M
No compiled code for line 34 in file "implptr.c".^M
Make breakpoint pending on future shared library load? (y or [n]) n^M
(gdb) FAIL: $exp: set baz breakpoint for implptr (got interactive prompt)
...

This is a regression since commit dcaa85e58c4 ("gdb: reject inserting
breakpoints between functions").

The .debug_line info does not contain an entry with a line number lower than
36, so gdb cannot map it to an address.

Fix this by setting a breakpoint at the function containing line 34 instead.

Tested on x86_64-linux.

PR testsuite/32477
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32477

6 months agox86: Support x86 Zhaoxin PadLock PHE2 instructions
MayShao-oc [Thu, 16 Jan 2025 09:31:14 +0000 (10:31 +0100)] 
x86: Support x86 Zhaoxin PadLock PHE2 instructions

The CPUID EDX bit[26] indicates its enablement, and it includes REP
XSHA384 and REP XSHA512.

gas/ChangeLog:

* NEWS: Support Zhaoxin PadLock PHE2 instructions.
* config/tc-i386.c (add_branch_prefix_frag_p): Don't add prefix to
PadLockPHE2 instructions.
(output_insn): Handle PadLockPHE2 instructions.
* doc/c-i386.texi: Document PadLockPHE2.
* testsuite/gas/i386/i386.exp: Add PadLockPHE2 test.
* testsuite/gas/i386/padlock_phe2.d: Ditto.
* testsuite/gas/i386/padlock_phe2.s: Ditto.

opcodes/ChangeLog:

* i386-dis.c: Add PadLockPHE2.
* i386-gen.c: Ditto
* i386-opc.h (CpuPadLockPHE2): New.
* i386-opc.tbl: Add Zhaoxin PadLock PHE2 instructions.
* i386-tbl.h: Regenerated.
* i386-mnem.h: Ditto.
* i386-init.h: Ditto.

6 months agodisassemble_free_powerpc
Alan Modra [Tue, 14 Jan 2025 23:18:44 +0000 (09:48 +1030)] 
disassemble_free_powerpc

This fixes leaks in a ppc disassembler buffer.  I'm not sure now why I
used a private buffer for section contents, but I'm not going to
change that just now.

* disassemble.h (disassemble_free_powerpc): Declare.
* disassemble.c (disassemble_free_target): Call it.
* ppc-dis.c (disassemble_free_powerpc): New function.

6 months agoppc plt sym memory leak
Alan Modra [Tue, 14 Jan 2025 22:41:55 +0000 (09:11 +1030)] 
ppc plt sym memory leak

* elf32-ppc.c (add_stub_sym): Alloc the sym name.

6 months agogas ppc .machine leak
Alan Modra [Tue, 14 Jan 2025 10:38:09 +0000 (21:08 +1030)] 
gas ppc .machine leak

* config/tc-ppc.c (ppc_machine): Free cpu_string.

6 months agoelf64-ppc.c memory leaks
Alan Modra [Tue, 14 Jan 2025 10:34:27 +0000 (21:04 +1030)] 
elf64-ppc.c memory leaks

I've freed htab->relr in two places, first when we're done with it
in ppc64_elf_build_stubs, and also when freeing the hasn table to
catch cases where the linker exits early due to errors.

* elf64-ppc.c (ppc64_elf_link_hash_table_free): Free htab->relr.
(ppc64_elf_build_stubs): Also free it here.
(ppc_add_stub): Copy stub_name when creating..
(ppc64_elf_size_stubs): ..and always free stub_name.
(opd_entry_value): Free sym.
(ppc_build_one_stub): bfd_alloc stub sym name.
(build_global_entry_stubs_and_plt): Likewise.
(ppc64_elf_setup_section_lists): bfd_zalloc htab->sec_info.

6 months agogas HANDLE_ALIGN and frag_alloc
Alan Modra [Tue, 14 Jan 2025 04:38:23 +0000 (15:08 +1030)] 
gas HANDLE_ALIGN and frag_alloc

This adds the section to HANDLE_ALIGN args, so that the frag created
by the ppc backend can be properly allocated on the frag obstack.
I've added an extra param to frag_alloc too, for cases where we know
the frag requires at least some bytes in fr_literal.  This simplifies
some existing code, for example in compress_debug and relax_segment.
In the case of the relax_segment code, I think we may have had a bug
there in using obstack_blank_fast, which doesn't check that the frag
has room.

* config/tc-ppc.c (ppc_handle_align): Add section param,
use frag obstack to allocate frag.
* config/tc-ppc.h (HANDLE_ALIGN, ppc_handle_align): Add extra
param.
* config/tc-aarch64.h (HANDLE_ALIGN): Add extra param.
* config/tc-alpha.h: Likewise.
* config/tc-arc.h: Likewise.
* config/tc-arm.h: Likewise.
* config/tc-avr.h: Likewise.
* config/tc-epiphany.h: Likewise.
* config/tc-frv.h: Likewise.
* config/tc-i386.h: Likewise.
* config/tc-ia64.h: Likewise.
* config/tc-kvx.h: Likewise.
* config/tc-loongarch.h: Likewise.
* config/tc-m32c.h: Likewise.
* config/tc-m32r.h: Likewise.
* config/tc-metag.h: Likewise.
* config/tc-mips.h: Likewise.
* config/tc-mn10300.h: Likewise.
* config/tc-nds32.h: Likewise.
* config/tc-riscv.h: Likewise.
* config/tc-rl78.h: Likewise.
* config/tc-rx.h: Likewise.
* config/tc-sh.h: Likewise.
* config/tc-sparc.h: Likewise.
* config/tc-spu.h: Likewise.
* config/tc-tilegx.h: Likewise.
* config/tc-tilepro.h: Likewise.
* config/tc-v850.h: Likewise.
* config/tc-visium.h: Likewise.
* config/tc-wasm32.h: Likewise.
* config/tc-xtensa.h: Likewise.
* frags.h (frag_alloc): Update prototype.
* frags.c (frag_alloc): Add extra size param, allocate extra.
(frag_new): Update.
* subsegs.c (subseg_set_rest): Update frag_alloc call.
* write.c: Formatting.
(cvt_frag_to_fill): Pass sec to HANDLE_ALIGN.
(compress_frag): Update frag_alloc call.
(compress_debug): Use new frag_alloc to simplify frag sizing.
(relax_segment): Likewise.

6 months agobinary outsymbols
Alan Modra [Thu, 16 Jan 2025 04:21:56 +0000 (14:51 +1030)] 
binary outsymbols

This fixes leaks of outsymbols for various targets that use the
generic linker.  The key fix here is to not generate output symbols
for targets that won't ever write symbols, and of course to free
outsymbols after they've been written in targets that do.  Target
vector object_flags and section_flags are updated to better reflect
target capabilities, in particular not setting HAS_SYMS or SEC_RELOC
when the target does not support symbols or relocs.

* binary.c (binary_vec): Update section_flags.
* linker.c (generic_add_output_symbol): Don't add to
outsymbols if !HAS_SYMS.
* srec.c (srec_write_symbols): Free outsymbols on return.
(srec_vec): Update object_flags and section_flags.
(symbolsrec_vec): Likewise.
* tekhex.c (tekhex_write_object_contents): Free outsymbols on
return.
(tekhex_vec): Update object_flags and section_flags.
* verilog.c (verilog_vec): Likewise.

6 months agotidy binary, ihex and verilog
Alan Modra [Thu, 16 Jan 2025 04:15:01 +0000 (14:45 +1030)] 
tidy binary, ihex and verilog

* binary.c (binary_sizeof_headers): Delete function.  Define
instead.
* ihex.c (ihex_sizeof_headers): Likewise.
(ihex_vec): Use _bfd_nosymbols for BFD_JUMP_TABLE_SYMBOLS.  Delete
now unused defines.
* verilog.c: Delete unused defines.

6 months agogenlink tidy
Alan Modra [Thu, 16 Jan 2025 04:20:03 +0000 (14:50 +1030)] 
genlink tidy

Some of the declarations in genlink.h are not used in current sources
apart from needing them in linker.c, so delete and/or move them there.
The patch also fixes a FIXME.  It's actually quite easy to return
a failure from a hash traversal function.

* genlink.h (_bfd_generic_link_hash_newfunc): Delete.
(_bfd_generic_link_output_symbols),
(generic_write_global_symbol_info),
(_bfd_generic_link_write_global_symbol): Move to..
* linker.c: ..here, making functions static.
(generic_write_global_symbol_info): Add "failed".
(_bfd_generic_final_link): Handle wginfo.failed.
(_bfd_generic_link_write_global_symbol): Set wginfo->failed
on memory failures and return false rather than aborting.

6 months ago[gdb/testsuite] Fix timeouts in gdb.threads/step-over-thread-exit.exp
Tom de Vries [Thu, 16 Jan 2025 08:39:55 +0000 (09:39 +0100)] 
[gdb/testsuite] Fix timeouts in gdb.threads/step-over-thread-exit.exp

Once in a while, I run into a timeout in test-case
gdb.threads/step-over-thread-exit.exp:
...
(gdb) continue^M
Continuing.^M
[New Thread 0xfffff7cff1a0 (LWP 2874854)]^M
^M
Thread 97 "step-over-threa" hit Breakpoint 2, 0x0000000000410314 in \
  my_exit_syscall () at gdb/testsuite/lib/my-syscalls.S:74^M
74      SYSCALL (my_exit, __NR_exit)^M
(gdb) [Thread 0xfffff7cff1a0 (LWP 2874853) exited]^M
FAIL: $exp: step_over_mode=displaced: non-stop=on: target-non-stop=on: \
  schedlock=off: cmd=continue: ns_stop_all=0: iter 95: continue (timeout)
...

I can reproduce it more frequently by running with taskset -c <slow core id>.

Fix this by using -no-prompt-anchor.

This requires us to add -no-prompt-anchor to proc gdb_test_multiple.

Tested on aarch64-linux.

PR testsuite/32489
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32489

6 months ago[gdb/python] Run black on gdb/gdbarch_components.py
Tom de Vries [Thu, 16 Jan 2025 08:30:58 +0000 (09:30 +0100)] 
[gdb/python] Run black on gdb/gdbarch_components.py

The sourceware buildbot reported "python black formatter ( failure )" at
commit b034bb38772 ("[gdb] Add gdbarch_dwarf2_reg_piece_offset hook").

Fix this by running the precommit hooks in a container with Python 3.11 using:
...
$ pre-commit run --files gdb*/*
...

6 months agogdbserver: Fix build on MIPS
Sergio Durigan Junior [Thu, 16 Jan 2025 01:08:48 +0000 (20:08 -0500)] 
gdbserver: Fix build on MIPS

Commit 3470a0e144df6c01f8479fa649f43aa907936e7e inadvertently broke
the build on MIPS because it's passing a non-existent "pid" argument
to "proc->for_each_thread".  This commit fixes the problem by removing
the argument from the call.

Signed-off-by: Sergio Durigan Junior <sergiodj@sergiodj.net>
6 months agoAutomatic date update in version.in
GDB Administrator [Thu, 16 Jan 2025 00:00:25 +0000 (00:00 +0000)] 
Automatic date update in version.in

6 months agox86 relr memory leaks
Alan Modra [Wed, 15 Jan 2025 12:42:52 +0000 (23:12 +1030)] 
x86 relr memory leaks

This fixes some x86 memory leaks.  I think it would be possible to
free the relr data in _bfd_elf_x86_finish_relative_relocs if we
wanted to reclaim some memory earlier, but for tidying after errors we
likely would need to free in the hash_table_free function anyway.

_bfd_x86_elf_link_relax_section is called via bfd_relax_section,
ie. whenever relaxation is enabled.  This is a waste of time if
dt_relr relocs are not enabled since the function is there only to
handle relr.

* elfxx-x86.c (elf_x86_link_hash_table_free): Free relr data.
(_bfd_x86_elf_link_relax_section): Return early
if !info->enable_dt_relr.  Do set "again" false before early
returns.

6 months agoTidy elf_mmap_section_contents
Alan Modra [Wed, 15 Jan 2025 12:51:32 +0000 (23:21 +1030)] 
Tidy elf_mmap_section_contents

It is simpler to clear the buffer pointer in the caller than pass
a param that controls clearing.

* elf.c (elf_mmap_section_contents): Remove final_link param.
(_bfd_elf_mmap_section_contents): Instead set *buf to NULL here.
(_bfd_elf_link_mmap_section_contents): Adjust.

6 months agoelf_x86_64_scan_relocs error paths
Alan Modra [Sun, 12 Jan 2025 04:05:02 +0000 (14:35 +1030)] 
elf_x86_64_scan_relocs error paths

Fix some memory leaks.

* elf64-x86-64.c (elf_x86_64_scan_relocs): Ensure error return
paths that should free relocs go via error_return.

6 months agoAdd support for IMPORT_CONST in ILF (MSVC style) import libraries
Martin Storsjö [Sat, 11 Jan 2025 18:42:09 +0000 (20:42 +0200)] 
Add support for IMPORT_CONST in ILF (MSVC style) import libraries

This is a very strange and obsolete kind of import type; it is
used for imported data just like IMPORT_DATA - but with an extra
odd caveat.

The behaviour is explained at [1]; generating such import libraries
with current MSVC tools produces "warning LNK4087: CONSTANT keyword is
obsolete; use DATA".

While obsolete, some import libraries within the Microsoft WDK (Windows
Driver Kit) do contain such symbols, which currently are ignored by
binutils and produce warnings about "file format not recognized".

For IMPORT_CONST for a DLL exported symbol "foo", we should provide
the import library symbols "__imp_foo" and "foo". For IMPORT_DATA, we
only provide "__imp_foo", and for IMPORT_CODE, "foo" points at a thunk.
The odd/surprising thing for IMPORT_CONST is that the "foo" symbol also
points at the same thing as "__imp_foo", i.e. directly at the IAT
entry.

[1] https://learn.microsoft.com/en-us/cpp/build/importing-using-def-files

Signed-off-by: Martin Storsjö <martin@martin.st>
6 months agoaarch64: GCS tests for linking issues with dynamic objects
Matthieu Longo [Tue, 5 Nov 2024 12:58:51 +0000 (12:58 +0000)] 
aarch64: GCS tests for linking issues with dynamic objects

6 months agoaarch64: check GCS feature in GNU properties of input dynamic objects
Matthieu Longo [Fri, 8 Nov 2024 11:03:55 +0000 (11:03 +0000)] 
aarch64: check GCS feature in GNU properties of input dynamic objects

The Guarded Control Stack (GCS) feature requires that two things:
- at static link time, all the input objects of a link unit have to
  be compatible with GCS.
- at runtime, the executable and the shared libraries which it
  depends on have to be compatible with GCS.
Both of those criteria are checked with the GCS feature stored in
the GNU property note.

The previous patch, adding support for the GCS feature check in GNU
note properties for input objects, ignored the input dynamic objects.
Although this support was better than no check, it was still
delaying the detection of compatibility issues up to the runtime
linker.

In order to help the developer in detecting such an incompatibility
issue as early as possible, this patch adds a check for input dynamic
objects lacking the GCS marking. This check can be controlled via the
linker option '-z gcs-report-dynamic[=none|warning|error]'. By default,
if the option is omitted, it inherits the value from '-z gcs-report'.
However, the inherited value is capped to 'warning' as a user might
want to only report errors in the currently built module, and not the
shared dependencies. If a user also wants to error on GCS issues in
the shared libraries, '-z gcs-report-dynamic=error' will have to be
specified explicitly.

6 months agogdb: boolify the 'in_g_packet' field of remote's 'packet_reg'
Tankut Baris Aktemur [Wed, 15 Jan 2025 16:25:16 +0000 (17:25 +0100)] 
gdb: boolify the 'in_g_packet' field of remote's 'packet_reg'

Boolify the 'in_g_packet' of the 'packet_reg' struct that is used in
remote.c.

6 months agogdbserver: remove an obsolete comment in tracepoint.cc
Tankut Baris Aktemur [Wed, 15 Jan 2025 16:25:15 +0000 (17:25 +0100)] 
gdbserver: remove an obsolete comment in tracepoint.cc

The comment

  /* Functions local to this file.  */

has somehow been positioned above struct definitions, not functions.
Some static function declarations are given after the structs, to
where the comment could be moved, but the comment is not really
helpful.  Therefore remove it.

6 months agogdbserver: remove forward declaration of struct tracepoint_hit_ctx
Tankut Baris Aktemur [Wed, 15 Jan 2025 16:25:15 +0000 (17:25 +0100)] 
gdbserver: remove forward declaration of struct tracepoint_hit_ctx

Remove the unnecessary forward declaration for `struct tracepoint_hit_ctx`.

6 months ago[gdb/tdep] Fix gdb.base/store.exp on s390x
Tom de Vries [Wed, 15 Jan 2025 16:02:00 +0000 (17:02 +0100)] 
[gdb/tdep] Fix gdb.base/store.exp on s390x

On s390x-linux, I get:
...
(gdb) print l^M
$29 = 0^M
(gdb) FAIL: gdb.base/store.exp: var doublest l; print old l, expecting -1
...

So, we're in wack_doublest trying to print l, which is a copy of parameter u:
...
  register doublest l = u, r = v;
...
which does have the expected value:
...
(gdb) p u
$1 = -1
...
which is a long double, 16 bytes and looks like this:
...
(gdb) p /x u
$3 = 0xbfff0000000000000000000000000000
...

Parameter u is passed in two registers:
...
 <2><6a5>: Abbrev Number: 15 (DW_TAG_formal_parameter)
    <6a6>   DW_AT_name        : v
    <69e>   DW_AT_location    : 6 byte block: 50 93 8 51 93 8 \
      (DW_OP_reg0 (r0); DW_OP_piece: 8; DW_OP_reg1 (r1); DW_OP_piece: 8)
...
and indeed we find the msw in r0 and the lsw in r1:
...
(gdb) p /x $r0
$4 = 0xbfff000000000000
(gdb) p /x $r1
$5 = 0x0
(gdb)
...

Likewise, variable l consists of two registers:
...
 <2><6b5>: Abbrev Number: 13 (DW_TAG_variable)
    <6b6>   DW_AT_name        : l
    <6be>   DW_AT_location    : 6 byte block: 68 93 8 69 93 8 \
      (DW_OP_reg24 (f8); DW_OP_piece: 8; DW_OP_reg25 (f10); DW_OP_piece: 8)
...
and we find the same values there:
...
(gdb) p /x $f8
$6 = 0xbfff000000000000
(gdb) p /x $f10
$7 = 0x0
...

So, we get the expected results when fetching the value from two gprs, but not
when fetching the value from two fprs.

When fetching the values from the two fprs, we stumble upon a particularity of
the DWARF register numbers as defined by the s390x ABI [1]: dwarf register 24
maps to both floating-point register f8 (8 bytes), and vector register v8
(16 bytes).

In s390_dwarf_reg_to_regnum, it's determined which of the two is chosen, and
if available vector registers are preferred over floating-point registers, so
v8 is chosen, and used to fetch the value.

Since the size of the DW_OP_piece is 8 bytes, and the register size is 16
bytes, this bit in rw_pieced_value is activated:
...
    /* If the piece is located in a register, but does not
       occupy the entire register, the placement of the piece
       within that register is defined by the ABI. */
    bits_to_skip
      += 8 * gdbarch_dwarf2_reg_piece_offset (arch, gdb_regnum,
      p->size / 8);
...
but since the default implemention default_dwarf2_reg_piece_offset does not
match the s390x ABI, we get the wrong answer.

This is a known problem, see FOSDEM 2018 presentation "DWARF Pieces And Other
DWARF Location Woes" [2].

Fix this by adding s390_dwarf2_reg_piece_offset, roughly implementing the same
logic as in s390_value_from_register.

Tested on s390x-linux.

Approved-By: Tom Tromey <tom@tromey.com>
[1] https://github.com/IBM/s390x-abi
[2] https://archive.fosdem.org/2018/schedule/event/dwarfpieces

6 months ago[gdb] Add gdbarch_dwarf2_reg_piece_offset hook
Tom de Vries [Wed, 15 Jan 2025 16:02:00 +0000 (17:02 +0100)] 
[gdb] Add gdbarch_dwarf2_reg_piece_offset hook

In rw_pieced_value, when reading/writing part of a register, DW_OP_piece and
DW_OP_bit_piece are handled the same, but the standard tells us:
- DW_OP_piece: if the piece is located in a register, but does not occupy the
  entire register, the placement of the piece within that register is defined
  by the ABI.
- DW_OP_bit_piece: if the location is a register, the offset is from the least
  significant bit end of the register.

Add a new hook gdbarch_dwarf2_reg_piece_offset that allows us to define the
ABI-specific behaviour for DW_OP_piece.

The default implementation of the hook is the behaviour of DW_OP_bit_piece, so
there should not be any functional changes.

Tested on s390x-linux.

Approved-By: Tom Tromey <tom@tromey.com>
6 months ago[gdb/symtab] Add dwarf_expr_piece.op
Tom de Vries [Wed, 15 Jan 2025 16:02:00 +0000 (17:02 +0100)] 
[gdb/symtab] Add dwarf_expr_piece.op

Add a new field "dwarf_location_atom op" to dwarf_expr_piece to keep track of
which dwarf_location_atom caused a dwarf_expr_piece to be added.

This is used in the following patch.

Tested on s390x-linux.

Approved-By: Tom Tromey <tom@tromey.com>
6 months agoFix help formatting for string and filename options
Tom Tromey [Mon, 13 Jan 2025 14:26:10 +0000 (07:26 -0700)] 
Fix help formatting for string and filename options

I happened to notice that "help add-inferior" said:

  -execFILENAME
    FILENAME is the file name of the executable to use as the
    main program.

This is missing a space after "-exec".  This patch fixes the bug.

If ok'd on time I plan to check this in to the gdb-16 branch as well.

Approved-by: Kevin Buettner <kevinb@redhat.com>
6 months agogdbserver: LoongArch: Add hardware watchpoint/breakpoint support
Hui Li [Mon, 6 Jan 2025 10:21:23 +0000 (18:21 +0800)] 
gdbserver: LoongArch: Add hardware watchpoint/breakpoint support

LoongArch defines hardware watchpoint functions for fetch and load/store
operations, the related support for gdb was added in the following two

  commit c1cdee0e2c17 ("gdb: LoongArch: Add support for hardware watchpoint")
  commit 6ced1278fc00 ("gdb: LoongArch: Add support for hardware breakpoint")

Now, add hardware watchpoint and breakpoint support for gdbserver on
LoongArch.

Here is a simple example

$ cat test.c
  #include <stdio.h>
  int a = 0;
  int b = 0;
  int main()
  {
    printf("start test\n");
    a = 1;
    printf("a = %d\n", a);
    a = 2;
    printf("a = %d\n", a);
    b = 2;
    printf("b = %d\n", b);
    return 0;
  }
$ gcc -g test.c -o test

Execute on the target machine:

$ gdbserver 192.168.1.100:1234 ./test

Execute on the host machine:

$ gdb ./test
...
(gdb) target remote 192.168.1.100:1234
...
(gdb) b main
Breakpoint 1 at 0x1200006b8: file test.c, line 6.
(gdb) c
Continuing.
...
Breakpoint 1, main () at test.c:6
6     printf("start test\n");
(gdb) watch a
Hardware watchpoint 2: a
(gdb) hbreak 11
Hardware assisted breakpoint 3 at 0x120000700: file test.c, line 11.
(gdb) c
Continuing.

Hardware watchpoint 2: a

Old value = 0
New value = 1
main () at test.c:8
8     printf("a = %d\n", a);
(gdb) c
Continuing.

Hardware watchpoint 2: a

Old value = 1
New value = 2
main () at test.c:10
10     printf("a = %d\n", a);
(gdb) c
Continuing.

Breakpoint 3, main () at test.c:11
11     b = 2;
(gdb) c
Continuing.
[Inferior 1 (process 696656) exited normally]

Output on the target machine:

Process ./test created; pid = 696708
Listening on port 1234
Remote debugging from host 192.168.1.200, port 60742
start test
a = 1
a = 2
b = 2

Child exited with status 0

Signed-off-by: Hui Li <lihui@loongson.cn>
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
6 months agogdb: LoongArch: Adjust loongarch_stopped_data_address()
Hui Li [Mon, 6 Jan 2025 10:21:22 +0000 (18:21 +0800)] 
gdb: LoongArch: Adjust loongarch_stopped_data_address()

loongarch_stopped_data_address() is a common function and will be used by
gdb and gdbserver, so move its definition from gdb/loongarch-linux-nat.c
to gdb/nat/loongarch-hw-point.c. This is preparation for later gdbserver
patch on LoongArch and is no effect for the current code.

Signed-off-by: Hui Li <lihui@loongson.cn>
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
6 months agogdb: LoongArch: Adjust loongarch_{get,remove}_debug_reg_state()
Hui Li [Mon, 6 Jan 2025 10:21:21 +0000 (18:21 +0800)] 
gdb: LoongArch: Adjust loongarch_{get,remove}_debug_reg_state()

loongarch_{get,remove}_debug_reg_state() are used as helper functions
by loongarch_linux_nat_target. We should move their definitions from
gdb/nat/loongarch-linux-hw-point.c to gdb/loongarch-linux-nat.c.

Signed-off-by: Hui Li <lihui@loongson.cn>
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
6 months agogdb: LoongArch: Remove loongarch_lookup_debug_reg_state()
Hui Li [Mon, 6 Jan 2025 10:21:20 +0000 (18:21 +0800)] 
gdb: LoongArch: Remove loongarch_lookup_debug_reg_state()

loongarch_lookup_debug_reg_state() is a unused function, so we
can remove it.

Signed-off-by: Hui Li <lihui@loongson.cn>
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
6 months agold: Update gld${EMULATION_NAME}_place_orphan for PE/PEP
H.J. Lu [Wed, 15 Jan 2025 10:13:50 +0000 (18:13 +0800)] 
ld: Update gld${EMULATION_NAME}_place_orphan for PE/PEP

Similar to ldelf_place_orphan, initialize hold from orig_hold at run-time
in PE and PEP gld${EMULATION_NAME}_place_orphan.

* emultempl/pe.em (orphan_init_done): Make it file scope.
(gld${EMULATION_NAME}_finish): Set orphan_init_done to false for
the object-only output.
(gld${EMULATION_NAME}_place_orphan): Rename hold to orig_hold.
Initialize hold from orig_hold at run-time.
* emultempl/pep.em (orphan_init_done): Make it file scope.
(gld${EMULATION_NAME}_finish): Set orphan_init_done to false for
the object-only output.
(gld${EMULATION_NAME}_place_orphan): Rename hold to orig_hold.
Initialize hold from orig_hold at run-time.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
6 months agold: Correct ldelf_place_orphan
H.J. Lu [Wed, 15 Jan 2025 10:11:47 +0000 (18:11 +0800)] 
ld: Correct ldelf_place_orphan

Remove the extra for loop and if statement in ldelf_place_orphan.

* ldelf.c (ldelf_place_orphan): Remove the extra for loop and if
statement.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
6 months agogdb/testsuite: make gdb.reverse/i386-avx-reverse.exp require also avx2
Jan Vrany [Wed, 15 Jan 2025 12:20:06 +0000 (12:20 +0000)] 
gdb/testsuite: make gdb.reverse/i386-avx-reverse.exp require also avx2

The test gdb.reverse/i386-avx-reverse.exp requires CPU to have AVX
instructions but it actually also uses AVX2 instructions (like
vpcmpeqd). This caused the test to fail on CPUs that have AVX but not
AVX2.

This commit adds check for AVX2.

Tested on Intel Xeon CPU E3-1265L (no AVX2) and Intel Core i7-1355U
(has AVX2).

6 months agobfd_get_unique_section_name leak
Alan Modra [Sat, 11 Jan 2025 05:28:03 +0000 (15:58 +1030)] 
bfd_get_unique_section_name leak

The name returned by this function is used in asection->name, so
needs to persist until a bfd is closed.

* section.c (bfd_get_unique_section_name): Return an alloc'd
string.

6 months agoFree symtab_hdr.contents and a cache_size correction
Alan Modra [Sat, 11 Jan 2025 05:26:45 +0000 (15:56 +1030)] 
Free symtab_hdr.contents and a cache_size correction

symtab_hdr.contents looks to be malloc'd memory, except in one case.
Change that one case to also be malloc'd and free when we are done.

* elf.c (swap_out_syms): bfd_malloc outbound_syms.
(_bfd_elf_free_cached_info): Free symtab_hdr.contents.
* elflink.c (init_reloc_cookie): Correct cache_size.  locsyms
is an array of Elf_Internal_Sym.

6 months agoelflink.c memory leaks
Alan Modra [Sat, 11 Jan 2025 05:22:58 +0000 (15:52 +1030)] 
elflink.c memory leaks

Many targets leaked parts of the elf_link_hash_table.  Fix that by
making _bfd_elf_link_hash_table_init set up hash_table_free correctly,
so that targets that extend elf_link_hash_table without adding
anything that needs freeing, will use _bfd_elf_link_hash_table_free.

* elflink.c (elf_link_add_object_symbols): Always free
nondeflt_vers.  Don't return false without freeing.
(_bfd_elf_link_hash_table_init): Set hash_table_free here..
(_bfd_elf_link_hash_table_create): ..rather than here.
(elf_link_swap_symbols_out): Don't free strtab here..
(elf_link_add_object_symbols): ..do so here instead.  Don't
omit freeing on some error return paths.

6 months agosframe memory leak
Alan Modra [Sat, 11 Jan 2025 05:20:20 +0000 (15:50 +1030)] 
sframe memory leak

This is another case where an array isn't freed anywhere and needs to
persist a while, so allocate it with bfd_alloc.

* elf-sframe.c (sframe_decoder_init_func_bfdinfo): Add abfd
param.  bfd_zalloc std_func_bfdinfo.
(_bfd_elf_parse_sframe): Adjust to suit.

6 months agoeh-frame memory leaks
Alan Modra [Sat, 11 Jan 2025 05:18:55 +0000 (15:48 +1030)] 
eh-frame memory leaks

The set_loc array attached to eh-frame sec_info isn't freed, and is
used in _bfd_elf_eh_frame_section_offset.  Rather than finding a
suitable late stage of linking past any b_e_e_f_s_o use, I decided
this might as well persist until the bfd is closed.
Some memory is freed in _bfd_elf_discard_section_eh_frame_hdr, but
the function isn't always called, so fix that too.

* elf-eh-frame.c (_bfd_elf_parse_eh_frame): bfd_alloc the
set_loc array.
(find_merged_cie): Use bfd_malloc rather than malloc.
(_bfd_elf_discard_section_eh_frame_hdr): Move condition under
which this function does anything except free memory from..
* elflink.c (bfd_elf_discard_info): ..here.

6 months agoFix known minor objdump leak
Alan Modra [Tue, 14 Jan 2025 10:36:32 +0000 (21:06 +1030)] 
Fix known minor objdump leak

* objdump.c (main): Free disassembler_options.

6 months agogdbserver: convert program_args to a single string
Andrew Burgess [Fri, 3 Nov 2023 21:40:29 +0000 (21:40 +0000)] 
gdbserver: convert program_args to a single string

This commit changes how gdbserver stores the inferior arguments from
being a vector of separate arguments into a single string with all of
the arguments combined together.

Making this change might feel a little strange; intuitively it feels
like we would be better off storing the arguments as a vector, but
this change is part of a larger series of work that aims to improve
GDB's inferior argument handling.  The full series was posted here:

  https://inbox.sourceware.org/gdb-patches/cover.1730731085.git.aburgess@redhat.com

But asking people to review a 14 patch series in unreasonable, so I'm
instead posting the patches in smaller batches.  This patch can stand
alone, and I do think this change makes sense on its own:

First, GDB already stores the inferior arguments as a single string,
so doing this moves gdbserver into line with GDB.  The common code
into which gdbserver calls requires the arguments to be a single
string, so currently each target's create_inferior implementation
merged the arguments anyway, so all this commit really does is move
the merging up the call stack, and store the merged result rather than
storing the separate parts.

However, the biggest reason for why this commit is needed, is an issue
with passing arguments from GDB to gdbserver when starting a new
inferior.

Consider:

  (gdb) set args $VAR
  (gdb) run
  ...

When using a native target the inferior will see the value of $VAR
expanded by the shell GDB uses to start the inferior.  However, if
using an extended-remote target the inferior will see literally $VAR,
the unexpanded name of the variable, the reason for this is that,
although GDB sends '$VAR' to gdbserver, when gdbserver receives this,
it converts this to '\$VAR', which prevents the variable from being
expanded by the shell.

The reason for this is that construct_inferior_arguments escapes all
special shell characters within its arguments, and it is
construct_inferior_arguments that is used to combine the separate
arguments into a single string.

In the future I will change construct_inferior_arguments so that
it can apply different escaping strategies.  When this happens we will
want to escape arguments coming from the gdbserver command line
differently than arguments coming from GDB (via a vRun packet), which
means we need to call construct_inferior_arguments earlier, at the
point where we know if the arguments came from the gdbserver command
line, or from the vRun packet.

This argument escaping issue is discussed in PR gdb/28392.

This commit doesn't fix any issues, nor does it change
construct_inferior_arguments to actually do different escaping, that
will all come later.  This is purely a restructuring.

There should be no user visible changes after this commit.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28392

Tested-By: Guinevere Larsen <guinevere@redhat.com>
Approved-By: Simon Marchi <simon.marchi@efficios.com>
6 months agoPR32560 stack-buffer-overflow at objdump disassemble_bytes
Alan Modra [Wed, 15 Jan 2025 08:43:43 +0000 (19:13 +1030)] 
PR32560 stack-buffer-overflow at objdump disassemble_bytes

There's always someone pushing the boundaries.

PR 32560
* objdump.c (MAX_INSN_WIDTH): Define.
(insn_width): Make it an unsigned long.
(disassemble_bytes): Use MAX_INSN_WIDTH to size buffer.
(main <OPTION_INSN_WIDTH>): Restrict size of insn_width.

6 months ago[gdb/symtab] Require current language before symbol lookups
Tom de Vries [Wed, 15 Jan 2025 08:38:18 +0000 (09:38 +0100)] 
[gdb/symtab] Require current language before symbol lookups

Test-case gdb.python/py-symbol.exp fails with various target boards, including
fission and gold-gdb-index.

The problem here is that, in this test, the current language is still
unset (i.e., lazy) when the symbol lookup is done.  It is eventually
set deep in the lookup -- but this then requires a reentrant symbol
lookup, which fails.  (DWARF symbol lookup is not reentrant.)

Fix this by:
- detecting symbol lookup reentrance using an assert, and
- requiring the current language to be set when entering symbol lookup.

Tested on x86_64-linux.

Co-Authored-By: Tom Tromey <tom@tromey.com>
Approved-By: Tom Tromey <tom@tromey.com>
PR symtab/32490
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32490

6 months agoRe: elf: Add GNU_PROPERTY_MEMORY_SEAL gnu property
Alan Modra [Wed, 15 Jan 2025 03:57:11 +0000 (14:27 +1030)] 
Re: elf: Add GNU_PROPERTY_MEMORY_SEAL gnu property

Don't run tests on targets without required support.  Supply an
explicit -z nomemory-seal rather then relying on the harness default,
to lessen confusion for people looking at the test.  Don't use numeric
labels for the sake of hppa64*-hpux, and run the tests there.  Remove
incorrect comment about source editing.  Also, xfail rather than
notarget failing tests with a list of target triples so we check that
the list is correct.

6 months agoRe: ld: Add --enable-memory-seal configure option
Alan Modra [Wed, 15 Jan 2025 03:02:00 +0000 (13:32 +1030)] 
Re: ld: Add --enable-memory-seal configure option

Commit 80dc29527ff9 accidentally removed an assignment to board_flags,
resulting in tcl errors 'can't read "board_flags": no such variable'
on sh4-linux-gnu.  Fix that by calling [get_board_flags] in the
condition rather than reinstating the removed line since it seems most
configurations don't have a null STATIC_LDFLAGS.  Do the same in
another similar test too.

6 months agoAutomatic date update in version.in
GDB Administrator [Wed, 15 Jan 2025 00:00:11 +0000 (00:00 +0000)] 
Automatic date update in version.in

6 months agoUse bool in decode_line_2_item
Tom Tromey [Sat, 11 Jan 2025 18:35:15 +0000 (11:35 -0700)] 
Use bool in decode_line_2_item

This changes decode_line_2_item::selected to bool.  There was no
benefit to keeping this as a bitfield, so I removed that.  Note that
the constructor already uses bool here.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
6 months agoUse bool for parameter of add_sal_to_sals
Tom Tromey [Sat, 11 Jan 2025 18:33:58 +0000 (11:33 -0700)] 
Use bool for parameter of add_sal_to_sals

This changes add_sal_to_sals to use 'bool' rather than 'int'.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
6 months agoUse filename style in "show" commands
Tom Tromey [Mon, 13 Jan 2025 11:05:10 +0000 (04:05 -0700)] 
Use filename style in "show" commands

I found a few filename-related "show" commands that do not use the
filename style when displaying the file.  This patch fixes the
oversight.

Approved-By: Andrew Burgess <aburgess@redhat.com>
6 months agold: Parse linker script only once
H.J. Lu [Tue, 14 Jan 2025 13:21:02 +0000 (21:21 +0800)] 
ld: Parse linker script only once

Parsing linker script twice caused

FAIL: ld-plugin/lto-3r
FAIL: ld-plugin/lto-5r
FAIL: PR ld/19317 (2)

for x86_64-w64-mingw32 with the linker error:

./ld-new:built in linker script:27 assignment to location counter invalid outside of SECTIONS

ldscripts/i386pep.xr has

 24   .rdata  :
 25   {
 26     *(.rdata)
 27     . = ALIGN(4);
 28     /* .ctors & .dtors */
 29     /* .CRT */
 30     /* ___crt_xl_end__ is defined in the TLS Directory support code */
 31   }

Remove ld_parse_linker_script to parse linker script only once.

* ldlang.c (cmdline_emit_object_only_section): Don't call
ld_parse_linker_script.
* ldmain.c (main): Fold ld_parse_linker_script.
(ld_parse_linker_script): Removed.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
6 months agold: Call cmdline_check_object_only_section only if plugin is enabled
H.J. Lu [Tue, 14 Jan 2025 21:46:08 +0000 (05:46 +0800)] 
ld: Call cmdline_check_object_only_section only if plugin is enabled

* ldmain.c (add_archive_element): Call
cmdline_check_object_only_section only if BFD_SUPPORTS_PLUGINS
is defined.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
6 months agogdb/jit: fix jit-reader linetable integrity
Yang Liu [Sun, 22 Dec 2024 16:33:30 +0000 (00:33 +0800)] 
gdb/jit: fix jit-reader linetable integrity

The custom linetable functionality in GDB's JIT Interface has been broken
since commit 1acc9dca423f78e44553928f0de839b618c13766.

In that commit, linetables were made independent from the objfile, which
requires objfile->section_offsets to be initialized. However, section_offsets
were never initialized in objfiles generated by GDB's JIT Interface
with custom jit-readers, leading to GDB crashes when stepping into JITed code
blocks with the following command already executed:

  jit-reader-load libmygdbjitreader.so

This patch fixes the issue by initializing the minimum section_offsets required
for linetable parsing procedures.

A minimal test is included.  The test sets up some very simple line
table information, which is enough to trigger the bug.  However, the
line table information is crafted such that none of the line table
entries will end up being displayed in GDB's output when the test is
run, as such, none of the expected output actually changes.

It might be nice in the future to extend some of the jit tests to
actually test hitting line table entries added via the jit reader.

Approved-By: Tom Tromey <tom@tromey.com>
6 months agogdb/record: add support for AVX floating point arithmetic instructions
Guinevere Larsen [Thu, 9 Jan 2025 12:47:22 +0000 (09:47 -0300)] 
gdb/record: add support for AVX floating point arithmetic instructions

This commit adds support for the following types of instructions
relating to floating poitn values: add, mul, sub, min, div, max.
These are supported with packed or single values, and single or double
precision.

Some of the instructions had opcode clashes, however, considering the
mechanics of recording the registers is the same on both instructions,
this is just marked with a comment.

Approved-By: Guinevere Larsen <guinevere@redhat.com>
6 months agogdb/record: add support for floating point vunpck instructions
Guinevere Larsen [Wed, 8 Jan 2025 12:37:47 +0000 (09:37 -0300)] 
gdb/record: add support for floating point vunpck instructions

This commit adds support for the AVX instructions vunpck[l|h][ps|pd]
instructions, which was pretty straightforward.

This commit also fixes a mistake in the test, where "record stop" was
used after the recording was already stopped, if it failed during
vpunpck_test recording. It also improved the documentation at the start
of the relevant .c function.

Approved-By: Guinevere Larsen <guinevere@redhat.com>
6 months agogdb/record: add support for floating point vmov instructions
Guinevere Larsen [Mon, 6 Jan 2025 18:24:25 +0000 (15:24 -0300)] 
gdb/record: add support for floating point vmov instructions

This commit updates GDB's record-full to be able to record vmov[ss|sd]
and vmov [u|a] [ps|pd] AVX instructions, and tests for them.

Unlike the vmovdq[u|a] instructions, the aligned and unalgined versions
of vmov?[ps|pd] have different opcodes. The mechanics of recording them
is the same, but the aligned version has opcodes 0x28 and 0x29, while
the unaligned has the same opcode as vmov[ss|sd] instruction, 0x10 and
0x11.

Approved-By: Guinevere Larsen <guinevere@redhat.com>
6 months agold: regenerate
Sam James [Tue, 14 Jan 2025 16:36:28 +0000 (16:36 +0000)] 
ld: regenerate

80dc29527ff9b5179741c360418e77e5064f2b69 contained some changes from
non-vanilla autoconf. Regenerate.

ChangeLog:

* config.in: Regenerate.
* configure: Regenerate.

6 months agold: Add --enable-memory-seal configure option
Adhemerval Zanella [Thu, 22 Aug 2024 19:13:03 +0000 (16:13 -0300)] 
ld: Add --enable-memory-seal configure option

Add --enable-memory-seal linker configure option to enable memory
sealing (GNU_PROPERTY_MEMORY_SEAL) by default.

Change-Id: I4ce4ff33657f0f09b1ceb06210b6fcaa501f1799

6 months agoelf: Add GNU_PROPERTY_MEMORY_SEAL gnu property
Adhemerval Zanella [Wed, 14 Aug 2024 17:04:55 +0000 (17:04 +0000)] 
elf: Add GNU_PROPERTY_MEMORY_SEAL gnu property

The GNU_PROPERTY_MEMORY_SEAL gnu property is a way to mark binaries
to be memory sealed by the loader, to avoid further changes of
PT_LOAD segments (such as unmapping or change permission flags).
This is done along with Linux kernel (the mseal syscall [1]), and
C runtime supports to instruct the kernel on the correct time during
program startup (for instance, after RELRO handling).  This support
is added along the glibc support to handle the new gnu property [2].

This is a opt-in security features, like other security hardening
ones like NX-stack or RELRO.

The new property is ignored if present on ET_REL objects, and only
added on ET_EXEC/ET_DYN if the linker option is used.  A gnu property
is used instead of DT_FLAGS_1 flag to allow memory sealing to work
with ET_EXEC without PT_DYNAMIC support (at least on glibc some ports
still do no support static-pie).

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8be7258aad44b5e25977a98db136f677fa6f4370
[2] https://sourceware.org/pipermail/libc-alpha/2024-September/160291.html

Change-Id: Id47fadabecd24be0e83cff45653f7ce9a900ecf4

6 months agoFix a syntax error in sim/common/cgen-mem.h
Ella MA [Fri, 10 Jan 2025 12:15:33 +0000 (13:15 +0100)] 
Fix a syntax error in sim/common/cgen-mem.h

6 months agold: Update mixed LTO and non-LTO relocatable output tests
H.J. Lu [Tue, 14 Jan 2025 01:09:28 +0000 (09:09 +0800)] 
ld: Update mixed LTO and non-LTO relocatable output tests

Since mixed LTO and non-LTO relocatable output is only supported on ELF
platforms, limit these tests to ELF targets.  Since powerpc64 elfv1
defines a function symbol on its procedure descriptor, which is in a
data section, rather than on the code for that function, allow both D
and T for nm test on mixed object.

* testsuite/ld-plugin/lto.exp: Limits  mixed LTO and non-LTO
relocatable output tests to ELF targets.  Allow both D and T for
nm test on mixed object.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
6 months agoaarch64 SFrame: skip with warning new CFI directive used with pauth_lr
Matthieu Longo [Thu, 21 Nov 2024 18:44:22 +0000 (18:44 +0000)] 
aarch64 SFrame: skip with warning new CFI directive used with pauth_lr

Today, SFrame v2 specification does not describe how to encode the
information corresponding to the PAuth_LR PAC signing method (it only
supports PAuth PAC signing method).
SFrame v3 specification should hopefully specify it.

In the meantime, if the GNU assembler finds .cfi_negate_ra_state_with_pc
and --gsframe is specified, it will output a warning to the user and
will fail to generate the FDE entry.

A new SFrame test for .cfi_negate_ra_state_with_pc is also added to
reflect this issue.

Approved-by: Indu Bhagat <indu.bhagat@oracle.com>
6 months agoaarch64 DWARF: add new CFI directive for PAuth_LR
Matthieu Longo [Mon, 25 Nov 2024 12:17:56 +0000 (12:17 +0000)] 
aarch64 DWARF: add new CFI directive for PAuth_LR

This patch adds a new CFI directive (cfi_negate_ra_state_with_pc) which
set an additional bit in the RA state to inform that RA was signed with
SP but also PC as an additional diversifier.

RA state | Description
0b00     | Return address not signed (default if no cfi_negate_ra_state*)
0b01     | Return address signed with SP (cfi_negate_ra_state)
0b10     | Invalid state
0b11     | Return address signed with SP+PC (cfi_negate_ra_state_with_pc)

Approved-by: Indu Bhagat <indu.bhagat@oracle.com>
Approved-by: Jan Beulich <jbeulich@suse.com>
6 months agoaarch64 SFrame: use preferred CFI directive for AArch64 PAC
Matthieu Longo [Thu, 21 Nov 2024 18:40:41 +0000 (18:40 +0000)] 
aarch64 SFrame: use preferred CFI directive for AArch64 PAC

ARMv8.3 addded support for a new security feature named Pointer
Authentication. Support for this feature in SFrame already exists.

In GCC 14 and older, the Sparc DWARF extension .cfi_gnu_window_save
is emitted instead of .cfi_negate_ra_state.
GCC 15 fixed this issue, but this behavior is preserved for backward
compatibility.

The existing sframe test for AArch64 PAC was using .cfi_gnu_window_save.
This patch replaces this CFI in the existing test by the preferred one,
and adds a new test to check for backward compatibility when using
.cfi_gnu_window_save.

Approved-by: Indu Bhagat <indu.bhagat@oracle.com>
6 months agoaarch64: make explicit that CFI gnu_window_save is for Sparc, not AArch64
Matthieu Longo [Thu, 21 Nov 2024 18:44:07 +0000 (18:44 +0000)] 
aarch64: make explicit that CFI gnu_window_save is for Sparc, not AArch64

- add a detailed comment when parsing DW_CFA_GNU_window_save in SFrame to
  explain why we are checking whether the targeted architecture is AArch64,
  whereas this CFI is a Sparc extension.
- replace .cfi_gnu_window_save by .cfi_negate_ra_state in existing AArch64
  DWARF tests as this is the preferred directive since GCC 15.
- add a new AArch64 test to check backward compatibility with old GCC
  versions that emits .cfi_gnu_window_save.

Approved-by: Indu Bhagat <indu.bhagat@oracle.com>
Approved-by: Richard Earnshaw <richard.earnshaw@arm.com>
6 months agogdbserver: remove handling of the 'L' tracepoint action
Tankut Baris Aktemur [Tue, 14 Jan 2025 09:10:31 +0000 (10:10 +0100)] 
gdbserver: remove handling of the 'L' tracepoint action

Now that static tracepoint support is removed from gdbserver, it makes
sense to remove handling of the 'L' tracepoint action, too.  The code
that checks received actions already has a default case that tolerates
unrecognized actions:

        default:
          trace_debug ("unknown trace action '%c', ignoring...", *act);

In case 'L' is unexpectedly received, we would at least be able to see
this in the logs.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
6 months agogdbserver: remove the static_tracepoint enum value
Tankut Baris Aktemur [Tue, 14 Jan 2025 09:10:31 +0000 (10:10 +0100)] 
gdbserver: remove the static_tracepoint enum value

As a continuation of the previous patches that remove UST from
gdbserver, remove the `static_tracepoint` enum value from
`tracepoint_type` and all the associated code.

Now that the last use of `write_e_static_tracepoints_not_supported`
is gone, also remove that function.

The handling of the 'S' option, where the `static_tracepoint` enum
value was being used, is removed completely, because recognizing that
option makes sense only when static tracepoint support is announced.

This patch is easier to view with "git show -w".

Approved-By: Simon Marchi <simon.marchi@efficios.com>
6 months agogdbserver: do not announce static tracepoint support
Tankut Baris Aktemur [Tue, 14 Jan 2025 09:10:30 +0000 (10:10 +0100)] 
gdbserver: do not announce static tracepoint support

Remove the announcement that `qXfer:statictrace:read` and
`StaticTracepoints` are supported.  Associated to this, remove the
handling of "qTfSTM", "qTsSTM", and "qTSTMat" packets and the
qXfer:statictrace:read handling.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
6 months agogdbserver: remove UST (static tracepoint) support (part 2)
Tankut Baris Aktemur [Tue, 14 Jan 2025 09:10:30 +0000 (10:10 +0100)] 
gdbserver: remove UST (static tracepoint) support (part 2)

With the removal of UST, the `in_process_agent_supports_ust` query
would essentially always be false.  Remove the function and adjust
the uses, comments, and warning/error messages.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
6 months agogdbserver: remove UST (static tracepoint) support (part 1)
Tankut Baris Aktemur [Tue, 14 Jan 2025 09:10:30 +0000 (10:10 +0100)] 
gdbserver: remove UST (static tracepoint) support (part 1)

UST support in gdbserver is substantially outdated.  Simon says:

  ...[having HAVE_UST defined] never happens nowadays because it used
  a version of lttng-ust that has been deprecated for a loooong time
  (the 0.x series).  So everything in HAVE_UST just bitrots.  It might
  be possible to update all this code to use lttng-ust 2.x (1.x never
  existed), but I don't think it's going to happen unless somebody
  specifically asks for it.  I would suggest removing support for UST
  from gdbserver.  ...If we ever want to resurrect the support for UST
  and port to 2.x, we can get the code from the git history.

This patch removes the support, mostly mechanically by deleting code
guarded by `#ifdef HAVE_UST`.  After these removals, `struct
static_tracepoint_ctx` becomes unused.  So, remove it, too.

The following patches remove more code.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Approved-By: Simon Marchi <simon.marchi@efficios.com>
6 months agogdb, doc: describe the 'L' tracepoint action
Tankut Baris Aktemur [Tue, 14 Jan 2025 09:10:30 +0000 (10:10 +0100)] 
gdb, doc: describe the 'L' tracepoint action

I noticed that 'L' is a tracepoint action but it is not defined in the
document.  Add the description.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
6 months agogdb, doc: mention the 'S' option for the QTDP packet
Tankut Baris Aktemur [Tue, 14 Jan 2025 09:10:29 +0000 (10:10 +0100)] 
gdb, doc: mention the 'S' option for the QTDP packet

I noticed that gdbserver accepts an 'S' option for the QTDP packet to
create a static tracepoint, but this is not mentioned in the document.
Update the document.

I first thought about updating the argument as `[:Flen|:S]`, but then
opted for `[:Flen][:S]`.  Although it is odd that ':F' and ':S' are
allowed to co-exist, the implementation at the gdbserver side allows
this and handles the packet arguments so that the right-most
positioned ':F' or ':S' overwrites the final tracepoint type.  When
the documentation is missing, the implementation usually determines
the behavior.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
6 months agold: Call cmdline_check_object_only_section only if plugin is enabled
H.J. Lu [Tue, 14 Jan 2025 08:12:37 +0000 (16:12 +0800)] 
ld: Call cmdline_check_object_only_section only if plugin is enabled

* ldfile.c (ldfile_try_open_bfd): Call
cmdline_check_object_only_section only if BFD_SUPPORTS_PLUGINS
is defined.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
6 months agox86: Remove "NE" in mnemonics for convert insns related to AI data types
Haochen Jiang [Tue, 14 Jan 2025 02:30:44 +0000 (10:30 +0800)] 
x86: Remove "NE" in mnemonics for convert insns related to AI data types

NE is quite ambiguous and misleading in mnemonics since it should be
Rounding to Nearest Even, but could be mis-interpretated to No
Exception.

Under its correct meaning, which means rounding, it should only be used
in down-convert, since up-convert is always exact for normal values
It could be difficult to judge which kind of convert it is if we have
the convert between same bit float types.

For all AI data types including BF16 and FP8, the default rounding is
Rounding to Nearest Even. So removing them in mnemonics would reduce
burden for programmers to consider whether it should be added or not
in mnemonics and stop the ambiguous meaning on "NE" itself.

If the convert itself is using a rounding mode other than RNE, it would
be explicitly added in mnemonics (e.g., Long used "T" and "BIAS"
introduced in AVX10.2).

gas/ChangeLog:

* testsuite/gas/i386/avx10_2-256-cvt-intel.d: Refine testcases
according to mnemonics change.
* testsuite/gas/i386/avx10_2-256-cvt.d: Ditto.
* testsuite/gas/i386/avx10_2-256-cvt.s: Ditto.
* testsuite/gas/i386/avx10_2-256-satcvt-intel.d: Ditto.
* testsuite/gas/i386/avx10_2-256-satcvt.d: Ditto.
* testsuite/gas/i386/avx10_2-256-satcvt.s: Ditto.
* testsuite/gas/i386/avx10_2-512-cvt-intel.d: Ditto.
* testsuite/gas/i386/avx10_2-512-cvt.d: Ditto.
* testsuite/gas/i386/avx10_2-512-cvt.s: Ditto.
* testsuite/gas/i386/avx10_2-512-satcvt-intel.d: Ditto.
* testsuite/gas/i386/avx10_2-512-satcvt.d: Ditto.
* testsuite/gas/i386/avx10_2-512-satcvt.s: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-256-cvt-intel.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-256-cvt.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-256-cvt.s: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-256-satcvt-intel.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-256-satcvt.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-256-satcvt.s: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-512-cvt-intel.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-512-cvt.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-512-cvt.s: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-512-satcvt-intel.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-512-satcvt.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-512-satcvt.s: Ditto.

opcodes/ChangeLog:

* i386-dis-evex-prefix.h: Remove ne in mnemonics for
convert insns.
* i386-opc.tbl: Ditto.
* i386-mnem.h: Regenerated.
* i386-tbl.h: Ditto.

6 months agox86: Rename VCOMSBF16 to VCOMISBF16
Haochen Jiang [Tue, 14 Jan 2025 02:30:43 +0000 (10:30 +0800)] 
x86: Rename VCOMSBF16 to VCOMISBF16

The functionality for VCOMSBF16 is exactly the same as the VCOMISD/S/H.
The only difference is the bf16 type. Thus, it should be VCOMISBF16.
This patch would fix that.

gas/ChangeLog:

* testsuite/gas/i386/avx10_2-256-bf16-intel.d: Refine testcase
according to mnemonics change.
* testsuite/gas/i386/avx10_2-256-bf16.d: Ditto.
* testsuite/gas/i386/avx10_2-256-bf16.s: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-256-bf16-intel.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-256-bf16.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-256-bf16.s: Ditto.

opcodes/ChangeLog:

* i386-dis-evex-prefix.h: Rename VCOMSBF16 to VCOMISBF16.
* i386-opc.tbl: Ditto.
* i386-mnem.h: Regenerated.
* i386-tbl.h: Ditto.

6 months agox86: Remove "P" and "NE" in mnemonics for BF16 arithmetic insns
Haochen Jiang [Tue, 14 Jan 2025 02:30:42 +0000 (10:30 +0800)] 
x86: Remove "P" and "NE" in mnemonics for BF16 arithmetic insns

Since the bf16 is an AI data types, it will be implicitly packed. Thus,
"P" (for packed) is omitted in mnemonics from its introduction. AVX10.2
BF16 arithmetic insns are introduced with "P" in mnemonics with packed.
This patch will remove them for consistency.

NE is quite ambiguous and misleading in mnemonics since it should be
Rounding to Nearest Even, but could be mis-interpretated to No
Exception. While AI data types like BF16 and FP8 are using Rounding to
Nearest Even as default rounding modes. There is no need to use the
ambiguous mnemonics in AVX10.2 insns. This patch will also remove them.

For convert insns, it will be handled in the upcoming patch.

gas/ChangeLog:

* testsuite/gas/i386/avx10_2-256-bf16-intel.d: Refine testcase
according to new mnemonics.
* testsuite/gas/i386/avx10_2-256-bf16.d: Ditto.
* testsuite/gas/i386/avx10_2-256-bf16.s: Ditto.
* testsuite/gas/i386/avx10_2-256-miscs-intel.d: Ditto.
* testsuite/gas/i386/avx10_2-256-miscs.d: Ditto.
* testsuite/gas/i386/avx10_2-256-miscs.s: Ditto.
* testsuite/gas/i386/avx10_2-512-bf16-intel.d: Ditto.
* testsuite/gas/i386/avx10_2-512-bf16.d: Ditto.
* testsuite/gas/i386/avx10_2-512-bf16.s: Ditto.
* testsuite/gas/i386/avx10_2-512-miscs-intel.d: Ditto.
* testsuite/gas/i386/avx10_2-512-miscs.d: Ditto.
* testsuite/gas/i386/avx10_2-512-miscs.s: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-256-bf16-intel.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-256-bf16.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-256-bf16.s: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-256-miscs-intel.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-256-miscs.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-256-miscs.s: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-512-bf16-intel.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-512-bf16.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-512-bf16.s: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-512-miscs-intel.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-512-miscs.d: Ditto.
* testsuite/gas/i386/x86-64-avx10_2-512-miscs.s: Ditto.

opcodes/ChangeLog:

* i386-dis-evex-prefix.h: Remove p and ne in bf16 mnemonics.
* i386-opc.tbl: Ditto.
* i386-mnem.h: Regenerated.
* i386-tbl.h: Ditto.

6 months agoSupport Intel AMX-AVX512
Haochen Jiang [Tue, 14 Jan 2025 02:30:40 +0000 (10:30 +0800)] 
Support Intel AMX-AVX512

This patch will support AMX-AVX512. In disassmbler, we pull out all
GPR mode out of the vex length switch to make it more general.

gas/ChangeLog:

* NEWS: Mention the full support on DMR AMX ISAs.
* config/tc-i386.c: Add amx_avx512.
* doc/c-i386.texi: Document .amx_avx512.
* testsuite/gas/i386/x86-64.exp: Run AMX-AVX512 tests.
* testsuite/gas/i386/x86-64-amx-avx512-intel.d: New test.
* testsuite/gas/i386/x86-64-amx-avx512.d: Ditto.
* testsuite/gas/i386/x86-64-amx-avx512.s: Ditto.

opcodes/ChangeLog:

* i386-dis-evex-len.h: Add EVEX_LEN_0F384A_X86_64_W_0,
EVEX_LEN_0F386D_X86_64_W_0, EVEX_LEN_0F3A07_X86_64_W_0,
EVEX_LEN_0F3A77_X86_64_W_0.
* i386-dis-evex-prefix.h: Add PREFIX_EVEX_0F384A_W_0_L_2,
PREFIX_EVEX_0F386D_W_0_L_2, PREFIX_EVEX_0F3A07_W_0_L_2,
PREFIX_EVEX_0F3A77_W_0_L_2.
* i386-dis-evex-w.h: Add EVEX_W_0F384A_X86_64, EVEX_W_0F386D_X86_64,
EVEX_W_0F3A07_X86_64, EVEX_W_0F3A77_X86_64.
* i386-dis-evex-x86-64.h: Add X86_64_EVEX_0F384A, X86_64_EVEX_0F386D,
X86_64_EVEX_0F3A07, X86_64_EVEX_0F3A77.
* i386-dis-evex.h: Ditto.
* i386-dis.c (EVEX_LEN_0F384A_X86_64_W_0): New.
(EVEX_LEN_0F386D_X86_64_W_0): Ditto.
(EVEX_LEN_0F3A07_X86_64_W_0): Ditto.
(EVEX_LEN_0F3A77_X86_64_W_0): Ditto.
(MOD_EVEX_0F384A_X86_64_W_0): Ditto.
(MOD_EVEX_0F386D_X86_64_W_0): Ditto.
(MOD_EVEX_0F3A07_X86_64_W_0): Ditto.
(MOD_EVEX_0F3A77_X86_64_W_0): Ditto.
(PREFIX_EVEX_0F384A_W_0_L_2): Ditto.
(PREFIX_EVEX_0F386D_W_0_L_2): Ditto.
(PREFIX_EVEX_0F3A07_W_0_L_2): Ditto.
(PREFIX_EVEX_0F3A77_W_0_L_2): Ditto.
(EVEX_W_0F384A_X86_64): Ditto.
(EVEX_W_0F386D_X86_64): Ditto.
(EVEX_W_0F3A07_X86_64): Ditto.
(EVEX_W_0F3A77_X86_64): Ditto.
(X86_64_EVEX_0F384A): Ditto.
(X86_64_EVEX_0F386D): Ditto.
(X86_64_EVEX_0F3A07): Ditto.
(X86_64_EVEX_0F3A77): Ditto.
(OP_VEX): Pull out all GPR mode out of the vector length switch.
* i386-gen.c (isa_dependencies): Add AMX-AVX512.
(cpu_flags): Ditto.
* i386-init.h: Regenerated.
* i386-mnem.h: Ditto.
* i386-opc.h (CpuAMX_AVX512): New.
(i386_cpu_flags): Add cpuamx_avx512.
* i386-opc.tbl: Add AMX-AVX512 instructions.
* i386-tbl.h: Regenerated.

6 months agoSupport Intel AMX-MOVRS
Hu, Lin1 [Tue, 14 Jan 2025 02:30:38 +0000 (10:30 +0800)] 
Support Intel AMX-MOVRS

This patch will support AMX-MOVRS feature. Unlike all the other
AMX insns in vector space where we pass vex_len_table before
vex_w_table, we first pass vex_w_table for tileloaddrs[,t1] to
align with the order in EVEX space. The reason why we first pass
vex_w_table in EVEX space is due to AMX-AVX512, where tcvtrowd2ps
and tilemovrow with r32 shares the same opcode with tileloaddrs[,t1].
All of them have evex.w = 0 but with different evex.length. Re-doing
that shortly is not ideal.

APX_F extension is also implemented in this patch. The encoding will
be:
  - EVEX.128.NP/66.MAP5.W0 F8/F9 !(11):rrr:100 for
    T2RPNTLVW[Z0,Z1]RS[,T1] with NF=0.
  - EVEX.128.F2/66.0F38.W0 4A !(11):rrr:100 FOR TILELOADDRS[,T1] with
    NF=0.

For APX_F extension, we could not use APX_F(AMX_TRANSPOSE&AMX_MOVRS)
since the transformation could not be done. Instead, we will use
AMX_TRANSPOSE & APX_F(AMX_MOVRS). Thus, we should set AMX_TRANSPOSE
for "any" for cpu_flags in assembler. Since it will only affect the
cpu_flags_match, handle that there.

gas/ChangeLog:

* config/tc-i386.c (cpu_arch): Add amx_movrs.
(cpu_flags_match): Set any bitfield for multiple cpuid
enabled insns.
* doc/c-i386.texi: Document .amx_movrs.
* testsuite/gas/i386/x86-64.exp: Run AMX-MOVRS tests.
* testsuite/gas/i386/x86-64-amx-movrs-intel.d: New test.
* testsuite/gas/i386/x86-64-amx-movrs-inval.l: Ditto.
* testsuite/gas/i386/x86-64-amx-movrs-inval.s: Ditto.
* testsuite/gas/i386/x86-64-amx-movrs.d: Ditto.
* testsuite/gas/i386/x86-64-amx-movrs.s: Ditto.

opcodes/ChangeLog:

* i386-dis-evex-len.h (EVEX_LEN_0F384A_X86_64_W_0): New.
* i386-dis-evex-w.h (EVEX_W_0F384A_X86_64): Ditto.
* i386-dis-evex-x86-64.h (X86_64_EVEX_0F384A): Ditto.
* i386-dis-evex.h: New entry for AMX-MOVRS.
* i386-dis.c:
(PREFIX_VEX_0F384A_X86_64_L_0_W_0): New.
(PREFIX_VEX_MAP5_F8_X86_64_L_0_W_0): Ditto.
(PREFIX_VEX_MAP5_F9_X86_64_L_0_W_0): Ditto.
(X86_64_VEX_0F384A): Ditto.
(X86_64_VEX_MAP5_F8): Ditto.
(X86_64_VEX_MAP5_F9): Ditto.
(X86_64_EVEX_0F384A): Ditto.
(VEX_LEN_0F384A_X86_64_W_0): Ditto.
(VEX_LEN_MAP5_F8_X86_64): Ditto.
(VEX_LEN_MAP5_F9_X86_64): Ditto.
(EVEX_LEN_0F384A_X86_64_W_0): Ditto.
(VEX_W_0F384A_X86_64): Ditto.
(VEX_W_MAP5_F8_X86_64): Ditto.
(VEX_W_MAP5_F9_X86_64): Ditto.
(EVEX_W_0F384A_X86_64): Ditto.
(prefix_table): New entry for AMX-MOVRS.
(x86_64_table): Ditto.
(vex_len_table): Ditto.
(vex_w_table): Ditto.
(map5_f8_opcode): New.
(map5_f9_opcode): Ditto.
(get_valid_dis386): Handle VEX_MAP5 opcode for AMX-MOVRS.
* i386-gen.c (isa_dependencies): Add AMX_MOVRS.
(cpu_flags): Ditto.
* i386-init.h: Regenerated.
* i386-mnem.h: Ditto.
* i386-opc.h (CpuAMX_MOVRS): New.
(i386_cpu_flags): Add cpuamx_movrs.
* i386-opc.tbl: Add AMX-MOVRS instructions.
* i386-tbl.h: Regenerated.

Co-authored-by: Haochen Jiang <haochen.jiang@intel.com>
6 months agoSupport Intel MOVRS
Hu, Lin1 [Tue, 14 Jan 2025 02:30:36 +0000 (10:30 +0800)] 
Support Intel MOVRS

This patch focus on supporting MOVRS ISA. We could take this full ISA
as four part: PREFETCHRST2, MOVRS, MOVRS APX_F extension and MOVRS AVX10.2
extension.

The APX_F extension for MOVRS will be:
  - EVEX.LLZ.NP.MAP4.WIG 8A !(11):rrr:bbb for r8/m8 with NF=0 and
    ND=0
  - EVEX.LLZ.NP/66.MAP4.SCALABLE 8B !(11):rrr:bbb for rv/mv with NF=0
    and ND=0

We did not merge the table together for APX_F since there is an explicit
x64 for movrs insn. The current APX_F() did not support the combination
between CPUIDs. Also, the space is different for legacy and apx_f forms.

gas/ChangeLog:

* NEWS: Support Intel MOVRS.
* config/tc-i386.c: Add MOVRS.
* doc/c-i386.texi: Document .movrs.
* testsuite/gas/i386/i386.exp: Run MOVRS tests.
* testsuite/gas/i386/x86-64.exp: Ditto.
        * testsuite/gas/i386/x86-64-apx-evex-promoted-intel.d: Add MOVRS
tests.
        * testsuite/gas/i386/x86-64-apx-evex-promoted-wig.d: Ditto.
        * testsuite/gas/i386/x86-64-apx-evex-promoted.d: Ditto.
        * testsuite/gas/i386/x86-64-apx-evex-promoted.s: Ditto.
* testsuite/gas/i386/lfence-load.d: Add prefetchrst2.
* testsuite/gas/i386/lfence-load.s: Ditto.
* testsuite/gas/i386/nops-8.d: Ditto.
* testsuite/gas/i386/prefetch-intel.d: Ditto.
* testsuite/gas/i386/prefetch.d: Ditto.
* testsuite/gas/i386/x86-64-lfence-load.d: Ditto.
* testsuite/gas/i386/x86-64-lfence-load.s: Ditto.
* testsuite/gas/i386/x86-64-prefetch-intel.d: Ditto.
* testsuite/gas/i386/x86-64-prefetch.d: Ditto.
* testsuite/gas/i386/movrs-intel.d: New test.
* testsuite/gas/i386/movrs-inval.l: Ditto.
* testsuite/gas/i386/movrs-inval.s: Ditto.
* testsuite/gas/i386/movrs.d: Ditto.
* testsuite/gas/i386/movrs.s: Ditto.
* testsuite/gas/i386/x86-64-movrs-avx10_2-256-intel.d: Ditto.
* testsuite/gas/i386/x86-64-movrs-avx10_2-256.d: Ditto.
* testsuite/gas/i386/x86-64-movrs-avx10_2-256.s: Ditto.
* testsuite/gas/i386/x86-64-movrs-avx10_2-512-intel.d: Ditto.
* testsuite/gas/i386/x86-64-movrs-avx10_2-512.d: Ditto.
* testsuite/gas/i386/x86-64-movrs-avx10_2-512.s: Ditto.
* testsuite/gas/i386/x86-64-movrs-intel.d: Ditto.
* testsuite/gas/i386/x86-64-movrs.d: Ditto.
* testsuite/gas/i386/x86-64-movrs.s: Ditto.
* testsuite/gas/i386/x86-64-movrs-intel-suffix.d: Ditto.
* testsuite/gas/i386/x86-64-movrs-suffix.d: Ditto.
* testsuite/gas/i386/x86-64-movrs-suffix.s: Ditto.

opcodes/ChangeLog:

* i386-dis-evex-prefix.h: Add PREFIX_EVEX_MAP5_6F_X86_64.
* i386-dis-evex-x86.h: Add X86_64_EVEX_MAP5_6F.
* i386-dis-evex.h (evex_table): New entry for movrs.
* i386-dis.c (MOD_0F18_REG_4): New.
(PREFIX_EVEX_MAP5_6F_X86_64): Ditto.
(X86_64_0F388A): Ditto.
(X86_64_0F388B): Ditto.
(X86_64_EVEX_MAP5_6F): Ditto.
(three_byte_table): New entry for MOVRS.
(reg_table): Ditto.
(mod_table): Ditto.
(x86_64_table): Ditto. Also include i386-dis-evex-x86.h.
* i386-gen.c (cpu_flags): Add MOVRS.
* i386-init.h: Regenerated.
* i386-mnem.h: Ditto.
* i386-opc.h (i386_cpu_flags): Add cpumovrs.
* i386-opc.tbl: Add MOVRS instrctions.
* i386-tbl.h: Regenerated.

Co-authored-by: Haochen Jiang <haochen.jiang@intel.com>
Co-authored-by: Lili Cui <lili.cui@intel.com>
6 months agox86: Remove mod_table pass for MVexSIBMEM
Haochen Jiang [Tue, 14 Jan 2025 02:30:32 +0000 (10:30 +0800)] 
x86: Remove mod_table pass for MVexSIBMEM

When using MVexSIBMEM, OP_M will help check modrm. Thus, no need
to pass mod_table.

Since we have OP_M do the work, from now on, mod_table[] should
not gain any new entries, unless both slots of them are populated,
e.g., different modrm leading to different insns could not be
combined (Bad_Opcode is not the case since OP_M could handle that).

opcodes/ChangeLog:

* i386-dis.c: Remove mod_table pass for MVexSIBMEM.

6 months agoAutomatic date update in version.in
GDB Administrator [Tue, 14 Jan 2025 00:00:18 +0000 (00:00 +0000)] 
Automatic date update in version.in