aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2017-09-10PowerPC64 --plt-alignAlan Modra8-22/+55
This changes the PowerPC64 --plt-align option to perform the usual alignment of code as suggested by its name, as well as the previous behaviour of padding so as to reduce boundary crossing. The old behaviour is had by using a negative parameter. The default is also changed to align plt stub code by default to 32 byte boundaries, the point being to get better bctr branch prediction on power8 and power9 hardware. bfd/ * elf64-ppp.c (plt_stub_pad): Handle positive and negative plt_stub_align. ld/ * ld.texinfo (--plt-align): Describe new behaviour of option. * emultempl/ppc64elf.em (params): Default plt_stub_align to 5. * testsuite/ld-powerpc/powerpc.exp: Pass --no-plt-align for selected tests. * testsuite/ld-powerpc/relbrlt.d: Pass --no-plt-align. * testsuite/ld-powerpc/elfv2so.d: Adjust expected output.
2017-09-09x86: Update UNDEFINED_WEAK_RESOLVED_TO_ZEROH.J. Lu5-36/+23
Since the only information which SYMBOL_REFERENCES_LOCAL_P doesn't check is relocations, UNDEFINED_WEAK_RESOLVED_TO_ZERO only needs to check for relocations with SYMBOL_REFERENCES_LOCAL_P. * elf32-i386.c (elf_i386_relocate_section): Update usage of UNDEFINED_WEAK_RESOLVED_TO_ZERO. (elf_i386_finish_dynamic_symbol): Likewise. * elf64-x86-64.c (elf_x86_64_relocate_section): Likewise. (elf_x86_64_finish_dynamic_symbol): Likewise. * elfxx-x86.c (elf_x86_allocate_dynrelocs): Likewise. (_bfd_x86_elf_fixup_symbol): Likewise.
2017-09-09x86: Don't check has_non_got_relocH.J. Lu2-3/+7
_bfd_x86_elf_link_symbol_references_local should depend only on symbol references, not relocations, to work in check_relocs. * elfxx-x86.c (_bfd_x86_elf_link_symbol_references_local): Don't check has_non_got_reloc.
2017-09-09x86: Remove restriction on NOTRACK prefix positionH.J. Lu14-244/+274
Since the NOTRACK prefix is no longer required to be the last prefix before the REX prefix, restriction on the NOTRACK prefix position is removed from assembler as well as disassembler. Assembler encodes the NOTRACK prefix the same way as the DS segment register, which places it before other prefixes. Disassembler displays prefixes in the order they appear. gas/ * config/tc-i386.c (NOTRACK_PREFIX): Removed. (REX_PREFIX): Updated. (MAX_PREFIXES): Likewise. (parse_insn): Remove restriction on NOTRACK prefix position. * testsuite/gas/i386/notrack.s: Add tests with NOTRACK prefix before other prefixes. * testsuite/gas/i386/x86-64-notrack.s: Likewise. * testsuite/gas/i386/notrackbad.s: Remove tests with NOTRACK prefix before other prefixes. * testsuite/gas/i386/x86-64-notrackbad.s: Likewise. * testsuite/gas/i386/notrack-intel.d: Updated. * testsuite/gas/i386/notrack.d: Likewise. * testsuite/gas/i386/notrackbad.l: Likewise. * testsuite/gas/i386/x86-64-notrack-intel.d: Likewise. * testsuite/gas/i386/x86-64-notrack.d: Likewise. * testsuite/gas/i386/x86-64-notrackbad.l: Likewise. opcodes/ * i386-dis.c (last_active_prefix): Removed. (ckprefix): Don't set last_active_prefix. (NOTRACK_Fixup): Don't check last_active_prefix.
2017-09-09x86: Properly handle __ehdr_startH.J. Lu22-23/+237
After _bfd_i386_elf_convert_load and _bfd_x86_64_elf_convert_load are removed, elf_i386_convert_load_reloc and elf_x86_64_convert_load_reloc see __ehdr_start as an undefined symbol when they are called from check_relocs to convert GOT relocations against local symbols. But __ehdr_start will be defined as a hidden symbol by linker at the later stage if it is referenced. This patch marks __ehdr_start as a defined local symbol at the start of check_relocs if it is referenced and not defined. bfd/ PR ld/22115 * elf32-i386.c (elf_i386_convert_load_reloc): Check linker_def. Don't use UNDEFINED_WEAK_RESOLVED_TO_ZERO. * elf64-x86-64.c (elf_x86_64_convert_load_reloc): Check linker_def. Don't use UNDEFINED_WEAK_RESOLVED_TO_ZERO. * elfxx-x86.c (_bfd_x86_elf_link_check_relocs): Set local_ref and linker_def on __ehdr_start if it is referenced and not defined. (_bfd_x86_elf_link_symbol_references_local): Also set local_ref and return TRUE when building executable, if a symbol has non-GOT/non-PLT relocations in text section or there is no dynamic linker. * elfxx-x86.h (elf_x86_link_hash_entry): Add linker_def. ld/ PR ld/22115 * ld-i386/i386.exp: Run PR ld/22115 tests, * ld/testsuite/ld-x86-64/x86-64.exp: Likewise. * testsuite/ld-i386/pr22115-1.s: New file. * testsuite/ld-i386/pr22115-1a.d: Likewise. * testsuite/ld-i386/pr22115-1b.d: Likewise. * testsuite/ld-i386/pr22115-1c.d: Likewise. * testsuite/ld-i386/pr22115-1d.d: Likewise. * testsuite/ld-x86-64/pr22115-1.s: Likewise. * testsuite/ld-x86-64/pr22115-1a-x32.d: Likewise. * testsuite/ld-x86-64/pr22115-1a.d: Likewise. * testsuite/ld-x86-64/pr22115-1b-x32.d: Likewise. * testsuite/ld-x86-64/pr22115-1b.d: Likewise. * testsuite/ld-x86-64/pr22115-1c-x32.d: Likewise. * testsuite/ld-x86-64/pr22115-1c.d: Likewise. * testsuite/ld-x86-64/pr22115-1d-x32.d: Likewise. * testsuite/ld-x86-64/pr22115-1d.d: Likewise.
2017-09-09Automatic date update in version.inGDB Administrator1-1/+1
2017-09-08Remove unused field field_info.fnfieldsKeith Seitz2-4/+5
Since at least 7.3 the "fnfields" field in struct field_info has been unused. This patch simply removes it. gdb/ChangeLog: * dwarf2read.c (struct field_info) <fnfields>: Remove unused field.
2017-09-08x86: Update comments in elfxx-x86.hH.J. Lu2-2/+6
* elfxx-x86.h: Update comments.
2017-09-08Remove C/C++ relevant code in Fortran specific file.Christoph Weinmann5-16/+74
Remove code relevant for printing C/C++ Integer values in a Fortran specific file to unify printing of Fortran values. This does not change the output.
2017-09-08fortran: Testsuite, fix typos in vla-value.Bernhard Heckel3-4/+9
2017-09-08Fortran: Testsuite, fix differences in type naming.Bernhard Heckel4-15/+31
2017-09-08Fix indentation for printing Fortran types with pointersFrank Penczek5-4/+89
Printing the prefix "PTR TO -> (" resp. "REF TO ->(" ignored the active indentation level. This caused inconsistent appearance of user-defined Fortran types containing pointers. Fix by using "fprintfi_filtered" with the current indentation level for outputting the prefix string. Add test case ptr-indentation. Example using 'ptype' on object of type: type TypeWithPointer integer i integer, pointer:: p end type TypeWithPointer Before: type = Type typewithpointer integer(kind=4) :: i PTR TO -> ( integer(kind=4) :: p) End Type typewithpointer After: type = Type typewithpointer integer(kind=4) :: i PTR TO -> ( integer(kind=4) :: p) End Type typewithpointer
2017-09-08x86: Replace elf_x86_plt_layout_table with elf_x86_init_tableH.J. Lu5-54/+66
* elf32-i386.c (elf_i386_link_setup_gnu_properties): Replace elf_x86_plt_layout_table with elf_x86_init_table. * elf64-x86-64.c (elf_x86_64_link_setup_gnu_properties): Likewise. * elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Likewise. * elfxx-x86.h (elf_x86_plt_layout_table): Renamed to ... (elf_x86_init_table): This. (_bfd_x86_elf_link_setup_gnu_properties): Replace elf_x86_plt_layout_table with elf_x86_init_table.
2017-09-07x86; Don't add elf64-x86-64.lo nor elf64.lo together with elfxx-x86.loH.J. Lu7-26/+38
Don't set r_info and r_sym fields in _bfd_x86_elf_link_hash_table_create. Instead, set them in _bfd_x86_elf_link_setup_gnu_properties. We can avoid adding elf64-x86-64.lo and elf64.lo together with elfxx-x86.lo to bfd_backends. * configure.ac (bfd_backends): Don't add elf64-x86-64.lo nor elf64.lo together with elfxx-x86.lo for 64-bit BFD. * configure: Regenerated. * elf32-i386.c (elf_i386_link_setup_gnu_properties): Set r_info and r_sym fields of plt_layout. * elf64-x86-64.c (elf_x86_64_link_setup_gnu_properties): Likewise. * elfxx-x86.c (elf_x86_64_is_reloc_section): Remove BFD64 check. (_bfd_x86_elf_link_hash_table_create): Likewise. Don't set r_info nor r_sym fields. (_bfd_x86_elf_link_setup_gnu_properties): Set r_info and r_sym fields of htab. * elfxx-x86.h (elf_x86_plt_layout_table): Add r_info and r_sym.
2017-09-08Automatic date update in version.inGDB Administrator1-1/+1
2017-09-07RISC-V: Avoid emitting invalid instructions in mixed RVC/no-RVC codePalmer Dabbelt2-17/+13
When linking the following code .global _prog_start _prog_start: mv x1, x1 mv x2, x2 .align 2 rvc_boundry: .option norvc .align 3 mv x3, x3 we currently emit an invalid two-byte 0 instruction. The actual output code looks like 0000000080000000 <_prog_start>: 80000000: 8086 mv ra,ra 80000002: 810a mv sp,sp 0000000080000004 <rvc_boundry>: 80000004: 0000 unimp 80000006: 0001 nop 80000008: 00018193 mv gp,gp This ends up manifesting due to the two-byte compressed NOP that's pessimisticly emitted by the ".align 2", which results in "rvc_boundry" being 2-byte aligned. frag_align_code() then goes and outputs a 2-byte NOP (which is invalid in no-RVC mode) to align the code back to a 4-byte boundry, which can't be relaxed away by the linker as it's not part of the R_RISCV_RELAX relocation. The fix is to just always emit the worst case possible alignment into the output as a single R_RISCV_RELAX, which the linker will then fix up. With this patch I get the expected code generation 0000000080000000 <_prog_start>: 80000000: 8086 mv ra,ra 80000002: 810a mv sp,sp 0000000080000004 <rvc_boundry>: 80000004: 00000013 nop 80000008: 00018193 mv gp,gp gas/ChangeLog 2017-09-07 Palmer Dabbelt <palmer@dabbelt.com> * config/tc-riscv.c (riscv_frag_align_code): Emit the entire alignment sequence inside R_RISCV_ALIGN.
2017-09-07RISC-V: Print an error when unable to align a sectionPalmer Dabbelt2-2/+14
This used to just print "can't relax section: Success", which is a silly error message. bfd/ChangeLog 2017-09-07 Palmer Dabbelt <palmer@dabbelt.com> * elfnn-riscv.c (_bfd_riscv_relax_align): Call bfd_set_error and print an error message when unable to relax a .align directive.
2017-09-07RISC-V: Support PCREL_* relocations agaist weak undefined symbolsPalmer Dabbelt2-5/+76
I recently modified our Linux port's base address such the absolute address 0 is no longer addressable as a 32-bit PC-relative offset. Since Linux links a weak undefined symbol in an intermediate binary, it needs to be able to reference absolute address 0. This patch changes R_RISCV_PCREL_* relocations to absolute relocations while resolving them in order to allow these symbols to be referenced in PC-relative programs linked at high addresses. Note that this doesn't apply to PIC, which also uses PC-relative relocations, just to position-dependent objects, which we use to allow programs to be linked at high addresses. In case some of our embedded users are using R_RISCV_PCREL_* as a hacked up method of getting position-independent binaries (which can work if you have very simple programs), we only convert the relocations when the PC-relative version would overflow. bfd/ChangeLog: 2017-09-07 Palmer Dabbelt <palmer@dabbelt.com> * elfnn-riscv.c (riscv_zero_pcrel_hi_reloc): New function. (riscv_record_pcrel_hi_reloc): Add absolute argument. (riscv_elf_relocate_section): Call riscv_zero_pcrel_hi_reloc for R_RISCV_PCREL_HI20 relocs, and pass the result to riscv_record_pcrel_hi_reloc.
2017-09-07Document the GDB 8.0.1 release in gdb/ChangeLogJoel Brobecker1-0/+4
gdb/ChangeLog: GDB 8.0.1 released.
2017-09-07remove QStartupWithShell entry from NEWS::Changes in GDB 7.11Joel Brobecker2-3/+4
This entry was added twice within the same commit, back in Dec 2017 by the following change: commit aefd8b33d97bded58e51d75271f99e1eaec9fb28 Date: Thu Dec 22 22:14:02 2016 -0500 Subject: Implement proper "startup-with-shell" support on gdbserver I think the second entry is just a rebase/merge oversight, and it wasn't meant to be added there, particularly since the 7.11 branch was no longer active at that time anymore. This patch just removes the entry. gdb/ChangeLog: * NEWS (Changes in GDB 7.11): Remove entry for QStartupWithShell.
2017-09-07x86: Remove _bfd_{i386,x86_64}_elf_convert_loadH.J. Lu5-307/+137
Instead of converting GOT relocations when sizing dynamic sections, we convert GOT relocations during relocation check. Add a field, local_ref, to elf_x86_link_hash_entry to indicate if symbol references are always local with a new function to check if symbol references are always local, which works in check_relocs. * elf32-i386.c (elf_i386_convert_load_reloc): Add an argument, r_type_p. Remove the converted argument. Replace SYMBOL_REFERENCES_LOCAL with SYMBOL_REFERENCES_LOCAL_P. Return the new relocation type via r_type_p. (elf_i386_relocate_section): Likewise. (elf_i386_finish_dynamic_symbol): Likewise. (need_convert_load): Removed. (check_relocs_failed): Updated. (elf_i386_check_relocs): Call elf_i386_convert_load_reloc, instead of setting need_convert_load. (_bfd_i386_elf_convert_load): Removed. * elf64-x86-64.c (need_convert_load): Removed. (check_relocs_failed): Updated. (elf_x86_64_convert_load_reloc): Add an argument, r_type_p. Replace SYMBOL_REFERENCES_LOCAL with SYMBOL_REFERENCES_LOCAL_P. Return the new relocation type via r_type_p. (elf_x86_64_check_relocs): Call elf_x86_64_convert_load_reloc, instead of setting need_convert_load. (elf_x86_64_check_relocs): Don't check PIC if relocation has been converted. (_bfd_x86_64_elf_convert_load): Removed. (elf_x86_64_relocate_section): Replace SYMBOL_REFERENCES_LOCAL with SYMBOL_REFERENCES_LOCAL_P. (elf_x86_64_finish_dynamic_symbol): Likewise. * elfxx-x86.c (_bfd_x86_elf_link_hash_table_create): Don't set convert_load. (_bfd_x86_elf_size_dynamic_sections): Don't call convert_load. (_bfd_x86_elf_link_symbol_references_local): New function. * elfxx-x86.h (SYMBOL_REFERENCES_LOCAL_P): New. (UNDEFINED_WEAK_RESOLVED_TO_ZERO): Replace elf.forced_local with SYMBOL_REFERENCES_LOCAL_P. (elf_x86_link_hash_entry): Add local_ref. (elf_x86_link_hash_table): Remove convert_load. (_bfd_i386_elf_convert_load): Removed. (_bfd_x86_64_elf_convert_load): Likewise. (_bfd_x86_elf_link_symbol_references_local): New.
2017-09-07Automatic date update in version.inGDB Administrator1-1/+1
2017-09-06Change funcall_chain to be a std::vectorTom Tromey2-39/+14
This simplifies the handling of funcall_chain, by changing it to be a std::vector<int> and then fixing the users. This allows the removal of a cleanup. It would be even cleaner to replace this with better logic in the parsers; but a baby step seemed ok. gdb/ChangeLog 2017-09-05 Tom Tromey <tom@tromey.com> * parse.c (funcall_chain): Now a std::vector. (start_arglist, end_arglist): Simplify. (free_funcalls): Remove. (parse_exp_in_context_1): Remove cleanup.
2017-09-06Remove last cleanups from go-exp.yTom Tromey2-10/+5
This removes the last remaining cleanups from go-exp.y. 2017-09-05 Tom Tromey <tom@tromey.com> * go-exp.y (go_parse): Don't create a cleanup.
2017-09-06Remove last cleanups from d-exp.yTom Tromey2-17/+13
This removes the last remaining cleanups from d-exp.y. 2017-09-05 Tom Tromey <tom@tromey.com> * d-exp.y (PrimaryExpression): Use std::string. (d_parse): Don't create a cleanup.
2017-09-06Remove make_cleanup_clear_parser_stateTom Tromey10-50/+23
This removes make_cleanup_clear_parser_state in favor of scoped_restore. 2017-09-05 Tom Tromey <tom@tromey.com> * utils.c (do_clear_parser_state): Remove. (make_cleanup_clear_parser_state): Remove. * p-exp.y (pascal_parse): Use scoped_restore. * m2-exp.y (m2_parse): Use scoped_restore. * f-exp.y (f_parse): Use scoped_restore. * d-exp.y (d_parse): Use scoped_restore. * c-exp.y (c_parse): Use scoped_restore. * ada-exp.y (ada_parse): Use scoped_restore. * utils.h (make_cleanup_clear_parser_state): Remove.
2017-09-06Introduce dw2_linkage_name and dw2_linkage_name_attr.Keith Seitz2-26/+46
The DWARF reader is littered with the following idiom to read a linkage name from the debug info: mangled = dwarf2_string_attr (die, DW_AT_linkage_name, cu); if (mangled == NULL) mangled = dwarf2_string_attr (die, DW_AT_MIPS_linkage_name, cu); This patch introduces functions to simplify this to: mangled = dw2_linkage_name (die, cu); or attr = dw2_linkage_name_attr (die, cu); gdb/ChangeLog: * dwarf2read.c (dw2_linkage_name_attr): New function. (dw2_linkage_name): New function. (dwarf2_compute_name, dwarf2_physname, read_call_site_scope) (guess_full_die_structure_name, dwarf2_name): Use dw2_linkage_name. (anonymous_struct_prefix, dwarf2_name): Use dw2_linkage_name_attr.
2017-09-06Honor an existing CC_FOR_BUILD in the environment for sim.John Baldwin59-202/+434
This matches the equivalent bits in bfd/acinclude.m4 sim/ChangeLog: * configure.ac: Honor existing CC_FOR_BUILD in environment. * configure: Regenerate. sim/aarch64/ChangeLog: * configure: Regenerate. sim/arm/ChangeLog: * configure: Regenerate. sim/avr/ChangeLog: * configure: Regenerate. sim/bfin/ChangeLog: * configure: Regenerate. sim/common/ChangeLog: * acinclude.m4 (SIM_AC_COMMON) Honor existing CC_FOR_BUILD in environment. sim/cr16/ChangeLog: * configure: Regenerate. sim/cris/ChangeLog: * configure: Regenerate. sim/d10v/ChangeLog: * configure: Regenerate. sim/erc32/ChangeLog: * configure: Regenerate. sim/frv/ChangeLog: * configure: Regenerate. sim/ft32/ChangeLog: * configure: Regenerate. sim/h8300/ChangeLog: * configure: Regenerate. sim/iq2000/ChangeLog: * configure: Regenerate. sim/lm32/ChangeLog: * configure: Regenerate. sim/m32c/ChangeLog: * configure: Regenerate. sim/m32r/ChangeLog: * configure: Regenerate. sim/m68hc11/ChangeLog: * configure: Regenerate. sim/mcore/ChangeLog: * configure: Regenerate. sim/microblaze/ChangeLog: * configure: Regenerate. sim/mips/ChangeLog: * configure: Regenerate. sim/mn10300/ChangeLog: * configure: Regenerate. sim/moxie/ChangeLog: * configure: Regenerate. sim/msp430/ChangeLog: * configure: Regenerate. sim/rl78/ChangeLog: * configure: Regenerate. sim/rx/ChangeLog: * configure: Regenerate. sim/sh/ChangeLog: * configure: Regenerate. sim/sh64/ChangeLog: * configure: Regenerate. sim/v850/ChangeLog: * configure: Regenerate.
2017-09-06Cast char constant to int in sizeof.expTom Tromey2-1/+6
PR gdb/22010 concerns a regression I introduced with the scalar printing changes. The bug is that this code in sizeof.exp: set signof_byte [get_integer_valueof "'\\377'" -1] can incorrectly compute sizeof_byte. One underlying problem here is that gdb's C parser doesn't treat a char constant as an int (this is PR 19973). However, it seems good to have an immediate fix for the regression. The simplest is to cast to an int here. testsuite/ChangeLog 2017-09-05 Tom Tromey <tom@tromey.com> PR gdb/22010: * gdb.base/sizeof.exp (check_valueof): Cast char constant to int.
2017-09-06Correct shell compatibility issue detected with pkgsrc.Kamil Rytarowski2-1/+5
String comparison of in a POSIX bourne shell must be done with '=', not '=='. For example the NetBSD sh(1) does not support it. gdb/ChangeLog 2017-09-06 Kamil Rytarowski <n54@gmx.com> * config/djgpp/djconfig.sh: Correct shell portability issue.
2017-09-06Fix calls in gdb.arch/thumb2-it.expThomas Preud'homme2-2/+6
Tests in gdb.arch/thumb2-it.exp call functions defined in assembly without type debugging information. Since 7022349d5c86bae74b49225515f42d2e221bd368 ("Stop assuming no-debug-info functions return int") this triggers an error which leads to many tests to FAIL. This patch cast the call to indicate the return type of the functions when calling them. 2017-09-06 Thomas Preud'homme <thomas.preudhomme@arm.com> gdb/testsuite/ * gdb.arch/thumb2-it.exp: Cast call to assembly defined function.
2017-09-06Define HAVE_NATIVE_GCORE_HOST on NetBSDKamil Rytarowski2-0/+5
NetBSD ships with gcore(1) againg since the version 2.0. This tool is functional and actively maintained. gdb/ChangeLog 2017-09-06 Kamil Rytarowski <n54@gmx.com> * configure.nat: Define HAVE_NATIVE_GCORE_HOST on NetBSD.
2017-09-06Add native target for FreeBSD/aarch64.John Baldwin6-0/+148
gdb/ChangeLog: * Makefile.in (ALLDEPFILES): Add mips-fbsd-nat.c. * NEWS: Mention new FreeBSD/mips native configuration. * configure.host: Add aarch64*-*-freebsd*. * configure.nat: Likewise. * aarch64-fbsd-nat.c: New file.
2017-09-06Add FreeBSD/aarch64 architecture.John Baldwin6-0/+258
Support for collecting and supplying general purpose and floating point register sets is provided along with signal frame unwinding. gdb/ChangeLog: * Makefile.in (ALL_64_TARGET_OBS): Add aarch64-fbsd-tdep.o. (ALLDEPFILES): Add aarch64-fbsd-tdep.c. * NEWS: Mention new FreeBSD/aarch64 target. * configure.tgt: Add aarch64*-*-freebsd*. * aarch64-fbsd-tdep.c: New file. * aarch64-fbsd-tdep.h: New file.
2017-09-06Add myself as a write-after-approval GDB maintainer.Kamil Rytarowski2-0/+5
gdb/ChangeLog: 2017-09-06 Kamil Rytarowski <n54@gmx.com> * MAINTAINERS (Write After Approval): Add Kamil Rytarowski.
2017-09-06x86-64: Add R_X86_64_converted_reloc_bitH.J. Lu8-22/+58
Add R_X86_64_converted_reloc_bit to relocation type to indicate if a relocation is converted from a GOTPCREL relocation. Linker now generates failed to convert GOTPCREL relocation; relink with --no-relax for all cases, including relocations against local symbols. bfd/ * elf64-x86-64.c (R_X86_64_converted_reloc_bit): New. (elf_x86_64_info_to_howto): Get the real relocation type by masking out R_X86_64_converted_reloc_bit. (elf_x86_64_check_tls_transition): Get the real relocation type by masking out R_X86_64_converted_reloc_bit. (elf_x86_64_convert_load_reloc): Set R_X86_64_converted_reloc_bit instead of setting converted_reloc. (elf_x86_64_relocate_section): Check R_X86_64_converted_reloc_bit instead of converted_reloc. Get the real relocation type by masking out R_X86_64_converted_reloc_bit. (elf_x86_64_link_setup_gnu_properties): Verify that the value of R_X86_64_converted_reloc_bit is valid. * elfxx-x86.h (converted_reloc): Removed. ld/ * testsuite/ld-x86-64/pr19609-2a.d: Updated. * testsuite/ld-x86-64/pr19609-2b.d: Likewise. * testsuite/ld-x86-64/pr19609-4a.d: Likewise. * testsuite/ld-x86-64/pr19609-4c.d: Likewise.
2017-09-06x86: Don't change r_type when performing TLS transitionsH.J. Lu3-25/+36
Don't change r_type when performing TLS transitions to avoid getting the relocation type with ELF32_R_TYPE again. * elf32-i386.c (elf_i386_relocate_section): Don't change r_type when calling elf_i386_tls_transition. Don't use ELF32_R_TYPE to get the relocation type again. * elf64-x86-64.c (elf_x86_64_relocate_section): Don't change r_type when calling elf_x86_64_tls_transition. Don't use ELF32_R_TYPE to get the relocation type again.
2017-09-06Fix accessing TLS variables with no debug infoJan Kratochvil5-2/+77
Since 2273f0ac95a7 ("change minsyms not to be relocated at read-time"), printing TLS symbols of objfiles with a non-zero base address, without debug info, fails. E.g., with: $ mv /usr/lib/debug /usr/lib/debug-x to get debug info out of the way, we get: $ echo 'int main(){}' | gcc -pthread -x c - $ ./gdb -q -ex start -ex 'p (int) errno' ./a.out Cannot access memory at address 0xffffef7c0698 instead of the expected: $1 = 0 The regression is not visible with glibc debuginfo installed. The problem is that we compute the address of TLS minsyms incorrectly. To trigger the problem, it is important that the variable is in an objfile with a non-zero base address. While glibc is a shared library for 'errno', it's easier for the testcase to use PIE instead of a shlib. For TLS variables in PT_EXEC the regression obviously does not happen. gdb/ChangeLog 2017-09-06 Jan Kratochvil <jan.kratochvil@redhat.com> * parse.c (find_minsym_type_and_address): Don't relocate addresses of TLS symbols. gdb/testsuite/ChangeLog 2017-09-06 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.threads/tls-nodebug-pie.c: New file. * gdb.threads/tls-nodebug-pie.exp: New file.
2017-09-06Automatic date update in version.inGDB Administrator1-1/+1
2017-09-05x86-64: Properly set converted_relocH.J. Lu6-4/+15
Linker now generates failed to convert GOTPCREL relocation; relink with --no-relax for more cases. bfd/ * elf64-x86-64.c (elf_x86_64_convert_load_reloc): Properly set converted_reloc. ld/ * testsuite/ld-x86-64/pr19609-5d.d: Updated. * testsuite/ld-x86-64/pr19609-7a.d: Likewise. * testsuite/ld-x86-64/pr19609-7c.d: Likewise.
2017-09-05Fix leak of auto_obstack objfile_per_bfd_storage->storage_obstack;Philippe Waroquiers2-1/+5
commit 23732b1e32dd58f7c731d9aee56ff0b22a645d53 Author: Pedro Alves <palves@redhat.com> Date: Tue Jun 27 16:22:08 2017 +0100 changed objfile_per_bfd_storage->storage_obstack from 'struct obstack storage_obstack;' to 'auto_obstack storage_obstack;' So the obstack is auto allocated when the objfile_per_bfd_storage ctor is manually called by get_objfile_bfd_data). However, the ctor call was still followed by a manual call to obstack_init (&storage->storage_obstack); This results in a bunch of leaks detected by valgrind, such as: ==24665== 4,064 bytes in 1 blocks are definitely lost in loss record 11,469 of 11,590 ==24665== at 0x4C27BF5: malloc (vg_replace_malloc.c:299) ==24665== by 0x5437B7: xmalloc (common-utils.c:44) ==24665== by 0x77CAA7: _obstack_begin_worker (obstack.c:141) ==24665== by 0x60168F: auto_obstack (gdb_obstack.h:70) ==24665== by 0x60168F: get_objfile_bfd_data(objfile*, bfd*) (objfiles.h:188) ==24665== by 0x601DB6: allocate_objfile(bfd*, char const*, enum_flags<objfile_flag>) (objfiles.c:423) ==24665== by 0x647753: symbol_file_add_with_addrs(bfd*, char const*, enum_flags<symfile_add_flag>, section_addr_info*, enum_flags<objfile_flag>, objfile*) (symfile.c:1158) ==24665== by 0x647C7B: symbol_file_add_separate(bfd*, char const*, enum_flags<symfile_add_flag>, objfile*) (symfile.c:1252) ==24665== by 0x4C7D79: elf_symfile_read(objfile*, enum_flags<symfile_add_flag>) (elfread.c:1270) ==24665== by 0x647CB4: read_symbols(objfile*, enum_flags<symfile_add_flag>) (symfile.c:861) ==24665== by 0x647809: syms_from_objfile_1 (symfile.c:1062) -> remove the manual call to obstack_init. Reg-tested on Debian 8/amd64, tests results are the same before/after the patch. valgrind still show some leaks, but less. gdb/ChangeLog 2017-09-05 Philippe Waroquiers <philippe.waroquiers@skynet.be> * objfiles.c (get_objfile_bfd_data): Remove useless obstack_init call.
2017-09-05x86-64: Improve GOTPCREL relocation conversionH.J. Lu6-110/+49
When GOTPCREL relocation conversion leads to relocation overflow, we may get a mysterious linker message, like relocation truncated to fit: R_X86_64_32S against symbol `foo' This patch changes the linker message to failed to convert GOTPCREL relocation; relink with --no-relax bfd/ * elf64-x86-64.c (elf_x86_64_convert_load_reloc): Remove the sec argument. Don't check relocation overflow. Avoid relocation overflow if --no-relax is used. Set converted_reloc on symbol if a GOTPCREL relocation is converted. (elf_x86_64_relocate_section): Issue a fatal error and suggest --no-relax if GOTPCREL relocation conversion leads to relocation overflow. * elfxx-x86.h (elf_x86_link_hash_entry): Add converted_reloc. ld/ * testsuite/ld-x86-64/pr19609-4e.d: Updated. * testsuite/ld-x86-64/pr19609-6a.d: Likewise.
2017-09-05Don't use -fdiagnostics-color=never for rustcTom Tromey2-1/+11
I noticed that the gdb.rust tests fail because the test suite passes -fdiagnostics-color=never to rustc. This is not a recognized rustc option, and the test suite already handles passing the appropriate option to the Rust compiler. This patch fixes the problem. testsuite/ChangeLog 2017-09-05 Tom Tromey <tom@tromey.com> * lib/gdb.exp (gdb_compile): Don't use universal_compile_options for rust.
2017-09-05Test different follow-exec-mode settings in gdb.multi/multi-arch-exec.expSimon Marchi2-7/+23
Using follow-exec-mode "new" takes a different code path than "same", so it's interesting to test this path in combination with a change in architecture of the inferior. This test fails if you remove the previous patch. gdb/testsuite/ChangeLog: * gdb.multi/multi-arch-exec.exp: Test with different "follow-exec-mode" settings. (do_test): New procedure.
2017-09-05Add thread after updating gdbarch when exec'ingSimon Marchi2-1/+10
As mentioned in the previous patch, we should avoid doing register reads after a process does an exec and before we've updated that inferior's gdbarch. Otherwise, we may interpret the registers using the wrong architecture. When a process does an exec with "follow-exec-mode new", a new inferior is added by follow_exec. The gdbarch of that new inferior is at first set to some default value, probably specific to the gdb build (I get "i386" here), which may not be the right one. It is updated later by the call to target_find_description. Before that point, if we try to read the inferior's registers, we may not interpret them correctly. This has been exposed by a failure in gdb.base/foll-exec-mode.exp after the previous patch, with: Remote 'g' packet reply is too long (expected 312 bytes, got 816 bytes) The call to "add_thread" done just after adding the inferior is problematic, because it ends up reading the registers (because the ptid is re-used, we end up doing a switch_to_thread to it, which tries to update stop_pc). The registers returned by gdbserver are the x86-64 ones, while we try to interpret them using the "i386" gdbarch. Postponing the call to add_thread to until the target description/gdbarch has been updated seems to fix the issue. As to why this issue was uncovered by the previous patch: what I think happened before that patch is that since we were updating stop_pc before switching to the new inferior, we were filling the regcache associated to the ptid (this worked fine as long as the architectures of the previous and new process images were the same). The call to switch_to_thread then worked, because the register read hit the regcache. Now, it triggers a register read, while the gdbarch is not set correctly, leading to the "reply is too long" error. If this is right, it sounds wrong that we delete and re-add a thread with the same ptid, and are able to access the registers from the deleted thread. When we delete a thread, should we clear the regcache associated to that ptid, so that the new thread starts with a fresh/empty regcache? gdb/ChangeLog: * infrun.c (follow_exec): Call add_thread after target_find_description.
2017-09-05Read stop_pc after updating the gdbarch when exec'ingSimon Marchi2-2/+7
When an inferior execs and changes architecture (e.g. 64 bits to 32 bits), the gdbarch associated to the inferior is updated by the follow_exec call in handle_inferior_event_1. We should avoid doing any register read before that point, because the registers sent by the remote side will be those of the new architecture, but we would interpret them using the old architecture. We do just that by setting stop_pc during this window, which obviously requires reading the registers. This results in gdb.multi/multi-arch-exec.exp failing, GDB outputting the following error: Truncated register 50 in remote 'g' packet This patch fixes that by postponing the setting of stop_pc to after we've updated the inferior gdbarch. This bug was hiding another problem, and as such introduces some failures in gdb.base/foll-exec-mode.exp. The following patch takes care of that. gdb/ChangeLog: * infrun.c (handle_inferior_event_1): When exec'ing, read stop_pc after follow_exec.
2017-09-05Improve "'g' reply is is to long" error messageSimon Marchi2-1/+6
... by adding the expected size, and the received size. I found this useful when debugging gdbarch/remote issues, since it gives a hint of what gdb expects and what the remote sent. gdb/ChangeLog: * remote.c (process_g_packet): Update error message.
2017-09-05Add i386.o to gdb_target_obs for x86_64-* targetsYao Qi2-7/+13
This patch fixes the build failure caused by 22916b0 (Convert the rest x86 target descriptions). gdb: 2017-09-05 Yao Qi <yao.qi@linaro.org> * configure.tgt (gdb_target_obs): Add i386.o for x86_64-* targets.
2017-09-05eval.c:evaluate_subexp_standard: Factor out function call handlingPedro Alves2-451/+482
While working on the no-debug-info debugging improvements, I found evaluate_subexp_standard's function call code unnecessarily long and hard to navigate and debug. The use of goto doesn't help either. This commit tries to improve things by factoring out the function-call-related code to separate helper functions. gdb/ChangeLog: 2017-09-05 Pedro Alves <palves@redhat.com> * eval.c (eval_call, evaluate_funcall): New functions, factored out from ... (evaluate_subexp_standard): ... this.
2017-09-05Fix a buffer overrun when parsing a corrupt MIPS ELF binary.Nick Clifton2-3/+9
PR 21995 * readelf.c (process_mips_specific): Add checks for a NULL data pointer.