Indu Bhagat [Fri, 9 Dec 2022 18:25:31 +0000 (10:25 -0800)]
libsframe: rename API sframe_fde_func_info to sframe_fde_create_func_info
The new name better reflects the purpose of the function.
ChangeLog:
* bfd/elfxx-x86.c (_bfd_x86_elf_create_sframe_plt): Use new
name.
* libsframe/sframe.c (sframe_fde_create_func_info): Rename
sframe_fde_func_info to this.
* libsframe/testsuite/libsframe.encode/encode-1.c: Use new name.
include/ChangeLog:
* sframe-api.h (sframe_fde_create_func_info): Rename
sframe_fde_func_info to this.
Indu Bhagat [Fri, 9 Dec 2022 18:25:14 +0000 (10:25 -0800)]
gas: sframe: fine tune the fragment fixup for SFrame func info
SFrame function info is an unsigned 8-bit field comprising of the following
(from LSB to MSB):
- 4-bits: FRE type
- 1-bit: FRE start address encoding
- 3-bits: Unused
At the moment, the most-significat 4-bits are zero (The FRE start
address encoding of SFRAME_FDE_TYPE_PCINC has a value of zero, and the upper
3-bits are unused). So the current implementation works without this patch.
To be precise, however, the fragment fixup logic is meant to fixup only the
least-significant 4-bits (i.e., only the FRE type needs to be updated
according to the function size).
This patch makes the gas implementation a bit more resilient: In the
future, when the format does evolve to make use of the currently unused
3-bits in various ways, the values in those 3-bits can be propagated
unchanged while the fragment fixup continues to update the lowermost
4-bits to indicate the selected FRE type.
ChangeLog:
* gas/gen-sframe.c (create_func_info_exp): New definition.
(output_sframe_funcdesc): Call create_func_info_exp.
* gas/sframe-opt.c (sframe_estimate_size_before_relax): The
associated fragment uses O_modulus now.
(sframe_convert_frag): Adjust the fragment fixup code according
to the new composite exp.
Indu Bhagat [Fri, 9 Dec 2022 18:23:07 +0000 (10:23 -0800)]
sframe: gas: libsframe: define constants and remove magic numbers
Define constants in sframe.h for the various limits associated with the
range of offsets that can be encoded in the start address of an SFrame
FRE. E.g., sframe_frame_row_entry_addr1 is used when start address
offset can be encoded as 1-byte unsigned value.
Update the code in gas to use these defined constants as it checks for
these limits, and remove the usage of magic numbers.
ChangeLog:
* gas/sframe-opt.c (sframe_estimate_size_before_relax):
(sframe_convert_frag): Do not use magic numbers.
* libsframe/sframe.c (sframe_calc_fre_type): Likewise.
include/ChangeLog:
* sframe.h (SFRAME_FRE_TYPE_ADDR1_LIMIT): New constant.
(SFRAME_FRE_TYPE_ADDR2_LIMIT): Likewise.
(SFRAME_FRE_TYPE_ADDR4_LIMIT): Likewise.
Indu Bhagat [Fri, 9 Dec 2022 18:22:31 +0000 (10:22 -0800)]
sframe.h: make some macros more precise
include/ChangeLog:
* sframe.h (SFRAME_V1_FUNC_INFO): Use specific bits only.
(SFRAME_V1_FRE_INFO): Likewise.
Indu Bhagat [Fri, 9 Dec 2022 18:21:57 +0000 (10:21 -0800)]
libsframe: minor formatting nits
ChangeLog:
* libsframe/sframe.c: Fix formatting nits.
Luis Machado [Mon, 22 Aug 2022 16:04:41 +0000 (17:04 +0100)]
[aarch64] Add TPIDR2 register support for Linux
With the AArch64 Scalable Matrix Extension we have a new TPIDR2 register, and
it will be added to the existing NT_ARM_TLS register set. Kernel patches are
being reviewed here:
https://lore.kernel.org/linux-arm-kernel/
20220818170111.351889-1-broonie@kernel.org/
From GDB's perspective, we handle it in a similar way to the existing TPIDR
register. But we need to consider cases of systems that only have TPIDR and
systems that have both TPIDR and TPIDR2.
With that in mind, the following patch adds the required code to support
TPIDR2 and turns the org.gnu.gdb.aarch64.tls feature into a
dynamically-generated target description as opposed to a static target
description containing only TPIDR.
That means we can remove the gdb/features/aarch64-tls.xml file and replace the
existing gdb/features/aarch64-tls.c auto-generated file with a new file that
dynamically generates the target description containing either TPIDR alone or
TPIDR and TPIDR2.
In the future, when *BSD's start to support this register, they can just
enable it as is being done for the AArch64 Linux target.
The core file read/write code has been updated to support TPIDR2 as well.
On GDBserver's side, there is a small change to the find_regno function to
expose a non-throwing version of it.
It always seemed strange to me how find_regno causes the whole operation to
abort if it doesn't find a particular register name. The patch moves code
from find_regno into find_regno_no_throw and makes find_regno call
find_regno_no_throw instead.
This allows us to do register name lookups to find a particular register
number without risking erroring out if nothing is found.
The patch also adjusts the feature detection code for aarch64-fbsd, since
the infrastructure is shared amongst all aarch64 targets. I haven't added
code to support TPIDR2 in aarch64-fbsd though, as I'm not sure when/if
that will happen.
Alan Modra [Fri, 9 Dec 2022 07:28:58 +0000 (17:58 +1030)]
PR28306, segfault in _bfd_mips_elf_reloc_unshuffle
Access to section data during relocation processing should be bounds
checked, as it is in bfd_perform_relocation. bfd_perform_relocation
does these checks after any special_function is called. So a reloc
special_function needs to do its own bounds checking before accessing
section data. This patch adds many such checks to the mips backend.
Checking mips relocs is not without some difficulty. See the comment
in _bfd_mips_reloc_offset_in_range. In a multitple reloc sequence
applied to the same location, relocs that may appear somewhere other
than the last one of the sequence need to be treated specially since
they apply to the addend for the next relocation rather than the
section contents. If the addend is in the section then it needs to be
checked but not when the addend is in the reloc. check_inplace
handles this situation. _bfd_mips_reloc_offset_in_range with
check_shuffle handles the case where contents are shuffled before
applying the relocation.
PR 28306
* elf32-mips.c (_bfd_mips_elf32_gprel16_reloc): Check reloc
address using _bfd_mips_reloc_offset_in_range.
(gprel32_with_gp, mips16_gprel_reloc): Likewise.
* elf64-mips.c (mips_elf64_gprel32_reloc): Likewise.
(mips16_gprel_reloc): Likewise.
* elfn32-mips.c (mips16_gprel_reloc): Likewise.
(gprel32_with_gp): Check reloc address using
bfd_reloc_offset_in_range.
* elfxx-mips.h (enum reloc_check): Define.
(_bfd_mips_reloc_offset_in_range): Declare.
* elfxx-mips.c (needs_shuffle): New function.
(_bfd_mips_elf_reloc_unshuffle, _bfd_mips_elf_reloc_shuffle): Use it.
(_bfd_mips_reloc_offset_in_range): New function.
(_bfd_mips_elf_gprel16_with_gp): Move reloc address checks to
partial_inplace handling. Use bfd_reloc_offset_in_range.
(_bfd_mips_elf_lo16_reloc): Check reloc address using
bfd_reloc_offset_in_range.
(_bfd_mips_elf_generic_reloc): Check reloc address using
_bfd_mips_reloc_offset_in_range.
(mips_elf_calculate_relocation): Check reloc address before calling
mips_elf_nullify_got_load.
(_bfd_mips_elf_check_relocs): Likewise.
(mips_elf_read_rel_addend): Add sec param, check reloc address
before reading. Adjust callers.
(mips_elf_add_lo16_rel_addend): Add sec param, adjust callers.
Tom de Vries [Fri, 9 Dec 2022 09:41:13 +0000 (10:41 +0100)]
[gdb/testsuite] Fix gdb.guile/scm-symtab.exp for ppc64le
On powerpc64le-linux, I run into:
...
(gdb) PASS: gdb.guile/scm-symtab.exp: step out of func2
guile (print (> (sal-line (find-pc-line (frame-pc (selected-frame)))) line))^M
= #f^M
(gdb) FAIL: gdb.guile/scm-symtab.exp: test find-pc-line with resume address
...
The problem is as follows: the instructions for the call to func2 are:
...
1000070c: 39 00 00 48 bl
10000744 <func1>
10000710: 00 00 00 60 nop
10000714: 59 00 00 48 bl
1000076c <func2>
10000718: 00 00 00 60 nop
1000071c: 00 00 20 39 li r9,0
...
and the corresponding line number info is:
...
scm-symtab.c:
File name Line number Starting address View Stmt
scm-symtab.c 42 0x1000070c x
scm-symtab.c 43 0x10000714 x
scm-symtab.c 44 0x1000071c x
...
The test-case looks at the line numbers for two insns:
- the insn of the call to func2 (0x10000714), and
- the insn after that (0x10000718),
and expects the line number of the latter to be greater than the line number
of the former.
However, both insns have the same line number: 43.
Fix this by replacing ">" with ">=".
Tested on x86_64-linux and powerpc64le-linux.
GDB Administrator [Fri, 9 Dec 2022 00:01:02 +0000 (00:01 +0000)]
Automatic date update in version.in
H.J. Lu [Tue, 6 Dec 2022 19:35:42 +0000 (11:35 -0800)]
x86-64: Remove BND from 64-bit IBT PLT
Since MPX support has been removed from x86-64 psABI, remove BND from
64-bit IBT PLT by using x32 IBT PLT.
bfd/
PR ld/29851
* elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Also check
x32 IBT PLT for 64-bit.
(elf_x86_64_link_setup_gnu_properties): Always use x32 IBT PLT.
ld/
PR ld/29851
* testsuite/ld-x86-64/ibt-plt-1.d: Updated.
* testsuite/ld-x86-64/ibt-plt-2a.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-2b.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-2c.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-2d.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-3a.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-3b.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-3c.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-3d.d: Likewise.
* testsuite/ld-x86-64/plt-main-ibt-x32.dd: Moved to ...
* testsuite/ld-x86-64/plt-main-ibt.dd: This.
* testsuite/ld-x86-64/x86-64.exp: Don't use plt-main-ibt-x32.dd.
Tom de Vries [Thu, 8 Dec 2022 14:35:47 +0000 (15:35 +0100)]
[gdb/testsuite] Require debug info for gdb.tui/tui-layout-asm-short-prog.exp
When running test-case gdb.tui/tui-layout-asm-short-prog.exp on SLE-12-SP3
aarch64, I run into:
...
FAIL: gdb.tui/tui-layout-asm-short-prog.exp: check asm box contents
FAIL: gdb.tui/tui-layout-asm-short-prog.exp: check asm box contents again
...
due to:
...
(gdb) file tui-layout-asm-short-prog^M
Reading symbols from tui-layout-asm-short-prog...^M
(No debugging symbols found in tui-layout-asm-short-prog)^M
...
I managed to reproduce the same behaviour on openSUSE Leap 15.4 x86_64, by
removing the debug option.
Fix this by making the test-case unsupported if no debug info is found.
Tested on x86_64-linux.
Enze Li [Thu, 8 Dec 2022 14:35:47 +0000 (15:35 +0100)]
gdb/testsuite: update a pattern in gdb_file_cmd
When building GDB with the following CFLAGS and CXXFLAGS as part of
configure line:
CFLAGS=-std=gnu11 CXXFLAGS=-std=gnu++11
Then run the selftest.exp, I see:
======
Running /home/lee/dev/binutils-gdb/gdb/testsuite/gdb.gdb/selftest.exp
...
FAIL: gdb.gdb/selftest.exp: run until breakpoint at captured_main
WARNING: Couldn't test self
=== gdb Summary ===
# of unexpected failures 1
/home/lee/dev/binutils-gdb/gdb/gdb version 13.0.50.
20221206-git -nw -nx
-iex "set height 0" -iex "set width 0" -data-directory
/home/lee/dev/binutils-gdb/gdb/testsuite/../data-directory
======
It is the fact that when I use the previously mentioned CFLAGS and
CXXFLAGS as part of the configuration line, the default value (-O2 -g)
is overridden, then GDB has no debug information. When there's no debug
information, GDB should not run the testcase in selftest.exp.
The root cause of this FAIL is that the $gdb_file_cmd_debug_info didn't
get the right value ("nodebug") during the gdb_file_cmd procedure.
That's because in this commit,
commit
3453e7e409f44a79ac6695589836edb8a49bfb08
Date: Sat May 19 11:25:20 2018 -0600
Clean up "Reading symbols" output
It changed "no debugging..." to "No debugging..." which causes the above
problem. This patch only updates the corresponding pattern to fix this
issue.
With this patch applied, I see:
======
Running /home/lee/dev/binutils-gdb/gdb/testsuite/gdb.gdb/selftest.exp
...
=== gdb Summary ===
# of untested testcases 1
/home/lee/dev/binutils-gdb/gdb/gdb version 13.0.50.
20221206-git -nw -nx
-iex "set height 0" -iex "set width 0" -data-directory
/home/lee/dev/binutils-gdb/gdb/testsuite/../data-directory
======
Tested on x86_64-linux.
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Nick Clifton [Thu, 8 Dec 2022 13:06:31 +0000 (13:06 +0000)]
Update the description of the linker script's TYPE directive.
PR 29861
* ld.texi (Output Section Type): Note that setting the output
section type only works if the section contains untyped data.
Jan Vrany [Thu, 8 Dec 2022 11:30:25 +0000 (11:30 +0000)]
gdb: skip objfiles with no BFD in DWARF unwinder
While playing with JIT reader I experienced GDB to crash on null-pointer
dereference when stepping through non-jitted code.
The problem was that dwarf2_frame_find_fde () assumed that all objfiles
have BFD but that's not always true. To address this problem, this
commit skips such objfiles.
To test the fix we put breakpoint in jit_function_add (). The JIT reader
does not know how unwind this function so unwinding eventually falls
back to DWARF unwinder which in turn iterates over objfiles. Since the
the code is jitted, it is guaranteed it would eventually process JIT
objfile.
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Alan Modra [Thu, 8 Dec 2022 01:15:12 +0000 (11:45 +1030)]
libctf: avoid potential double free
* ctf-link.c (ctf_link_add_cu_mapping): Set t NULL after free.
GDB Administrator [Thu, 8 Dec 2022 00:00:42 +0000 (00:00 +0000)]
Automatic date update in version.in
Peter Bergner [Tue, 8 Nov 2022 23:41:52 +0000 (17:41 -0600)]
PowerPC: Add support for RFC02655 - Saturating Subtract Instruction
opcodes/
* ppc-opc.c (XOL): New define.
(XOL_MASK): Likewise.
(powerpc_opcodes): Add subfus, subfus., subwus, subwus., subdus, subdus.
gas/
* testsuite/gas/ppc/rfc02655.s: New test.
* testsuite/gas/ppc/rfc02655.d: Likewise
* testsuite/gas/ppc/future-raw.s: Likewise.
* testsuite/gas/ppc/future-raw.d: Likewise.
* testsuite/gas/ppc/ppc.exp: Run them.
Peter Bergner [Tue, 8 Nov 2022 18:40:08 +0000 (12:40 -0600)]
PowerPC: Add support for RFC02656 - Enhanced Load Store with Length Instructions
opcodes/
* ppc-opc.c (PPCVSXF): New define.
(powerpc_opcodes): Add lxvrl, lxvrll, lxvprl, lxvprll, stxvrl,
stxvrll, stxvprl, stxvprl.
gas/
* testsuite/gas/ppc/rfc02656.s: New test.
* testsuite/gas/ppc/rfc02656.d: Likewise.
* testsuite/gas/ppc/ppc.exp: Run it.
Simon Marchi [Fri, 2 Dec 2022 18:00:47 +0000 (13:00 -0500)]
gdb: add invalidate_selected_frame function
Instead of using `select_frame (nullptr)` to invalidate the selected
frame, introduce a function to do that. There is no change in behavior,
but it makes the intent a bit clearer. It also allows adding an assert
in select_frame that fi is not nullptr, so it avoids passing nullptr by
mistake.
Change-Id: I61643f46bc8eca428334513ebdaadab63997bdd0
Reviewed-By: Bruno Larsen <blarsen@redhat.com>
Tom de Vries [Wed, 7 Dec 2022 15:45:26 +0000 (16:45 +0100)]
[gdb/testsuite] Add KFAILs in gdb.base/longjmp.exp
Add KFAILs in test-case gdb.base/longjmp.exp for PR gdb/26967, covering
various ways that gdb is unable to recover the longjmp target if the libc
probe is not supported.
Tested on x86_64-linux.
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Tom Tromey [Wed, 7 Dec 2022 15:10:55 +0000 (08:10 -0700)]
Remove unnecessary xstrdup from bppy_init
I saw that bppy_init used a non-const "char *". Fixing this revealed
that the xstrdup here was also unnecessary, so this patch removes it.
Alan Modra [Wed, 7 Dec 2022 04:37:47 +0000 (15:07 +1030)]
coff make_a_section_from_file tidy
Also support compressing a few more sections.
* coffgen.c (make_a_section_from_file): Rename return_section
to newsect. Don't try to be clever matching section name.
Compress .gnu.debuglto_.debug_ and .gnu.linkonce.wi. too.
Only rename debug sections when decompressing for linker.
Alan Modra [Wed, 7 Dec 2022 04:16:16 +0000 (14:46 +1030)]
gas compress_debug tidy
* write.c (compress_debug): Don't set up "ob" until after
seginfo NULL check. Simplify SEC_CONTENTS test. Localise
variables. Use bfd_debug_name_to_zdebug.
Alan Modra [Wed, 7 Dec 2022 03:19:49 +0000 (13:49 +1030)]
_bfd_elf_slurp_secondary_reloc_section sanity check
* elf.c (_bfd_elf_slurp_secondary_reloc_section): Sanity check
section header against file size. Avoid overflow in
reloc_count.
Alan Modra [Wed, 7 Dec 2022 03:15:46 +0000 (13:45 +1030)]
bfd_compress_section_contents access to elf_section_data
* compress.c (bfd_compress_section_contents): Don't access
elf_section_data for non-ELF.
Alan Modra [Tue, 6 Dec 2022 22:58:18 +0000 (09:28 +1030)]
Compression tidy and fixes
Tidies:
- Move stuff from bfd-in.h and libbfd.c to compress.c
- Delete COMPRESS_DEBUG from enum compressed_debug_section_type
- Move compress_debug field out of link_info to ld_config.
Fixes:
- Correct test in bfd_convert_section_setup to use obfd flags,
not ibfd.
- Apply bfd_applicable_file_flags to compression bfd flags added
by gas and ld to the output bfd.
bfd/
* bfd-in.h (enum compressed_debug_section_type),
(struct compressed_type_tuple),
(bfd_get_compression_algorithm),
(bfd_get_compression_algorithm_name),
* libbfd.c (compressed_debug_section_names),
(bfd_get_compression_algorithm),
(bfd_get_compression_algorithm_name): Move..
* compress.c: ..to here, deleting COMPRESS_DEBUG from
enum compressed_debug_section_type.
(bfd_convert_section_setup): Test obfd flags not ibfd for
compression flags.
* elf.c (elf_fake_sections): Replace link_info->compress_debug
test with abfd->flags test.
* bfd-in2.h: Regenerate.
binutils/
* objcopy.c (copy_file): Tidy setting of bfd compress flags.
Expand comment.
gas/
* write.c (compress_debug): Test bfd compress flags rather than
flag_compress_debug.
(write_object_file): Apply bfd_applicable_file_flags to compress
debug flags added to output bfd.
include/
* bfdlink.h (struct bfd_link_info): Delete compress_debug.
ld/
* ld.h (ld_config_type): Add compress_debug.
* emultempl/elf.em: Replace references to link_info.compress_debug
with config.compress_debug.
* lexsup.c (elf_static_list_options): Likewise.
* ldmain.c (main): Likewise. Apply bfd_applicable_file_flags
to compress debug flags added to output bfd.
GDB Administrator [Wed, 7 Dec 2022 00:00:34 +0000 (00:00 +0000)]
Automatic date update in version.in
H.J. Lu [Tue, 6 Dec 2022 20:54:43 +0000 (12:54 -0800)]
bfd: Avoid signed overflow for new_size adjustment
When bfd_size_type is unsigned 64-bit integer and sizeof is unsigned
32-bit integer, subtraction in
*new_size += sizeof (Elf32_External_Chdr) - sizeof (Elf64_External_Chdr);
will overflow. Use
*new_size -= sizeof (Elf64_External_Chdr) - sizeof (Elf32_External_Chdr);
to avoid overflow.
PR binutils/29860
* compress.c (bfd_convert_section_setup): Avoid signed overflow
for new_size adjustment.
Tom Tromey [Tue, 6 Dec 2022 15:59:09 +0000 (08:59 -0700)]
Cosmetic fix in ppc-sysv-tdep.c
This is just a couple of cosmetic fixes in ppc-sysv-tdep.c: fixing
some formatting and correcting a typo.
Tom Tromey [Tue, 6 Dec 2022 14:41:52 +0000 (07:41 -0700)]
Fix operator precedence bug in Rust parser
PR rust/29859 points out an operator precedence bug in the Rust
parser. This patch fixes it and adds a regression test.
Nick Clifton [Tue, 6 Dec 2022 11:24:12 +0000 (11:24 +0000)]
Fix a dereference of NULL when scanning the symbol hashes array in the ARM linker.
PR 29852
* elf32-arm.c (cmse_scan): Check for NULL entries in the
sym_hashes array.
(elf32_arm_gc_mark_extra_sections): Likewise.
Tom de Vries [Tue, 6 Dec 2022 11:01:46 +0000 (12:01 +0100)]
[gdb/testsuite] Fix test names in gdb.base/longjmp.exp
When running test-case gdb.base/longjmp.exp, we have:
...
PASS: gdb.base/longjmp.exp: next over setjmp (1)
...
PASS: gdb.base/longjmp.exp: next over setjmp (2)
...
The trailing " (1)" and " (2)" are interpreted as comments rather than parts
of the test name, and therefore this is a duplicate, which is currently not
detected by our duplicate detection mechanism (PR testsuite/29772).
Fix the duplicate by using with_test_prefix.
Tested on x86_64-linux.
Tom de Vries [Tue, 6 Dec 2022 11:01:46 +0000 (12:01 +0100)]
[gdb/testsuite] Make gdb.base/longjmp.exp FAIL more stable across archs
When running test-case gdb.base/longjmp.exp on x86_64-linux, the master
longjmp breakpoint is set using probes and the test-case passes:
...
(gdb) PASS: gdb.base/longjmp.exp: next to longjmp (1)
next^M
0x00000000004005cc 49 if (setjmp (env) == 0) /* patt1 */^M
(gdb) PASS: gdb.base/longjmp.exp: next over longjmp(1)
next^M
56 resumes++;^M
(gdb) PASS: gdb.base/longjmp.exp: next into else block (1)
...
However, if I disable
create_longjmp_master_breakpoint_probe, we have instead:
...
(gdb) PASS: gdb.base/longjmp.exp: next to longjmp (1)
next^M
56 resumes++;^M
(gdb) FAIL: gdb.base/longjmp.exp: next over longjmp(1)
...
At first glance, the failure mode doesn't look too bad: we stop
a few insns later than the passing scenario.
For contrast, if we do the same on powerpc64le, the failure mode is:
...
(gdb) PASS: gdb.base/longjmp.exp: next to longjmp (1)
next^M
^M
Breakpoint 3, main () at longjmp.c:59^M
59 i = 1; /* miss_step_1 */^M
(gdb) FAIL: gdb.base/longjmp.exp: next over longjmp(1)
...
Here we only stop because of running into the safety net breakpoint at
miss_step_1.
So, how does this happen on x86_64? Let's look at the code:
...
4005c7: e8 94 fe ff ff call 400460 <_setjmp@plt>
4005cc: 85 c0 test %eax,%eax
4005ce: 75 1e jne 4005ee <main+0x3b>
4005d0: 8b 05 8e 0a 20 00 mov 0x200a8e(%rip),%eax # 601064 <longjmps>
4005d6: 83 c0 01 add $0x1,%eax
4005d9: 89 05 85 0a 20 00 mov %eax,0x200a85(%rip) # 601064 <longjmps>
4005df: be 01 00 00 00 mov $0x1,%esi
4005e4: bf 80 10 60 00 mov $0x601080,%edi
4005e9: e8 82 fe ff ff call 400470 <longjmp@plt>
4005ee: 8b 05 74 0a 20 00 mov 0x200a74(%rip),%eax # 601068 <resumes>
...
The next over the longjmp call at 4005e9 is supposed to stop at the longjmp
target at 4005cc, but instead we stop at 4005ee, where we have the step-resume
breakpoint inserted by the next. In other words, we accidentally "return"
from the longjmp call to the insn immediately after it (even though
a longjmp is a noreturn function).
Try to avoid this accident and make the failure mode on x86_64 the same as on
powerpc64le, by switching the then and else branch.
Tested on x86_64-linux.
Xiao Zeng [Tue, 6 Dec 2022 06:59:43 +0000 (14:59 +0800)]
gdb/riscv: correct dwarf to gdb register number mapping
According to the riscv psabi, the mapping relationship between the
DWARF registers and the machine registers is as follows:
DWARF Number | Register Name | Description
0 - 31 | x0 - x31 | Integer Registers
32 - 63 | f0 - f31 | Floating-point Registers
This is not modelled quite right in riscv_dwarf_reg_to_regnum, the
DWARF register numbers 31 and 63 are not handled correctly due to a
use of '<' instead of '<='. This commit fixes this issue.
Haochen Jiang [Mon, 5 Dec 2022 02:32:00 +0000 (10:32 +0800)]
x86: Remove unnecessary vex.w check for xh_mode in disassembler
For all the xh_mode usage in table, they are all using %XH, which will
print "{bad}" while EVEX.W=1. This makes this vex.w check unnecessary.
opcodes/ChangeLog:
* i386-dis.c (OP_E_memory): Remove vex.w check for xh_mode.
Alan Modra [Tue, 6 Dec 2022 04:38:31 +0000 (15:08 +1030)]
Get rid of SEC_ELF_COMPRESS
This flag also isn't needed, except for some sanity checks which we
can omit.
* elf.c (elf_fake_sections): Don't set SEC_ELF_COMPRESS for
compressed debug sections, just leave sh_name as -1.
(assign_file_positions_for_non_load_sections),
(assign_file_positions_except_relocs): Decide whether a section
needs compressing and thus should not have its file offset set
by looking at sh_name.
(_bfd_elf_assign_file_positions_for_non_load): Similarly decide
which sections need compressing.
* elflink.c (bfd_elf_final_link): Don't test SEC_ELF_COMPRESS.
* merge.c (_bfd_write_merged_section): Likewise.
* section.c (SEC_ELF_COMPRESS): Don't define.
(SEC_ELF_PURECODE): Renumber.
* bfd-in2.h: Regenerate.
Alan Modra [Tue, 6 Dec 2022 04:10:10 +0000 (14:40 +1030)]
Get rid of SEC_ELF_RENAME
SEC_ELF_RENAME is a flag used to effect section name changes when
compressing/decompressing zlib-gnu debug sections. This can be
accomplished more directly in one of the objcopy specific bfd
functions. Renaming for ld input is simplified too. Ld input object
files always have BFD_DECOMPRESS set.
bfd/
* compress.c (bfd_convert_section_size): Rename to..
(bfd_convert_section_setup): ..this. Handle objcopy renaming
of compressed/decompressed debug sections.
* elf.c (_bfd_elf_make_section_from_shdr): Only rename zdebug
input for linker.
(elf_fake_sections): Don't handle renaming of debug sections for
objcopy here.
* section.c (SEC_ELF_RENAME): Delete.
* bfd-in2.h: Regenerate.
binutils/
* objcopy.c (setup_section): Call bfd_convert_section_setup.
Don't call bfd_convert_section_size.
Alan Modra [Mon, 5 Dec 2022 22:13:31 +0000 (08:43 +1030)]
Compression header enum
Define an enum instead of using ELFCOMPRESS_ZLIB and ELFCOMPRESS_ZSTD
in bfd and binutils, and move some functions from bfd.c to compress.c.
When looking at the COFF/PE debug compression support, I wondered
about extending it to support zstd. I likely won't do that, but
the compression header ch_type field isn't just ELF specific if these
headers are to be used in COFF/PE too.
bfd/
* bfd.c (bfd_update_compression_header),
(bfd_check_compression_header, bfd_get_compression_header_size),
(bfd_convert_section_size, bfd_convert_section_contents): Move to..
* compress.c: ..here.
(enum compression_type): New. Use it throughout file.
* elf.c (_bfd_elf_make_section_from_shdr): Replace uses of
ELFCOMPRESS_ZLIB and ELFCOMPRESS_ZSTD with ch_compress_zlib and
ch_compress_zstd.
* bfd-in2.h: Regenerate.
binutils/
* readelf.c (process_section_headers, dump_section_as_strings),
(dump_section_as_bytes, load_specific_debug_section): Replace
uses of ELFCOMPRESS_ZLIB and ELFCOMPRESS_ZSTD with
ch_compress_zlib and ch_compress_zstd.
mengqinggang [Sat, 3 Dec 2022 07:34:35 +0000 (15:34 +0800)]
LoongArch: Fix dynamic reloc not generated bug in some cases.
bfd/ChangeLog:
* elfnn-loongarch.c (loongarch_elf_relocate_section): Likewise.
Alan Modra [Mon, 5 Dec 2022 22:07:52 +0000 (08:37 +1030)]
PR29855, ch_type in bfd_init_section_decompress_status can be uninitialized
PR 29855
* compress.c (bfd_init_section_decompress_status): Set ch_type
to zero for zlib-gnu case.
GDB Administrator [Tue, 6 Dec 2022 00:00:38 +0000 (00:00 +0000)]
Automatic date update in version.in
Simon Marchi [Fri, 2 Dec 2022 20:09:25 +0000 (15:09 -0500)]
gdb/linux-nat: add ptid parameter to linux_xfer_siginfo
Make the inferior_ptid bubble up to linux_nat_target::xfer_partial.
Change-Id: I62dbc5734c26648bb465f449c2003c73751cd812
Simon Marchi [Fri, 2 Dec 2022 20:09:24 +0000 (15:09 -0500)]
gdb/linux-nat: use l linux_nat_get_siginfo in linux_xfer_siginfo
I noticed we could reduce duplication a bit here.
Change-Id: If24e54d1dac71b46f7c1f68a18a073d4c084b644
Simon Marchi [Fri, 2 Dec 2022 20:09:23 +0000 (15:09 -0500)]
gdb/linux-nat: check ptrace return value in linux_nat_get_siginfo
Not a big deal, but it seems strange to check errno instead of the
ptrace return value to know whether it succeeded.
Change-Id: If0a6d0280ab0e5ecb077e546af0d6fe489c5b9fd
Simon Marchi [Fri, 2 Dec 2022 20:09:22 +0000 (15:09 -0500)]
gdb/linux-nat: don't memset siginfo on failure in linux_nat_get_siginfo
No caller cares about the value of *SIGINFO on failure. It's also
documented in the function doc that *SIGINFO is uninitialized (I
understand "untouched") on failure.
Change-Id: I5ef38a5f58e3635e109b919ddf6f827f38f1225a
Simon Marchi [Fri, 2 Dec 2022 20:09:21 +0000 (15:09 -0500)]
gdb/linux-nat: bool-ify linux_nat_get_siginfo
Change return type to bool.
Change-Id: I1bf0360bfdd1b5994cd0f96c268d806f96fe51a4
Simon Marchi [Fri, 2 Dec 2022 20:09:20 +0000 (15:09 -0500)]
gdb/linux-nat: use get_ptrace_pid in two spots
No behavior change expected.
Change-Id: Ifaa64ecd619483646b024fd7c62e571e92a8eedb
Simon Marchi [Mon, 5 Dec 2022 21:38:24 +0000 (16:38 -0500)]
gdb/testsuite: remove perror calls when failing to run
I noticed that when running these two tests in sequence:
Running /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.ada/arrayptr.exp ...
ERROR: GDB process no longer exists
ERROR: Couldn't run foo-all
Running /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.ada/assign_1.exp ...
The results in gdb.sum are:
Running /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.ada/arrayptr.exp ...
PASS: gdb.ada/arrayptr.exp: scenario=all: compilation foo.adb
ERROR: GDB process no longer exists
UNRESOLVED: gdb.ada/arrayptr.exp: scenario=all: gdb_breakpoint: set breakpoint at foo.adb:40 (eof)
ERROR: Couldn't run foo-all
Running /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.ada/assign_1.exp ...
UNRESOLVED: gdb.ada/assign_1.exp: changing the language to ada
PASS: gdb.ada/assign_1.exp: set convenience variable $xxx to 1
The UNRESOLVED for arrayptr.exp is fine, as GDB crashes in that test,
while trying to run to main. However, the UNRESOLVED in assign_1.exp
doesn't make sense, GDB behaves as expected in that test:
(gdb) set lang ada^M
(gdb) UNRESOLVED: gdb.ada/assign_1.exp: changing the language to ada
print $xxx := 1^M
$1 = 1^M
(gdb) PASS: gdb.ada/assign_1.exp: set convenience variable $xxx to 1
The problem is that arrayptr.exp calls perror when failing to run to
main, then returns. perror makes it so that the next test (as in
pass/fail) will be recorded as UNRESOLVED. However, here, the next test
(as in pass/fail) is in the next test (as in .exp). Hence the spurious
UNRESOLVED in assign_1.exp.
These perror when failing to run to X are not really useful, especially
since runto records a FAIL on error, by default. Remove all the
perrors on runto failure I could find.
When there wasn't one already, add a return statement when failing to
run, to avoid running the test of the test unnecessarily.
I thought of adding a check ran between test (in gdb_finish
probably) where we would emit a warning if errcnt > 0, meaning a test
quit and left a perror "active". However, reading that variable would
poke into the DejaGNU internals, not sure it's a good idea.
Change-Id: I2203df6d06e199540b36f56470d1c5f1dc988f7b
Luis Machado [Mon, 5 Dec 2022 11:00:14 +0000 (11:00 +0000)]
Add missing newline to gdbarch_tdep debugging output
The missing newline causes testsuite issues because the gdb prompt gets output
to an unexpected location.
Nick Clifton [Mon, 5 Dec 2022 14:57:17 +0000 (14:57 +0000)]
Prevent an illegal memory access when comparing the prefix of a section name regexp.
PR 29849
* ldlang.c (spec_match): Check that there is sufficient length in
the target name to match the spec's prefix.
Martin Liska [Mon, 5 Dec 2022 12:09:12 +0000 (13:09 +0100)]
testsuite: support mold linker
Mold linker demotes symbols like main to be local and the patch
adjusts expected output from nm.
Moreover, simplify the regex patterns.
Thiago Jung Bauermann [Thu, 1 Dec 2022 17:18:06 +0000 (17:18 +0000)]
gdbarch.py: Fix indentation in the generated set_gdbarch_* definitions
Use as many tabs as possible for indentation and pad with spaces to keep
the argument aligned to the opening parenthesis in the line above.
Co-developed-by: Simon Marchi <simon.marchi@efficios.com>
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Thiago Jung Bauermann [Thu, 1 Dec 2022 16:40:13 +0000 (16:40 +0000)]
gdbarch.py: Fix indentation in the generated gdbarch_dump function
Use tab for the first eight spaces of indentation, and align the gdb_printf
arguments to the open parenthesis of the function call.
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Thiago Jung Bauermann [Fri, 2 Dec 2022 23:52:50 +0000 (23:52 +0000)]
gdb: Update my email address in MAINTAINERS
Jan Beulich [Mon, 5 Dec 2022 12:52:55 +0000 (13:52 +0100)]
gas: add Dwarf line number test for .macro expansions
Before fiddling with the code let's put in place a test covering what
PR/gas 16908 aimed at.
Jan Beulich [Mon, 5 Dec 2022 12:51:24 +0000 (13:51 +0100)]
gas: squash (some) .linefile from listings
Not so long ago we started to insert these artificially when expanding
certain macro-like constructs; zap them as cluttering what actually
results from user input.
Jan Beulich [Mon, 5 Dec 2022 12:50:27 +0000 (13:50 +0100)]
gas: avoid inserting extra newline in buffer_and_nest()
In "-alm" listings I've noticed an odd blank line following the inserted
.linefile one. This results from the explicit NL inserted being
redundant with the one left in place from the original input line by all
respective callers. Note that we need to compensate for the removed line
by bumping the directive argument (which in turn is decremented again in
s_linefile() before calling new_logical_line_flags(), and I have to
confess that when putting together the original change I was a little
puzzled by the imbalance of increments/decrements, but then I forgot to
actually go look for the cause).
While there also switch to sb_add_string() instead of effectively open-
coding it to some degree.
Jan Beulich [Mon, 5 Dec 2022 12:50:07 +0000 (13:50 +0100)]
Arm: .noinit and .persistent are not supported for Linux targets
Respective tests being run means guaranteed failures.
Nick Clifton [Mon, 5 Dec 2022 11:11:44 +0000 (11:11 +0000)]
Fix an illegal memory access when parsing a corrupt VMS Alpha file.
PR 29848
* vms-alpha.c (parse_module): Fix potential out of bounds memory
access.
Andrew Burgess [Tue, 1 Nov 2022 14:09:17 +0000 (14:09 +0000)]
libopcodes/mips: add support for disassembler styling
This commit adds disassembler styling support for MIPS. After this
commit objdump and GDB will style disassembler output.
This is a pretty straight forward change, we switch to use the
disassemble_info::fprintf_styled_func callback, and pass an
appropriate style through as needed. No additional tricks were
needed (compared to say i386, or ARM).
Tested by running all of the objdump commands used by the gas
testsuite and manually inspecting the styled output, everything looks
reasonable, though I'm not a MIPS expert, so it is possible that I've
missed some corner cases. Worst case though is that something will be
styled incorrectly, the actual content should be unchanged.
All the gas, ld, and binutils tests still pass for me.
Andrew Burgess [Wed, 2 Nov 2022 15:53:43 +0000 (15:53 +0000)]
opcodes/mips: use .word/.short for undefined instructions
While working on disassembler styling for MIPS, I noticed that
undefined instructions are printed by the disassembler as raw number
with no assembler directive prefix (e.g. without .word or .short).
I think adding something like .word, or .short, helps to make it
clearer the size of the value that is being displayed, and is inline
with what many of the other libopcode disassemblers do.
In this commit I've added the .word and .short directives, and updated
all the tests that I spotted that failed as a result.
Alan Modra [Mon, 5 Dec 2022 04:43:23 +0000 (15:13 +1030)]
Re: Renaming .debug to .zdebug and vice versa
* compress.c (bfd_debug_name_to_zdebug): Fix C++ compile error.
(bfd_zdebug_name_to_debug): Likewise.
* bfd-in2.h: Regenerate.
GDB Administrator [Mon, 5 Dec 2022 00:00:28 +0000 (00:00 +0000)]
Automatic date update in version.in
Alan Modra [Sun, 4 Dec 2022 11:45:40 +0000 (22:15 +1030)]
PR29846, segmentation fault in objdump.c compare_symbols
Fixes a fuzzed object file problem where plt relocs were manipulated
in such a way that two synthetic symbols were generated at the same
plt location. Won't occur in real object files.
PR 29846
PR 20337
* objdump.c (compare_symbols): Test symbol flags to exclude
section and synthetic symbols before attempting to check flavour.
Alan Modra [Wed, 16 Nov 2022 21:28:31 +0000 (07:58 +1030)]
COFF compressed debug support
Since commit
4bea06d73c04 COFF support for compressed debug sections
has been broken due to the "flags" variable not getting SEC_HAS_CONTENTS.
* coffgen.c (make_a_section_from_file): Correct section flags
handling. Delete extraneous condition. Update error messages
to be the same as in elf.c.
Alan Modra [Sun, 4 Dec 2022 01:59:19 +0000 (12:29 +1030)]
Renaming .debug to .zdebug and vice versa
Move a couple of elf.c functions to compress.c.
* compress.c (bfd_debug_name_to_zdebug): New inline function.
(bfd_zdebug_name_to_debug): Likewise.
* elf.c (convert_debug_to_zdebug, convert_zdebug_to_debug): Delete.
(_bfd_elf_make_section_from_shdr, elf_fake_sections),
(_bfd_elf_assign_file_positions_for_non_load): Adjust to suit.
* coffgen.c (make_a_section_from_file): Use new inlines here.
GDB Administrator [Sun, 4 Dec 2022 00:00:31 +0000 (00:00 +0000)]
Automatic date update in version.in
H.J. Lu [Sat, 3 Dec 2022 18:43:29 +0000 (10:43 -0800)]
Revert "ld: Add .note.GNU-stack to ld-plugin/dummy.s"
This reverts commit
44e59b5a7d8a874f6546a1471b8a003911853aa0.
It works only for ELF targets.
H.J. Lu [Sat, 3 Dec 2022 17:41:31 +0000 (09:41 -0800)]
ld: Add .note.GNU-stack to ld-plugin/dummy.s
* testsuite/ld-plugin/dummy.s: Add .note.GNU-stack.
H.J. Lu [Sat, 3 Dec 2022 02:43:20 +0000 (18:43 -0800)]
x86: Allow 16-bit register source for LAR and LSL
Since LAR and LSL only access 16 bits of the source operand, regardless
of operand size, allow 16-bit register source for LAR and LSL, and always
disassemble LAR and LSL with 16-bit source operand.
gas/
PR gas/29844
* testsuite/gas/i386/i386.s: Add tests for LAR and LSL.
* testsuite/gas/i386/x86_64.s: Likewise.
* testsuite/gas/i386/intelbad.s: Remove "lar/lsl eax, ax".
* testsuite/gas/i386/i386-intel.d: Updated.
* testsuite/gas/i386/i386.d: Likewise.
* testsuite/gas/i386/intel-intel.d: Likewise.
* testsuite/gas/i386/intel.d: Likewise.
* testsuite/gas/i386/intelbad.l: Likewise.
* testsuite/gas/i386/x86_64-intel.d: Likewise.
* testsuite/gas/i386/x86_64.d: Likewise.
opcodes/
PR gas/29844
* i386-dis.c (MOD_0F02): Removed.
(MOD_0F03): Likewise.
(dis386_twobyte): Restore larS and lslS.
(mod_table): Remove MOD_0F02 and MOD_0F03.
* i386-opc.tbl: Allow 16-bit register source for LAR and LSL.
* i386-tbl.h: Regenerated.
GDB Administrator [Sat, 3 Dec 2022 00:00:51 +0000 (00:00 +0000)]
Automatic date update in version.in
Simon Marchi [Fri, 25 Nov 2022 21:27:15 +0000 (16:27 -0500)]
gdb/linux-nat: add pid parameter to linux_proc_xfer_memory_partial
Add a pid parameter to linux_proc_xfer_memory_partial, making the
inferior_ptid reference bubble up close to the target_ops::xfer_partial
boundary. No behavior change expected.
Change-Id: I58171b00ee1bba1ea22efdbb5dcab8b1ab3aac4c
Simon Marchi [Mon, 21 Nov 2022 19:36:36 +0000 (14:36 -0500)]
gdb: add some debug statements to solib-svr4.c
Add a few debug statements that were useful to me when debugging why the
glibc probes interface wasn't getting used.
Change-Id: Ic20744f9fc80a90f196896b0829949411620c540
Simon Marchi [Mon, 28 Nov 2022 16:43:13 +0000 (11:43 -0500)]
gdb: merge solib-frv aix-solib debug options into "set/show debug solib"
solib implementations are typically used one at a time. So it will be
rare that you will want to enable debug for one solib kind, and
absolutely want to keep the others disabled. To make things simpler,
instead of adding separate variables / macros / commands for each solib
implementation, merge the existing ones (frv and aix) into a unified
"set/show debug solib", with the solib_debug_printf macro.
Change-Id: I6e18bbc7401724f37ae66681badb079d75ecf7fa
Nick Clifton [Fri, 2 Dec 2022 10:08:39 +0000 (10:08 +0000)]
Add Jan Beulich as an x86_64 maintainer.
Jan Beulich [Fri, 2 Dec 2022 08:54:09 +0000 (09:54 +0100)]
x86: drop most OPERAND_TYPE_* (and rework the rest)
With the general use of C99 there's no need anymore to have i386-gen
produce these. For more frequently used ones introduce local #define-s,
while others are simply spelled out directly. While doing this move
some static constants into more narrow scopes.
Note that as a "side effect" this corrects type_names[]'es imm8s entry.
Jan Beulich [Fri, 2 Dec 2022 08:53:33 +0000 (09:53 +0100)]
x86: simplify and slightly correct XCHG vs NOP checking
For one, because of CheckRegSize, there's no need to check the size of
both (register) operands. And then in process_suffix() check opcode
space rather than the (potentially ambiguous) extension opcode.
Jan Beulich [Fri, 2 Dec 2022 08:53:07 +0000 (09:53 +0100)]
x86: also use D for XCHG and TEST
Leverage the C (commutative) attribute to also reduce the number of XCHG
and TEST templates we have. This way the reg <-> r/m (and reg <-> reg for
XCHG) forms can also be folded into a single template each, utilizing D.
Tom de Vries [Fri, 2 Dec 2022 07:56:42 +0000 (08:56 +0100)]
[gdb/testsuite] Prevent timeout in gdb.ada/float-bits.exp
Recent commit
32a5aa26256 ("[gdb/testsuite] Fix gdb.ada/float-bits.exp
for powerpc64le") started using command "maint print architecture", which
produces ~275 lines.
Rewrite the corresponding gdb_test_multiple to read line-by-line, to prevent
timeouts on slower test setups.
Note that this doesn't fix a timeout in the test-case on aarch64 due to:
...
gdbarch_dump: read_core_file_mappings = <0x817438>
(gdb) aarch64_dump_tdep: Lowest pc = 0x0x8000
...
Tested on x86_64-linux.
GDB Administrator [Fri, 2 Dec 2022 00:00:35 +0000 (00:00 +0000)]
Automatic date update in version.in
Carl Love [Thu, 1 Dec 2022 19:39:45 +0000 (14:39 -0500)]
PowerPC, fix gdb.reverse/finish-reverse-bkpt.exp and gdb.reverse/next-reverse-bkpt-over-sr.exp
The tests set a break point with the command break *func. This sets a
breakpoint on the first instruction of the function. PowerPC uses
Global Entry Points (GEP) and Local Entry Points (LEP). The first
instruction in the function is the GEP. The GEP sets up register
r2 before reaching the LEP. When the function is called with func() the
function is entered via the LEP and the test fails because GDB does not
see the breakpoint on the GEP. However, if the function is called via a
function pointer, execution begins at the GEP as the test expects.
Currently finish-reverse-bkpt.exp uses source file finish-reverse.c and
next-reverse-bpkt-over-sr.exp uses source file step-reverse.c A new
source file was created for tests finish-reverse-bkpt.exp and
next-reverse-bkpt-over-sr.exp. The new files use the new function
pointer method to call the functions so the tests will work correctly on
both PowerPC with a GEP and LEP as well as on other systems. The GEP is
the same as the LEP on non PowerPC systems.
The expect files were changed to use the new source files and to set the
initial break point for the rest of the test on the function pointer call
for the function.
This patch fixes two PowerPC test failures in each of the tests
gdb.reverse/finish-reverse-bkpt.exp and
gdb.reverse/next-reverse-bkpt-over-sr.exp.
Patch tested on PowerPC and Intel X86-64 with no regressions.
Reviewed-By: Bruno Larsen <blarsen@redhat.com>
Tom Tromey [Wed, 30 Nov 2022 20:50:27 +0000 (13:50 -0700)]
Remove call to registers_changed from windows-nat.c
I noticed that windows_nat_target::interrupt calls registers_changed.
However, I don't think there's any reason to do this, because this
will happen automatically when the inferior stop is processed.
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Tom Tromey [Wed, 30 Nov 2022 15:51:09 +0000 (08:51 -0700)]
Remove the_windows_nat_target global
I belatedly realized that the "the_windows_nat_target" global isn't
really necessary. It's only used in one place, where 'this' would be
simpler and clearer. This patch removes the global entirely.
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Simon Marchi [Wed, 30 Nov 2022 03:42:08 +0000 (22:42 -0500)]
gdb: make frame_register static
It is only used inside frame.c.
Change-Id: I44eb46a5992412f8f8b4954b2284b0ef3b549504
Tom Tromey [Thu, 3 Nov 2022 19:49:17 +0000 (13:49 -0600)]
Add name canonicalization for C
PR symtab/29105 shows a number of situations where symbol lookup can
result in the expansion of too many CUs.
What happens is that lookup_signed_typename will try to look up a type
like "signed int". In cooked_index_functions::expand_symtabs_matching,
when looping over languages, the C++ case will canonicalize this type
name to be "int" instead. Then this method will proceed to expand
every CU that has an entry for "int" -- i.e., nearly all of them. A
crucial component of this is that the caller, objfile::lookup_symbol,
does not do this canonicalization, so when it tries to find the symbol
for "signed int", it fails -- causing the loop to continue.
This patch fixes the problem by introducing name canonicalization for
C. The idea here is that, by making C and C++ agree on the canonical
name when a symbol name can have multiple spellings, we avoid the bad
behavior in objfile::lookup_symbol (and any other such code -- I don't
know if there is any).
Unlike C++, C only has a few situations where canonicalization is
needed. And, in particular, due to the lack of overloading (thus
avoiding any issues in linespec) and due to the way c-exp.y works, I
think that no canonicalization is needed during symbol lookup -- only
during symtab construction. This explains why lookup_name_info is not
touched.
The stabs reader is modified on a "best effort" basis.
The DWARF reader needed one small tweak in dwarf2_name to avoid a
regression in dw2-unusual-field-names.exp. I think this is adequately
explained by the comment, but basically this is a scenario that should
not occur in real code, only the gdb test suite.
lookup_signed_typename is simplified. It used to search for two
different type names, but now gdb can search just for the canonical
form.
gdb.dwarf2/enum-type.exp needed a small tweak, because the
canonicalizer turns "unsigned integer" into "unsigned int integer".
It seems better here to use the correct C type name.
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29105
Tested-by: Simon Marchi <simark@simark.ca>
Reviewed-by: Andrew Burgess <aburgess@redhat.com>
Tom Tromey [Fri, 4 Nov 2022 20:11:56 +0000 (14:11 -0600)]
Refactor cooked_index::do_finalize
This refactors cooked_index::do_finalize, reordering an 'if' to make
it a little less redundant. This change makes a subsequent patch
easier to read.
Reviewed-by: Andrew Burgess <aburgess@redhat.com>
Tom Tromey [Fri, 4 Nov 2022 20:08:13 +0000 (14:08 -0600)]
Remove language check from dwarf2_compute_name
dwarf2_compute_name has a redundant check of the CU's language -- this
is also checked in dwarf2_canonicalize_name. Removing this slightly
simplifies a future patch.
Reviewed-by: Andrew Burgess <aburgess@redhat.com>
Simon Marchi [Thu, 1 Dec 2022 16:44:41 +0000 (11:44 -0500)]
gdb/dwarf: add some QUIT macros
While testing the fix for PR 29105, I noticed I couldn't ctrl-C my way
out of GDB expanding many symtabs. GDB was busy in a loop in
cooked_index_functions::expand_symtabs_matching. Add a QUIT there. I
also happened to see a spot in
cooked_index_functions::expand_matching_symbols where a QUIT would be
useful too, since we iterate over a potentially big number of index
entries and expand CUs in the loop. Add one there too.
Change-Id: Ie1d650381df7f944c16d841b3e592d2dce7306c3
Approved-By: Kevin Buettner <kevinb@redhat.com>
Simon Marchi [Tue, 29 Nov 2022 16:28:58 +0000 (11:28 -0500)]
gdb: remove prune_threads in thread_db_target::update_thread_list
Pedro mentioned that this prune_threads call in
thread_db_target::update_thread_list was not needed, and it was probably
an oversight to leave it there in the work following commit
e8032dde10b
("Push pruning old threads down to the target"). That commit changed
the "find new threads" target operation to "update thread list", making
the target responsible of adding new threads and removing exited
threads, rather than just adding new threads. Commit
e8032dde10b moved
the prune_threads calls previously done in common code into each
target's update_thread_list method, in order to keep the existing
behavior, which is why this prune_threads call ended up there.
In the mean time, the linux-nat target was taught to update_thread_list,
and thread_db_target::update_thread_list defers to that for any live
inferior, so the prune_threads call is not needed there. Otherwise, the
thread_db_target::update_thread_list implementation based on
td_ta_thr_iter_p only knows how to add new threads, not how to delete
exited threads, but that is only used for non-live inferiors, where
threads can't exit anyway. So the prune_threads call is not needed for
that case either.
Change-Id: I127fd4f84c25086f97853dadf34c5cec6816840d
Approved-By: Pedro Alves <pedro@palves.net>
H.J. Lu [Tue, 29 Nov 2022 19:32:25 +0000 (11:32 -0800)]
opcodes: Remove i386-init.h and i386-tbl.h from HFILES
i386-init.h and i386-tbl.h are generated files. There is nothing to
translate. Remove them from HFILES (POTFILES).
* Makefile.am (HFILES): Remove i386-init.h and i386-tbl.h.
* Makefile.in: Regenerated.
* po/POTFILES.in: Likewise.
Tom Tromey [Wed, 30 Nov 2022 18:27:10 +0000 (11:27 -0700)]
Avoid timeouts in gdb.compile
PR compile/29541 points out that some of the C++ tests in gdb.compile
will time out when the glibc debuginfo is installed. This was
interfering with my hacking on gdb by making test runs extremely long,
so I looked into it.
Internally the bug seems to be that gdb tries to convert multiple
symbols named "var" via the compiler interface; one such symbol (I
didn't track it down too far) causes the C++ compiler plugin to crash.
Unfortunately, the crash is reported as a timeout, as the gdb side of
the plugin simply hangs. This seems like a bug in the plugin RPC
mechanism and, worse, apparently when I wrote this stuff I didn't
really consider error reporting very much at all, so gdb can't really
detect failures in the first place.
Anyway... this patch works around the timeout by compiling a simple
test that should provoke this bug, and then using "untested" if it
notices a GCC crash.
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29541
Tom Tromey [Wed, 30 Nov 2022 17:09:20 +0000 (10:09 -0700)]
Remove obsolete check from skip_compile_feature_tests
skip_compile_feature_tests checks for "Command not supported on this
host", but this error was removed by commit
e8d8cce6 ("Import mkdtemp
gnulib module, fix mingw build"). This patch removes the obsolete
test.
Tom Tromey [Wed, 30 Nov 2022 16:32:04 +0000 (09:32 -0700)]
Remove one copy of skip_compile_feature_tests
I noticed that there are two identical copies of
skip_compile_feature_tests in the test suite. This removes one from
gdb.exp, in favor of the one in compile-support.exp.
Clément Chigot [Thu, 1 Dec 2022 08:57:09 +0000 (09:57 +0100)]
binutils: improve holes detection in .debug_loclists.
The previous warnings about holes in .debug_loclists sections don't
take into account the headers of each CU and could include the locviews
if they precede the loclist.
The following warning can be triggered between two CU.
... <previous CU views> ...
0000001d <End of list>
0000002a v000000000000000 v000000000000000 location view pair
0000002c v000000000000000 v000000000000000 location view pair
readelf: Warning: There is a hole [0x1e - 0x2e] in .debug_loclists section.
0000002e v000000000000000 v000000000000000 views at
0000002a for:
...
But [0x1e - 0x2a] corresponds to the CU header and [0x2a - 0x2e] are
the locviews. Thus there is no hole here.
binutils/ChangeLog:
* dwarf.c (display_debug_loc): Adjust holes detections for
headers and locviews.
Nick Clifton [Thu, 1 Dec 2022 13:09:26 +0000 (13:09 +0000)]
Fix verilog output when the width is > 1.
PR 25202
bfd * bfd.c (VerilogDataEndianness): New variable.
(verilog_write_record): Use VerilogDataEndianness, if set, to
choose the endianness of the output.
(verilog_write_section): Adjust the address by the data width.
binutils* objcopy.c (copy_object): Set VerilogDataEndianness to the
endianness of the input file.
(copy_main): Verifiy the value set by the --verilog-data-width
option.
* testsuite/binutils-all/objcopy.exp: Add tests of the new behaviour.
* testsuite/binutils-all/verilog-I4.hex: New file.
Jan Beulich [Thu, 1 Dec 2022 09:00:26 +0000 (10:00 +0100)]
x86: rework of match_template()'s suffix checking
(Ab)using i386_opcode_modifier for this has been overkill, as the logic
doesn't really require the full structure. With the removal of
LONG_DOUBLE_MNEM_SUFFIX and No_ldSuf there's no good reason at all
anymore to pull out such a loop invariant: We're dealing a check of a
bit in the loop for a simple comparison. Do the original compares inside
the loop, thus also making it easier to understand what is actually
being checked.
Jan Beulich [Thu, 1 Dec 2022 09:00:07 +0000 (10:00 +0100)]
x86: drop No_ldSuf
With LONG_DOUBLE_MNEM_SUFFIX gone there'salso no use for No_ldSuf
anymore.
Jan Beulich [Thu, 1 Dec 2022 08:59:39 +0000 (09:59 +0100)]
x86/Intel: drop LONG_DOUBLE_MNEM_SUFFIX
With the removal of its use for FPU insns the suffix is now finally
properly misnamed. Drop its use altogether, replacing it by a separate
boolean instead.
Jan Beulich [Thu, 1 Dec 2022 08:59:11 +0000 (09:59 +0100)]
x86/Intel: restrict use of LONG_DOUBLE_MNEM_SUFFIX
As a comment near the top of match_template() already says: We really
only need this pseudo-suffix for far branch handling. Stop "deriving" it
for floating point insns. (Don't bother renaming the now properly
misnamed LONG_DOUBLE_MNEM_SUFFIX, to e.g. FAR_BRANCH_SUFFIX - it's going
to disappear anyway.)
Tom de Vries [Thu, 1 Dec 2022 06:25:04 +0000 (07:25 +0100)]
[gdb/testsuite] Wait longer for core generation
When I run the gdb testsuite on a powerpc64le-linux system with (slow) nfs
file system, I run into timeouts due to core generation, like for instance:
...
(gdb) gcore $outputs/gdb.ada/task_switch_in_core/crash.gcore^M
FAIL: gdb.ada/task_switch_in_core.exp: save a corefile (timeout)
...
Fix this by using with_timeout_factor 3 in gdb_gcore_cmd.
Tested on powerpc64le-linux.
Approved-By: Tom Tromey <tom@tromey.com>