aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2017-03-10Document that the .2byte and .4byte directives warn about overlarge values.Nick Clifton2-10/+22
* doc/as.texinfo (2byte): Tidy up wording. Add note that overlarge values will produce a warning message and be trunacted. (4byte): Likewise.
2017-03-10Add basic recognition of new EM_ ELF machine numbers.Nick Clifton4-78/+117
include * elf/common.h (EM_LANAI): New machine number. (EM_BPF): Likewise. (EM_WEBASSEMBLY): Likewise. Move low value, deprecated, numbers to their numerical equivalents. binutils * readelf.c (get_machine_name): Rearrange switch table in order of increasing machine number. Add missing entries.
2017-03-10Automatic date update in version.inGDB Administrator1-1/+1
2017-03-09ld: Track changes to default region LMA even for empty sectionsAndrew Burgess6-7/+47
Given a linker script fragment like this: SECTIONS { . = 0x1000; .text : AT(0x100) { *(.text) } .data : AT(0x200) { *(.data) } .rodata : AT(0x300) { *(.rodata) } } and an input file containing sections, '.text', '.data.1', and '.rodata', then we'd expect the linker to place '.text' and '.rodata' in the obvious way, and the '.data.1' orphan section would be located after the '.data' section (assuming similar section properties). Further, I believe that the expectation would be that the LMA for the orphan '.data.1' section would start from 0x200 (as there is no '.data' content). However, right now, the LMA for '.data.1' would be 0x101, following on from the '.text' section, this is because the change in LMA for the '.data' section is not noticed by the linker, if there's no content in the '.data' section. What can be even more confusing to a user (though the cause is obvious once you understand what's going on) is that adding some content to '.data' will cause the orphan '.data.1' to switch to an LMA based off of 0x200. This commit changes the behaviour so that an empty section that is in the default lma region, and sets its lma, will adjust the lma of the default region, this change will then be reflected in following sections within the default lma memory region. There's a new test to cover this issue that passes on a range of targets, however, some targets generate additional sections, or have stricter memory region size requirements that make it harder to come up with a generic pass pattern, that still tests the required features. For now I've set the test to ignore these targets. ld/ChangeLog: * ldlang.c (lang_size_sections_1): Shortcut loop only after tracking changes to the default regions LMA. * testsuite/ld-elf/orphan-9.ld: Extend header comment. * testsuite/ld-elf/orphan-10.d: New file. * testsuite/ld-elf/orphan-10.s: New file. * NEWS: Mention change in behaviour.
2017-03-09ld: better handling of lma region for orphan sectionsAndrew Burgess6-10/+89
When picking an lma_region for an orphan section we currently create a new lang_output_section_statement_type and then populate this with the orphan section. The problem is that the lang_output_section_statement_type has a prev pointer that links back to the previous output section. For non-orphan output sections, that are created in linker script order, the prev pointer will point to the output section that appears previous in linker script order, as you'd probably expect. The problem is that orphan sections are placed after processing the linker script, and so, in the case of an output section created for an orphan input section, the prev pointer actually points to the last output section created. This causes some unexpected behaviour when the orphan section is not placed after the last non-orphan section that was created. For example, consider this linker script: MEMORY { TEXT : ORIGIN = 0x200, LENGTH = 0x10 RODATA : ORIGIN = 0x400, LENGTH = 0x10 } SECTIONS { .text : {*(.text) } AT>TEXT .data : AT(0x300) { *(.data) } .rodata : { *(.rodata) } AT>RODATA } If we are processing an orphan section '.data.1' and decide to place this after '.data', then the output section created will have a prev pointer that references the '.rodata' output section. The result of this is that '.data.1' will actually be assigned to the RODATA lma region, which is probably not the expected behaviour. The reason why '.data.1' is placed into the lma region of the '.rodata' section is that lma region propagation is done at the time we create the output section, based on the previous output section pointer, which is really just a last-output-section-created pointer at that point in time, though the prev point is fixed up later to reflect the true order of the output sections. The solution I propose in this commit is to move the propagation of lma regions into a separate pass of the linker, rather than performing this as part of the enter/exit of output sections during linker script parsing. During this later phase we have all of the output sections to hand, and the prev/next points have been fixed up by this point to reflect the actual placement ordering. There's a new test to cover this issue that passes on a range of targets, however, some targets generate additional sections, or have stricter memory region size requirements that make it harder to come up with a generic pass pattern, that still tests the required features. For now I've set the test to ignore these targets. ld/ChangeLog: * ldlang.c (lang_leave_output_section_statement): Move lma_region logic to... (lang_propagate_lma_regions): ...this new function. (lang_process): Call new function. * testsuite/ld-elf/orphan-9.d: New file. * testsuite/ld-elf/orphan-9.ld: New file. * testsuite/ld-elf/orphan-9.s: New file. * NEWS: Mention change in behaviour.
2017-03-09ld: Orphan section documentationAndrew Burgess1-6/+20
Make more explicit mention of the fact that orphan sections can cause a new output section to be created. Though this information is clearly implied in the manual it might not be clear enough. A user _might_ (incorrectly) think that orphan sections can only be inserted into an existing output section. ld/ChangeLog: * ld.texinfo (Orphan Sections): Add more detail.
2017-03-09X86: Add pseudo prefixes to control encodingH.J. Lu13-121/+601
Many x86 instructions have more than one encodings. Assembler picks the default one, usually the shortest one. Although the ".s", ".d8" and ".d32" suffixes can be used to swap register operands or specify displacement size, they aren't very flexible. This patch adds pseudo prefixes, {xxx}, to control instruction encoding. The available pseudo prefixes are {disp8}, {disp32}, {load}, {store}, {vex2}, {vex3} and {evex}. Pseudo prefixes are preferred over the ".s", ".d8" and ".d32" suffixes, which are deprecated. gas/ * config/tc-i386.c (_i386_insn): Add dir_encoding and vec_encoding. Remove swap_operand and need_vrex. (extra_symbol_chars): Add '}'. (md_begin): Mark '}' with LEX_BEGIN_NAME. Allow '}' in mnemonic. (build_vex_prefix): Don't use 2-byte VEX encoding with {vex3}. Check dir_encoding and load. (parse_insn): Check pseudo prefixes. Set dir_encoding. (VEX_check_operands): Likewise. (match_template): Check dir_encoding and load. (parse_real_register): Set vec_encoding instead of need_vrex. (parse_register): Likewise. * doc/c-i386.texi: Document {disp8}, {disp32}, {load}, {store}, {vex2}, {vex3} and {evex}. Remove ".s", ".d8" and ".d32" * testsuite/gas/i386/i386.exp: Run pseudos and x86-64-pseudos. * testsuite/gas/i386/pseudos.d: New file. * testsuite/gas/i386/pseudos.s: Likewise. * testsuite/gas/i386/x86-64-pseudos.d: Likewise. * testsuite/gas/i386/x86-64-pseudos.s: Likewise. opcodes/ * i386-gen.c (opcode_modifiers): Replace S with Load. * i386-opc.h (S): Removed. (Load): New. (i386_opcode_modifier): Replace s with load. * i386-opc.tbl: Add {disp8}, {disp32}, {swap}, {vex2}, {vex3} and {evex}. Replace S with Load. * i386-tbl.h: Regenerated.
2017-03-09Fix compile time warnings about using possibly uninitialised variables in ↵Sam Thursfield2-2/+7
rs6000-core.c. * rs6000-core.c (CORE_NEW): Simplify macro when AIX_CORE_DUMPX_CORE and BFD64 are true to avoid compile warning.
2017-03-09Use CpuCET on rdsspqH.J. Lu3-2/+7
* i386-opc.tbl: Use CpuCET on rdsspq. * i386-tbl.h: Regenerated.
2017-03-08Update -maltivec and -mvsx options to only enable their oldest instructions.Peter Bergner4-4/+14
Currently, the -maltivec and -mvsx GAS options enable *all* of the altivec and vsx instructions respecitively that have ever been added. This is in constract to GCC's -maltivec and -mvsx options, which only enable the oldest (ie, first) set of altivec and vsx instructions. This patch changes GAS to mimic GCC's behaviour with respect to -maltivec and -mvsx and it solves a problem with trying to assemble the lxvx instruction which is different between POWER8 and POWER9. opcodes/ * ppc-dis.c (ppc_opts) <altivec>: Do not use PPC_OPCODE_ALTIVEC2; <vsx>: Do not use PPC_OPCODE_VSX3; gas/ * testsuite/gas/ppc/altivec2.d (as): Use the -mpower8 option. (objdump): Use the -Mpower8 option.
2017-03-09Automatic date update in version.inGDB Administrator1-1/+1
2017-03-08Avoid unstable test message in gdb.base/step-over-exit.expPedro Alves2-1/+6
Currently diffing testrun results shows: -PASS: gdb.base/step-over-exit.exp: break *0x7ffff77e18c6 if main == 0 +PASS: gdb.base/step-over-exit.exp: break *0x2aaaab0988c6 if main == 0 gdb/testsuite/ChangeLog: 2017-03-08 Pedro Alves <palves@redhat.com> * gdb.base/step-over-exit.exp: Add explicit test message.
2017-03-08Add support for the new 'lnia' extended mnemonic.Peter Bergner5-2/+16
opcodes/ * ppc-opc.c (powerpc_opcodes) <lnia>: New extended mnemonic. gas/ * testsuite/gas/ppc/power9.d <lnia> New test. * testsuite/gas/ppc/power9.s: Likewise.
2017-03-08Fix PR18360 - internal error when using "interrupt -a"Pedro Alves6-95/+410
If you do "interrupt -a" just while some thread is stepping over a breakpoint, gdb trips on an internal error. The test added by this patch manages to trigger this consistently by spawning a few threads that are constantly tripping on a conditional breakpoint whose condition always evaluates to false. With current gdb, you get: ~~~ interrupt -a .../src/gdb/inline-frame.c:343: internal-error: void skip_inline_frames(ptid_t): Assertion `find_inline_frame_state (ptid) == NULL' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) FAIL: gdb.threads/interrupt-while-step-over.exp: displaced-stepping=on: iter=0: interrupt -a (GDB internal error) [...] .../src/gdb/inline-frame.c:343: internal-error: void skip_inline_frames(ptid_t): Assertion `find_inline_frame_state (ptid) == NULL' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) FAIL: gdb.threads/interrupt-while-step-over.exp: displaced-stepping=off: iter=0: wait for stops (GDB internal error) ~~~ The assertion triggers because we're processing a stop for a thread that had already stopped before and thus had already its inline-frame state filled in. Calling handle_inferior_event_1 directly within a "thread_stop_requested" observer is something that I've wanted to get rid of before, for being fragile. Nowadays, infrun is aware of threads with pending events, so we can use that instead, and let the normal fetch_inferior_event -> handle_inferior_event code path handle the forced stop. The change to finish_step_over is necessary because sometimes a thread that was told to PTRACE_SINGLESTEP reports back a SIGSTOP instead of a SIGTRAP (i.e., we tell it to single-step, and then interrupt it quick enough that on the kernel side the thread dequeues the SIGTOP before ever having had a chance of executing the instruction to be stepped). SIGSTOP gets translated to a GDB_SIGNAL_0. And then finish_step_over would miss calling clear_step_over_info, and thus miss restarting the other threads (which in this case of threads with pending events, means setting their "resumed" flag, so their pending events can be consumed). And now that we always restart threads in finish_step_over, we no longer need to do that in handle_signal_stop. Tested on x86_64 Fedora 23, native and gdbserver. gdb/ChangeLog: 2017-03-08 Pedro Alves <palves@redhat.com> PR gdb/18360 * infrun.c (start_step_over, do_target_resume, resume) (restart_threads): Assert we're not resuming a thread that is meant to be stopped. (infrun_thread_stop_requested_callback): Delete. (infrun_thread_stop_requested): If the thread is internally stopped, queue a pending stop event and clear the thread's inline-frame state. (handle_stop_requested): New function. (handle_syscall_event, handle_inferior_event_1): Use handle_stop_requested. (handle_stop_requested): New function. (handle_signal_stop): Set the thread's stop_signal here instead of at caller. (finish_step_over): Clear step over info unconditionally. (handle_signal_stop): If the user had interrupted the event thread, consider the stop a random signal. (handle_signal_stop) <signal arrived while stepping over breakpoint>: Don't restart threads here. (stop_waiting): Don't clear step-over info here. gdb/testsuite/ChangeLog: 2017-03-08 Pedro Alves <palves@redhat.com> PR gdb/18360 * gdb.threads/interrupt-while-step-over.c: New file. * gdb.threads/interrupt-while-step-over.exp: New file.
2017-03-08gdb: Fix ATTRIBUTE_NONNULL usagePedro Alves2-1/+7
Should fix the build failure with Clang mentioned at <https://sourceware.org/bugzilla/show_bug.cgi?id=21206#c2>: In file included from ../../binutils-gdb/gdb/dwarf2read.c:72: ../../binutils-gdb/gdb/common/gdb_unlinker.h:35:35: error: '__nonnull__' attribute is invalid for the implicit this argument unlinker (const char *filename) ATTRIBUTE_NONNULL (1) ^ ~ ../../binutils-gdb/gdb/../include/ansidecl.h:169:48: note: expanded from macro 'ATTRIBUTE_NONNULL' # define ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m))) gdb/ChangeLog: 2017-03-08 Pedro Alves <palves@redhat.com> PR 21206 * common/gdb_unlinker.h (unlinker::unlinker): Attribute nonnull goes to argument 2, not 1.
2017-03-08Properly dump NT_GNU_PROPERTY_TYPE_0H.J. Lu12-45/+252
Property type and datasz are always 4 bytes for both 32-bit and 64-bit objects. Property values for GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_ISA_1_NEEDED are 4 bytes for both i386 and x86-64 objects. We should also check GNU_PROPERTY_LOPROC and GNU_PROPERTY_LOUSER. binutils/ PR binutils/21231 * readelf.c (decode_x86_isa): Change argument to unsigned int. (print_gnu_property_note): Retrieve property type and datasz as 4-byte integer. Consolidate property datasz check. Check GNU_PROPERTY_LOPROC and GNU_PROPERTY_LOUSER. * testsuite/binutils-all/i386/pr21231a.d: New file. * testsuite/binutils-all/i386/pr21231a.s: Likewise. * testsuite/binutils-all/i386/pr21231b.d: Likewise. * testsuite/binutils-all/i386/pr21231b.s: Likewise. * testsuite/binutils-all/x86-64/pr21231a.d: Likewise. * testsuite/binutils-all/x86-64/pr21231a.s: Likewise. * testsuite/binutils-all/x86-64/pr21231b.d: Likewise. * testsuite/binutils-all/x86-64/pr21231b.s: Likewise. include/ PR binutils/21231 * elf/common.h (GNU_PROPERTY_LOPROC): New. (GNU_PROPERTY_HIPROC): Likewise. (GNU_PROPERTY_LOUSER): Likewise. (GNU_PROPERTY_HIUSER): Likewise.
2017-03-08gdb.arch/amd64-entry-value-param*.exp: Make sure test messages are uniquePedro Alves3-18/+35
gdb/testsuite/ChangeLog: 2017-03-08 Pedro Alves <palves@redhat.com> * gdb.arch/amd64-entry-value-param-dwarf5.exp: Use with_test_prefix. * gdb.arch/amd64-entry-value-param.exp: Use with_test_prefix.
2017-03-08"gdb.arch/i386-pkru.exp: probe PKRU support" shouldn't FAIL if not supportedPedro Alves2-0/+8
Currently I get: (gdb) print have_pkru() $1 = 0 (gdb) FAIL: gdb.arch/i386-pkru.exp: probe PKRU support UNSUPPORTED: gdb.arch/i386-pkru.exp: processor does not support protection key feature. Probing suceeded, so that should be a PASS -> UNSUPPORTED. gdb/testsuite/ChangeLog: 2017-03-08 Pedro Alves <palves@redhat.com> * gdb.arch/i386-pkru.exp (probe PKRU support): Handle detecting PKRU as not supported as a PASS.
2017-03-08gdb: Fix a few unstable test namesPedro Alves4-5/+17
Avoid putting unstable path names in test messages, in order to avoid spurious testrun result diffs like: [....] -PASS: gdb.base/break-fun-addr.exp: /home/pedro/gdb/test-build1/gdb/testsuite/outputs/gdb.base/break-fun-addr/break-fun-addr1: break *main +PASS: gdb.base/break-fun-addr.exp: /home/pedro/gdb/test-build2/gdb/testsuite/outputs/gdb.base/break-fun-addr/break-fun-addr1: break *main [....] gdb/ChangeLog: 2017-03-08 Pedro Alves <palves@redhat.com> * gdb.base/break-fun-addr.exp: Use $testfile1/$testfile2 for test prefix instead of $binfile1/$binfile2. * gdb.btrace/gcore.exp: Use "core" instead of unstable path name in test message. * gdb.python/py-completion.exp: Use "load python file" as test messages instead of unstable path names.
2017-03-08Fix PR 21218: GDB dumps core when escaping newline in multi-line commandPedro Alves4-2/+52
With commit 3b12939dfc2399 ("Replace the sync_execution global with a new enum prompt_state tristate"), GDB started aborting if you try splitting an input line with a continuation char (backslash) while in a multi-line command: (gdb) commands Type commands for breakpoint(s) 1, one per line. End with a line saying just "end". >print \ (gdb) 1 # note "(gdb)" incorrectly printed here. >end readline: readline_callback_read_char() called with no handler! $ That abort is actually a symptom of an old problem introduced when gdb_readline_wrapper was rewritten to use asynchronous readline, back in 2007. Note how the "(gdb)" prompt is printed above in the "(gdb) 1" line. Clearly it shouldn't be there, but it already was before the commit mentioned above. Fixing that also fixes the readline abort shown above. The problem starts when command_line_input passes a NULL prompt to gdb_readline_wrapper when it finds previous incomplete input due to a backslash, trying to fetch more input without printing another ">" secondary prompt. That itself should not be a problem, because passing NULL to gdb_readline_wrapper has the same meaning as passing a pointer to empty string, since gdb_readline_wrapper exposes the same interface as 'readline(char *)'. However, gdb_readline_wrapper passes the prompt argument directly to display_gdb_prompt, and for the latter, a NULL prompt argument has a different meaning - it requests printing the primary prompt. Before commit 782a7b8ef9c096 (which rewrote gdb_readline_wrapper to use asynchronous readline), GDB behaved like this: (gdb) commands [....] >print \ 1 >end (gdb) The above is what this commit restores GDB back to. New test included. gdb/ChangeLog: 2017-03-08 Pedro Alves <palves@redhat.com> PR cli/21218 * top.c (gdb_readline_wrapper): Avoid passing NULL to display_gdb_prompt. (command_line_input): Add comment. gdb/testsuite/ChangeLog: 2017-03-08 Pedro Alves <palves@redhat.com> Jan Kratochvil <jan.kratochvil@redhat.com> PR cli/21218 * gdb.base/commands.exp (backslash_in_multi_line_command_test): New proc. (top level): Call it.
2017-03-08[gdb, doc] Add missing escape character '@'Jiong Wang2-1/+6
gdb/doc/ * gdb.texinfo (Memory Protection Extensions): Add missing escape character "@".
2017-03-08Fix PR tui/21216: TUI line breaks regressionPedro Alves7-40/+165
Commit d7e747318f4d04 ("Eliminate make_cleanup_ui_file_delete / make ui_file a class hierarchy") regressed the TUI's command window. Newlines miss doing a "carriage return", resulting in output like: ~~~~~~~~~~~~~~~~~~ (gdb) helpList of classes of commands: aliases -- Aliases of other commands breakpoints -- Making program stop at certain points ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Before the commit mentioned above, the default ui_file->to_write implementation had a hack that would defer into the ui_file->to_fputs method. The TUI's ui_file did not implement the to_write method, so all writes would end up going to the ncurses window via tui_file_fputs -> tui_puts. After the commit above, the hack is gone, but the TUI's ui_file still does not implement the ui_file::write method. Since tui_file inherits from stdio_file, writing to a tui_file ends up doing fwrite on the FILE stream the TUI is "associated" with, via stdio_file::write, instead of writing to the ncurses window. The fix is to have tui_file override the "write" method. New test included. gdb/ChangeLog: 2017-03-08 Pedro Alves <palves@redhat.com> PR tui/21216 * tui/tui-file.c (tui_file::write): New. * tui/tui-file.h (tui_file): Override "write". * tui/tui-io.c (do_tui_putc, update_start_line): New functions, factored out from ... (tui_puts): ... here. (tui_putc): Use them. (tui_write): New function. * tui/tui-io.h (tui_write): Declare. gdb/testsuite/ChangeLog: 2017-03-08 Pedro Alves <palves@redhat.com> PR tui/21216 * gdb.tui/tui-nl-filtered-output.exp: New file.
2017-03-08Move TUI completion tests to gdb.tui/completion.expPedro Alves3-37/+63
gdb/testsuite/ChangeLog: 2017-03-08 Pedro Alves <palves@redhat.com> * gdb.base/completion.exp: Move TUI completion tests to ... * gdb.tui/completion.exp: ... this new file.
2017-03-08Move TUI testcases to new gdb/testsuite/gdb.tui/ directoryPedro Alves5-0/+7
Let's start putting TUI tests in their own dir. gdb/testsuite/ 2017-03-08 Pedro Alves <palves@redhat.com> * gdb.base/tui-disasm-long-lines.c, gdb.base/tui-disasm-long-lines.exp, gdb.base/tui-layout.c, gdb.base/tui-layout.exp: Move to ... * gdb.tui/: ... this new directory.
2017-03-08Automatic date update in version.inGDB Administrator1-1/+1
2017-03-07Share gdb/environ.[ch] with gdbserverSergio Durigan Junior6-3/+24
We will need access to the environment functions when we share fork_inferior between GDB and gdbserver, therefore we simply make the API on gdb/environ.[ch] available on common/. No extra adjustments are needed to make it compile on gdbserver. gdb/ChangeLog: 2017-03-07 Sergio Durigan Junior <sergiodj@redhat.com> * Makefile.in (SFILES): Replace "environ.c" with "common/environ.c". (HFILES_NO_SRCDIR): Likewise, for "environ.h". * environ.c: Include "common-defs.h" instead of "defs.h. Moved to... * common/environ.c: ... here. * environ.h: Moved to... * common/environ.h: ... here. gdb/gdbserver/ChangeLog: 2017-03-07 Sergio Durigan Junior <sergiodj@redhat.com> * Makefile.in (SFILES): Add "common/environ.c". (OBJS): Add "common/environ.h".
2017-03-07GDB: Fix some null pointer dereferences due to disassembler-options patch.Peter Bergner3-4/+28
gdb/ * gdbarch.sh (pstring_ptr): New static function. (gdbarch_disassembler_options): Use it. (gdbarch_verify_disassembler_options): Print valid_disassembler_options, not valid_disassembler_option->name. * gdbarch.c: Regenerate.
2017-03-07Remove use of the no longer needed -mminimal-toc option.Peter Bergner2-6/+4
* config/powerpc/ppc64-linux.mh (MH_CFLAGS): Delete.
2017-03-07Fix "layout reg" crashPedro Alves5-1/+87
Commit d7e747318f4d04 ("Eliminate make_cleanup_ui_file_delete / make ui_file a class hierarchy") introduced a problem when using "layout regs", that leads gdb to crash when issuing: ./gdb ./a.out -ex 'layout regs' -ex start From the backtrace, it's caused by this 'delete' on tui_restore_gdbout(): (gdb) bt #0 0x00007ffff6b962b2 in free () from /lib64/libc.so.6 #1 0x000000000059fa47 in tui_restore_gdbout (ui=0x22997b0) at ../../gdb/tui/tui-regs.c:714 #2 0x0000000000619996 in do_my_cleanups (pmy_chain=pmy_chain@entry=0x1e08320 <cleanup_chain>, old_chain=old_chain@entry=0x235b4b0) at ../../gdb/common/cleanups.c:154 #3 0x0000000000619b1d in do_cleanups (old_chain=old_chain@entry=0x235b4b0) at ../../gdb/common/cleanups.c:176 #4 0x000000000059fb0d in tui_register_format (frame=frame@entry=0x22564e0, regnum=regnum@entry=0) at ../../gdb/tui/tui-regs.c:747 #5 0x000000000059ffeb in tui_get_register (data=0x2434d18, changedp=0x0, regnum=0, frame=0x22564e0) at ../../gdb/tui/tui-regs.c:768 #6 tui_show_register_group (refresh_values_only=<optimized out>, frame=0x22564e0, group=0x1e09250 <general_group>) at ../../gdb/tui/tui-regs.c:287 #7 tui_show_registers (group=0x1e09250 <general_group>) at ../../gdb/tui/tui-regs.c:156 #8 0x00000000005a07cf in tui_check_register_values (frame=frame@entry=0x22564e0) at ../../gdb/tui/tui-regs.c:496 #9 0x00000000005a3e65 in tui_check_data_values (frame=frame@entry=0x22564e0) at ../../gdb/tui/tui-windata.c:232 #10 0x000000000059cf65 in tui_refresh_frame_and_register_information (registers_too_p=1) at ../../gdb/tui/tui-hooks.c:156 #11 0x00000000006d5c05 in generic_observer_notify (args=0x7fffffffdbe0, subject=<optimized out>) at ../../gdb/observer.c:167 #12 observer_notify_normal_stop (bs=<optimized out>, print_frame=print_frame@entry=1) at ./observer.inc:61 #13 0x00000000006a6409 in normal_stop () at ../../gdb/infrun.c:8364 #14 0x00000000006af8f5 in fetch_inferior_event (client_data=<optimized out>) at ../../gdb/infrun.c:3990 #15 0x000000000066f0fd in gdb_wait_for_event (block=block@entry=0) at ../../gdb/event-loop.c:859 #16 0x000000000066f237 in gdb_do_one_event () at ../../gdb/event-loop.c:322 #17 0x000000000066f386 in gdb_do_one_event () at ../../gdb/event-loop.c:353 #18 0x00000000007411bc in wait_sync_command_done () at ../../gdb/top.c:570 #19 0x0000000000741426 in maybe_wait_sync_command_done (was_sync=0) at ../../gdb/top.c:587 #20 execute_command (p=<optimized out>, p@entry=0x7fffffffe43a "start", from_tty=from_tty@entry=1) at ../../gdb/top.c:676 #21 0x00000000006c2048 in catch_command_errors (command=0x741200 <execute_command(char*, int)>, arg=0x7fffffffe43a "start", from_tty=1) at ../../gdb/main.c:376 #22 0x00000000006c2b60 in captured_main_1 (context=0x7fffffffde70) at ../../gdb/main.c:1119 #23 captured_main (data=0x7fffffffde70) at ../../gdb/main.c:1140 #24 gdb_main (args=args@entry=0x7fffffffdf90) at ../../gdb/main.c:1158 #25 0x0000000000408cf5 in main (argc=<optimized out>, argv=<optimized out>) at ../../gdb/gdb.c:32 (gdb) f 1 #1 0x000000000059fa47 in tui_restore_gdbout (ui=0x22997b0) at ../../gdb/tui/tui-regs.c:714 714 delete gdb_stdout; The problem is simply that the commit mentioned above made the ui_file that gdb_stdout is temporarily set to be a stack-allocated string_file, while before it used to be a heap-allocated ui_file. The fix is simply to remove the now-incorrect delete. New test included, which exercises enabling all TUI layouts, with and without execution. (This particular crash only triggers with execution.) gdb/ChangeLog: 2017-03-07 Pedro Alves <palves@redhat.com> * tui/tui-regs.c (tui_restore_gdbout): Don't delete gdb_stdout. gdb/testsuite/ChangeLog: 2017-03-07 Pedro Alves <palves@redhat.com> * gdb.base/tui-layout.c: New file. * gdb.base/tui-layout.exp: New file.
2017-03-07Rename gdb.base/tui-layout.exp -> gdb.base/tui-disasm-long-lines.expPedro Alves3-0/+7
To better reflect what the testcase is about, and to make room for a different testcase. gdb/testsuite/ChangeLog: 2017-03-07 Pedro Alves <palves@redhat.com> * gdb.base/tui-layout.c: Rename to ... * gdb.base/tui-disasm-long-lines.c: ... this. * gdb.base/tui-layout.exp: Rename to ... * gdb.base/tui-disasm-long-lines.exp: ... this.
2017-03-07Add describing intro comment to gdb.base/tui-layout.expPedro Alves2-1/+8
gdb/testsuite/ChangeLog: 2017-03-07 Pedro Alves <palves@redhat.com> * gdb.base/tui-layout.exp: Add intro comment and fix typo.
2017-03-07Fix whitespace/typos in gdb/ChangeLog and gdb/testsuite/ChangeLogPedro Alves2-5/+5
2017-03-07amd64-mpx: initialize BND register before performing inferior calls.Walfred Tedeschi10-0/+599
This patch initializes the BND registers before executing the inferior call. BND registers can be in arbitrary values at the moment of the inferior call. In case the function being called uses as part of the parameters BND register, e.g. when passing a pointer as parameter, the current value of the register will be used. This can cause boundary violations that are not due to a real bug or even desired by the user. In this sense the best to be done is set the BND registers to allow access to the whole memory, i.e. initialized state, before pushing the inferior call. 2017-03-07 Walfred Tedeschi <walfred.tedeschi@intel.com> gdb/ChangeLog: * i387-tdep.h (i387_reset_bnd_regs): Add function definition. * i387-tdep.c (i387_reset_bnd_regs): Add function implementation. * i386-tdep.c (i386_push_dummy_call): Call i387_reset_bnd_regs. * amd64-tdep (amd64_push_dummy_call): Call i387_reset_bnd_regs. gdb/testsuite/ChangeLog: * i386-mpx-call.c: New file. * i386-mpx-call.exp: New file. gdb/doc/ChangeLog: * Memory Protection Extensions: Add information about inferior calls.
2017-03-07Correct @section placement for makeinfo 4.13Alan Modra2-3/+7
* doc/as.texinfo (2byte, 4byte, 8byte): Correct @section placement.
2017-03-07Document .Nbyte assembler directivesAlan Modra3-0/+46
* doc/as.texinfo (2byte, 4byte, 8byte): Document. * doc/c-arm.texi (2byte, 4byte, 8byte): Omit if ELF.
2017-03-07Fix ld uninitialized read of script ASSERT data structureAlan Modra2-1/+7
lang_assignment_statement serves both assignments and asserts. * ldlang.c (open_input_bfds): Check that lang_assignment_statement is not an assert before referencing defsym.
2017-03-07PowerPC64 abort due to dynamic relocs on hidden undefweakAlan Modra2-2/+11
ppc64_elf_relocate_section lacked a check which meant that it emitted dynamic relocs against a hidden undefweak symbol for which no dynamic relocs had been allocated. PR 21224 PR 20519 * elf64-ppc.c (ppc64_elf_relocate_section): Add missing dyn_relocs check.
2017-03-07Automatic date update in version.inGDB Administrator1-1/+1
2017-03-06Add support for Intel CET instructionsH.J. Lu17-334/+894
Support Intel Control-flow Enforcement Technology (CET) instructions: https://software.intel.com/sites/default/files/managed/4d/2a/control-flow-enforcement-technology-preview.pdf gas/ * config/tc-i386.c (cpu_arch): Add .cet. * doc/c-i386.texi: Document cet. * testsuite/gas/i386/cet-intel.d: New file. * testsuite/gas/i386/cet.d: Likewise. * testsuite/gas/i386/cet.s: Likewise. * testsuite/gas/i386/x86-64-cet-intel.d: Likewise. * testsuite/gas/i386/x86-64-cet.d: Likewise. * testsuite/gas/i386/x86-64-cet.s: Likewise. * testsuite/gas/i386/i386.exp: Run Intel CET tests. opcodes/ * i386-dis.c (REG_0F1E_MOD_3): New enum. (MOD_0F1E_PREFIX_1): Likewise. (MOD_0F38F5_PREFIX_2): Likewise. (MOD_0F38F6_PREFIX_0): Likewise. (RM_0F1E_MOD_3_REG_7): Likewise. (PREFIX_MOD_0_0F01_REG_5): Likewise. (PREFIX_MOD_3_0F01_REG_5_RM_1): Likewise. (PREFIX_MOD_3_0F01_REG_5_RM_2): Likewise. (PREFIX_0F1E): Likewise. (PREFIX_MOD_0_0FAE_REG_5): Likewise. (PREFIX_0F38F5): Likewise. (dis386_twobyte): Use PREFIX_0F1E. (reg_table): Add REG_0F1E_MOD_3. (prefix_table): Add PREFIX_MOD_0_0F01_REG_5, PREFIX_MOD_3_0F01_REG_5_RM_1, PREFIX_MOD_3_0F01_REG_5_RM_2, PREFIX_0F1E, PREFIX_MOD_0_0FAE_REG_5 and PREFIX_0F38F5. Update PREFIX_0FAE_REG_6 and PREFIX_0F38F6. (three_byte_table): Use PREFIX_0F38F5. (mod_table): Use PREFIX_MOD_0_0F01_REG_5, PREFIX_MOD_0_0FAE_REG_5. Add MOD_0F1E_PREFIX_1, MOD_0F38F5_PREFIX_2, MOD_0F38F6_PREFIX_0. (rm_table): Add MOD_0F38F5_PREFIX_2, MOD_0F38F6_PREFIX_0, RM_0F1E_MOD_3_REG_7. Use PREFIX_MOD_3_0F01_REG_5_RM_1 and PREFIX_MOD_3_0F01_REG_5_RM_2. * i386-gen.c (cpu_flag_init): Add CPU_CET_FLAGS. (cpu_flags): Add CpuCET. * i386-opc.h (CpuCET): New enum. (CpuUnused): Commented out. (i386_cpu_flags): Add cpucet. * i386-opc.tbl: Add Intel CET instructions. * i386-init.h: Regenerated. * i386-tbl.h: Likewise.
2017-03-06Update x86-64-mpx-inval-2 test for COFFH.J. Lu3-4/+12
Assembler displays upper case hex numbers and we need to force a good alignment to avoid matching NOPs at the end. * testsuite/gas/i386/x86-64-mpx-inval-2.s: Force a good alignment. * testsuite/gas/i386/x86-64-mpx-inval-2.l: Expect [0-9A-F]+.
2017-03-06Remove const in xtensa-linux-nat.c:fetch_gregsSimon Marchi2-1/+5
Fixes: /home/emaisin/src/binutils-gdb/gdb/xtensa-linux-nat.c: In function 'void fetch_gregs(regcache*, ptid_t, int)': /home/emaisin/src/binutils-gdb/gdb/xtensa-linux-nat.c:178:23: error: uninitialized const 'regs' [-fpermissive] const gdb_gregset_t regs; ^ gdb/ChangeLog: * xtensa-linux-nat.c (fetch_gregs): Remove const.
2017-03-06Fix reading numeric values from GNU BUILD NOTEs.Nick Clifton2-2/+11
* readelf.c (print_gnu_build_attribute_name): Read byte values from the name string as unsigned bytes. (process_notes_at): Use memcpy to copy an unterminated name string.
2017-03-06Don't decode powerpc insns with invalid fieldsAlan Modra2-49/+168
Certain insns have restrictions on fields. For example, the insn mentioned in the PR, lqarx, must specify an even general purpose register as its destination and that register cannot appear in either of the base or index reg fields. This holds even when the RA0 field is 0 (meaning a zero rather than r0). PR 21124 * ppc-opc.c (extract_esync, extract_ls, extract_ral, extract_ram) (extract_raq, extract_ras, extract_rbx): New functions. (powerpc_operands): Use opposite corresponding insert function. (Q_MASK): Define. (powerpc_opcodes): Apply Q_MASK to all quad insns with even register restriction.
2017-03-06dw2gencfi.c DWARF2_FDE_RELOC_SIZEAlan Modra2-12/+22
Add asserts that reloc size matches encoding size, and tidy. * dw2gencfi.c (encoding_size): Return unsigned int. (emit_expr_encoded): Assert size matches reloc bitsize. (output_fde): Use unsigned for offset_size and addr_size. Set addr_size earlier and use in place of constant 4 and uses of DWARF2_FDE_RELOC_SIZE. Assert it matches reloc bitsize.
2017-03-06gas/dw2gencfi.c formattingAlan Modra2-25/+35
* dw2gencfi.c: Wrap overlong lines. Add parens for emacs auto reformat. Formatting and whitespace fixes.
2017-03-06binutils: Fix warning on platforms that don't have asprintfSam Thursfield4-1/+21
* configure.ac (AC_CHECK_DECLS): Add asprintf. * config.in: Regenerate. * configure: Regenerate.
2017-03-06Automatic date update in version.inGDB Administrator1-1/+1
2017-03-05gas: Emit name, comp_dir and producer strings in .debug_str.Mark Wielaard3-21/+65
Putting the name, comp_dir and producer strings in the .debug_str section makes it possible to share them across CUs. This saves a small amount of space (about ~20K on a glibc libc.so.6 build with debuginfo). And makes it easier for tools like rpm debugedit to adjust the source paths when generating separate debuginfo files. gas/ * dwarf2dbg.c (out_debug_abbrev): Use DW_FORM_strp instead of DW_FORM_string for DW_AT_name, DW_AT_comp_dir and DW_AT_producer. (out_debug_info): Accept symbols to name, comp_dir and producer in the .debug_str section and emit those offsets not full strings. (out_debug_str): New function that outputs the strings for name, comp_dir and producer in .debug_str and generates symbols to those strings. (out_debug_line): Create a .debug_str section if necessary and call out_debug_str before calling out_debug_info. * testsuite/gas/aarch64/dwarf.d: Add extra section symbol to expected output.
2017-03-05Align eh_frame FDEs according to their encodingAlan Modra21-225/+251
bfd/ * elf-bfd.h (struct eh_cie_fde): Add u.cie.per_encoding_aligned8. * elf-eh-frame.c (size_of_output_cie_fde): Don't align here. (next_cie_fde_offset): New function. (_bfd_elf_parse_eh_frame): Set u.cie.per_encoding_aligned8. (_bfd_elf_discard_section_eh_frame): Align zero terminator to four bytes. Align CIEs to four or eight bytes depending on per_encoding_aligned8. Align FDEs according to their encoding. Pad last FDE to output section alignment. (_bfd_elf_write_section_eh_frame): Adjust to suit. Remove assertion. * elf64-ppc.c (glink_eh_frame_cie): Delete padding. (ppc64_elf_size_stubs): Pad glink eh_frame as per elf-eh-frame.c. (ppc64_elf_finish_dynamic_sections): Adjust to suit. ld/ * testsuite/ld-elf/eh3.d: Adjust for eh_frame alignment change. * testsuite/ld-elf/eh6.d: Likewise. * testsuite/ld-alpha/tlsbin.dd: Likewise. * testsuite/ld-alpha/tlsbin.td: Likewise. * testsuite/ld-alpha/tlsbinr.dd: Likewise. * testsuite/ld-alpha/tlspic.dd: Likewise. * testsuite/ld-alpha/tlspic.rd: Likewise. * testsuite/ld-alpha/tlspic.sd: Likewise. * testsuite/ld-alpha/tlspic.td: Likewise. * testsuite/ld-mips-elf/eh-frame1-n64.d: Likewise. * testsuite/ld-mips-elf/eh-frame2-n64.d: Likewise. * testsuite/ld-mips-elf/eh-frame3.d: Likewise. * testsuite/ld-x86-64/pr20830a.d: Likewise. * testsuite/ld-x86-64/pr21038a.d: Likewise. * testsuite/ld-x86-64/pr21038b.d: Likewise. * testsuite/ld-x86-64/pr21038c.d: Likewise.
2017-03-05Automatic date update in version.inGDB Administrator1-1/+1