binutils-gdb.git
7 years agoPowerPC TPREL16_HA/LO reloc optimization
Alan Modra [Wed, 30 Aug 2017 11:05:35 +0000 (20:35 +0930)]
PowerPC TPREL16_HA/LO reloc optimization

In the TLS GD/LD to LE optimization, ld replaces a sequence like

 addi 3,2,x@got@tlsgd R_PPC64_GOT_TLSGD16 x
 bl __tls_get_addr(x@tlsgd) R_PPC64_TLSGD x
R_PPC64_REL24 __tls_get_addr
 nop

with

 addis 3,13,x@tprel@ha R_PPC64_TPREL16_HA x
 addi 3,3,x@tprel@l R_PPC64_TPREL16_LO x
 nop

When the tprel offset is small, this can be further optimized to

 nop
 addi 3,13,x@tprel
 nop

bfd/
* elf64-ppc.c (struct ppc_link_hash_table): Add do_tls_opt.
(ppc64_elf_tls_optimize): Set it.
(ppc64_elf_relocate_section): Nop addis on TPREL16_HA, and convert
insn on TPREL16_LO and TPREL16_LO_DS relocs to use r13 when
addis would add zero.
* elf32-ppc.c (struct ppc_elf_link_hash_table): Add do_tls_opt.
(ppc_elf_tls_optimize): Set it.
(ppc_elf_relocate_section): Nop addis on TPREL16_HA, and convert
insn on TPREL16_LO relocs to use r2 when addis would add zero.
gold/
* powerpc.cc (Target_powerpc::Relocate::relocate): Nop addis on
TPREL16_HA, and convert insn on TPREL16_LO and TPREL16_LO_DS
relocs to use r2/r13 when addis would add zero.
ld/
* testsuite/ld-powerpc/tls.s: Add calls with tls markers.
* testsuite/ld-powerpc/tls32.s: Likewise.
* testsuite/ld-powerpc/powerpc.exp: Run tls marker tests.
* testsuite/ld-powerpc/tls.d: Adjust for TPREL16_HA/LO optimization.
* testsuite/ld-powerpc/tlsexe.d: Likewise.
* testsuite/ld-powerpc/tlsexetoc.d: Likewise.
* testsuite/ld-powerpc/tlsld.d: Likewise.
* testsuite/ld-powerpc/tlsmark.d: Likewise.
* testsuite/ld-powerpc/tlsopt4.d: Likewise.
* testsuite/ld-powerpc/tlstoc.d: Likewise.

7 years agoPowerPC64 __tls_get_addr sequence optimization
Alan Modra [Wed, 30 Aug 2017 11:05:09 +0000 (20:35 +0930)]
PowerPC64 __tls_get_addr sequence optimization

There isn't a good reason for ld.bfd to behave differently from gold
in the code generated by TLS GD/LD to LE optimization.

bfd/
* elf64-ppc.c (ppc64_elf_relocate_section): When optimizing
__tls_get_addr call sequences to LE, don't move the addi down
to the nop.  Replace the bl with addi and leave the nop alone.
ld/
* testsuite/ld-powerpc/tls.d: Update.
* testsuite/ld-powerpc/tlsexe.d: Update.
* testsuite/ld-powerpc/tlsexetoc.d: Update.
* testsuite/ld-powerpc/tlsld.d: Update.
* testsuite/ld-powerpc/tlsmark.d: Update.
* testsuite/ld-powerpc/tlsopt4.d: Update.
* testsuite/ld-powerpc/tlstoc.d: Update.

7 years agotestsuite/ld-cris various files: Run ld with --hash-style=sysv.
Hans-Peter Nilsson [Wed, 30 Aug 2017 00:27:14 +0000 (02:27 +0200)]
testsuite/ld-cris various files: Run ld with --hash-style=sysv.

* testsuite/ld-cris/dso-pltdis1.d: Run ld with --hash-style=sysv.
* testsuite/ld-cris/dso-pltdis2.d,
testsuite/ld-cris/dso12-pltdis.d, testsuite/ld-cris/expdyn1.d,
testsuite/ld-cris/expdyn5.d, testsuite/ld-cris/expdyn6.d,
testsuite/ld-cris/expdyn7.d, testsuite/ld-cris/gotplt1.d,
testsuite/ld-cris/gotplt2.d, testsuite/ld-cris/gotplt3.d,
testsuite/ld-cris/hiddef1.d, testsuite/ld-cris/libdso-11.d,
testsuite/ld-cris/libdso-12.d, testsuite/ld-cris/libdso-12b.d,
testsuite/ld-cris/libdso-12c.d, testsuite/ld-cris/libdso-13.d,
testsuite/ld-cris/libdso-13b.d, testsuite/ld-cris/libdso-14.d,
testsuite/ld-cris/libdso-15.d, testsuite/ld-cris/libdso-15b.d,
testsuite/ld-cris/libdso-1b.d, testsuite/ld-cris/libdso-1c.d,
testsuite/ld-cris/libdso-1d.d, testsuite/ld-cris/libdso-4.d,
testsuite/ld-cris/pr16044.d, testsuite/ld-cris/pv32-1.d,
testsuite/ld-cris/tls-dso-dtpoffd2.d,
testsuite/ld-cris/tls-dso-dtpoffd4.d,
testsuite/ld-cris/tls-dso-tpoffgotcomm1.d,
testsuite/ld-cris/tls-dso-x1x2-1.d, testsuite/ld-cris/tls-gc-71.d,
testsuite/ld-cris/tls-ie-78.d, testsuite/ld-cris/tls-js1.d,
testsuite/ld-cris/tls-ldgdex-14.d,
testsuite/ld-cris/tls-ldgdex-15.d,
testsuite/ld-cris/tls-legdx-16.d,
testsuite/ld-cris/tls-legdx-17.d,
testsuite/ld-cris/tls-local-63.d,
testsuite/ld-cris/tls-local-64.d, testsuite/ld-cris/tls-ok-30.d,
testsuite/ld-cris/tls-ok-32.d, testsuite/ld-cris/tls-ok-34.d,
testsuite/ld-cris/tls-und-38.d, testsuite/ld-cris/tls-und-42.d,
testsuite/ld-cris/tls-und-46.d, testsuite/ld-cris/tls-und-50.d,
testsuite/ld-cris/weakref2.d, testsuite/ld-cris/weakref3.d,
testsuite/ld-cris/weakref4.d: Likewise.

7 years agoAutomatic date update in version.in
GDB Administrator [Wed, 30 Aug 2017 00:00:21 +0000 (00:00 +0000)]
Automatic date update in version.in

7 years agoLook for FIR in the last FreeBSD/mips floating-point register.
John Baldwin [Tue, 29 Aug 2017 22:04:09 +0000 (15:04 -0700)]
Look for FIR in the last FreeBSD/mips floating-point register.

FreeBSD/mips kernels were recently changed to include the floating
point implementation revision register in the floating point register
set exported in process cores and via ptrace() (r318067).  This change
will first ship in FreeBSD 12.0 when it is eventually released.  The
space used to hold FIR was previously reserved in 'struct fpreg' as a
zero-filled dummy for padding, so 'struct fpreg' has not changed in
size.  Since FIR should be non-zero on all MIPS processors supported
by FreeBSD, ignore a value of 0 from 'struct fpreg' and only report
non-zero values as a valid FIR register.

gdb/ChangeLog:

* mips-fbsd-nat.c (getfpregs_supplies): Return true for FIR.
* mips-fbsd-tdep.c (mips_fbsd_supply_fpregs): Split supply of FSR
out of loop and add supply of FIR.
(mips_fbsd_collect_fpregs): Split collect of FSR out of loop and
add collect of FIR.

7 years agox86: Re-indent elf32-i386.c/elf64-x86-64.c
H.J. Lu [Tue, 29 Aug 2017 21:44:40 +0000 (14:44 -0700)]
x86: Re-indent elf32-i386.c/elf64-x86-64.c

* elf32-i386.c (elf_i386_pie_finish_undefweak_symbol):
Re-indent.
* elf64-x86-64.c (elf_x86_64_finish_local_dynamic_symbol):
Likewise.
(elf_x86_64_pie_finish_undefweak_symbol): Likewise.

7 years agoAdd elfxx-x86.h and elfxx-x86.c
H.J. Lu [Mon, 28 Aug 2017 13:23:25 +0000 (06:23 -0700)]
Add elfxx-x86.h and elfxx-x86.c

Move common codes in elf32-i386.c and elf64-x86-64.c to elfxx-x86.c.

* Makefile.am (BFD32_BACKENDS): Add elfxx-x86.lo.
(BFD64_BACKENDS): Likewise.
(BFD32_BACKENDS_CFILES): Add elfxx-x86.c.
(BFD64_BACKENDS_CFILES): Likewise.
* Makefile.in: Regenerated.
* configure.ac (bfd_backends): Add elfxx-x86.lo together with
elf32-i386.lo and elf64-x86-64.lo.
* configure: Regenerated.
* elf32-i386.c: Include "elfxx-x86.h" instead of "sysdep.h",
"bfd.h", "bfdlink.h", "libbfd.h", "elf-bfd.h", "bfd_stdint.h",
"objalloc.h" and "hashtab.h".
(ELIMINATE_COPY_RELOCS): Removed.
(UNDEFINED_WEAK_RESOLVED_TO_ZERO):Likewise.
(SYMBOL_NO_COPYRELOC): Likewise.
(elf_i386_link_hash_entry): Likewise.
(GOT_UNKNOWN): Likewise.
(GOT_NORMAL): Likewise.
(GOT_TLS_GD): Likewise.
(elf_i386_hash_entry): Likewise.
(elf_i386_obj_tdata): Likewise.
(elf_i386_tdata): Likewise.
(elf_i386_local_got_tls_type): Likewise.
(elf_i386_local_tlsdesc_gotent): Likewise.
(elf_i386_hash_table): Likewise.
(elf_i386_link_hash_newfunc): Likewise.
(elf_i386_local_htab_hash): Likewise.
(elf_i386_local_htab_eq): Likewise.
(elf_i386_get_local_sym_hash): Likewise.
(elf_i386_link_hash_table_free): Likewise.
(elf_i386_copy_indirect_symbol): Likewise.
(elf_i386_fixup_symbol): Likewise.
(elf_i386_readonly_dynrelocs): Likewise.
(elf_i386_always_size_sections): Likewise.
(elf_i386_set_tls_module_base): Likewise.
(elf_i386_dtpoff_base): Likewise.
(compare_relocs): Likewise.
(elf_i386_hash_symbol): Likewise.
(elf_i386_parse_gnu_properties): Likewise.
(elf_i386_merge_gnu_properties): Likewise.
(elf_i386_link_check_relocs): Likewise.
(elf_i386_merge_symbol_attribute): Likewise.
(bfd_elf32_bfd_link_check_relocs): Likewise.
(elf_backend_copy_indirect_symbol): Likewise.
(elf_backend_always_size_sections): Likewise.
(elf_backend_omit_section_dynsym): Likewise.
(elf_backend_hash_symbol): Likewise.
(elf_backend_fixup_symbol): Likewise.
(elf_backend_parse_gnu_properties): Likewise.
(elf_backend_merge_gnu_properties): Likewise.
(elf_backend_merge_symbol_attribute): Likewise.
(elf_i386_mkobject): Updated.
(elf_i386_link_hash_table_create): Likewise.
(elf_i386_check_tls_transition): Likewise.
(elf_i386_tls_transition): Likewise.
(elf_i386_convert_load_reloc): Likewise.
(elf_i386_check_relocs): Likewise.
(elf_i386_adjust_dynamic_symbol): Likewise.
(elf_i386_allocate_dynrelocs): Likewise.
(elf_i386_convert_load): Likewise.
(elf_i386_size_dynamic_sections): Likewise.
(elf_i386_relocate_section): Likewise.
(elf_i386_finish_dynamic_symbol ): Likewise.
(elf_i386_finish_dynamic_sections): Likewise.
(elf_i386_output_arch_local_syms): Likewise.
(elf_i386_get_synthetic_symtab): Likewise.
(elf_i386_link_setup_gnu_properties): Likewise.
(elf_i386_link_hash_table): Use elf_x86_link_hash_table, instead
of elf_link_hash_table, as base.
(elf_i386_next_tls_desc_index): New.
(elf_i386_srelplt2): Likewise.
(elf_i386_plt): Likewise.
(elf_i386_lazy_plt): Likewise.
(elf_i386_non_lazy_plt): Likewise.
* elf32-x86-64.c: Include "elfxx-x86.h" instead of "sysdep.h",
"bfd.h", "bfdlink.h", "libbfd.h", "elf-bfd.h", "bfd_stdint.h",
"objalloc.h" and "hashtab.h".
(ELIMINATE_COPY_RELOCS): Removed.
(UNDEFINED_WEAK_RESOLVED_TO_ZERO):Likewise.
(SYMBOL_NO_COPYRELOC): Likewise.
(elf_x86_64_link_hash_entry): Likewise.
(GOT_UNKNOWN): Likewise.
(GOT_NORMAL): Likewise.
(GOT_TLS_GD): Likewise.
(elf_x86_64_hash_entry): Likewise.
(elf_x86_64_obj_tdata): Likewise.
(elf_x86_64_tdata): Likewise.
(elf_x86_64_local_got_tls_type): Likewise.
(elf_x86_64_local_tlsdesc_gotent): Likewise.
(elf_x86_64_hash_table): Likewise.
(elf_x86_64_link_hash_newfunc): Likewise.
(elf_x86_64_local_htab_hash): Likewise.
(elf_x86_64_local_htab_eq): Likewise.
(elf_x86_64_get_local_sym_hash): Likewise.
(elf_x86_64_link_hash_table_free): Likewise.
(elf_x86_64_copy_indirect_symbol): Likewise.
(elf_x86_64_fixup_symbol): Likewise.
(elf_x86_64_readonly_dynrelocs): Likewise.
(elf_x86_64_always_size_sections): Likewise.
(elf_x86_64_set_tls_module_base): Likewise.
(elf_x86_64_dtpoff_base): Likewise.
(compare_relocs): Likewise.
(elf_x86_64_merge_symbol_attribute): Likewise.
(elf_x86_64_hash_symbol): Likewise.
(elf_x86_64_parse_gnu_properties): Likewise.
(elf_x86_64_merge_gnu_properties): Likewise.
(elf_x86_64_link_check_relocs): Likewise.
(elf_backend_copy_indirect_symbol): Likewise.
(elf_backend_always_size_sections): Likewise.
(bfd_elf64_bfd_link_check_relocs): Likewise.
(elf_backend_merge_symbol_attribute): Likewise.
(elf_backend_hash_symbol): Likewise.
(elf_backend_omit_section_dynsym): Likewise.
(elf_backend_fixup_symbol): Likewise.
(elf_backend_parse_gnu_properties): Likewise.
(elf_backend_merge_gnu_properties): Likewise.
(bfd_elf32_bfd_link_check_relocs): Likewise.
(elf_x86_64_mkobject): Updated.
(elf_x86_64_link_hash_table_create): Likewise.
(elf_x86_64_check_tls_transition): Likewise.
(elf_x86_64_tls_transition): Likewise.
(elf_x86_64_convert_load_reloc): Likewise.
(elf_x86_64_check_relocs): Likewise.
(elf_x86_64_adjust_dynamic_symbol): Likewise.
(elf_x86_64_allocate_dynrelocs): Likewise.
(elf_x86_64_convert_load): Likewise.
(elf_x86_64_size_dynamic_sections): Likewise.
(elf_x86_64_relocate_section): Likewise.
(elf_x86_64_finish_dynamic_symbol ): Likewise.
(elf_x86_64_finish_dynamic_sections): Likewise.
(elf_x86_64_output_arch_local_syms): Likewise.
(elf_x86_64_get_synthetic_symtab): Likewise.
(elf_x86_64_link_setup_gnu_properties): Likewise.
(elf_x86_64_link_hash_table): Use elf_x86_link_hash_table,
instead of elf_link_hash_table, as base.
(elf_x86_64_next_tls_desc_index): New.
(elf_x86_64_srelplt2): Likewise.
(elf_x86_64_plt): Likewise.
(elf_x86_64_lazy_plt): Likewise.
(elf_x86_64_non_lazy_plt): Likewise.
* elfxx-x86.c: New file.
* elfxx-x86.h: Likewise.

