Commit Graph

123113 Commits

Author SHA1 Message Date
Pietro Monteiro
5e63d6144c Remove autoconf macro AC_HEADER_STDC
Stop using AC_HEADER_STDC since it is no longer supported in autoconf
2.72+. We require a C++ compiler that supports c++17, it's probably
safe to assume that the C compiler fully supports C89.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
2025-08-19 20:34:03 -04:00
GDB Administrator
89df03496b Automatic date update in version.in 2025-08-20 00:00:29 +00:00
Alan Modra
8acc451784 Re: gas: testsuite: fix regression in cfi-common-10.d
Just match what the test is actually trying to verify, to fix more
regressions.
2025-08-20 09:06:25 +09:30
Simon Marchi
6b6022ac96 gdb: remove unused includes in inferior.h
gdbsupport/common-inferior.h was needed by a few .c files, so move it
there.

Change-Id: Ia3ab8c30b529a1eda09862c8faea9e8c1c8123b5
2025-08-19 16:05:02 -04:00
Indu Bhagat
dab18bd71c gas: testsuite: fix regression in cfi-common-10.d
A previous commit 09292f4ae2 introduced the new test cfi-common-10.d.
The testcase needs some adjustments for it to be useful on a variety of
targets.
2025-08-19 12:27:42 -07:00
Andrew Burgess
4f68e8167e gdb: remove some unnecessary watchpoint_addr_within_range overrides
While looking at the watchpoint code, I realised that AArch64, ARM,
and Loongarch all override watchpoint_addr_within_range with an
implementation that is the same as the default (but with the logic
written slightly differently).

Compare the deleted functions to default_watchpoint_addr_within_range
in target.c.

The only other targets that override watchpoint_addr_within_range are
ppc_linux_nat_target and remote_target, in both cases the
implementation is different to the default.

Lets remove these unnecessary overrides, and just use the default.

There should be no user visible changes after this commit.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
2025-08-19 15:57:14 +01:00
Nick Clifton
17e62fe5f7 Add tests of the linker's --errror-execstack and --error-rwx-segments options 2025-08-19 15:25:39 +01:00
Simon Marchi
4260abb7a7 gdb: rename address_class -> location_class
The enum address_class and related fields and methods seem misnamed to
me.  Generalize it to "location_class".  The enumerators in
address_class are already prefixed with LOC, so the new name seems
logical to me.  Rename related fields and methods as well.

Plus, address_class could easily be mistaken for other unrelated things
named "address class" in GDB or DWARF.

Tested by rebuilding.

Change-Id: I0dca3738df412b350715286c608041b08e9b4d82
Approved-by: Kevin Buettner <kevinb@redhat.com>
2025-08-19 09:49:46 -04:00
Simon Marchi
1d5f884e50 gdb: rename gdbarch_software_single_step -> gdbarch_get_next_pcs
I spotted this while reviewing a patch adding a new
gdbarch_software_single_step implementation.  I find the name
"software_single_step" a bit misleading or unclear.  It makes it sounds
as if the function executed a single step.  In reality, this function
returns the possible next PCs for current instructions.

We have a similar concept in GDBserver:
linux_process_target::low_get_next_pcs.  I like that name, it's clear
and straight to the point.

Rename gdbarch_software_single_step to gdbarch_get_next_pcs.  I find
this name more indicative of what happens.

There is some code for ARM shared between GDB and GDBserver to implement
both sides, also called "get next pcs", so I think it all fits well
together.

Tested by rebuilding.

Change-Id: Ide74011a5034ba11117b7e7c865a093ef0b1dece
Approved-by: Kevin Buettner <kevinb@redhat.com>
Acked-by: Luis Machado <luis.machado.foss@gmail.com>
2025-08-19 09:47:36 -04:00
Rainer Orth
1bf1357c68 ld: testsuite: Mark vers26b3 unsupported on x86_64
After enabling the ld-elfvers tests on Solaris/x86, one of them FAILs on
Solaris/amd64 only:

FAIL: vers26b3

