aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-01-15gdb/tui: compare pointer to nullptr, not 0Andrew Burgess2-2/+6
Compare pointers to nullptr, not 0. I also fixed a trailing whitespace in the same function. There should be no user visible changes after this commit. gdb/ChangeLog: * tui/tui.c (tui_is_window_visible): Compare to nullptr, not 0.
2021-01-15[gdb/testsuite] Fix gdb.fortran/array-slices.exp with -m32Tom de Vries2-1/+7
When running test-case gdb.fortran/array-slices.exp with target board unix/-m32, we run into: ... (gdb) print /x &array4d^M $69 = 0xffffb620^M (gdb) print /x (&array4d) + sizeof (array4d)^M $70 = 0x95c620^M (gdb) FAIL: gdb.fortran/array-slices.exp: repack=on: test 9: check sizes match ... The expressions calculate the start and end of an array, but the calculation of the end expression has an unexpected result (given that it lies before the start of the array). By printing "sizeof (array4d)" as a separate expression: ... (gdb) print /x sizeof (array4d) $1 = 0xc40 ... it becomes clear we expected to get 0xffffb620 + 0xc40 == 0xffffc260 instead. The problem is that using the '&' returns a pointer type: ... (gdb) p &array4d $5 = (PTR TO -> ( integer(kind=4) (-3:3,7:10,-3:3,-10:-7) )) 0xffffbe00 ... which has the consequence that the addition is done as pointer arithmetic. Fix this by using the result of "print /x &array4d" instead of &array4d in the addition. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2021-01-15 Tom de Vries <tdevries@suse.de> PR testsuite/26997 * gdb.fortran/array-slices.exp (run_test): Avoid pointer arithmetic when adding sizeof.
2021-01-15RISC-V: Fixed the indent that caused by the previous commits accidentally.Nelson Chu2-1/+6
bfd/ * elfnn-riscv.c (riscv_relax_delete_bytes): Fixed the indent that caused by the previous commit accidentally.
2021-01-15RISC-V: Indent and GNU coding standards tidy, also aligned the code.Nelson Chu9-922/+944
bfd/ * elfnn-riscv.c: Indent, labels and GNU coding standards tidy, also aligned the code. gas/ * config/tc-riscv.c: Indent and GNU coding standards tidy, also aligned the code. * config/tc-riscv.h: Likewise. include/ * opcode/riscv.h: Indent and GNU coding standards tidy, also aligned the code. opcodes/ * riscv-opc.c (riscv_gpr_names_abi): Aligned the code. (riscv_fpr_names_abi): Likewise. (riscv_opcodes): Likewise. (riscv_insn_types): Likewise.
2021-01-15RISC-V: Error and warning messages tidy.Nelson Chu20-307/+343
Error and warning messages usually starting with lower case letter, and without the period at the end. Besides, add the prefixed "internel:" at the beginning of the messages when they are caused internally. Also fix indents and typos. bfd/ * elfnn-riscv.c (riscv_merge_attributes): Fix typos of messages. gas/ * config/tc-riscv.c: Error and warning messages tidy. * testsuite/gas/riscv/priv-reg-fail-fext.l: Updated. * testsuite/gas/riscv/priv-reg-fail-read-only-01.l: Likewise. * testsuite/gas/riscv/priv-reg-fail-read-only-02.l: Likewise. * testsuite/gas/riscv/priv-reg-fail-rv32-only.l: Likewise. * testsuite/gas/riscv/priv-reg-fail-version-1p10.l: Likewise. * testsuite/gas/riscv/priv-reg-fail-version-1p11.l: Likewise. * testsuite/gas/riscv/priv-reg-fail-version-1p9p1.l: Likewise. ld/ * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-01.d: Updated. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-02.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-03.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-04.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-05.d: Likewise. * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-06.d: Likewise. opcodes/ * riscv-dis.c (parse_riscv_dis_option): Fix typos of message.
2021-01-15RISC-V: Comments tidy and improvement.Nelson Chu13-307/+275
The GNU coding standards said the comments should be complete sentences and end with a period and two spaces. But sometimes it should be more cleaner when the comments only include a word or codes. Therefore, I made the following changes after referring to other target/generic codes, * Try to write sentences in comments, must end with a period and two spaces. * End with two spaces without a period for codes/instructions only. * End with one space without a period for a single word/variable only. Besids, also rewrite/remove some comments which are obsolete or too long, and fix indents for comments. bfd/ * elfnn-riscv.c: Comments tidy and improvement. * elfxx-riscv.c: Likewise. * elfxx-riscv.h: Likewise. gas/ * config/tc-riscv.c: Comments tidy and improvement. Also update comment "fallthru" to "Fall through" that end with a period and two spaces. include/ * elf/riscv.h: Comments tidy and improvement. * opcode/riscv-opc.h: Likewise. * opcode/riscv.h: Likewise. opcodes/ * riscv-dis.c: Comments tidy and improvement. * riscv-opc.c: Likewise.
2021-01-15sim: testsuite: delete configure scriptMike Frysinger7-3133/+27
Now that we've moved all ports to dejagnu & testsuite/sim/, the only thing the testsuite/configure script has been doing is filling in the sim_arch field in the testsuite/Makefile. We can simply let the top sim/configure script do that for us now. This simplifies & speeds up the build a bit by killing an entire configure script.
2021-01-15sim: d10v: relocate tests & clean up test harnessMike Frysinger58-3434/+300
This is the only target using a dir directly under testsuite/. All others use sim/<arch>/ instead. Relocate it so all targets look the same, and so we can leverage the common test harness. We drop loop.s in the process because it was never referenced and was just 2 lines of code. All other test files are moved & have directives added to the top so that the test harness can invoke them correctly.
2021-01-15sim: mips: delete empty stub test dirMike Frysinger7-3200/+7
No tests were ever added in here in the ~22 years since it was first created. Seems unlikely any tests will be added at this rate, and the sim/mips/ testdir already has some (light) coverage for this target. So punt the tree.
2021-01-15sim: frv: clean up redundant test coverageMike Frysinger14-3219/+48
The frv-elf subdir contained five tests: * cache: A cache test of some sort. * exit47: A program to test exit status of 47 from sim. * grloop: Some basic limited loop test program. * hello: Standard "hello world" output program. * loop: An infinite loop program. The loop.s test is never referenced anywhere, and is all of 2 lines. Anyone who really needs a while(1); test case and re-implement it themselves locally. The cache.s code isn't referenced anywhere because it requires some custom args to the run program, and when this testcase was added, we didn't have any support for that. We do now, so we can add a header to enable that. Turns out the code crashes even with those, so turn around and mark it xfail. Maybe someone someday will care. That leaves the small exit47, grloop, and hello tests. Now that the sim test harness supports testing for custom exit status, we can move them all to sim/frv/ to maintain test coverage. The remaining differences between frv-elf & sim/frv are: * frv-elf/ runs for frv-*-elf while sim/frv/ runs for frv*-*-*. * frv-elf/ runs "*.s" files while sim/frv/ only has .cgs and such. On closer inspection, these are also meaningless distinctions: * There is nothing specific to the tests that require an *-elf target. Normally that would mean newlib+libgloss type stuff, but there's no such requirement in frv-elf/. * The ".s" suffix is the standard "this is an assembly file" suffix. Since FRV is a CGEN target, we can reuse the existing convention of ".ms" to mean "miscellaneous .s" as in "this is an assembly file, and run/bucket its test results in the miscellaneous category". So moving frv-elf/{cache,exit47,grloop,hello}.s to sim/frv/*.ms makes sense and simplifies things quite a bit for the target while also slightly increasing the coverage for some tuples.
2021-01-15sim: m32r: clean up redundant test coverageMike Frysinger11-3203/+14
The m32r-elf subdir contained three tests: * exit47: A program to test exit status of 47 from sim. * hello: Standard "hello world" output program. * loop: An infinite loop program. There's already a sim/m32r/hello.ms test that does exactly the same thing as m32r-elf/hello.s, so we can delete that. The loop.s test is never referenced anywhere, and is all of 2 lines. Anyone who really needs a while(1); test case and re-implement it themselves locally. That leaves the single exit47 test. Now that the sim test harness supports testing for custom exit status, we can easily move that to sim/m32r/exit47.ms to maintain test coverage. The remaining differences between m32r-elf & sim/m32r are: * m32r-elf/ runs for m32r-*-elf while sim/m32r/ runs for m32r*-*-*. * m32r-elf/ runs "*.s" files while sim/m32r/ runs "*.ms" files. On closer inspection, these are also meaningless distinctions: * There is nothing specific to the tests that require an *-elf target. Normally that would mean newlib+libgloss type stuff, but there's no such requirement in m32r-elf/. * The ".s" suffix is the standard "this is an assembly file" suffix. Turns out ".ms" is just how sim/m32r/ (and a few other CGEN based targets) categorize/bucket test cases. It simply means "miscellaneous .s" as in "this is an assembly file, and run/bucket its test results in the miscellaneous category". So moving m32r-elf/exit47.s to sim/m32r/exit47.ms makes sense and simplifies things quite a bit for the target while also slightly increasing the coverage for some tuples.
2021-01-15sim: testsuite: allow tests to declare expected exit statusMike Frysinger5-13/+32
Some tests want to verify they can control the exit status, and allowing any non-zero value would allow tests to silently fail: if it crashed & exited 1, or forced all non-zero to 1, then we wouldn't be able to differentiate with a test exiting with a status like 47. Extend the test harness to allow tests to declare their expected exit status that would be defined as a "pass". This requires a small tweak to the sim_run API to return the status directly, but that shouldn't be a big deal as it's only used by sim code.
2021-01-15PR26539, memory leak in inflate.cAlan Modra2-3/+8
Like the PR15356 fix for the same leak in bfd, but for readelf.c PR 26539 * readelf.c (uncompress_section_contents): Always call inflateEnd.
2021-01-14gas: make [248]byte directives available everywhereMike Frysinger4-11/+10
These aren't specific to ELF at all, and seem generally useful. So pull them out of the ELF backend and into the common core.
2021-01-15Automatic date update in version.inGDB Administrator1-1/+1
2021-01-14Add myself to gdb/MAINTAINERSLancelot SIX2-0/+5
gdb/ChangeLog: * MAINTAINERS (Wrate After Approval): Add myself.
2021-01-14Update my email address (long overdue!)Alexandre Oliva2-3/+7
for binutils/ChangeLog * MAINTAINERS: Update my email address.
2021-01-14Fix building gdb with gcc-4.xBernd Edlinger2-1/+10
Since is_trivially_default_constructible was not implemented before gcc-5 it cannot be used with gcc-4.x. Fix the build by using conditional compilation around that line. Use the equivalent is_trivially_constructible<T> instead, since we already have HAVE_IS_TRIVIALLY_CONSTRUCTIBLE for that purpose. Fixes: 098caef485a ("Refactor struct trad_frame_saved_regs") gdb: 2021-01-14 Bernd Edlinger <bernd.edlinger@hotmail.de> * trad-frame.c (trad_frame_alloc_saved_regs): Avoid compile-error because is_trivially_default_constructible was first implemented with gcc-5.
2021-01-14bfin: Skip non SEC_ALLOC section for R_BFIN_FUNCDESCH.J. Lu2-117/+124
Linker should never generate dynamic relocations for relocations in non-SEC_ALLOC section which has no impact on run-time behavior. Such relocations should be resolved to 0. PR ld/26688 * elf32-bfin.c (bfinfdpic_relocate_section): Skip non SEC_ALLOC section for R_BFIN_FUNCDESC.
2021-01-14Updated translations for some subdirectoriesNick Clifton6-3842/+4403
2021-01-14[gdb/breakpoint] Handle .plt.sec in in_plt_sectionTom de Vries2-1/+7
Consider the following test-case small.c: ... #include <stdio.h> #include <stdlib.h> #include <string.h> int main (void) { int *p = (int *)malloc (sizeof(int) * 4); memset (p, 0, sizeof(p)); printf ("p[0] = %d; p[3] = %d\n", p[0], p[3]); return 0; } ... On Ubuntu 20.04, we get: ... $ gcc -O0 -g small.c $ gdb -batch a.out -ex start -ex step Temporary breakpoint 1, main () at small.c:6 6 int *p = (int *) malloc(sizeof(int) * 4); p[0] = 0; p[3] = 0 [Inferior 1 (process $dec) exited normally] ... but after switching off the on-by-default fcf-protection, we get the desired behaviour: ... $ gcc -O0 -g small.c -fcf-protection=none $ gdb -batch a.out -ex start -ex step Temporary breakpoint 1, main () at small.c:6 6 int *p = (int *) malloc(sizeof(int) * 4); 7 memset (p, 0, sizeof(p)); ... Using "set debug infrun 1", the first observable difference between the two debug sessions is that with -fcf-protection=none we get: ... [infrun] process_event_stop_test: stepped into dynsym resolve code ... In this case, "in_solib_dynsym_resolve_code (malloc@plt)" returns true because "in_plt_section (malloc@plt)" returns true. With -fcf-protection=full, "in_solib_dynsym_resolve_code (malloc@plt)" returns false because "in_plt_section (malloc@plt)" returns false, because the section name for malloc@plt is .plt.sec instead of .plt, which is not handled in in_plt_section: ... static inline int in_plt_section (CORE_ADDR pc) { return pc_in_section (pc, ".plt"); } ... Fix this by handling .plt.sec in in_plt_section. Tested on x86_64-linux. [ Another requirement to be able to reproduce this is to have a dynamic linker with a "malloc" minimal symbol, which causes find_solib_trampoline_target to find it, such that skip_language_trampoline returns the address for the dynamic linkers malloc. This causes the step machinery to set a breakpoint there, and to continue, expecting to hit it. Obviously, we execute glibc's malloc instead, so the breakpoint is not hit and we continue to program completion. ] gdb/ChangeLog: 2021-01-14 Tom de Vries <tdevries@suse.de> PR breakpoints/27151 * objfiles.h (in_plt_section): Handle .plt.sec.
2021-01-14[gdb/testsuite] Fix gdb.base/style.exp with -m32Tom de Vries2-6/+48
When running test-case gdb.base/style.exp with target board unix/-m32, we run into (stripped styling from output, shortened file name): ... (gdb) frame argv=0xffffc714) at src/gdb/testsuite/gdb.base/style.c:45 45 return some_called_function (); /* break here */ (gdb) FAIL: gdb.base/style.exp: frame when width=20 ... while with native we have instead: ... (gdb) frame argv=0x7fffffffd478) at src/gdb/testsuite/gdb.base/style.c:45 45 return some_called_function (); /* break here */ (gdb) PASS: gdb.base/style.exp: frame when width=20 ... The problem is that due to argv having a different length for -m32, we get a different layout, and the test-case doesn't accommodate for that. Fix this by using a different regexp depending on the length of argv. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2021-01-14 Tom de Vries <tdevries@suse.de> PR testsuite/24590 * gdb.base/style.exp: Handle shorter argv in frame command output.
2021-01-14Fix an illegal memory access parsing a win32pstatus note with a type of 0.Nick Clifton2-2/+7
* elf.c (elfcore_grok_win32pstatus): Check for a note type of 0.
2021-01-14ld: tests: add -msim when testing bfin targetsMike Frysinger2-0/+9
The Blackfin ELF compiler requires the user to explicitly select a CPU target else it will fail: bfin-elf-gcc: error: no processor type specified for linking Select the sim target for these tests since we should (hopefully) have access to the simulator. At least, it's more likely than having access to a real development board. This makes the pass/fail numbers increase by a lot: -# of expected passes 398 -# of unexpected failures 6 +# of expected passes 587 +# of unexpected failures 109 It looks like the vast majority of new failures are due to our omission of COPY relocations: /* Bfin does not currently have a COPY reloc. */ if ((h->root.u.def.section->flags & SEC_ALLOC) != 0) { _bfd_error_handler (_("the bfin target does not currently support the generation of copy relocations")); return FALSE; } There doesn't seem to be a way to easily disable tests that cause copy relocations though, lets just take the hit for now. * testsuite/config/default.exp [bfin*-elf*] (gcc_B_opt): Append -msim.
2021-01-14gas: bfin: build lexer with -WerrorMike Frysinger3-4/+9
The makefile has comments about old versions of bison/yacc generating warnings, but that doesn't apply to the lexer which comes from flex. As far as I can tell, the warnings in the Blackfin lexer can be fixed with defines that have been supported back through flex in 2002. So lets turn on -Werror for it and see if anyone notices. If they do, they can report their exact tool versions so we can record that here.
2021-01-14gas: bfin: fix build time warningsMike Frysinger2-1/+9
2021-01-13sim: h8300: drop separate eightbit memory bufferMike Frysinger3-74/+32
The h8300 sim has its own implementation for memory handling that I'd like to replace with the common sim memory code. However, it's got a weird bit of code it calls "eightbit mem" that makes this not as easy as it would otherwise be. The code has this comment: /* These define the size of main memory for the simulator. Note the size of main memory for the H8/300H is only 256k. Keeping it small makes the simulator run much faster and consume less memory. The linker knows about the limited size of the simulator's main memory on the H8/300H (via the h8300h.sc linker script). So if you change H8300H_MSIZE, be sure to fix the linker script too. Also note that there's a separate "eightbit" area aside from main memory. For simplicity, the simulator assumes any data memory reference outside of main memory refers to the eightbit area (in theory, this can only happen when simulating H8/300H programs). We make no attempt to catch overlapping addresses, wrapped addresses, etc etc. */ I've read the H8/300 Programming Manual and the H8/300H Software Manual and can't find documentation on it. The closest I can find is the bits about the exception vectors, but that sounds like a convention where the first 256 bytes of memory are used for a special purpose. The sim will actually allocate a sep memory buffer of 256 bytes and you address it by accessing anywhere outside of main memory. e.g. I would expect code to access it like: uint32_t *data = (void *)0; data[0] = reset_exception_vector; not like the sim expects like: uint8_t *data = (void *)0x1000000; data[0] = ...; The gcc manual has an "eightbit_data" attribute: Use this attribute on the H8/300, H8/300H, and H8S to indicate that the specified variable should be placed into the eight-bit data section. The compiler generates more efficient code for certain operations on data in the eight-bit data area. Note the eight-bit data area is limited to 256 bytes of data. And the gcc code implies that it's accessed via special addressing: eightbit_data: This variable lives in the 8-bit data area and can be referenced with 8-bit absolute memory addresses. I'm fairly certain these are referring to the 8-bit addressing modes that allow access to 0xff00 - 0xffff with only an 8-bit immediate. They aren't completely separate address spaces which this eightbit memory buffer occupies. But the sim doesn't access its eightbit memory based on specific insns, it does it purely on the addresses requested. Unfortunately, much of this code was authored by Michael Snyder, so I can't ask him :(. I asked Renesas support and they didn't know: https://renesasrulz.com/the_vault/f/archive-forum/6952/question-about-eightbit-memory So I've come to the conclusion that this was a little sim-specific hack done for <some convenience> and has no relation to real hardware. And as such, let's drop it until someone notices and can provide a reason for why we need to support it.
2021-01-13sim: watch: add basic default handler that trapsMike Frysinger2-1/+18
The default watchpoint handler is NULL. That means any port that sets the STATE_WATCHPOINTS->pc field will crash if you try to use the --watch options but don't configure the interrupt handler. In the past, you had to setup STATE_WATCHPOINTS->pc if you wanted to support PC profiling, and while that was fixed a while ago, we have a lot of ports who still configure it. We already add a default set of interrupts (just "int") if the port doesn't define any. Let's also add a default handler that raises a SIGTRAP. When connected to gdb, this is a breakpoint which is what people would expect. When running standalone, it'll abort the sim, but it's unclear whether there's anything better to do there. This really is just to make the watchpoint module more usable out of the box for most ports with very little setup, at least inside of gdb.
2021-01-13gdb: better handling of 'S' packetsAndrew Burgess5-55/+336
This commit builds on work started in the following two commits: commit 24ed6739b699f329c2c45aedee5f8c7d2f54e493 Date: Thu Jan 30 14:35:40 2020 +0000 gdb/remote: Restore support for 'S' stop reply packet commit cada5fc921e39a1945c422eea055c8b326d8d353 Date: Wed Mar 11 12:30:13 2020 +0000 gdb: Handle W and X remote packets without giving a warning This is related to how GDB handles remote targets that send back 'S' packets. In the first of the above commits we fixed GDB's ability to handle a single process, single threaded target that sends back 'S' packets. Although the 'T' packet would always be preferred to 'S' these days, there's nothing really wrong with 'S' for this situation. The second commit above fixed an oversight in the first commit, a single-process, multi-threaded target can send back a process wide event, for example the process exited event 'W' without including a process-id, this also is fine as there is no ambiguity in this case. In PR gdb/26819 we run into yet another problem with the above commits. In this case we have a single process with two threads, GDB hits a breakpoint in thread 2 and then performs a stepi: (gdb) b main Breakpoint 1 at 0x1212340830: file infinite_loop.S, line 10. (gdb) c Continuing. Thread 2 hit Breakpoint 1, main () at infinite_loop.S:10 10 in infinite_loop.S (gdb) set debug remote 1 (gdb) stepi Sending packet: $vCont;s:2#24...Packet received: S05 ../binutils-gdb/gdb/infrun.c:5807: internal-error: int finish_step_over(execution_control_state*): Assertion `ecs->event_thread->control.trap_expected' failed. What happens in this case is that on the RISC-V target displaced stepping is not supported, so when the stepi is issued GDB steps just thread 2. As only a single thread was set running the target decides that is can get away with sending back an 'S' packet without a thread-id. GDB then associates the stop with thread 1 (the first non-exited thread), but as thread 1 was not previously set executing the assertion seen above triggers. As an aside I am surprised that the target sends pack 'S' in this situation. The target is happy to send back 'T' (including thread-id) when multiple threads are set running, so (to me) it would seem easier to just always use the 'T' packet when multiple threads are in use. However, the target only uses 'T' when multiple threads are actually executing, otherwise an 'S' packet it used. Still, when looking at the above situation we can see that GDB should be able to understand which thread the 'S' reply is referring too. The problem is that is that in commit 24ed6739b699 (above) when a stop reply comes in with no thread-id we look for the first non-exited thread and select that as the thread the stop applies too. What we should really do is select the first non-exited, resumed thread, and associate the stop event with this thread. In the above example both thread 1 and 2 are non-exited, but only thread 2 is resumed, so this is what we should use. There's a test for this issue included which works with stock gdbserver by disabling use of the 'T' packet, and enabling 'scheduler-locking' within GDB so only one thread is set running. gdb/ChangeLog: PR gdb/26819 * remote.c (remote_target::select_thread_for_ambiguous_stop_reply): New member function. (remote_target::process_stop_reply): Call select_thread_for_ambiguous_stop_reply. gdb/testsuite/ChangeLog: PR gdb/26819 * gdb.server/stop-reply-no-thread-multi.c: New file. * gdb.server/stop-reply-no-thread-multi.exp: New file. Change-Id: I9b49d76c2a99063dcc76203fa0f5270a72825d15
2021-01-13gdb: remove target_ops::commit_resume implementation in record-{btrace, full}.cSimon Marchi3-21/+7
The previous patch made the commit_resume implementations in the record targets unnecessary, as the remote target's commit_resume implementation won't commit-resume threads for which it didn't see a resume. This patch removes them. gdb/ChangeLog: * record-btrace.c (class record_btrace_target): Remove. (record_btrace_target::commit_resume): Remove. * record-full.c (class record_full_target): Remove. (record_full_target::commit_resume): Remove. Change-Id: I3a68d3d726fb09d8b7165b4edefc330d27803b27
2021-01-13gdb: make the remote target track its own thread resume stateSimon Marchi2-36/+147
The next patch moves the target commit_resume method to be a process_stratum_target-only method. The only non-process targets that currently implement the commit_resume method are the btrace and full record targets. The only reason they need to do so is to prevent a commit resume from reaching the beneath (process) target if they are currently replaying. This is important if a record target is used on top of the remote target (the only process target implementing the commit_resume method). Currently, the remote target checks the `thread_info::executing` flag of a thread to know if it should commit resume that thread: if (!tp->executing || remote_thr->vcont_resumed) continue; The `tp->executing` flag is set by infrun when it has asked the target stack to resume the thread, and therefore if the thread is executing, from its point of view. It _not_ equivalent to whether the remote target was asked to resume this thread. Indeed, if infrun asks the target stack to resume some thread while the record target is replaying, the record target won't forward the resume request the remote target beneath, because we don't actually want to resume the thread on the execution target. But the `tp->executing` flag is still set, because from the point of view of infrun, the thread executes. So, if the commit_resume call wasn't intercepted by the record target as it is today and did reach the remote target, the remote target would say "Oh, this thread should be executing and I haven't vCont-resumed it! I must vCont-resume it!". But that would be wrong, because it was never asked to resume this thread, the resume request did not reach it. This is why the record targets currently need to implement commit_resume: to prevent the beneath target from commit_resuming threads it wasn't asked to resume. Since commit_resume will become a method on process_stratum_target in the following patch, record targets won't have a chance to intercept the calls and that would result in the remote target commit_resuming threads it shouldn't. To avoid this, this patch makes the remote target track its own thread resumption state. That means, tracking which threads it was asked to resume via target_ops::resume. Regardless of the context of this patch, I think this change makes it easier to understand how resume / commit_resume works in the remote target. It makes the target more self-contained, as it only depends on what it gets asked to do via the target methods, and not on tp->executing, which is a flag maintained from the point of view of infrun. I initially made it so this state was only used when the remote target operates in non-stop mode, since commit_resume is only used when the target is non-stop. However, it's more consistent and it can be useful to maintain this state even in all-stop too. In all-stop, receiving a stop notification for one thread means all threads of the target are considered stopped. From the point of view of the remote target, there are three states a thread can be in: 1. not resumed 2. resumed but pending vCont-resume 3. resumed State 2 only exists when the target is non-stop. As of this patch, valid state transitions are: - 1 -> 2 (through the target resume method if in non-stop) - 2 -> 3 (through the target commit_resume method if in non-stop) - 1 -> 3 (through the target resume method if in all-stop) - 3 -> 1 (through a remote stop notification / reporting an event to the event loop) A subsequent patch will make it possible to go from 2 to 1, in case infrun asks to stop a thread that was resumed but not commit-resumed yet. I don't think it can happen as of now. In terms of code, this patch replaces the vcont_resumed field with an enumeration that explicitly represents the three states described above. The last_resume_sig and last_resume_step fields are moved to a structure which is clearly identified as only used when the thread is in the "resumed but pending vCont-resume" state. gdb/ChangeLog: * remote.c (enum class resume_state): New. (struct resumed_pending_vcont_info): New. (struct remote_thread_info) <resume_state, set_not_resumed, set_resumed_pending_vcont, resumed_pending_vcont_info, set_resumed, m_resume_state, m_resumed_pending_vcont_info>: New. <last_resume_step, last_resume_sig, vcont_resumed>: Remove. (remote_target::remote_add_thread): Adjust. (remote_target::process_initial_stop_replies): Adjust. (remote_target::resume): Adjust. (remote_target::commit_resume): Rely on state in remote_thread_info and not on tp->executing. (remote_target::process_stop_reply): Adjust. Change-Id: I10480919ccb4552faa62575e447a36dbe7c2d523
2021-01-14Automatic date update in version.inGDB Administrator1-1/+1
2021-01-14Re: SHF_LINK_ORDER fixup_link_order in ldAlan Modra2-7/+20
PR 27160 * ldelfgen.c (compare_link_order): Protect access of ELF section data. (add_link_order_input_section): Remove redundant NULL check. Use bfd_get_flavour. (ldelf_map_segments): Use bfd_get_flavour.
2021-01-13gdb: convert arc to new-style debug macrosSimon Marchi6-120/+98
Add the standard arc_debug_printf, but also arc_linux_debug_printf, arc_linux_nat_debug_printf and arc_newlib_debug_printf to match the prefixes currently used in the debug messages. gdb/ChangeLog: * arc-tdep.h (arc_debug_printf): New. * arc-tdep.c: Use arc_debug_printf. * arc-linux-nat.c (arc_linux_nat_debug_printf): Add and use. * arc-linux-tdep.c (arc_linux_debug_printf): Add and use. * arc-newlib-tdep.c (arc_newlib_debug_printf): Add and use. Change-Id: I5d937566ed7a1925f7982e8809802c8f0560d8c6
2021-01-13gdb: turn arc_debug into a boolSimon Marchi4-10/+18
Shahab suggested we get rid of the verbosity level for the ARC debug logging [1]. This patch does that, before doing any other change. gdb/ChangeLog: * arc-tdep.h (arc_debug): Change type to bool. * arc-tdep.c (arc_debug): Change type to bool. (arc_analyze_prologue): Adjust. (_initialize_arc_tdep): Use add_setshow_boolean_cmd. * arc-linux-nat.c (ps_get_thread_area): Adjust. [1] https://sourceware.org/pipermail/gdb-patches/2021-January/175075.html Change-Id: I16688bd42ed8978ae1acf57012c8d41a943044a5
2021-01-13gdb: bool-ify maybe_add_script_{text,file}Simon Marchi1-22/+20
Bool-ify the return type of maybe_add_script_text and maybe_add_script_file, the loaded parameter and related things. gdb/ChangeLog: * auto-load.c (struct loaded_script) <loaded>: Change to bool. (maybe_add_script_file): Change return type to bool. (maybe_add_script_text): Change return type and loaded parameter to bool. (source_script_file): Adjust. (execute_script_contents): Adjust. Change-Id: I59ab5862796fa7d154721b56e2ff8612ad5d734b
2021-01-13gdb: bool-ify users of file_is_auto_load_safeSimon Marchi2-9/+14
A previous patch missed those. gdb/ChangeLog: * auto-load.c (auto_load_objfile_script_1): Use bool. (execute_script_contents): Use bool. Change-Id: I214bf7ed25af36ced375eb3ec5a403ded2fa572e
2021-01-13gdb: bool-ify ext_lang_auto_load_enabled and friendsSimon Marchi10-17/+46
Make it and related functions return bool. Move function comments to header where applicable. gdb/ChangeLog: * auto-load.h (auto_load_gdb_scripts_enabled): Return bool, move comment here. * auto-load.c (auto_load_gdb_scripts_enabled): Return bool, move comment to header. * extension-priv.h (struct extension_language_script_ops) <auto_load_enabled>: Return bool. * extension.h (ext_lang_auto_load_enabled): Return bool, move comment here. * extension.c (ext_lang_auto_load_enabled): Return bool, move comment to header. * guile/guile-header.h (gdbscm_auto_load_enabled): Return bool, move comment here. * guile/scm-auto-load.c (gdbscm_auto_load_enabled): Return bool, move comment to header. * python/python-header.h (gdbpy_auto_load_enabled): Return bool, move comment here. * python/py-auto-load.c (gdbpy_auto_load_enabled): Return bool, move comment to header. Change-Id: I657a17d2dab77a36884a137ce9b23a2cc6d53140
2021-01-13gdb: bool-ify file_is_auto_load_safeSimon Marchi3-15/+24
Make it return bool and change the advice_printed to bool as well. Move doc to header file. gdb/ChangeLog: * auto-load.h (file_is_auto_load_safe): Change return type to bool, move comment here. * auto-load.c (file_is_auto_load_safe): Change return type and advice_printed to bool. Move comment to header. Change-Id: Ia7395e7cea8880377800240833316e4be5251d49
2021-01-13gdb: convert jit to new-style debug macrosSimon Marchi2-40/+28
Here's a sample output, with infrun debug enabled as well to show nesting: [infrun] fetch_inferior_event: enter [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) = [infrun] print_target_wait_results: 4116727.4116727.0 [process 4116727], [infrun] print_target_wait_results: status->kind = stopped, signal = GDB_SIGNAL_TRAP [infrun] handle_inferior_event: status->kind = stopped, signal = GDB_SIGNAL_TRAP [infrun] start_step_over: enter [infrun] start_step_over: stealing global queue of threads to step, length = 0 [infrun] operator(): step-over queue now empty [infrun] start_step_over: exit [infrun] handle_signal_stop: stop_pc=0x555555555229 [infrun] handle_jit_event: handling bp_jit_event [jit] jit_read_descriptor: descriptor_addr = 0x5555555580b0 [jit] jit_register_code: symfile_addr = 0x7000000, symfile_size = 15560 [jit] jit_bfd_try_read_symtab: symfile_addr = 0x7000000, symfile_size = 15560 [jit] jit_breakpoint_re_set_internal: breakpoint_addr = 0x555555555229 [infrun] process_event_stop_test: BPSTAT_WHAT_SINGLE [infrun] process_event_stop_test: no stepping, continue [infrun] resume_1: step=1, signal=GDB_SIGNAL_0, trap_expected=1, current thread [process 4116727] at 0x555555555229 [infrun] prepare_to_wait: prepare_to_wait [infrun] fetch_inferior_event: exit gdb/ChangeLog: * jit.c (jit_debug_printf): New, use throughout file. Change-Id: Ic0f5eb3ffc926fb555de4914e7dc1076ada63a97
2021-01-13ld: Check for ELF input before accessing ELF section dataH.J. Lu2-1/+7
commit b209b5a6b8a accesses ELF section data without checking if input is ELF. It caused: sh: line 1: 1355479 Segmentation fault (core dumped) /export/build/gnu/tools-build/binutils-gitlab-x32/build-x86_64-linux-gnux32/ld/ld-new -o tmpdir/pe-x86-64-1 -z norelro -L/export/gnu/import/git/gitlab/x86-binutils/ld/testsuite/ld-x86-64 -m elf_x86_64 --entry=begin tmpdir/pe-x86-64-1a.obj tmpdir/pe-x86-64-1b.obj tmpdir/pe-x86-64-1c.obj 2>&1 FAIL: Build pe-x86-64-1 on Linux/x86-64 with PE/x86-64 inputs. Add check for ELF input before accessing ELF section data. * ldelfgen.c (add_link_order_input_section): Check for ELF input before accessing ELF section data.
2021-01-13x86: Don't generate GOT_symbol for PLT relocationsH.J. Lu7-19/+79
Don't generate the _GLOBAL_OFFSET_TABLE_ symbol for PLT relocations since it isn't needed. PR gas/27178 * config/tc-i386.c (lex_got::gotrel): Add need_GOT_symbol. Don't generate GOT_symbol for PLT relocations. * testsuite/gas/i386/i386.exp: Run PR gas/27178 tests. * testsuite/gas/i386/no-got.d: New file. * testsuite/gas/i386/no-got.s: Likewise. * testsuite/gas/i386/x86-64-no-got.d: Likewise. * testsuite/gas/i386/x86-64-no-got.s: Likewise.
2021-01-13Regen Makefile.in for jobserver.m4 aclocal.m4 dependencyAlan Modra17-0/+41
bfd/ * Makefile.in: Regenerate. * doc/Makefile.in: Regenerate. binutils/ * Makefile.in: Regenerate. * doc/Makefile.in: Regenerate. gas/ * Makefile.in: Regenerate. * Makefile.in: Regenerate. gprof/ * Makefile.in: Regenerate. ld/ * Makefile.in: Regenerate. libctf/ * Makefile.in: Regenerate. opcodes/ * Makefile.in: Regenerate.
2021-01-13SHF_LINK_ORDER fixup_link_order in ldAlan Modra28-250/+349
This moves the SHF_LINK_ORDER sorting from bfd_elf_final_link to the linker which means generic ELF targets now support SHF_LINK_ORDER and we cope with odd cases that require resizing of output sections. The patch also fixes two bugs in the current implementation, introduced by commit cd6d537c48fa. The pattern test used by that commit meant that sections matching something like "*(.IA_64.unwind* .gnu.linkonce.ia64unw.*)" would not properly sort a mix of sections matching the two wildcards. That commit also assumed a stable qsort. bfd/ PR 27160 * section.c (struct bfd_section): Remove pattern field. (BFD_FAKE_SECTION): Adjust to suit. * bfd-in2.h: Regenerate. * elflink.c (compare_link_order, elf_fixup_link_order): Delete. (bfd_elf_final_link): Don't call elf_fixup_link_order. ld/ PR 27160 * ldlang.h (lang_output_section_statement_type): Add data field. (lang_input_section_type, lang_section_bst_type): Add pattern field. (statement_list): Declare. (lang_add_section): Adjust prototype. * emultempl/aarch64elf.em: Adjust lang_add_section calls. * emultempl/armelf.em: Likewise. * emultempl/beos.em: Likewise. * emultempl/cskyelf.em: Likewise. * emultempl/hppaelf.em: Likewise. * emultempl/m68hc1xelf.em: Likewise. * emultempl/metagelf.em: Likewise. * emultempl/mipself.em: Likewise. * emultempl/mmo.em: Likewise. * emultempl/msp430.em: Likewise. * emultempl/nios2elf.em: Likewise. * emultempl/pe.em: Likewise. * emultempl/pep.em: Likewise. * emultempl/ppc64elf.em: Likewise. * emultempl/spuelf.em: Likewise. * emultempl/vms.em: Likewise. * ldelf.c: Likewise. * ldelfgen.c: Include ldctor.h. (struct os_sections): New. (add_link_order_input_section, link_order_scan): New functions. (compare_link_order, fixup_link_order): New functions. (ldelf_map_segments): Call link_order_scan and fixup_link_order. * ldlang.c (statement_list): Make global. (output_section_callback_fast): Save pattern in tree node. (lang_add_section): Add pattern parameter, save in lang_input_section. (output_section_callback_tree_to_list): Adjust lang_add_section calls. (lang_insert_orphan, output_section_callback): Likewise. (ldlang_place_orphan): Likewise. (gc_section_callback): Don't set section->pattern * testsuite/ld-elf/pr26256-2a.d: Don't xfail generic. * testsuite/ld-elf/pr26256-3b.d: Likewise. * testsuite/ld-elf/pr26256-2b.d: Likewise. notarget xgate.
2021-01-13Remove sflag_info param from wild callback functionsAlan Modra3-11/+14
* ldlang.h (callback_t): Remove flag_info function parameter. * ldlang.c (walk_wild_consider_section): Adjust to suit. (walk_wild_section_general): Likewise. (output_section_callback_fast, output_section_callback): Likewise. (check_section_callback, gc_section_callback): Likewise. (find_relro_section_callback): Likewise.
2021-01-13Add SEH support to code generated by dlltool.Zebediah Figura2-21/+38
PR 27037 * dlltool.c (i386_trampoline): Adjust %rsp immediately on entry and before exit. (i386_x64_trampoline): Add SEH annotations. (struct mac): Add how_seh field. (make_delay_head): If how_set field is true add SEh instructions.
2021-01-13sim: watch: fix range expression processingMike Frysinger2-1/+5
The code supports a <start>[,<end>] syntax, but the logic for handling the <end> check was broken: it would detect the first byte was ",", but then include that in the strtoul call meaning the result is always 0. Further, it (re)assigned to arg0 when it meant arg1 which means this code always processed a range expression as 0,0. Oops.
2021-01-13sim: watch: fix pc watchpoints on little endian host systemsMike Frysinger4-5/+14
My change 1ac72f0659d64d6a14da862242db0d841d2878d0 ("sim: convert to bfd_endian") subtly broke the watchpoint module on little endian host systems. The old code used 0 to mean "whatever the host endian is", and while that was changed to use BFD_ENDIAN_UNKNOWN, this caller was missed. Since its API used an int instead of an enum, the coercion from 0 to the BFD endian enum was silently missed, and 0 happens to be BFD_ENDIAN_BIG. Instead of restoring the old logic by passing in BFD_ENDIAN_UNKNOWN, we know the right host endian at compile time, so use that directly.
2021-01-13Automatic date update in version.inGDB Administrator1-1/+1
2021-01-12src-release: fix indentationMike Frysinger2-35/+37
The indentation of the body of the nested statements got out of sync leading to the entire function being indented incorrectly and looking like it's part of the for loop.