7 years agox86: Simplify bad return in get_synthetic_symtab
H.J. Lu [Tue, 29 Aug 2017 18:28:10 +0000 (11:28 -0700)]
x86: Simplify bad return in get_synthetic_symtab

* elf32-i386.c (elf_i386_get_synthetic_symtab): Simplify bad
return.
* elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Likewise.

7 years agox86: Check valid PLT sections before checking dynamic relocations
H.J. Lu [Tue, 29 Aug 2017 17:40:03 +0000 (10:40 -0700)]
x86: Check valid PLT sections before checking dynamic relocations

Update x86 get_synthetic_symtab to check valid PLT sections before
checking dynamic relocations and free invalid PLT section contents.

* elf32-i386.c (elf_i386_get_synthetic_symtab): Check valid PLT
sections before checking dynamic relocations and free invalid
PLT section contents.
* elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Likewise.

7 years agoImprove MSP430 section placement.
Jozef Lawrynowicz [Tue, 29 Aug 2017 16:18:43 +0000 (17:18 +0100)]
Improve MSP430 section placement.

ld * emultempl/msp430.em (change_output_section): New function.
(move_prefixed_section): New function.
(add_region_prefix): New function.
(msp430_elf_after_open): New function.
(gld${EMULATION_NAME}_add_options): Implement.
(gld${EMULATION_NAME}_list_options): Implement.
(gld${EMULATION_NAME}_handle_option): Implement.
* ld.texinfo: Document new options.
* testsuite/ld-msp430-elf/main-bss-lower.d: New.
* testsuite/ld-msp430-elf/main-bss-upper.d: New.
* testsuite/ld-msp430-elf/main-const-lower.d: New.
* testsuite/ld-msp430-elf/main-const-upper.d: New.
* testsuite/ld-msp430-elf/main-text-lower.d: New.
* testsuite/ld-msp430-elf/main-text-upper.d: New.
* testsuite/ld-msp430-elf/main-var-lower.d: New.
* testsuite/ld-msp430-elf/main-var-upper.d: New.
* testsuite/ld-msp430-elf/main-with-data-bss-unique-sec.s: New.
* testsuite/ld-msp430-elf/main-with-data-bss.s: New.
* testsuite/ld-msp430-elf/main-with-text-rodata-unique-sec.s: New.
* testsuite/ld-msp430-elf/main-with-text-rodata.s: New.
* testsuite/ld-msp430-elf/msp430-elf.exp: New.
* testsuite/ld-msp430-elf/msp430-no-lower.ld: New.
* testsuite/ld-msp430-elf/msp430.ld: New.
* emultempl/msp430.em (data_statement_size): New.
(eval_upper_either_sections): New.
(eval_lower_either_sections): New.
(intermediate_relax_sections): New.
(msp430_elf_after_allocation): New.
* emultempl/msp430.em (gld${EMULATION_NAME}_place_orphan): Always
place sections in the lower region.

gas * config/tc-msp430.c (md_parse_option): Define high data and high
bss symbols if -mdata-region is passed.
Define -mdata-region open.
* doc/c-msp430.texi: Document -mdata-region.
* testsuite/gas/msp430/high-data-bss-sym.d: New test.
* testsuite/gas/msp430/high-data-bss-sym.s: New.
* testsuite/gas/msp430/msp430.exp: Add -mdata-region tests.

7 years agoFix simulation of MSP430's open system call.
Jozef Lawrynowicz [Tue, 29 Aug 2017 13:09:58 +0000 (14:09 +0100)]
Fix simulation of MSP430's open system call.

* sim/msp430/msp430-sim.c (maybe_perform_syscall): Fix passing of
arguments for variadic syscall "open".

7 years ago[GOLD] PowerPC tls_get_addr_optimize
Alan Modra [Tue, 29 Aug 2017 06:25:33 +0000 (15:55 +0930)]
[GOLD] PowerPC tls_get_addr_optimize

This implements the special __tls_get_addr_opt call stub for powerpc
gold that returns __thread variable addresses without actually making
a call to __tls_get_addr in most cases.  Shared libraries that are
loaded at program load time (ie. dlopen is not used) have a known
layout for their __thread variables, and thus DTPMOD64/DPTREL64 pairs
describing those variables can be set up by ld.so for the
__tls_get_addr_opt call stub fast exit.
Ref https://sourceware.org/ml/libc-alpha/2015-03/msg00626.html

I really, really wish I'd used a differently versioned __tls_get_addr
symbol than the base symbol to indicate glibc support for the
optimized call, rather than having glibc export __tls_get_addr_opt.  A
lot of the messing around here, flipping symbols from __tls_get_addr
to __tls_get_addr_opt, is caused by that decision.  About the only
benefit is that a user can see at a glance that their disassembled
code is calling __tls_get_addr via the fancy call stub..  Anyway, we
need references to __tls_get_addr to seem like they were to
__tls_get_addr_opt, and in cases like the tsan interceptor, a
definition of __tls_get_addr to seem like one of __tls_get_addr_opt
as well.  That's the reason for Symbol::clear_in_reg and
Symbol_table::clone, and why symbols are substituted in Scan::global
and other places dealing with dynamic linking.

elfcpp/
* elfcpp.h (DT_PPC_OPT): Define.
* powerpc.h (PPC_OPT_TLS): Define.
gold/
* options.h (tls_get_addr_optimize): New option.
* symtab.h (Symbol::clear_in_reg, clone): New functions.
(Sized_symbol::clone): New function.
(Symbol_table::clone): New function.
* resolve.cc (Symbol::clone, Sized_symbol::clone): New functions.
* powerpc.cc (Target_powerpc::has_tls_get_addr_opt_,
tls_get_addr_, tls_get_addr_opt_): New vars.
(Target_powerpc::tls_get_addr_opt, tls_get_addr,
is_tls_get_addr_opt, replace_tls_get_addr,
set_has_tls_get_addr_opt, stk_linker): New functions.
(Target_powerpc::Track_tls::maybe_skip_tls_get_addr_call): Add
target param.  Update callers.  Compare symbols rather than names.
(Target_powerpc::do_define_standard_symbols): Init tls_get_addr_
and tls_get_addr_opt_.
(Target_powerpc::Branch_info::mark_pltcall): Translate tls_get_addr
sym to tls_get_addr_opt.
(Target_powerpc::Branch_info::make_stub): Likewise.
(Stub_table::define_stub_syms): Likewise.
(Target_powerpc::Scan::global): Likewise.
(Target_powerpc::Relocate::relocate): Likewise.
(add_3_12_2, add_3_12_13, bctrl, beqlr, cmpdi_11_0, cmpwi_11_0,
ld_11_1, ld_11_3, ld_12_3, lwz_11_3, lwz_12_3, mr_0_3, mr_3_0,
mtlr_11, std_11_1): New constants.
(Stub_table::eh_frame_added_): Delete.
(Stub_table::tls_get_addr_opt_bctrl_, plt_fde_len_, plt_fde_): New vars.
(Stub_table::init_plt_fde): New functions.
(Stub_table::add_eh_frame, replace_eh_frame): Move definition out
of line.  Init and use plt_fde_.
(Stub_table::plt_call_size): Return size for tls_get_addr stub.
Extract alignment code to..
(Stub_table::plt_call_align): ..this new function.  Adjust all callers.
(Stub_table::add_plt_call_entry): Set has_tls_get_addr_opt and
tls_get_addr_opt_bctrl, and align after that.
(Stub_table::do_write): Write out tls_get_addr stub.
(Target_powerpc::do_finalize_sections): Emit DT_PPC_OPT
PPC_OPT_TLS/PPC64_OPT_TLS bit.
(Target_powerpc::Relocate::relocate): Don't check for or modify
nop following bl for tls_get_addr stub.

7 years ago[GOLD] Reduce size of class Symbol
Alan Modra [Tue, 29 Aug 2017 06:22:45 +0000 (15:52 +0930)]
[GOLD] Reduce size of class Symbol

On 64-bit targets there is a 32-bit hole in symbol->u_, and another
due to symbol flags exceeding 32 bits.  By splitting the union,
the total size of the class reduces by one 64-bit word.

* symtab.h (Symbol): Split u_ into u1_ and u2_.  Adjust accessors
to suit.  Move plt_offset_ before got_offsets_.
* symtab.cc (Symbol::init_fields): Adjust for union change.
(Symbol::init_base_output_data): Likewise.
(Symbol::init_base_output_segment): Likewise.
(Symbol::allocate_base_common): Likewise.
(Symbol::output_section): Likewise.
(Symbol::set_output_section): Likewise.
(Symbol::set_output_segment): Likewise.
* resolve.cc (Symbol::override_base): Likewise.
(Symbol::override_base_with_special): Likewise.

7 years agoAutomatic date update in version.in
GDB Administrator [Tue, 29 Aug 2017 00:01:09 +0000 (00:01 +0000)]
Automatic date update in version.in

7 years ago2017-08-28 James Clarke <jrtc27@jrtc27.com>
Han Shen [Mon, 28 Aug 2017 23:36:45 +0000 (16:36 -0700)]
2017-08-28  James Clarke <jrtc27@jrtc27.com>

gold/ChangeLog:
PR gold/21868
* aarch64.cc (AArch64_relobj::try_fix_erratum_843419_optimized):
Add extra view offset argument to function.
(AArch64_relobj::fix_errata_and_relocate_erratum_stubs): Add
extra view offset set to the output offset when the view has
is_input_output_view set, since it has not already been
included. Pass this to try_fix_erratum_843419_optimized.

7 years agoRemove unused _bfd_elf_ifunc_get_synthetic_symtab
H.J. Lu [Mon, 28 Aug 2017 22:40:00 +0000 (15:40 -0700)]
Remove unused _bfd_elf_ifunc_get_synthetic_symtab

Since _bfd_elf_ifunc_get_synthetic_symtab is no longer called by x86
get_synthetic_symtab, it is now unused.  This patch removes it.

* elf-bfd.h (_bfd_elf_ifunc_get_synthetic_symtab): Removed.
* elf-ifunc.c (_bfd_elf_ifunc_get_synthetic_symtab): Likewise.

7 years agogdb.base/commands.exp: Remove unused global references
Simon Marchi [Mon, 28 Aug 2017 21:39:18 +0000 (23:39 +0200)]
gdb.base/commands.exp: Remove unused global references

There are a few unused references to the gdb_prompt global.

gdb/testsuite/ChangeLog:

* gdb.base/commands.exp (gdbvar_simple_if_test,
gdbvar_simple_if_test, gdbvar_complex_if_while_test,
progvar_simple_if_test, progvar_simple_while_test,
progvar_complex_if_while_test, user_defined_command_test,
user_defined_command_args_eval,
user_defined_command_args_stack_test,
user_defined_command_manyargs_test, bp_deleted_in_command_test,
temporary_breakpoint_commands,
gdb_test_no_prompt, redefine_hook_test,
redefine_backtrace_test): Remove "global gdb_prompt".

7 years agoAdd missing PR number in ChangeLog
Simon Marchi [Mon, 28 Aug 2017 21:09:04 +0000 (23:09 +0200)]
Add missing PR number in ChangeLog

This should have been included in the previous commit.

7 years agodefine_command: Don't convert command name to lower case
Simon Marchi [Mon, 28 Aug 2017 21:05:04 +0000 (23:05 +0200)]
define_command: Don't convert command name to lower case

Commit

  Command names: make them case sensitive
  3d7b173c29900879c9a5958dd6029fd36666e57c

