Commit Graph

113961 Commits

Author SHA1 Message Date
Alan Modra
d664a6aad2 libctf: unused variable
* ctf-archive.c (arc_mmap_writeout): Delete unused variable.
2023-03-20 16:06:40 +10:30
Vladimir Mezentsev
de8e705968 gprofng: Use prototype to call libc functions
libcollector may not link against libC.
We use dlsym() to get a function from libc.
In some files, pointers to these functions do not have prototypes.
I also moved the shared definitions to libcollector/collect.h.

gprofng/ChangeLog
2023-03-15  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>

	libcollector/collector.c: Add prototypes.
	libcollector/dispatcher.c: Likewise.
	libcollector/heaptrace.c: Likewise.
	libcollector/iotrace.c: Likewise.
	libcollector/linetrace.c: Likewise.
	libcollector/mmaptrace.c: Likewise.
	libcollector/synctrace.c: Likewise.
	libcollector/collector.h: Add CALL_REAL(), NULL_PTR(), and DBG_LT.
2023-03-19 18:03:58 -07:00
GDB Administrator
2f5dea4558 Automatic date update in version.in 2023-03-20 00:00:34 +00:00
Tom Tromey
f6eefc3765 Don't declare psymbol_functions::fill_psymbol_map
psymbol_functions::fill_psymbol_map was removed, but I forgot to
remove the declaration.  This patch removes it.  Tested by rebuilding.
2023-03-19 16:50:27 -06:00
Alan Modra
92d450c79a segfault at i386-dis.c:9815
* i386-dis.c (print_insn): Access "ins" and "priv" via volatile
	pointers after second sigsetjmp return.
2023-03-19 23:35:18 +10:30
Aditya Vidyadhar Kamath
1a2c0dc1ab Enable vector register visibility in core file for AIX binutils
This patch will enable vector register visibility when AIX FOLKS do
core file analysis.
2023-03-19 23:35:18 +10:30
Alan Modra
2bdec58f59 Regen ld/po/BLD-POTFILES.in 2023-03-19 22:19:19 +10:30
Alan Modra
99b847478c XCOFF archive sanity check
XCOFF archive elements are in a linked list.  Add a little more sanity
checking.  This of course doesn't stop the fuzzers finding a way to
make a loop, but this check is cheap.

	* coff-rs6000.c (_bfd_xcoff_openr_next_archived_file): Sanity
	check that next element isn't pointing back to the header.
2023-03-19 22:19:19 +10:30
Alan Modra
5f51eb9397 rewrite_elf_program_header and want_p_paddr_set_to_zero
Layout in rewrite_elf_program_header is really done by lma, even if
program headers are going to have their p_paddr forced to zero.  Thus
when not matching against an existing segment, don't try to use a
"vma" from elf_segment_map.

	* elf.c (is_contained_by): Replace "bed" param with "use_vaddr".
	(IS_SECTION_IN_INPUT_SEGMENT): Adjust is_contained_by call.
	(rewrite_elf_program_header): Always match against lma in
	calls to is_contained_by using new maps.
2023-03-19 22:19:19 +10:30
Alan Modra
75831f18a0 Another sanity check for read_section_stabs_debugging_info
* rddbg.c (read_section_stabs_debugging_info): Ignore invalid
	stab sections with size less than 12 bytes.
2023-03-19 22:19:19 +10:30
Alan Modra
027333da75 ctf segfaults
PR 30228
	PR 30229
	* ctf-open.c (ctf_bufopen_internal): Check for NULL cts_data.
	* ctf-archive.c (ctf_arc_bufpreamble, ctf_arc_bufopen): Likewise.
