summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Don't trust templates from DW_AT_nameusers/simark/template-suffixSimon Marchi2018-02-044-3/+40
| | | | | | | | | | | | | | | | | | | | | | | | | With gcc 8 (and clang?) the non-type template arguments (constants) don't include the integer suffixes anymore. For example, with template <unsigned int X> class foo { ... }; foo<10u> used to generate foo<10u> as the DW_AT_name, now it generates foo<10>. This is a problem when things look up "foo<10u>" and don't find it. For example, when trying to print an instance of that class through a base class pointer, GDB would first demangle the symbol for that class' vtable, which would give "vtable for foo<10u>". GDB would then take the "foo<10u>" from that string and try to look up the type. With the new DW_AT_name, it would fail to look it up, and fail to print the value. This patch makes it so GDB doesn't trust the templates contained in DW_AT_name. Instead, it re-builds the name from the DW_AT_template_* DIES in the format that it expects (with the integer suffixes).
* ld/testsuite: Replace -Sw with -SW for readelfH.J. Lu2018-02-0410-9/+21
| | | | | | | | | | | | | | -Sw is a typo. It should be -SW for readelf. * testsuite/ld-i386/lea1d.d: Replace -Sw with -SW. * testsuite/ld-i386/lea1e.d: Likewise. * testsuite/ld-i386/lea1f.d: Likewise. * testsuite/ld-x86-64/lea1g.d: Likewise. * testsuite/ld-x86-64/lea1h.d: Likewise. * testsuite/ld-x86-64/lea1i.d: Likewise. * testsuite/ld-x86-64/lea1j.d: Likewise. * testsuite/ld-x86-64/lea1k.d: Likewise. * testsuite/ld-x86-64/lea1l.d: Likewise.
* Automatic date update in version.inGDB Administrator2018-02-041-1/+1
|
* gdb/testsuite: Remove use of dejagnu cleanup procAndrew Burgess2018-02-033-3/+5
| | | | | | | | | | | The 'cleanup' proc has been removed from dejagnu (Feb 15 2016). The proc has not done anything useful since at least 2001 so removing these calls should be harmless. gdb/testsuite/ChangeLog: * config/sid.exp (gdb_target_sid): Remove use of cleanup. * config/sim.exp (gdb_target_sim): Remove use of cleanup.
* Remove PROVIDE() qualifiers from definition of __CTOR_LIST__ and ↵Nick Clifton2018-02-034-8/+56
| | | | | | | | | | | | __DTOR_LIST__ symbols in PE linker scripts. PR 22762 * scripttempl/pe.sc: Remove PROVIDE()s from __CTOR_LIST__ and __DTOR_LIST__ symbols. Add a comment explaining why this is necessary. * scripttemp/pep.sc: Likewise. * ld.texinfo (PROVIDE): Add a note about the effect of common symbols.
* Disable -shared support in nios2-elf-ld.Sandra Loosemore2018-02-022-1/+4
| | | | | | 2018-02-03 Sandra Loosemore <sandra@codesourcery.com> * emulparams/nios2elf.sh (GENERATE_SHLIB_SCRIPT): Don't set.
* Add support for DWARF-4 line number tables.Cary Coutant2018-02-023-1/+20
| | | | | | | | | | | Reads the maximum_operations_per_instruction field, added in DWARF-4 to the line number program header. gold/ * PR gold/22776 * dwarf_reader.cc (Sized_dwarf_line_info::read_header_prolog): Add support for DWARF-4 line number tables. * dwarf_reader.h (Sized_dwarf_line_info::max_ops_per_insn): New field.
* Automatic date update in version.inGDB Administrator2018-02-031-1/+1
|
* RISC-V: Fix --wrap and relaxation conflict.Jim Wilson2018-02-022-9/+49
| | | | | | | | | | | bfd/ PR ld/22756 * elfnn-riscv.c (riscv_relax_delete_bytes): New parameter link_info. If link_info->wrap_hash, check for a duplicate symbol and ignore. (_bfd_riscv_relax_call, bfd_riscv_relax_lui, _bfd_riscv_relax_tls_le): Pass new argument to riscv_relax_delete_bytes. (_bfd_riscv_relax_align, _bfd_riscv_relax_delete): Likewise. Remove ATTRIBUTE_UNUSED from link_info parameter.
* MI: Allow non-raw varobj evaluationLeszek Swirski via gdb-patches2018-02-027-2/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make the MI variable object expression evaluation, with the -var-evaluate-expression command, recursively call pretty printers, to match the output of normal expression printing. Consider the following code: struct Foo { int val; }; struct Wrapper { Foo foo; }; int main() { Wrapper w; w.foo.val = 23; } and this pretty printer file: import gdb.printing class FooPrinter: def __init__(self, val): self.val = val def to_string(self): return "Foo" + str(self.val["val"]) class WrapperPrinter: def __init__(self, val): self.val = val def to_string(self): return self.val["foo"] test_printer = gdb.printing.RegexpCollectionPrettyPrinter("test") test_printer.add_printer('Foo', '^Foo$', FooPrinter) test_printer.add_printer('Wrapper', '^Wrapper$', WrapperPrinter) gdb.printing.register_pretty_printer(None, test_printer) Setting a breakpoint at the end of the function, we call the following commands: -enable-pretty-printing ^done -var-create var_w @ w ^done,name="var_w",numchild="0",value="{val = 23}",type="Wrapper",dynamic="1",has_more="0" -var-create var_w_foo @ w.foo ^done,name="var_w_foo",numchild="0",value="Foo23",type="Foo",dynamic="1",has_more="0" -var-evaluate-expression var_w ^done,value="{val = 23}" -var-evaluate-expression var_w_foo ^done,value="Foo23" -data-evaluate-expression w ^done,value="Foo23" -data-evaluate-expression w.foo ^done,value="Foo23" So, in the -var-evaluate-expression var_w case, we print the "raw" value of w.foo, while in the -data-evaluate-expression w case, we print the pretty printed w.foo value. After this patch, all of the above print "Foo23". gdb/ChangeLog: * varobj.c (varobj_formatted_print_options): Allow recursive pretty printing if pretty printing is enabled. gdb/testsuite/ChangeLog: * gdb.python/py-prettyprint.c (struct to_string_returns_value_inner, struct to_string_returns_value_wrapper): New. (main): Add tsrvw variable. * gdb.python/py-prettyprint.py (ToStringReturnsValueInner, ToStringReturnsValueWrapper): New classes. (register_pretty_printers): Register new pretty-printers. * gdb.python/py-prettyprint.exp (run_lang_tests): Test printing recursive pretty printer. * gdb.python/py-mi.exp: Likewise.
* binutils/riscv: Register names in DWARF outputAndrew Burgess2018-02-024-0/+40
| | | | | | | | | | | | | | | Adds a register name table for RiscV so that objdump and readelf can both use better register names. binutils/ChangeLog: * dwarf.c (dwarf_regnames_riscv): New register name table. (init_dwarf_regnames_riscv): New function. (init_dwarf_regnames): Add call to initialise RiscV register names. * dwarf.h (init_dwarf_regnames_riscv): Declare. * objdump.c (dump_dwarf): Add call to initialise RiscV register names.
* LD/testsuite: Pass $AFLAGS_PIC to GAS for PIC assemblyMaciej W. Rozycki2018-02-022-55/+59
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add $AFLAGS_PIC flags for PIC assembly to a number of tests missing them and remove `tic6x-*-*' XFAIL annotations from them, previously added to paper over: .../ld-new: warning: generating a shared library containing non-PID code error messages produced due to `-mpic -mpid=near' GAS options having not been used. Such errors now do not happen anymore, removing: XFAIL: Build shared library for pr14170 XFAIL: PR ld/21703 shared XFAIL: Build shared library for broken linker script test XFAIL: Build pr17068.so XFAIL: -Bsymbolic-functions XFAIL: Build pr20995.so XFAIL: Build pr22374 shared library with `tic6x-elf' and `tic6x-uclinux' targets. These tests now pass all except for: FAIL: PR ld/21703 shared which is now due to a different reason, as follows: extra regexps in .../ld/testsuite/ld-elf/pr21703-shared.sd starting with "^Symbol table '\.dynsym' contains [0-9]+ entries:$" EOF from dump.out FAIL: PR ld/21703 shared The addition of $AFLAGS_PIC requires the affected test cases to use the `list' command rather than `{}' characters to create a list, to avoid the quoting property `{}' also have in TCL. Consequently the change is slightly more extensive than it could otherwise be. ld/ * testsuite/ld-elf/shared.exp: Add $AFLAGS_PIC throughout to PIC assembly builds where missing and remove `tic6x-*-*' XFAIL markings accordingly.
* PowerPC64, don't relocate nopsAlan Modra2018-02-022-4/+14
| | | | | | | | | | | This fixes a "bug" in that nops emitted as part of code optimization were being relocated. As it happens the relocation value was always zero so the nop wasn't changed. Whew! I've also moved the use of "howto" later since I was caught out in some recent code changes with the howto not matching r_type. * elf64-ppc.c (ppc64_elf_relocate_section): Don't relocate nops emitted for toc sequence optimization. Set and use "howto" later.
* Do not classify C struct members as a filenameLeszek Swirski2018-02-015-24/+74
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There is existing logic in C/C++ expression parsing to avoid classifying names as a filename when they are a field on the this object. This change extends this logic to also avoid classifying names after a struct-op (-> or .) as a filename, which otherwise causes a syntax error. Thus, it is now possible in the file #include <map> struct D { void map(); } D d; to call (gdb) print d.map() where previously this would have been a syntax error. Tested on gdb.cp/*.exp gdb/ChangeLog: * c-exp.y (lex_one_token, classify_name, yylex): Don't classify names after a structop as a filename gdb/testsuite/ChangeLog: * gdb.cp/filename.cc, gdb.cp/filename.exp: Test that member functions with the same name as an include file are parsed correctly.
* Automatic date update in version.inGDB Administrator2018-02-021-1/+1
|
* Rewrite arm_record_coproc_data_proc and arm_record_data_proc_misc_ld_strYao Qi2018-02-012-172/+334
| | | | | | | | | | | | | | When I triage some reverse debugging test fails on arm-linux, I find arm_record_coproc_data_proc and arm_record_data_proc_misc_ld_str is not friendly to instruction encoding on ARM ARM. This patch rewrites them, in a way match more closely to the manual. gdb: 2018-02-01 Yao Qi <yao.qi@linaro.org> * arm-tdep.c (arm_record_data_proc_misc_ld_str): Rewrite it. (arm_record_coproc_data_proc): Likewise.
* set ret signed in arm_record_extension_spaceYao Qi2018-02-012-1/+5
| | | | | | | | | | Variable 'ret' should be int rather than unsigned, as it can be -1. gdb: 2018-02-01 Yao Qi <yao.qi@linaro.org> * arm-tdep.c (arm_record_extension_space): Change ret to signed.
* Fix gdb.base/attach.exp fails when gdb is configured --with-sysroot=/Yao Qi2018-02-012-9/+11
| | | | | | | | | | | | | | | | | | | | | | | I see some test fails in gdb.base/attach.exp when gdb is configured --with-sysroot=/. FAIL: gdb.base/attach.exp: attach2, with no file FAIL: gdb.base/attach.exp: load file manually, after attach2 (re-read) (got interactive prompt) FAIL: gdb.base/attach.exp: attach when process' a.out not in cwd If gdb is configured this way, sysroot is "/" in default, and if binfile is a absolute path, the regexp pattern $sysroot$escapedbinfile is incorrect. There are different ways to fix it, but I don't want to complicate the test, so I choose this naive way. gdb/testsuite: 2018-02-01 Yao Qi <yao.qi@linaro.org> * gdb.base/attach.exp (do_attach_tests): Set sysroot to "\[^\r\n\]*".
* Fix compile time warnings building the binutils with clang.Simon Marchi2018-02-015-5/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | bfdI would like to fix instances of the following warning, when building with clang with no special CFLAGS other than -g3 -O0. /home/emaisin/src/binutils-gdb/bfd/elflink.c:5425:45: error: performing pointer arithmetic on a null pointer has undefined behavior [-Werror,-Wnull-pointer-arithmetic] return (struct elf_link_hash_entry *) 0 - 1; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ Replacing those with "(struct elf_link_hash_entry *) -1" gets rid of the warning. I wanted to check that it didn't change the resulting code, so I tried to build this: $ cat test.c int *before() { return (int *) 0 - 1; } int *after() { return (int *) - 1; } $ gcc -c test.c -g $ objdump -d test.o test.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <before>: 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: 48 c7 c0 fc ff ff ff mov $0xfffffffffffffffc,%rax b: 5d pop %rbp c: c3 retq 000000000000000d <after>: d: 55 push %rbp e: 48 89 e5 mov %rsp,%rbp 11: 48 c7 c0 ff ff ff ff mov $0xffffffffffffffff,%rax 18: 5d pop %rbp 19: c3 retq This shows that the previous code doesn't actually return -1 as the function documentation says, but the new one does, so it's kind of a bugfix. bfd * elf64-ppc.c (ppc64_elf_archive_symbol_lookup): Avoid pointer arithmetic on NULL pointer. * elflink.c (_bfd_elf_archive_symbol_lookup, elf_link_add_archive_symbols): Likewise. ld * ldexp.c (fold_name, exp_fold_tree_1): Avoid pointer arithmetic on NULL pointer.
* PR22769, crash when running 32-bit objdump on corrupted fileAlan Modra2018-02-012-2/+11
| | | | | | PR 22769 * objdump.c (load_specific_debug_section): Check for overflow when adding one to section size for a string section terminator.
* Automatic date update in version.inGDB Administrator2018-02-011-1/+1
|
* Fix testsuite/ld-elf/pr21964-5.cH.J. Lu2018-01-312-1/+5
| | | | | | Mark my_var as used. Otherwise it fails at -O2. * testsuite/ld-elf/pr21964-5.c (my_var): Mark as used.
* Fix for prologue processing on PowerPCNikola Prica2018-01-316-2/+117
| | | | | | | | | | | | | | | | | | | | | | One of conditions in skip_prologue() was never visited if there was mflr instruction that moves the link register to a register different than r0. This condition expects non shifted value of `lr_reg`. Previously offset of link register was never saved for registers different than r0. gdb/ChangeLog: 2018-01-31 Nikola Prica <nikola.prica@rt-rk.com> * rs6000-tdep.c (skip_prologue): Remove shifting for lr_reg and assign shifted lr_reg to fdata->lr_register when lr_reg is set. gdb/testsuite/ChangeLog: 2018-01-31 Nikola Prica <nikola.prica@rt-rk.com> * gdb.arch/powerpc-prologue-frame.s: New file. * gdb.arch/powerpc-prologue-frame.c: Likewise. * gdb.arch/powerpc-prologue-frame.exp: Likewise.
* LD/testsuite: Fix a typo s/scrip/script/ in `note-3.so' build test nameMaciej W. Rozycki2018-01-312-1/+5
| | | | | ld/ * testsuite/ld-elf/shared.exp: Fix a typo s/scrip/script/.
* MIPS/LD/testsuite: Correct dynamic links with VR4100, VR4300 and VR5000Maciej W. Rozycki2018-01-316-11/+51
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Correct LD test suite failures with VR4100, VR4300 and VR5000 bare metal MIPS/ELF targets which do not default to linking with shared libraries, which leads to link failures like: .../ld/ld-new: cannot find -lcomm-data FAIL: Common symbol override test or: .../ld/ld-new: attempted static link of dynamic object `tmpdir/pr14170.so' FAIL: PR ld/14170 removing: FAIL: Build pr22471b.so FAIL: Build pr22471 FAIL: Build pr22649-2b.so FAIL: Build pr22649-2d.so FAIL: Build pr22150 FAIL: PR ld/14170 FAIL: --gc-sections with __gxx_personality test failures. ld/ * testsuite/ld-elf/comm-data.exp: Pass `-call_shared' to links involving a shared library for `mips*vr4100*-*-elf*', `mips*vr4300*-*-elf*' and `mips*vr5000*-*-elf*' targets. * testsuite/ld-elf/provide-hidden.exp: Likewise. * testsuite/ld-elf/shared.exp: Likewise. * testsuite/ld-gc/gc.exp: Likewise. * testsuite/ld-mips-elf/comm-data.exp: Likewise.
* LD/testsuite: Move ELF shared library tests from elf.exp to shared.expMaciej W. Rozycki2018-01-313-155/+162
| | | | | | | | | | | | | | | | | | | | Move those ELF shared library tests that are in ld-elf/elf.exp over to ld-elf/shared.exp, to keep them all together and make the maintenance of extra flags needed with some targets and shared library builds easier, and also removing the need for the large: if { [check_shared_lib_support] } then { [...] } conditional block and consequently reducing indentation, which always helps with TCL code. No functional change, except for the order of individual test case execution which has changed accordingly, i.e. the test results are shuffled. ld/ * testsuite/ld-elf/elf.exp: Move shared library tests over to... * testsuite/ld-elf/shared.exp: ... here.
* gdb: Fix remote-sim/MinGW/Darwin buildsPedro Alves2018-01-311-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (Add missing ChangeLog entry) The recent commit e671cd59 ("Per-inferior target_terminal state, fix PR gdb/13211, more") missed adjusting a few targets to the new target_ops->to_interrupt interface, breaking the build for those targets. This fixes it. Note: remote-sim doesn't really support async execution, so I don't think gdbsim_interrupt is ever reached via target_interrupt. (It is reached via gdbsim_cntrl_c though). The inflow.c changes are a bit ugly, but they're just doing what other parts of the file already do to handle the same missing functions. Targets that don't have 'kill', like mingw have their own target_ops->to_interrupt implementation, so it's fine to make child_interrupt be a nop. gdb/ChangeLog: 2018-01-31 Pedro Alves <palves@redhat.com> * darwin-nat.c (darwin_interrupt): Remove ptid_t parameter. * inflow.c (child_terminal_save_inferior): Wrap reference to tcgetpgrp in HAVE_TERMIOS_H. (child_interrupt, child_pass_ctrlc): Wrap references to signal in _WIN32. * remote-sim.c (gdbsim_interrupt): Remove ptid_t parameter and always iterate over all inferiors. (gdbsim_cntrl_c): Adjust. * windows-nat.c (windows_interrupt): Remove 'ptid_t' parameter.
* gdb: Fix remote-sim/MinGW/Darwin buildsPedro Alves2018-01-314-23/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The recent commit e671cd59 ("Per-inferior target_terminal state, fix PR gdb/13211, more") missed adjusting a few targets to the new target_ops->to_interrupt interface, breaking the build for those targets. This fixes it. Note: remote-sim doesn't really support async execution, so I don't think gdbsim_interrupt is ever reached via target_interrupt. (It is reached via gdbsim_cntrl_c though). The inflow.c changes are a bit ugly, but they're just doing what other parts of the file already do to handle the same missing functions. Targets that don't have 'kill', like mingw have their own target_ops->to_interrupt implementation, so it's fine to make child_interrupt be a nop. gdb/ChangeLog: 2018-01-31 Pedro Alves <palves@redhat.com> * darwin-nat.c (darwin_interrupt): Remove ptid_t parameter. * inflow.c (child_terminal_save_inferior): Wrap reference to tcgetpgrp in HAVE_TERMIOS_H. (child_interrupt, child_pass_ctrlc): Wrap references to signal in _WIN32. * remote-sim.c (gdbsim_interrupt): Remove ptid_t parameter and always iterate over all inferiors. (gdbsim_cntrl_c): Adjust. * windows-nat.c (windows_interrupt): Remove 'ptid_t' parameter.
* bfd_elf_define_start_stop: Fix checkMichael Matz2018-01-315-2/+42
| | | | | | | | | | | | | We really need to check for a dynamic def, not only a ref. See added testcase. bfd/ * elflink.c (bfd_elf_define_start_stop): Fix check of def_dynamic. ld/ * testsuite/ld-elf/pr21964-5.c: New test. * testsuite/ld-elf/shared.exp: Run it.
* Check if __start/__stop symbols are referenced by shared objectsH.J. Lu2018-01-315-2/+48
| | | | | | | | | | | | | | | | | Define __start/__stop symbols if they are referenced by shared objects, not if they are also defined in shared objects. bfd/ PR ld/21964 * elflink.c (bfd_elf_define_start_stop): Check if __start and __stop symbols are referenced by shared objects. ld/ PR ld/21964 * testsuite/ld-elf/pr21964-4.c: New file. * testsuite/ld-elf/shared.exp: Run pr21964-4 test on Linux.
* (Ada) Add gdb-mi support for stopping at start of exception handler.Xavier Roirand2018-01-317-2/+291
| | | | | | | | | | | | | | | | | | | | | | | | | Following my previous commit which add support for stopping at start of exception handler, this commit adds required gdb-mi support for this feature. gdb/ChangeLog: * mi/mi-cmd-catch.c (mi_cmd_catch_handlers): New function. * mi/mi-cmds.c (mi_cmds): Add catch-handlers command. * mi/mi-cmds.h (mi_cmd_catch_handlers): Add external declaration. * NEWS: Document "-catch-handlers" command. gdb/doc/ChangeLog: * gdb.texinfo (Ada Exception gdb/mi Catchpoints): Add documentation for new "-catch-handlers" command. gdb/testsuite/ChangeLog: * gdb.ada/mi_catch_ex_hand.exp: New testcase. * gdb.ada/mi_catch_ex_hand/foo.adb: New file. Tested on x86_64-linux.
* (Ada) C++fy conditional string when catching exception.Xavier Roirand2018-01-313-27/+22
| | | | | | | | | | | | | | | | | | | | | | This commit C++fy the conditional string used when catching Ada exception. gdb/ChangeLog: * ada-lang.c (catch_ada_exception_command_split) (create_ada_exception_catchpoint) <cond_string>: Change parameter type. Update code accordingly. (catch_ada_exception_command, catch_ada_handlers_command): Use C++ string instead of char* for conditional var. (catch_ada_assert_command_split) <cond_string>: Change parameter type. Update code accordingly. (catch_assert_command): Use C++ string instead of char* for conditional var. * ada-lang.h (create_ada_exception_catchpoint) <cond_string>: Update declaration. * mi/mi-cmd-catch.c (mi_cmd_catch_assert, mi_cmd_catch_exception): Use std::string instead of char* for condition string. Tested on x86_64-linux.
* (Ada/MI) Add testcase for mi catch assert with conditionXavier Roirand2018-01-313-0/+161
| | | | | | | | | | gdb/testsuite/ChangeLog: * gdb.ada/mi_catch_assert.exp: New testcase. * gdb.ada/mi_catch_assert/bla.adb: New file. * gdb.ada/mi_catch_assert/pck.ads: New file. Tested on x86_64-linux.
* (Ada) Add testcase for catch assert with conditionXavier Roirand2018-01-313-0/+151
| | | | | | | | | | gdb/testsuite/ChangeLog: * gdb.ada/catch_assert_if.exp: New testcase. * gdb.ada/catch_assert_if/bla.adb: New file. * gdb.ada/catch_assert_if/pck.ads: New file. Tested on x86_64-linux.
* internal-error using '@' (repeat) operator on array of dynamic objectsJoel Brobecker2018-01-314-4/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Using the following Ada declarations (the same as in gdb.ada/dyn_stride.exp)... subtype Small_Type is Integer range L .. U; type Record_Type (I : Small_Type := L) is record S : String (1 .. I); end record; type Array_Type is array (Integer range <>) of Record_Type; A1 : Array_Type := (1 => (I => U, S => (others => ASCII.NUL)), 2 => (I => 1, S => "A"), 3 => (I => 2, S => "AB")); ... where "L" and "U" are variables, trying to apply the repeat operator to "A1(1)" yields to an internal error: | (gdb) print a1(1)@3 | $5 = /[...]/gdbtypes.c:4883: internal-error: type* copy_type(const type*): | Assertion `TYPE_OBJFILE_OWNED (type)' failed. What happens first is that the ada-lang module evaluated the "A1(1)" sub-expression returning a structure where "I" (one of the fields in that structure) has a type which is dynamic, because it is a range type whose bounds are not statically known. Next, we apply the repeat ('@') operator, which is done via allocate_repeat_value, which creates an array type with the correct bounds to associate to our value, by calling lookup_array_range_type: | struct type * | lookup_array_range_type (struct type *element_type, | LONGEST low_bound, LONGEST high_bound) | { | struct gdbarch *gdbarch = get_type_arch (element_type); | struct type *index_type = builtin_type (gdbarch)->builtin_int; | struct type *range_type | = create_static_range_type (NULL, index_type, low_bound, high_bound); | | return create_array_type (NULL, element_type, range_type); | } As we can see, this creates an array type whose index type is always owned by the gdbarch. This is where the problem lies. Next, we use that type to construct a struct value. That value then gets passed to the valprint module, which then checks whether our object is dynamic or not. And because field "I" above had a dynamic range type, we end up determining by association that the artificial repeat array itself is also dynamic. So we attempt to resolve the type, which leads to trying to copying that type. And because the artifical array created by lookup_array_range_type has an index which is not objfile-owned, we trip the assertion. This patch fixes the issue by enhancing lookup_array_range_type to create an index type which has the same owner as the element type. gdb/ChangeLog: * gdbtypes.c (lookup_array_range_type): Make sure the array's index type is objfile-owned if the element type is as well. gdb/testsuite/ChangeLog: * testsuite/gdb.ada/dyn_stride.exp: Add "print a1(1)@3" test.
* PR22714, Assembler preprocessor loses track of \@Alan Modra2018-01-312-1/+29
| | | | | | | | | | | | | | | | | | | | | The PR22714 testcase is such that the input buffer processed by do_scrub_chars ends on this line 1: bug "Returning to usermode but unexpected PSR bits set?", \@ right at the backslash. (The line is part of a macro definition.) The next input buffer then starts with '@' which starts a comment on ARM, and the check for \@ fails due to to == tostart. Now it would be possible to simply access to[-1] in this particular case, but that's ugly, and to be absolutely safe from people deliberately trying to crash gas we'd need the read.c:read_a_source_file buffer passed to do_scrub_chars to have a single byte pad at the start. PR 22714 * app.c (last_char): New static var. (struct app_save): Add last_char field. (app_push, app_pop): Handle it. (do_scrub_chars): Use last_char in test for "\@". Set last_char.
* Document the GDB 8.1 release in gdb/ChangeLogJoel Brobecker2018-01-311-0/+4
| | | | | | gdb/ChangeLog: GDB 8.1 released.
* Automatic date update in version.inGDB Administrator2018-01-311-1/+1
|
* Improve junk file removal in source tarball creation script.Nick Clifton2018-01-302-2/+6
| | | | | * src-release.sh (do_proto_toplev): Add patterns for more junk files to delete before creating the tarball.
* Update description of nm's symbol bss type letters.Nick Clifton2018-01-302-2/+12
| | | | | | | PR 22734 * doc/binutils.texi (nm): Update description to point out that zero-initialized values can also be shown as type B, b, S or s since they can be stored in the BSS section.
* s390: Fix gdb.base/all-architectures.exp with --enable-targets=allPhilipp Rudo2018-01-305-14/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | With 7042632bf79 (s390: Hook s390 into OSABI mechanism) assigning a default target description was moved from s390_gdbarch_init to s390_linux_init_abi_*. This causes problems when GDB is built with --enable-targets=all and the user sets an unsupported OSABI, e.g. "set osabi AIX". In this case there is no valid tdesc, and GDB crashes with an internal error. Fix this by reverting parts of 7042632bf79. gdb/ChangeLog: * s390-linux-tdep.c: Remove includes "features/s390-linux32.c" and "features/s390x-linux64.c". (_initialize_s390_linux_tdep): Remove initialization of tdescs s390_linux32 and s390x_linux64. (s390_linux_init_abi_31, s390_linux_init_abi_64): Don't set default tdesc. * s390-tdep.c: Include "features/s390-linux32.c" and "features/s390x-linux64.c". (s390_tdesc_valid): Add check for tdesc_has_registers. (s390_gdbarch_init): Make sure there is always a valid tdesc. (_initialize_s390_tdep): Initialize tdesc_s390_linux32 and tdesc_s390x_linux64. * s390-linux-tdep.h: Move export of tdesc_s390_linux32 and tdesc_s390x_linux64 to... * s390-tdep.h: ...here.
* Per-inferior target_terminal state, fix PR gdb/13211, morePedro Alves2018-01-3025-202/+1064
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In my multi-target branch I ran into problems with GDB's terminal handling that exist in master as well, with multi-inferior debugging. This patch adds a testcase for said problems (gdb.multi/multi-term-settings.exp), fixes the problems, fixes PR gdb/13211 as well (and adds a testcase for that too, gdb.base/interrupt-daemon.exp). The basis of the problem I ran into is the following. Consider a scenario where you have: - inferior 1 - started with "attach", process is running on some other terminal. - inferior 2 - started with "run", process is sharing gdb's terminal. In this scenario, when you stop/resume both inferiors, you want GDB to save/restore the terminal settings of inferior 2, the one that is sharing GDB's terminal. I.e., you want inferior 2 to "own" the terminal (in target_terminal::is_ours/target_terminal::is_inferior sense). Unfortunately, that's not what you get currently. Because GDB doesn't know whether an attached inferior is actually sharing GDB's terminal, it tries to save/restore its settings anyway, ignoring errors. In this case, this is pointless, because inferior 1 is running on a different terminal, but GDB doesn't know better. And then, because it is only possible to have the terminal settings of a single inferior be in effect at a time, or make one inferior/pgrp be the terminal's foreground pgrp (aka, only one inferior can "own" the terminal, ignoring fork children here), if GDB happens to try to restore the terminal settings of inferior 1 first, then GDB never restores the terminal settings of inferior 2. This patch fixes that and a few things more along the way: - Moves enum target_terminal::terminal_state out of the target_terminal class (it's currently private) and makes it a scoped enum so that it can be easily used elsewhere. - Replaces the inflow.c:terminal_is_ours boolean with a target_terminal_state variable. This allows distinguishing is_ours and is_ours_for_output states. This allows finally making child_terminal_ours_1 do something with its "output_only" parameter. - Makes each inferior have its own copy of the is_ours/is_ours_for_output/is_inferior state. - Adds a way for GDB to tell whether the inferior is sharing GDB's terminal. Works best on Linux and Solaris; the fallback works just as well as currently. - With that, we can remove the inf->attach_flag tests from child_terminal_inferior/child_terminal_ours. - Currently target_ops.to_ours is responsible for both saving the current inferior's terminal state, and restoring gdb's state. Because each inferior has its own terminal state (possibly handled by different targets in a multi-target world, even), we need to split the inferior-saving part from the gdb-restoring part. The patch adds a new target_ops.to_save_inferior target method for that. - Adds a new target_terminal::save_inferior() function, so that sequences like: scoped_restore_terminal_state save_state; target_terminal::ours_for_output (); ... restore back inferiors that were target_terminal_state::is_inferior before back to is_inferior, and leaves inferiors that were is_ours alone. - Along the way, this adds a default implementation of target_pass_ctrlc to inflow.c (for inf-child.c), that handles passing the Ctrl-C to a process running on GDB's terminal or to some other process otherwise. - Similarly, adds a new target default implementation of target_interrupt, for the "interrupt" command. The current implementation of this hook in inf-ptrace.c kills the whole process group, but that's incorrect/undesirable because we may not be attached to all processes in the process group. And also, it's incorrect because inferior_process_group() doesn't really return the inferior's real process group id if the inferior is not a process group leader... This is the cause of PR gdb/13211 [1], which this patch fixes. While at it, that target method's "ptid" parameter is eliminated, because it's not really used. - A new test is included that exercises and fixes PR gdb/13211, and also fixes a GDB issue reported on stackoverflow that I ran into while working on this [2]. The problem is similar to PR gdb/13211, except that it also triggers with Ctrl-C. When debugging a daemon (i.e., a process that disconnects from the controlling terminal and is not a process group leader, then Ctrl-C doesn't work, you just can't interrupt the inferior at all, resulting in a hung debug session. The problem is that since the inferior is no longer associated with gdb's session / controlling terminal, then trying to put the inferior in the foreground fails. And so Ctrl-C never reaches the inferior directly. pass_signal is only used when the inferior is attached, but that is not the case here. This is fixed by the new child_pass_ctrlc. Without the fix, the new interrupt-daemon.exp testcase fails with timeout waiting for a SIGINT that never arrives. [1] PR gdb/13211 - Async / Process group and interrupt not working https://sourceware.org/bugzilla/show_bug.cgi?id=13211 [2] GDB not reacting Ctrl-C when after fork() and setsid() https://stackoverflow.com/questions/46101292/gdb-not-reacting-ctrl-c-when-after-fork-and-setsid Note this patch does _not_ fix: - PR gdb/14559 - The 'interrupt' command does not work if sigwait is in use https://sourceware.org/bugzilla/show_bug.cgi?id=14559 - PR gdb/9425 - When using "sigwait" GDB doesn't trap SIGINT. Ctrl+C terminates program when should break gdb. https://sourceware.org/bugzilla/show_bug.cgi?id=9425 The only way to fix that that I know of (without changing the kernel) is to make GDB put inferiors in a separate session (create a pseudo-tty master/slave pair, make the inferior run with the slave as its terminal, and have gdb pump output/input on the master end). gdb/ChangeLog: 2018-01-30 Pedro Alves <palves@redhat.com> PR gdb/13211 * config.in, configure: Regenerate. * configure.ac: Check for getpgid. * go32-nat.c (go32_pass_ctrlc): New. (go32_target): Install it. * inf-child.c (inf_child_target): Install child_terminal_save_inferior, child_pass_ctrlc and child_interrupt. * inf-ptrace.c (inf_ptrace_interrupt): Delete. (inf_ptrace_target): No longer install it. * infcmd.c (interrupt_target_1): Adjust. * inferior.h (child_terminal_save_inferior, child_pass_ctrlc) (child_interrupt): Declare. (inferior::terminal_state): New. * inflow.c (struct terminal_info): Update comments. (inferior_process_group): Delete. (terminal_is_ours): Delete. (gdb_tty_state): New. (child_terminal_init): Adjust. (is_gdb_terminal, sharing_input_terminal_1) (sharing_input_terminal): New functions. (child_terminal_inferior): Adjust. Use sharing_input_terminal. Set the process's actual process group in the foreground if possible. Handle is_ours_for_output/is_ours distinction. Don't mark terminal as the inferior's if not sharing GDB's terminal. Don't check attach_flag. (child_terminal_ours_for_output, child_terminal_ours): Adjust to pass down a target_terminal_state. (child_terminal_save_inferior): New, factored out from ... (child_terminal_ours_1): ... this. Handle target_terminal_state::is_ours_for_output. (child_interrupt, child_pass_ctrlc): New. (inflow_inferior_exit): Clear the inferior's terminal_state. (copy_terminal_info): Copy the inferior's terminal state. (_initialize_inflow): Remove reference to terminal_is_ours. * inflow.h (inferior_process_group): Delete. * nto-procfs.c (nto_handle_sigint, procfs_interrupt): Adjust. * procfs.c (procfs_target): Don't install procfs_interrupt. (procfs_interrupt): Delete. * remote.c (remote_serial_quit_handler): Adjust. (remote_interrupt): Remove ptid parameter. Adjust. * target-delegates.c: Regenerate. * target.c: Include "terminal.h". (target_terminal::terminal_state): Rename to ... (target_terminal::m_terminal_state): ... this. (target_terminal::init): Adjust. (target_terminal::inferior): Adjust to per-inferior terminal_state. (target_terminal::restore_inferior, target_terminal_is_ours_kind): New. (target_terminal::ours, target_terminal::ours_for_output): Use target_terminal_is_ours_kind. (target_interrupt): Remove ptid parameter. Adjust. (default_target_pass_ctrlc): Adjust. * target.h (target_ops::to_terminal_save_inferior): New field. (target_ops::to_interrupt): Remove ptid_t parameter. (target_interrupt): Remove ptid_t parameter. Update comment. (target_pass_ctrlc): Update comment. * target/target.h (target_terminal_state): New scoped enum, factored out of ... (target_terminal::terminal_state): ... here. (target_terminal::inferior): Update comments. (target_terminal::restore_inferior): New. (target_terminal::is_inferior, target_terminal::is_ours) (target_terminal::is_ours_for_output): Adjust. (target_terminal::scoped_restore_terminal_state): Adjust to rename, and call restore_inferior() instead of inferior(). (target_terminal::scoped_restore_terminal_state::m_state): Change type. (target_terminal::terminal_state): Rename to ... (target_terminal::m_terminal_state): ... this and change type. gdb/gdbserver/ChangeLog: 2018-01-30 Pedro Alves <palves@redhat.com> PR gdb/13211 * target.c (target_terminal::terminal_state): Rename to ... (target_terminal::m_terminal_state): ... this. gdb/testsuite/ChangeLog: 2018-01-30 Pedro Alves <palves@redhat.com> PR gdb/13211 * gdb.base/interrupt-daemon.c: New. * gdb.base/interrupt-daemon.exp: New. * gdb.multi/multi-term-settings.c: New. * gdb.multi/multi-term-settings.exp: New.
* linux-nat: Eliminate custom target_terminal_{inferior,ours}, stop using ↵Pedro Alves2018-01-302-52/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set_sigint_trap This patch gets rid of linux-nat.c's custom target_terminal_inferior/target_terminal_ours implementations. The only remaining reason those overrides exist is to install clear_sigint_trap in order to pass Ctrl-C/SIGINT to the inferior process in case the inferior is not sharing GDB's terminal (and target_wait was called without TARGET_WNOHANG). However, I think that's better handled by QUIT / target_pass_ctrlc nowadays. Going that route avoids the issue with set_sigint_trap only looking at the current inferior to know whether to override SIGINT or not, which doesn't really work correctly with multi-inferior in the picture. Also centralizing on a single SIGINT handler as much as possible seems better considering a future multi-target world. Tested on x86-64 GNU/Linux. gdb/ChangeLog: 2018-01-30 Pedro Alves <palves@redhat.com> * linux-nat.c (wait_for_signal): New function. (wait_lwp, linux_nat_wait_1): Use it instead of calling sigsuspend directly. (async_terminal_is_ours) (linux_nat_terminal_inferior, linux_nat_terminal_ours): Delete. (linux_nat_add_target): Don't override to_terminal_inferior/to_terminal_ours.
* Add --gc-sections test checking removal of __start/__stop symbols.Alan Modra2018-01-304-0/+25
| | | | | | | | Well, just __stop__foo but that should be good enough. * testsuite/ld-gc/stop.d, * testsuite/ld-gc/stop.s: New test. * testsuite/ld-gc/gc.exp: Run it.
* PR22758, FAIL: Run pr22393-2Alan Modra2018-01-302-24/+26
| | | | | | | | | | | | | | | | | | | We can't map different disk pages into the same memory page; The last page mapped will simply overwrite any previous pages. The executable/non-executable new_segment test ignored this fact, leading to a ld.so segfault on hppa when .dynamic is overwritten with zeros. This patch moves existing tests for demand paging with lma on the same memory page, to a new test performed before any case where we want a new segment due to protection or loadable conflicts. PR 22758 * elf.c (_bfd_elf_map_sections_to_segments): Don't start a new segment when demand paged with lma on the same page. Test this before load/non-load, executable/non-executable, writable/non-writable tests and simplify. Delete bogus relro condition in writable/non-writable test. Delete outdated comment. Formatting.
* gdb.base/break.exp: fix last "info break" test failure on Ubuntu 16.04Joel Brobecker2018-01-292-2/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The last test of this testcase fails when run on Ubuntu 16.04 using the system compiler (16.04): FAIL: gdb.base/break.exp: verify that they were cleared This is because the testcase expected that a breakpoint on line 47 of break.c... printf ("%d\n", factorial (atoi ("6"))); /* set breakpoint 1 here */ ... would actually be inserted on an instruction belonging to that line. However, what actually happens is that system GCC on that version of Ubuntu ends up inlining everything, including the call to printf, thus reporting every instruction of generated for this line of code as belonging to a different function. As a result, GDB ends up insering the breakpoint on the next line of code, which is line 49: (gdb) break break.c:$l Breakpoint 3 at 0x4005c1: file /[...]/gdb.base/break.c, line 49. This causes a spurious failure in the "info break" test later on, as it assumed that the breakpoint above is inserted on line 47: gdb_test "info break" "$srcfile:$line" "verify that they were cleared" This patch fixes the issue by saving the actual source location where the breakpoint was inserted. gdb/testsuite/ChangeLog: * gdb.base/break.exp: Save the location where the breakpoint on break.c:47 was actually inserted when debugging the version compiled at -O2 and use it in the expected output of the "info break" test performed soon after. tested on x86_64-linux, with two configurations: - Ubuntu 16.04 with the system compiler (breakpoint lands on line 49) - Ubuntu 16.04 with GCC 7.3.1 (breakpoint lands on line 47)
* MIPS/LD/testsuite: Correct PR ld/22649 test case failuresMaciej W. Rozycki2018-01-304-4/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix commit d664fd41e15f ("Ignore dynamic references on forced local symbols") and use alternative test actions and match patterns to correctly handle messages like: .../ld/ld-new: Removing unused section '.reginfo' in file 'tmpdir/pr22649-2b.o' or: .../ld/ld-new: Removing unused section '.MIPS.options' in file 'tmpdir/pr22649-2b.o' produced by LD on MIPS targets, removing: FAIL: Build pr22649-2c.so FAIL: Build pr22649-2d.so test suite failures and tightening checks made with `pr22649-2a.so' and `pr22649-2b.so' test cases. Keep the original empty action with `pr22649-2c.so' and `pr22649-2d.so' links and MIPS/ELF targets though, because for them the linker does not garbage-collect the `.reginfo' section. This is because the section has its flags set differently by code in GAS in `md_begin': if (strncmp (TARGET_OS, "elf", 3) != 0) flags |= SEC_ALLOC | SEC_LOAD; and consequently BFD linker code in `_bfd_elf_gc_mark_extra_sections': else if (((isec->flags & SEC_DEBUGGING) != 0 || (isec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0) && elf_next_in_group (isec) == NULL) isec->gc_mark = 1; marks these sections to be kept due to their SEC_ALLOC, SEC_LOAD and SEC_RELOC flags all being zero (`.reginfo' sections never have relocations attached). ld/ PR ld/22649 * testsuite/ld-elf/pr22649-2ab-mips.msg: New stderr output. * testsuite/ld-elf/pr22649-2cd-mips.msg: New stderr output. * testsuite/ld-elf/shared.exp: Use the new outputs with `mips*-*-*' targets.
* MIPS/LD/testsuite: Adjust match patterns for special section indexesMaciej W. Rozycki2018-01-303-4/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Update `readelf' symbol table dump match patterns to handle SHN_MIPS_DATA and SHN_MIPS_TEXT special section indexes produced by the IRIX ELF format variation used with a number of MIPS targets and printed by `readelf' as PRC[0xff02] and PRC[0xff01] respectively, correcting LD test suite failures: extra regexps in .../ld/testsuite/ld-elf/comm-data1.sd starting with "^ +[0-9]+: +[0-9a-f]+ +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo$" EOF from dump.out FAIL: Common symbol override test (auxiliary shared object build) extra regexps in .../ld/testsuite/ld-elf/pr21703-shared.sd starting with "^ +[0-9]+: +[0-9a-f]+ +4 +FUNC +GLOBAL +DEFAULT +[0-9] +foo@FOO$" EOF from dump.out FAIL: PR ld/21703 shared extra regexps in .../ld/testsuite/ld-elf/comm-data1.sd starting with "^ +[0-9]+: +[0-9a-f]+ +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo$" EOF from dump.out FAIL: MIPS o32/copyreloc common symbol override test (auxiliary shared object build) extra regexps in .../ld/testsuite/ld-elf/comm-data1.sd starting with "^ +[0-9]+: +[0-9a-f]+ +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo$" EOF from dump.out FAIL: MIPS o32/nocopyreloc common symbol override test (auxiliary shared object build) observed due to file contents like: 7: 5ffe02e8 0 OBJECT GLOBAL DEFAULT PRC[0xff02] foo shown by `readelf -s' vs: +[0-9]+: +[0-9a-f]+ +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo pattern expected, triggered by widening testing to these targets by commit 05a5feafdd38 ("Rewrite check_shared_lib_support"). ld/ * testsuite/ld-elf/comm-data1.sd: Alternatively accept `PRC[0xff02]' in place of a regular section index. * testsuite/ld-elf/pr21703-shared.sd: Likewise `PRC[0xff01]'.
* 32-bit objcopy build failAlan Modra2018-01-302-2/+7
| | | | | * objcopy.c (merge_gnu_build_notes): Use (bfd_vma) -1 as "artificially large" end address.
* Automatic date update in version.inGDB Administrator2018-01-301-1/+1
|