made command name lookup case sensitive.  However, define_command, used
when creating a user-defined command, converts the command name to
lowercase, assuming that the command name lookup works in a case
insensitive way.  This causes user-defined commands with capital letters
in their name to only be callable with a lowercase version:

  (gdb) define Foo
  Type commands for definition of "Foo".
  End with a line saying just "end".
  >print 1
  >end
  (gdb) Foo
  Undefined command: "Foo".  Try "help".
  (gdb) foo
  $1 = 1

This patch removes that conversion to lowercase, so that the user can
call the command with the same name they provided.

gdb/ChangeLog:

* cli/cli-script.c (define_command): Don't convert command name
to lower case.

gdb/testsuite/ChangeLog:

* gdb.base/commands.exp (user_defined_command_case_sensitivity):
New proc, call it from toplevel.

7 years agox86: Check for valid PLT section size
H.J. Lu [Mon, 28 Aug 2017 18:25:58 +0000 (11:25 -0700)]
x86: Check for valid PLT section size

Update x86 get_synthetic_symtab to check for valid PLT section size
before examining PLT section contents.

PR binutils/22018
* elf32-i386.c (elf_i386_get_synthetic_symtab): Check for valid
PLT section size.
* elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Likewise.

7 years agoFix bad offset calculation for R_AARCH64_TLSDESC_* relocs.
Igor Kudrin [Mon, 28 Aug 2017 15:03:00 +0000 (08:03 -0700)]
Fix bad offset calculation for R_AARCH64_TLSDESC_* relocs.

If a custom linker script with an unexpected relative layout of .got
and .got.plt sections was used, gold might produce a wrong offset
when applying R_AARCH64_TLSDESC_* relocations.
This patch fixes the issue by calculating "got_tlsdesc_offset"
in a more direct way.

gold/
* aarch64.cc (Target_aarch64::Relocate::relocate_tls):
Make got_tlsdesc_offset signed and fix its calculation.
* testsuite/Makefile.am (aarch64_tlsdesc): New test.
* testsuite/Makefile.in: Regenerate.
* testsuite/aarch64_tlsdesc.s: New test source file.
* testsuite/aarch64_tlsdesc.sh: New test script.
* testsuite/aarch64_tlsdesc.t: New test linker script.

7 years ago[GOLD] Symbol flag for PowerPC64 localentry:0 tracking
Alan Modra [Mon, 28 Aug 2017 06:57:33 +0000 (16:27 +0930)]
[GOLD] Symbol flag for PowerPC64 localentry:0 tracking

This patch provides a flag for PowerPC64 ELFv2 use in class Symbol,
and modifies Sized_target::resolve to return whether the symbol has
been resolved.  If not, normal processing continues.  I use this for
PowerPC64 ELFv2 to keep track of whether a symbol has any definition
with non-zero localentry, in order to disable --plt-localentry for
that symbol.

PR 21847
* powerpc.cc (Target_powerpc::is_elfv2_localentry0): Test
non_zero_localentry.
(Target_powerpc::resolve): New function.
(powerpc_info): Set has_resolve for 64-bit.
* target.h (Sized_target::resolve): Return bool.
* resolve.cc (Symbol_table::resolve): Continue with normal
processing when target resolve returns false.
* symtab.h (Symbol::non_zero_localentry, set_non_zero_localentry):
New accessors.
(Symbol::non_zero_localentry_): New flag bit.
* symtab.cc (Symbol::init_fields): Init non_zero_localentry_.

7 years agoAutomatic date update in version.in
GDB Administrator [Mon, 28 Aug 2017 00:00:46 +0000 (00:00 +0000)]
Automatic date update in version.in

7 years agox86: Initialize def_protected
H.J. Lu [Sun, 27 Aug 2017 14:23:40 +0000 (07:23 -0700)]
x86: Initialize def_protected

* elf32-i386.c (elf_i386_link_hash_newfunc): Initialize
def_protected.
* elf64-x86-64.c (elf_x86_64_link_hash_newfunc): Likewise.

7 years agoDisallow copy relocation against protected data symbol
H.J. Lu [Sun, 27 Aug 2017 02:22:26 +0000 (19:22 -0700)]
Disallow copy relocation against protected data symbol

We shpouldn't generate copy relocation to resolve reference to protected
data symbol defined in shared object with the NO_COPY_ON_PROTECTED
property.  This patch adds a bit to elf_obj_tdata as well as
elf_i386_link_hash_entry and elf_x86_64_link_hash_entry to track the bfd
with the NO_COPY_ON_PROTECTED property as well as protected symbol
defined in shared object.  extern_protected_data is set to FALSE if any
input relocatable file contains the NO_COPY_ON_PROTECTED property.

bfd/

PR ld/21997
* elf-bfd.h (elf_obj_tdata): Use ENUM_BITFIELD on object_id,
dyn_lib_class and has_gnu_symbols.  Change bad_symtab to bitfield.
Add a has_no_copy_on_protected bitfield.
(elf_has_no_copy_on_protected): New.
* elf-properties.c (_bfd_elf_parse_gnu_properties): Set
elf_has_no_copy_on_protected for GNU_PROPERTY_NO_COPY_ON_PROTECTED.
(elf_merge_gnu_property_list): Likewise.
(_bfd_elf_link_setup_gnu_properties): Set extern_protected_data
to FALSE for elf_has_no_copy_on_protected.
* elf32-i386.c (SYMBOL_NO_COPYRELOC): New.
(elf_i386_link_hash_entry): Add def_protected.
(elf_i386_adjust_dynamic_symbol): Also check SYMBOL_NO_COPYRELOC
when checking info->nocopyreloc.
(elf_i386_link_setup_gnu_properties): Don't set
extern_protected_data here.
(elf_i386_merge_symbol_attribute): New function.
(elf_backend_merge_symbol_attribute): New.
* elf64-x86-64.c (SYMBOL_NO_COPYRELOC): New.
(elf_x86_64_link_hash_entry): Add def_protected.
(elf_x86_64_need_pic): Report protected symbol for def_protected.
(elf_x86_64_adjust_dynamic_symbol): Also check SYMBOL_NO_COPYRELOC
when checking info->nocopyreloc.
(elf_x86_64_relocate_section): Also check for R_X86_64_PC32
relocation run-time overflow and unresolvable R_X86_64_32S
relocation against protected data symbol defined in shared object
with GNU_PROPERTY_NO_COPY_ON_PROTECTED.
(elf_x86_64_link_setup_gnu_properties): Don't set
extern_protected_data here.
(elf_x86_64_merge_symbol_attribute): New function.
(elf_backend_merge_symbol_attribute): New.

ld/

PR ld/21997
* testsuite/ld-i386/i386.exp: Run PR ld/21997 tests.
* testsuite/ld-x86-64/x86-64.exp: Likewise.
* testsuite/ld-i386/pr21997-1a.S: New file.
* testsuite/ld-i386/pr21997-1b.c: Likewise.
* testsuite/ld-i386/pr21997-1c.S: Likewise.
* testsuite/ld-x86-64/pr21997-1a.S: Likewise.
* testsuite/ld-x86-64/pr21997-1a.err: Likewise.
* testsuite/ld-x86-64/pr21997-1b.c: Likewise.
* testsuite/ld-x86-64/pr21997-1b.err: Likewise.
* testsuite/ld-x86-64/pr21997-1c.c: Likewise.

7 years agoAutomatic date update in version.in
GDB Administrator [Sun, 27 Aug 2017 00:00:52 +0000 (00:00 +0000)]
Automatic date update in version.in

7 years agoPowerPC TPREL reloc handling
Alan Modra [Sat, 26 Aug 2017 10:56:13 +0000 (20:26 +0930)]
PowerPC TPREL reloc handling

Tidy how these are handled in PIEs.

* elf32-ppc.c (must_be_dyn_reloc): Use bfd_link_dll.  Comment.
(ppc_elf_check_relocs): Only set DF_STATIC_TLS in shared libs.
(ppc_elf_relocate_section): Comment fix.
* elf64-ppc.c (must_be_dyn_reloc): Use bfd_link_dll.  Comment.
(ppc64_elf_check_relocs): Only set DF_STATIC_TLS in shared libs.
Support dynamic relocs for TPREL16 when non-pic too.
(dec_dynrel_count): Adjust TPREL16 handling as per check_relocs.
(ppc64_elf_relocate_section): Support dynamic relocs for TPREL16
when non-pic too.

7 years agoremove param "dispp" from ada-lang.c::ada_lookup_struct_elt_type
Joel Brobecker [Fri, 25 Aug 2017 23:23:27 +0000 (19:23 -0400)]
remove param "dispp" from ada-lang.c::ada_lookup_struct_elt_type

The function is always called with DISPP set to NULL, so there is
no need for this parameter anymore. This patch removes it, and
eliminates some dead code associated to that.

gdb/ChangeLog:

        * ada-lang.c (ada_lookup_struct_elt_type): Remove parameter "dispp".
        Update all callers accordingly. Remove all code blocks handling
        the case where DISPP is not NULL.

Tested on x86_64-linux, no regression.

7 years agox86: Remove redundant "symbol" in comments
H.J. Lu [Sat, 26 Aug 2017 00:13:58 +0000 (17:13 -0700)]
x86: Remove redundant "symbol" in comments

* elf32-i386.c (elf_i386_link_hash_entry): Remove redundant
"symbol" in comments.
* elf64-x86-64.c (elf_x86_64_link_hash_entry): Likewise.

7 years agoAutomatic date update in version.in
GDB Administrator [Sat, 26 Aug 2017 00:01:04 +0000 (00:01 +0000)]
Automatic date update in version.in

7 years agogdbserver: Rename some functions, thread -> inferior
Simon Marchi [Fri, 25 Aug 2017 08:45:33 +0000 (10:45 +0200)]
gdbserver: Rename some functions, thread -> inferior

These functions apply to thread, and not inferiors (in the gdbserver
sense, the abstraction for threads and processes, as in
inferior_list).  Therefore, it would make more sense if these functions
were named with "thread" rather than "inferior".

gdb/gdbserver/ChangeLog:

* inferiors.h (inferior_target_data): Rename to ...
(thread_target_data): ... this.
(inferior_regcache_data): Rename to ...
(thread_regcache_data): ... this.
(set_inferior_regcache_data): Rename to ...
(set_thread_regcache_data): ... this.
* inferiors.c (inferior_target_data): Rename to ...
(thread_target_data): ... this.
(inferior_regcache_data): Rename to ...
(thread_regcache_data): ... this.
(set_inferior_regcache_data): Rename to ...
(set_thread_regcache_data): ... this.
(free_one_thread): Update.
* linux-low.h (get_thread_lwp): Update.
* regcache.c (get_thread_regcache): Update.
(regcache_invalidate_thread): Update.
(free_register_cache_thread): Update.
* win32-i386-low.c (update_debug_registers_callback): Update.
(win32_get_current_dr): Update.
* win32-low.c (thread_rec): Update.
(delete_thread_info): Update.
(continue_one_thread): Update.
(suspend_one_thread): Update.

7 years agoPR21994, readelf looping on verdefs
Alan Modra [Fri, 25 Aug 2017 02:11:06 +0000 (11:41 +0930)]
PR21994, readelf looping on verdefs

PR 21994
* readelf.c (process_version_sections <SHT_GNU_verdef>): Check
vd_aux and vda_next for sanity.  Delete "end".  Correct overflow
checks.
(process_version_sections <SHT_GNU_verneed>): Correct overflow
check.  Don't report invalid vna_next on overflow.  Do report
invalid vna_next on size less than aux info.

7 years agold: Add "--" after regexp
H.J. Lu [Fri, 25 Aug 2017 00:45:24 +0000 (17:45 -0700)]
ld: Add "--" after regexp

Add "--" after regexp to support dejagnu 1.4.4.

* testsuite/ld-elf/pr21903c.d: Remove '\' before --.
* testsuite/ld-elf/pr21903d.d: Likewise.
* testsuite/ld-elf/pr21903e.d: Likewise.
* testsuite/lib/ld-lib.exp (run_dump_test): Add "--" after
regexp.

7 years agoAutomatic date update in version.in
GDB Administrator [Fri, 25 Aug 2017 00:01:00 +0000 (00:01 +0000)]
Automatic date update in version.in

7 years agoRemove unused function set_inferior_target_data
Simon Marchi [Thu, 24 Aug 2017 21:34:33 +0000 (23:34 +0200)]
Remove unused function set_inferior_target_data

The inferior (thread) target data is always set through add_thread.

gdb/gdbserver/ChangeLog:

* inferiors.c (set_inferior_target_data): Remove.
* inferiors.h (set_inferior_target_data): Remove.

7 years agold: Replace regexp with string match
H.J. Lu [Thu, 24 Aug 2017 15:33:16 +0000 (08:33 -0700)]
ld: Replace regexp with string match

Replace regexp with string match to workaround dejagnu 1.4.4 which
complains:

ERROR: bad switch "-fPIE": must be -all, -about, -indices, -inline, -expanded, -line, -linestop, -lineanchor, -nocase, -start, or --

* testsuite/ld-i386/i386.exp (undefined_weak): Replace regexp
with string match.
* testsuite/ld-x86-64/x86-64.exp (undefined_weak): Likewise.

7 years agox86-64: Run pr22001-1b on x32
H.J. Lu [Thu, 24 Aug 2017 14:53:41 +0000 (07:53 -0700)]
x86-64: Run pr22001-1b on x32

Run pr22001-1b on x32 since R_X86_64_32S relocation can be turned into
dynamic R_X86_64_32 relocation which won't overflow on x32.

* testsuite/ld-x86-64/x86-64.exp: Run pr22001-1b on x32.

7 years agoDWARF-5 Fix DW_FORM_implicit_const
Jan Kratochvil [Thu, 24 Aug 2017 14:39:11 +0000 (16:39 +0200)]
DWARF-5 Fix DW_FORM_implicit_const

-gdwarf-4:
ptype logical
type = const char [2]
(gdb) PASS: gdb.base/constvars.exp: ptype logical

