aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2017-10-05PR22239 - invalid memory read in display_debug_framesAlan Modra2-11/+12
Pointer comparisons have traps for the unwary. After adding a large unknown value to "start", the test "start < end" depends on where "start" is originally in memory. PR 22239 * dwarf.c (read_cie): Don't compare "start" and "end" pointers after adding a possibly wild length to "start", compare the length to the difference of the pointers instead. Remove now redundant "negative" length test.
2017-10-05Update my email address.Tristan Gingold4-5/+14
Also refer to global maintainers for branch release approval.
2017-10-05bfd_set_input_errorPedro Alves5-21/+48
A downside to the 2017-10-04 PR22245 fix is that bfd_set_error can now silently accept invalid errors if/when someone passes the a value of the wrong enumeration type, which previously would be caught by the -Wenum-conversion warning. PR 22245 * bfd.c (bfd_set_error): Revert 2017-10-04 change. Remove ellipsis parameter. Split out bfd_error_on_input code to.. (bfd_set_input_error): .. New function. * archive.c (_bfd_write_archive_contents): Use bfd_set_input_error. * vms-lib.c (_bfd_vms_lib_write_archive_contents): Likewise. * bfd-in2.h: Regenerate.
2017-10-04Add an assembler test for PR gas/21167H.J. Lu4-0/+22
PR gas/21167 * testsuite/gas/elf/elf.exp: Run group3. * testsuite/gas/elf/group3.d: New file. * testsuite/gas/elf/group3.s: Likewise.
2017-10-05bfd_error_on_input is for archivesAlan Modra2-1/+6
* elflink.c (elf_link_input_bfd): Correct ctor/dtor in init_array/ fini_array error value.
2017-10-05Automatic date update in version.inGDB Administrator1-1/+1
2017-10-05PR21167, relocation sections not included in groupsAlan Modra12-53/+111
This fixes a wart I've known about for years, but haven't done anything about because BFD treats relocation sections as an adjunct to the section they relocate. SHF_GROUP on the section thus implicitly applies to its relocation section(s), but it is an error that the reloc sections aren't part of the group. Like many patches to gas, this wasn't as straightforward as it could be due to a number of backends, i386, cr16 and others, removing relocs in tc_get_reloc rather than marking them as "done" earlier in md_apply_reloc. So it isn't possible for the group support to reliably detect the presence of relocs by looking at fixups earlier than write_relocs. However the group support needs to create signature symbols, and that must be done before the symbol table is frozen, before write_relocs. So split off the group sizing from elf_adjust_symtab and put it in elf_frob_file_after_relocs. bfd/ PR 21167 * elf.c (_bfd_elf_setup_sections): Don't trim reloc sections from groups. (_bfd_elf_init_reloc_shdr): Pass sec_hdr, use it to copy SHF_GROUP flag from section. (elf_fake_sections): Adjust calls. Exit immediately on failure. (bfd_elf_set_group_contents): Add associated reloc section indices to group contents gas/ PR 21167 * config/obj-elf.c (struct group_list): Delete elt_count. (groups): New static. (build_group_lists): Don't count elements. (elf_adjust_symtab): Use groups rather than auto list. Set up pointer from group member to SHT_GROUP section. Don't size SHT_GROUP section or clean up here.. (elf_frob_file_after_relocs): ..do so here instead. * testsuite/gas/arc/jli-1.d, * testsuite/gas/elf/groupautob.d, * testsuite/gas/mips/compact-eh-eb-2.d, * testsuite/gas/mips/compact-eh-eb-5.d, * testsuite/gas/mips/compact-eh-el-2.d, * testsuite/gas/mips/compact-eh-el-5.d: Adjust. ld/ PR 21167 * testsuite/ld-elf/group9b.d: Adjust for relocs included in group.
2017-10-04Fix "Remote 'g' packet reply is too long" problems with multiple inferiorsPedro Alves8-30/+169
When debugging two inferiors (or more) against gdbserver, and the inferiors have different architectures, such as e.g., on x86_64 GNU/Linux and one inferior is 64-bit while the other is 32-bit, then GDB can get confused with the different architectures in a couple spots. In both cases I ran into, GDB incorrectly ended up using the architecture of whatever happens to be the selected inferior instead of the architecture of some other given inferior: #1 - When parsing the expedited registers in stop replies. #2 - In the default implementation of the target_thread_architecture target method. These resulted in instances of the infamous "Remote 'g' packet reply is too long" error. For example, with the test added in this commit, we get: ~~~ Continuing. Remote 'g' packet reply is too long (expected 440 bytes, got 816 bytes): ad064000000000000[snip] (gdb) FAIL: gdb.multi/multi-arch.exp: inf1 event with inf2 selected: continue to hello_loop c Continuing. Truncated register 50 in remote 'g' packet (gdb) PASS: gdb.multi/multi-arch.exp: inf2 event with inf1 selected: c ~~~ This commit fixes that. gdb/ChangeLog: 2017-10-04 Pedro Alves <palves@redhat.com> * remote.c (get_remote_arch_state): New 'gdbarch' parameter. Use it instead of target_gdbarch. (get_remote_state, get_remote_packet_size): Adjust get_remote_arch_state calls, passing down target_gdbarch explicitly. (packet_reg_from_regnum, packet_reg_from_pnum): New parameter 'gdbarch' and use it instead of target_gdbarch. (get_memory_packet_size): Adjust get_remote_arch_state calls, passing down target_gdbarch explicitly. (struct stop_reply) <arch>: New field. (remote_parse_stop_reply): Use the stopped thread's architecture, not the current inferior's. Save the architecture in the stop_reply. (process_stop_reply): Use the stop reply's architecture. (process_g_packet, remote_fetch_registers) (remote_prepare_to_store, store_registers_using_G) (remote_store_registers): Adjust get_remote_arch_state calls, using the regcache's architecture. (remote_get_trace_status): Adjust get_remote_arch_state calls, passing down target_gdbarch explicitly. * spu-multiarch.c (spu_thread_architecture): Defer to the target beneath instead of calling target_gdbarch. * target.c (default_thread_architecture): Use the specified inferior's architecture, instead of the current inferior's architecture (via target_gdbarch). gdb/testsuite/ChangeLog: 2017-10-04 Pedro Alves <palves@redhat.com> * gdb.multi/hangout.c: Include <unistd.h>. (hangout_loop): New function. (main): Call alarm. Call hangout_loop in a loop. * gdb.multi/hello.c: Include <unistd.h>. (hello_loop): New function. (main): Call alarm. Call hangout_loop in a loop. * gdb.multi/multi-arch.exp: Test running to a breakpoint one inferior with the other selected.
2017-10-04Reimplement support for "maint print registers" with no running inferior yetPedro Alves2-15/+24
A following patch will change the default target_thread_architecture method, like this: struct gdbarch * default_thread_architecture (struct target_ops *ops, ptid_t ptid) { - return target_gdbarch (); + inferior *inf = find_inferior_ptid (ptid); + gdb_assert (inf != NULL); + return inf->gdbarch; } This is because target_gdbarch is really just current_inferior()->gdbarch, and it's wrong to return that architecture when the inferior of the passed in PTID is NOT the current inferior -- the inferior for PTID may be running a different architecture. E.g., a mix of 64-bit and 32-bit inferiors in the same debug session. Doing that change above however exposes a problem in "maint print registers", caught be the testsuite: -PASS: gdb.base/maint.exp: maint print registers +FAIL: gdb.base/maint.exp: maint print registers (GDB internal error) ... gdb/inferior.c:309: internal-error: inferior* find_inferior_pid(int): Assertion `pid != 0' failed. A problem internal to GDB has been detected, The call stack looks like this: #0 0x000000000068b707 in internal_error(char const*, int, char const*, ...) (file=0xa9b958 "gdb/inferior.c", line=309, fmt=0xa9b8e0 "%s: Assertion `%s' failed.") at gdb/common/errors.c:54 #1 0x00000000006e1c40 in find_inferior_pid(int) (pid=0) at gdb/inferior.c:309 #2 0x00000000006e1c8d in find_inferior_ptid(ptid_t) (ptid=...) at gdb/inferior.c:323 #3 0x00000000007c18dc in default_thread_architecture(target_ops*, ptid_t) (ops=0xf86d60 <dummy_target>, ptid=...) at gdb/target.c:3134 #4 0x00000000007b5414 in delegate_thread_architecture(target_ops*, ptid_t) (self=0xf86d60 <dummy_target>, arg1=...) at gdb/target-delegates.c:2527 #5 0x00000000007647b3 in get_thread_regcache(ptid_t) (ptid=...) at gdb/regcache.c:466 #6 0x00000000007647ff in get_current_regcache() () at gdb/regcache.c:475 #7 0x0000000000767495 in regcache_print(char const*, regcache_dump_what) (args=0x0, what_to_dump=regcache_dump_none) at gdb/regcache.c:1599 #8 0x0000000000767550 in maintenance_print_registers(char const*, int) (args=0x0, from_tty=1) at gdb/regcache.c:1613 I.e., the test does "maint print registers" while the inferior is not running yet. This is expected to work, and there's already a hack in get_thread_arch_regcache to make it work. Instead of pilling on hacks in the internal of regcache and target_ops, this commit moves the null_ptid special casing to where it belongs -- higher up in the call chain in the implementation of "maint print registers" & co directly. gdb/ChangeLog: 2017-10-04 Pedro Alves <palves@redhat.com> * regcache.c (get_thread_arch_regcache): Remove null_ptid special case. (regcache_print): Handle !target_has_registers here instead.
2017-10-04Redesign mock environment for gdbarch selftestsPedro Alves7-63/+119
A following patch will remove this hack from within regcache's implementation: struct regcache * get_thread_arch_regcache (ptid_t ptid, struct gdbarch *gdbarch) { struct address_space *aspace; /* For the benefit of "maint print registers" & co when debugging an executable, allow dumping the regcache even when there is no thread selected (target_thread_address_space internal-errors if no address space is found). Note that normal user commands will fail higher up on the call stack due to no target_has_registers. */ aspace = (ptid_equal (null_ptid, ptid) ? NULL : target_thread_address_space (ptid)); i.e., it'll no longer be possible to try to build a regcache for null_ptid. That change alone would regress the gdbarch self tests though, causing this: (gdb) maintenance selftest [...] Running selftest register_to_value. src/gdb/inferior.c:309: internal-error: inferior* find_inferior_pid(int): Assertion `pid != 0' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) FAIL: gdb.gdb/unittest.exp: maintenance selftest (GDB internal error) The problem is that the way the mocking environment for those unit tests is written is a bit fragile: it creates a special purpose regcache (and sentinel's frame), using whatever is the current inferior_ptid (usually null_ptid), and assumes get_current_regcache will find that in the regcache::current_regcache list. This commit changes the way the mock environment is created. It eliminates the special regcache and frame and instead creates a fuller mock environment, with a custom mock target_ops, and then a mock inferior and thread "running" on that target. If there's already a running target when you type "maint selftest", then we error out, instead of pushing a new target on top of the existing one (and thus killing the debug session). This results in: (gdb) maint selftest (...) Self test failed: arch i386: target already pushed Self test failed: arch i386:x86-64: target already pushed Self test failed: arch i386:x64-32: target already pushed Self test failed: arch i8086: target already pushed Self test failed: arch i386:intel: target already pushed Self test failed: arch i386:x86-64:intel: target already pushed Self test failed: arch i386:x64-32:intel: target already pushed Self test failed: arch i386:nacl: target already pushed Self test failed: arch i386:x86-64:nacl: target already pushed Self test failed: arch i386:x64-32:nacl: target already pushed Self test failed: self-test failed at /home/pedro/gdb/mygit/src/gdb/selftest-arch.c:86 (...) Ran 19 unit tests, 1 failed I think that's OK, because self tests are really meant to be run from a clean state right after GDB is started. I'm adding that erroring out just as safe measure just in case someone types "maint selftest" on the command line while already debugging something (as I've done it). (In my multi-target branch, where this patch originated from, we don't actually need to error out, because there each inferior has its own target stack). Also, note that the current code was doing: current_inferior()->gdbarch = gdbarch; without taking care to restore the previous gdbarch. This means that GDB's state was being left inconsistent after running the self tests, further supporting the point that there's probably not much expectation that mixing "maint selftests" and regular debugging in the same GDB invocation really works. This patch fixes that, regardless. gdb/ChangeLog: 2017-10-04 Pedro Alves <palves@redhat.com> * frame.c (create_test_frame): Delete. * frame.h (create_test_frame): Delete. * gdbarch-selftests.c: Include gdbthread.h and target.h. (class regcache_test): Delete. (test_target_has_registers, test_target_has_stack) (test_target_has_memory, test_target_prepare_to_store) (test_target_store_registers): New functions. (test_target_ops): New class. (register_to_value_test): Error out if there's already a process_stratum (or higher) target pushed. Create a fuller mock environment, with mock target_ops, inferior, address space, thread and inferior_ptid. * progspace.c (struct address_space): Move to ... * progspace.h (struct address_space): ... here. * regcache.h (regcache::~regcache, regcache::raw_write) [GDB_SELF_TEST]: No longer virtual.
2017-10-04Fix -list-thread-groups --available logic and add testSimon Marchi5-1/+111
New in v3: - Replace use_gdb_stub with can_spawn_for_attach. - Call kill_wait_spawned_process on spawn_ids. Commit Use std::set in mi-main.c 52f9abe4c739f42cc5f80b2629276493ac6306f9 changed the logic of the "-list-thread-groups --available" by mistake when a pid is passed. It prints all the processes except the one specified by the given pid. The correct behavior is to only print the process corresponding to that pid. this patch fixes that and adds a test. gdb/ChangeLog: * mi/mi-main.c (list_available_thread_groups): Reverse filter logic. gdb/testsuite/ChangeLog: * gdb.mi/list-thread-groups-available.exp: New file. * gdb.mi/list-thread-groups-available.c: New file.
2017-10-04Move code out of 'between TRY and CATCH'Pedro Alves2-1/+7
I tried building GDB with TRY/CATCH mapped to raw C++ try/catch (by defining GDB_XCPT to GDB_XCPT_RAW_TRY in gdb/common/common-exceptions.h), and that caught a case of code written between try and catch. This commit fixes it. gdb/ChangeLog: 2017-10-04 Pedro Alves <palves@redhat.com> * guile/scm-breakpoint.c (gdbscm_breakpoint_commands): Move code out of 'between TRY and CATCH'.
2017-10-04Add missing-END_CATCH detection/protection (to gdb's TRY/CATCH/END_CATCH)Pedro Alves1-0/+9
(Adding missing ChangeLog entry) While we still have cleanups (i.e., make_cleanup & co), we must be sure to add END_CATCH at the end of a TRY/CATCH/END_CATCH construct. However, it's currently too easy to miss adding the END_CATCH, because the code compiles anyway without it. I realized this when I noticed that another patch I was working on missed several adding END_CATCH in several new TRY/CATCH uses. This commit fixes that by making TRY open a new scope that is only closed by END_CATCH. This way, if you forget to add the END_CATCH, then compilation fails due to the unbalanced curly braces. This caught a couple places where we were missing END_CATCH in current master, also fixed by the patch. gdb/ChangeLog: 2017-10-04 Pedro Alves <palves@redhat.com> * cli/cli-cmds.c (complete_command): Add missing END_CATCH. * common/common-exceptions.h (TRY): Open an outermost scope. Expand intro comment. (CATCH): Reindent. (END_CATCH): Close the outermost scope. * completer.c (complete_line_internal): Add missing END_CATCH.
2017-10-04Add missing-END_CATCH detection/protection (to gdb's TRY/CATCH/END_CATCH)Pedro Alves3-14/+29
While we still have cleanups (i.e., make_cleanup & co), we must be sure to add END_CATCH at the end of a TRY/CATCH/END_CATCH construct. However, it's currently too easy to miss adding the END_CATCH, because the code compiles anyway without it. I realized this when I noticed that another patch I was working on missed several adding END_CATCH in several new TRY/CATCH uses. This commit fixes that by making TRY open a new scope that is only closed by END_CATCH. This way, if you forget to add the END_CATCH, then compilation fails due to the unbalanced curly braces. This caught a couple places where we were missing END_CATCH in current master, also fixed by the patch. gdb/ChangeLog: 2017-10-04 Pedro Alves <palves@redhat.com> * cli/cli-cmds.c (complete_command): Add missing END_CATCH. * common/common-exceptions.h (TRY): Open an outermost scope. Expand intro comment. (CATCH): Reindent. (END_CATCH): Close the outermost scope. * completer.c (complete_line_internal): Add missing END_CATCH.
2017-10-04Extend "set cwd" to work on gdbserverSergio Durigan Junior13-13/+203
This is the "natural" extension necessary for the "set cwd" command (and the whole "set the inferior's cwd" logic) to work on gdbserver. The idea here is to have a new remote packet, QSetWorkingDir (name adopted from LLDB's extension to the RSP, as can be seen at <https://raw.githubusercontent.com/llvm-mirror/lldb/master/docs/lldb-gdb-remote.txt>), which sends an hex-encoded string representing the working directory that the remote inferior will use. There is a slight difference from the packet proposed by LLDB: GDB's version will accept empty arguments, meaning that the user wants to clear the previously set working directory for the inferior (i.e., "set cwd" without arguments on GDB). For UNIX-like targets this feature is already implemented on nat/fork-inferior.c, and all gdbserver has to do is to basically implement "set_inferior_cwd" and call it whenever such packet arrives. For other targets, like Windows, it is possible to use the existing "get_inferior_cwd" function and do the necessary steps to make sure that the inferior will use the specified working directory. Aside from that, the patch consists basically of updates to the testcase (making it available on remote targets) and the documentation. No regressions found. gdb/ChangeLog: 2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> * NEWS (Changes since GDB 8.0): Add entry about new 'set-cwd-on-gdbserver' feature. (New remote packets): Add entry for QSetWorkingDir. * common/common-inferior.h (set_inferior_cwd): New prototype. * infcmd.c (set_inferior_cwd): Remove "static". (show_cwd_command): Expand text to include remote debugging. * remote.c: Add PACKET_QSetWorkingDir. (remote_protocol_features) <QSetWorkingDir>: New entry for PACKET_QSetWorkingDir. (extended_remote_set_inferior_cwd): New function. (extended_remote_create_inferior): Call "extended_remote_set_inferior_cwd". (_initialize_remote): Call "add_packet_config_cmd" for QSetWorkingDir. gdb/gdbserver/ChangeLog: 2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> * inferiors.c (set_inferior_cwd): New function. * server.c (handle_general_set): Handle QSetWorkingDir packet. (handle_query): Inform that QSetWorkingDir is supported. * win32-low.c (create_process): Pass the inferior's cwd to CreateProcess. gdb/testsuite/ChangeLog: 2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> * gdb.base/set-cwd.exp: Make it available on native-extended-gdbserver. gdb/doc/ChangeLog: 2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> * gdb.texinfo (Starting your Program) <The working directory.>: Mention remote debugging. (Working Directory) <Your Program's Working Directory>: Likewise. (Connecting) <Remote Packet>: Add "set-working-dir" and "QSetWorkingDir" to the table. (Remote Protocol) <QSetWorkingDir>: New item, explaining the packet.
2017-10-04Implement "set cwd" command on GDBSergio Durigan Junior15-18/+455
This commit adds new "set/show cwd" commands, which are used to set/show the current working directory of the inferior that will be started. The idea here is that "set cwd" will become the de facto way of setting the inferior's cwd. Currently, the user can use "cd" for that, but there are side effects: with "cd", GDB also switches to another directory, and that can impact the loading of scripts and other files. With "set cwd", we separate the logic into a new command. To maintain backward compatibility, if the user issues a "cd" command but doesn't use "set cwd", then the inferior's cwd will still be changed according to what the user specified. However, "set cwd" has precedence over "cd", so it can always be used to override it. "set cwd" works in the following way: - If the user sets the inferior's cwd by using "set cwd", then this directory is saved into current_inferior ()->cwd and is used when the inferior is started (see below). - If the user doesn't set the inferior's cwd by using "set cwd", but rather use the "cd" command as before, then this directory is inherited by the inferior because GDB will have chdir'd into it. On Unix-like hosts, the way the directory is changed before the inferior execution is by expanding the user set directory before the fork, and then "chdir" after the call to fork/vfork on "fork_inferior", but before the actual execution. On Windows, the inferior cwd set by the user is passed directly to the CreateProcess call, which takes care of the actual chdir for us. This way, we'll make sure that GDB's cwd is not affected by the user set cwd. gdb/ChangeLog: 2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> * NEWS (New commands): Mention "set/show cwd". * cli/cli-cmds.c (_initialize_cli_cmds): Mention "set cwd" on "cd" command's help text. * common/common-inferior.h (get_inferior_cwd): New prototype. * infcmd.c (inferior_cwd_scratch): New global variable. (set_inferior_cwd): New function. (get_inferior_cwd): Likewise. (set_cwd_command): Likewise. (show_cwd_command): Likewise. (_initialize_infcmd): Add "set/show cwd" commands. * inferior.h (class inferior) <cwd>: New field. * nat/fork-inferior.c: Include "gdb_tilde_expand.h". (fork_inferior): Change inferior's cwd before its execution. * windows-nat.c (windows_create_inferior): Pass inferior's cwd to CreateProcess. gdb/gdbserver/ChangeLog: 2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> * inferiors.c (current_inferior_cwd): New global variable. (get_inferior_cwd): New function. * inferiors.h (struct process_info) <cwd>: New field. gdb/doc/ChangeLog: 2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> * gdb.texinfo (Starting your Program) <The working directory.>: Mention new "set cwd" command. (Working Directory) <Your Program's Working Directory>: Rephrase to explain that "set cwd" exists and is the default way to change the inferior's cwd. gdb/testsuite/ChangeLog: 2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> * gdb.base/set-cwd.c: New file. * gdb.base/set-cwd.exp: Likewise.
2017-10-04Introduce gdb_tilde_expandSergio Durigan Junior6-0/+127
Currently, whenever we want to handle paths provided by the user and perform tilde expansion on GDB, we rely on "tilde_expand", which comes from readline. This was enough for our use cases so far, but the situation will change when we start dealing with paths on gdbserver as well, which is what the next patches implement. Unfortunately it is not possible to use "tilde_expand" in this case because gdbserver doesn't use readline. For that reason I decided to implement a new "gdb_tilde_expand" function, which is basically a wrapper for "glob" and its GNU extension, GLOB_TILDE_CHECK. With the import of the "glob" module from gnulib, we're sure that "glob" always supports this extension. gdb/ChangeLog: 2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> * Makefile.in (SFILES): Add gdb_tilde_expand.c. (HFILES_NO_SRCDIR): Add gdb_tilde_expand.h. (COMMON_OBS): Add gdb_tilde_expand.o. * common/gdb_tilde_expand.c: New file. * common/gdb_tilde_expand.h: Likewise. gdb/gdbserver/ChangeLog: 2017-10-04 Sergio Durigan Junior <sergiodj@redhat.com> * Makefile.in (SFILES): Add $(srcdir)/common/gdb_tilde_expand.c. (OBS): Add gdb_tilde_expand.o.
2017-10-04PowerPC64 ELFv2 symbols not needed in get_synthetic_symtabAlan Modra2-66/+80
* elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Don't sort or classify symbols for ELFv2.
2017-10-04PR22245, Fix potential UB in bfd_set_errorPavel I. Kryukov3-3/+10
Passing enum as a first argument to variadic argument function may lead to undefined behavior. The explanation on CERT site: https://www.securecoding.cert.org/confluence/display/cplusplus/ EXP58-CPP.+Pass+an+object+of+the+correct+type+to+va_start The bug was found by Kirill Nedostoev (nedostoev.ka@phystech.edu) when he tried to build GNU binutils with Clang 7. PR 22245 * bfd.c (bfd_set_error): Avoid UB on passing arg to va_start that undergoes default promotion. * bfd-in2.h: Regenerate.
2017-10-04Automatic date update in version.inGDB Administrator1-1/+1
2017-10-03gdbarch: Remove duplicate `struct objfile' declarationMaciej W. Rozycki3-2/+5
Remove a duplicate `struct objfile' declaration mistakenly added with commit 3e29f34a4eef ("MIPS: Keep the ISA bit in compressed code addresses"). gdb/ * gdbarch.sh (objfile): Remove duplicate declaration. * gdbarch.h: Regenerate.
2017-10-03Update my email address.Jim Wilson2-1/+5
sim/ * MAINTAINERS (aarch64): Update my email address.
2017-10-03Fix incorrect string_printf use in utils.cTom Tromey2-1/+5
I made a mistake earlier and used string_printf where I should have used string_vprintf. I'm checking this in as obvious. 2017-10-03 Tom Tromey <tom@tromey.com> * utils.c (internal_vproblem): Use string_vprintf.
2017-10-03Use std::string in info_symbol_commandTom Tromey2-9/+11
This removes a cleanup by using std::string in info_symbol_command. 2017-10-03 Tom Tromey <tom@tromey.com> * printcmd.c (info_symbol_command): Use std::string.
2017-10-03Use std::string in gdb_safe_append_historyTom Tromey2-14/+14
This removes a cleanup by using std::string in gdb_safe_append_history. 2017-10-03 Tom Tromey <tom@tromey.com> * top.c (gdb_safe_append_history): Use std::string.
2017-10-03Remove make_delete_ui_cleanupTom Tromey5-75/+57
This removes new_ui and delete_ui in favor of ordinary 'new' and 'delete', and then removes make_delete_ui_cleanup in favor of std::unique_ptr. 2017-10-03 Tom Tromey <tom@tromey.com> * event-top.c (stdin_event_handler): Update. * main.c (captured_main_1): Update. * top.h (make_delete_ui_cleanup): Remove. (struct ui): Add constructor and destructor. (new_ui, delete_ui): Remove. * top.c (make_delete_ui_cleanup): Remove. (new_ui_command): Use std::unique_ptr. (delete_ui_cleanup): Remove. (ui::ui): Rename from new_ui. Update. (free_ui): Remove. (ui::~ui): Rename from delete_ui. Update.
2017-10-03Use gdb::byte_vector in load_progressTom Tromey2-5/+8
This changes load_progress to use gdb::byte_vector, removing a cleanup. 2017-10-03 Tom Tromey <tom@tromey.com> * symfile.c (load_progress): Use gdb::byte_vector.
2017-10-03Remove unused declarationsTom Tromey4-3/+7
This removes some unused cleanup declarations. 2017-10-03 Tom Tromey <tom@tromey.com> * mi/mi-main.c (mi_cmd_trace_frame_collected): Remove unused declaration. * printcmd.c (x_command): Remove unused declaration. * symfile.c (symbol_file_command): Remove unused declaration.
2017-10-03Use std::string in utils.cTom Tromey2-29/+26
This converts internal_vproblem and defaulted_query to use std::string. 2017-10-03 Tom Tromey <tom@tromey.com> * utils.c (internal_vproblem): Use std::string. (defaulted_query): Likewise.
2017-10-03Remove set_batch_flag_and_make_cleanup_restore_page_infoTom Tromey5-84/+57
This removes set_batch_flag_and_make_cleanup_restore_page_info and make_cleanup_restore_page_info in favor of a new RAII class. This then allows for the removal of make_cleanup_restore_uinteger and make_cleanup_restore_integer ChangeLog 2017-10-03 Tom Tromey <tom@tromey.com> * guile/scm-ports.c (ioscm_with_output_to_port_worker): Update. * top.c (execute_command_to_string): Update. * utils.c (make_cleanup_restore_page_info): Remove. (do_restore_page_info_cleanup): Remove. (set_batch_flag_and_restore_page_info): New. (make_cleanup_restore_page_info): Remove. (set_batch_flag_and_make_cleanup_restore_page_info): Remove. (~set_batch_flag_and_restore_page_info): New (make_cleanup_restore_uinteger): Remove. (make_cleanup_restore_integer): Remove. (struct restore_integer_closure): Remove. (restore_integer): Remove. * utils.h (struct set_batch_flag_and_restore_page_info): New class. (set_batch_flag_and_make_cleanup_restore_page_info): Remove. (make_cleanup_restore_page_info): Remove. (make_cleanup_restore_uinteger) Remove. (make_cleanup_restore_integer) Remove.
2017-10-03Change record_full_gdb_operation_disable_set not to return a cleanupTom Tromey4-31/+32
This changes record_full_gdb_operation_disable_set to return a scoped_restore rather than a cleanup, and fixes all the users. ChangeLog 2017-10-03 Tom Tromey <tom@tromey.com> * record-full.h (record_full_gdb_operation_disable_set): Return scoped_restore_tmpl<int>. * infrun.c (adjust_pc_after_break): Update. (handle_signal_stop): Update. * record-full.c (record_full_gdb_operation_disable_set): Return scoped_restore_tmpl<int>. (record_full_wait_1, record_full_insert_breakpoint) (record_full_remove_breakpoint, record_full_save) (record_full_goto_insn): Update.
2017-10-03PR21294, Binary size regression on PPC embeddedAlan Modra2-1/+8
PR 21294 * NEWS: Note that defaulting to -z relro results in increased memory and disk size.
2017-10-03Automatic date update in version.inGDB Administrator1-1/+1
2017-10-03ld -z relro documentationAlan Modra2-6/+18
* ld.texinfo (-z relro): Expand description. (DATA_SEGMENT_ALIGN): Note that -z relro is not effective when running with system page size larger than commonpagesize. (DATA_SEGMENT_RELRO_END): Be explicit about the alignment.
2017-10-02Fix &str printing in RustTom Tromey5-8/+48
Printing a string slice ("&str") in Rust would print until the terminating \0; but that is incorrect because a slice has a length. This fixes &str printing, and arranges to preserve the type name when slicing a slice, so that printing a slice of an "&str" works as well. This is PR rust/22236. 2017-10-02 Tom Tromey <tom@tromey.com> PR rust/22236: * rust-lang.c (rust_val_print_str): New function. (val_print_struct): Call it. (rust_subscript): Preserve name of slice type. 2017-10-02 Tom Tromey <tom@tromey.com> PR rust/22236: * gdb.rust/simple.rs (main): New variable "fslice". * gdb.rust/simple.exp: Add slice tests. Update string tests.
2017-10-02Fix ptype of Rust slicesTom Tromey4-3/+67
Something like "ptype &x[..]" (where "x" was a slice) would crash gdb. rust_subscript wasn't handling slicing in the EVAL_AVOID_SIDE_EFFECTS case. 2017-10-02 Tom Tromey <tom@tromey.com> * rust-lang.c (rust_subscript): Handle slices in EVAL_AVOID_SIDE_EFFECTS case. 2017-10-02 Tom Tromey <tom@tromey.com> * gdb.rust/simple.exp: Test ptype of a slice.
2017-10-02Allow indexing of &str in RustTom Tromey4-1/+12
rust_slice_type_p was not recognizing &str as a slice type, so indexing into (or making a slice of) a slice was not working. 2017-10-02 Tom Tromey <tom@tromey.com> * rust-lang.c (rust_slice_type_p): Recognize &str as a slice type. 2017-10-02 Tom Tromey <tom@tromey.com> * gdb.rust/simple.exp: Test index of slice.
2017-10-02Add missing "extern" in rust-lang.hTom Tromey2-2/+6
I noticed that one function in rust-lang.h was not declared using "extern". In the interested of uniformity, this patch adds it. Tested by rebuilding. 2017-10-02 Tom Tromey <tom@tromey.com> * rust-lang.h (rust_slice_type): Add "extern".
2017-10-02Fix GDB build with G++ 4.8Pedro Alves3-4/+12
G++ 4.8 trips on: In file included from /opt/gcc-4.8/include/c++/4.8.5/algorithm:62:0, from ../../src/gdb/ada-lang.c:65: /opt/gcc-4.8/include/c++/4.8.5/bits/stl_algo.h: In instantiation of ‘_RandomAccessIterator std::__unguarded_partition(_RandomAccessIterator, _RandomAccessIterator, const _Tp&) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<ada_exc_info*, std::vector<ada_exc_info> >; _Tp = ada_exc_info]’: /opt/gcc-4.8/include/c++/4.8.5/bits/stl_algo.h:2283:70: required from ‘_RandomAccessIterator std::__unguarded_partition_pivot(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<ada_exc_info*, std::vector<ada_exc_info> >]’ /opt/gcc-4.8/include/c++/4.8.5/bits/stl_algo.h:2315:54: required from ‘void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<ada_exc_info*, std::vector<ada_exc_info> >; _Size = long int]’ /opt/gcc-4.8/include/c++/4.8.5/bits/stl_algo.h:5461:36: required from ‘void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator<ada_exc_info*, std::vector<ada_exc_info> >]’ ../../src/gdb/ada-lang.c:13153:61: required from here /opt/gcc-4.8/include/c++/4.8.5/bits/stl_algo.h:2245:19: error: passing ‘const ada_exc_info’ as ‘this’ argument of ‘bool ada_exc_info::operator<(const ada_exc_info&)’ discards qualifiers [-fpermissive] while (__pivot < *__last) ^ Seems to be a libstdc++ bug meanwhile fixed by: https://gcc.gnu.org/ml/libstdc++/2012-04/msg00074. In any case, there's no reason these methods can't be const. gdb/ChangeLog: 2017-10-02 Tom Tromey <tom@tromey.com> Pedro Alves <palves@redhat.com> * ada-lang.h (ada_exc_info::operator<): Make const. (ada_exc_info::operator==): Make const. * ada-lang.c (ada_exc_info::operator<, ada_exc_info::operator==): Make const.
2017-10-02nto & lynx x86: call init_target_descSimon Marchi3-2/+17
In gdbserver, target descriptions need to be initialized by calling init_target_desc. Because i386_create_target_description is shared with GDB, it doesn't do that, the callers must take care of it. These two platforms currently don't. I am not able to build them, so I couldn't test. gdb/gdbserver/ChangeLog: * lynx-i386-low.c (lynx_i386_arch_setup): Call init_target_desc. * nto-x86-low.c (nto_x86_arch_setup): Likewise.
2017-10-02Fix powerpc comment typoAlan Modra3-2/+7
* elf32-ppc.c (ppc_elf_relocate_section): Fix comment typo. * elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
2017-10-02Automatic date update in version.inGDB Administrator1-1/+1
2017-10-01PR22232, NULL pointer dereference in load_specific_debug_sectionAlan Modra2-2/+10
PR 22232 PR 22230 * objdump.c (load_specific_debug_section): Introduce a temp to stop bfd_get_full_section_contents NULLing out section->start.
2017-10-01PR21970, assertion failed when more than one overlay has subalign specifiedAlan Modra2-0/+6
PR 21970 * ldlang.c (lang_leave_overlay): Reset overlay_subalign.
2017-10-01PR21957, addr2line incorrectly handles non-increasing sequences in line tableAlan Modra2-4/+9
PR 21957 * dwarf2.c (new_line_sorts_after): Remove end_sequence comparison. (add_line_info): Always put end_sequence last.
2017-10-01Add new mnemonics for VLE multiple load instructionsAlexander Fedotov6-0/+86
opcodes/ * ppc-opc.c (vle_opcodes): Add e_lmvsprw, e_lmvgprw, e_lmvsrrw, e_lmvcsrrw and e_lmvcsrrw as official mnemonics for VLE multimple load/store instructions. Old e_ldm* variants are kept as aliases. Add missing e_lmvmcsrrw and e_stmvmcsrrw. gas/ * testsuite/gas/ppc/vle-mult-ld-st-insns.s: New file: Tests the support for the VLE multiple load/store instructions. * testsuite/gas/ppc/vle-mult-ld-st-insns.d: New file: Test driver. * testsuite/gas/ppc/ppc.exp: Run it.
2017-10-01PR22047, Heap out of bounds read in parse_comp_unitAlan Modra2-38/+22
Like the PR22230 fix, we can allocate a buffer with an extra byte rather than letting bfd_simple_get_relocated_section_contents malloc and return a buffer. Much better than allocating another buffer afterwards. PR 22047 * dwarf2.c (read_section): Allocate buffer with extra byte for bfd_simple_get_relocated_section_contents rather than copying afterwards.
2017-10-01PR22230, buffer overflow in display_debug_macroAlan Modra2-4/+11
PR 22230 * objdump.c (load_specific_debug_section): Allocate an extra byte for a terminating NUL.
2017-10-01Automatic date update in version.inGDB Administrator1-1/+1
2017-09-30Add a test for PR binutils/21978H.J. Lu5-0/+20
PR binutils/21978 * testsuite/ld-elf/pr21978.od: New file. * testsuite/ld-elf/pr21978a.c: Likewise. * testsuite/ld-elf/pr21978b.c: Likewise. * testsuite/ld-elf/shared.exp: Run PR binutils/21978 test.