/ld-new: tmpdir/vers26b3.o: relocation R_X86_64_32 against symbol `foo' can not be used when making a shared object; recompile with -fPIC
./ld-new: failed to set dynamic section sizes: bad value

The error is strange: vers26b3.o *was* compiled with -fPIC and repeating
the link with /bin/ld just works.  However, the resulting vers26b3.so
fails to load:

$ ldd -r tmpdir/vers26b3.so
[...]
ld.so.1: vers26b3.so.ld: fatal: relocation error: R_AMD64_32: file tmpdir/vers26b3.so.ld: symbol foo: value 0x7fff34d00830 does not fit

When running the test on Linux/x86_64, it fails with the same ld message
as above, so the test is marked unsupported for both Linux/x86_64 and
Solaris/amd64.

Tested on {amd64,i386}-pc-solaris2.11 and {x86_64,i686}-pc-linux-gnu.

2025-07-31  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	ld:
	* testsuite/ld-elfvers/vers.exp (vers26b3): Mark unsupported on
	Linux/x86_64 and Solaris/amd64.
2025-08-19 15:38:55 +02:00
Rainer Orth
b662ab305c Add missing ChangeLog. 2025-08-19 15:37:04 +02:00
Rainer Orth
9ca011e55e ld: testsuite: Fix ld-elfvers tests on Solaris
All ld-elfvers tests FAIL on Solaris/SPARC, always with the same failure
mode:

FAIL: vers1

./ld-new: _etext: undefined version: vers1.so
./ld-new: _end: undefined version: vers1.so
./ld-new: _edata: undefined version: vers1.so
./ld-new: failed to set dynamic section sizes: bad value

This is due to the use of --no-undefined-version, the error being
emitted by bfd/elflink.c (bfd_elf_size_dynamic_sections).  The affected
symbols are mandated by the Solaris ABI in versioned shared objects and
are generated by ld/emultempl/solaris2.em
(elf_solaris2_before_allocation).  The check in
bfd_elf_size_dynamic_sections fails since for the base version (vers1.so),
both symver and script are 0:

vers1.so	pattern = "_etext", literal = 1, symver = 0, script = 0, mask = 1

Given that those symbols are generated internally by ld, it seems
sensible to set script = 1 for them.

This patch does just that, at the same time enabling the tests for
Solaris/x86.  Not doing this before looks like an oversight: there's no
difference between SPARC and x86 in this regard.

This introduces one failure on Solaris/amd64 (vers26b3), which I'll
address in a followup.

Tested no {sparc,sparcv9}-sun-solaris2.11, {i386,amd64}-pc-solaris2.11,
and {x86_64,i686}-pc-linux-gnu.

2025-07-25  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	ld:
	* emultempl/solaris2.em (elf_solaris2_before_allocation): Mark
	global symbols as generated by linker script.
	* testsuite/ld-elfvers/vers.exp: Enable on *-*-solaris2* rather
	than sparc*-*-solaris2* only.
2025-08-19 15:34:44 +02:00
Andrew Burgess
56e7e4ca3b gdb/testsuite: fix invalid assumption about TUI src window
Fix a failing test introduced by this commit:

  commit e53b88b40e
  Date:   Wed Aug 13 15:29:38 2025 +0100

      gdb: fix forward/reverse search, when no lines are printed

The TUI test added in this commit assumed that the opening '{' of main
would be the first statement line (in DWARF terms), and so, would be
the initial focus of the TUI src window.

This is true for some targets (e.g. x86), but not
others (e.g. AArch64), and so gdb.tui/source-search.exp was seen
failing on at least some AArch64 targets.

Fix this by adding a 'list' command to the test, which forces the
initial window contents to be as needed for the rest of the test.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=33290
Approved-By: Tom de Vries <tdevries@suse.de>
2025-08-19 14:33:39 +01:00
H.J. Lu
985bc55e99 elf: Prune empty generic properties
Prune empty generic properties before discarding empty property note
section and leave processor specific properties to the backend.

bfd/

	PR ld/33292
	* elf-properties.c (elf_prune_empty_properties): New function.
	(_bfd_elf_link_setup_gnu_properties): Call
	elf_prune_empty_properties before discarding empty property note
	section.  Move indirect_extern_access processing before
	elf_prune_empty_properties call.

ld/

	PR ld/33292
	* testsuite/ld-x86-64/pr33292-x32.d: New file.
	* testsuite/ld-x86-64/pr33292.d: Likewise.
	* testsuite/ld-x86-64/pr33292.s: Likewise.
	* testsuite/ld-x86-64/x86-64.exp: Run PR ld/33292 tests.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-19 04:10:02 -07:00
Rainer Orth
e067b9d027 bfd: Fix Solaris/x86 ELF_MAXPAGESIZE
I noticed that the alignment of the .text and .data sections on
Solaris/x86 doesn't match what /bin/ld does: gld uses the original i386
psABI default of 0x1000, while Solaris has moved to larger values as can
be seen both in the Oracle Solaris 11.4 Linkers and Libraries Guide,
ch. 15, Program Loading and Dynamic Linking, p. 15-6 and the system
headers (<sys/elf_{i386,amd64}.h>) that have

while the Solaris/SPARC values are already correct.

To fix this, on i386 it's sufficient to redefine ELF_MAXPAGESIZE.  On
x86_64, unlike i386, ELF_COMMONPAGESIZE is hardcoded as 0x1000, the
default, so setting ELF_MAXPAGESIZE has no effect on ELF_P_ALIGN.
Setting ELF_COMMONPAGESIZE to ELF_MAXPAGESIZE, too, fixes that and
brings both target in sync.  ELF_MACHINE_CODE is just set to the original
value again, so it's removed.

Tested on {i386,amd64}-pc-solaris2.11, {i686,x86_64}-pc-linux-gnu, and
amd64-pc-freebsd14.0.

2025-07-29  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	bfd:
	* elf32-i386.c <elf32-i386-sol2> (ELF_MAXPAGESIZE): Redefine.
	<elf32-iamcu> (ELF_MAXPAGESIZE): Restore previous value.
	* elf64-x86-64.c (ELF_COMMONPAGESIZE): Define as ELF_MAXPAGESIZE.
	<elf64-x86-64-sol2> (ELF_MAXPAGESIZE): Redefine
	<elf32-x86-64> (ELF_MAXPAGESIZE): Restore previous value.
	(ELF_MACHINE_CODE): Remove.
2025-08-19 12:52:41 +02:00
Indu Bhagat
09292f4ae2 binutils: dwarf: fix display of large cfa_offset
eh_frame textual dump was not correct when the cfa_offset is a large
value.  The reason is that the dumping code generally assumes the
cfa_offset is an 'int'.

cfa_offset values can be updated by various DWARF opcodes, like:
  - DW_CFA_def_cfa, DW_CFA_def_cfa_offset which bring unsigned leb128
    cfa_offset
  - DW_CFA_def_cfa_sf, DW_CFA_def_cfa_offset_sf which bring signed
    leb128 cfa_offset

Internally, the routines in dwarf.c keep the value as 'uint64_t
cfa_offset'.  That size of the datatype is expected to work for most of
the real-world cases.  Care, however, needs to be taken when it comes
to the signedness of the value.  Fix the buggy behavior by adding an
additional field to track whether the value of cfa_offset is signed or
unsigned and display accordingly for "frames-interp" output.

The display of cfa_offset had issues in both "frames-interp" output
(objdump -WF or do_debug_frames_interp) and the "frames" output.

Add two new tests: cfi-common-10.s uses a large positive cfa_offset
(with "frames output), and cfi-x86_64-2.s uses a negative cfa_offset
(with "frames-interp" output).

ChangeLog:
	* binutils/dwarf.c (frame_display_row): Update format string
	based on signedness.
	(display_debug_frames): Track signedness.  Also fix display of
	cfa_offset using PRIu64 or PRId64 as applicable.
	* gas/testsuite/gas/cfi/cfi.exp: Add two new tests.
	* gas/testsuite/gas/cfi/cfi-common-10.d: New test.
	* gas/testsuite/gas/cfi/cfi-common-10.s: New test.
	* gas/testsuite/gas/cfi/cfi-x86_64-2.d: New test.
	* gas/testsuite/gas/cfi/cfi-x86_64-2.s: New test.
2025-08-19 01:08:06 -07:00
H.J. Lu
7e432e93f8 Limit BFD_SUPPORTS_PLUGINS check to plugin.h and targets.c
Minimize the BFD_SUPPORTS_PLUGINS check to make code more readable and
maintainable by:

1. Update bfd/plugin.h to define plugin functions as static inline if
BFD_SUPPORTS_PLUGINS is 0.
2. Remove BFD_SUPPORTS_PLUGINS check from all bfd and binutils files
except plugin.h and targets.c.
3. Replace the remaining BFD_SUPPORTS_PLUGINS checks with a function so
that plugin availability is checked at run time.

bfd/

	* archive.c: Include plugin.h unconditionally.
	(_bfd_compute_and_write_armap): Remove the BFD_SUPPORTS_PLUGINS
	check.
	* bfd-in.h (bfd_plugin_enabled): New.
	* bfd-in2.h: Regenerated.
	* elflink.c: Include plugin.h unconditionally.
	(elf_link_is_defined_archive_symbol): Remove the
	BFD_SUPPORTS_PLUGINS check.
	* format.c: Include plugin.h unconditionally.
	(bfd_set_lto_type): Remove the BFD_SUPPORTS_PLUGINS check.
	(bfd_check_format_matches): Replace the BFD_SUPPORTS_PLUGINS
	check with the bfd_plugin_enabled call.  Replace plugin_vec
	with bfd_plugin_vec.  Remove the BFD_SUPPORTS_PLUGINS check.
	* plugin.c (bfd_plugin_target_p): Removed.
	* plugin.h (bfd_plugin_vec): New.
	(bfd_plugin_target_p): Likewise.
	(bfd_plugin_set_program_name): New.  Static inline
	function if BFD_SUPPORTS_PLUGINS is 0.
	(bfd_plugin_open_input): Likewise.
	(bfd_plugin_set_plugin): Likewise.
	(bfd_link_plugin_object_p): Likewise.
	(register_ld_plugin_object_p): Likewise.
	(bfd_plugin_close_file_descriptor): Likewise.
	(bfd_plugin_vec): Likewise.
	(bfd_plugin_target_p): Likewise.
	* xtensa-dynconfig.c (xtensa_load_config): Replace the
	BFD_SUPPORTS_PLUGINS check with the bfd_plugin_enabled call.

ar/

	* ar.c: Include plugin.h unconditionally.
	(plugin_target): Removed.
	(usage): Replace the BFD_SUPPORTS_PLUGINS check with the
	bfd_plugin_enabled call.
	(ranlib_usage): Likewise.
	(decode_options): Likewise.
	(ranlib_main): Likewise.
	(main): Call bfd_plugin_set_program_name unconditionally.
	* nm.c: Include plugin.h unconditionally.
	(plugin_target): Removed.
	(usage): Replace the BFD_SUPPORTS_PLUGINS check with the
	bfd_plugin_enabled call.
	(filter_symbols): Remove the BFD_SUPPORTS_PLUGINS check.
	(display_rel_file): Likewise.
	(main): Call bfd_plugin_set_program_name unconditionally.  Replace
	the BFD_SUPPORTS_PLUGINS check with the bfd_plugin_enabled call.
	* objcopy.c: Include plugin.h unconditionally.
	(strip_usage): Replace the BFD_SUPPORTS_PLUGINS check with the
	bfd_plugin_enabled call.
	(copy_archive): Remove the BFD_SUPPORTS_PLUGINS check.  Replace
	BFD_SUPPORTS_PLUGINS with the bfd_plugin_enabled call.
	(copy_file): Likewise.
	(strip_main): Likewise.

ld/

	* ldfile.c: Include plugin.h unconditionally.
	(ldfile_try_open_bfd): Remove the BFD_SUPPORTS_PLUGINS check.
	* ldlang.c: Include plugin.h unconditionally.
	(plugin_insert): Remove the BFD_SUPPORTS_PLUGINS check.
	(plugin_undefs): Likewise.
	(open_input_bfds): Likewise.
	(lang_check): Likewise.
	(lang_gc_sections): Likewise.
	(find_next_input_statement): Likewise.
	(lang_process): Likewise.
	* ldlang.h (lang_input_statement_flags): Likewise.
	* ldlex.h (option_values): Likewise.
	* ldmain.c: Include plugin.h unconditionally.
	(ld_cleanup): Remove the BFD_SUPPORTS_PLUGINS check.
	(main): Likewise.
	(add_archive_element): Likewise.
	* lexsup.c: Include plugin.h unconditionally.
	(ld_options): Remove the BFD_SUPPORTS_PLUGINS check.
	(parse_args): Replace the BFD_SUPPORTS_PLUGINS check with the
	bfd_plugin_enabled call.  Remove the BFD_SUPPORTS_PLUGINS check.
	(help): Append " (ignored)" to plugin options if bfd_plugin_enabled
	return false.
	* libdep_plugin.c: Remove the BFD_SUPPORTS_PLUGINS check.
	* plugin.c: Likewise.
	* testplug.c: Likewise.
	* testplug2.c: Likewise.
	* testplug3.c: Likewise.
	* testplug4.c: Likewise.

Co-Authored-By: Alan Modra <amodra@gmail.com>
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-18 17:05:43 -07:00
Alan Modra
74201a3208 Re: windres: don't exit so much on errors in read_coff_rsrc
oss-fuzz found that I missed some error paths in commit 9e68cae4fd.
This fix prevents reads of a NULL pointer in sort_resources.

	* rescoff.c (read_coff_res_dir): Check return of recursive calls
	and read_coff_data_entry calls.  Pass failures up the call chain.
2025-08-19 09:31:06 +09:30
GDB Administrator
c022c51376 Automatic date update in version.in 2025-08-19 00:00:12 +00:00
H.J. Lu
258ebe350e ld: Properly override compiler flags in tests
Some tests need to be compiled with additional flags.  When binutils is
built and compiled with

CC="gcc -fsanitize=address,undefined" CXX="g++ -fsanitize=address,undefined"

some linker tests fail to disable address sanitizer options since
proc default_ld_compile has

    set ccexe $cc
    set ccparm [string first " " $cc]
    set ccflags ""
    if { $ccparm > 0 } then {
        set ccflags [string range $cc $ccparm end]
        set ccexe [string range $cc 0 $ccparm]
        set cc $ccexe
    }
...
    set cmd "$cc $flags $ccflags -c $source -o $object"

Compiler flags in $CC and $CXX will be the last ones.  Add
CFLAGS_FOR_TARGET_TEST and CXXFLAGS_FOR_TARGET_TEST to use them in
proc default_ld_compile

    set cflag_test ""
    set cxxflag_test ""
    if {[string match "*++*" $ccexe]} {
        append flags " $CXXFLAGS_FOR_TARGET"
        set cflag_test "$CXXFLAGS_FOR_TARGET_TEST"
    } else {
        append flags " $CFLAGS_FOR_TARGET"
        set cflag_test "$CFLAGS_FOR_TARGET_TEST"
    }
...
    set cmd "$cc $flags $ccflags $cflag_test -c $source -o $object"

so that they will be the last flags passed to compiler.  Also update
run_ld_link_exec_tests and run_cc_link_tests to make
CFLAGS_FOR_TARGET_TEST and CXXFLAGS_FOR_TARGET_TEST the last flags
passed to compiler.

	* testsuite/config/default.exp (CFLAGS_FOR_TARGET_TEST): New.
	(CXXFLAGS_FOR_TARGET_TEST): Likewise.
	* testsuite/ld-elf/dwarf.exp (CFLAGS_FOR_TARGET): Renamed to ...
	(CFLAGS_FOR_TARGET_TEST): This.
	* testsuite/ld-elf/shared.exp: Save, append and restore
	CFLAGS_FOR_TARGET_TEST and CXXFLAGS_FOR_TARGET_TEST for
	$build_tests.  Save, append and restore CFLAGS_FOR_TARGET_TEST,
	instead of CFLAGS_FOR_TARGET, for $dlopen_run_tests.
	* testsuite/ld-plugin/plugin.exp (CFLAGS_FOR_TARGET): Renamed to
	...
	(CFLAGS_FOR_TARGET_TEST): This.
	* testsuite/ld-shared/shared.exp (CFLAGS_FOR_TARGET): Renamed to
	...
	(CFLAGS_FOR_TARGET_TEST): This.
	* testsuite/ld-srec/srec.exp (CFLAGS_FOR_TARGET): Renamed to ...
	(CFLAGS_FOR_TARGET_TEST): This.
	(CXXFLAGS_FOR_TARGET): Renamed to ...
	(CXXFLAGS_FOR_TARGET_TEST): This.
	* testsuite/lib/ld-lib.exp (default_ld_compile): Append
	CFLAGS_FOR_TARGET_TEST/CXXFLAGS_FOR_TARGET_TEST to compiler flags.
	(run_ld_link_exec_tests): Append CFLAGS_FOR_TARGET_TEST and
	CXXFLAGS_FOR_TARGET_TEST to compiler.
	(run_cc_link_tests): Likewise.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-18 13:17:24 -07:00
Nick Clifton
b6ebe65cda Fix compile time warning when building with Clang.
PR 33282
2025-08-18 15:27:34 +01:00
Tom de Vries
d412728cda [gdb/testsuite] Fix gdb.tui/tui-mode-switch.exp on aarch64
On aarch64-linux, occasionally I run into these warnings:
...
PASS: gdb.tui/tui-mode-switch.exp: set style enabled off
WARNING: timeout in accept_gdb_output
PASS: gdb.tui/tui-mode-switch.exp: no boo
WARNING: timeout in accept_gdb_output
...

The first in more detail:
...
Box Dump (40 x 1) @ (0, 11):
   11 b(gdb) b
WARNING: timeout in accept_gdb_output
...

Fix this by waiting for a prompt after leaving TUI before sending "b".

Also, while we're at it generate a few more passes.

Tested on aarch64-linux.
2025-08-18 16:17:15 +02:00
H.J. Lu
5bef3e65ec ld: Set the is_linker_input field
Set the is_linker_input field when adding object only section.

	* ldlang.c (cmdline_add_object_only_section): Set the
	is_linker_input field.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-18 07:01:42 -07:00
Rainer Orth
fc6423d965 ld: testsuite: Fix no-plt tests on Solaris/i386
Several no-plt tests FAIL on 32-bit Solaris/x86:

FAIL: Build libno-plt-1b.so
FAIL: No PLT (dynamic 1a)
FAIL: No PLT (dynamic 1b)
FAIL: No PLT (dynamic 1c)
FAIL: No PLT (PIE 1e)
FAIL: No PLT (PIE 1f)
FAIL: No PLT (PIE 1g)

The failure mode is always similar, e.g.

../binutils/objdump -dwrj.text tmpdir/libno-plt-1b.so > dump.out
regexp_diff match failure
regexp "^ +[a-f0-9]+:   8b 80 ([0-9a-f]{2} ){4}[        ]+mov +-0x[a-f0-9]+\(%eax\),%eax$"
line   " 4aa:   8b 80 14 00 00 00       mov    0x14(%eax),%eax"
regexp_diff match failure
regexp "^ +[a-f0-9]+:   ff a0 ([0-9a-f]{2} ){4}[        ]+jmp +\*-0x[0-9a-f]+\(%eax\)$"
line   " 4ca:   ff a0 14 00 00 00       jmp    *0x14(%eax)"

i.e. there's a positive offset from the GOT instead of the expected
negative one.  AFAICS that's because there are additional GOT entries on
the Solaris side (printed with elfdump -G since there seems to be no
support for that in either readelf or objdump):

* Solaris/i386:

Global Offset Table Section:  .got
  index    addr  value  pending relocation
    [0]  0x15f4 0x1514
    [1]  0x15f8      0
    [2]  0x15fc      0
    [3]  0x1600  0x3a6  R_386_JMP_SLOT      __cxa_finalize
    [4]  0x1604      0  R_386_GLOB_DAT      _ITM_deregisterTMCloneTable
    [5]  0x1608      0  R_386_GLOB_DAT      func

* Linux/i686:

Global Offset Table Section:  .got
  index    addr value  pending relocation
    [0]  0x3fe0     0  R_386_GLOB_DAT      _ITM_deregisterTMCloneTable
    [1]  0x3fe4     0  R_386_GLOB_DAT      __cxa_finalize
    [2]  0x3fe8     0  R_386_GLOB_DAT      __gmon_start__
    [3]  0x3fec     0  R_386_GLOB_DAT      func

This patch fixes this by making the sign optional in affected cases.

Tested on i386-pc-solaris2.11 and i686-pc-linux-gnu.

2025-07-25  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	ld:
	* testsuite/ld-i386/libno-plt-1b.dd: Allow for positive GOT
	offsets.
	* testsuite/ld-i386/no-plt-1a.dd: Likewise.
	* testsuite/ld-i386/no-plt-1b.dd: Likewise.
	* testsuite/ld-i386/no-plt-1c.dd: Likewise.
	* testsuite/ld-i386/no-plt-1e.dd: Likewise.
	* testsuite/ld-i386/no-plt-1f.dd: Likewise.
	* testsuite/ld-i386/no-plt-1g.dd: Likewise.
2025-08-18 16:00:42 +02:00
Alice Carlotti
9e5fdac9ac gas: Record file name in macro locations
This allows the correct file name to be used when emitting messages for
lines within a macro.  The line numbers were already set and displayed
correctly, which resulted in mismatched file names and line numbers.

PR 32738
2025-08-18 14:37:10 +01:00
Alice Carlotti
40acf2f9ae gas: Improve file name in messages header
Message output from gas is prefixed with a line of the form:

path/file.s: Assembler messages:

Don't use the file name from the first message for this header.
Instead, use the source file name specified in the command line.
2025-08-18 14:37:10 +01:00
Alan Modra
5e83077d55 Don't choose plugin target in binutils/
Instead make bfd_check_format try the plugin target first when the
user hasn't supplied a target.

bfd/
	* format.c (bfd_check_format_matches): Try for a plugin target
	match first.
	* targets.c (bfd_find_target): Don't specially treat "plugin".
binutils/
	* ar.c (plugin_target): Delete.
	(open_inarch): Don't set target of archive elements.
	(replace_members): Use target rather than plugin_target when
	opening replacement or additional files.
	* arsup.c (plugin_target): Delete.  Replace all uses with NULL.
	(ar_open): Don't set element target.
	* bucomm.h (set_plugin_target): Delete.
	* nm.c (plugin_target): Delete.
	(display_archive): Don't set element target.
	(display_file): Alway use target when opening file.
	* objcopy.c (copy_archive): Don't use plugin target for output
	elements.
	* NEWS: Mention stricter target checking.
2025-08-18 23:05:43 +09:30
Nick Clifton
c3eb17bae4 Fix typo in recent update to elf.c's core note handling code.
PR 33282
2025-08-18 13:58:01 +01:00
H.J. Lu
4e46c5a14f ld: Issue an error if group nested too deeply
If a linker script has a group nested too deeply by mistake, issue an
error instead of hanging forever without outputting any error message.

	PR ld/33265
	* ldlang.c (MAX_NESTED_GROUP_DEPTH): New.
	(open_input_bfds): Add a pointer argument for the nested group
	count.  Increment the count before the while loop and decrement
	it after the loop.  Issue an error if the nested group count >=
	MAX_NESTED_GROUP_DEPTH when processing input statement.
	(lang_process): Update open_input_bfds calls.
	(cmdline_emit_object_only_section): Likewise.
	* testsuite/ld-scripts/libpr33265-1.a: New file.
	* testsuite/ld-scripts/libpr33265-2.a: Likewise.
	* testsuite/ld-scripts/libpr33265-3a.a: Likewise.
	* testsuite/ld-scripts/libpr33265-3b.a: Likewise.
	* testsuite/ld-scripts/libpr33265-3c.a: Likewise.
	* testsuite/ld-scripts/pr33265-1.d: Likewise.
	* testsuite/ld-scripts/pr33265-2.d: Likewise.
	* testsuite/ld-scripts/pr33265-3.d: Likewise.
	* testsuite/ld-scripts/script.exp: Run PR ld/33265 tests.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-18 05:13:57 -07:00
GDB Administrator
570f4c0c11 Automatic date update in version.in 2025-08-18 00:00:17 +00:00
Indu Bhagat
0004c4efea libsframe: testsuite: use SFrame V2 specific APIs
Use sframe_encoder_add_funcdesc_v2 instead of sframe_encoder_add_funcdesc.
Similarly, use sframe_decoder_get_funcdesc_v2 instead of
sframe_decoder_get_funcdesc.

sframe_encoder_add_funcdesc, and sframe_decoder_get_funcdesc were first
added for SFrame V1.  For the purpose of these testcases, the two V2
APIs are (almost) functionally equivalent.  In future, we may want to
make sframe_encoder_add_funcdesc and sframe_decoder_get_funcdesc
internal to libsframe only.  Using the V2 named APIs is better for
clarity as well.

libsframe/testsuite/
	* libsframe.encode/encode-1.c: Use V2 named APIs instead.
	* libsframe.find/findfre-1.c: Likewise.
	* libsframe.find/findfunc-1.c: Likewise.
	* libsframe.decode/be-flipping.c: Likewise.
	* libsframe.decode/frecnt-1.c: Likewise.
	* libsframe.decode/frecnt-2.c: Likewise.
2025-08-17 15:29:44 -07:00
Indu Bhagat
fb2d8601c6 libsframe: testsuite: reduce usage of magic numbers from encode-1.c
Previously, some of the libsframe tests were updated to reduce the usage
of magic numbers.  This patch makes encode-1.c follow similar coding
style as other tests, reducing the number of magic constants.

libsframe/testsuite/
	* libsframe.encode/encode-1.c: Avoid magic numbers.
2025-08-17 15:26:34 -07:00
Alan Modra
a5858e8136 Sanity check windows resource version len
oss-fuzz generated a total length field of 32, when the header was 40
bytes.  Subtracting gave -8ul for the remaining length..

I think we should be sanity checking the total length given in the
header against the remaining buffer length and the size of the header
each time get_version_header is called.

Possibly vallen should be sanity checked inside get_version_header
too, but I'll leave that to someone else.

	PR 27686
	* resbin.c (bin_to_res_version): Correct error message arg.
	Move len vs. buffer length sanity check..
	(get_version_header): ..to here.  Also sanity check len
	against off.
2025-08-17 22:32:43 +09:30
Rainer Orth
ddc09604ad ld: testsuite: Fix several CTF tests on 32-bit SPARC
Several ld CTF tests FAIL on 32-bit SPARC, e.g.

FAIL: Arrays (conflicted)

The failure mode is always the same:

./tmpdir/array-char-conflicting-1.s: Assembler messages:
./tmpdir/array-char-conflicting-1.s:89: Error: Architecture mismatch on "return %i7+8".
./tmpdir/array-char-conflicting-1.s:89: (Requires v9|v9a|v9b|v9c|v9d|v9e|v9v|v9m|m8; requested architecture is sparclite.)

The problem is that gcc emits v8plus code by default, and thus invokes
as with -xarch=v8plus (equivalent to -Av8plus), while the testcase lacks
the latter.

Fixed by setting ASFLAGS to match.

Tested on sparc-sun-solaris2.11, sparc-unknown-linux-gnu,
sparcv9-sun-solaris2.11, and sparc64-unknown-linux-gnu.

2025-07-25  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	ld:
	* testsuite/ld-ctf/ctf.exp (ASFLAGS): Append -Av8plus on
	sparc-*-*.
2025-08-17 12:25:43 +02:00
Tom de Vries
f28a89fd76 [gdb/testsuite] Use regexp to match $_gdb_{major,minor}
Every time we update the gdb version number, test-case gdb.base/default.exp
needs updating because it matches the values of convenience variables
$_gdb_{major,minor} using hardcoded expected values:
...
	{$_gdb_major = 17} \
	{$_gdb_minor = 1} \
...

I'm assuming the values were hardcoded because gdb_test_list_exact was used.

Since the previous patch, that's not longer the case, so use regexps instead,
getting rid of this annoyance [1].

Tested on x86_64-linux.

[1] https://sourceware.org/pipermail/gdb-patches/2019-October/160935.html
2025-08-17 08:57:09 +02:00
Alan Modra
f586f9b61d buffer overflow in process_sht_group_entries
An oss-fuzz testcase with a SHT_GROUP section named .debug managed to
break objcopy --compress-debug-sections.  The underlying problem is
that SEC_DEBUGGING is set by section name tests, thus the SHT_GROUP
section gets compressed.  The compressed section data is smaller than
the original section sh_size, and process_sht_group_entries tries to
look at sh_size worth of entries.  The patch fixes this mess by simply
not setting SEC_DEBUGGING on SHT_GROUP sections.

Note that it isn't correct to restrict SEC_DEBUGGING to SHT_PROGBITS
sections, as that will break processor/os special sections for debug.
eg. SHT_MIPS_DEBUG.

	* elf.c (_bfd_elf_make_section_from_shdr): Don't set
	SEC_DEBUGGING on SEC_GROUP sections no matter their name.
2025-08-17 16:02:56 +09:30
Tom de Vries
3f7c685f26 [gdb/testsuite] Handle remote host in some test-cases
I ran test-case gdb.base/default.exp with make-check-all.sh, and noticed a
FAIL with host/target board local-remote-host-native:
...
FAIL: $exp: show convenience ($_colorsupport = "monochrome" not found)
...

The problem is that part of the test-case relies on "setenv TERM dumb", and
setenv, which is a tcl command (which runs on build), only has effect in gdb
(which runs on host), if build == host, in other words, local host.

I grepped for test-cases using setenv, and ran them with the host/target
board, and fixed the FAILs I saw.

All FAILs have the same cause as I described above, except for
proc test_data_directory in gdb.python/py-parameter.exp, which handles files
assuming local host.  I chose to leave it that way, and bail out but add a
comment.

Implementationwise, the change to test-case gdb.base/default.exp is the most
intrusive: it replaces a use of proc gdb_test_list_exact with a use of proc
gdb_get_lines_no_pass, because it allows specifying a regexp match.

In the process, I found out gdb_test_list_exact has a bug, filed as PR33038.

Because of this bug, I had to add matching of convenience variable $_tbl.

Tested on x86_64-linux.
2025-08-17 08:32:13 +02:00
GDB Administrator
82f3f381fb Automatic date update in version.in 2025-08-17 00:00:13 +00:00
Tom de Vries
e579b53735 [gdb/testsuite] Fix TUI tests on freebsd
While re-testing the TUI tests on x86_64-freebsd, I found that commit
06a53717f7 ("[gdb/testsuite] Handle unrecognized escape sequences better in
tuiterm") broke most test-cases.

Fix this by rewriting this gdb_test_multiple clause:
...
 	-re "^($re_csi_prefix?)($re_csi_args*)($re_csi_cmd)" {
...
into:
...
	-re "^($re_csi_cmd)" {
  ...
	-re "^($re_csi_args*)($re_csi_cmd)" {
  ...
 	-re "^($re_csi_prefix?)($re_csi_args*)($re_csi_cmd)" {
...

Tested on x86_64-linux and x86_64-freebsd.
2025-08-16 20:32:37 +02:00
Tom de Vries
06a53717f7 [gdb/testsuite] Handle unrecognized escape sequences better in tuiterm
When encountering an unrecognized escape sequence in Term::accept_gdb_output,
a warning is issued:
...
WARNING: timeout in accept_gdb_output
...
and 0 is returned.

Subsequent calls run into the same problem, so matching doesn't progress.

Consequently, figuring out what the unrecognized escape sequence actually is
depends on analyzing gdb's output as echoed into gdb.log.

In the test added in this commit, gdb (well, a script gdb.tcl emulating gdb)
outputs escape sequence "ESC ( B", which doesn't show up in recognizable form
in gdb.log:
...
foo^M^M
...
and as mentioned the tuiterm screen only show:
...
foo
...
because matching doesn't progress beyond the unrecognized sequence.

Fix this by rewriting accept_gdb_output to match gdb output using a phased
approach that echoes unmatched escape sequences, giving us instead on the
tuiterm screen:
...
foo^[(B
...

[ Since "ESC ( B" is now supported, the test-case has been updated to use
"ESC ( % 5" instead. ]

Tested on x86_64-linux.

PR testsuite/33218
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=33218
2025-08-16 09:18:45 +02:00
Tom de Vries
96265ee7fa [gdb/testsuite] Move setting of Term::_last_char to Term::_insert
The variable Term::_last_char is meant to represent the last char inserted by
Term::_insert, but setting it is done alongside the only call to _insert in
lib/tuiterm.exp:
...
		_insert $expect_out(0,string)
		variable _last_char
		set _last_char [string index $expect_out(0,string) end]
...

Fix this by moving the setting of _last_char to inside _insert.

Tested on x86_64-linux.
2025-08-16 09:18:45 +02:00
Alan Modra
28daddd33a Make bfd_check_format better respect given target
bfd_check_format currently does not take much notice of the target
set in its abfd arg, merely checking that target first if
target_defaulted is false.  As the comment says this was due to
complications with archive handling which I think was fixed in
commit f832531609.  It should now be possible to just check the
given target, except for linker input files.  This will speed checking
the target of the first file in archives, which is done in the process
of matching archive targets.

This will no doubt expose some misuse of target options, as found in
the binutils "efi app" tests.

The stricter checking also exposed some errors.  Cris targets gave
"FAIL: objcopy decompress debug sections in archive (reason: unexpected output)"
"FAIL: objcopy decompress debug sections in archive with zlib-gabi (reason: unexpected output)"
without the bfd_generic_archive_p fix.  cris has a default target of
cris-aout which doesn't match objects for any of the cris-elf or
cris-linux targets.  The problem here was that checking the first
object file in archives didn't match but a logic error there meant
bfd_error_wrong_object_format wasn't returned as it should be.  There
was also a possibility of bfd_error_wrong_object_format persisting
from one target check to the next.

bfd/
	* archive.c (bfd_generic_archive_p): Correct object in archive
	target test.
	* format.c (bfd_check_format_matches_lto): Try to match given
	target first even when target_defaulted is set.  Don't try
	other targets if !target_defaulted except for linker input.
	Clear bfd_error before attempted target matches.
	* targets.c (bfd_find_target): Set target_defaulted for
	plugin target.
binutils/
	* bucomm.h (set_plugin_target): Set target_defaulted.
	* testsuite/binutils-all/aarch64/pei-aarch64-little.d: Don't
	wrongly specify both input and output target, just specify
	output.
	* testsuite/binutils-all/loongarch64/pei-loongarch64.d: Likewise.
	* testsuite/binutils-all/riscv/pei-riscv64.d: Likewise.
2025-08-16 10:28:58 +09:30
GDB Administrator
bcd739ed04 Automatic date update in version.in 2025-08-16 00:00:17 +00:00
Alan Modra
46cd7e0dc8 archives and plugin target
Automatically choosing "plugin" for the archive target when plugins
are enabled can result in making archives as specified by the plugin
target vec, ie. COFF style archives (also used by most ELF
binutils targets).  This is wrong for aix, hpux, vms, aout, macho
and possibly other targets, if compatibility with target system
archives matters.

This patch removes archive support entirely from the plugin target.
That means an archive will never get past bfd_check_format with a
target of plugin_vec, even if it is opened using "plugin".  Instead,
archives will have their elements opened using the plugin target
selected is such a way that the plugin target will be tried first in
bfd_check_format and then continue to try other targets if that fails.

The patch tries to avoid opening archives using "plugin" because that
is guaranteed to fail the first target check in bfd_check_format, but
mm.c still does so, and nested archives will also be opened using
"plugin".

The patch also fixes poor arsup.c plugin support.

bfd/
	* plugin.c (plugin_vec): Remove archive support.
	* configure.ac: Remove plugin archive warning, and don't disable
	plugins by default on anything but aout targets.
	* configure: Regenerate.
binutils/
	* bucomm.h (set_plugin_target): New inline function.
	* ar.c: Remove unneeded forward declarations.
	(open_inarch): Don't use "plugin" if defaulting target when
	opening an archive, use "plugin" when opening elements.
	(replace_members): Use "plugin" when opening replacement or
	additional elements.
	* arsup.c: Remove unneeded forward declarations.
	(plugin_target): New.
	(ar_open): Don't open archives using "plugin", use it when
	opening elements.
	(ar_addmod): Use plugin_target.
	(ar_replace): Use plugin_target when opening replacement or
	additional elements.
	(ar_extract): Don't bfd_openr.
	* nm.c (display_archive): Open archive elements using the
	"plugin" target.
2025-08-16 07:37:08 +09:30
H.J. Lu
b71d1202f0 objcopy.c: Re-indent slim LTO IR comment
Re-indent slim LTO IR comment in

commit 9b383903e7
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Tue Aug 12 12:02:08 2025 -0700

    strip: Treat slim GCC/LLVM IR objects the same

	PR binutils/33271
	* objcopy.c (copy_file): Re-indent slim LTO IR comment.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-15 11:05:41 -07:00
Indu Bhagat
7dcdd8cae4 gas: sframe: const ptrs for args and local vars where applicable
Use const pointers for function arguments and local vars where
applicable.  'cfi_insn' contains the DWARF CFI instruction data which,
for the purpose of SFrame generation, is read-only.  Similarly, some
getter APIs and output related APIs now document their argument as
read-only.

While at it, also remove the ATTRIBUTE_UNUSED from argument xlate_ctx in
sframe_xlate_do_register () because the argument is indeed conditionally
used.
2025-08-15 10:29:38 -07:00
Nick Clifton
09e56f0515 Code tidy: bfd/elf.c: T|idy up core note handling code. 2025-08-15 14:03:59 +01:00
Tom de Vries
bd619420b3 [gdb/testsuite] Add gdb.tui/tui-mode-switch.exp
Add test-case gdb.tui/tui-mode-switch.exp, a regression test for
PR tui/30523.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30523
2025-08-15 14:48:10 +02:00
Tom de Vries
65af9c1531 [gdb/testsuite] Add Term::with_term
Add Term::with_term that allows us to override the default TERM used in
tuiterm:
...
Term::with_term xterm {
    Term::clean_restart 12 40
}
...
2025-08-15 14:48:10 +02:00
Tom de Vries
36f8b9785a [gdb/testsuite] Add Term::_esc_0x3d and Term::_esc_0x3e
Add support for:
- DECKPAM (Application Keypad)
  ESC =
- DECKPNM (Normal Keypad)
  ESC >
2025-08-15 14:48:10 +02:00