-gdwarf-5:
ptype logical
type = const char []
(gdb) FAIL: gdb.base/constvars.exp: ptype logical

 <2><2fc>: Abbrev Number: 1 (DW_TAG_variable)
    <2fd>   DW_AT_name        : (indirect string, offset: 0x2eb): logical
    <301>   DW_AT_decl_file   : 1

   1      DW_TAG_variable    [no children]
    DW_AT_name         DW_FORM_strp
    DW_AT_decl_file    DW_FORM_implicit_const: 1

During symbol reading, invalid attribute class or form for
'DW_FORM_implicit_const' in '(null)'.

gdb/ChangeLog
2017-08-24  Jan Kratochvil  <jan.kratochvil@redhat.com>

PR symtab/22003
* dwarf2read.c (dwarf2_const_value_attr, dump_die_shallow)
(dwarf2_get_attr_constant_value, dwarf2_fetch_constant_bytes)
(skip_form_bytes, attr_form_is_constant): Handle DW_FORM_implicit_const.

7 years agox86-64: Check relocations with -z nocopyreloc
H.J. Lu [Thu, 24 Aug 2017 13:34:19 +0000 (06:34 -0700)]
x86-64: Check relocations with -z nocopyreloc

On x86-64, when -z nocopyreloc is used to build executable, relocations
may overflow at run-time or may not be resolved without PIC.  This patch
checks these conditions and issues an error with suggestion for -fPIC.

bfd/

PR ld/22001
* elf64-x86-64.c (elf_x86_64_relocate_section): Check for
R_X86_64_PC32 relocation run-time overflow and unresolvable
R_X86_64_32S relocation with -z nocopyreloc.

ld/

PR ld/22001
* testsuite/ld-i386/i386.exp: Run -z nocopyreloc tests.
* testsuite/ld-x86-64/x86-64.exp: Likewise.
* ld/testsuite/ld-i386/pr22001-1a.c: New file.
* ld/testsuite/ld-i386/pr22001-1b.c: Likewise.
* ld/testsuite/ld-i386/pr22001-1c.S: Likewise.
* ld/testsuite/ld-x86-64/pr22001-1a.c: Likewise.
* ld/testsuite/ld-x86-64/pr22001-1a.err: Likewise.
* ld/testsuite/ld-x86-64/pr22001-1b.c: Likewise.
* ld/testsuite/ld-x86-64/pr22001-1b.err: Likewise.
* ld/testsuite/ld-x86-64/pr22001-1c.c: Likewise.

7 years agold: Early detection of orphans we know will be discarded
Andrew Burgess [Thu, 17 Aug 2017 10:29:04 +0000 (11:29 +0100)]
ld: Early detection of orphans we know will be discarded

When processing an orphan section we first call lang_place_orphans, this
function handles a few sections for which the behaviour is known COMMON
sections, or sections marked as SEC_EXCLUDE.

Any orphans that are not handled in lang_place_orphans are passed on to
ldlang_place_orphan, this is where we decide where to put the orphan,
and then call lang_add_section to perform the actual orphan placement.

We previously had a larger set of checks at the start of the function
lang_add_section to discard some sections that we _knew_ should not be
added into the output file, this was where .group sections (in a final
link) and .debug* sections (with --strip-debug) were dropped.

The problem with dropping these sections at the lang_add_section stage
is that a user might also be using --orphan-handling=error to prevent
orphans.  If they are then they should not be get errors about sections
that we know will be discarded, and which are not mentioned in the
linker script.

The solution proposed in this patch is to move the "will this section be
discarded" check into a separate function, and use this in
lang_place_orphans to have the early discard phase discard sections that
we know should not be included in the output file.

ld/ChangeLog:

PR 21961
* ldlang.c (lang_discard_section_p): New function.
(lang_add_section): Checks moved out into new function, which is
now called.
(lang_place_orphans): Call lang_discard_section_p instead of
duplicating some of the checks from lang_add_section.
* testsuite/ld-elf/orphan-11.d: New file.
* testsuite/ld-elf/orphan-11.ld: New file.
* testsuite/ld-elf/orphan-11.s: New file.
* testsuite/ld-elf/orphan-12.d: New file.
* testsuite/ld-elf/orphan-12.s: New file.

7 years agoRevert commit aab921adcb656e4eefcc7d0f14241f3d7504400e
H.J. Lu [Thu, 24 Aug 2017 10:33:42 +0000 (03:33 -0700)]
Revert commit aab921adcb656e4eefcc7d0f14241f3d7504400e

* elf32-i386.c (elf_i386_check_relocs): Revert the last change.
Undefined symbols may not have a type.
* elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.

7 years agoDWARF-5: Fix -fdebug-types-section
Jan Kratochvil [Thu, 24 Aug 2017 08:26:52 +0000 (10:26 +0200)]
DWARF-5: Fix -fdebug-types-section

GDB was now accessing as signatured_type memory allocated only by size of
dwarf2_per_cu_data.

gdb/ChangeLog
2017-08-24  Jan Kratochvil  <jan.kratochvil@redhat.com>

* dwarf2read.c (build_type_psymtabs_reader): New prototype.
(process_psymtab_comp_unit): Accept IS_DEBUG_TYPES.
(read_comp_units_from_section): New parameter abbrev_section, use
read_and_check_comp_unit_head, allocate signatured_type if needed.
(create_all_comp_units): Update read_comp_units_from_section caller.

7 years ago[PowerPC VLE] Add SPE2 and EFS2 instructions support
Alexander Fedotov [Wed, 23 Aug 2017 15:08:46 +0000 (18:08 +0300)]
[PowerPC VLE] Add SPE2 and EFS2 instructions support

include/
* opcode/ppc.h:
(spe2_opcodes, spe2_num_opcodes): New.
(PPC_OPCODE_SPE2): New define.
(PPC_OPCODE_EFS2): Likewise.
(SPE2_XOP): Likewise.
(SPE2_XOP_TO_SEG): Likewise.
opcodes/
* ppc-dis.c (ppc_mopt): Add PPC_OPCODE_SPE2 and
PPC_OPCODE_EFS2 flag to "e200z4" entry.
New entries efs2 and spe2.
Add PPC_OPCODE_SPE2 and PPC_OPCODE_EFS2 flag to "vle" entry.
(SPE2_OPCD_SEGS): New macro.
(spe2_opcd_indices): New.
(disassemble_init_powerpc): Handle SPE2 opcodes.
(lookup_spe2): New function.
(print_insn_powerpc): call lookup_spe2.
* ppc-opc.c (insert_evuimm1_ex0): New function.
(extract_evuimm1_ex0): Likewise.
(insert_evuimm_lt8): Likewise.
(extract_evuimm_lt8): Likewise.
(insert_off_spe2): Likewise.
(extract_off_spe2): Likewise.
(insert_Ddd): Likewise.
(extract_Ddd): Likewise.
(DD): New operand.
(EVUIMM_LT8): Likewise.
(EVUIMM_LT16): Adjust.
(MMMM): New operand.
(EVUIMM_1): Likewise.
(EVUIMM_1_EX0): Likewise.
(EVUIMM_2): Adjust.
(NNN): New operand.
(VX_OFF_SPE2): Likewise.
(BBB): Likewise.
(DDD): Likewise.
(VX_MASK_DDD): New mask.
(HH): New operand.
(VX_RA_CONST): New macro.
(VX_RA_CONST_MASK): Likewise.
(VX_RB_CONST): Likewise.
(VX_RB_CONST_MASK): Likewise.
(VX_OFF_SPE2_MASK): Likewise.
(VX_SPE_CRFD): Likewise.
(VX_SPE_CRFD_MASK VX): Likewise.
(VX_SPE2_CLR): Likewise.
(VX_SPE2_CLR_MASK): Likewise.
(VX_SPE2_SPLATB): Likewise.
(VX_SPE2_SPLATB_MASK): Likewise.
(VX_SPE2_OCTET): Likewise.
(VX_SPE2_OCTET_MASK): Likewise.
(VX_SPE2_DDHH): Likewise.
(VX_SPE2_DDHH_MASK): Likewise.
(VX_SPE2_HH): Likewise.
(VX_SPE2_HH_MASK): Likewise.
(VX_SPE2_EVMAR): Likewise.
(VX_SPE2_EVMAR_MASK): Likewise.
(PPCSPE2): Likewise.
(PPCEFS2): Likewise.
(vle_opcodes): Add EFS2 and some missing SPE opcodes.
(powerpc_macros): Map old SPE instructions have new names
with the same opcodes. Add SPE2 instructions which just are
mapped to SPE2.
(spe2_opcodes): Add SPE2 opcodes.
gas/
* config/tc-ppc.c:
(md_parse_option): Add mspe2 switch.
(md_show_usage): Document -mspe2.
(ppc_setup_opcodes): Handle spe2_opcodes.
* doc/as.texinfo: Document -mspe2.
* doc/c-ppc.texi: Likewise.
* testsuite/gas/ppc/efs.d: New file.
* testsuite/gas/ppc/efs.s: Likewise.
* testsuite/gas/ppc/efs2.d: Likewise.
* testsuite/gas/ppc/efs2.s: Likewise.
* testsuite/gas/ppc/ppc.exp: Run new tests.
* testsuite/gas/ppc/spe.d: New file.
* testsuite/gas/ppc/spe.s: Likewise.
* testsuite/gas/ppc/spe2-checks.d: Likewise.
* testsuite/gas/ppc/spe2-checks.l: Likewise.
* testsuite/gas/ppc/spe2-checks.s: Likewise.
* testsuite/gas/ppc/spe2.d: Likewise.
* testsuite/gas/ppc/spe2.s: Likewise.
* testsuite/gas/ppc/spe_ambiguous.d: Likewise.
* testsuite/gas/ppc/spe_ambiguous.s: Likewise.

7 years agoTest undefined symbols in shared libraries
Alan Modra [Wed, 23 Aug 2017 23:56:37 +0000 (09:26 +0930)]
Test undefined symbols in shared libraries

git commit 46434633f9 said
    Make undefined symbols in allocate_dynrelocs dynamic

    ..if they have dynamic relocs.  An undefined symbol in a PIC object
    that finds no definition ought to become dynamic in order to support
    --allow-shlib-undefined, but there is nothing in the generic ELF
    linker code to do this if the reference isn't via the GOT or PLT.  (An
    initialized function pointer is an example.)  So it falls to backend
    code to ensure the symbol is made dynamic.

The above isn't true.  Undefined symbols are indeed made dynamic for
shared libraries.  Undefined symbols are not automatically made
dynamic in executables, and it was the PIE case that triggered an
internal consistency assertion on powerpc64.  I guess I could have
jumped the other way when fixing PR21988, and not created a dynamic
reloc.  Either way, it doesn't matter a great deal.  We're going to
get an error on strong undefined symbols in an executable anyway, and
broken binaries if you try to use --unresolved-symbols=ignore-all to
disable the error.

* testsuite/ld-undefined/fundef.s: New test.
* testsuite/ld-undefined/undefined.exp: Test that undefined
symbols in shared libraries are made dynamic.

7 years agoAutomatic date update in version.in
GDB Administrator [Thu, 24 Aug 2017 00:00:38 +0000 (00:00 +0000)]
Automatic date update in version.in

7 years agoUpdate PR ld/21903 tests for dejagnu 1.4.4
H.J. Lu [Wed, 23 Aug 2017 23:01:22 +0000 (16:01 -0700)]
Update PR ld/21903 tests for dejagnu 1.4.4

Add '\' before -- to workaround dejagnu 1.4.4 which complains:

ERROR: bad switch "--no-define-common may not be used without -shared":...

* testsuite/ld-elf/pr21903c.d: Add '\' before --.
* testsuite/ld-elf/pr21903d.d: Likewise.
* testsuite/ld-elf/pr21903e.d: Likewise.

7 years agoFix PR remote/21852: Remote run without specifying a local binary crashes GDB
Sergio Durigan Junior [Tue, 22 Aug 2017 12:52:44 +0000 (08:52 -0400)]
Fix PR remote/21852: Remote run without specifying a local binary crashes GDB

There is an assertion that is triggering when we start GDB and
instruct it to debug a remote inferior, but don't provide a local
binary, like:

  ./gdb -nx -q --data-directory=data-directory -ex "tar ext :1234" \
    -ex "set remote exec-file /bin/ls" -ex r

