Commit Graph

117444 Commits

Author SHA1 Message Date
Indu Bhagat
2cea9515b5 gas: dw2gencfi: expose dot_cfi_sections for scfidw2gen
scfidw2gen will use this for processing the .cfi_sections directive.

gas/
        * dw2gencfi.c (dot_cfi_sections): Not static anymore.
        * dw2gencfi.h (dot_cfi_sections): Mark as extern.
2024-01-15 03:31:35 -08:00
Indu Bhagat
4c5e0261cf gas: dw2gencfi: move some tc_* defines to the header file
Move the following three defines to the header file, so the SCFI
machinery can use them:
 - tc_cfi_frame_initial_instructions
 - tc_cfi_startproc
 - tc_cfi_endproc

gas/
        * dw2gencfi.c: Move from ...
	* dw2gencfi.h: ... to here.
2024-01-15 03:31:35 -08:00
Indu Bhagat
040622a729 gas: dw2gencfi: expose a new cfi_set_last_fde API
gas/
	* dw2gencfi.c (cfi_set_last_fde): New definition.
	(dot_cfi_endproc): Use it.
	(dot_cfi_fde_data): Likewise.
	(dot_cfi_inline_lsda): Likewise.
	* dw2gencfi.h (struct fde_entry): New declaration.
	(cfi_set_last_fde): Likewise.
2024-01-15 03:31:35 -08:00
Indu Bhagat
71a17ca2f0 gas: dw2gencfi: use all_cfi_sections instead of cfi_sections
The code in dw2gencfi.c was checking variable cfi_sections and
all_cfi_sections seemingly randomly.  Accessing all_cfi_sections seems
to the correct variable to access.

The data in cfi_sections has already been propagated to all_cfi_sections
once cfi_dot_startproc () has been called.

gas/
        * dw2gencfi.c (dot_cfi_startproc): Use all_cfi_sections
	instead.
        (dot_cfi_endproc): Likewise.
        (dot_cfi_fde_data): Likewise.
2024-01-15 03:31:35 -08:00
Indu Bhagat
b0cd3f29e8 gas: dw2gencfi: minor rejig for cfi_sections_set and all_cfi_sections
cfi_sections_set is best set to true in cfi_dot_startproc ().  Setting
it to true again in other APIs (dot_cfi_endproc, dot_cfi_fde_data, and
cfi_finish) is unnecessary.  Also, move setting the global var
all_cfi_sections into cfi_set_sections ().

gas/
        * dw2gencfi.c (cfi_set_sections): Set cfi_sections_set and
	cfi_sections here.
        (dot_cfi_startproc): Remove unnecessarily setting
	cfi_set_sections to true.
        (dot_cfi_endproc): Likewise.
        (dot_cfi_fde_data): Likewise.
        (cfi_finish): Likewise.
2024-01-15 03:31:35 -08:00
GDB Administrator
b750cfb78e Automatic date update in version.in 2024-01-15 00:00:09 +00:00
Tom de Vries
c171609cc6 [gdb/testsuite] Fix gdb.mi/mi-dprintf.exp with read1
When running test-case gdb.mi/mi-dprintf.exp with check-read1, I run into:
...
(gdb) ^M
PASS: gdb.mi/mi-dprintf.exp: gdb: mi 2nd dprintf stop
-data-evaluate-expression stderr^M
^done,value="0x7ffff7e4a420 <_IO_2_1_stderr_>"^M
(gdb) FAIL: gdb.mi/mi-dprintf.exp: stderr symbol check
...

