Commit Graph

112330 Commits

Author SHA1 Message Date
Indu Bhagat
989aabcb56 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.
2022-12-09 10:25:14 -08:00
Indu Bhagat
3f107464e3 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.
2022-12-09 10:23:07 -08:00
Indu Bhagat
70cfae61f4 sframe.h: make some macros more precise
include/ChangeLog:

	* sframe.h (SFRAME_V1_FUNC_INFO): Use specific bits only.
	(SFRAME_V1_FRE_INFO): Likewise.
2022-12-09 10:22:31 -08:00
Indu Bhagat
1e2a61ef2d libsframe: minor formatting nits
ChangeLog:

	* libsframe/sframe.c: Fix formatting nits.
2022-12-09 10:21:57 -08:00
Luis Machado
ba60b96371 [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.
2022-12-09 13:41:15 +00:00
Alan Modra
73425813c1 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.
2022-12-09 21:38:46 +10:30
Tom de Vries
8b272d7671 [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.
2022-12-09 10:41:13 +01:00
GDB Administrator
cd3866b6d0 Automatic date update in version.in 2022-12-09 00:01:02 +00:00
H.J. Lu
e9c11d58b9 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.
2022-12-08 08:05:45 -08:00
Tom de Vries
2d77a94ff1 [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.
2022-12-08 15:35:47 +01:00
Enze Li
c968f03861 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 3453e7e409
  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>
2022-12-08 15:35:47 +01:00
Nick Clifton
dcb53d93eb 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.
2022-12-08 13:06:31 +00:00
Jan Vrany
05a1f6468e 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>
2022-12-08 11:30:25 +00:00
Alan Modra
57336e2e4d libctf: avoid potential double free
* ctf-link.c (ctf_link_add_cu_mapping): Set t NULL after free.
2022-12-08 11:46:22 +10:30
GDB Administrator
b0f110a5ea Automatic date update in version.in 2022-12-08 00:00:42 +00:00
Peter Bergner
51b52f4ade 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.
2022-12-07 11:47:16 -06:00
Peter Bergner
a60038c648 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.
2022-12-07 11:47:16 -06:00
Simon Marchi
1de4b51563 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>
2022-12-07 11:52:59 -05:00
Tom de Vries
b5e7cd5cd3 [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>
2022-12-07 16:45:26 +01:00
Tom Tromey
3567f2bd66 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.
2022-12-07 08:12:03 -07:00
Alan Modra
3198c863f6 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.
2022-12-07 15:47:24 +10:30
Alan Modra
0f45491c0d 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.
2022-12-07 15:24:03 +10:30
Alan Modra
285b1d3324 _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.
2022-12-07 14:21:09 +10:30
Alan Modra
16fce1bddb bfd_compress_section_contents access to elf_section_data
* compress.c (bfd_compress_section_contents): Don't access
	elf_section_data for non-ELF.
2022-12-07 13:52:28 +10:30
Alan Modra
c3620d6d56 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.
2022-12-07 13:15:29 +10:30
GDB Administrator
9db0f1ae84 Automatic date update in version.in 2022-12-07 00:00:34 +00:00
H.J. Lu
e25466730d 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.
2022-12-06 14:47:44 -08:00
Tom Tromey
53fd08b60d 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.
2022-12-06 08:59:09 -07:00
Tom Tromey
e03698c122 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.
2022-12-06 07:41:52 -07:00
Nick Clifton
83f18e5ebe 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.
2022-12-06 11:24:12 +00:00
Tom de Vries
8db40179f0 [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.
2022-12-06 12:01:46 +01:00
Tom de Vries
6e41445bb0 [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.
2022-12-06 12:01:46 +01:00
Xiao Zeng
c8ea5e409b 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.
2022-12-06 10:18:19 +00:00
Haochen Jiang
40849d84cb 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.
2022-12-06 15:49:40 +08:00
Alan Modra
da16cc96f3 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.
2022-12-06 15:08:31 +10:30
Alan Modra
7b5f66a118 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.
2022-12-06 14:40:10 +10:30
Alan Modra
89dbeac746 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.
2022-12-06 12:11:28 +10:30
mengqinggang
8b4d46dfdf LoongArch: Fix dynamic reloc not generated bug in some cases.
bfd/ChangeLog:

	* elfnn-loongarch.c (loongarch_elf_relocate_section): Likewise.
2022-12-06 08:48:57 +08:00
Alan Modra
5830876a0c 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.
2022-12-06 10:31:50 +10:30
GDB Administrator
60d2606411 Automatic date update in version.in 2022-12-06 00:00:38 +00:00
Simon Marchi
7154e78635 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
2022-12-05 16:38:45 -05:00
Simon Marchi
d29ea32868 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
2022-12-05 16:38:45 -05:00
Simon Marchi
7cc662bcb7 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
2022-12-05 16:38:45 -05:00
Simon Marchi
8aa1556f2e 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
2022-12-05 16:38:45 -05:00
Simon Marchi
ef632b4bf8 gdb/linux-nat: bool-ify linux_nat_get_siginfo
Change return type to bool.

Change-Id: I1bf0360bfdd1b5994cd0f96c268d806f96fe51a4
2022-12-05 16:38:45 -05:00
Simon Marchi
0acd1110b6 gdb/linux-nat: use get_ptrace_pid in two spots
No behavior change expected.

Change-Id: Ifaa64ecd619483646b024fd7c62e571e92a8eedb
2022-12-05 16:38:45 -05:00
Simon Marchi
30add7ee24 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
2022-12-05 16:38:24 -05:00
Luis Machado
09a5d200e6 Add missing newline to gdbarch_tdep debugging output
The missing newline causes testsuite issues because the gdb prompt gets output
to an unexpected location.
2022-12-05 17:16:34 +00:00
Nick Clifton
3bf5bf547a 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.
2022-12-05 14:57:17 +00:00
Martin Liska
76a2bcc6b8 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.
2022-12-05 15:52:51 +01:00