In this case, when calling exec_file_locate_attach to locate the
inferior, GDB is incorrectly resetting the breakpoints without a
thread/inferior even running, which causes an assertion to be
triggered:

  binutils-gdb/gdb/thread.c:1609: internal-error: scoped_restore_current_thread::scoped_restore_current_thread(): Assertion `tp != NULL' failed.
  A problem internal to GDB has been detected,
  further debugging may prove unreliable.
  Quit this debugging session? (y or n)

This happens because add_current_inferior_and_thread (on remote.c) is
breaking an invariant: making inferior_ptid point to a non-existing
thread and then calling common code, which in this case is
breakpoint_re_set.  The fix is to make sure that inferior_ptid points
to null_ptid if there is no thread present.

A testcase is provided.  Regtested on buildbot.

gdb/ChangeLog:
2017-08-23  Pedro Alves  <palves@redhat.com>

PR remote/21852
* remote.c (add_current_inferior_and_thread): Set inferior_ptid
to null_ptid and switch to thread without reading the registers
after adding the inferior.

gdb/testsuite/ChangeLog:
2017-08-23  Sergio Durigan Junior  <sergiodj@redhat.com>

PR remote/21852
* gdb.server/normal.c: New file, copied from gdb.base.
* gdb.server/run-without-local-binary.exp: New file.

7 years agox86-64: Properly report output type when PIC is needed
H.J. Lu [Wed, 23 Aug 2017 20:40:49 +0000 (13:40 -0700)]
x86-64: Properly report output type when PIC is needed

-fPIC may be needed to compile PIE or PDE objects, not just shared
object.

bfd/

* elf64-x86-64.c (elf_x86_64_need_pic): Add an argument for
bfd_link_info.  Report shared, PIE or PDE object based on
bfd_link_info.
(elf_x86_64_check_relocs): Update elf_x86_64_need_pic call.
(elf_x86_64_relocate_section): Likewise.

ld/

* testsuite/ld-x86-64/pie2.d: Updated.
* testsuite/ld-x86-64/pr19719.d: Likewise.
* testsuite/ld-x86-64/pr19807-2a.d: Likewise.
* testsuite/ld-x86-64/pr19969.d: Likewise.

7 years agox86: Increment PLT count only for function symbols
H.J. Lu [Wed, 23 Aug 2017 20:12:04 +0000 (13:12 -0700)]
x86: Increment PLT count only for function symbols

Since PLT entry is needed only for function symbols, increment PLT count
only for function symbols.

* elf32-i386.c (elf_i386_check_relocs): Increment PLT count only
for function symbols.
* elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.

7 years agox86: Clear extern_protected_data for GNU_PROPERTY_NO_COPY_ON_PROTECTED
H.J. Lu [Wed, 23 Aug 2017 17:15:39 +0000 (10:15 -0700)]
x86: Clear extern_protected_data for GNU_PROPERTY_NO_COPY_ON_PROTECTED

When GNU_PROPERTY_NO_COPY_ON_PROTECTED is set, it indicates that there
are no copy relocations against protected data symbols.  When linker
sees GNU_PROPERTY_NO_COPY_ON_PROTECTED on any input relocatable file,
it sets extern_protected_data to FALSE.

bfd/

* elf32-i386.c (elf_i386_link_setup_gnu_properties): Set
extern_protected_data to FALSE if GNU_PROPERTY_NO_COPY_ON_PROTECTED
is set on any input relocatable file.
* elf64-x86-64.c (elf_x86_64_link_setup_gnu_properties): Likewise.

ld/

* testsuite/ld-i386/i386.exp: Run protected7.
* testsuite/ld-i386/protected7.d: New file.
* testsuite/ld-i386/protected7.s: Likewise.
* testsuite/ld-x86-64/protected8.d: Likewise.
* testsuite/ld-x86-64/protected8.s: Likewise.
* testsuite/ld-x86-64/x86-64.exp: Run protected8.

7 years agocompile: Add 'set compile-gcc'
Jan Kratochvil [Tue, 21 Feb 2017 21:32:56 +0000 (13:32 -0800)]
compile: Add 'set compile-gcc'

As discussed in
How to use compile & execute function in GDB
https://sourceware.org/ml/gdb/2015-04/msg00026.html

GDB currently searches for compilers on /usr/bin/ARCH-OS-gcc and
chooses a match from there.  However, it is not currently possible for
the user to override which compiler to use.  This is what this patch
implements.

It is also a sync between GCC's and GDB's interfaces.

gdb/ChangeLog
2017-08-23  Jan Kratochvil  <jan.kratochvil@redhat.com>

* NEWS (Changes since GDB 7.9): Add set compile-gcc and show
compile-gcc.
* compile/compile.c (compile_gcc, show_compile_gcc): New.
(compile_to_object): Implement compile_gcc.
(_initialize_compile): Install "set compile-gcc".  Initialize
compile_gcc.

gdb/doc/ChangeLog
2017-08-23  Jan Kratochvil  <jan.kratochvil@redhat.com>

* gdb.texinfo (Compiling and Injecting Code): Add to subsection
"Compiler search for the compile command" descriptions of set
compile-gcc and show compile-gcc.

include/ChangeLog
2017-08-23  Jan Kratochvil  <jan.kratochvil@redhat.com>

* gcc-interface.h (enum gcc_base_api_version): Update comment for
GCC_FE_VERSION_1.
(struct gcc_base_vtable): Rename set_arguments to set_arguments_v0.
Add set_arguments, set_triplet_regexp and set_driver_filename.

7 years agocompile: set debug compile: Display GCC driver filename
Jan Kratochvil [Tue, 21 Feb 2017 21:32:55 +0000 (13:32 -0800)]
compile: set debug compile: Display GCC driver filename

As discussed in
How to use compile & execute function in GDB
https://sourceware.org/ml/gdb/2015-04/msg00026.html

GDB currently searches for compilers on /usr/bin/ARCH-OS-gcc and
chooses a match from there.  However, it is not currently possible for
the user to display which compiler was selected.  Up until now, GDB's
compiler interface was not up-to-date with GCC's one, which means that
it wasn't possible to obtain this information.  This patch implements
the mechanisms necessary for that.

gdb/ChangeLog
2017-08-23  Jan Kratochvil  <jan.kratochvil@redhat.com>

* compile/compile.c (compile_to_object): Conditionally call
set_verbose.  Conditionally call compile or compile_v0.

include/ChangeLog
2017-08-23  Jan Kratochvil  <jan.kratochvil@redhat.com>

* gcc-interface.h (enum gcc_base_api_version): Add
GCC_FE_VERSION_1.
(struct gcc_base_vtable): Rename compile to compile_v0.  Update
comment for compile.  New methods set_verbose and compile.

7 years agogas: enable PC-relative diff relocations on sparc64
James Clarke [Wed, 23 Aug 2017 12:46:45 +0000 (05:46 -0700)]
gas: enable PC-relative diff relocations on sparc64

gas/
* config/tc-sparc.c (tc_gen_reloc): Convert BFD_RELOC_8/16/32/64
into the corresponding BFD_RELOC_8/16/32/64_PCREL relocation
when requested.
* config/tc-sparc.h (DIFF_EXPR_OK): Define to enable PC-relative
diff relocations.
(TC_FORCE_RELOCATION_SUB_LOCAL): Define to ensure only supported
relocations are made PC-relative.
(CFI_DIFF_EXPR_OK): Define to 0 to force BFD_RELOC_32_PCREL to
be used directly, since otherwise BFD_RELOC_SPARC_UA32 will be
used for .eh_frame which cannot in general be converted to a
BFD_RELOC_32_PCREL due to alignment requirements.

7 years agoppc-opc.c formatting
Alan Modra [Wed, 23 Aug 2017 10:19:29 +0000 (19:49 +0930)]
ppc-opc.c formatting

* ppc-opc.c: Formatting and comment fixes.  Move insert and
extract functions earlier, deleting forward declarations.
(insert_nbi, insert_raq, insert_rbx): Expand use of RT_MASK and
RA_MASK.

7 years agoPR21990, Integer overflow in process_version_sections
Alan Modra [Wed, 23 Aug 2017 06:12:12 +0000 (15:42 +0930)]
PR21990, Integer overflow in process_version_sections

This tidies some of the overflow checking when processing verneed
and verdef sections.

PR 21990
* readelf.c (process_version_sections <SHT_GNU_verneed>): Check
for invalid vn_next field before adding to idx.  Use unsigned
long for index vars.  Move index checks.
<SHT_GNU_verdef>: Likewise for vd_next.

7 years agogdb: SPARC ADI support
Weimin Pan [Wed, 23 Aug 2017 08:57:37 +0000 (10:57 +0200)]
gdb: SPARC ADI support

The M7 processor supports an Application Data Integrity (ADI) feature
that detects invalid data accesses.  When software allocates data, it
chooses a 4-bit version number, sets the version in the upper 4 bits
of the 64-bit pointer to that data, and stores the 4-bit version in
every cacheline of the object.  Hardware saves the latter in spare
bits in the cache and memory hierarchy. On each load and store, the
processor compares the upper 4 VA (virtual address) bits to the
cacheline's version. If there is a mismatch, the processor generates a
version mismatch trap which can be either precise or disrupting.  The
trap is an error condition which the kernel delivers to the process as
a SIGSEGV signal.

The upper 4 bits of the VA represent a version and are not part of the
true address.  The processor clears these bits and sign extends bit 59
to generate the true address.

Note that 32-bit applications cannot use ADI.

This patch adds ADI support in gdb which allows the user to examine
current version tags and assign new version tags in the program.  It
also catches and reports precise or disrupting memory corruption
traps.

gdb/ChangeLog:
2017-08-07  Weimin Pan  <weimin.pan@oracle.com>

* sparc64-tdep.h: (adi_normalize_address): New export.
* sparc-nat.h: (open_adi_tag_fd): New export.
* sparc64-linux-nat.c: (open_adi_tag_fd): New function.
* sparc64-linux-tdep.c:
(SEGV_ACCADI, SEGV_ADIDERR, SEGV_ADIPERR) New defines.
(sparc64_linux_handle_segmentation_fault): New function.
(sparc64_linux_init_abi): Register
sparc64_linux_handle_segmentation_fault
* sparc64-tdep.c: Include cli-utils.h,gdbcmd.h,auxv.h.
(sparc64_addr_bits_remove): New function.
(sparc64_init_abi): Register sparc64_addr_bits_remove.
(MAX_PROC_NAME_SIZE): New macro.
(AT_ADI_BLKSZ, AT_ADI_NBITS, AT_ADI_UEONADI) New defines.
(sparc64adilist): New variable.
(adi_proc_list): New variable.
(find_adi_info): New function.
(add_adi_info): New function.
(get_adi_info_proc): New function.
(get_adi_info): New function.
(info_adi_command): New function.
(read_maps_entry): New function.
(adi_available): New function.
(adi_normalize_address): New function.
(adi_align_address): New function.
(adi_convert_byte_count): New function.
(adi_tag_fd): New function.
(adi_is_addr_mapped): New function.
(adi_read_versions): New function.
(adi_write_versions): New function.
(adi_print_versions): New function.
(do_examine): New function.
(do_assign): New function.
(adi_examine_command): New function.
(adi_assign_command): New function.
(_initialize_sparc64_adi_tdep): New function.

gdb/doc/ChangeLog:
2017-08-07  Weimin Pan  <weimin.pan@oracle.com>

* gdb.texinfo (Architectures): Add new Sparc64 section to document
ADI support.
* NEWS: Add "adi examine" and "adi assign" commands.

gdb/testsuite/ChangeLog:
2017-08-07  Weimin Pan  <weimin.pan@oracle.com>

* gdb.arch/sparc64-adi.exp: New file.
* gdb.arch/sparc64-adi.c: New file.

7 years agoAutomatic date update in version.in
GDB Administrator [Wed, 23 Aug 2017 00:00:48 +0000 (00:00 +0000)]
Automatic date update in version.in

7 years agoRemove pr19161 test hppa xfail
Alan Modra [Tue, 22 Aug 2017 23:28:42 +0000 (08:58 +0930)]
Remove pr19161 test hppa xfail

* testsuite/ld-gc/pr19161.d: Don't xfail hppa.

7 years agoMake undefined symbols in allocate_dynrelocs dynamic
Alan Modra [Tue, 22 Aug 2017 23:28:08 +0000 (08:58 +0930)]
Make undefined symbols in allocate_dynrelocs dynamic

..if they have dynamic relocs.  An undefined symbol in a PIC object
that finds no definition ought to become dynamic in order to support
--allow-shlib-undefined, but there is nothing in the generic ELF
linker code to do this if the reference isn't via the GOT or PLT.  (An
initialized function pointer is an example.)  So it falls to backend
code to ensure the symbol is made dynamic.

PR 21988
* elf64-ppc.c (ensure_undef_dynamic): Rename from
ensure_undefweak_dynamic.  Handle undefined too.
* elf32-ppc.c (ensure_undef_dynamic): Likewise.
* elf32-hppa.c (ensure_undef_dynamic): Likewise.
(allocate_dynrelocs): Discard undefined non-default visibility
relocs first.  Make undefined syms dynamic.  Tidy goto.

7 years agoAssemble powerpc vle lsp tests with -a32
Alan Modra [Tue, 22 Aug 2017 13:00:18 +0000 (22:30 +0930)]
Assemble powerpc vle lsp tests with -a32

-mvle isn't a valid 64-bit option.

* testsuite/gas/ppc/lsp-checks.d: Assemble with -a32.
* testsuite/gas/ppc/lsp.d: Likewise.

7 years agoRename some command functions
Simon Marchi [Tue, 22 Aug 2017 20:09:55 +0000 (22:09 +0200)]
Rename some command functions

This patch renames a few functions implementing CLI commands to follow
the style <command-name>_command, so that they are easier to search for.

gdb/ChangeLog:

* breakpoint.c (breakpoints_info): Rename to ...
(info_breakpoints_command): ... this.
(watchpoints_info): Rename to ...
(info_watchpoints_command): ... this.
(tracepoints_info): Rename to ...
(info_tracepoints_command): ... this.
(_initialize_breakpoint): Adjust.
* dcache.c (dcache_info): Rename to ...
(info_display_command): ... this.
(_initialize_dcache): Adjust.
* frame.h (args_info): Rename to ...
(info_args_command): ... this.
(locals_info): Rename to ...
(info_locals_command): ... this.
* infcmd.c (nofp_registers_info): Rename to ...
(info_registers_command): ... this.
(float_info): Rename to ...
(info_float_command): ... this.
(program_info): Rename to ...
(info_program_command): ... this.
(all_registers_info): Rename to ...
(info_all_registers_command): ... this.
(vector_info): Rename to ...
(info_vector_command): ... this.
(float_info): Rename to ...
(info_float_command): ... this.
(_initialize_infcmd): Adjust.
* inferior.h (term_info): Rename to ...
(info_terminal_command): ... this.
* inflow.c (term_info): Rename to ...
(info_terminal_command): ... this.
(_initialize_inflow): Adjust.
* infrun.c (signals_info): Rename to ...
(info_signals_command): ... this.
(_initialize_infrun): Adjust.
* objc-lang.c (classes_info): Rename to ...
(info_classes_command): ... this.
(selectors_info): Rename to ...
(info_selectors_command): ... this.
(_initialize_objc_language): Adjust.
* printcmd.c (sym_info): Rename to ...
(info_symbol_command): ... this.
(address_info): Rename to ...
(info_address_command): ... this.
(display_info): Rename to ...
(info_display_command): ... this.
(_initialize_printcmd): Adjust.
* reverse.c (bookmarks_info): Rename to ...
(info_breakpoints_command): ... this.
(_initialize_reverse): Adjust.
* ser-go32.c (dos_info): Rename to ...
(info_serial_command): ... this.
(_initialize_ser_dos): Adjust.
* skip.c (skip_info): Rename to ...
(info_skip_command): ... this.
(_initialize_step_skip): Adjust.
* source.c (line_info): Rename to ...
(info_line_command): ... this.
(source_info): Rename to ...
(info_source_command)
* stack.c (frame_info): Rename to ...
(info_frame_command): ... this.
(locals_info): Rename to ...
(info_locals_command): ... this.
(args_info): Rename to ...
(info_args_command): ... this.
(_initialize_stack): Adjust.
* symtab.c (sources_info): Rename to ...
(info_sources_command): ... this.
(variables_info): Rename to ...
(info_variables_command): ... this.
(functions_info): Rename to ...
(info_functions_command): ... this.
(types_info): Rename to ...
(info_types_command): ... this.
(_initialize_symtab): Adjust.
* target.c (target_info): Rename to ...
(info_target_command): ... this.
(initialize_targets): Adjust.
* tracepoint.c (tvariables_info): Rename to ...
(info_tvariables_command): ... this.
(scope_info): Rename to ...
(info_scope_command): ... this.
(trace_dump_actions): Adjust.
(_initialize_tracepoint): Adjust.

7 years agoUpdate PR ld/21964 tests
H.J. Lu [Tue, 22 Aug 2017 16:41:21 +0000 (09:41 -0700)]
Update PR ld/21964 tests

* testsuite/ld-elf/pr21964-1a.c (foo): Renamed to ...
(foo1): This.
* testsuite/ld-elf/pr21964-1b.c: Rewrite.
* testsuite/ld-elf/pr21964-1c.c: New file.
* testsuite/ld-elf/pr21964-2c.c: Likewise.
* testsuite/ld-elf/pr21964-2a.c (foo): Renamed to ...
(foo1): This.
* testsuite/ld-elf/pr21964-2b.c: Rewrite.
* testsuite/ld-elf/shared.exp: Update PR ld/21964 tests.

7 years agoRISC-V: Mark "c.nop" as an alias
Palmer Dabbelt [Tue, 1 Aug 2017 21:13:05 +0000 (14:13 -0700)]
RISC-V: Mark "c.nop" as an alias

This fixes "-M noaliases" disassembly for "c.nop", which is an alias for
"c.addi x0, 0".

opcodes/ChangeLog

2017-08-01  Palmer Dabbelt  <palmer@dabbelt.com>

        * riscv-opc.c (riscv_opcodes): Mark "c.nop" as an alias.

7 years agoAdd test for "List actual code around more than one location" change
Pedro Alves [Tue, 22 Aug 2017 13:51:18 +0000 (14:51 +0100)]
Add test for "List actual code around more than one location" change

This adds a test for the "list" command change done in 0d999a6ef0f9
("List actual code around more than one location").

gdb/ChangeLog:
2017-08-22  Pedro Alves  <palves@redhat.com>

* gdb.cp/overload.exp (line_range_pattern): New procedure.
(top level): Add "list all overloads" tests.

7 years agoChange install_breakpoint to take a std::unique_ptr
Tom Tromey [Sun, 20 Aug 2017 04:26:20 +0000 (22:26 -0600)]
Change install_breakpoint to take a std::unique_ptr

This changes install_breakpoint to take a std::unique_ptr rvalue-ref
argument.  This makes it clear that install_breakpoint takes ownership
of the pointer, and prevents bugs like the one fixed by the previous
patch.

ChangeLog
2017-08-22  Tom Tromey  <tom@tromey.com>

* breakpoint.h (install_breakpoint): Update.
* breakpoint.c (add_solib_catchpoint): Update.
(install_breakpoint): Change argument to a std::unique_ptr.
(create_fork_vfork_event_catchpoint): Use std::unique_ptr.
(create_breakpoint_sal, create_breakpoint): Update.
(watch_command_1, catch_exec_command_1)
(strace_marker_create_breakpoints_sal): Use std::unique_ptr.
(add_to_breakpoint_chain): Change argument to a std::unique_ptr.
Return the breakpoint.
(set_raw_breakpoint_without_location, set_raw_breakpoint)
(new_single_step_breakpoint): Update.
* break-catch-throw.c (handle_gnu_v3_exceptions): Use
std::unique_ptr.
* break-catch-syscall.c (create_syscall_event_catchpoint): Use
std::unique_ptr.
* break-catch-sig.c (create_signal_catchpoint): Use
std::unique_ptr.
* ada-lang.c (create_ada_exception_catchpoint): Use
std::unique_ptr.

7 years agoFix erroneous cleanup use in add_solib_catchpoint
Tom Tromey [Sun, 20 Aug 2017 04:15:30 +0000 (22:15 -0600)]
Fix erroneous cleanup use in add_solib_catchpoint

I happened to notice that add_solib_catchpoint allocated the new
catchpoint with "new" but installed a cleanup using "xfree".  This
patch fixes the bug by changing the function to use std::unique_ptr
instead.

ChangeLog
2017-08-22  Tom Tromey  <tom@tromey.com>

* breakpoint.c (add_solib_catchpoint): Use std::unique_ptr.

7 years agoChange psymtab_search_name to return a unique_xmalloc_ptr
Tom Tromey [Sat, 5 Aug 2017 16:40:15 +0000 (10:40 -0600)]
Change psymtab_search_name to return a unique_xmalloc_ptr

This changes psymtab_search_name to return a unique_xmalloc_ptr and
fixes up its one caller.  This allows the removal of some cleanups.

ChangeLog
2017-08-22  Tom Tromey  <tom@tromey.com>

* psymtab.c (psymtab_search_name): Return a unique_xmalloc_ptr.
(lookup_partial_symbol): Update.

7 years agoChange rewrite_source_path to return a unique_xmalloc_ptr
Tom Tromey [Sat, 5 Aug 2017 16:29:56 +0000 (10:29 -0600)]
Change rewrite_source_path to return a unique_xmalloc_ptr

This changes rewrite_source_path to return a unique_xmalloc_ptr and
fixes up the callers.  This allows removing some cleanups.

ChangeLog
2017-08-22  Tom Tromey  <tom@tromey.com>

* source.h (rewrite_source_path): Return a unique_xmalloc_ptr.
* source.c (rewrite_source_path): Return a unique_xmalloc_ptr.
(find_and_open_source, symtab_to_fullname): Update.
* psymtab.c (psymtab_to_fullname): Update.

7 years agoChange gdb_realpath to return a unique_xmalloc_ptr
Tom Tromey [Thu, 3 Aug 2017 22:53:22 +0000 (16:53 -0600)]
Change gdb_realpath to return a unique_xmalloc_ptr

This changes gdb_realpath to return a unique_xmalloc_ptr and fixes up
the callers.  This allows removing some cleanups.  This change by
itself caused xfullpath.exp to fail; and attempting to fix that ran
into various problems (like .get() being optimized out); so this patch
also rewrites xfullpath.exp to be a C++ selftest instead.

ChangeLog
2017-08-22  Tom Tromey  <tom@tromey.com>

* exec.c (exec_file_attach): Update.
* linux-thread-db.c (try_thread_db_load): Update.
* guile/scm-safe-call.c (gdbscm_safe_source_script): Update.
* utils.c (gdb_realpath): Change return type.
(gdb_realpath_keepfile): Update.
(gdb_realpath_check_trailer, gdb_realpath_tests): New functions.
(_initialize_utils): Register the new self test.
* source.c (openp): Update.
(find_and_open_source): Update.
* nto-tdep.c (nto_find_and_open_solib): Update.
* main.c (set_gdb_data_directory): Update.
(captured_main_1): Update.
* dwarf2read.c (dwarf2_get_dwz_file): Update
(dw2_map_symbol_filenames): Update.
* auto-load.c (auto_load_safe_path_vec_update): Update.
(filename_is_in_auto_load_safe_path_vec): Change type of
"filename_realp".
(auto_load_objfile_script): Update.
(file_is_auto_load_safe): Update.  Use std::string.
* utils.h (gdb_realpath): Return a gdb::unique_xmalloc_ptr.

testsuite/ChangeLog
2017-08-22  Tom Tromey  <tom@tromey.com>

* gdb.gdb/xfullpath.exp: Remove.

7 years agoChange gdb_realpath_keepfile to return a unique_xmalloc_ptr
Tom Tromey [Thu, 3 Aug 2017 22:34:56 +0000 (16:34 -0600)]
Change gdb_realpath_keepfile to return a unique_xmalloc_ptr

This changes gdb_realpath_keepfile to return a unique_xmalloc_ptr, and
fixes up the callers.

ChangeLog
2017-08-22  Tom Tromey  <tom@tromey.com>

* utils.c (gdb_realpath_keepfile): Return a
gdb::unique_xmalloc_ptr.
* exec.c (exec_file_attach): Update.
* utils.h (gdb_realpath_keepfile): Return a
gdb::unique_xmalloc_ptr.

7 years agoChange gdb_abspath to return a unique_xmalloc_ptr
Tom Tromey [Thu, 3 Aug 2017 22:32:14 +0000 (16:32 -0600)]
Change gdb_abspath to return a unique_xmalloc_ptr

This changes gdb_abspath to return a unique_xmalloc_ptr, and fixes up
the callers.  This allows the removal of a cleanup, and also puts
ownership rules into the API, where they belong.

ChangeLog
2017-08-22  Tom Tromey  <tom@tromey.com>

* compile/compile.c (compile_file_command): Use
gdb::unique_xmalloc_ptr, std::string.
* utils.c (gdb_abspath): Change return type.
* source.c (openp): Update.
* objfiles.c (allocate_objfile): Update.
* main.c (set_gdb_data_directory): Update.
* utils.h (gdb_abspath): Return a gdb::unique_xmalloc_ptr.

7 years agoList actual code around more than one location
Zhouyi Zhou [Tue, 22 Aug 2017 14:32:19 +0000 (15:32 +0100)]
List actual code around more than one location

With the following C++ code:
 int bar() { return 0;}
 int bar(int) { return 0; }

GDB behaves as:
 (gdb) list bar
  file: "overload.cc", line number: 1
  file: "overload.cc", line number: 2

It would be better for GDB to list the actual code around those two
locations, not just print the location.  Like:

 (gdb) list bar
 file: "overload.cc", line number: 1
 1       int bar() { return 0;}
 2       int bar(int) { return 0; }
 file: "overload.cc", line number: 2
 1       int bar() { return 0;}
 2       int bar(int) { return 0; }

That's what this this commit implements.

Tested on x86-64 GNU/Linux.

gdb/ChangeLog:
2017-08-22  Zhouyi Zhou  <zhouzhouyi@gmail.com>

* cli-cmds.c (list_commands): List actual code around more than
one location.

7 years agoUse an array type (lwpid_t[]) for the array of lwp IDs.
John Baldwin [Mon, 21 Aug 2017 16:35:25 +0000 (09:35 -0700)]
Use an array type (lwpid_t[]) for the array of lwp IDs.

gdb/ChangeLog:

* fbsd-nat.c (fbsd_add_threads): Use array type for `lwps'.