The problem is in proc mi_gdb_is_stderr_available:
...
proc mi_gdb_is_stderr_available {} {
    set has_stderr_symbol false
    gdb_test_multiple "-data-evaluate-expression stderr" "stderr symbol check" {
	-re "\\^error,msg=\"'stderr' has unknown type; cast it to its declared type\"\r\n$::mi_gdb_prompt$" {
	}
	-re "$::mi_gdb_prompt$" {
	    set has_stderr_symbol true
	}
     }
...
which uses a gdb_test_multiple that is supposed to use the mi prompt, but
doesn't use -prompt to indicate this.  Consequently, the default patterns use
the regular gdb prompt, which trigger earlier than the two custom patterns
which use "$::mi_gdb_prompt$".

Fix this by adding the missing -prompt "$::mi_gdb_prompt$" arguments.

While we're at it, make the gdb_test_multiple call a bit more readable by
using variables, and by using -wrap.

Tested on x86_64-linux, with:
- gcc and clang (to trigger both the has_stderr_symbol true and false cases)
- make check and make check-read1.
2024-01-14 10:21:46 +01:00
Tom de Vries
ef3a9d685e [gdb/testsuite] Fix gdb.cp/namespace.exp with read1
With check-read1 we run into:
...
(gdb) break DNE>::DNE^M
Function "DNE>::DNE" not defined.^M
Make breakpoint pending on future shared library load? (y or [n]) y^M
Breakpoint 9 (DNE>::DNE) pending.^M
n^M
(gdb) FAIL: gdb.cp/namespace.exp: br malformed '>' (got interactive prompt)
n^M
...

The question is supposed to be handled by the question and response arguments
to this gdb_test call:
...
gdb_test "break DNE>::DNE" "" "br malformed \'>\'" \
    "Make breakpoint pending on future shared library load?.*" "y"
...
but both this and the builtin handling in gdb_test_multiple triggers.

The cause of this is that the question argument regexp is incomplete.

Fix this by making sure that the entire question is matched in the regexp:
...
set yn_re [string_to_regexp {(y or [n])}]
  ...
    "Make breakpoint pending on future shared library load\\? $yn_re " "Y"
...

Tested on x86_64-linux.
2024-01-14 09:36:12 +01:00
GDB Administrator
f4be209229 Automatic date update in version.in 2024-01-14 00:00:15 +00:00
Yang Liu
b273287f4e gdb: RISC-V: Refine lr/sc sequence support
Per RISC-V spec, the lr/sc sequence can consist of up to 16 instructions, and we
cannot insert breakpoints in the middle of this sequence. Before this, we only
detected a specific pattern (the most common one). This patch improves this part
and now supports more complex pattern detection.

Signed-off-by: Yang Liu <liuyang22@iscas.ac.cn>
Approved-By: Andrew Burgess <aburgess@redhat.com>
Reviewed-by: Palmer Dabbelt <palmer@rivosinc.com>
2024-01-14 01:20:59 +08:00
Yang Liu
7de143103d Add myself to gdb/MAINTAINERS 2024-01-14 00:56:37 +08:00
Vladimir Mezentsev
1b346e5048 gprofng: 30889 can't compile without large file support
gprofng/ChangeLog
2024-01-12  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>

	PR 30889
	* src/util.h (O_LARGEFILE): Define to 0, if not defined.
2024-01-12 20:52:14 -08:00
GDB Administrator
52c9ea7a83 Automatic date update in version.in 2024-01-13 00:00:15 +00:00
Vladimir Mezentsev
cc76856b8f gprofng: fix 3 bugzillas against gp-display-html
Fix two cases where gp-display-html terminates prematurely because the
input format is not recognized.  This problem occurs in the function
overview and caller-callee parts of the code.
The fix consists of new regular expressions and a different approach
in handling the input from gp-display-text.
Also fix a performance problem in the caller-callee part that has a
noticeable impact on the performance for large applications.

gprofng/ChangeLog
2024-01-10  Ruud van der Pas  <ruud.vanderpas@oracle.com>

	PR gprofng/30438
	PR gprofng/30439
	PR gprofng/30942
	* gp-display-html/gp-display-html.in: fixes the issues.
2024-01-12 12:23:20 -08:00
Dimitar Dimitrov
b83808a8a2 sim: Fix compile errors
The following change broke simulator testsuite with host GCC 13:
  commit 435ad222b3
  sim: warnings: compile build tools with -Werror too

Host GCC13 complains about missing function prototypes:

binutils/sim/testsuite/common/bits-gen.c:26:1: error: no previous prototype for ‘gen_struct’ [-Werror=missing-prototypes]
   26 | gen_struct (void)
      | ^~~~~~~~~~

Fix by making the functions static, which instructs the compiler that
there is no need for a prototype.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2024-01-12 21:48:25 +02:00
David Faust
ba7c1e37cf bpf: fix relocation addend incorrect symbol value
Relocations installed by the BPF ELF backend were sometimes incorrectly
adding the symbol value to the relocation entry addend, when the correct
relocation value was already stored in the addend. This could lead to a
relocation effectively adding the symbol value twice.

Fix that by making bpf_elf_generic_reloc () more similar to the flow of
bfd_install_relocation in the case where howto->install_addend is set,
which is how it ought to behave.

bfd/
	* bpf-reloc.def (R_BPF_64_ABS32, R_BPF_64_ABS64)
	(R_BPF_64_NODYLD32): Set partial_inplace to true.
	* elf64-bpf.c (bpf_elf_generic_reloc): Do not include the value
	of the symbol when installing relocation. Copy some additional
	logic from bfd_elf_generic_reloc.

gas/
	* testsuite/gas/bpf/bpf.exp: Run new test.
	* testsuite/gas/bpf/elf-relo-1.d: New.
	* testsuite/gas/bpf/elf-relo-1.s: New.
2024-01-12 08:22:23 -08:00
Andrew Burgess
98138c62cd gdb/testsuite: fix failure in gdb.python/py-inferior.exp
After this commit:

  commit 1925bba80e
  Date:   Thu Jan 4 10:01:24 2024 +0000

      gdb/python: add gdb.InferiorThread.__repr__() method

failures were reported for gdb.python/py-inferior.exp.

The test grabs a gdb.InferiorThread object representing an inferior
thread, and then, later in the test, expects this Python object to
become invalid when the inferior thread has exited.

The gdb.InferiorThread object was obtained from the list returned by
calling gdb.Inferior.threads().

The mistake I made in the original commit was to assume that the order
of the threads returned from gdb.Inferior.threads() somehow reflected
the thread creation order.  Specifically, I was expecting the main
thread to be first in the list, and "other" threads to appear ... not
first.

However, the gdb.Inferior.threads() function creates a list and
populates it from a map.  The order of the threads in the returned
list has no obvious relationship to the thread creation order, and can
vary from host to host.

On my machine the ordering was as I expected, so the test passed for
me.  For others the ordering was not as expected, and it just happened
that we ended up recording the gdb.InferiorThread for the main thread.

As the main thread doesn't exit (until the test is over), the
gdb.InferiorThread object never became invalid, and the test failed.

Fixed in this commit by taking more care to correctly find a non-main
thread.  I do this by recording the main thread early on (when there
is only one inferior thread), and then finding any thread that is not
this main thread.

Then, once all of the secondary threads have exited, I know that the
second InferiorThread object I found should now be invalid.

The test still passes for me, and I believe this should fix the issue
for everyone else too.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31238
2024-01-12 16:08:14 +00:00
Andrew Burgess
1d506c26d9 Update copyright year range in header of all files managed by GDB
This commit is the result of the following actions:

  - Running gdb/copyright.py to update all of the copyright headers to
    include 2024,

  - Manually updating a few files the copyright.py script told me to
    update, these files had copyright headers embedded within the
    file,

  - Regenerating gdbsupport/Makefile.in to refresh it's copyright
    date,

  - Using grep to find other files that still mentioned 2023.  If
    these files were updated last year from 2022 to 2023 then I've
    updated them this year to 2024.

I'm sure I've probably missed some dates.  Feel free to fix them up as
you spot them.
2024-01-12 15:49:57 +00:00
Andrew Carlotti
c3a1c2763d aarch64: Remove unused code
Most of this code became redundant in my previous commits, but ARMV8_6A_SVE was
already dead when it was first added.
2024-01-12 13:46:35 +00:00
Andrew Carlotti
f6cfacfed1 aarch64: Make FEAT_ASMv8p2 instruction aliases always available
There's no reason to disallow the aliases when the aliased instructions are
always available.  The new behaviour matches existing LLVM behaviour.
2024-01-12 13:46:35 +00:00
Andrew Carlotti
43291582c0 aarch64: Add +xs flag for existing instructions
Additionally, change FEAT_XS tlbi variants to be gated on "+xs" instead of
"+d128".  This is an incremental improvement; there are still some FEAT_XS tlbi
variants that are gated incorrectly or missing entirely.
2024-01-12 13:46:35 +00:00
Andrew Carlotti
59255bf7d2 aarch64: Add +wfxt flag for existing instructions 2024-01-12 13:46:35 +00:00
Andrew Carlotti
368910707c aarch64: Add +rcpc2 flag for existing instructions 2024-01-12 13:46:35 +00:00
Andrew Carlotti
5329ef9b8e aarch64: Add +flagm2 flag for existing instructions 2024-01-12 13:46:35 +00:00
Andrew Carlotti
ce9fad9878 aarch64: Add +frintts flag for existing instructions 2024-01-12 13:46:35 +00:00
Andrew Carlotti
227af30e49 aarch64: Add +jscvt flag for existing fjcvtzs instruction 2024-01-12 13:46:35 +00:00
Andrew Carlotti
c17c7aaf40 aarch64: Fix option parsing to disallow prefixes of valid options
Add "+rdm" as an explicit alias for "+rdma", to maintain existing compatibility
with Clang.
2024-01-12 13:46:35 +00:00
Andrew Carlotti
c7c16ea5ae aarch64: Add +fcma alias for +compnum 2024-01-12 13:46:35 +00:00
Andrew Carlotti
79f1989e98 aarch64: Fix +lse feature flag dependency 2024-01-12 13:46:35 +00:00
Andrew Burgess
7ccdf9c0fb gdb/doc: update examples in gdb.Progspace and gdb.Objfile docs
This commit updates the Python example code in the gdb.Progspace and
gdb.Objfile sections of the docs.  Changes made:

  1. Use @value{GDBP} for the GDB prompt rather than
  hard-coding (gdB),

  2. Use @group...@end group to split the example code into
  unbreakable chunks, and

  3. Add parenthesis to the Python print() calls in the examples.  In
  Python 2 it was OK to drop the parenthesis, but now GDB is Python 3
  only, example code should include the parenthesis.

Approved-By: Eli Zaretskii <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
2024-01-12 11:21:34 +00:00
Andrew Burgess
53d0889088 gdb/doc: add some notes on selecting suitable attribute names
In previous commits I've added Object.__dict__ support to gdb.Inferior
and gdb.InferiorThread, this is similar to the existing support for
gdb.Objfile and gdb.Progspace.

This commit extends the documentation to offer the user some guidance
on selecting good names for their custom attributes so they
can (hopefully) avoid conflicting with any future attributes that GDB
might add.

The rules I've proposed are:

  1. Don't start user attributes with a lower case letter, all the
  current GDB attributes start with a lower case letter, and I suspect
  all future attributes would also start with a lower case letter, and

  2. Don't start user attributes with a double underscore, this risks
  conflicting with Python built in attributes (e.g. __dict__) - though
  clearly the user would need to start and end with a double
  underscore, but it seemed easier just to say no double underscores.

I'm doing this as a separate commit as I've updated the docs for the
existing gdb.Objfile and gdb.Progspace so they all reference a single
paragraph on selecting attribute names.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
2024-01-12 11:21:32 +00:00
Andrew Burgess
1d586eda5c gdb/python: Add gdb.InferiorThread.__dict__ attribute
The gdb.Objfile, gdb.Progspace, gdb.Type, and gdb.Inferior Python
types already have a __dict__ attribute, which allows users to create
user defined attributes within the objects.  This is useful if the
user wants to cache information within an object.

This commit adds the same functionality to the gdb.InferiorThread
type.

After this commit there is a new gdb.InferiorThread.__dict__
attribute, which is a dictionary.  A user can, for example, do this:

  (gdb) pi
  >>> t = gdb.selected_thread()
  >>> t._user_attribute = 123
  >>> t._user_attribute
  123
  >>>

There's a new test included.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
2024-01-12 11:21:31 +00:00
Andrew Burgess
13cd9bceea gdb/python: Add gdb.Inferior.__dict__ attribute
The gdb.Objfile, gdb.Progspace, and gdb.Type Python types already have
a __dict__ attribute, which allows users to create user defined
attributes within the objects.  This is useful if the user wants to
cache information within an object.

This commit adds the same functionality to the gdb.Inferior type.

After this commit there is a new gdb.Inferior.__dict__ attribute,
which is a dictionary.  A user can, for example, do this:

  (gdb) pi
  >>> i = gdb.selected_inferior()
  >>> i._user_attribute = 123
  >>> i._user_attribute
  123
  >>>

There's a new test included.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
2024-01-12 11:21:30 +00:00
Andrew Burgess
2f47f48fe5 gdb/python: remove users ability to create gdb.Progspace objects
I noticed that it is possible for the user to create a new
gdb.Progspace object, like this:

  (gdb) pi
  >>> p = gdb.Progspace()
  >>> p
  <gdb.Progspace object at 0x7ffad4219c10>
  >>> p.is_valid()
  False

As the new gdb.Progspace object is not associated with an actual C++
program_space object within GDB core, then the new gdb.Progspace is
created invalid, and there is no way in which the new object can ever
become valid.

Nor do I believe there's anywhere in the Python API where it makes
sense to consume an invalid gdb.Progspace created in this way, for
example, the gdb.Progspace could be passed as the locus to
register_type_printer, but all that would happen is that the
registered printer would never be used.

In this commit I propose to remove the ability to create new
gdb.Progspace objects.  Attempting to do so now gives an error, like
this:

  (gdb) pi
  >>> gdb.Progspace()
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
  TypeError: cannot create 'gdb.Progspace' instances

Of course, there is a small risk here that some existing user code
might break ... but if that happens I don't believe the user code can
have been doing anything useful, so I see this as a small risk.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
2024-01-12 11:21:28 +00:00
Andrew Burgess
d6defe8761 gdb/python: add gdb.Frame.__repr__() method
Add a gdb.Frame.__repr__() method.  Before this patch we would see
output like this:

  (gdb) pi
  >>> gdb.selected_frame()
  <gdb.Frame object at 0x7fa8cc2df270>

After this patch, we now see:

  (gdb) pi
  >>> gdb.selected_frame()
  <gdb.Frame level=0 frame-id={stack=0x7ffff7da0ed0,code=0x000000000040115d,!special}>

More verbose, but, I hope, more useful.

If the gdb.Frame becomes invalid, then we will see:

  (gdb) pi
  >>> invalid_frame_variable
  <gdb.Frame (invalid)>

which is inline with how other invalid objects are displayed.

Approved-By: Tom Tromey <tom@tromey.com>
2024-01-12 11:21:27 +00:00
Andrew Burgess
1925bba80e gdb/python: add gdb.InferiorThread.__repr__() method
Add a gdb.InferiorThread.__repr__() method.  Before this patch we
would see output like this:

  (gdb) pi
  >>> gdb.selected_thread()
  <gdb.InferiorThread object at 0x7f4dcc49b970>

After this patch, we now see:

  (gdb) pi
  >>> gdb.selected_thread()
  <gdb.InferiorThread id=1.2 target-id="Thread 0x7ffff7da1700 (LWP 458134)">

More verbose, but, I hope, more useful.

If the gdb.InferiorThread becomes invalid, then we will see:

  (gdb) pi
  >>> invalid_thread_variable
  <gdb.InferiorThread (invalid)>

Which is inline with how other invalid objects are displayed.

Approved-By: Tom Tromey <tom@tromey.com>
2024-01-12 11:21:26 +00:00
Andrew Burgess
aef117b737 gdb/python: hoist common invalid object repr code into py-utils.c
Many object types now have a __repr__() function implementation.  A
common pattern is that, if an object is invalid, we print its
representation as: <TYPENAME (invalid)>.

I thought it might be a good idea to move the formatting of this
specific representation into a utility function, and then update all
of our existing code to call the new function.

The only place where I haven't made use of the new function is in
unwind_infopy_repr, where we currently return a different string.
This case is a little different as the UnwindInfo is invalid because
it references a frame, and it is the frame itself which is invalid.
That said, I think it would be fine to switch to using the standard
format; if the UnwindInfo references an invalid frame, then the
UnwindInfo is itself invalid.  But changing this would be an actual
change in behaviour, while all the other changes in this commit are
just refactoring.

Approved-By: Tom Tromey <tom@tromey.com>
2024-01-12 11:21:25 +00:00
Andrew Burgess
3b9ff5d900 gdb: add trailing '/' when using 'complete' with directory names
This patch contains work pulled from this previously proposed patch:

  https://inbox.sourceware.org/gdb-patches/20210213220752.32581-2-lsix@lancelotsix.com/

But has been modified by me.  Credit for the original idea and
implementation goes to Lancelot, any bugs in this new iteration belong
to me.

Consider the executable `/tmp/foo/my_exec', and if we assume `/tmp' is
empty other than the `foo' sub-directory, then currently within GDB,
if I type:

  (gdb) file /tmp/f

and then hit TAB, GDB completes this to:

  (gdb) file /tmp/foo/

notice that not only did GDB fill in the whole of `foo', but GDB also
added a trailing '/' character.  This is done within readline when the
path that was just completed is a directory.  However, if I instead
do:

  (gdb) complete file /tmp/f
  file /tmp/foo

I now see the completed directory name, but the trailing '/' is
missing.  The reason is that, in this case, the completions are not
offered via readline, but are handled entirely within GDB, and so
readline never gets the chance to add the trailing '/' character.

The above patch added filename option support to GDB, which included
completion of the filename options.  This initially suffered from the
same problem that I've outlined above, but the above patch proposed a
solution to this problem, but this solution only applied to filename
options (which have still not been added to GDB), and was mixed in
with the complete filename options support.

This patch pulls out just the fix for the trailing "/" problem, and
applies it to GDB's general filename completion.  This patch does not
add filename options to GDB, that can always be done later, but I
think this small part is itself a useful fix.

One of the biggest changes I made in this version is that I got rid of
the set_from_readline member function, instead, I now pass the value
of m_from_readline into the completion_tracker constructor.

I then moved the addition of the trailing '/' into filename_completer
so that it is applied in the general filename completion case.  I also
added a call to gdb_tilde_expand which was missing from the original
patch, I haven't tested, but I suspect that this meant that the
original patch would not add the trailing '/' if the user entered a
path starting with a tilde character.

When writing the test for this patch I ran into two problems.

The first was that the procedures in lib/completion-support.exp relied
on the command being completed for the test name.  This is fine for
many commands, but not when completing a filename, if we use the
command in this case the test name will (potentially) include the name
of the directory in which the test is being run, which means we can't
compare results between two runs of GDB from different directories.

So in this commit I've gone through completion-support.exp and added a
new (optional) testname argument to many of the procedures, this
allows me to give a unique test name, that doesn't include the path
for my new tests.

The second issue was in the procedure make_tab_completion_list_re,
this builds the completion list which is displayed after a double tab
when there are multiple possible completions.

The procedure added the regexp ' +' after each completion, and then
added another ' +' at the very end of the expected output.  So, if we
expected to match the name of two functions 'f1' and 'f2' the
generated regexp would be: 'f1 +f2 + +'.  This would match just fine,
the actual output would be: 'f1  f2  ', notice that we get two spaces
after each function name.

However, if we complete two directory names 'd1' and 'd2' then the
output will be 'd1/ d2/ '.  Notice that now we only have a single
space between each match, however, we do get the '/' added instead.

What happens is that when presenting the matches, readline always adds
the appropriate trailing character; if we performed tab completion of
'break f1' then, as 'f1' is a unique match, we'd get 'break f1 ' with
a trailing space added.  However, if we complete 'file d1' then we get
'file d1/'.  Then readline is adding a single space after each
possible match, including the last one, which accounts for the
trailing space character.

To resolve this I've simply remove the addition o the second ' +'
within make_tab_completion_list_re, for the function completion
example I gave above the expected pattern is now 'f1 +f2 +', which for
the directory case we expect 'd1/ +d2/ +', both of which work just
fine.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16265
Co-Authored-By: Lancelot SIX <lsix@lancelotsix.com>
Approved-By: Tom Tromey <tom@tromey.com>
Reviewed-By: John Baldwin <jhb@FreeBSD.org>
2024-01-12 11:03:33 +00:00
Andrew Burgess
76118e1675 gdb/python: New InferiorThread.ptid_string attribute
This commit adds a new InferiorThread.ptid_string attribute.  This
read-only attribute contains the string returned by target_pid_to_str,
which actually converts a ptid (not pid) to a string.

This is the string that appears (at least in part) in the output of
'info threads' in the 'Target Id' column, but also in the thread
exited message that GDB prints.

Having access to this string from Python is useful for allowing
extensions identify threads in a similar way to how GDB core would
identify the thread.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
2024-01-12 09:22:25 +00:00
Tom de Vries
322ffd247e [gdb/testsuite] Use require in gdb.dwarf2/assign-variable-value-to-register.exp
In test-case gdb.dwarf2/assign-variable-value-to-register.exp a return is
missing here after the unsupported:
...
if { ![is_x86_64_m64_target] } {
    unsupported "unsupported architecture"
}
...
and consequently on aarch64-linux I ran into an UNSUPPORTED followed by 3
FAILs.

Fix this by simply using require:
...
require is_x86_64_m64_target
...

Tested on x86_64-linux and aarch64-linux.
2024-01-12 09:29:37 +01:00
Indu Bhagat
6bf40ece27 gas: sframe: warn when skipping SFrame FDE generation
Fix PR gas/31213.

gas/
	PR gas/31213
        * gen-sframe.c (sframe_do_cfi_insn): Add new warning.

gas/testsuite/
	* gas/cfi-sframe/common-empty-1.d: Test the new warning as well.
	* gas/cfi-sframe/common-empty-2.d: Likewise.
2024-01-12 00:22:12 -08:00
mengqinggang
156a2edbdb LoongArch: Fix relaxation overflow caused by section alignment
When deleting NOP instructions addend by .align at second pass, this may cause
the PC decrease but the symbol address to remain unchanged due to section
alignment.

To solve this question, we subtract a maximux alignment of all sections like
RISC-V.
2024-01-12 15:38:42 +08:00
Cui, Lili
192781a398 x86: Fix indentation and use true/false instead of 1/0
gas/ChangeLog:

        * config/tc-i386.c (establish_rex): Fix indentation.
        (check_EgprOperands): Use true/false instead of 1/0.
2024-01-12 02:31:11 +00:00
GDB Administrator
9b32960754 Automatic date update in version.in 2024-01-12 00:00:11 +00:00
Simon Marchi
47ff07a6c2 gdb: fix frame passed to gdbarch_value_to_register in value_assign
Commit 78f2fd84e8 ("gdb: remove VALUE_REGNUM, add value::regnum")
introduced an unexpected change in value_assign.  It replaced
`get_prev_frame_always (next_frame)` with `next_frame`in the call to
gdbarch_value_to_register.

This is the result of a merge error, since I previously had a patch to
change gdbarch_value_to_register to take the next frame, and later
decided to drop it.  Revert that change.

Add a test based on the DWARF assembler to expose the problem and test
the fix.  I also tested on ppc64le to make sure the problem reported in
PR 31231 was fixed.

Change-Id: Ib8b851287ac27a4b2e386f7b680cf65865e6aee6
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31231
2024-01-11 13:11:19 -05:00
Tom de Vries
fa87f8e195 [gdb/testsuite] Fix gdb.dwarf2/dw2-entry-points.exp on ppc64le
On ppc64le-linux, I run into:
...
(gdb) bt^M
 #0  0x00000000100006dc in foobar (J=2)^M
 #1  0x000000001000070c in prog ()^M
(gdb) FAIL: gdb.dwarf2/dw2-entry-points.exp: bt foo
...

The test-case attemps to emulate additional entry points of a function, with
function bar having entry points foo and foobar:
...
(gdb) p bar
$1 = {void (int, int)} 0x1000064c <bar>
(gdb) p foo
$2 = {void (int, int)} 0x10000698 <foo>
(gdb) p foobar
$3 = {void (int)} 0x100006d0 <foobar>
...

However, when setting a breakpoint on the entry point foo:
...
(gdb) b foo
Breakpoint 1 at 0x100006dc
...
it ends up in foobar instead of in foo, due to prologue skipping, and
consequently the backtrace show foobar instead foo.

The problem is that the test-case does not emulate an actual prologue at each
entry point.

Fix this by disabling the prologue skipping when setting a breakpoint, using
"break *foo".

Tested on ppc64le-linux and x86_64-linux.

Tested-By: Guinevere Larsen <blarsen@redhat.com>
Approved-By: Ulrich Weigand <Ulrich.Weigand@de.ibm.com>

PR testsuite/31232
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31232
2024-01-11 16:05:12 +01:00
Tom de Vries
4ece39c56c [gdb/testsuite] Extend gdb.base/kill-during-detach.exp
I ran into the following FAIL:
...
(gdb) python kill_and_detach()^M
Traceback (most recent call last):^M
  File "<string>", line 1, in <module>^M
  File "<string>", line 7, in kill_and_detach^M
gdb.error: Selected thread is running.^M
Error while executing Python code.^M
(gdb) FAIL: gdb.base/kill-during-detach.exp: exit_p=true: checkpoint_p=true: \
  python kill_and_detach()
...

The FAIL happens as follows:
- gdb is debugging a process A
- a checkpoint is created, in other words, fork is called in the inferior,
  after which we have:
  - checkpoint 0 (the fork parent, process A), and
  - checkpoint 1 (the fork child, process B).
- during checkpoint creation, lseek is called in the inferior (process A) for
  all file descriptors, and it returns != -1 for at least one file descriptor.
- the process A continues in the background
- gdb detaches, from process A
- gdb switches to process B, in other words, it restarts checkpoint 1
- while restarting checkpoint 1, gdb tries to call lseek in the inferior
  (process B), but this fails because gdb incorrectly thinks that inferior B
  is running.

This happens because linux_nat_switch_fork patches the pid of process B into
the current inferior and current thread which where originally representing
process A.  So, because process A was running in the background, the
thread_info fields executing and resumed are set accordingly, but they are not
correct for process B.

There's a line in fork_load_infrun_state that fixes up the thread_info field
stop_pc, so fix this by adding similar fixups for the executing and resumed
fields alongside.

The FAIL did not always reproduce, so extend the test-case to reliably
trigger this scenario.

Tested on x86_64-linux.

Approved-By: Kevin Buettner <kevinb@redhat.com>

PR gdb/31203
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31203
2024-01-11 10:12:48 +01:00
changjiachen
2bee95b73c LoongArch: ld: Adjusted some code order in relax.exp.
ld/testsuite/ChangeLog:

	* ld/testsuite/ld-loongarch-elf/relax.exp: Modify test.
2024-01-11 14:37:26 +08:00
Lulu Cai
21455a847d LoongArch: Discard extra spaces in objdump output
Due to the formatted output of objdump, some instructions
that do not require output operands (such as nop/ret) will
have extra spaces added after them.

Determine whether to output operands through the format
of opcodes. When opc->format is an empty string, no extra
spaces are output.
2024-01-11 14:08:24 +08:00
Mike Frysinger
20617191e4 sim: ppc: return register error when unhandled
We don't want to fallthru and use cooked_buf when we haven't initialized
it to anything.  Returning 0 indicates the register wasn't recognized.
2024-01-11 00:49:56 -05:00