2023-03-19 22:19:19 +10:30
GDB Administrator
52435e5ff6 Automatic date update in version.in 2023-03-19 00:00:39 +00:00
Tom Tromey
2d1bc55233 Remove objfile_type
This removes objfile_type, in favor of always using the per-arch
builtins.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:38 -06:00
Tom Tromey
a9a775da56 Add some types to struct builtin_type
This adds some types to struct builtin_type, ensuring it contains all
the types currently used by objfile_type.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:38 -06:00
Tom Tromey
a8ed3dde83 Rename objfile_type to builtin_type
This renames objfile_type to be an overload of builtin_type, in
preparation for their unification.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:38 -06:00
Tom Tromey
426e5b66a7 Use builtin type when appropriate
There are a few spots that check whether a type is objfile-owned, and
then choose either the objfile- or arch-specific builtin type.  I
don't think there is a need to do this any more (if there ever was),
because it is ok for an objfile-allocated type to refer to an
arch-allocated type.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:38 -06:00
Tom Tromey
526648585c Use type allocator for set types
This changes the set type creation function to accept a type
allocator, and updates all the callers.  Note that symbol readers
should generally allocate on the relevant objfile, regardless of the
underlying type of the set, which is what this patch implements.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:38 -06:00
Tom Tromey
9e76b17aa5 Use type allocator for array types
This changes the array type creation functions to accept a type
allocator, and updates all the callers.  Note that symbol readers
should generally allocate on the relevant objfile, regardless of the
placement of the index type of the array, which is what this patch
implements.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:38 -06:00
Tom Tromey
e727c536c6 Use type allocator for range types
This changes the range type creation functions to accept a type
allocator, and updates all the callers.  Note that symbol readers
should generally allocate on the relevant objfile, regardless of the
underlying type of the range, which is what this patch implements.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:38 -06:00
Tom Tromey
9c794d2d46 Unify arch_pointer_type and init_pointer_type
This unifies arch_pointer_type and init_pointer_type by using a type
allocator.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:38 -06:00
Tom Tromey
0776344a33 Unify arch_decfloat_type and init_decfloat_type
This unifies arch_decfloat_type and init_decfloat_type by using a type
allocator.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:38 -06:00
Tom Tromey
77c5f49648 Unify arch_float_type and init_float_type
This unifies arch_float_type and init_float_type by using a type
allocator.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:38 -06:00
Tom Tromey
46c04ea32f Unify arch_boolean_type and init_boolean_type
This unifies arch_boolean_type and init_boolean_type by using a type
allocator.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:38 -06:00
Tom Tromey
f50b437c3d Unify arch_character_type and init_character_type
This unifies arch_character_type and init_character_type by using a
type allocator.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:37 -06:00
Tom Tromey
2d39ccd3d1 Unify arch_integer_type and init_integer_type
This unifies arch_integer_type and init_integer_type by using a type
allocator.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:37 -06:00
Tom Tromey
333859402c Remove init_type
This removes init_type, replacing all uses with the new type
allocator.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:37 -06:00
Tom Tromey
cc495054ad Remove arch_type
This removes arch_type, replacing all uses with the new type
allocator.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:37 -06:00
Tom Tromey
95751990e4 Reuse existing builtin types
This changes a few spots to reuse the existing builting "void" type,
rather than construct a new one.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:37 -06:00
Tom Tromey
8a17bdd9cc Remove alloc_type
This removes alloc_type, replacing all uses with the new type
allocator.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:37 -06:00
Tom Tromey
9fa83a7ade Remove alloc_type_copy
This removes alloc_type_copy, replacing all uses with the new type
allocator.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:37 -06:00
Tom Tromey
c9eb9f1854 Remove alloc_type_arch
This removes alloc_type_arch, replacing all uses with the new type
allocator.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:37 -06:00
Tom Tromey
6a4d297c62 Introduce type_allocator
This introduces a new type_allocator class.  This class will be used
to abstract out the placement of new types, so that type-creation code
can be simplified and shared.

Reviewed-By: Simon Marchi <simon.marchi@efficios.com>
2023-03-18 11:12:37 -06:00
Tom de Vries
d1de9f5c6c [gdb/testsuite] Handle unbuffer_output.c for remote host
Handle $srcdir/lib/unbuffer_output.c using lappend_include_file.

Tested on x86_64-linux.
2023-03-18 17:50:56 +01:00
Tom de Vries
424500e9a2 [gdb/testsuite] Handle my-syscalls.h for remote host
Handle $srcdir/lib/my-syscalls.h using lappend_include_dir.

Tested on x86_64-linux.
2023-03-18 10:30:16 +01:00
Tom de Vries
f2259ae756 [gdb/testsuite] Handle attributes.h for remote host
Handle $srcdir/lib/attributes.h using lappend_include_dir.

Tested on x86_64-linux.
2023-03-18 10:16:30 +01:00
GDB Administrator
9e4b2a6697 Automatic date update in version.in 2023-03-18 00:00:41 +00:00
Tom Tromey
48e0f38c30 Fix line table regression
Simon pointed out a line table regression, and after a couple of false
starts, I was able to reproduce it by hand using his instructions.