7 years agoCorrect earlier ChangeLog entry for fbsd_add_threads.
John Baldwin [Mon, 21 Aug 2017 16:33:13 +0000 (09:33 -0700)]
Correct earlier ChangeLog entry for fbsd_add_threads.

7 years agoMake __start/__stop symbols protected visibility
Alan Modra [Mon, 21 Aug 2017 03:58:06 +0000 (13:28 +0930)]
Make __start/__stop symbols protected visibility

They can't be hidden visibility since apparently people use dlsym to
look them up.

bfd/
PR ld/21964
* elf-bfd.h (SYMBOLIC_BIND): Return TRUE for __start/__stop symbols.
* elflink.c (bfd_elf_define_start_stop): Rewrite.
ld/
PR ld/21964
* testsuite/ld-elf/pr21562a.d: Update for changed start/stop symbols.
* testsuite/ld-elf/pr21562b.d: Likewise.
* testsuite/ld-elf/pr21562c.d: Likewise.
* testsuite/ld-elf/pr21562d.d: Likewise.
* testsuite/ld-elf/pr21562e.d: Likewise.
* testsuite/ld-elf/pr21562f.d: Likewise.
* testsuite/ld-elf/pr21562g.d: Likewise.
* testsuite/ld-elf/pr21562h.d: Likewise.
* testsuite/ld-elf/pr21562i.d: Likewise.
* testsuite/ld-elf/pr21562j.d: Likewise.
* testsuite/ld-elf/pr21562k.d: Likewise.
* testsuite/ld-elf/pr21562l.d: Likewise.
* testsuite/ld-elf/pr21562m.d: Likewise.
* testsuite/ld-elf/pr21562n.d: Likewise.
* testsuite/ld-elf/sizeofa.d: Likewise.
* testsuite/ld-elf/sizeofb.d: Likewise.
* testsuite/ld-elf/startofa.d: Likewise.
* testsuite/ld-elf/startofb.d: Likewise.
* testsuite/ld-gc/pr20022.d: Likewise.
* testsuite/ld-gc/start.d: Likewise.
* testsuite/ld-elf/pr21964-1a.c: New file.
* testsuite/ld-elf/pr21964-1b.c: New file.
* testsuite/ld-elf/pr21964-2a.c: New file.
* testsuite/ld-elf/pr21964-2b.c: New file.
* testsuite/ld-elf/shared.exp: Run PR ld/21964 tests.

7 years ago[PowerPC VLE] Add LSP (Lightweight Signal Processing) instruction support
Alexander Fedotov [Mon, 21 Aug 2017 12:45:59 +0000 (15:45 +0300)]
[PowerPC VLE] Add LSP (Lightweight Signal Processing) instruction support

