aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2019-07-27Add TUI register window testTom Tromey2-0/+52
This adds a very simple test of the TUI register window. gdb/testsuite/ChangeLog 2019-07-27 Tom Tromey <tom@tromey.com> * gdb.tui/regs.exp: New file.
2019-07-27Add "layout split" testTom Tromey2-0/+13
This adds a test of "layout split" to the TUI test suite. gdb/testsuite/ChangeLog 2019-07-27 Tom Tromey <tom@tromey.com> * gdb.tui/basic.exp: Add "layout split" test.
2019-07-27Add test for "layout asm"Tom Tromey2-0/+9
This adds a very simple test for "layout asm". gdb/testsuite/ChangeLog 2019-07-27 Tom Tromey <tom@tromey.com> * gdb.tui/basic.exp: Add "layout asm" test.
2019-07-27A virtual terminal for the test suiteTom Tromey3-0/+572
This patch implements a simple ANSI terminal emulator for the test suite. It is still quite basic, but it is good enough to allow some simple TUI testing to be done. gdb/testsuite/ChangeLog 2019-07-27 Tom Tromey <tom@tromey.com> * lib/tuiterm.exp: New file. * gdb.tui/basic.exp: New file.
2019-07-28Automatic date update in version.inGDB Administrator1-1/+1
2019-07-27Fix gdb.python/py-thrhandle.exp failures for -m32 multilibKevin Buettner2-7/+18
This patch fixes the following failures when testing with "target_board unix/-m32" using a x86_64-pc-linux-gnu native GDB. FAIL: gdb.python/py-thrhandle.exp: print thread for bogus handle thrs[3] FAIL: gdb.python/py-thrhandle.exp: print thread for bogus handle thrs[4] FAIL: gdb.python/py-thrhandle.exp: print thread id for thrs[0] FAIL: gdb.python/py-thrhandle.exp: print thread id for thrs[1] FAIL: gdb.python/py-thrhandle.exp: print thread id for thrs[2] FAIL: gdb.python/py-thrhandle.exp: thread 0: fetch thread handle from thread FAIL: gdb.python/py-thrhandle.exp: thread 0: verify that handles are the same FAIL: gdb.python/py-thrhandle.exp: thread 1: fetch thread handle from thread FAIL: gdb.python/py-thrhandle.exp: thread 1: verify that handles are the same FAIL: gdb.python/py-thrhandle.exp: thread 2: fetch thread handle from thread FAIL: gdb.python/py-thrhandle.exp: thread 2: verify that handles are the same I've written it so that it might work for other 64-bit host / 32-bit target combos too. gdb/ChangeLog: * linux-thread-db.c (thread_db_target::thread_handle_to_thread_info): Add case for debugging 32-bit target on 64-bit host. Revise comment.
2019-07-27Fix stepping bug associated with non-contiguous blocksKevin Buettner4-23/+62
I recently noticed the following behavior while debugging dw2-ranges-func-low-cold. This is one of the test programs associated with the test gdb.dwarf2/dw2-ranges-func.exp. (gdb) b 70 Breakpoint 1 at 0x401129: file dw2-ranges-func-lo-cold.c, line 70. (gdb) run Starting program: dw2-ranges-func-lo-cold Breakpoint 1, foo () at dw2-ranges-func-lo-cold.c:70 70 if (e) foo_cold (); /* foo foo_cold call */ (gdb) set var e=1 (gdb) step [Inferior 1 (process 12545) exited normally] This is incorrect. When stepping, we expect a step to occur. We do not expect the program to exit. Instead, we should see the following behavior: ... (gdb) set var e=1 (gdb) step foo () at dw2-ranges-func-lo-cold.c:54 54 baz (); /* foo_cold baz call */ (Note that I've shortened the paths in the above sessions to improve readability.) The bug is in fill_in_stop_func() in infrun.c. While working on non-contiguous address range improvements in 2018, I replaced the call to find_pc_partial_function() with a call to find_function_entry_range_from_pc(). Although this seemed like the right thing to do at the time, I now think that calling find_pc_partial_function (along with some other tweaks) is the right thing to do. For blocks with a single contiguous range, these functions do pretty much the same thing: when the function succeeds, the function name, start address, and end address are all filled in. Additionally, find_pc_partial_function contains an additional output parameter which is set to the block containing that PC. For blocks with non-contiguous ranges, find_pc_partial_function sets the start and end addresses to the start and end addresses of the range containing the pc. find_function_entry_range_from_pc does what it says; it sets the start and end addresses to those of the range containing the entry pc. The reason that I had thought that using the entry pc range was correct is due to the fact that fill_in_stop_func() contains some code for advancing past the function start and entry point. To do this, we'd need the range that contains the entry pc. However, when stepping, we actually want the range that contains the stop pc. If that range also contains the entry pc, we should then attempt to advance stop_func_start past the start offset and entry point. (I haven't thought very hard about the reason for advancing the stop_func_start in this manner. Since it's been there for quite a while, I'm assuming that it's still a good idea.) Back when I wrote the test case, I had included a test for doing the step shown in the example above. I had problems with it, however. At the time, I thought it was due to differing compiler versions, so I disabled that portion of the test. I have now reenabled those tests, but have left in place the logic which may be used to disable it. The changes to dw2-ranges-func.exp depend on my other recent changes to the file which have not been pushed yet. Finally, I'll note that the only caller of find_function_entry_range_from_pc() is/was fill_in_stop_func(). Once this commit goes in, it'll be dead code. I considered removing it, but I think that it ought to be used (instead of find_pc_partial_function) for determining the correct range to scan for prologue analysis, so I'm going to leave it in place for now. gdb/ChangeLog: * infrun.c (fill_in_stop_func): Use find_pc_partial_function instead of find_function_entry_range_from_pc. testsuite/ChangeLog: * gdb.dwarf2/dw2-ranges-func.exp (enable_foo_cold_stepping): Enable tests associated with this flag. Adjust regex referencing "foo_low" to now refer to "foo_cold" instead.
2019-07-27Improve test gdb.dwarf2/dw2-ranges-func.expKevin Buettner4-339/+495
The original dw2-ranges-func.exp test caused a function named foo to be created with two non-contiguous address ranges. In the C source file, a function named foo_low was incorporated into the function foo which was also defined in that file. The DWARF assembler is used to do this manipulation. The source file had been laid out so that foo_low would likely be placed (by the compiler and linker) at a lower address than foo(). The case where a range at a higher set of addresses (than foo) was not being tested. In a recent discussion on gdb-patches, it became clear that performing such tests are desirable because bugs were discovered which only became evident when the other range was located at high(er) addresses than the range containing the entry point for the function. This other (non entry pc) address range is typically used for "cold" code which executes less frequently. Thus, I renamed foo_low to foo_cold and renamed the C source file from dw-ranges-func.c to dw-ranges-func-lo.c. I then made a copy of this file, naming it dw-ranges-func-hi.c. (That was my intent anyway. According to git, I renamed dw-ranges-func.c to dw-ranges-func-hi.c and then modified it. dw-ranges-func-lo.c shows up as an entirely new file.) Within dw-ranges-func-hi.c, I changed the placement of foo_cold() along with some of the other functions so that foo_cold() would be at a higher address than foo() while also remaining non-contiguous. The two files, dw-ranges-func-lo.c and dw-ranges-func-hi.c, are essentially the same except for the placement of some of the functions therein. The tests in dw2-ranges-func.exp where then wrapped in a new proc named do_test which was then called in a loop from the outermost level. The loop causes each of the source files to have the same tests run upon them. I also added a few new tests which test functionality fixed by the other commits to this patch series. Due to the reorganization of the file, it's hard to identify these changes in the patch. So, here are the tests which were added: with_test_prefix "no-cold-names" { # Due to the calling sequence, this backtrace would normally # show function foo_cold for frame #1. However, we don't want # this to be the case due to placing it in the same block # (albeit at a different range) as foo. Thus it is correct to # see foo for frames #1 and #2. It is incorrect to see # foo_cold at frame #1. gdb_test_sequence "bt" "backtrace from baz" { "\[\r\n\]#0 .*? baz \\(\\) " "\[\r\n\]#1 .*? foo \\(\\) " "\[\r\n\]#2 .*? foo \\(\\) " "\[\r\n\]#3 .*? main \\(\\) " } # Doing x/2i foo_cold should show foo_cold as the first symbolic # address and an offset from foo for the second. We also check to # make sure that the offset is not too large - we don't GDB to # display really large offsets that would (try to) wrap around the # address space. set foo_cold_offset 0 set test "x/2i foo_cold" gdb_test_multiple $test $test { -re " (?:$hex) <foo_cold>.*?\n (?:$hex) <foo\[+-\](\[0-9\]+)>.*${gdb_prompt}" { set foo_cold_offset $expect_out(1,string) pass $test } } gdb_assert {$foo_cold_offset <= 10000} "offset to foo_cold is not too large" # Likewise, verify that second address shown by "info line" is at # and offset from foo instead of foo_cold. gdb_test "info line *foo_cold" "starts at address $hex <foo_cold> and ends at $hex <foo\[+-\].*?>.*" } When run against a GDB without the requisite bug fixes (from this patch series), these 6 failures should be seen: FAIL: gdb.dwarf2/dw2-ranges-func.exp: lo-cold: no-cold-names: backtrace from baz (pattern 4) FAIL: gdb.dwarf2/dw2-ranges-func.exp: lo-cold: no-cold-names: x/2i foo_cold FAIL: gdb.dwarf2/dw2-ranges-func.exp: lo-cold: no-cold-names: info line *foo_cold FAIL: gdb.dwarf2/dw2-ranges-func.exp: hi-cold: no-cold-names: backtrace from baz (pattern 3) FAIL: gdb.dwarf2/dw2-ranges-func.exp: hi-cold: no-cold-names: x/2i foo_cold FAIL: gdb.dwarf2/dw2-ranges-func.exp: hi-cold: no-cold-names: info line *foo_cold gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-ranges-func.c: Rename to... * gdb.dwarf2/dw2-ranges-func-lo-cold.c: ...this. * gdb.dwarf2/dw2-ranges-func-lo-cold.c (foo_low): Change name to foo_cold. Revise comments to match. * gdb.dwarf2/dw2-ranges-func-hi-cold.c: New file. * gdb.dwarf2/dw2-ranges-func.exp (do_test): New proc. Existing tests were wrapped into this proc; Call do_test in loop from outermost level. (foo_low): Rename all occurrences to "foo_cold". (backtrace from baz): New test. (x2/i foo_cold): New test. (info line *foo_cold): New test.
2019-07-27dwarf2-frame.c: Fix FDE processing bug involving non-contiguous rangesKevin Buettner2-1/+14
In the course of revising the test case for gdb.dwarf2/dw2-ranges-func.exp, I added a new .c file which would cause the "cold" range to be at a higher address than the rest of the function. In these tests, the range in question isn't really cold in the sense that a compiler has determined that it'll be executed less frequently. Instead, it's simply the range that does not include the entry pc. These tests are intended to mimic the output of such a compiler, so I'll continue to refer to this range as "cold" in the following discussion. The original test case had only tested a cold range placed at lower addresses than the rest of the function. During testing of the new code where the cold range was placed at higher addresses, I found that I could produce the following backtrace: (gdb) bt #0 0x0000000000401138 in baz () at dw2-ranges-func-hi-cold.c:72 #1 0x0000000000401131 in foo_cold () at dw2-ranges-func-hi-cold.c:64 #2 0x000000000040111e in foo () at dw2-ranges-func-hi-cold.c:50 #3 0x0000000000401144 in main () at dw2-ranges-func-hi-cold.c:78 This is correct, except that we'd like to see foo() listed instead of foo_cold(). (I handle that problem in another patch.) Now look at what happens for a similar backtrace where the cold range is at a lower address than the foo's entry pc: (gdb) bt #0 0x000000000040110a in baz () at dw2-ranges-func-lo-cold.c:48 #1 0x0000000000401116 in foo () at dw2-ranges-func-lo-cold.c:54 #2 0x00007fffffffd4c0 in ?? () #3 0x0000000000401138 in foo () at dw2-ranges-func-lo-cold.c:70 Note that the backtrace doesn't go all the way back to main(). Moreover, frame #2 is messed up. I had seen this behavior when I had worked on the non-contiguous address problem last year. At the time I convinced myself that the mangled backtrace was "okay" since we're doing strange things with the DWARF assembler. We're taking a function called foo_cold (though it was originally called foo_low - my recent changes to the test case changed the name) and via the magic of the DWARF assembler, we're combining it into a separate (non-contiguous) range for foo. Thus, it was a surprise to me when I got a good and complete backtrace when the cold symbol is placed at an address that's greater than entry pc. The function dwarf2_frame_cache (in dwarf2-frame.c) is making this call: if (get_frame_func_if_available (this_frame, &entry_pc)) ... If that call succeeds (returns a true value), the FDE is then processed up to the entry pc. It doesn't make sense to do this, however, when the FDE in question does not contain the entry pc. This can happen when the function in question is comprised of more than one (non-contiguous) address range. My fix is to add some comparisons to the test above to ensure that ENTRY_PC is within the address range covered by the FDE. gdb/ChangeLog: * dwarf2-frame.c (dwarf2_frame_cache): Don't decode FDE instructions for entry pc when entry pc is out of range for that FDE.
2019-07-27Restrict use of minsym names when printing addresses in disassembled codeKevin Buettner4-16/+50
build_address_symbolic contains some code which causes it to prefer the minsym over the the function symbol in certain cases. The cases where this occurs are the same as the "certain pathological cases" that used to exist in find_frame_funname(). This commit largely disables that code; it will only prefer the minsym when the address of minsym is identical to that of the address under consideration AND the function address for the symbtab sym is not the same as the address under consideration. So, without this change, when using the dw2-ranges-func-lo-cold executable from the gdb.dwarf2/dw2-ranges-func.exp test, GDB exhibits the following behavior: (gdb) x/5i foo_cold 0x40110d <foo+4294967277>: push %rbp 0x40110e <foo+4294967278>: mov %rsp,%rbp 0x401111 <foo+4294967281>: callq 0x401106 <baz> 0x401116 <foo+4294967286>: nop 0x401117 <foo+4294967287>: pop %rbp On the other hand, still without this change, using the dw2-ranges-func-hi-cold executable from the same test, GDB does this instead: (gdb) x/5i foo_cold 0x401128 <foo_cold>: push %rbp 0x401129 <foo_cold+1>: mov %rsp,%rbp 0x40112c <foo_cold+4>: callq 0x401134 <baz> 0x401131 <foo_cold+9>: nop 0x401132 <foo_cold+10>: pop %rbp This is inconsistent behavior. When foo_cold is at a lower address than the function's entry point, the symtab symbol (foo) is displayed along with a large positive offset which would wrap around the address space if the address space were only 32 bits wide. (A later patch fixes this problem by displaying negative offsets.) This commit makes the behavior uniform for both the "lo-cold" and "hi-cold" cases: lo-cold: (gdb) x/5i foo_cold 0x40110d <foo_cold>: push %rbp 0x40110e <foo-18>: mov %rsp,%rbp 0x401111 <foo-15>: callq 0x401106 <baz> 0x401116 <foo-10>: nop 0x401117 <foo-9>: pop %rbp hi-cold: (gdb) x/5i foo_cold 0x401128 <foo_cold>: push %rbp 0x401129 <foo+35>: mov %rsp,%rbp 0x40112c <foo+38>: callq 0x401134 <baz> 0x401131 <foo+43>: nop 0x401132 <foo+44>: pop %rbp In both cases, the symbol shown for the address at which foo_cold resides is shown as <foo_cold>. Subsequent offsets are shown as either negative or positive offsets from the entry pc for foo. When disassembling a function, care must be taken to NOT display <+0> as the offset for the second range. For this reason, I found it necessary to add the "prefer_sym_over_minsym" parameter to build_address_symbolic. The type of this flag is a bool; do_demangle ought to be a bool also, so I made this change at the same time. gdb/ChangeLog: * valprint.h (build_address_symbolic): Add "prefer_sym_over_minsym" parameter. Change type of "do_demangle" to bool. * disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): Pass suitable "prefer_sym_over_minsym" flag to build_address_symbolic(). Don't output "+" for negative offsets. * printcmd.c (print_address_symbolic): Update invocation of build_address_symbolic to include a "prefer_sym_over_minsym" flag. (build_address_symbolic): Add "prefer_sym_over_minsym" parameter. Restrict cases in which use of minimal symbol is preferred to that of a found symbol. Update comments.
2019-07-27Prefer symtab symbol over minsym for function names in non-contiguous blocksKevin Buettner2-56/+20
The discussion on gdb-patches which led to this patch may be found here: https://www.sourceware.org/ml/gdb-patches/2019-05/msg00018.html Here's a brief synopsis/analysis: Eli Zaretskii, while debugging a Windows emacs executable, found that functions comprised of more than one (non-contiguous) address range were not being displayed correctly in a backtrace. This is the example that Eli provided: (gdb) bt #0 0x76a63227 in KERNELBASE!DebugBreak () from C:\Windows\syswow64\KernelBase.dll #1 0x012e7b89 in emacs_abort () at w32fns.c:10768 #2 0x012e1f3b in print_vectorlike.cold () at print.c:1824 #3 0x011d2dec in print_object (obj=<optimized out>, printcharfun=XIL(0), escapeflag=true) at print.c:2150 The function print_vectorlike consists of two address ranges, one of which contains "cold" code which is expected to not execute very often. There is a minimal symbol, print_vectorlike.cold.65, which is the address of the "cold" range. GDB is prefering this minsym over the the name provided by the DWARF info due to some really old code in GDB which handles "certain pathological cases". This comment reads as follows: /* In certain pathological cases, the symtabs give the wrong function (when we are in the first function in a file which is compiled without debugging symbols, the previous function is compiled with debugging symbols, and the "foo.o" symbol that is supposed to tell us where the file with debugging symbols ends has been truncated by ar because it is longer than 15 characters). This also occurs if the user uses asm() to create a function but not stabs for it (in a file compiled with -g). So look in the minimal symbol tables as well, and if it comes up with a larger address for the function use that instead. I don't think this can ever cause any problems; there shouldn't be any minimal symbols in the middle of a function; if this is ever changed many parts of GDB will need to be changed (and we'll create a find_pc_minimal_function or some such). */ In an earlier version of this patch, I had left the code for the pathological case intact, but those who reviwed that patch recommended removing it. So that's what I've done - I've removed it. gdb/ChangeLog: * stack.c (find_frame_funname): Remove code which preferred minsym over symtab sym in "certain pathological cases".
2019-07-27Automatic date update in version.inGDB Administrator1-1/+1
2019-07-26Fix return type typo in obsd-nat.c that breaks build on OpenBSDBrian Callahan2-1/+7
To recap the bug report: Commit a068643 introduced a small typo that breaks the gdb build on OpenBSD. Line 38 of obsd-nat.c needs to be changed from std::sring to std::string. gdb/ChangeLog 2019-07-26 Brian Callahan <bcallah@openbsd.org> PR gdb/24839: * gdb/obsd-nat.c (obsd_nat_target::pid_to_str): Fix typo in return type.
2019-07-26[gdb/testsuite] Fix unterminated string in i386-pkru.expTom de Vries2-1/+5
I ran into this error: ... ERROR: tcl error sourcing gdb/testsuite/gdb.arch/i386-pkru.exp. ERROR: missing " while executing "untested "" invoked from within "if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ [list debug additional_flags=${comp_flags}]] } { untested "failed to c..." (file "gdb/testsuite/gdb.arch/i386-pkru.exp" line 25) invoked from within ... caused by: ... untested "failed to compile x86 PKEYS test. ... Fix the unterminated string. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-07-26 Tom de Vries <tdevries@suse.de> * gdb.arch/i386-pkru.exp: Fix unterminated string.
2019-07-26PR24798, buffer overflow in process_cu_tu_indexAlan Modra2-29/+32
PR 24798 * dwarf.c (process_cu_tu_index): Avoid integer overflow on 64-bit systems by casting ncols and nslots expressions to size_t. Display number of columns and slots before giving up due to buffer overflow. Use %u to display unsigned ints. Perform more pointer wrap tests.
2019-07-26Begone elf_linkerAlan Modra3-7/+6
This field effectively became usused a long time ago, perhaps as early as 1994. * elf-bfd.h (struct output_elf_obj_tdata): Delete "linker" field. (elf_linker): Don't define. * elflink.c (bfd_elf_final_link): Don't set elf_linker.
2019-07-26Ajdust lto-3r and lto-5r tests for powerpc64Alan Modra3-2/+7
* testsuite/ld-plugin/lto-3r.d: Accept D for powerpc64 descriptors. * testsuite/ld-plugin/lto-5r.d: Likewise.
2019-07-26Automatic date update in version.inGDB Administrator1-1/+1
2019-07-25Fix comment about the signature of add_separate_debug_fileChristian Biesinger2-2/+8
Also fixes the date in the changelog of my last commit. gdb/ChangeLog: 2019-07-25 Christian Biesinger <cbiesinger@google.com> * python/py-objfile.c (add_separate_debug_file): Fix comment about this function's Python signature.
2019-07-25[gdb/testsuite] Test skip_libstdcxx_probe_tests in mi-catch-cpp-exceptions.expTom de Vries4-44/+88
On a system without SDT probes in libstdc++, we run into: ... FAIL: gdb.mi/mi-catch-cpp-exceptions.exp: all with invalid regexp: run until \ breakpoint in main (unknown output after running) ... The test-case uses a regexp argument for the catch throw/rethrow/catch command, which is only supported on systems with SDT probes in libstdc++. Fix this by marking the portions of the test-case that use a regexp argument as unsupported on a system without SDT probes. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-07-25 Tom de Vries <tdevries@suse.de> PR testsuite/24830 * gdb.mi/mi-catch-cpp-exceptions.exp: Call mi_skip_libstdcxx_probe_tests, and skip unsupported tests. * lib/gdb.exp (skip_libstdcxx_probe_tests_prompt): Factor out of ... (skip_libstdcxx_probe_tests): ... here. * lib/mi-support.exp (mi_skip_libstdcxx_probe_tests): New proc.
2019-07-25Fix attributation of DWARF augmentation patch.Nick Clifton1-1/+1
2019-07-25Have readelf and objdump display the contents of the DWARF augmentation data ↵Tom de Vries2-1/+27
as a string, if it is printable. PR 24809 * dwarf.c (display_debug_names): Display the contents of the augmentation string, if it is printable.
2019-07-25When linking binary files into MIPS executables, default to MIPS 3 ↵YunQiang Su2-0/+12
emaulation for 64-bit objects. PR 24832 * elfxx-mips.c (mips_set_isa_flags): Default to MIPS 3 for 64-bit mips inputs.
2019-07-25Stop an illegal memory access by readelf when parsing a corrupt MIPS binary ↵Nick Clifton2-4/+41
file. PR 24837 * readelf.c (process_mips_specific): Check for buffer overflow before reading reginfo information.
2019-07-24Allow passing a block to lookup_global_symbol_from_objfileChristian Biesinger6-5/+23
This has no behavior change in itself, but allows a future patch to add a function to the Python API to look up symbols in the static block. gdb/ChangeLog: 2019-07-24 Christian Biesinger <cbiesinger@google.com> * compile/compile-object-load.c (compile_object_load): Pass GLOBAL_SCOPE. * solib-spu.c (spu_lookup_lib_symbol): Pass GLOBAL_SCOPE. * solib-svr4.c (elf_lookup_lib_symbol): Pass GLOBAL_SCOPE. * symtab.c (lookup_global_symbol_from_objfile): Add a scope parameter. * symtab.h (lookup_global_symbol_from_objfile): Likewise.
2019-07-25Automatic date update in version.inGDB Administrator1-1/+1
2019-07-24[gdb/testsuite] Fix implicit declaration of printf in gdb.objc/*.mTom de Vries4-0/+10
When running gdb.objc/objcdecode.exp we get: ... objcdecode.m: In function '-[Decode multipleDef]': objcdecode.m:14:3: warning: incompatible implicit declaration of built-in \ function 'printf' printf("method multipleDef\n"); ^~~~~~ objcdecode.m:14:3: note: include '<stdio.h>' or provide a declaration of \ 'printf' ... Fix this in the three gdb.objc/*.m test-cases by including stdio.h. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-07-24 Tom de Vries <tdevries@suse.de> PR testsuite/24807 * gdb.objc/basicclass.m: Include stdio.h. * gdb.objc/nondebug.m: Same. * gdb.objc/objcdecode.m: Same.
2019-07-24Revert "Remove tests that test __gnu_lto_v1 symbol."H.J. Lu4-0/+27
Revert commit 8c728a9d93e2342c57039fcdd6e4a502875b9e09 Author: Martin Liska <mliska@suse.cz> Date: Mon Jul 22 14:23:32 2019 +0200 Remove tests that test __gnu_lto_v1 symbol. since outputs of these tests are used by later tests. Check the normal symbol, foo, instead of __gnu_lto_v.*, which GCC stopped emitting after r273662. * testsuite/ld-plugin/lto-3r.d: Restored. Check foo instead of __gnu_lto_v.*. * testsuite/ld-plugin/lto-5r.d: Likewise. * testsuite/ld-plugin/lto.exp: Run lto-3r and lto-5r tests.
2019-07-24[gdb/testsuite] Fix infoline-reloc-main-from-zero.exp compilationTom de Vries2-1/+7
When running gdb.base/infoline-reloc-main-from-zero.exp, I see: ... Running gdb/testsuite/gdb.base/infoline-reloc-main-from-zero.exp ... gdb compile failed, ld: infoline-reloc-main-from-zero: \ not enough room for program headers, try linking with -N ld: final link failed: bad value collect2: error: ld returned 1 exit status UNTESTED: gdb.base/infoline-reloc-main-from-zero.exp: infoline-reloc-main-from-zero.exp UNTESTED: gdb.base/infoline-reloc-main-from-zero.exp: failed to compile ... Fix this by following the suggestion: ... -set opts {debug "additional_flags=-nostdlib -emain -Wl,-Ttext=0x00"} +set opts {debug "additional_flags=-nostdlib -emain -Wl,-Ttext=0x00 -Wl,-N"} ... Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-07-24 Tom de Vries <tdevries@suse.de> PR testsuite/24612 * gdb.base/infoline-reloc-main-from-zero.exp: Add -Wl,-N to additional_flags.
2019-07-24[ARC] [COMMITTED] Fix formatting.Claudiu Zissulescu2-68/+82
Small formatting fixes. 2019-07-24 Claudiu Zissulescu <claziss@synopsys.com> * elf32-arc.c (bfd_get_32_me): Add a small description, fix formatting. (reloc_type_to_name): Fix formatting. (arc_elf_object_p): Likewise. (debug_arc_reloc): Likewise. (arc_do_relocation): Likewise.
2019-07-24Update the Swedish translation for the gas sub-directory.Nick Clifton2-4191/+5083
2019-07-24[ARC] Update disassembler opcode selectionClaudiu Zissulescu4-2/+35
New instruction are added, and some of them are overlapping. Update disassembler to correctly recognize them. Introduce nps400 option. opcodes/ xxxx-xx-xx Claudiu Zissulescu <claziss@synopsys.com> * arc-dis.c (skip_this_opcode): Check also for 0x07 major opcodes, and MPY class instructions. (parse_option): Add nps400 option. (print_arc_disassembler_options): Add nps400 info. gas/ xxxx-xx-xx Claudiu Zissulescu <claziss@synopsys.com> * testsuite/gas/arc/nps400-6.d: Update test.
2019-07-24[ARC] Update ARC opcode tableClaudiu Zissulescu6-1461/+2263
Update ARC opcode table by cleaning up invalid instructions, and fixing wrong encodings. opcodes/ xxxx-xx-xx Claudiu Zissulescu <claziss@synopsys.com> * arc-ext-tbl.h (bspeek): Remove it, added to main table. (bspop): Likewise. (modapp): Likewise. * arc-opc.c (RAD_CHK): Add. * arc-tbl.h: Regenerate. include/ xxxx-xx-xx Claudiu Zissulescu <claziss@synopsys.com> * include/opcode/arc.h (FASTMATH): Add. (SWITCH): Likewise.
2019-07-24[ARC] Add linker relaxation.Claudiu Zissulescu5-0/+218
Add linker relaxation. The first relaxation added is converting GOTPC32 to PCREL relocations. This relaxation doesn't change the size of the binary. bfd/ xxxx-xx-xx Claudiu Zissulescu <claziss@synopsys.com> * elf32-arc.c (bfd_get_32_me): New function. (bfd_put_32_me): Likewise. (arc_elf_relax_section): Likewise. (bfd_elf32_bfd_relax_section): Define. ld/testsuite/ xxxx-xx-xx Claudiu Zissulescu <claziss@synopsys.com> * ld-arc/relax-local-pic.d: New test. * ld-arc/relax-local-pic.s: New file.
2019-07-24gdb/h8300-tdep.c: Fix register name in h8300h machine.Yoshinori Sato2-22/+42
H8/300H general register name "ER0" - "ER7". But gdb using "R0" - "R7". This changes register name "ER0" - "ER7" in h8300h machine mode. gdb/ChangeLog: * h8300-tdep.c (h8300_register_name_common): New. h8300_register_name): Use h8300_register_name_common. (h8300s_register_name): Likewise. (h8300sx_register_name): Likewise. (h8300h_register_nam): New. (h8300_gdbarch_init): Use h8300h_register_name in h8300h machine.
2019-07-24Fix ar so that it can correctly detect non-dash prefixed options that appear ↵Nick Clifton2-1/+19
after dash prefixed options. PR 13256 * ar.c (decode_options): Restart option scanning if no operation is detected and argument remain to be scanned.
2019-07-24Complain about mbind, ifunc, and unique in final_writeAlan Modra37-127/+198
It's not as good as complaining in gas/config/obj-elf.c since you lose any reference to the source file. bfd/ * elf-bfd.h (struct elf_backend_data): Return bfd_boolean from elf_backend_final_write_processing, don't pass linker arg. (_bfd_elf_final_write_processing): Update prototype. * elf.c (_bfd_elf_write_object_contents): Adjust call. (_bfd_elf_final_write_processing): Return error on incompatible OSABI and has_gnu_osabi. Remove linker arg. * elf-nacl.h (nacl_final_write_processing): Update prototype. * elf-vxworks.h (elf_vxworks_final_write_processing): Likewise. * elfxx-mips.h (_bfd_mips_final_write_processing): Likewise. (_bfd_mips_elf_final_write_processing): Likewise. * elf-hppa.h (elf_hppa_final_write_processing): Return status and remove linker arg. * elf-m10300.c (_bfd_mn10300_elf_final_write_processing): Likewise. * elf-nacl.c (nacl_final_write_processing): Likewise. * elf-vxworks.c (elf_vxworks_final_write_processing): Likewise. * elf32-arc.c (arc_elf_final_write_processing): Likewise. * elf32-arm.c (arm_final_write_processing): Likewise. (elf32_arm_final_write_processing): Likewise. (elf32_arm_nacl_final_write_processing): Likewise. (elf32_arm_vxworks_final_write_processing): Likewise. * elf32-avr.c (bfd_elf_avr_final_write_processing): Likewise. * elf32-bfin.c (elf32_bfin_final_write_processing): Likewise. * elf32-cr16.c (_bfd_cr16_elf_final_write_processing): Likewise. * elf32-cris.c (cris_elf_final_write_processing): Likewise. * elf32-h8300.c (elf32_h8_final_write_processing): Likewise. * elf32-lm32.c (lm32_elf_final_write_processing): Likewise. * elf32-m32r.c (m32r_elf_final_write_processing): Likewise. * elf32-m68k.c (elf_m68k_final_write_processing): Likewise. * elf32-mips.c (mips_vxworks_final_write_processing): Likewise. * elf32-msp430.c (bfd_elf_msp430_final_write_processing): Likewise. * elf32-nds32.c (nds32_elf_final_write_processing): Likewise. * elf32-or1k.c (or1k_elf_final_write_processing): Likewise. * elf32-pj.c (pj_elf_final_write_processing): Likewise. * elf32-ppc.c (ppc_final_write_processing): Likewise. (ppc_elf_final_write_processing): Likewise. (ppc_elf_vxworks_final_write_processing): Likewise. * elf32-sparc.c (sparc_final_write_processing): Likewise. (elf32_sparc_final_write_processing): Likewise. (elf32_sparc_vxworks_final_write_processing): Likewise. * elf32-v850.c (v850_elf_final_write_processing): Likewise. * elf32-xc16x.c (elf32_xc16x_final_write_processing): Likewise. * elf32-xtensa.c (elf_xtensa_final_write_processing): Likewise. * elf64-ia64-vms.c (elf64_vms_final_write_processing): Likewise. * elfnn-ia64.c (elfNN_ia64_final_write_processing): Likewise. * elfxx-mips.c (_bfd_mips_final_write_processing): Likewise. (_bfd_mips_elf_final_write_processing): Likewise. gas/ * config/obj-elf.c (obj_elf_section, obj_elf_type): Set has_gnu_osabi. * testsuite/gas/elf/section12a.d: Update xfails. * testsuite/gas/elf/section12b.d: Likewise.
2019-07-24Re: ELF final_write_processingAlan Modra4-20/+20
I missed some early exits from final_write_processing that mean _bfd_elf_final_write_processing could be missed. * elf-vxworks.c (elf_vxworks_final_write_processing): Don't return early. * elf32-arc.c (arc_elf_final_write_processing): Likewise. * elf32-xtensa.c (elf_xtensa_final_write_processing): Likewise.
2019-07-24Define ELF_OSABI for visiumAlan Modra6-6/+23
and update expected results for gas mbind tests. bfd/ * elf32-visium.c (visium_elf_post_process_headers): Don't set EI_OSABI header byte here. (ELF_OSABI): Define. gas/ * testsuite/gas/elf/section12a.d: xfail visium and cloudabi. * testsuite/gas/elf/section12b.d: Likewise. * testsuite/gas/elf/section13.d: Likewise.
2019-07-24PT_GNU_MBIND section mappingAlan Modra2-1/+8
* elf/internal.h (ELF_SECTION_IN_SEGMENT_1): Exclude non-alloc sections in GNU_MBIND segments.
2019-07-24Update expected info threads error messages in gdb.multi/tids.expTom de Vries2-7/+19
We currently have these FAILs: ... FAIL: gdb.multi/tids.exp: two inferiors: info threads -1 FAIL: gdb.multi/tids.exp: two inferiors: info threads -$one ... because we're expecting: ... Invalid thread ID: -1 ... but instead we have: ... Unrecognized option at: -1 ... This error message for info threads has changed since commit 54d6600669 'Make "info threads" use the gdb::option framework'. Update the test accordingly. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-07-24 Tom de Vries <tdevries@suse.de> PR testsuite/24831 * gdb.multi/tids.exp: Update error messages for info threads.
2019-07-24[gdb/testsuite] Fix info-types.exp for debug info from more than one fileTom de Vries2-2/+11
On openSUSE Leap 15.0, I get: ... FAIL: gdb.base/info-types.exp: l=c: info types FAIL: gdb.base/info-types.exp: l=c++: info types ... because the info type command prints info for files info-types.c, stddef.h, elf-init.c and init.c, while the regexp in the test-case expect only info for info-types.c. Fix this by extending the regexp. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-07-24 Tom de Vries <tdevries@suse.de> * gdb.base/info-types.exp: Allow info types to print info for more than one file.
2019-07-24Automatic date update in version.inGDB Administrator1-1/+1
2019-07-23Fix objdump's display of indirect strings in object files, which was broken ↵Nick Clifton3-6/+10
by the link following code. PR 24818 * objdump.c (is_relocateable): Delete. (load_specific_debug_section): Test the abfd for relocations directly, rather than relying upon is_relocateable. (dump_dwarf): Delete initlialization of is_relocateable.
2019-07-23Add missing ChangeLog entries forH.J. Lu1-0/+7
commit 8c728a9d93e2342c57039fcdd6e4a502875b9e09 Author: Martin Liska <mliska@suse.cz> Date: Mon Jul 22 14:23:32 2019 +0200 Remove tests that test __gnu_lto_v1 symbol.
2019-07-23[AArch64] Add support for GMID_EL1 register for +memtagKyrylo Tkachov6-1/+17
We're missing support for the GMID_EL1 system register from the Memory Tagging Extension in binutils. This is specified at: https://developer.arm.com/docs/ddi0595/latest/aarch64-system-registers/gmid_el1 This simple patch adds the support for this read-only register. Tested make check on gas.
2019-07-23[gdb/testsuite] Add missing initial prompt read in multidictionary.expTom de Vries2-0/+12
When running multidictionary.exp in conjunction with: ... $ stress -c $(($(cat /proc/cpuinfo | grep -c "^processor") + 1)) ... we get: ... Running gdb/testsuite/gdb.dwarf2/multidictionary.exp ... ERROR: Couldn't load multidictionary into gdb. === gdb Summary === nr of unresolved testcases 1 ... The multidictionary test-case needs -readnow, and achieves this using: ... gdb_spawn_with_cmdline_opts "-readnow" gdb_load ... but the initial gdb prompt is not read. Usually, the following gdb_load command accidentally consumes that initial prompt (at the gdb_expect for the kill command in gdb_file_cmd). But under high load, that doesn't happen and we run into the error. Fix this by consuming the initial gdb prompt after spawning gdb. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-07-23 Tom de Vries <tdevries@suse.de> PR testsuite/24842 * gdb.dwarf2/multidictionary.exp: Consume initial prompt after gdb_spawn_with_cmdline_opts.
2019-07-23[gdb][Arm]: gdb cannot step across CMSE secure entry function code.Srinath Parvathaneni5-0/+167
GDB is not able to execute "step" command on function calls of Armv8-M cmse secure entry functions. Everytime GNU linker come across definition of any cmse secure entry function in object file(s), it creates two new instructions secure gateway (sg) and original branch destination (b.w), place those two instructions in ".gnu.sgstubs" section of executable. Any function calls to these cmse secure entry functions is re-directed through secure gateway (sg) present in ".gnu.sgstubs" section. Example: Following is a function call to cmse secure entry function "foo": ... bl xxxx <foo> --->(a) ... <foo> xxxx: push {r7, lr} GNU linker on finding out "foo" is a cmse secure entry function, created sg and b.w instructions and place them in ".gnu.sgstubs" section (marked by c). The "bl" instruction (marked by a) which is a call to cmse secure entry function is modified by GNU linker (as marked by b) and call flow is re-directly through secure gateway (sg) in ".gnu.sgstubs" section. ... bl yyyy <foo> ---> (b) ... section .gnu.sgstubs: ---> (c) yyyy <foo> yyyy: sg // secure gateway b.w xxxx <__acle_se_foo> // original_branch_dest ... 0000xxxx <__acle_se_foo> xxxx: push {r7, lr} ---> (d) On invoking GDB, when the control is at "b" and we pass "step" command, the pc returns "yyyy" (sg address) which is a trampoline and which does not exist in source code. So GDB jumps to next line without jumping to "__acle_se_foo" (marked by d). The above details are published on the Arm website [1], please refer to section 5.4 (Entry functions) and section 3.4.4 (C level development flow of secure code). [1] https://developer.arm.com/architectures/cpu-architecture/m-profile/docs/ecm0359818/latest/armv8-m-security-extensions-requirements-on-development-tools-engineering-specification This patch fixes above problem by returning target pc "xxxx" to GDB on executing "step" command at "b", so that the control jumps to "__acle_se_foo" (marked by d). gdb/ChangeLog: * arm-tdep.c (arm_skip_cmse_entry): New function. (arm_is_sgstubs_section): New function. (arm_skip_stub): Add call to arm_skip_cmse_entry function. gdb/testsuite/ChangeLog: * gdb.arch/arm-cmse-sgstubs.c: New test. * gdb.arch/arm-cmse-sgstubs.exp: New file.
2019-07-23Remove tests that test __gnu_lto_v1 symbol.Martin Liska3-20/+0
ld/ChangeLog: 2019-07-22 Martin Liska <mliska@suse.cz> * testsuite/ld-plugin/lto-3r.d: Remove. * testsuite/ld-plugin/lto-5r.d: Remove. * testsuite/ld-plugin/lto.exp: Do not run lto-3r and lto-5r tests.
2019-07-23SHF_GNU_MBIND requires ELFOSABI_GNUAlan Modra14-108/+205
When SHF_GNU_MBIND was added in the SHF_LOOS to SHF_HIOS range, it should have required ELFOSABI_GNU since these flags are already in use by other OSes. HPUX SHF_HP_TLS in fact has the same value. That means no place in binutils should test SHF_GNU_MBIND without first checking OSABI, and SHF_GNU_MBIND should not be set without also setting OSABI. At least, that's the ideal, but the patch accepts SHF_GNU_MBIND on ELFOSABI_NONE object files since gas didn't always set OSABI. However, to reinforce the fact that SHF_GNU_MBIND isn't proper without a non-zero OSABI, readelf will display the flag as LOOS+0 if OSABI isn't set. The clash with SHF_HP_TLS means that hppa64-linux either has that flag on .tbss sections or supports GNU_MBIND, not both. (hppa64-linux users, if there are any, may have noticed that GNU ld since 2017 mysteriously aligned their .tbss sections to a 4k boundary. That was one consequence of SHF_HP_TLS being blindly interpreted as SHF_GNU_MBIND.) Since it seems that binutils, gdb, gcc, glibc, and the linux kernel don't care about SHF_HP_TLS I took that flag out of .tbss for hppa64-linux. bfd/ * elf-bfd.h (enum elf_gnu_osabi): Add elf_gnu_osabi_mbind. * elf.c (_bfd_elf_make_section_from_shdr): Set elf_gnu_osabi_mbind. (get_program_header_size): Formatting. Only test SH_GNU_MBIND when elf_gnu_osabi_mbind is set. (_bfd_elf_map_sections_to_segments): Likewise. (_bfd_elf_init_private_section_data): Likewise. (_bfd_elf_final_write_processing): Update comment. * elf64-hppa.c (elf64_hppa_special_sections): Move .tbss entry. (elf_backend_special_sections): Define without .tbss for linux. binutils/ * readelf.c (get_parisc_segment_type): Split off hpux entries.. (get_ia64_segment_type): ..and these.. (get_hpux_segment_type): ..to here. (get_segment_type): Condition GNU_MBIND on osabi. Use get_hpux_segment_type. (get_symbol_binding): Do not print UNIQUE for ELFOSABI_NONE. (get_symbol_type): Do not print IFUNC for ELFOSABI_NONE. gas/ * config/obj-elf.c (obj_elf_change_section): Don't emit a fatal error for non-SHF_ALLOC SHF_GNU_MBIND here. (obj_elf_parse_section_letters): Return SHF_GNU_MBIND in new gnu_attr param. (obj_elf_section): Adjust obj_elf_parse_section_letters call. Formatting. Set SHF_GNU_MBIND and elf_osabi from gnu_attr. Emit normal error for non-SHF_ALLOC SHF_GNU_MBIND and wrong osabi. (obj_elf_type): Set elf_osabi for ifunc. * testsuite/gas/elf/section12a.d: xfail msp430 and hpux. * testsuite/gas/elf/section12b.d: Likewise. * testsuite/gas/elf/section13.d: Likewise. * testsuite/gas/elf/section13.l: Adjust expected error. ld/ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Condition SHF_GNU_MBIND on osabi. Set output elf_gnu_osabi_mbind.