aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2015-05-21Automatic date update in version.inGDB Administrator1-1/+1
2015-05-20gdb/testsuite: New skip_tui_tests predicate.Andrew Burgess3-0/+28
Add a new predicate procedure to the gdb.exp library 'skip_tui_tests', which returns true if the tui is not compiled into gdb. Make use of this predicate in the gdb.base/tui-layout.exp test as an example. gdb/testsuite/ChangeLog: * lib/gdb.exp (skip_tui_tests): New proc. * gdb.base/tui-layout.exp: Check skip_tui_tests.
2015-05-20Skip extra relocations in .rel.plt/.rela.pltH.J. Lu3-0/+17
Extra relocations may be added to the .rel.plt/.rela.plt section, which are unrelated to PLT. We should skip them when retrieving PLT entry symbol values. PR binutils/18437 * elf32-i386.c (elf_i386_get_plt_sym_val): Skip extra relocations in .rel.plt/.rela.plt. * elf64-x86-64.c (elf_x86_64_get_plt_sym_val): Likewise.
2015-05-20[AArch64/BFD] Sort relocation case labels alphabeticallyJiong Wang3-79/+91
2015-05-19 Jiong Wang <jiong.wang@arm.com> bfd/ * elfnn-aarch64.c (aarch64_tls_transition_without_check): Sort relocation case labels alphabetically. (elfNN_aarch64_final_link_relocate): Ditto. (elfNN_aarch64_tls_relax): Ditto. (elfNN_aarch64_relocate_section): Ditto. (elfNN_aarch64_gc_sweep_hook): Ditto. (elfNN_aarch64_check_relocs): Ditto. * elfxx-aarch64.c (_bfd_aarch64_elf_put_addend): Ditto. (_bfd_aarch64_elf_resolve_relocation): Ditto.
2015-05-20[AArch64] Sort relocation case labels alphabeticallyJiong Wang2-18/+25
2015-05-19 Jiong. Wang <jiong.wang@arm.com> gas/ * config/tc-aarch64.c (process_movw_reloc_info): Sort relocation case labels alphabetically. (md_apply_fix): Ditto. (aarch64_force_relocation): Ditto.
2015-05-20Memory leak reading frame register during inferior event handlingJoel Brobecker2-1/+22
When using a conditional breakpoint where the condition evaluated to false a large number of times before the program stopped, a user reported that GDB's memory consumption was growing very quickly until it ran out of memory. The problem was tracked down to temporary struct values being created each time the program stops and handles an inferior event. Because the breakpoint condition usually evaluates to false, there can be a fairly large number of such events to be handled before we eventually return the prompt to the user (which is when we would normally purge such values). This patch fixes the issue by making sure that handle_inferior_event releases all new values created during its execution. gdb/ChangeLog: * infrun.c (handle_inferior_event_1): Renames handle_inferior_event. (handle_inferior_event): New function.
2015-05-20gdb/ada-lang.c: Rename local variable typename into type_name...Joel Brobecker2-5/+10
... to avoid a build failure when building with C++ compiler (when configured with --enable-build-with-cxx). We cannot use "typename" as it is a C++ reserved keyword. gdb/ChangeLog: * ada-lang.c (to_fixed_array_type): Rename local variable typename into type_name.
2015-05-20Automatic date update in version.inGDB Administrator1-1/+1
2015-05-19compile: Fix ASAN crash for gdb.compile/compile.expJan Kratochvil2-2/+10
(gdb) PASS: gdb.compile/compile.exp: set unwindonsignal on compile code *(volatile int *) 0 = 0; Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7fba426 in _gdb_expr (__regs=0x7ffff7fb8000) at gdb command line:1 1 gdb command line: No such file or directory. ================================================================= ==10462==ERROR: AddressSanitizer: heap-use-after-free on address 0x621000cf7a3d at pc 0x0000004e46b9 bp 0x7ffdeb0f7a40 sp 0x7ffdeb0f71b8 READ of size 10 at 0x621000cf7a3d thread T0 #0 0x4e46b8 in printf_common(void*, char const*, __va_list_tag*) [clone .isra.6] (/home/jkratoch/redhat/gdb-clean-asan/gdb/gdb+0x4e46 b8) #1 0x4f645e in vasprintf (/home/jkratoch/redhat/gdb-clean-asan/gdb/gdb+0x4f645e) #2 0xe5cf00 in xstrvprintf common/common-utils.c:120 #3 0xe74192 in throw_it common/common-exceptions.c:332 #4 0xe742f6 in throw_verror common/common-exceptions.c:361 #5 0xddc89e in verror /home/jkratoch/redhat/gdb-clean-asan/gdb/utils.c:541 #6 0xe734bd in error common/errors.c:43 #7 0xafa1d6 in call_function_by_hand_dummy /home/jkratoch/redhat/gdb-clean-asan/gdb/infcall.c:1031 #8 0xe81858 in compile_object_run compile/compile-object-run.c:119 #9 0xe7733c in eval_compile_command compile/compile.c:577 #10 0xe7541e in compile_code_command compile/compile.c:153 It is obvious why that happens, dummy_frame_pop() will call compile objfile cleanup which will free that objfile and NAME then becomes a stale pointer. > Is there any reason we release OBJFILE in the dummy frame dtor? Why > don't we register a cleanup to release in OBJFILE in compile_object_run? > together with releasing compile_module? 'struct compile_module' has a > field objfile, which should be released together with > 'struct compile_module' instead of dummy_frame. (gdb) break puts Breakpoint 2 at 0x3830c6fd30: file ioputs.c, line 34. (gdb) compile code puts("hello") Breakpoint 2, _IO_puts (str=0x7ffff7ff8000 "hello") at ioputs.c:34 34 { The program being debugged stopped while in a function called from GDB. Evaluation of the expression containing the function (_gdb_expr) will be abandoned. When the function is done executing, GDB will silently stop. (gdb) bt (gdb) _ Now compile_object_run() called from line (gdb) compile code puts("hello") has finished for a long time. But we still need to have that injected code OBJFILE valid when GDB is executing it. Therefore OBJFILE is freed only from destructor of the frame #1. At the patched line of call_function_by_hand_dummy() the dummy frame destructor has not yet been run but it will be run before the fetched NAME will get used. gdb/ChangeLog 2015-05-19 Jan Kratochvil <jan.kratochvil@redhat.com> Fix ASAN crash for gdb.compile/compile.exp. * infcall.c (call_function_by_hand_dummy): Use xstrdup for NAME.
2015-05-19compile: gdb_stdout -> gdb_stdlogJan Kratochvil4-16/+24
Please send debug output to gdb_stdlog. OK but gdb/compile/ is using now only gdb_stdout; the error above is due to a copy-paste. So I will send a follow-up patch to change all the other gdb/compile/ gdb_stdout strings to gdb_stdlog. gdb/ChangeLog 2015-05-19 Jan Kratochvil <jan.kratochvil@redhat.com> * compile/compile-c-symbols.c (convert_symbol_sym, gcc_convert_symbol) (gcc_symbol_address): Change gdb_stdout to gdb_stdlog. * compile/compile-object-load.c (setup_sections, compile_object_load): Likewise. * compile/compile.c (compile_to_object): Likewise.
2015-05-19Fix gdb.base/gdbinit-history.exp when HISTSIZE is set in the environmentPedro Alves2-2/+17
Some buildslaves are showing that this test is failing. E.g.,: https://sourceware.org/ml/gdb-testers/2015-q2/msg04164.html The issue is that HISTSIZE is set to 1000 in the environment that runs the tests (that's the default in Fedora, set in /etc/profile). We can trivially reproduce it with: $ HISTSIZE=1000 make check RUNTESTFLAGS="gdbinit-history.exp" (...) Running /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.base/gdbinit-history.exp ... FAIL: gdb.base/gdbinit-history.exp: show history size FAIL: gdb.base/gdbinit-history.exp: show history size FAIL: gdb.base/gdbinit-history.exp: show commands gdb.log shows: ... (gdb) set height 0 (gdb) set width 0 (gdb) show history size The size of the command history is 1000. (gdb) FAIL: gdb.base/gdbinit-history.exp: show history size gdb/testsuite/ChangeLog: 2015-05-19 Pedro Alves <palves@redhat.com> * gdb.base/gdbinit-history.exp (test_gdbinit_history_setting): Save the whole env array instead of just HOME. Unset HISTSIZE in the environment while testing. Restore whole environment afterwards.
2015-05-19Automatic date update in version.inGDB Administrator1-1/+1
2015-05-18Fix seg-fault in readelf when decoding corrupt IA64 unwind information.Nick Clifton4-53/+52
PR binutils/18420 * ia64-unwind.c (unw_decode): Add end parameter. Pass parameter on to decode functions. (unw_devode_p2_p5): Pass end paraemter to UNW_DEC_SPILL_MASK. (UNW_DEC_SPILL_MASK): Add end parameter. Check that unw_rlen does not take us beyond the end of the buffer. * ia64-unwind.h (unw_decode): Update prototype. * readelf.c (dump_ia64_unwind): Pass end pointer to unw_decode.
2015-05-18Fix dw-2 test for 16-bit targets.Nick Clifton2-1/+5
* binutils-all/dw2-3.S: Replace .int with .4byte.
2015-05-18Remove Disp32 from AMD64 direct call/jmpH.J. Lu3-4/+9
* i386-opc.tbl: Remove Disp32 from AMD64 direct call/jmp. * i386-init.h: Regenerated.
2015-05-18[AArch64] Remove X86-64 commentsJiong Wang2-5/+6
bfd/ * elfnn-aarch64.c (elfNN_aarch64_adjust_dynamic_symbol): Rewrite comments.
2015-05-18Automatic date update in version.inGDB Administrator1-1/+1
2015-05-18Add myself to write-after-approval listMax Filippov1-0/+1
gdb/ * MAINTAINERS (Write After Approval): Add Max Filippov.
2015-05-17sim: erc32: restore attributionMike Frysinger8-7/+33
2015-05-17ELF options may be missing from `ld --help' outputChung-Lin Tang3-68/+91
nios2-linux has an emulation named "nios2linux", and happens to not include another extra emulation with a name matching *elf*. This makes nios2-linux left out of the ELF options printing targets, which is unintended. * configure.ac (AC_PROG_GREP): Check for grep program. (elf_list_options,elf_shlib_list_options,elf_plt_unwind_list_options): Enable ELF option printing for emulations containing 'TEMPLATE_NAME=elf32'. * configure: Regenerate.
2015-05-17Automatic date update in version.inGDB Administrator1-1/+1
2015-05-16Add support for unbuffered and zero sized Guile ports.Doug Evans8-72/+304
gdb/ChangeLog * NEWS: Mention support for unbuffered Guile memory ports. * scm-ports.c (ioscm_memory_port): Update comments on end, size. (ioscm_lseek_address): Improve overflow calculation. (gdbscm_memory_port_fill_input): Add assert. (gdbscm_memory_port_write): Handle unbuffered ports. Handle large writes identical to Guile's fport_write. (gdbscm_memory_port_seek): Fix seeking past end check. (gdbscm_memory_port_close): Handle closing unbuffered port. (ioscm_parse_mode_bits): Recognize "0" for unbuffered ports. (ioscm_init_memory_port): Handle unbuffered ports. (ioscm_reinit_memory_port): Ditto. (ioscm_init_memory_port): Update size calculation. (gdbscm_open_memory): Support zero sized ports. gdb/testsuite/ChangeLog * gdb.guile/scm-ports.c: New file. * gdb.guile/scm-ports.exp: Add memory port tests. gdb/doc/ChangeLog * guile.texi (Memory Ports in Guile): Document support for unbuffered memory ports.
2015-05-16compile: Fix uninitialized variable compiler warningsJan Kratochvil2-3/+11
gdb/ChangeLog 2015-05-16 Jan Kratochvil <jan.kratochvil@redhat.com> * compile/compile-object-load.c (get_out_value_type): Fix uninitialized variable compiler warnings.
2015-05-16Don't generate PLT relocations for now bindingH.J. Lu8-4/+102
There is no need for PLT relocations with -z now. We can use GOT relocations, which take less space, instead and replace 16-byte .plt entres with 8-byte .plt.got entries. bfd/ * elf32-i386.c (elf_i386_check_relocs): Create .plt.got section for now binding. (elf_i386_allocate_dynrelocs): Use .plt.got section for now binding. * elf64-x86-64.c (elf_x86_64_check_relocs): Create .plt.got section for now binding. (elf_x86_64_allocate_dynrelocs): Use .plt.got section for now binding. ld/testsuite/ * ld-i386/i386.exp: Run PR ld/17689 tests with -z now. * ld-x86-64/x86-64.exp: Likewise * ld-i386/pr17689now.rd: New file. * ld-x86-64/pr17689now.rd: Likewise
2015-05-16compile: Fix detected inferior typeJan Kratochvil2-2/+7
gdb/ChangeLog 2015-05-16 Jan Kratochvil <jan.kratochvil@redhat.com> * compile/compile-object-load.c (get_out_value_type): Fix returned type.
2015-05-16[GOLD] Add PowerPC64 -fsplit-stack supportAlan Modra3-6/+139
PowerPC64 ELFv1 requires a tweak to find_functions in order to return code addresses, rather than OPD entry addresses. * reloc.cc (Sized_relobj_file::find_functions): Use function_location. * powerpc.cc (Target_powerpc::do_calls_non_split): New function. (addi_12_1, addis_2_12, addis_12_1, cmpld_7_12_0): New constants. (lis_0): Rename from lis_0_0.
2015-05-16compile: New 'compile print'Jan Kratochvil15-12/+473
It is planned the existing GDB command 'print' will be able to evaluate its expressions using the compiler. There will be some option to choose between the existing GDB evaluation and the compiler evaluation. But as an intermediate step this patch provides the expression printing feature as a new command. I can imagine it could be also called 'maintenance compile print' as in the future one should be able to use its functionality by the normal 'print' command. There was a discussion with Eli about the command name: https://sourceware.org/ml/gdb-patches/2015-03/msg00880.html As there were no other comments yet I haven't renamed it yet, before there is some confirmation about settlement on the final name. Support for the GDB '@' operator to create arrays has been submitted for GCC: [gcc patch] libcc1: '@' GDB array operator https://gcc.gnu.org/ml/gcc-patches/2015-03/msg01451.html gdb/ChangeLog 2015-05-16 Jan Kratochvil <jan.kratochvil@redhat.com> Phil Muldoon <pmuldoon@redhat.com> * NEWS (Changes since GDB 7.9): Add compile print. * compile/compile-c-support.c (add_code_header, add_code_footer) (c_compute_program): Add COMPILE_I_PRINT_ADDRESS_SCOPE and COMPILE_I_PRINT_VALUE_SCOPE. * compile/compile-internal.h (COMPILE_I_PRINT_OUT_ARG_TYPE) (COMPILE_I_PRINT_OUT_ARG, COMPILE_I_EXPR_VAL, COMPILE_I_EXPR_PTR_TYPE): New. * compile/compile-object-load.c: Include block.h. (get_out_value_type): New function. (compile_object_load): Handle COMPILE_I_PRINT_ADDRESS_SCOPE and COMPILE_I_PRINT_VALUE_SCOPE. Set compile_module's OUT_VALUE_ADDR and OUT_VALUE_TYPE. * compile/compile-object-load.h (struct compile_module): Add fields out_value_addr and out_value_type. * compile/compile-object-run.c: Include valprint.h and compile.h. (struct do_module_cleanup): Add fields out_value_addr and out_value_type. (do_module_cleanup): Handle COMPILE_I_PRINT_ADDRESS_SCOPE and COMPILE_I_PRINT_VALUE_SCOPE. (compile_object_run): Propagate out_value_addr and out_value_type. Pass OUT_VALUE_ADDR. * compile/compile.c: Include valprint.h. (compile_print_value, compile_print_command): New functions. (eval_compile_command): Handle failed COMPILE_I_PRINT_ADDRESS_SCOPE. (_initialize_compile): Update compile code help text. Install compile_print_command. * compile/compile.h (compile_print_value): New prototype. * defs.h (enum compile_i_scope_types): Add COMPILE_I_PRINT_ADDRESS_SCOPE and COMPILE_I_PRINT_VALUE_SCOPE. gdb/doc/ChangeLog 2015-05-16 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.texinfo (Compiling and Injecting Code): Add compile print. gdb/testsuite/ChangeLog 2015-05-16 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.compile/compile-print.c: New file. * gdb.compile/compile-print.exp: New file.
2015-05-16Code cleanup: compile: func_addr -> func_symJan Kratochvil4-52/+89
Currently the code fetches _gdb_expr address/types at multiple places, guessing its parameters at multiple places etc. Fetch it once, verify it has expected type and then rely on it. While the patch tries to clean up the code it is still horrible due to the missing C++ sub-classing. gdb/ChangeLog 2015-05-16 Jan Kratochvil <jan.kratochvil@redhat.com> * compile/compile-object-load.c (get_regs_type): Add parameter func_sym. Rely on its parameter count. (compile_object_load): Replace lookup_minimal_symbol_text by lookup_global_symbol_from_objfile. Verify FUNC_SYM. Set it in the return value. * compile/compile-object-load.h (struct compile_module): Replace func_addr by func_sym. * compile/compile-object-run.c: Include block.h. (compile_object_run): Reset module variable after it is freed. Use FUNC_SYM instead of FUNC_ADDR. Rely on it.
2015-05-16compile: Use -Wall, not -wJan Kratochvil7-22/+58
For a reason unknown to me GDB was using -w instead of -Wall for 'compile code'. The problem is later patch for 'compile printf' really needs some warnings to be able to catch for example missing format string parameters: (gdb) compile printf "%d\n" GCC does not seem to be able to cancel -w (there is nothing like -no-w). Besides that I think even 'compile code' can benefit from -Wall. That #ifndef change in print_one_macro() is needed otherwise we get macro-redefinition warnings for the GCC built-in macros (as -w is no longer in effect). For example, without the #ifndef/#endif one gets: compile -r -- void _gdb_expr(){int i = 5;}^M /tmp/gdbobj-xpU1yB/out4.c:4:0: warning: "__FILE__" redefined [-Wbuiltin-macro-redefined]^M /tmp/gdbobj-xpU1yB/out4.c:5:0: warning: "__LINE__" redefined^M ... It makes more sense to pick the inferior's version of the macros, hence #ifndef instead of #undef. That new testsuite XFAIL is there as if one changes the struct definition to be compliant with cv-qualifiers (to prevent the warnings): struct struct_type { - struct struct_type *selffield; + volatile struct struct_type *selffield; only then GCC/GDB will hit the crash, described in that GDB PR 18202. gdb/ChangeLog 2015-05-16 Jan Kratochvil <jan.kratochvil@redhat.com> * compile/compile-c-support.c (print_one_macro): Use #ifndef. (generate_register_struct): Use __gdb_uintptr for TYPE_CODE_PTR. (c_compute_program): Call generate_register_struct after typedefs. * compile/compile-loc2c.c (push, pushf_register_address) (pushf_register): Cast to GCC_UINTPTR. (do_compile_dwarf_expr_to_c): Use unused attribute. Add space after type. Use GCC_UINTPTR instead of void *. Remove excessive cast. (compile_dwarf_expr_to_c): Use GCC_UINTPTR instead of void *. * compile/compile.c (_initialize_compile): Enable warnings for COMPILE_ARGS. gdb/testsuite/ChangeLog 2015-05-16 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.compile/compile-ops.exp: Cast param to void. * gdb.compile/compile.exp: Complete type for _gdb_expr. (compile code struct_object.selffield = &struct_object): Add xfail.
2015-05-16compile: Distribute scope, add scope_dataJan Kratochvil8-9/+47
Provide a way to access current 'scope' during the do_module_cleanup stage and associate more data with it. gdb/ChangeLog 2015-05-16 Jan Kratochvil <jan.kratochvil@redhat.com> * cli/cli-script.c (execute_control_command): Update eval_compile_command caller. * compile/compile-object-load.c (compile_object_load): Add parameters scope and scope_data. Set them. * compile/compile-object-load.h (struct compile_module): Add fields scope and scope_data. (compile_object_load): Add parameters scope and scope_data. * compile/compile-object-run.c (struct do_module_cleanup): Add fields scope and scope_data. (compile_object_run): Propagate the fields scope and scope_data. * compile/compile.c (compile_file_command, compile_code_command): Update eval_compile_command callers. (eval_compile_command): Add parameter scope_data. Pass it plus scope. * compile/compile.h (eval_compile_command): Add parameter scope_data. * defs.h (struct command_line): Add field scope_data.
2015-05-16Code cleanup: Make parts of print_command_1 publicJan Kratochvil3-44/+76
The later 'compile print' command should share its behavior with the existing 'print' command. Make the needed existing parts of print_command_1 public. gdb/ChangeLog 2015-05-16 Jan Kratochvil <jan.kratochvil@redhat.com> * printcmd.c (struct format_data): Move it to valprint.h. (print_command_parse_format, print_value): New functions from ... (print_command_1): ... here. Call them. * valprint.h (struct format_data): Move it here from printcmd.c. (print_command_parse_format, print_value): New declarations.
2015-05-16Add forgotten ChangeLog entry for the previous commit.Jan Kratochvil1-0/+5
2015-05-16compile: Add one debug messageJan Kratochvil1-0/+6
gdb/ChangeLog 2015-05-16 Jan Kratochvil <jan.kratochvil@redhat.com> * compile/compile-object-load.c (compile_object_load): Add COMPILE_DEBUG message.
2015-05-16Automatic date update in version.inGDB Administrator1-1/+1
2015-05-15Array indexed by non-contiguous enumeration typesJerome Guitton6-36/+148
In Ada, index types of arrays can be enumeration types, and enumeration types can be non-contiguous. In which case the address of elements is not given by the value of the index, but by its position in the enumeration type. In other words, in this example: type Color is (Blue, Red); for Color use (Blue => 8, Red => 12, Green => 16); type A is array (Color) of Integer; type B is array (1 .. 3) of Integer; Arrays of type A and B will have the same layout in memory, even if the enumeration Color has a hole in its set of integer value. Since recently support for such a feature was in ada-lang.c, where the array was casted to a regular continuous index range. We were losing the information of index type. And this was not quite working for subranges in variable-length fields; their bounds are expressed using the integer value of the bounds, not its position in the enumeration, and there was some confusion all over ada-lang.c as to whether we had the position or the integer value was used for indexes. The idea behind this patch is to clean this up by keeping the real representation of these array index types and bounds when representing the value, and only use the position when accessing the elements or computing the length. This first patch fixes the printing of such an array. To the best of my knowledge, this feature only exists in Ada so it should only affect this language. gdb/ChangeLog: Jerome Guitton <guitton@adacore.com>: * ada-lang.c (ada_value_ptr_subscript): Use enum position of index to get element instead of enum value. (ada_value_slice_from_ptr, ada_value_slice): Use enum position of index to compute length, but enum values to compute bounds. (ada_array_length): Use enum position of index instead of enum value. (pos_atr): Move position computation to... (ada_evaluate_subexp): Use enum values to compute bounds. * gdbtypes.c (discrete_position): ...this new function. * gdbtypes.h (discrete_position): New function declaration. * valprint.c (val_print_array_elements): Call discrete_position to handle array indexed by non-contiguous enumeration types. gdb/testsuite/ChangeLog: * gdb.ada/arr_enum_with_gap: New testcase.
2015-05-15Non bit-packed packed arrays as variable-length fieldsJerome Guitton8-4/+190
In the case of non bit-packed arrays, GNAT does not generate its traditional XP encoding; it is not needed. However, it still generates the so-called "implementation type" with a P suffix. This implementation type shall be skipped when looking for other descriptive types such as XA encodings for variable-length fields. Note also that there may be an intermediate typedef between the implementation type and its XA description. It shall be skipped as well. gdb/ChangeLog: Jerome Guitton <guitton@adacore.com> * ada-lang.c (find_parallel_type_by_descriptive_type): Go through typedefs during lookup. (to_fixed_array_type): Add support for non-bit packed arrays as variable-length fields. gdb/testsuite/ChangeLog: * gdb.ada/byte_packed_arr: New testcase.
2015-05-15Change pointers from char * to unsigned char *H.J. Lu2-9/+15
GCC 4.2 complaints: cc1: warnings being treated as errors binutils/readelf.c:12057: warning: dereferencing type-punned pointer will break strict-aliasing rules This patch silences this GCC warning. * readelf.c (dump_section_as_strings): Change pointers from char * to unsigned char *.
2015-05-15Support AMD64/Intel ISAs in assembler/disassemblerH.J. Lu24-5302/+5508
AMD64 spec and Intel64 spec differ in direct unconditional branches in 64-bit mode. AMD64 supports direct unconditional branches with 16-bit offset via the data size prefix, which truncates RIP to 16 bits, while the data size prefix is ignored by Intel64. This patch adds -mamd64/-mintel64 option to x86-64 assembler and -Mamd64/-Mintel64 option to x86-64 disassembler. The most permissive ISA, which is AMD64, is the default. GDB can add an option, similar to (gdb) help set disassembly-flavor Set the disassembly flavor. The valid values are "att" and "intel", and the default value is "att". to select which ISA to disassemble. binutils/ PR binutis/18386 * doc/binutils.texi: Document -Mamd64 and -Mintel64. gas/ PR binutis/18386 * config/tc-i386.c (OPTION_MAMD64): New. (OPTION_MINTEL64): Likewise. (md_longopts): Add -mamd64 and -mintel64. (md_parse_option): Handle OPTION_MAMD64 and OPTION_MINTEL64. (md_show_usage): Add -mamd64 and -mintel64. * doc/c-i386.texi: Document -mamd64 and -mintel64. gas/testsuite/ PR binutis/18386 * gas/i386/i386.exp: Run x86-64-branch-2 and x86-64-branch-3. * gas/i386/x86-64-branch.d: Also pass -Mintel64 to objdump. * gas/i386/ilp32/x86-64-branch.d: Likewise. * gas/i386/x86-64-branch-2.d: New file. * gas/i386/x86-64-branch-2.s: Likewise. * gas/i386/x86-64-branch-3.l: Likewise. * gas/i386/x86-64-branch-3.s: Likewise. ld/testsuite/ PR binutis/18386 * ld-x86-64/tlsgdesc.dd: Also pass -Mintel64 to objdump. * ld-x86-64/tlspic.dd: Likewise. * ld-x86-64/x86-64.exp (x86_64tests): Also pass -Mintel64 to objdump for tlspic.dd and tlsgdesc.dd. opcodes/ PR binutis/18386 * i386-dis.c: Add comments for '@'. (x86_64_table): Use '@' on call/jmp for X86_64_E8/X86_64_E9. (enum x86_64_isa): New. (isa64): Likewise. (print_i386_disassembler_options): Add amd64 and intel64. (print_insn): Handle amd64 and intel64. (putop): Handle '@'. (OP_J): Don't ignore the operand size prefix for AMD64 in 64-bit. * i386-gen.c (cpu_flags): Add CpuAMD64 and CpuIntel64. * i386-opc.h (AMD64): New. (CpuIntel64): Likewise. (i386_cpu_flags): Add cpuamd64 and cpuintel64. * i386-opc.tbl: Add direct call/jmp with Disp16|Disp32 for AMD64. Mark direct call/jmp without Disp16|Disp32 as Intel64. * i386-init.h: Regenerated. * i386-tbl.h: Likewise.
2015-05-15Add --decompress option to readelf to decompress sections before they are ↵Nick Clifton7-87/+303
dumped. bin * readelf.c (options): Add "decompress". (usage): Mention -z/--decompress. (parse_args): Handle -z. (uncompress_section_contents): Move to earlier in the file. (dump_section_as_strings): If requested, decompress the section before dumping. (dump_section_as_bytes): Likewise. * doc/binutils.texi: Document the new option. tests * binutils-all/z.s: New test. Checks the --decompress option to readelf. * binutils-all/readelf.exp: Run the test. * binutils-all/readelf.z: Expected output from readelf.
2015-05-15Fix gdb.mi/mi-nsmoribund.exp timeoutsPedro Alves2-32/+99
The PPC64 buildbot has been showing timeouts in mi-nsmoribund.exp, like this: (...) -thread-info FAIL: gdb.mi/mi-nsmoribund.exp: thread state: all running except the breakpoint thread (timeout) ... and I can reproduce this on gcc110 (PPC64) on the gcc compile farm. That is, the test sends "-thread-info" to GDB, but GDB never replies back. The problem is that these machines are too fast for gdb. :-) That test has a few threads running the same tight loop, and constantly hitting a thread-specific breakpoint that needs to be stepped over. If threads trip on breakpoints fast enough that linux-nat.c's event pipe associated with SIGCHLD is constantly being written to, even if the stdin file descriptor also has an event to handle, gdb never gets to it. because linux-nat.c's pipe comes first in the set of descriptors served by the poll/select code in the event loop. Fix this by having the event loop serve file event sources in round-robin-like fashion, similarly to how its done in gdb_do_one_event. Unfortunately, the poll and the select variants each need their own fixing. Tested on x86_64 Fedora 20 (poll and select variants), and PPC64 Fedora 18. Fixes the timeout in the PPC64 machine in the compile farm that times out without this, and I won't be surprised if it fixes other random timeouts in other tests. (gdbserver's copy of the event-loop doesn't need this (yet), as it still pushes all ready events to an event queue. That is, it hasn't had 70b66289 merged yet. We should really merge both event-loop.c copies into a single shared file, but that's for another day.) gdb/ChangeLog: 2015-05-15 Pedro Alves <palves@redhat.com> Simon Marchi <simon.marchi@ericsson.com> * event-loop.c (gdb_notifier) <next_file_handler, next_poll_fds_index>: New fields. (get_next_file_handler_to_handle_and_advance): New function. (delete_file_handler): If deleting the next file handler to handle, advance to the next file handler. (gdb_wait_for_event): Bail early if no event fired. Poll file handlers in round-robin fashion.
2015-05-15More C++ build fixingPedro Alves2-3/+11
Fixes: In file included from ../../../binutils-gdb/gdb/gdbserver/server.h:61:0, from ../../../binutils-gdb/gdb/gdbserver/server.c:19: ../../../binutils-gdb/gdb/gdbserver/target.h:442:50: error: second operand to the conditional operator is of type 'void', but the third operand is neither a throw-expression nor of type 'void' (*the_target->handle_new_gdb_connection) () : 0) ^ Reported by Yuanhui Zhang. gdb/gdbserver/ChangeLog: 2015-05-15 Pedro Alves <palves@redhat.com> * target.h (target_handle_new_gdb_connection): Rewrite using if wrapped in do/while.
2015-05-15Avoid using 'private' C++ keyword as symbolPedro Alves2-3/+8
gdb/ChangeLog: 2015-05-15 Pedro Alves <palves@redhat.com> * linux-tdep.c (linux_find_memory_regions_full): Rename local 'private' to 'priv'.
2015-05-15Include header for enum target_stop_reasonPedro Alves2-0/+6
Building in C++ mode errors with: ~~~ g++ -fpermissive (...) /home/pedro/gdb/mygit/src/gdb/gdbserver/../nat/x86-linux.c In file included from /home/pedro/gdb/mygit/src/gdb/gdbserver/../nat/x86-linux.h:23:0, from /home/pedro/gdb/mygit/src/gdb/gdbserver/../nat/x86-linux.c:21: /home/pedro/gdb/mygit/src/gdb/gdbserver/../nat/linux-nat.h:74:13: error: use of enum ‘target_stop_reason’ without previous declaration extern enum target_stop_reason lwp_stop_reason (struct lwp_info *lwp); ^ /home/pedro/gdb/mygit/src/gdb/gdbserver/../nat/linux-nat.h:74:70: error: invalid type in declaration before ‘;’ token extern enum target_stop_reason lwp_stop_reason (struct lwp_info *lwp); ^ ~~~ gdb/ChangeLog: 2015-05-15 Pedro Alves <palves@redhat.com> * nat/linux-nat.h: Include "target/waitstatus.h".
2015-05-15Fix a couple C++ build issuesYuanhui Zhang2-12/+20
Building mingw GDB with --enable-build-with-cxx shows: ../../binutils-gdb/gdb/python/py-unwind.c:500:45: error: cannot convert 'cached_frame_info::reg_info*' to 'pyuw_prev_register(frame_info*, void**, int)::reg_info*' in initialization struct reg_info *reg_info = cached_frame->reg; ^ ../../binutils-gdb/gdb/python/py-unwind.c:501:60: error: invalid use of incomplete type 'struct pyuw_prev_register(frame_info*, void**, int)::reg_info' struct reg_info *reg_info_end = reg_info + cached_frame->reg_count; ^ ../../binutils-gdb/gdb/python/py-unwind.c:500:10: error: forward declaration of 'struct pyuw_prev_register(frame_info*, void**, int)::reg_info' struct reg_info *reg_info = cached_frame->reg; ^ ../../binutils-gdb/gdb/python/py-unwind.c:505:37: error: cannot increment a pointer to incomplete type 'pyuw_prev_register(frame_info*, void**, int)::reg_info' for (; reg_info < reg_info_end; ++reg_info) ^ ../../binutils-gdb/gdb/python/py-unwind.c:507:29: error: invalid use of incomplete type 'struct pyuw_prev_register(frame_info*, void**, int)::reg_info' if (regnum == reg_info->number) ^ ../../binutils-gdb/gdb/python/py-unwind.c:500:10: error: forward declaration of 'struct pyuw_prev_register(frame_info*, void**, int)::reg_info' struct reg_info *reg_info = cached_frame->reg; ^ ../../binutils-gdb/gdb/python/py-unwind.c:508:68: error: invalid use of incomplete type 'struct pyuw_prev_register(frame_info*, void**, int)::reg_info' return frame_unwind_got_bytes (this_frame, regnum, reg_info->data); ^ ../../binutils-gdb/gdb/python/py-unwind.c:500:10: error: forward declaration of 'struct pyuw_prev_register(frame_info*, void**, int)::reg_info' struct reg_info *reg_info = cached_frame->reg; ^ ../../binutils-gdb/gdb/python/py-unwind.c: In function 'int pyuw_sniffer(const frame_unwind*, frame_info*, void**)': ../../binutils-gdb/gdb/python/py-unwind.c:574:70: warning: invalid conversion from 'void*' to 'cached_frame_info*' [-fpermissive] reg_count * sizeof (cached_frame->reg[0])); ^ ../../binutils-gdb/gdb/python/py-unwind.c: In function 'void pyuw_on_new_gdbarch(gdbarch*)': ../../binutils-gdb/gdb/python/py-unwind.c:636:47: warning: invalid conversion from 'void*' to 'pyuw_gdbarch_data_type*' [-fpermissive] gdbarch_data (newarch, pyuw_gdbarch_data); ^ ../../binutils-gdb/gdb/python/py-unwind.c:647:29: warning: invalid conversion from 'void*' to 'const frame_data*' [-fpermissive] unwinder->unwind_data = (void *) newarch; ^ ../../binutils-gdb/gdb/python/py-unwind.c: At global scope: ../../binutils-gdb/gdb/python/py-unwind.c:699:21: error: redefinition of 'PyTypeObject pending_frame_object_type' static PyTypeObject pending_frame_object_type = ^ ../../binutils-gdb/gdb/python/py-unwind.c:96:21: error: 'PyTypeObject pending_frame_object_type' previously declared here static PyTypeObject pending_frame_object_type ^ ../../binutils-gdb/gdb/python/py-unwind.c:749:21: error: redefinition of 'PyTypeObject unwind_info_object_type' static PyTypeObject unwind_info_object_type = ^ ../../binutils-gdb/gdb/python/py-unwind.c:99:21: error: 'PyTypeObject unwind_info_object_type' previously declared here static PyTypeObject unwind_info_object_type ^ The first kind of error is caused by the embedded struct definition, so move it out of the parent struct. The second kind of error is caused by forward declaring a static global variable, which works in C, but not in C++ (or C with -fno-common). Make it using extern instead, like done in other similar cases. gdb/ChangeLog: 2015-05-15 Yuanhui Zhang <asmwarrior@gmail.com> * python/py-unwind.c (struct reg_info): Move out of ... (struct cached_frame_info): ... this scope. (pending_frame_object_type, unwind_info_object_type): Make extern.
2015-05-15[Ada] problem printing negative integer values in packed arrays.Joel Brobecker7-0/+120
Consider the following declarations: type Signed_Small is new Integer range - (2 ** 5) .. (2 ** 5 - 1); type Signed_Simple_Array is array (1 .. 4) of Signed_Small; pragma Pack (Signed_Simple_Array); SSA : Signed_Simple_Array := (-1, 2, -3, 4); GDB currently print its value incorrectly for the elements that are negative: (gdb) print ssa $1 = (65535, 2, 1048573, 4) (gdb) print ssa(1) $2 = 65535 (gdb) print ssa(2) $3 = 2 (gdb) print ssa(3) $4 = 1048573 (gdb) print ssa(4) $5 = 4 What happens is that the sign-extension is not working because we're trying to do left shift with a negative count. In ada_value_primitive_packed_val, we have a loop which populates the extra bits of the target (unpacked) value, after extraction of the data from the original (packed) value: while (ntarg > 0) { accum |= sign << accumSize; unpacked[targ] = accum & ~(~0L << HOST_CHAR_BIT); !!! -> accumSize -= HOST_CHAR_BIT; accum >>= HOST_CHAR_BIT; ntarg -= 1; targ += delta; } At each iteration, accumSize gets decremented by HOST_CHAR_BIT, which can easily cause it to become negative, particularly on little endian targets, where accumSize is at most HOST_CHAR_BIT - 1. This causes us to perform a left-shift operation with a negative accumSize at the next loop iteration, which is undefined, and acutally does not produce the effect we wanted (value left untouched) when the code is compiled with GCC. This patch fixes the issue by simply setting accumSize to zero if negative. gdb/ChangeLog: * ada-lang.c (ada_value_primitive_packed_val): Make sure accumSize is never negative. gdb/testsuite/ChangeLog: * gdb.ada/pckd_neg: New testcase.
2015-05-15Add -mshared option to x86 ELF assemblerH.J. Lu11-28/+219
This patch adds -mshared option to x86 ELF assembler. By default, assembler will optimize out non-PLT relocations against defined non-weak global branch targets with default visibility. The -mshared option tells the assembler to generate code which may go into a shared library where all non-weak global branch targets with default visibility can be preempted. The resulting code is slightly bigger. This option only affects the handling of branch instructions. This Linux kernel patch is needed to create a working x86 Linux kernel if it hasn't been applied: diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S index ae6588b..b91a00c 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S @@ -339,8 +339,8 @@ early_idt_handlers: i = i + 1 .endr -/* This is global to keep gas from relaxing the jumps */ -ENTRY(early_idt_handler) +/* This is weak to keep gas from relaxing the jumps */ +WEAK(early_idt_handler) cld cmpl $2,(%rsp) # X86_TRAP_NMI -- gas/ * config/tc-i386.c (shared): New. (OPTION_MSHARED): Likewise. (elf_symbol_resolved_in_segment_p): Add relocation argument. Check PLT relocations and shared. (md_estimate_size_before_relax): Pass fragP->fr_var to elf_symbol_resolved_in_segment_p. (md_longopts): Add -mshared. (md_show_usage): Likewise. (md_parse_option): Handle OPTION_MSHARED. * doc/c-i386.texi: Document -mshared. gas/testsuite/ * gas/i386/i386.exp: Don't run pcrel for ELF targets. Run pcrel-elf, relax-4 and x86-64-relax-3 for ELF targets. * gas/i386/pcrel-elf.d: New file. * gas/i386/relax-4.d: Likewise. * gas/i386/x86-64-relax-3.d: Likewise. * gas/i386/relax-3.d: Pass -mshared to assembler. Updated. * gas/i386/x86-64-relax-2.d: Likewise. * gas/i386/relax-3.s: Add test for PLT relocation.
2015-05-15Fix PR18374 by making readelf and objdump ignore end-of-list markers in the ↵Nick Clifton9-86/+492
.debug_loc section if there are relocations against them. PR binutils/18374 bin * dwarf.h (struct dwarf_section): Add reloc_info and num_relocs fields. (struct dwarf_section_display): Change bitfield to boolean. (reloc_at): Add prototype. * dwarf.c (display_loc_list): Ignore list terminators if there are relocs against them. (display_debug_loc): Issue a warning if there are relocs against the .debug_loc section. (display_displays): Initialise reloc_info and num_relocs fields. * objdump.c (load_specific_debug_section): Initialise reloc_info and num_relocs fields. (reloc_at): New function. * readelf.c (is_32bit_abs_reloc): Add IA64's R_IA64_DIS32LSB reloc. (reloc_at): New function. (apply_relocations): Add relocs_return and num_relocs_return parameters. Fill them in with the loaded relocs if non-NULL. (dump_section_as_bytes): Update call to apply_relocations. (load_specific_debug_section): Initialise reloc_info and num_relocs fields. tests * binutils-all/pr18374.s: New test file. * binutils-all/readelf.exp: Assemble and run the new test. * binutils-all/readelf.pr18374: Expected output from readelf.
2015-05-14Fix some PPC assembler errors.Peter Bergner11-12/+50
Remove the wait instructions for server processors, since they were never implemented. Also add the extra operands added to the tlbie and slbia instructions with ISA 2.06 and ISA 2.05 respectively. binutils/ * MAINTAINERS: Add myself as PPC maintainer. opcodes/ * ppc-opc.c (IH) New define. (powerpc_opcodes) <wait>: Do not enable for POWER7. <tlbie>: Add RS operand for POWER7. <slbia>: Add IH operand for POWER6. gas/testsuite/ * gas/ppc/power4.d: Add a slbia test. * gas/ppc/power4.s: Likewise. * gas/ppc/power6.d: Add slbia and tlbie tests. * gas/ppc/power6.s: Likewise. * gas/ppc/power7.d: Remove wait tests. Add a tlbie test. * gas/ppc/power7.s: Likewise.
2015-05-15Automatic date update in version.inGDB Administrator1-1/+1
2015-05-14Don't add the zlib header to SHF_COMPRESSED sectionH.J. Lu12-123/+544
In a SHF_COMPRESSED compressed section, the raw compressed data should begin immediately after the compression header. This patch removes the extra zlib header from the SHF_COMPRESSED section. bfd/ * bfd.c (bfd_update_compression_header): Also write the zlib header if the SHF_COMPRESSED bit cleared.. (bfd_check_compression_header): Return the uncompressed size. * compress.c (decompress_contents): Don't skip the zlib header. (bfd_compress_section_contents): Properly handle ELFCOMPRESS_ZLIB, which doesn't have the zlib header. (bfd_init_section_decompress_status): Likewise. (bfd_get_full_section_contents): Updated. (bfd_is_section_compressed): Likewise. (bfd_is_section_compressed_with_header): Return the uncompressed size. * elf.c (_bfd_elf_make_section_from_shdr): Updated. * bfd-in2.h: Regenerated. binutils/ * readelf.c (uncompress_section_contents): Add a parameter for uncompressed size. Don't check the zlib header. (load_specific_debug_section): Updated. binutils/testsuite/ * binutils-all/compress.exp: Replace "$OBJDUMP -s -j .debug_info" with "$OBJDUMP -W". * binutils-all/libdw2-compressedgabi.out: Updated. gas/ 2015-05-14 H.J. Lu <hongjiu.lu@intel.com> * write.c (compress_debug): Don't write the zlib header, which is handled by bfd_update_compression_header.