include/
* opcode/ppc.h (PPC_OPCODE_LSP): New define.
opcodes/
* ppc-opc.c (insert_evuimm2_ex0): New function.
(extract_evuimm2_ex0): Likewise.
(insert_evuimm4_ex0): Likewise.
(extract_evuimm4_ex0): Likewise.
(insert_evuimm8_ex0): Likewise.
(extract_evuimm8_ex0): Likewise.
(insert_evuimm_lt16): Likewise.
(extract_evuimm_lt16): Likewise.
(insert_rD_rS_even): Likewise.
(extract_rD_rS_even): Likewise.
(insert_off_lsp): Likewise.
(extract_off_lsp): Likewise.
(RD_EVEN): New operand.
(RS_EVEN): Likewise.
(RSQ): Adjust.
(EVUIMM_LT16): New operand.
(HTM_SI): Adjust.
(EVUIMM_2_EX0): New operand.
(EVUIMM_4): Adjust.
(EVUIMM_4_EX0): New operand.
(EVUIMM_8): Adjust.
(EVUIMM_8_EX0): New operand.
(WS): Adjust.
(VX_OFF): New operand.
(VX_LSP): New macro.
(VX_LSP_MASK): Likewise.
(VX_LSP_OFF_MASK): Likewise.
(PPC_OPCODE_LSP): Likewise.
(vle_opcodes): Add LSP opcodes.
* ppc-dis.c (ppc_mopt): Add PPC_OPCODE_LSP flag to "vle" entry.
gas/
* testsuite/gas/ppc/lsp-checks.d,
* testsuite/gas/ppc/lsp-checks.l,
* testsuite/gas/ppc/lsp-checks.s: New test.
* testsuite/gas/ppc/lsp.d,
* testsuite/gas/ppc/lsp.s: New test.
* testsuite/gas/ppc/ppc.exp: Run new tests.

7 years agoHandle function aliases better (PR gdb/19487, errno printing)
Pedro Alves [Mon, 21 Aug 2017 10:34:32 +0000 (11:34 +0100)]
Handle function aliases better (PR gdb/19487, errno printing)