The bug is that most of the code in do_mixed_source_and_assembly uses
unrelocated addresses, but one spot does:

  pc = low;

... after the text offset has been removed.

This patch fixes the problem by introducing a new type to represent
unrelocated addresses in the line table.  This prevents this sort of
bug to some degree (it's still possible to manipulate a CORE_ADDR in a
bad way, this is unavoidable).

However, this did let the compiler flag a few spots in that function,
and now it's not possible to compare an unrelocated address from a
line table with an ordinary CORE_ADDR.

Regression tested on x86-64 Fedora 36, though note this setup never
reproduced the bug in the first place.  I also tested it by hand on
the disasm-optim test program.
2023-03-17 16:17:43 -06:00
Frederic Cambus
152d9c48a2 Update the NetBSD system call table to add eventfd(2) and timerfd(2).
Generated from sys/sys/syscall.h revision 1.321.
2023-03-17 13:53:33 -07:00
Simon Marchi
0b63c811ef gdb: introduce bp_loc_tracepoint
Since commit cb1e4e32c2 ("catch catch/throw/rethrow", breakpoint ->
catchpoint), this simple tracing scenario does not work:

    $ gdb/gdb -nx -q --data-directory=gdb/data-directory ./test
    Reading symbols from ./test...
    (gdb) tar rem :1234
    Remote debugging using :1234
    Reading symbols from /lib64/ld-linux-x86-64.so.2...
    (No debugging symbols found in /lib64/ld-linux-x86-64.so.2)
    0x00007ffff7fe5730 in ?? () from /lib64/ld-linux-x86-64.so.2
    (gdb) trace do_something
    Tracepoint 1 at 0x555555555144: file test.c, line 5.
    (gdb) tstart
    (gdb) continue
    Continuing.
    Target returns error code '01'.

The root cause is that the bp_location::nserted flag does not transfer
anymore from an old bp_location to the new matching one.  When a shared
library gets loaded, GDB computes new breakpoint locations for each
breakpoint in update_breakpoint_locations.  The new locations are in the
breakpoint::loc chain, while the old locations are still in the
bp_locations global vector.  Later, update_global_location_list is
called.  It tries to map old locations to new locations, and if
necessary transfer some properties, like the inserted flag.

Since commit cb1e4e32c2, the inserted flag isn't transferred for
locations of tracepoints.  This is because bl_address_is_meaningful used
to be implemented like this:

    static int
    breakpoint_address_is_meaningful (struct breakpoint *bpt)
    {
      enum bptype type = bpt->type;

      return (type != bp_watchpoint && type != bp_catchpoint);
    }

and was changed to this:

    static bool
    bl_address_is_meaningful (bp_location *loc)
    {
      return loc->loc_type != bp_loc_other;
    }

Because locations for tracepoints have the bp_loc_other type,
bl_address_is_meaningful started to return false for them, where it
returned true before.  This made update_global_location_list skip the
part where it calls swap_insertion.

I think this can be solved by introduced a new bp_loc_tracepoint
bp_loc_type.

I don't know if it's accurate, but my understanding is that bp_loc_type
describes roughly "how do we ask the target to insert that location".
bp_loc_software_breakpoint are inserted using
target_ops::insert_breakpoint_location.  bp_loc_hardware_breakpoint are
inserted using target_ops::insert_hw_breakpoint.
bp_loc_software_watchpoint and bp_loc_hardware_watchpoint are inserted
using target_ops::insert_watchpoint.  For all these, the address is
meaningful, as we ask the target to insert the point at a specific
address.  bp_loc_other is a catch-all for "the rest", in practice for
catchpoints that don't have a specific address (hence why
bl_address_is_meaningful returns false for them).  For instance,
inserting a signal catchpoint is done by asking the target to report
that specific signal.  GDB doesn't associate an address to that.

But tracepoints do have a meaningful address to thems, so they can't be
bp_loc_other, with that logic.  They also can't be
bp_loc_software_breakpoint, because we don't want GDB to insert
breakpoints for them (even though they might be implemented using
software breakpoints by the remote side).  So, the new bp_loc_tracepoint
type describes that the way to insert these locations is with
target_ops::download_tracepoint.  It makes bl_address_is_meaningful
return true for them.  And they'll be ignored by insert_bp_location and
GDB won't try to insert a memory breakpoint for them.