(Ref: https://sourceware.org/ml/gdb/2017-06/msg00048.html)

This patch improves GDB support for function aliases defined with
__attribute__ alias.  For example, in the test added by this commit,
there is no reference to "func_alias" in the debug info at all, only
to "func"'s definition:

 $ nm  ./testsuite/outputs/gdb.base/symbol-alias/symbol-alias  | grep " func"
 00000000004005ae t func
 00000000004005ae T func_alias

 $ readelf -w ./testsuite/outputs/gdb.base/symbol-alias/symbol-alias | grep func -B 1 -A 8
 <1><db>: Abbrev Number: 5 (DW_TAG_subprogram)
    <dc>   DW_AT_name        : (indirect string, offset: 0x111): func
    <e0>   DW_AT_decl_file   : 1
    <e1>   DW_AT_decl_line   : 27
    <e2>   DW_AT_prototyped  : 1
    <e2>   DW_AT_type        : <0xf8>
    <e6>   DW_AT_low_pc      : 0x4005ae
    <ee>   DW_AT_high_pc     : 0xb
    <f6>   DW_AT_frame_base  : 1 byte block: 9c         (DW_OP_call_frame_cfa)
    <f8>   DW_AT_GNU_all_call_sites: 1

So all GDB knows about "func_alias" is from the minsym (elf symbol):

 (gdb) p func_alias
 $1 = {<text variable, no debug info>} 0x4005ae <func>
 (gdb) ptype func_alias
 type = int ()

 (gdb) p func
 $2 = {struct S *(void)} 0x4005ae <func>
 (gdb) ptype func
 type = struct S {
     int field1;
     int field2;
 } *(void)

The result is that calling func_alias from the command line produces
incorrect results.

This is similar (though not exactly the same) to the glibc
errno/__errno_location/__GI___errno_location situation.  On glibc,
errno is defined like this:

  extern int *__errno_location (void);
  #define errno (*__errno_location ())

with __GI___errno_location being an internal alias for
__errno_location.  On my system's libc (F23), I do see debug info for
__errno_location, in the form of name vs linkage name:

 <1><95a5>: Abbrev Number: 18 (DW_TAG_subprogram)
    <95a6>   DW_AT_external    : 1
    <95a6>   DW_AT_name        : (indirect string, offset: 0x2c26): __errno_location
    <95aa>   DW_AT_decl_file   : 1
    <95ab>   DW_AT_decl_line   : 24
    <95ac>   DW_AT_linkage_name: (indirect string, offset: 0x2c21): __GI___errno_location
    <95b0>   DW_AT_prototyped  : 1
    <95b0>   DW_AT_type        : <0x9206>
    <95b4>   DW_AT_low_pc      : 0x20f40
    <95bc>   DW_AT_high_pc     : 0x11
    <95c4>   DW_AT_frame_base  : 1 byte block: 9c       (DW_OP_call_frame_cfa)
    <95c6>   DW_AT_GNU_all_call_sites: 1

however that doesn't matter in practice, because GDB doesn't record
demangled names anyway, and so we end up with the exact same situation
covered by the testcase.

So the fix is to make the expression parser find a debug symbol for
the same address as the just-found minsym, when a lookup by name
didn't find a debug symbol by name.  We now get:

 (gdb) p func_alias
 $1 = {struct S *(void)} 0x4005ae <func>
 (gdb) p __errno_location
 $2 = {int *(void)} 0x7ffff6e92830 <__errno_location>

I've made the test exercise variable aliases too, for completeness.
Those already work correctly, because unlike for function aliases, GCC
emits debug information for variable aliases.

Tested on GNU/Linux.

gdb/ChangeLog:
2017-08-21  Pedro Alves  <palves@redhat.com>

PR gdb/19487
* c-exp.y (variable production): Handle function aliases.
* minsyms.c (msymbol_is_text): New function.
* minsyms.h (msymbol_is_text): Declare.
* symtab.c (find_function_alias_target): New function.
* symtab.h (find_function_alias_target): Declare.

gdb/testsuite/ChangeLog:
2017-08-21  Pedro Alves  <palves@redhat.com>

PR gdb/19487
* gdb.base/symbol-alias.c: New.
* gdb.base/symbol-alias2.c: New.
* gdb.base/symbol-alias.exp: New.

7 years agoFix type casts losing typedefs and reimplement "whatis" typedef stripping
Pedro Alves [Mon, 21 Aug 2017 10:34:32 +0000 (11:34 +0100)]
Fix type casts losing typedefs and reimplement "whatis" typedef stripping

(Ref: https://sourceware.org/ml/gdb/2017-06/msg00020.html)

Assuming int_t is a typedef to int:

 typedef int int_t;

gdb currently loses this expression's typedef:

 (gdb) p (int_t) 0
 $1 = 0
 (gdb) whatis $1
 type = int

or:

 (gdb) whatis (int_t) 0
 type = int

or, to get "whatis" out of the way:

 (gdb) maint print type (int_t) 0
 ...
 name 'int'
 code 0x8 (TYPE_CODE_INT)
 ...

This prevents a type printer for "int_t" kicking in, with e.g.:

 (gdb) p (int_t) 0

From the manual, we can see that that "whatis (int_t) 0" command
invocation should have printed "type = int_t":

 If @var{arg} is a variable or an expression, @code{whatis} prints its
 literal type as it is used in the source code.  If the type was
 defined using a @code{typedef}, @code{whatis} will @emph{not} print
 the data type underlying the @code{typedef}.
 (...)
 If @var{arg} is a type name that was defined using @code{typedef},
 @code{whatis} @dfn{unrolls} only one level of that @code{typedef}.

That one-level stripping is currently done here, in
gdb/eval.c:evaluate_subexp_standard, handling OP_TYPE:

...
     else if (noside == EVAL_AVOID_SIDE_EFFECTS)
{
  struct type *type = exp->elts[pc + 1].type;

  /* If this is a typedef, then find its immediate target.  We
     use check_typedef to resolve stubs, but we ignore its
     result because we do not want to dig past all
     typedefs.  */
  check_typedef (type);
  if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF)
    type = TYPE_TARGET_TYPE (type);
  return allocate_value (type);
}

However, this stripping is reachable in both:

 #1 - (gdb) whatis (int_t)0     # ARG is an expression with a cast to
                                # typedef type.
 #2 - (gdb) whatis int_t        # ARG is a type name.

while only case #2 should strip the typedef.  Removing that code from
evaluate_subexp_standard is part of the fix.  Instead, we make the
"whatis" command implementation itself strip one level of typedefs
when the command argument is a type name.

We then run into another problem, also fixed by this commit:
value_cast always drops any typedefs of the destination type.

With all that fixed, "whatis (int_t) 0" now works as expected:

 (gdb) whatis int_t
 type = int
 (gdb) whatis (int_t)0
 type = int_t

value_cast has many different exit/convertion paths, for handling many
different kinds of casts/conversions, and most of them had to be
tweaked to construct the value of the right "to" type.  The new tests
try to exercise most of it, by trying castin of many different
combinations of types.  With:

 $ make check TESTS="*/whatis-ptype*.exp */gnu_vector.exp */dfp-test.exp"

... due to combinatorial explosion, the testsuite results for the
tests above alone grow like:

 - # of expected passes            246
 + # of expected passes            3811

You'll note that the tests exposed one GCC buglet, filed here:

  Missing DW_AT_type in DW_TAG_typedef of "typedef of typedef of void"
  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81267

gdb/ChangeLog:
2017-08-21  Pedro Alves  <palves@redhat.com>

* eval.c (evaluate_subexp_standard) <OP_TYPE>: Don't dig past
typedefs.
* typeprint.c (whatis_exp): If handling "whatis", and expression
is OP_TYPE, strip one typedef level.  Otherwise don't strip
typedefs here.
* valops.c (value_cast): Save "to" type before resolving
stubs/typedefs.  Use that type as resulting value's type.

gdb/testsuite/ChangeLog:
2017-08-21  Pedro Alves  <palves@redhat.com>

* gdb.base/dfp-test.c
(d32_t, d64_t, d128_t, d32_t2, d64_t2, d128_t2, v_d32_t, v_d64_t)
(v_d128_t, v_d32_t2, v_d64_t2, v_d128_t2): New.
* gdb.base/dfp-test.exp: Add whatis/ptype/cast tests.
* gdb.base/gnu_vector.exp: Add whatis/ptype/cast tests.
* gdb.base/whatis-ptype-typedefs.c: New.
* gdb.base/whatis-ptype-typedefs.exp: New.
* gdb.python/py-prettyprint.c (int_type, int_type2): New typedefs.
(an_int, an_int_type, an_int_type2): New globals.
* gdb.python/py-prettyprint.exp (run_lang_tests): Add tests
involving typedefs and cast expressions.
* gdb.python/py-prettyprint.py (class pp_int_typedef): New.
(lookup_typedefs_function): New.
(typedefs_pretty_printers_dict): New.
(top level): Register lookup_typedefs_function in
gdb.pretty_printers.

7 years agoPR ld/20125, MMIX weak symbols
Hans-Peter Nilsson [Tue, 25 Jul 2017 02:09:32 +0000 (04:09 +0200)]
PR ld/20125, MMIX weak symbols

Weak undefineds with PUSHJ relocs were "lost", causing internal
inconsistencies and an abort.

7 years agoAutomatic date update in version.in
GDB Administrator [Mon, 21 Aug 2017 00:00:41 +0000 (00:00 +0000)]
Automatic date update in version.in

7 years agoUpdate testsuite/ld-x86-64/plt-main-bnd.dd
H.J. Lu [Sun, 20 Aug 2017 13:25:52 +0000 (06:25 -0700)]
Update testsuite/ld-x86-64/plt-main-bnd.dd

2017-08-20  A. Wilcox  <awilfox@adelielinux.org>

PR ld/21976
* testsuite/ld-x86-64/plt-main-bnd.dd: Accept '_' in symbol
name.

7 years agoAutomatic date update in version.in
GDB Administrator [Sun, 20 Aug 2017 00:00:47 +0000 (00:00 +0000)]
Automatic date update in version.in

7 years agoAutomatic date update in version.in
GDB Administrator [Sat, 19 Aug 2017 00:00:44 +0000 (00:00 +0000)]
Automatic date update in version.in

7 years agoRemove save_inferior_ptid
Tom Tromey [Wed, 16 Aug 2017 05:36:09 +0000 (23:36 -0600)]
Remove save_inferior_ptid

This removes save_inferior_ptid, a cleanup function, in favor of
scoped_restore.

This also fixes a possible (it seems unlikely that it could happen in
practice) memory leak -- save_inferior_ptid should have used
make_cleanup_dtor, because it allocated memory.

I tested this on the buildbot.  However, there are two caveats to
this.  First, sometimes it seems I misread the results.  Second, I
think this patch touches some platforms that can't be tested by the
buildbot.  So, extra care seems warranted.

ChangeLog
2017-08-18  Tom Tromey  <tom@tromey.com>
    Pedro Alves  <palves@redhat.com>

* spu-multiarch.c (parse_spufs_run): Use scoped_restore.
* sol-thread.c (sol_thread_resume, sol_thread_wait)
(sol_thread_xfer_partial, rw_common): Use scoped_restore.
* procfs.c (procfs_do_thread_registers): Use scoped_restore.
* proc-service.c (ps_xfer_memory): Use scoped_restore.
* linux-tdep.c (linux_corefile_thread): Remove a cleanup.
(linux_get_siginfo_data): Add "thread" argument.  Use
scoped_restore.
* linux-nat.c (linux_child_follow_fork)
(check_stopped_by_watchpoint): Use scoped_restore.
* infrun.c (displaced_step_prepare_throw, write_memory_ptid)
(THREAD_STOPPED_BY, handle_signal_stop): Use scoped_restore.
(restore_inferior_ptid, save_inferior_ptid): Remove.
* btrace.c (btrace_fetch): Use scoped_restore.
* bsd-uthread.c (bsd_uthread_fetch_registers)
(bsd_uthread_store_registers): Use scoped_restore.
* breakpoint.c (reattach_breakpoints, detach_breakpoints): Use
scoped_restore.
* aix-thread.c (aix_thread_resume, aix_thread_wait)
(aix_thread_xfer_partial): Use scoped_restore.
* inferior.h (save_inferior_ptid): Remove.

7 years ago[ARM] Mark USER_SPECIFIED_MACHINE_TYPE in disassemble_info.flags
Yao Qi [Fri, 18 Aug 2017 08:30:12 +0000 (09:30 +0100)]
[ARM] Mark USER_SPECIFIED_MACHINE_TYPE in disassemble_info.flags

opcodes/arm-dis.c:print_insn may update disassemble_info.mach to
bfd_mach_arm_unknown unless USER_SPECIFIED_MACHINE_TYPE is marked.
When default_print_insn is called for the first time,
disassemble_info.mach is correctly set in GDB, but arm-dis.c:print_insn
sets it to bfd_mach_arm_unknown.  Then, when default_print_insn is
called again (in a loop), it triggers the assert.

The patch fixes the assert by marking USER_SPECIFIED_MACHINE_TYPE so that
opcodes won't reset disassemble_info.mach.

gdb:

2017-08-18  Yao Qi  <yao.qi@linaro.org>

PR tdep/21818
* arm-tdep.c (gdb_print_insn_arm): Mark
USER_SPECIFIED_MACHINE_TYPE if exec_bfd isn't NULL.

7 years agoGDBserver self tests
Yao Qi [Fri, 18 Aug 2017 08:20:43 +0000 (09:20 +0100)]
GDBserver self tests

This patch uses GDB self test in GDBserver.  The self tests are run if
GDBserver is started with option --selftest.

gdb:

2017-08-18  Yao Qi  <yao.qi@linaro.org>

* NEWS: Mention GDBserver's new option "--selftest".
* Makefile.in (SFILES): Remove selftest.c, add common/selftest.c.
* selftest.c: Move it to common/selftest.c.
* selftest.h: Move it to common/selftest.h.
* selftest-arch.c (reset): New function.
(tests_with_arch): Call reset.

gdb/gdbserver:

2017-08-18  Yao Qi  <yao.qi@linaro.org>

* Makefile.in (OBS): Add selftest.o.
* configure.ac: AC_DEFINE GDB_SELF_TEST if $development.
* configure, config.in: Re-generated.
* server.c: Include common/sefltest.h.
(captured_main): Handle option --selftest.

gdb/testsuite:

2017-08-18  Yao Qi  <yao.qi@linaro.org>

* gdb.server/unittest.exp: New.

gdb/doc:

2017-08-18  Yao Qi  <yao.qi@linaro.org>

* gdb.texinfo (Server): Document "--selftest".

7 years agoRemove some GDB specific stuff from selftest.c
Yao Qi [Fri, 18 Aug 2017 08:20:43 +0000 (09:20 +0100)]
Remove some GDB specific stuff from selftest.c

The next patch moves selftest.c to common/selftest.c, so that GDBserver
can use it as well.  However selftest.c uses something isn't "portable" on
GDB and GDBserver.

First, this patch removes QUIT.  I don't expect that we type ctrl-c during
self/unit tests, and each test shouldn't take long time.  Secondly, I
replace exception_fprintf and printf_filtered with debug_printf.  Verified
that unit tests still catch fails.

gdb:

2017-08-18  Yao Qi  <yao.qi@linaro.org>

* selftest.c (run_tests): Don't call QUIT.  Call debug_printf
instead of exception_fprintf and printf_filtered.

7 years agoPut selftests api into selftests namespace
Yao Qi [Fri, 18 Aug 2017 08:20:43 +0000 (09:20 +0100)]
Put selftests api into selftests namespace

This patch changes register_self_test to selftests::register_test,
and run_self_tests to selftest::run_tests.

gdb:

2017-08-18  Yao Qi  <yao.qi@linaro.org>

* selftest.c (register_self_test): Rename it to
selftests::register_test.
(run_self_tests): selftest::run_tests.
* selftest.h: Update declarations.
* selftest-arch.c (register_self_test_foreach_arch): Rename it to
selftests::register_test_foreach_arch.
* selftest-arch.h: Update declaration.
* aarch64-tdep.c: Update.
* arm-tdep.c: Likewise.
* disasm-selftests.c: Likewise.
* dwarf2loc.c: Likewise.
* dwarf2-frame.c: Likewise.
* findvar.c: Likewise.
* gdbarch-selftests.c: Likewise.
* maint.c (maintenance_selftest): Likewise.
* regcache.c: Likewise.
* rust-exp.y: Likewise.
* selftest-arch.c: Likewise.
* unittests/environ-selftests.c: Likewise.
* unittests/function-view-selftests.c: Likewise.
* unittests/offset-type-selftests.c: Likewise.
* unittests/optional-selftests.c: Likewise.
* unittests/scoped_restore-selftests.c: Likewise.
* utils-selftests.c: Likewise.

7 years agoFix buffer overrun parsing a corrupt tekhex binary.
Nick Clifton [Fri, 18 Aug 2017 07:45:12 +0000 (08:45 +0100)]
Fix buffer overrun parsing a corrupt tekhex binary.

PR binutils/21962
* tekhex.c (getsym): Fix check for source pointer walking off the
end of the input buffer.

7 years agoAutomatic date update in version.in
GDB Administrator [Fri, 18 Aug 2017 00:00:54 +0000 (00:00 +0000)]
Automatic date update in version.in

7 years agoPlug source_command leak
Pedro Alves [Thu, 17 Aug 2017 22:45:52 +0000 (23:45 +0100)]
Plug source_command leak

The heap-allocated 'old_source_verbose' local was accidentally left
behind by commit 2ec845e75876 ("More uses of scoped_restore").

Valgrind caught it, like:

 ==20123== 8 bytes in 1 blocks are definitely lost in loss record 4,609 of 13,785
 ==20123==    at 0x4C2A988: calloc (vg_replace_malloc.c:711)
 ==20123==    by 0x60A2F8: xcalloc (common-utils.c:84)
 ==20123==    by 0x4CDBE5: build_command_line(command_control_type, char const*) (cli-script.c:159)
 ==20123==    by 0x4CDC32: get_command_line(command_control_type, char const*) (cli-script.c:172)
 ==20123==    by 0x5230F1: python_command(char*, int) (python.c:421)
 ==20123==    by 0x4C61AD: do_cfunc(cmd_list_element*, char*, int) (cli-decode.c:106)
 ==20123==    by 0x4C911F: cmd_func(cmd_list_element*, char*, int) (cli-decode.c:1902)
 ==20123==    by 0x7CA79E: execute_command(char*, int) (top.c:650)
 ==20123==    by 0x695A0C: command_handler(char*) (event-top.c:590)
 ==20123==    by 0x7CA33F: read_command_file(_IO_FILE*) (top.c:461)
 ==20123==    by 0x4D0C3A: script_from_file(_IO_FILE*, char const*) (cli-script.c:1584)
 ==20123==    by 0x4C2727: source_script_from_stream(_IO_FILE*, char const*, char const*) (cli-cmds.c:589)

gdb/ChangeLog:
2017-08-17  Pedro Alves  <palves@redhat.com>

* cli/cli-cmds.c (source_command): Delete 'old_source_verbose'
local.

7 years agoPlug line_header leaks
Pedro Alves [Thu, 17 Aug 2017 21:53:53 +0000 (22:53 +0100)]
Plug line_header leaks

This plugs a couple leaks introduced by commit fff8551cf549
("dwarf2read.c: Some C++fycation, use std::vector, std::unique_ptr").

The first problem is that nothing owns the temporary line_header that
handle_DW_AT_stmt_list creates in some cases.  Before the commit
mentioned above, the temporary line_header case used to have:

  make_cleanup (free_cu_line_header, cu);

and that cleanup was assumed to be run by process_die, after
handle_DW_AT_stmt_list returns and before child DIEs were processed.

The second problem is found in setup_type_unit_groups: that also used
to have a similar make_cleanup call, and ended up with a similar leak
after the commit mentioned above.

Fix both cases by recording in dwarf2_cu whether a line header is
owned by the cu/die, and have process_die explicitly free the
line_header if so, making use of a new RAII object that also replaces
the reset_die_in_process cleanup, while at it.

Thanks to Philippe Waroquiers for noticing the leak and pointing in
the right direction.

gdb/ChangeLog:
2017-08-17  Pedro Alves  <palves@redhat.com>

* dwarf2read.c (struct dwarf2_cu) <line_header_die_owner>: New
field.
(reset_die_in_process): Delete, replaced by ...
(process_die_scope): ... this new class.  Make it responsible for
freeing cu->line_header too.
(process_die): Use process_die_scope.
(handle_DW_AT_stmt_list): Record the line header's owner CU/DIE in
cu->line_header_die_owner.  Don't release the line header if it's
owned by the CU.
(setup_type_unit_groups): Make the CU/DIE own the line header.
Don't release the line header here.

7 years agoAdd test of V2 GNU build attribute notes.
Nick Clifton [Thu, 17 Aug 2017 13:49:01 +0000 (14:49 +0100)]
Add test of V2 GNU build attribute notes.

* testsuite/binutils-all/note-3-64.s: New test.  Checks assembly
and decoding of version2 GNU build attribute notes.
* testsuite/binutils-all/note-3-32.s: New test.  32-bit version of
the above test.
* testsuite/binutils-all/note-3-64.d: New test driver.
* testsuite/binutils-all/note-3-32.d: New test driver.
* testsuite/binutils-all/objcopy.exp: Run the new test.
* readelf.c (is_64bit_abs_reloc): Add R_SPARC_64.

7 years ago[AArch64] Skip IFUNC relocations in debug sections
Szabolcs Nagy [Thu, 17 Aug 2017 13:48:03 +0000 (14:48 +0100)]
[AArch64] Skip IFUNC relocations in debug sections

Skip IFUNC relocations in debug sections ignored by ld.so.
Fixes the following ld test failures on aarch64:

FAIL: Build libpr18808.so
FAIL: Build libpr18808.so_2
FAIL: Run pr18808

aborting at bfd/elfnn-aarch64.c:4986 in elf64_aarch64_final_link_relocate.

bfd/
PR ld/18808
* elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Skip IFUNC
relocations in debug sections, change abort to _bfd_error_handler.

7 years agoAdd new Brazilian Portuguese translation for the ld subdirectory.
Nick Clifton [Thu, 17 Aug 2017 11:13:28 +0000 (12:13 +0100)]
Add new Brazilian Portuguese translation for the ld subdirectory.

* po/pt_BR.po: New Brazilian Portuguese translation.
* configure.ac (ALL_LINGUAS): Add pt_BR.
* configure: Regenerate.

7 years agoSynthetic symbol leak in elf_read_minimal_symbols
Alex Lindsay [Thu, 17 Aug 2017 10:53:53 +0000 (11:53 +0100)]
Synthetic symbol leak in elf_read_minimal_symbols

Detected this leak with valgrind memcheck:

==30840== 194 bytes in 1 blocks are definitely lost in loss record 9,138 of 10,922
==30840==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==30840==    by 0x80DF82: bfd_malloc (libbfd.c:193)
==30840==    by 0x80E12D: bfd_zmalloc (libbfd.c:278)
==30840==    by 0x819E80: elf_x86_64_get_synthetic_symtab (elf64-x86-64.c:6835)
==30840==    by 0x4F7B01: elf_read_minimal_symbols(objfile*, int, elfinfo const*) (elfread.c:1124)
==30840==    by 0x4F7CE7: elf_symfile_read(objfile*, enum_flags<symfile_add_flag>) (elfread.c:1182)
==30840==    by 0x7557FC: read_symbols(objfile*, enum_flags<symfile_add_flag>) (symfile.c:861)
==30840==    by 0x755EE1: syms_from_objfile_1(objfile*, section_addr_info*, enum_flags<symfile_add_flag>) (symfile.c:1062)

We perform a dynamic allocation in
elf64-x86-64.c:elf_x86_64_get_synthetic_symtab

  s = *ret = (asymbol *) bfd_zmalloc (size);

that appear to never get freed.

gdb:

2017-08-17  Alex Lindsay  <alexlindsay239@gmail.com>

* elfread.c (elf_read_minimal_symbols): xfree synthsyms.

7 years agoMention new TUI Single-Key mode shortcuts for nexti and stepi in NEWS
Ruslan Kabatsayev [Thu, 17 Aug 2017 05:44:37 +0000 (08:44 +0300)]
Mention new TUI Single-Key mode shortcuts for nexti and stepi in NEWS

gdb/ChangeLog:

* NEWS: Mention new shortcuts for nexti and stepi in TUI
Single-Key mode

7 years agoAutomatic date update in version.in
GDB Administrator [Thu, 17 Aug 2017 00:01:00 +0000 (00:01 +0000)]
Automatic date update in version.in

7 years agoAdd shortcuts for "nexti" and "stepi" commands in Single-Key mode
Ruslan Kabatsayev [Wed, 16 Aug 2017 18:44:29 +0000 (21:44 +0300)]
Add shortcuts for "nexti" and "stepi" commands in Single-Key mode

Currently, "layout asm" is not so useful as "layout src" with Single-Key mode:
you have to use multi-key commands like "ni" and "si" to do single-stepping.
This patch adds, in addition to "next" and "step" commands, corresponding
assembly-level ones - "nexti" and "stepi" - to Single-Key mode, with the
shortcuts of "o" (from "step Over") and "i" (from "Step Into") respectively.

gdb/ChangeLog:

* tui/tui.c (tui_commands): Add "nexti" and "stepi" to the Single-Key
mode command list.

gdb/doc/ChangeLog:

* gdb.texinfo (TUI Single Key Mode): Document the new shortcuts in
Single-Key mode.

7 years agoAutomatic date update in version.in
GDB Administrator [Wed, 16 Aug 2017 00:13:28 +0000 (00:13 +0000)]
Automatic date update in version.in