With this, I see a few instances of 'Target returns error code: 01'
disappearing from gdb.log, and the results of gdb.trace/*.exp improve a
little bit:

    -# of expected passes       3765
    +# of expected passes       3781
    -# of unexpected failures   518
    +# of unexpected failures   498

Things remain quite broken in that area though.

Change-Id: Ic40935c450410f4bfaba397c9ebc7faf97320dd3
2023-03-17 16:34:25 -04:00
Carl Love
2a8339b71f PowerPC: fix for gdb.reverse/finish-precsave.exp and gdb.reverse/finish-reverse.exp
PPC64 multiple entry points, a normal entry point and an alternate entry
point.  The alternate entry point is to setup the Table of Contents (TOC)
register before continuing at the normal entry point.  When the TOC is
already valid, the normal entry point is used, this is typically the case.
The alternate entry point is typically referred to as the global entry
point (GEP) in IBM.  The normal entry point is typically referred to as
the local entry point (LEP).

When GDB is executing the finish command in reverse, the function
finish_backward currently sets the break point at the alternate entry point.
This issue is if the function, when executing in the forward direction,
entered the function via the normal entry point, execution in the reverse
direction will never sees the break point at the alternate entry point.  In
this case, the reverse execution continues until the next break point is
encountered thus stopping at the wrong place.

This patch adds a new address to struct execution_control_state to hold the
address of the alternate entry point (GEP).  The finish_backwards function
is updated, if the stopping point is between the normal entry point (LEP)
and the end of the function, a breakpoint is set at the normal entry point.
If the stopping point is between the entry points, a breakpoint is set at
the alternate entry point.  This ensures that GDB will always stop at the
normal entry point.  If the function did enter via the alternate entry
point, GDB will detect that and continue to execute backwards in the
function until the alternate entry point is reached.

The patch fixes the behavior of the reverse-finish command on PowerPC to
match the behavior of the command on other platforms, specifically X86.
The patch does not change the behavior of the command on X86.

A new test is added to verify the reverse-finish command on PowerPC
correctly stops at the instruction where the function call is made.

The patch fixes 11 regression errors in test gdb.reverse/finish-precsave.exp
and 11 regression errors in test gdb.reverse/finish-reverse.exp.

The patch has been tested on Power 10 and X86 processor with no new
regression failures.
2023-03-17 16:02:57 -04:00
Carl Love
334d405c2a Move step_until procedure
Procedure step_until from test gdb.reverse/step-indirect-call-thunk.exp
is moved to lib/gdb.exp and renamed repeat_cmd_until.  The existing procedure
gdb_step_until in lib/gdb.exp is simpler variant of the new repeat_cmd_until
procedure.  The existing procedure gdb_step_until is changed to just call
the new repeat_cmd_until procedure with the command set to "step" and an
optional CURRENT string.  The default CURRENT string is set to "\}" to work
with the existing uses of procedure gdb_step_until.
2023-03-17 16:02:48 -04:00
Tom de Vries
1b046c8eb9 [gdb/testsuite] Fix regexp in gdb.arch/ftrace-insn-reloc.exp
With test-case gdb.arch/ftrace-insn-reloc.exp and host board
local-remote-host-notty and target board native-gdbserver I run into:
...
(gdb) info sharedlibrary^M
From To    Syms Read   Shared Object Library^M
$hex $hex  Yes         /lib64/ld-linux-x86-64.so.2^M
$hex $hex  Yes         /home/remote-host/libinproctrace.so^M
$hex $hex  Yes         /lib64/libm.so.6^M
$hex $hex  Yes         /lib64/libc.so.6^M
$hex $hex  Yes         /lib64/libdl.so.2^M
$hex $hex  Yes (*)     /usr/lib64/libstdc++.so.6^M
$hex $hex  Yes (*)     /lib64/libgcc_s.so.1^M
$hex $hex  Yes         /lib64/libpthread.so.0^M
(*): Shared library is missing debugging information.^M
(gdb) FAIL: gdb.arch/ftrace-insn-reloc.exp: IPA loaded
...
due to trying to match libinproctrace.so using the target path, while the
command lists it using the host path.

Fix this by making the regexp less strict.

Tested on x86_64-linux.
2023-03-17 19:25:18 +01:00
Tom de Vries
1850ef87c6 [gdb/testsuite] Handle remote host in gdb_load_shlib
With test-case gdb.arch/ftrace-insn-reloc.exp and host board
local-remote-host-notty and target board native-gdbserver I run into:
...
(gdb) tstart^M
Target returns error code '.In-process agent library not loaded in process.  \
  Fast and static trace points unavailable.'.^M
(gdb) FAIL: gdb.arch/ftrace-insn-reloc.exp: start trace experiment
...

Fix this by:
- handling remote host in gdb_load_shlib, and
- moving the gdb_load_shlib to after the clean_restart, such that the
  set solib-search-path can take effect.

Tested on x86_64-linux.
2023-03-17 19:25:18 +01:00
Tom de Vries
68f2478faa [gdb/testsuite] Fix gdb.arch/i386-biarch-core.exp for remote host
Fix test-case gdb.arch/i386-biarch-core.exp using gdb_download_remote host.

Tested on x86_64-linux.
2023-03-17 19:25:18 +01:00
Tom de Vries
2a7d1e5ebb [gdb/testsuite] Handle REMOTE_HOST_USERNAME in local-remote-host
Handle REMOTE_HOST_USERNAME in local-remote-host, similar to how that's done for
REMOTE_TARGET_USERNAME in remote-gdbserver-on-localhost.

This helps to keep the home dir clean.

Since the setup makes $build/gdb/testsuite on build unreadable for the remote
host, we run into permission problems for GDB and the data-directory, so fix
this (as was done for gdbserver in gdbserver-base.exp) using file normalize.

Tested on x86_64-linux.
2023-03-17 19:25:18 +01:00
Tom de Vries
3741934fdb [gdb/testsuite] Set remotedir by default in some boards
When doing a gdb_simple_compile, and downloading the resulting exec $obj
to target the result $target_obj may be a relative file path, which may give
problems when trying to do:
...
remote_exec target $target_obj
...

Fix/workaround this on some target boards by setting remotedir by default, and
add a corresponding test in gdb.testsuite/board-sanity.exp.

This doesn't work for host/target board local-remote-host-native, so xfail this.

Tested on x86_64-linux.
2023-03-17 16:06:39 +01:00
Tom de Vries
0eb0e08287 [gdb/testsuite] Fix have_avx for remote target
In proc have_avx we compile some source into an exec, resulting in a file $obj
on build, and then attempt to execute it on target:
...
    set result [remote_exec target $obj]
...

Fix this by using gdb_remote_download target.

Likewise in a few other procs that use "remote_exec target".

Tested on x86_64-linux.
2023-03-17 16:06:39 +01:00
Tom de Vries
4581f89b8d [gdb/testsuite] Handle precise-aligned-alloc.c for remote host
With test-case gdb.arch/i386-sse.exp (and likewise gdb.arch/i386-avx.exp) and
host board local-remote-host-notty and target board native-gdbserver I run
into:
...
gdb compile failed, i386-sse.c:68:10: fatal error: \
  ../lib/precise-aligned-alloc.c: No such file or directory
 #include "../lib/precise-aligned-alloc.c"
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...

Fix this using '#include "precise-aligned-alloc.c"' and making that work with
non-remote and remote host.

Tested on x86_64-linux.
2023-03-17 16:06:39 +01:00
Tom de Vries
a14e3d11b2 [gdb/testsuite] Handle remote host in escape_for_host
With test-case gdb.arch/ftrace-insn-reloc.exp and host board
local-remote-host-notty and target board native-gdbserver, I run into:
...
FAIL: gdb.arch/ftrace-insn-reloc.exp: IPA loaded
...
due to having:
...
$ readelf -d ftrace-insn-reloc | grep RUNPATH
 0x000000000000001d (RUNPATH)            Library runpath: []
...
instead of:
...
$ readelf -d ftrace-insn-reloc | grep RUNPATH
 0x000000000000001d (RUNPATH)            Library runpath: [$ORIGIN]
...

Handle this in escape_for_host.

Tested on x86_64-linux.
2023-03-17 13:29:13 +01:00
Tom de Vries
ff000c4dbb [gdb/testsuite] Add escape_for_host
In gdb_compile we have:
...
           lappend new_options "ldflags=-Wl,-rpath,\\\$ORIGIN"
...
and we could improve readability by using {} rather than "":
...
           lappend new_options {ldflags=-Wl,-rpath,\$ORIGIN}
...

But rather than manually adding escapes in a string, add a new proc
escape_for_host that care of this for us, allowing us to write:
...
           lappend new_options [escape_for_host {ldflags=-Wl,-rpath,$ORIGIN}]
...

Tested on x86_64-linux.
2023-03-17 13:29:13 +01:00