binutils-gdb.git
6 years ago[PowerPC] Add support for EBB and PMU registers
Edjunior Barbosa Machado [Fri, 26 Oct 2018 12:37:54 +0000 (09:37 -0300)]
[PowerPC] Add support for EBB and PMU registers

This patch adds support for registers of the Event Based Branching and
Performance Monitoring Units for the powerpc linux native and core
file targets, and for the powerpc linux server stub.

All three EBB registers are accessible.  Only a subset of the PMU
registers can be accessed through ptrace.  Because of this, the PMU
registers are enumerated individually in gdbarch_tdep, as opposed to
having a single "have_pmu" flag.  This is intended to make it easier
to add additional PMU registers in the future, since checking a
"have_pmu" flag elsewhere in the code would no longer be correct.  The
tdesc feature is named org.gnu.gdb.power.linux.pmu because of this.

It's unclear if it makes sense to save and restore these registers
across function calls, since some of them can be modified
asynchronously.  They are also not tracked in record-replay mode.

The kernel can return ENODATA when ptrace is used to get the EBB
registers, unless a linux performance event that uses EBB is open in
the inferior.  For this reason, the "fill" functions in the server
stub for the ebb register sets is not implemented.

Since gdbserver writes all registers in one go before resuming the
inferior, this error would not be detected at the time the user tries
to write to one of the registers on the client side, and gdbserver
would print out warnings every time it resumes the inferior when no
ebb performance event is opened, so there is currently no
straightforward way to handle this case.  This means the ebb registers
in the client-side regcache can become dirty when the user tries to
write to them, until the inferior is resumed and stopped again.

A related issue is that 'G' packets used to write to unrelated
registers will include bad data for the EBB registers if they are
unavailable, since no register status information is included in the
'G' packet.  This data won't be written to the inferior by the
gdbserver stub because the "fill" functions are not implemented, and
currently the gdbserver stub doesn't change the status of the
registers in its own regcache in response to 'G' packets.

Another limitation for the ebb registers is that traceframes don't
record if registers are available or not, so if these registers are
collected when a tracepoint is hit and the inferior has no ebb event
opened, the user will see zero values for all of them, instead of the
usual <unavailable>.

Because these registers are often unavailable, trying to store them
with target_store_registers with -1 for the regno argument (all
registers) would almost always fail, so they are ignored in this case.

gdb/ChangeLog:
2018-10-26  Edjunior Barbosa Machado  <emachado@linux.vnet.ibm.com>
    Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* arch/ppc-linux-common.h (PPC_LINUX_SIZEOF_EBBREGSET)
(PPC_LINUX_SIZEOF_PMUREGSET): Declare.
* nat/ppc-linux.h (PPC_FEATURE2_EBB, NT_PPC_EBB, NT_PPC_PMU):
Define if not already defined.
* features/rs6000/power-ebb.xml: New file.
* features/rs6000/power-linux-pmu.xml: New file.
* features/rs6000/powerpc-isa207-vsx32l.xml: Include ebb and pmu
features.
* features/rs6000/powerpc-isa207-vsx64l.xml: Likewise.
* features/rs6000/powerpc-isa207-vsx32l.c: Re-generate.
* features/rs6000/powerpc-isa207-vsx64l.c: Re-generate.
* regformats/rs6000/powerpc-isa207-vsx32l.dat: Re-generate.
* regformats/rs6000/powerpc-isa207-vsx64l.dat: Re-generate.
* ppc-linux-nat.c (fetch_register, fetch_ppc_registers): Call
fetch_regset with ebb and pmu regsets.
(store_register, store_ppc_registers): Call store_regset with ebb
and pmu regsets.
(ppc_linux_nat_target::read_description): Set isa207 field in the
features struct if ebb and pmu are avaiable.
* ppc-linux-tdep.c (ppc32_regmap_ebb, ppc32_regmap_pmu)
(ppc32_linux_ebbregset, ppc32_linux_pmuregset): New globals.
(ppc_linux_iterate_over_regset_sections): Call back with the ebb
and pmu regsets.
(ppc_linux_core_read_description): Check if the pmu section is
present and set isa207 in the features struct.
* ppc-linux-tdep.h (ppc32_linux_ebbregset)
(ppc32_linux_pmuregset): Declare.
* ppc-tdep.h (struct gdbarch_tdep) <ppc_mmcr0_regnum>: New field.
<ppc_mmcr2_regnum, ppc_siar_regnum, ppc_sdar_regnum>: New fields.
<ppc_sier_regnum>: New field.
(enum): <PPC_BESCR_REGNUM, PPC_EBBHR_REGNUM, PPC_EBBRR_REGNUM>:
New enum values.
<PPC_MMCR0_REGNUM, PPC_MMCR2_REGNUM, PPC_SIAR_REGNUM>: New enum
values.
<PPC_SDAR_REGNUM, PPC_SIER_REGNUM>: New enum values.
(PPC_IS_EBB_REGNUM, PPC_IS_PMU_REGNUM): Define.
* rs6000-tdep.c (rs6000_gdbarch_init): Look for and validate the
ebb and pmu features.

gdb/gdbserver/ChangeLog:
2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* configure.srv (powerpc*-*-linux*): Add rs6000/power-ebb.xml and
rs6000/power-linux-pmu.xml to srv_xmlfiles.
* linux-ppc-low.c (ppc_store_ebbregset, ppc_fill_pmuregset)
(ppc_store_pmuregset): New functions.
(ppc_regsets): Add entries for ebb and pmu regsets.
(ppc_arch_setup): Set isa207 in features struct if the ebb and
pmu regsets are available.  Set sizes for these regsets.

gdb/doc/ChangeLog:
2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* gdb.texinfo (PowerPC Features): Describe new features
"org.gnu.gdb.power.ebb" and "org.gnu.gdb.power.linux.pmu".

6 years ago[PowerPC] Add support for TAR
Edjunior Barbosa Machado [Fri, 26 Oct 2018 12:37:54 +0000 (09:37 -0300)]
[PowerPC] Add support for TAR

This patch adds support for the Target Address Register for powerpc
linux native and core file targets, and in the powerpc linux server
stub.

gdb/ChangeLog:
2018-10-26  Edjunior Barbosa Machado  <emachado@linux.vnet.ibm.com>
    Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* arch/ppc-linux-tdesc.h (tdesc_powerpc_isa207_vsx32l)
(tdesc_powerpc_isa207_vsx64l): Declare.
* arch/ppc-linux-common.h (PPC_LINUX_SIZEOF_TARREGSET): Define.
(struct ppc_linux_features) <isa207>: New field.
(ppc_linux_no_features): Add initializer for isa207 field.
* arch/ppc-linux-common.c (ppc_linux_match_description): Return
new tdescs.
* nat/ppc-linux.h (PPC_FEATURE2_ARCH_2_07, PPC_FEATURE2_TAR)
(NT_PPC_TAR): Define if not already defined.
* features/Makefile (WHICH): Add rs6000/powerpc-isa207-vsx32l and
rs6000/powerpc-isa207-vsx64l.
(XMLTOC): Add rs6000/powerpc-isa207-vsx32l.xml and
rs6000/powerpc-isa207-vsx64l.xml.
* features/rs6000/power-tar.xml: New file.
* features/rs6000/powerpc-isa207-vsx32l.xml: New file.
* features/rs6000/powerpc-isa207-vsx64l.xml: New file.
* features/rs6000/powerpc-isa207-vsx32l.c: Generate.
* features/rs6000/powerpc-isa207-vsx64l.c: Generate.
* regformats/rs6000/powerpc-isa207-vsx32l.dat: Generate.
* regformats/rs6000/powerpc-isa207-vsx64l.dat: Generate.
* ppc-linux-nat.c (fetch_register, fetch_ppc_registers): Call
fetch_regset with the TAR regset.
(store_register, store_ppc_registers): Call store_regset with the
TAR regset.
(ppc_linux_nat_target::read_description): Set isa207 field in the
features struct if needed.
* ppc-linux-tdep.c: Include
features/rs6000/powerpc-isa207-vsx32l.c and
features/rs6000/powerpc-isa207-vsx64l.c.
(ppc32_regmap_tar, ppc32_linux_tarregset): New globals.
(ppc_linux_iterate_over_regset_sections): Call back with the tar
regset.
(ppc_linux_core_read_description): Check if the tar section is
present and set isa207 in the features struct.
(_initialize_ppc_linux_tdep): Call
initialize_tdesc_powerpc_isa207_vsx32l and
initialize_tdesc_powerpc_isa207_vsx64l.
* ppc-linux-tdep.h (ppc32_linux_tarregset): Declare.
* ppc-tdep.h (gdbarch_tdep) <ppc_tar_regnum>: New field.
(enum) <PPC_TAR_REGNUM>: New enum value.
* rs6000-tdep.c (rs6000_gdbarch_init): Look for and validate tar
feature.
(ppc_process_record_op31): Record changes to TAR.

gdb/gdbserver/ChangeLog:
2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* configure.srv (ipa_ppc_linux_regobj): Add
powerpc-isa207-vsx64l-ipa.o and powerpc-isa207-vsx32l-ipa.o.
(powerpc*-*-linux*): Add powerpc-isa207-vsx32l.o and
powerpc-isa207-vsx64l.o to srv_regobj, add rs6000/power-tar.xml,
rs6000/powerpc-isa207-vsx32l.xml, and
rs6000/powerpc-isa207-vsx64l.xml to srv_xmlfiles.
* linux-ppc-tdesc-init.h (enum ppc_linux_tdesc)
<PPC_TDESC_ISA207_VSX>: New enum value.
(init_registers_powerpc_isa207_vsx32l): Declare.
(init_registers_powerpc_isa207_vsx64l): Declare.
* linux-ppc-low.c (ppc_fill_tarregset): New function.
(ppc_store_tarregset): New function.
(ppc_regsets): Add entry for the TAR regset.
(ppc_arch_setup): Set isa207 in features struct when needed.  Set
size for the TAR regsets.
(ppc_get_ipa_tdesc_idx): Return PPC_TDESC_ISA207_VSX.
(initialize_low_arch): Call init_registers_powerpc_isa207_vsx32l
and init_registers_powerpc_isa207_vsx64l.
* linux-ppc-ipa.c (get_ipa_tdesc): Handle PPC_TDESC_ISA207_VSX.
(initialize_low_tracepoint): Call
init_registers_powerpc_isa207_vsx32l and
init_registers_powerpc_isa207_vsx64l.

gdb/testsuite/ChangeLog:
2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* gdb.arch/powerpc-tar.c: New file.
* gdb.arch/powerpc-tar.exp: New file.

gdb/doc/ChangeLog:
2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* gdb.texinfo (PowerPC Features): Describe new feature
"org.gnu.gdb.power.tar".

6 years ago[PowerPC] Add support for PPR and DSCR
Edjunior Barbosa Machado [Fri, 26 Oct 2018 12:37:54 +0000 (09:37 -0300)]
[PowerPC] Add support for PPR and DSCR

This patch adds gdb support for the Program Priorty Register and the
Data Stream Control Register, for the powerpc linux native and core
file targets, and for the powerpc linux server stub.

gdb/ChangeLog:
2018-10-26  Edjunior Barbosa Machado  <emachado@linux.vnet.ibm.com>
    Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* arch/ppc-linux-tdesc.h (tdesc_powerpc_isa205_ppr_dscr_vsx32l)
(tdesc_powerpc_isa205_ppr_dscr_vsx64l): Declare.
* arch/ppc-linux-common.h (PPC_LINUX_SIZEOF_PPRREGSET)
(PPC_LINUX_SIZEOF_DSCRREGSET): Define.
(struct ppc_linux_features) <ppr_dscr>: New field.
(ppc_linux_no_features): Add initializer for ppr_dscr field.
* arch/ppc-linux-common.c (ppc_linux_match_description): Return
new tdescs.
* nat/ppc-linux.h (PPC_FEATURE2_DSCR, NT_PPC_PPR, NT_PPC_DSCR):
Define if not already defined.
* features/Makefile (WHICH): Add
rs6000/powerpc-isa205-ppr-dscr-vsx32l and
rs6000/powerpc-isa205-ppr-dscr-vsx64l.
(XMLTOC): Add rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml and
rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml.
* features/rs6000/power-dscr.xml: New file.
* features/rs6000/power-ppr.xml: New file.
* features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml: New file.
* features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml: New file.
* features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.c: Generate.
* features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.c: Generate.
* regformats/rs6000/powerpc-isa205-ppr-dscr-vsx32l.dat: Generate.
* regformats/rs6000/powerpc-isa205-ppr-dscr-vsx64l.dat: Generate.
* ppc-linux-nat.c: Include <sys/uio.h>.
(fetch_regset, store_regset, check_regset): New functions.
(fetch_register, fetch_ppc_registers): Call fetch_regset with
DSCR and PPR regsets.
(store_register, store_ppc_registers): Call store_regset with
DSCR and PPR regsets.
(ppc_linux_get_hwcap2): New function.
(ppc_linux_nat_target::read_description): Call
ppc_linux_get_hwcap2 and check_regset, set ppr_dscr field in the
features struct if needed.
* ppc-linux-tdep.c: Include
features/rs6000/powerpc-isa205-ppr-dscr-vsx32l.c and
features/rs6000/powerpc-isa205-ppr-dscr-vsx64l.c.
(ppc32_regmap_ppr, ppc32_regmap_dscr, ppc32_linux_pprregset)
(ppc32_linux_dscrregset): New globals.
(ppc_linux_iterate_over_regset_sections): Call back with the ppr
and dscr regsets.
(ppc_linux_core_read_description): Check if the ppr and dscr
sections are present and set ppr_dscr in the features struct.
(_initialize_ppc_linux_tdep): Call
initialize_tdesc_powerpc_isa205_ppr_dscr_vsx32l and
initialize_tdesc_powerpc_isa205_ppr_dscr_vsx64l.
* ppc-linux-tdep.h (ppc32_linux_pprregset)
(ppc32_linux_dscrregset): Declare.
* ppc-tdep.h (struct gdbarch_tdep) <ppc_ppr_regnum>: New field.
<ppc_dscr_regnum>: New field.
(enum) <PPC_PPR_REGNUM, PPC_DSCR_REGNUM>: New enum values.
* rs6000-tdep.c (rs6000_gdbarch_init): Look for and validate ppr
and dscr features.
(ppc_process_record_op31): Record changes to PPR and DSCR.

gdb/gdbserver/ChangeLog:
2018-10-26  Edjunior Barbosa Machado  <emachado@linux.vnet.ibm.com>
    Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* configure.srv (ipa_ppc_linux_regobj): Add
powerpc-isa205-ppr-dscr-vsx32l-ipa.o and
powerpc-isa205-ppr-dscr-vsx64l-ipa.o.
(powerpc*-*-linux*): Add powerpc-isa205-ppr-dscr-vsx32l.o and
powerpc-isa205-ppr-dscr-vsx64l.o to srv_regobj, add
rs6000/power-dscr.xml, rs6000/power-ppr.xml,
rs6000/powerpc-isa205-ppr-dscr-vsx32l.xml and
rs6000/powerpc-isa205-ppr-dscr-vsx64l.xml to srv_xmlfiles.
* linux-ppc-tdesc-init.h (enum ppc_linux_tdesc)
<PPC_TDESC_ISA205_PPR_DSCR_VSX>: New enum value.
(init_registers_powerpc_isa205_ppr_dscr_vsx32l)
(init_registers_powerpc_isa205_ppr_dscr_vsx64l): Declare.
* linux-ppc-low.c: Include "elf/common.h" and <sys/uio.h>.
(ppc_hwcap): Add comment.
(ppc_hwcap2): New global.
(ppc_check_regset, ppc_fill_pprregset, ppc_store_pprregset)
(ppc_fill_dscrregset, ppc_store_dscrregset): New functions.
(ppc_regsets): Add entries for the DSCR and PPR regsets.
(ppc_arch_setup): Get AT_HWCAP2.  Set ppr_dscr in features struct
when needed.  Set sizes for the the DSCR and PPR regsets.
(ppc_get_ipa_tdesc_idx): Return PPC_TDESC_ISA205_PPR_DSCR_VSX.
(initialize_low_arch): Call
init_registers_powerpc_isa205_ppr_dscr_vsx32l and
init_registers_powerpc_isa205_ppr_dscr_vsx64l.
* linux-ppc-ipa.c (get_ipa_tdesc): Handle
PPC_TDESC_ISA205_PPR_DSCR_VSX.
(initialize_low_tracepoint): Call
init_registers_powerpc_isa205_ppr_dscr_vsx32l and
init_registers_powerpc_isa205_ppr_dscr_vsx64l.

gdb/testsuite/ChangeLog:
2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* gdb.arch/powerpc-ppr-dscr.c: New file.
* gdb.arch/powerpc-ppr-dscr.exp: New file.

gdb/doc/ChangeLog:
2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* gdb.texinfo (PowerPC Features): Describe new features
"org.gnu.gdb.power.ppr" and "org.gnu.gdb.power.dscr".

6 years ago[PowerPC] Refactor have_ initializers in rs6000-tdep.c
Pedro Franco de Carvalho [Fri, 26 Oct 2018 12:37:54 +0000 (09:37 -0300)]
[PowerPC] Refactor have_ initializers in rs6000-tdep.c

This patch refactors a series of initializers in rs6000_gdbarch_init
for clarity.  The have_fpu initializer is also changed to set the
variable to 0, like the other similar variables.  This doesn't affect
program behavior.

gdb/ChangeLog:
2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* rs6000-tdep.c (rs6000_gdbarch_init): Replace line wrapping by a
second initializer line for the have_* variables.  Initialize
have_fpu to 0 instead of 1.

6 years ago[PowerPC] Fix indentation in arch/ppc-linux-common.c
Pedro Franco de Carvalho [Fri, 26 Oct 2018 12:37:54 +0000 (09:37 -0300)]
[PowerPC] Fix indentation in arch/ppc-linux-common.c

This patch parenthesizes the tdesc selection expressions in
arch/ppc-linux-common.c so that they can be tab-indented.

gdb/ChangeLog:
2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* arch/ppc-linux-common.c (ppc_linux_match_description):
Parenthesize tdesc assignements and indent them properly.

6 years ago[PowerPC] Fix two if statements in gdb/ppc-linux-nat.c
Pedro Franco de Carvalho [Fri, 26 Oct 2018 12:37:54 +0000 (09:37 -0300)]
[PowerPC] Fix two if statements in gdb/ppc-linux-nat.c

This patch changes two if statements to else if statements in
ppc-linux-nat.c:fetch_register for clarity.

gdb/ChangeLog:
2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* ppc-linux-nat.c (fetch_register): Change if statement to else
if.
(store_register): Likewise.

6 years ago[PowerPC] Remove rs6000_pseudo_register_reggroup_p
Pedro Franco de Carvalho [Fri, 26 Oct 2018 12:37:53 +0000 (09:37 -0300)]
[PowerPC] Remove rs6000_pseudo_register_reggroup_p

This patch removes rs6000_pseudo_register_reggroup_p.

Group membership for the pseudoregisters can be detected through their
types in default_register_reggroup_p through
tdesc_register_reggroup_p.

gdb/ChangeLog:
2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* rs6000-tdep.c: Remove reggroups.h include.
(rs6000_pseudo_register_reggroup_p): Remove.
(rs6000_gdbarch_init): Remove call to
set_tdesc_pseudo_register_reggroup_p.

6 years agoAdd decfloat registers to float reggroup
Pedro Franco de Carvalho [Fri, 26 Oct 2018 12:37:53 +0000 (09:37 -0300)]
Add decfloat registers to float reggroup

This patch changes default_register_reggroup_p to return true when the
register type is decimal floating point and the reggroup is
float_reggroup.

gdb/ChangeLog:
2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* reggroups.c (default_register_reggroup_p): Return true for
decfloat registers and float_reggroup.

6 years ago[PowerPC] Don't zero-initialize vector register buffers
Pedro Franco de Carvalho [Fri, 26 Oct 2018 12:37:53 +0000 (09:37 -0300)]
[PowerPC] Don't zero-initialize vector register buffers

Now that linux-tdep.c already zero-initializes the buffer used for
generating core file notes, there is no need to do this in the linux
collect functions for the vector regset.  The memsets in gdbserver were
not useful to begin with.

gdb/ChangeLog:
2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* ppc-linux-tdep.c (ppc_linux_collect_vrregset): Remove.
(ppc32_le_linux_vrregset, ppc32_be_linux_vrregset): Replace
ppc_linux_collect_vrregset by regcache_collect_regset.

gdb/gdbserver/ChangeLog:
2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* linux-ppc-low.c (ppc_fill_vrregset): Remove memset calls.

6 years agoZero-initialize linux note sections
Pedro Franco de Carvalho [Fri, 26 Oct 2018 12:37:53 +0000 (09:37 -0300)]
Zero-initialize linux note sections

This patches changes linux-tdep.c so that the buffer used to write
note sections when generating a core file is zero-initialized.  This
way, bytes that are not collected won't contain random
data (e.g. padding bytes).

gdb/ChangeLog:
2018-10-26  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* linux-tdep.c (linux_collect_regset_section_cb): Use
std::vector<gdb_byte> instead of char * and malloc for buf.
Remove xfree.

6 years agoFix SYMBOL_LANGUAGE assertion failure on AIX.
Sangamesh Mallayya [Fri, 26 Oct 2018 10:01:36 +0000 (15:31 +0530)]
Fix SYMBOL_LANGUAGE assertion failure on AIX.

6 years agogdb/riscv: Remove redundant code, and catch more errors when accessing MISA
Andrew Burgess [Tue, 23 Oct 2018 11:10:23 +0000 (12:10 +0100)]
gdb/riscv: Remove redundant code, and catch more errors when accessing MISA

When reading the MISA register, the RISC-V specification says that, if
MISA can't be found then a default value of 0 should be assumed.

As such, this patch ensures that GDB ignores errors when accessing
both the new and old locations for the MISA register.

Additionally, this patch removes an unneeded flag parameter which
didn't provide any additional functionality beyond checking the MISA
for the default value of 0.

gdb/ChangeLog:

* riscv-tdep.c (riscv_read_misa_reg): Update comment, remove
READ_P parameter, catch and ignore register access errors from
either the old or new MISA location.
(riscv_has_feature): Update call to riscv_read_misa_reg.

6 years agoAutomatic date update in version.in
GDB Administrator [Fri, 26 Oct 2018 00:00:32 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoELF: update ld man page on `--gc-sections`
Christoph Conrads [Thu, 25 Oct 2018 19:21:41 +0000 (21:21 +0200)]
ELF: update ld man page on `--gc-sections`

Commit 91ae256e33 fixes the behavior of ld when `--gc-sections` and
`--gc-keep-exported` are both given on the linker command line.  This
updates the ld documentation to suit.

* ld.texi (--gc-sections): Update.

6 years ago[gdb/testsuite] Move valgrind-db-attach.{c,exp} to valgrind-bt.{c,exp}
Tom de Vries [Thu, 25 Oct 2018 14:09:57 +0000 (16:09 +0200)]
[gdb/testsuite] Move valgrind-db-attach.{c,exp} to valgrind-bt.{c,exp}

Now that valgrind-db-attach.exp no longer use --db-attach, rename
valgrind-db-attach.{c,exp} to valgrind-bt.{c,exp}.

2018-10-25  Tom de Vries  <tdevries@suse.de>

    * gdb.base/valgrind-db-attach.c: Rename to ...
    * gdb.base/valgrind-bt.c: ... this.
    * gdb.base/valgrind-db-attach.exp: Rename to ...
    * gdb.base/valgrind-bt.exp: ... this.

6 years ago[gdb/testsuite] Rewrite valgrind-db-attach.exp to use vgdb
Tom de Vries [Thu, 25 Oct 2018 09:03:23 +0000 (11:03 +0200)]
[gdb/testsuite] Rewrite valgrind-db-attach.exp to use vgdb

The valgrind option --db-attach has been deprecated in version 3.10.0, and
removed in version 3.11.0, so the valgrind-db-attach.exp testcase is
unsupported starting version 3.11.0.

Rewrite the test-case to use vgdb instead (making it supported starting
version 3.7.0).

Tested on x86_64-linux with and without --target_board=native-gdbserver.

2018-10-25  Tom de Vries  <tdevries@suse.de>

* gdb.base/valgrind-db-attach.exp: Rewrite to use vgdb.

6 years agogdb/python: Make convert_values_to_python return gdbpy_ref<>
Andrew Burgess [Mon, 10 Sep 2018 11:05:22 +0000 (12:05 +0100)]
gdb/python: Make convert_values_to_python return gdbpy_ref<>

Make convert_values_to_python return a gdbpy_ref<> directly rather
than building a gdbpy_ref<>, releasing it, and then having a new
gdbpy_ref<> created to hold the result.

I also added a header comment to convert_values_to_python.

gdb/ChangeLog:

* python/py-function.c (convert_values_to_python): Return
gdbpy_ref<>. Add header comment.
(fnpy_call): Adjust.

6 years agogdb/python: Make cmdpy_completer_helper return gdbpy_ref<>
Andrew Burgess [Mon, 10 Sep 2018 10:48:28 +0000 (11:48 +0100)]
gdb/python: Make cmdpy_completer_helper return gdbpy_ref<>

Make cmdpy_completer_helper return a gdbpy_ref<> directly rather than
building a gdbpy_ref<>, releasing it, and then having a new
gdbpy_ref<> created to hold the result.

gdb/ChangeLog:

* python/py-cmd.c (cmdpy_completer_helper): Return gdbpy_ref<>.
(cmdpy_completer_handle_brkchars): Adjust.
(cmdpy_completer): Adjust.

6 years agogdb/riscv: Use correct regnum in riscv_linux_nat_target::fetch_registers
Andrew Burgess [Thu, 25 Oct 2018 11:03:31 +0000 (12:03 +0100)]
gdb/riscv: Use correct regnum in riscv_linux_nat_target::fetch_registers

In riscv_linux_nat_target::fetch_registers, if we are asked to supply
all registers (regnum parameter is -1), then we currently end up
calling regcache::raw_supply_zeroed with the regnum -1, which is
invalid.  Instead we should be passing the regnum of the specific
register we wish to supply zeroed, in this case RISCV_CSR_MISA_REGNUM.

I removed the extra { ... } block in line with the coding standard
while editing this area.

gdb/ChangeLog:

* riscv-linux-nat.c (riscv_linux_nat_target::fetch_registers):
Pass correct regnum to raw_supply_zeroed.

6 years agoELF: Hide symbols defined in discarded input sections
H.J. Lu [Thu, 25 Oct 2018 01:08:13 +0000 (18:08 -0700)]
ELF: Hide symbols defined in discarded input sections

When assigning symbol version, we should hide debug symbols defined in
discarded sections from IR objects so that they can be removed later.

bfd/

PR ld/23818
* elflink.c (_bfd_elf_link_assign_sym_version): Hide symbols
defined in discarded input sections.

ld/

PR ld/23818
* testsuite/ld-plugin/lto.exp: Run PR ld/23818 test.
* testsuite/ld-plugin/pr23818.d: New file.
* testsuite/ld-plugin/pr23818.t: Likewise.
* testsuite/ld-plugin/pr23818a.c: Likewise.
* testsuite/ld-plugin/pr23818b.c: Likewise.

6 years agoAutomatic date update in version.in
GDB Administrator [Thu, 25 Oct 2018 00:00:43 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years ago[gdb/testsuite] Log wait status on process no longer exists error
Tom de Vries [Wed, 24 Oct 2018 10:54:33 +0000 (12:54 +0200)]
[gdb/testsuite] Log wait status on process no longer exists error

Proc gdb_test_multiple can run into a process no longer exists error, but when
that happens it shows no details about the process:
...
ERROR: Process no longer exists
...

Fix this by showing the wait status of the process in the log:
...
ERROR: GDB process no longer exists
GDB process exited with wait status 8106 exp8 0 0 CHILDKILLED SIGSEGV \
  {segmentation violation}
...

In order to run the wait commmand we need an explicit pid, so we can't use
any_spawn_id, and duplicate the "-i any_spawn_id eof" pattern for gdb_spawn_id,
and add the wait status logging there.

Build and tested on x86_64-linux.

2018-10-24  Tom de Vries  <tdevries@suse.de>

* lib/gdb.exp (gdb_test_multiple): Log wait status on process no
longer exists error.

6 years agocmse_scan segfault
Alan Modra [Wed, 24 Oct 2018 04:38:28 +0000 (15:08 +1030)]
cmse_scan segfault

elf_sym_hashes for as-needed libs will be zeroed if the library is
found to be not needed.  More than that, the local symbols for such a
library should not be considered by cmse_scan.

* elf32-arm.c (elf32_arm_size_stubs): Ignore as-needed libs that
were not needed.

6 years ago[gdb/testsuite] Rewrite catch-follow-exec.exp using gdb_test
Tom de Vries [Tue, 23 Oct 2018 21:54:21 +0000 (23:54 +0200)]
[gdb/testsuite] Rewrite catch-follow-exec.exp using gdb_test

The testcase catch-follow-exec.exp is written use gdb -batch in order to avoid
a GDB SIGTTOU.  After the commit of "Avoid GDB SIGTTOU on catch exec + set
follow-exec-mode new (PR 23368)", that no longer is necessary.

Rewrite the test using regular gdb_test commands.

Tested with x86_64-linux.

2018-10-24  Tom de Vries  <tdevries@suse.de>

* gdb.base/catch-follow-exec.exp: Rewrite using gdb_test.

6 years ago[gdb/testsuite] Handle removed valgrind option --db-attach
Tom de Vries [Wed, 24 Oct 2018 07:49:44 +0000 (09:49 +0200)]
[gdb/testsuite] Handle removed valgrind option --db-attach

When running valgrind-db-attach.exp with valgrind version 3.13.0, we get:
...
PASS: gdb.base/valgrind-db-attach.exp: spawn valgrind
valgrind: Unknown option: --db-attach=yes
valgrind: Use --help for more information or consult the user manual.
ERROR: Process no longer exists
UNRESOLVED: gdb.base/valgrind-db-attach.exp: valgrind started
...

The valgrind option --db-attach has been deprecated in version 3.10.0, and
removed in version 3.11.0.

Fix valgrind-db-attach.exp to replace the ERROR/UNRESOLVED with:
...
UNSUPPORTED: gdb.base/valgrind-db-attach.exp: valgrind started
...

Tested on x86_64-linux.

2018-10-24  Tom de Vries  <tdevries@suse.de>

* gdb.base/valgrind-db-attach.exp: Handle removed support for
--db-attach in valgrind.

6 years agoAutomatic date update in version.in
GDB Administrator [Wed, 24 Oct 2018 00:00:40 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoFix failing cooked_read selftest for CSKY.
Hafiz Abid Qadeer [Tue, 23 Oct 2018 22:16:58 +0000 (23:16 +0100)]
Fix failing cooked_read selftest for CSKY.

The problem was discussed and approved in
https://sourceware.org/ml/gdb-patches/2018-10/msg00514.html

2018-10-23  Hafiz Abid Qadeer  <abidh@codesourcery.com>

* regcache.c (cooked_read_test): Add CSKY to the list of
architectures with a save_reggroup

6 years agoAvoid GDB SIGTTOU on catch exec + set follow-exec-mode new (PR 23368)
Simon Marchi [Tue, 23 Oct 2018 21:00:33 +0000 (17:00 -0400)]
Avoid GDB SIGTTOU on catch exec + set follow-exec-mode new (PR 23368)

Here's a summary of PR 23368:

  #include <unistd.h>
  int main (void)
  {
    char *exec_args[] = { "/bin/ls", NULL };
    execve (exec_args[0], exec_args, NULL);
  }

$ gdb -nx t -ex "catch exec" -ex "set follow-exec-mode new" -ex run
...
[1]  + 13146 suspended (tty output)  gdb -q -nx t -ex "catch exec" -ex "set follow-exec-mode new" -ex run
$

Here's what happens: when the inferior execs with "follow-exec-mode
new", we first "mourn" it before creating the new one.  This ends up
calling inflow_inferior_exit, which sets the per-inferior terminal state
to "is_ours":

  inf->terminal_state = target_terminal_state::is_ours;

At this point, the inferior's terminal_state is is_ours, while the
"reality", tracked by gdb_tty_state, is is_inferior (GDB doesn't own the
terminal).

Later, we continue processing the exec inferior event and decide we want
to stop (because of the "catch exec") and call target_terminal::ours to
make sure we own the terminal.  However, we don't actually go to the
target backend to change the settings, because the core thinks that no
inferior owns the terminal (inf->terminal_state is
target_terminal_state::is_ours, as checked in
target_terminal_is_ours_kind, for both inferiors).  When something in
readline tries to mess with the terminal settings, it generates a
SIGTTOU.

This patch fixes this by tranferring the state of the terminal from the
old inferior to the new inferior.

gdb/ChangeLog:

PR gdb/23368
* infrun.c (follow_exec): In the follow_exec_mode_new case,
transfer terminal state from old new new inferior.
* terminal.h (swap_terminal_info): New function.
* inflow.c (swap_terminal_info): New function.

6 years agoFix use-after-free in record_btrace_start_replaying
Tom Tromey [Sat, 28 Jul 2018 20:19:09 +0000 (14:19 -0600)]
Fix use-after-free in record_btrace_start_replaying

-fsanitize=address showed a use-after-free in
record_btrace_start_replaying.  The bug occurred because
get_thread_current_frame returned a frame_info, but this object was
then invalidated before the return by ~scoped_restore_current_thread.

This patch fixes the problem by renaming get_thread_current_frame and
having it return a frame id.

gdb/ChangeLog
2018-10-23  Tom Tromey  <tom@tromey.com>

* record-btrace.c (get_thread_current_frame_id): Rename from
get_thread_current_frame.  Return a frame_id.
(record_btrace_start_replaying): Update.

6 years agoS/390: Support vector alignment hints
Andreas Krebbel [Tue, 23 Oct 2018 16:02:37 +0000 (18:02 +0200)]
S/390: Support vector alignment hints

This patch adds the vector alignment hints to the vector load and
store instructions as documented in the IBM z14 Principles of
Operations manual:

http://publibfi.boulder.ibm.com/epubs/pdf/dz9zr011.pdf

opcodes/ChangeLog:

2018-10-23  Andreas Krebbel  <krebbel@linux.ibm.com>

* s390-opc.txt: Add vector load/store instructions with additional
alignment parameter.

gas/ChangeLog:

2018-10-23  Andreas Krebbel  <krebbel@linux.ibm.com>

* config/tc-s390.c (md_gather_operands): Fix for optional operands
following memory addresses.
* testsuite/gas/s390/zarch-arch12.d: Add regexp checks for new
instruction variants.
* testsuite/gas/s390/zarch-arch12.s: Emit new instruction
variants.

6 years agoGDB: New target s12z
John Darrington [Mon, 9 Jul 2018 18:54:26 +0000 (20:54 +0200)]
GDB:  New target s12z

gdb/
    * configure.tgt: Add configuration for s12z.
    * s12z-tdep.c:  New file.
    * NEWS: Mention new target.

6 years agoGDB: Remote target can now accept the form unix::/path/to/socket.
John Darrington [Sat, 13 Oct 2018 16:12:01 +0000 (18:12 +0200)]
GDB: Remote target can now accept the form unix::/path/to/socket.

Allow target remote to use the unix::/path/to/socket syntax as well as just
plain /path/to/socket

gdb/

  * ser-uds.c (uds_open): Use parse_connection_spec to deal with the
    comm form unix::/path/to/socket.

  * serial.c (serial_open): Consider the "unix:" prefix when deciding which
    interface to use.

6 years agoGDB: Fix documentation for invoking GDBSERVER
John Darrington [Sat, 13 Oct 2018 15:27:05 +0000 (17:27 +0200)]
GDB: Fix documentation for invoking GDBSERVER

The documentation did not mention the possibility of invoking gdbserver
with the new connection forms such as tcp6:host:port.  This change fixes
that.

gdb/doc/

  * gdb.texinfo (Server): Tabulate the various permitted forms of the @var{comm}
   metasyntactical variable.  Include the unix:@var{host}:@var{socket} form as
   one of them.

6 years agoGDB: Document the unix::/path/to/socket of remote connection.
John Darrington [Sat, 13 Oct 2018 14:48:01 +0000 (16:48 +0200)]
GDB: Document the unix::/path/to/socket of remote connection.

gdb/doc:
* gdb.texinfo (Connecting)[Remote Connection Commands]:  Provide alternative
  unix::/tmp/xxx example.  Include @code{unix::@var{local-socket}} in
  the list of remote and extended-remote syntaxes.

6 years agoGDBSERVER: Listen on a unix domain (instead of TCP) socket if requested.
John Darrington [Sat, 22 Sep 2018 10:35:41 +0000 (12:35 +0200)]
GDBSERVER: Listen on a unix domain (instead of TCP) socket if requested.

When invoking gdbserver, if the COMM parameter takes the form "unix::/path/name"
then a local (unix) domain socket will be created with that name and gdbserver
will listen for connections on that.

    gdb/
    * NEWS: Mention new feature.

    gdb/gdbserver/
    * configure.ac (AC_CHECK_HEADERS): Add sys/un.h.
    * configure: Regenerate.
    * remote-utils.c (remote_prepare): Create a local socket if requested.
     (remote_open):  Don't attempt to open a file if it's a socket.
     (handle_accept_event): Display the name of the socket on connection.

   gdb/common/
   * netstuff.c (parse_connection_spec)[prefixes]: New member for local domain sockets.

6 years agoS12Z: New 32 bit Reloc.
John Darrington [Wed, 3 Oct 2018 10:26:42 +0000 (12:26 +0200)]
S12Z: New 32 bit Reloc.

Third party tools produce 32 bit relocs  at index 6 with strange properties.
This change moves the existing 32 bit reloc (R_S12Z_EXT32) to index 7
and introduces a new one (R_S12Z_CW32) at index 6 to try to support code
generated by these tools.

  * bfd/elf32-s12z.c (elf_s12z_howto_table) [R_S12Z_CW32]: New member.
  * binutils/readelf.c (is_32bit_abs_reloc): Reloc type 7 is also 32 bit.
  * include/elf/s12z.h (elf_s12z_reloc_tpe) [RELOC_NUMBER (R_S12Z_CW32)]: New enum.

6 years agoS12Z: Handle 16 bit fixups which are constant.
John Darrington [Tue, 23 Oct 2018 13:33:18 +0000 (15:33 +0200)]
S12Z:  Handle 16 bit fixups which are constant.

Commit 1f38083f425e03faf55595414daf291306738222 added a test
to check that the assembler handled fixups with resolved to
constant values.  We were not handling this in the case of
16 bit values.  This change fixes that.

* gas/config/tc-s12z.c (md_apply_fix): Handle BFD_RELOC_16

6 years agogdb/riscv: Give user-friendly names for CSRs
Andrew Burgess [Tue, 23 Oct 2018 12:23:34 +0000 (13:23 +0100)]
gdb/riscv: Give user-friendly names for CSRs

The recent commit:

    commit 0dbfcfffe9abbc5198bce95eb8c66b6bc9b364be
    Date:   Tue Oct 16 22:40:09 2018 +0100

        gdb/riscv: Fix register access for register aliases

broke the CSR names for RISC-V, now all of the CSRs have names like,
csr0, csr1, csr2, etc.  This commit restores the previous
user-friendly names.

gdb/ChangeLog:

* riscv-tdep.c (riscv_register_name): Use the user-friendly names
for CSRs.

6 years agoPR23806, NULL pointer dereference in merge_strings
Alan Modra [Tue, 23 Oct 2018 08:32:06 +0000 (19:02 +1030)]
PR23806, NULL pointer dereference in merge_strings

PR 23806
* merge.c (_bfd_add_merge_section): Don't attempt to merge
sections with ridiculously large alignments.

6 years agoPR23805, NULL pointer dereference in elf_link_input_bfd
Alan Modra [Tue, 23 Oct 2018 08:00:22 +0000 (18:30 +1030)]
PR23805, NULL pointer dereference in elf_link_input_bfd

PR 23805
* elflink.c (elf_link_input_bfd): Don't segfault on finding
STT_TLS symbols without any TLS sections.  Instead, change the
symbol type to STT_NOTYPE.

6 years agoPR23804, buffer overflow in sec_merge_hash_lookup
Alan Modra [Tue, 23 Oct 2018 07:59:24 +0000 (18:29 +1030)]
PR23804, buffer overflow in sec_merge_hash_lookup

PR 23804
* merge.c (_bfd_add_merge_section): Don't attempt to merge
sections where size is not a multiple of entsize.

6 years agoalpha testsuite fixes
Alan Modra [Tue, 23 Oct 2018 05:20:43 +0000 (15:50 +1030)]
alpha testsuite fixes

Fixes a couple of ERROR results due to .set difference on alpha.

* testsuite/ld-elf/shared.exp: Don't build pr19073 test on alpha.
* testsuite/ld-elf/pr18720b.c: Don't use .set on alpha.

6 years agogdb/riscv: expect h/w watchpoints to trigger before the memory is written
Joel Brobecker [Tue, 23 Oct 2018 10:27:50 +0000 (11:27 +0100)]
gdb/riscv: expect h/w watchpoints to trigger before the memory is written

When using QEMU as a RISCV simulator, hardware watchpoint events are
reported to GDB before the target memory gets written. GDB currently
expects the event to be reported after it is written. As a result of
this mismatch, upon receiving the event, GDB sees that the target
memory region has not changed, and therefore decides to ignore the
event. It therefore resumes the program's execution with a continue,
which is the start of an infinite loop between QEMU repeatedly
reporting the same watchpoint event over and over, and GDB repeatedly
ignoring it.

This patch fixes the issue by telling GDB to expect the watchpoint
event to be reported ahead of the memory region being modified.
Upon receiving the event, GDB then single-steps the program before
checking the watched memory value.

gdb/ChangeLog:

        * riscv-tdep.c (riscv_gdbarch_init): Set the gdbarch's
        have_nonsteppable_watchpoint attribute to 1.

6 years agogdb/riscv: Fix register access for register aliases
Andrew Burgess [Tue, 16 Oct 2018 21:40:09 +0000 (22:40 +0100)]
gdb/riscv: Fix register access for register aliases

Some confusion over how the register names and aliases are setup in
riscv means that we currently can't access registers through their
architectural name.

This commit fixes this issue, and moves some of the csr register
handling out of the alias handling code and deals with it separately.
This has the benefit that we can now directly access some arrays
rather than having to iterate over them.

A new test is added to ensure that register aliases now work
correctly.

gdb/ChangeLog:

* riscv-tdep.c (riscv_gdb_reg_names): Update comment, and all
register names.
(struct register_alias): Rename to...
(struct riscv_register_alias): ...this, and update comment.
(riscv_register_aliases): Update type, and alias names.  Remove
CSR names from this list.
(riscv_register_name): Use riscv_gdb_reg_names for int and float
register names.  Add an extra assertion.
(riscv_is_regnum_a_named_csr): New function.
(riscv_register_reggroup_p): Use riscv_is_regnum_a_named_csr.

gdb/testsuite/ChangeLog:

* gdb.arch/riscv-reg-aliases.c: New file.
* gdb.arch/riscv-reg-aliases.exp: New file.

6 years agoAutomatic date update in version.in
GDB Administrator [Tue, 23 Oct 2018 00:00:53 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoRISC-V: NaN-box FP values smaller than an FP register.
Jim Wilson [Mon, 22 Oct 2018 21:11:55 +0000 (14:11 -0700)]
RISC-V: NaN-box FP values smaller than an FP register.

The hardware requires that values in FP registers be NaN-boxed, so we must
extend them with 1's instead of 0's as we do for integer values.

gdb/
* riscv-tdep.c (riscv_push_dummy_call) <in_reg>: Check for value in
FP reg smaller than FP reg size, and fill with -1 instead of 0.

6 years agoRISC-V: Print FP regs as union of float types.
Jim Wilson [Mon, 22 Oct 2018 21:10:13 +0000 (14:10 -0700)]
RISC-V: Print FP regs as union of float types.

A 64-bit FP register can hold either a single or double float value, so
print it as both types by using a union type for FP registers.  Likewise
for 128-bit regs which can also hold long double.

gdb/
* riscv-tdep.c (riscv_fpreg_d_type, riscv_fpreg_q_type): New.
(riscv_register_type): Use them.
(riscv_print_one_register_info): Handle union of floats same as float.
* riscv-tdep.h (struct gdbarch_tdep): Add riscv_fpreg_d_type and
riscv_fpreg_q_type fields.

6 years agoS12Z: Disassembly: Fallback to show the address if the symbol table is empty.
John Darrington [Mon, 22 Oct 2018 14:59:47 +0000 (16:59 +0200)]
S12Z: Disassembly: Fallback to show the address if the symbol table is empty.

* opcodes/s12z-dis.c (decode_possible_symbol): Add fallback case.
  (rel_15_7): Likewise.

6 years agogas simple-forward test
Alan Modra [Mon, 22 Oct 2018 03:19:21 +0000 (13:49 +1030)]
gas simple-forward test

Tests that target md_apply_fix can handle fixups that have resolved
down to a constant and thus do not need relocations.

Also a fix for eqv-dot xfails.

* testsuite/gas/all/simple-forward.d,
* testsuite/gas/all/simple-forward.s: New test.
* testsuite/gas/all/gas.exp: Run it.
* testsuite/gas/all/eqv-dot.d: xfail tic30 and tic54x.

6 years agoApply alpha BFD_RELOC_8 fixups
Alan Modra [Mon, 22 Oct 2018 10:00:40 +0000 (20:30 +1030)]
Apply alpha BFD_RELOC_8 fixups

* config/tc-alpha.c (md_apply_fix): Handle BFD_RELOC_8 for fixups
without a symbol.
* testsuite/gas/all/gas.exp: Don't xfail forward test here..
* testsuite/gas/all/forward.d: ..do so here, removing alpha.

6 years agoPR23040, .uleb128 directive doesn't accept some valid expressions
Alan Modra [Sat, 20 Oct 2018 11:52:37 +0000 (22:22 +1030)]
PR23040, .uleb128 directive doesn't accept some valid expressions

What a trip down a rabbit hole this bug has been.

First observation: You can't use deferred_expression in s_leb128.
deferred_expression implements the semantics of .eqv or '==', saving
an expression with minimal simplification for assignment to a symbol
so that the expression is evaluated at uses of the symbol.  In
particular, the value of "dot" is not evaluated at the .eqv symbol
assignment, but later.  When s_leb128 uses deferred_expression,
"later" is at the end of assembly, giving entirely the wrong value of
"dot".  There is no way to fix this for the s_leb128 use without
breaking .equ (which incidentally was already somewhat broken, see
commit e4c2619ad1).  So, don't use deferred_expression in s_leb128.

But that leads to the gas test elf/dwarf2-17 failing, because view
symbols are calculated with a chain of expression symbols.  In the
dwarf2-17 .L1 case there is a "temp_sym_1 > temp_sym_2" expression,
with temp_sym_1 and temp_sym_2 on either side of a ".balign".  Since
".balign" and many other directives moving "dot" are not calculated on
the first (and only) pass over source, .L1 cannot be calculated until
final addresses are assigned to frags.  However, ".uleb128 .L1" *is*
calculated immediately, resulting in the wrong value.

The reason why .L1 is calculated immediately is that code in
expr.c:operand after the comment
  /* If we have an absolute symbol or a reg, then we know its
     value now.  */
does as it says and fixes the value of .L1, because .L1 is assigned
to absolute_section in dwarf2dbg.c:set_or_check_view.  So, correct
that to expr_section.

Unfortunately that fix leads to failure of the elf/dwarf2-5 test with
../gas/elf/dwarf2-5.s: Error: attempt to get value of unresolved symbol `.L5'
../gas/elf/dwarf2-5.s: Error: attempt to get value of unresolved symbol `.L11'
../gas/elf/dwarf2-5.s: Error: attempt to get value of unresolved symbol `.L12'
So why is that?  Well, it turns out that .L5 is defined in terms of
.L4, and apparently .L4 is undefined.  But .L4 clearly is defined,
otherwise we would hit an error when trying to use .L4 a little
earlier.  There are two copies of .L4!  So, symbols are cloned when
that should not happen.

Symbol cloning is a technique used by gas to support saving the value
of symbols that change between uses, but that isn't the case with
.L4.  Only one value is set and used for .L4, but indeed .L4 was being
cloned by symbol_clone_if_forward_ref.  This despite no forward refs
being present.  Also, .L4 is a local symbol and a cursory glance at
symbol_clone_if_forward_ref "if (symbolP && !LOCAL_SYMBOL_CHECK (symbolP))"
would seem to prevent cloning of local symbols.  All is not as it
seems though, a curse of using macros.  LOCAL_SYMBOL_CHECK modifies
its argument if a "struct local_symbol" is converted to the larger
"struct symbol", as happens when assigning a view symbol value.
That fact results in the recursive call to symbol_clone_if_forward_ref
returning a different address for "add_symbol".  This problem could
have been fixed by using symbol_same_p rather than comparing symbol
pointers, but I thought it better to use the real symbol throughout.
Note that symbol_find_exact also returns the real symbol for a
converted local symbol.

Finally, this patch does expose lack of support for forward symbol
definitions in various targets.  For example:
alpha-linux  +ERROR: ../ld/testsuite/ld-elf/pr11138-2.c: compilation failed
This is caused by view symbol uses.  On alpha-linux-gcc (GCC) 8.1.1
20180502 they happen to occur in .byte directives so were silently
broken in cases like elf/dwarf2-17 anyway.
/tmp/ccvtsMfU.s: Assembler messages:
/tmp/ccvtsMfU.s: Fatal error: unhandled relocation type BFD_RELOC_8
/tmp/ccvtsMfU.s: Fatal error: unhandled relocation type BFD_RELOC_8

md_apply_fix on those targets needs to handle fixups that resolve down
to a constant.

PR 23040
* symbols.c (get_real_sym): New function.
(symbol_same_p): Use get_real_sym.
(symbol_clone_if_forward_ref): Save real original add_symbol and
op_symbol for comparison against that returned from lookup or
recursive calls.
* dwarf2dbg.c (set_or_check_view): Use expr_section for
expression symbols, not absolute_section.
(dwarf2_directive_loc): Check symbol_equated_p and tidy cloning
of view symbols.
* read.c (s_leb128): Don't use deferred_expression.

6 years agoIntroduce gdbarch_num_cooked_regs
Simon Marchi [Mon, 22 Oct 2018 02:29:21 +0000 (22:29 -0400)]
Introduce gdbarch_num_cooked_regs

The expression

  gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch)

is used quite often to find the number of cooked registers (raw + pseudo
registers).  This patch introduces gdbarch_num_cooked_regs, which does
the equivalent.  It substantially reduces required wrapping in some
places, so should improve readability.

There is a for loop in m68hc11_frame_unwind_cache that had iterated
until (the equivalent of) gdbarch_num_cooked_regs (gdbarch) - 1.  During
review, we concluded that this is most likely an off-by-one mistake, so
I replaced it with gdbarch_num_cooked_regs (gdbarch).

gdb/ChangeLog:

* gdbarch.sh (gdbarch_num_cooked_regs): New.
* gdbarch.h: Re-generate.
* ax-gdb.c (gen_expr): Use gdbarch_num_cooked_regs.
* dwarf2-frame.c (dwarf2_frame_cache): Likewise.
* eval.c (evaluate_subexp_standard): Likewise.
* findvar.c (value_of_register): Likewise.
(value_of_register_lazy): Likewise.
(address_from_register): Likewise.
* frame.c (get_frame_register_bytes): Likewise.
* gdbarch-selftests.c (register_to_value_test): Likewise.
* h8300-tdep.c (h8300_register_type): Likewise.
* i386-tdep.c (i386_dbx_reg_to_regnum): Likewise.
(i386_svr4_reg_to_regnum): Likewise.
* infcmd.c (default_print_registers_info): Likewise.
(registers_info): Likewise.
(print_vector_info): Likewise.
(default_print_float_info): Likewise.
* m68hc11-tdep.c (m68hc11_frame_unwind_cache): Likewise.
* mdebugread.c (mdebug_reg_to_regnum): Likewise.
* mi/mi-main.c (mi_cmd_data_list_register_names): Likewise.
(mi_cmd_data_list_changed_registers): Likewise.
(mi_cmd_data_list_register_values): Likewise.
(mi_cmd_data_write_register_values): Likewise.
(mi_cmd_trace_frame_collected): Likewise.
* mips-tdep.c (print_gp_register_row): Likewise.
(mips_print_registers_info): Likewise.
* nds32-tdep.c (nds32_gdbarch_init): Likewise.
* regcache.c (init_regcache_descr): Likewise.
(register_size): Likewise.
(register_dump::dump): Likewise.
(cooked_read_test): Likewise.
(cooked_write_test): Likewise.
* rs6000-tdep.c (rs6000_register_sim_regno): Likewise.
(rs6000_gdbarch_init): Likewise.
* stabsread.c (stab_reg_to_regnum): Likewise.
* stack.c (info_frame_command): Likewise.
* target-descriptions.c (tdesc_register_name): Likewise.
* trad-frame.c (trad_frame_alloc_saved_regs): Likewise.
* tui/tui-regs.c (tui_show_register_group): Likewise.
* user-regs.c (user_reg_map_name_to_regnum): Likewise.
(user_reg_map_regnum_to_name): Likewise.
(value_of_user_reg): Likewise.
(maintenance_print_user_registers): Likewise.
* xtensa-tdep.c (xtensa_find_register_by_name): Likewise.
(xtensa_register_name): Likewise.
(xtensa_register_type): Likewise.
(xtensa_reg_to_regnum): Likewise.
(xtensa_pseudo_register_read): Likewise.
(xtensa_pseudo_register_write): Likewise.

6 years agoAllocate buffer with proper size in amd64_pseudo_register_{read_value,write}
Simon Marchi [Mon, 22 Oct 2018 02:09:24 +0000 (22:09 -0400)]
Allocate buffer with proper size in amd64_pseudo_register_{read_value,write}

Running "maintenance selftest" on an amd64 build with AddressSanitizer
enabled, I get this:

==18126==ERROR: AddressSanitizer: dynamic-stack-buffer-overflow on address 0x7ffdf72397c1 at pc 0x7fb5f437b011 bp 0x7ffdf7239740 sp 0x7ffdf7238ee8
WRITE of size 8 at 0x7ffdf72397c1 thread T0
    #0 0x7fb5f437b010 in __interceptor_memcpy /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:737
    #1 0x55a1f899c1b3 in readable_regcache::raw_read(int, unsigned char*) /home/simark/src/binutils-gdb/gdb/regcache.c:530
    #2 0x55a1f7db241b in amd64_pseudo_register_read_value /home/simark/src/binutils-gdb/gdb/amd64-tdep.c:384
    #3 0x55a1f8413a2e in gdbarch_pseudo_register_read_value(gdbarch*, readable_regcache*, int) /home/simark/src/binutils-gdb/gdb/gdbarch.c:1992
    #4 0x55a1f899c9d1 in readable_regcache::cooked_read(int, unsigned char*) /home/simark/src/binutils-gdb/gdb/regcache.c:636
    #5 0x55a1f89a2251 in cooked_read_test /home/simark/src/binutils-gdb/gdb/regcache.c:1649

In amd64_pseudo_register_read_value, when we try to read the al
register, for example, we need to read rax and extract al from it.  We
allocate a buffer of the size of al (1 byte):

  gdb_byte *raw_buf = (gdb_byte *) alloca (register_size (gdbarch, regnum));

but read in it the whole rax value (8 bytes):

  status = regcache->raw_read (gpnum, raw_buf);

Fix it by allocating a buffer correctly sized for the full register from
which the smaller register is extracted.  The
amd64_pseudo_register_write function had the same problem.

gdb/ChangeLog:

* amd64-tdep.c (amd64_pseudo_register_read_value): Use
correctly-sized buffer with raw_read.
(amd64_pseudo_register_write): Use correctly-sized buffer for
raw_read/raw_write.

6 years agoAutomatic date update in version.in
GDB Administrator [Mon, 22 Oct 2018 00:00:58 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoAutomatic date update in version.in
GDB Administrator [Sun, 21 Oct 2018 00:01:05 +0000 (00:01 +0000)]
Automatic date update in version.in

6 years ago[PUSHED/OBVIOUS] ensure help set print type gives the correct help.
Philippe Waroquiers [Sat, 20 Oct 2018 21:00:52 +0000 (23:00 +0200)]
[PUSHED/OBVIOUS] ensure help set print type gives the correct help.

Without this patch:
  (gdb) help set print type
  Generic command for setting how types print.

  List of show print type subcommands:

  show print type methods -- Set printing of methods defined in classes
  ...

With this patch:
  (gdb) h set print type
  Generic command for setting how types print.

  List of set print type subcommands:

  set print type methods -- Set printing of methods defined in classes
  ...

6 years agoFix "make info" in gdb
Tom Tromey [Sat, 20 Oct 2018 18:18:20 +0000 (12:18 -0600)]
Fix "make info" in gdb

"make info" in gdb was broken by my last patch.  This fixes it.
Tested by rebuilding; committing as obvious.

gdb/doc/ChangeLog
2018-10-20  Tom Tromey  <tom@tromey.com>

* gdb.texinfo (TUI Commands): Add @end table.
(TUI Configuration): Remove stray @end table.

6 years agoGDB: Documentation: Remove greengrocer's apostrophe.
John Darrington [Sat, 13 Oct 2018 18:07:34 +0000 (20:07 +0200)]
GDB: Documentation: Remove greengrocer's apostrophe.

gdb/doc/gdb.texinfo (gdbserver man): "it's symbol" --> its symbol.

6 years agoPR23800, .eqv doesn't always defer expression evaluation
Alan Modra [Sat, 20 Oct 2018 00:42:46 +0000 (11:12 +1030)]
PR23800, .eqv doesn't always defer expression evaluation

.eqv (and ==) ought not simplify expressions involving dot or other
symbols set by .eqv.  If such simplification occurs, the value of dot
will be that at the assignment rather than at the place where the
symbol is used.

PR 23800
* expr.c (expr): Don't simplify expressions involving forward_ref
symbols when mode is expr_defer.
* config/tc-spu.c (spu_cons): Parse expression using normal
expression evaluation if @ppu is not detected.
* testsuite/gas/all/eqv-dot.d,
* testsuite/gas/all/eqv-dot.s: New test.
* testsuite/gas/all/gas.exp: Run it.

6 years agoPR23788, objcopy: failed to find link section
Alan Modra [Fri, 19 Oct 2018 13:32:17 +0000 (00:02 +1030)]
PR23788, objcopy: failed to find link section

Symbol tables can change when a number of objcopy options are used.
I figure string tables are similarly changeable.

PR 23788
* elf.c (section_match): Don't require a size match for SHT_SYMTAB
or SHT_STRTAB.

6 years agoRelax a -r --gc-sections requirement
Alan Modra [Fri, 19 Oct 2018 13:29:11 +0000 (23:59 +1030)]
Relax a -r --gc-sections requirement

A symbol root is not needed if --gc-keep-exported is also given.

* ldlang.c (lang_end): Don't error if no --entry or --undefined
is given with -r -gc-sections if --gc-keep-exported.

6 years agoAutomatic date update in version.in
GDB Administrator [Sat, 20 Oct 2018 00:00:40 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoDeprecate and replace the "tabset" command
Tom Tromey [Mon, 3 Sep 2018 01:41:41 +0000 (19:41 -0600)]
Deprecate and replace the "tabset" command

The "tabset" command sets the tab width as used by the TUI for source
and disassembly display.

This command has long seemed to be misnamed to me.  It is more in
keeping with gdb design to call it "set tui tab-width".  Also, making
this change allows for the corresponding "show" command to work.

gdb/ChangeLog
2018-10-19  Tom Tromey  <tom@tromey.com>

PR tui/18388:
* NEWS: Mention tabset deprecation.
* tui/tui-win.c (tui_tab_width, internal_tab_width): New globals.
(update_tab_width): New function.
(tui_set_tab_width, tui_show_tab_width): New functions.
(tui_set_tab_width_command): Use update_tab_width.
(_initialize_tui_win): Move to end of file.  Deprecate "tabset".
Add new "set tui tab-width" command.
* tui/tui-source.c (tui_set_source_content): Update.
* tui/tui-disasm.c (tui_set_disassem_content): Update.
* tui/tui-data.h (tui_default_tab_len, tui_set_default_tab_len):
Don't declare.
(tui_tab_width): Declare.
* tui/tui-data.c (default_tab_len, tui_default_tab_len)
(tui_set_default_tab_len): Remove.

gdb/doc/ChangeLog
2018-10-19  Tom Tromey  <tom@tromey.com>

PR tui/18388:
* gdb.texinfo (TUI Commands): Remove tabset documentation.
(TUI Configuration): Document "set tui tab-width".

6 years agoMinor cleanups in tui-io.c
Tom Tromey [Sun, 2 Sep 2018 00:44:33 +0000 (18:44 -0600)]
Minor cleanups in tui-io.c

I noticed that a couple of functions in tui-io.c could be static, and
that a couple more were unused and could be removed.

gdb/ChangeLog
2018-10-19  Tom Tromey  <tom@tromey.com>

* tui/tui-io.h (key_is_start_sequence, key_is_end_sequence)
(key_is_backspace, tui_getc): Don't declare.
* tui/tui-io.c (key_is_start_sequence): Now static.
(key_is_end_sequence, key_is_backspace): Remove.
(tui_getc): Now static.

6 years agoClear static_links in reread_symbols
Tom Tromey [Thu, 26 Jul 2018 23:54:00 +0000 (17:54 -0600)]
Clear static_links in reread_symbols

-fsanitize=address pointed out a use-after free in
objfile_register_static_link.  The bug turned out to be that
reread_symbols does not clear the static_links field; this leaves a
hash table that is filled with freed pointers.

Jan's (now quite old) idea of replacing reread_symbols with a simple
delete/new still seems good to me, and it's worth noting that it would
have avoided this bug.

Tested by the buildbot and by observing the change with
-fsanitize=address.

gdb/ChangeLog
2018-10-19  Tom Tromey  <tom@tromey.com>

* symfile.c (reread_symbols): Clear "static_links".

6 years agoArm: Skip new binary decode tests on pe targets
Tamar Christina [Fri, 19 Oct 2018 15:18:37 +0000 (16:18 +0100)]
Arm: Skip new binary decode tests on pe targets

The two new test I added require the use of the ".inst" directive which the PE
targets don't support.  Because of that I excluded *-unknown-pe but the mask needs
to be wider.  I am now excluding *-*-pe.

gas/ChangeLog:

* testsuite/gas/arm/undefined-insn-arm.d: Widen pe skip.
* testsuite/gas/arm/undefined-insn-thumb.d: Likewise.

6 years agoAarch64: Better termination checks for sigcontext reading
Alan Hayward [Fri, 19 Oct 2018 12:51:00 +0000 (13:51 +0100)]
Aarch64: Better termination checks for sigcontext reading

When reading the reserved section in the sigcontext ensure the
address is updated on an unknown section. Also add additional
checks to prevent reading past the end of the array.

Fixes gdb.base/savedregs.exp

* aarch64-linux-tdep.c (AARCH64_SIGCONTEXT_RESERVED_SIZE): New
define.
(aarch64_linux_sigframe_init): Extra boundary checks.

6 years agoS390: Fix crash when remote tdesc doesn't define vec128
Andreas Arnez [Fri, 19 Oct 2018 12:05:08 +0000 (14:05 +0200)]
S390: Fix crash when remote tdesc doesn't define vec128

I've encountered a GDB crash when trying to read registers from a remote
stub that provided a target.xml with vector registers, but without the
'vec128' data type.  The crash is caused by NULL register type entries for
the "concatenated" pseudo-registers v0-v15.  These NULL entries are
introduced by the logic in s390_pseudo_register_type(), where the tdesc
type 'vec128' is returned unconditionally -- even if it doesn't exist (is
NULL).

The fixed logic for determining a "concatenated" vector register's type
now returns the type of the raw register v16 instead.  This also makes
sure that all vector register have the same type.

gdb/ChangeLog:

* s390-tdep.c (s390_pseudo_register_type): For v0-v15 don't yield
the possibly non-existent tdesc type 'vec128', but the type of raw
register v16 instead.

6 years agoFix cli_interp::cli_uiout resource leak found by Coverity
Gary Benson [Fri, 19 Oct 2018 10:51:41 +0000 (11:51 +0100)]
Fix cli_interp::cli_uiout resource leak found by Coverity

This commit fixes a resource leak found by Coverity, where cli_interp's
constructor creates a new cli_ui_out, but there was no corresponding
destructor to free it.

gdb/ChangeLog:

* cli/cli-interp.c (cli_interp::~cli_interp): New function.

6 years agoTestsuite: Fix racy conditions in py-cmd.exp
Alan Hayward [Tue, 9 Oct 2018 15:42:33 +0000 (16:42 +0100)]
Testsuite: Fix racy conditions in py-cmd.exp

The test loop in test_python_inline_or_multiline was not checking for the
gdb prompt. readline_is_used then reads in the prompt causing it to fail
and the final chunk of tests to be skipped.

Spotted this error because sometimes the gdb prompt does get processed
correctly and the final tests are run, causing it to show up in the
racy tests script output.

Fix by ensuring the prompt is always checked for. To do this the list
style needs reformatting so that variables get expanded.

2018-10-19  Alan Hayward  <alan.hayward@arm.com>

* gdb.python/py-cmd.exp: Check for gdb_prompt.

6 years agoTestsuite: vla-optimized-out.exp is too pessimistic
Alan Hayward [Thu, 18 Oct 2018 10:43:40 +0000 (11:43 +0100)]
Testsuite: vla-optimized-out.exp is too pessimistic

On aarch64 (and possibly other ports), for O3 the sizeof "a" can still be shown.

2018-10-19  Alan Hayward  <alan.hayward@arm.com>

* gdb.base/vla-optimized-out.exp: Allow either optimized out or 6.

6 years agotestsuite: ovldbreak.exp: fix regexp
Alan Hayward [Thu, 18 Oct 2018 13:36:06 +0000 (14:36 +0100)]
testsuite: ovldbreak.exp: fix regexp

Fix the layout used in the regexp for breakpoints.

Gets rid of two FAILS.

2018-10-18  Alan Hayward  <alan.hayward@arm.com>

* gdb.cp/ovldbreak.exp: Fix regexps.

6 years agoTestsuite: compile-cplus-print.exp: Start inferior before compiling
Alan Hayward [Thu, 18 Oct 2018 12:58:57 +0000 (13:58 +0100)]
Testsuite: compile-cplus-print.exp: Start inferior before compiling

skip_compile_feature_tests is only valid if the inferior has already
been started (see proc comments). Move the runto_main earlier.

2018-10-18  Alan Hayward  <alan.hayward@arm.com>

* gdb.compile/compile-cplus-print.exp: Start inferior earlier.

6 years agoArm: Fix disassembler crashing on -b binary when thumb file and thumb not forced.
Tamar Christina [Fri, 19 Oct 2018 09:31:42 +0000 (10:31 +0100)]
Arm: Fix disassembler crashing on -b binary when thumb file and thumb not forced.

The disassembler for Arm has some aborts in it in places it assumes can never
be reached.  Under normal circumstances they indeed cannot be reached because
the right options are selected from the ARM attributes in the ELF file.

However when disassembling with -b binary then if you do not get the options
right the disassembler just aborts.  This changes it so it just prints how it
was trying to interpret the instruction and prints UNKNOWN instructions next to it.

This way the user has an idea of what's going.

gas/ChangeLog:

* testsuite/gas/arm/undefined-insn-arm.d: New test.
* testsuite/gas/arm/undefined-insn-thumb.d: New test.
* testsuite/gas/arm/undefined-insn.s: New test.

opcodes/ChangeLog:

* arm-dis.c (UNKNOWN_INSTRUCTION_32BIT): Format specifier for arm mode.
(UNKNOWN_INSTRUCTION_16BIT): Format specifier for thumb mode.
(print_insn_arm, print_insn_thumb16, print_insn_thumb32): Use them.

6 years agoThis set of changes clarifies the conditions for the R5900 short loop fix and extends...
Fredrik Noring [Fri, 19 Oct 2018 08:47:55 +0000 (09:47 +0100)]
This set of changes clarifies the conditions for the R5900 short loop fix and extends its test with the border cases of six and seven instructions.

* testsuite/gas/mips/r5900.s: Extend the R5900 short loop fix
test with border cases.
* testsuite/gas/mips/r5900.d: Add extra expected disassembly.
* config/tc-mips.c (can_swap_branch_p): Clarify the R5900 short
loop hardware bug conditions.  Correct note on the R5900
instruction count short loop fix.

6 years agoAutomatic date update in version.in
GDB Administrator [Fri, 19 Oct 2018 00:00:36 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoFix PR cli/23785: Check if file exists when invoking "restore FILE binary"
Sergio Durigan Junior [Thu, 18 Oct 2018 16:56:25 +0000 (12:56 -0400)]
Fix PR cli/23785: Check if file exists when invoking "restore FILE binary"

This simple patch fixes the segfault reported on PR cli/23785, which
happens when using the "restore FILE binary" command with a
non-existent file.  We just have to check if the file handler returned
by "gdb_fopen_cloexec" is not NULL, and error out if it is.

A test has also been added to gdb.base/restore.exp in order to
exercise this scenario.

No regressions introduced.

gdb/ChangeLog:
2018-10-18  Sergio Durigan Junior  <sergiodj@redhat.com>

PR cli/23785
* cli/cli-dump.c (restore_binary_file): Check if "file" is
NULL.

gdb/testsuite/ChangeLog:
2018-10-18  Sergio Durigan Junior  <sergiodj@redhat.com>

PR cli/23785
* gdb.base/restore.exp: New test to check if "restore" with an
invalid file doesn't segfault.

6 years agoUpdate documentation of readelf's --unwind option.
Nick Clifton [Thu, 18 Oct 2018 15:58:16 +0000 (16:58 +0100)]
Update documentation of readelf's --unwind option.

* doc/binutils.texi (readelf): Document alternatives to the
--unwind option if it is not supported for the target
architecture.

6 years ago[gdb/testsuite] Fix capitalized test names
Tom de Vries [Thu, 18 Oct 2018 11:23:08 +0000 (13:23 +0200)]
[gdb/testsuite] Fix capitalized test names

At https://sourceware.org/gdb/wiki/GDBTestcaseCookbook\
  #Follow_the_test_name_convention we find:
..
Test names should start with a lower case and don't need to end with a period
(they are not sentences).
...

Fix some capitalized test names.

Tested on x86_64-linux.

2018-10-18  Tom de Vries  <tdevries@suse.de>

* gdb.ada/bp_inlined_func.exp: Fix capitalized test name.
* gdb.ada/excep_handle.exp: Same.
* gdb.ada/mi_string_access.exp: Same.
* gdb.ada/mi_var_union.exp: Same.
* gdb.arch/arc-analyze-prologue.exp: Same.
* gdb.arch/arc-decode-insn.exp: Same.
* gdb.base/readnever.exp: Same.
* gdb.fortran/printing-types.exp: Same.
* gdb.guile/scm-lazy-string.exp: Same.

6 years agoAutomatic date update in version.in
GDB Administrator [Thu, 18 Oct 2018 00:00:35 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years ago gdb/ChangeLog:
Paul Koning [Wed, 17 Oct 2018 23:26:55 +0000 (19:26 -0400)]
gdb/ChangeLog:

        * charset.c (convert_between_encodings): Fix unsigned overflow.

    gdb/charset.c (convert_between_encodings): Fix unsigned overflow.

6 years agoShare the code to format "info proc mappings" entries for FreeBSD.
John Baldwin [Wed, 17 Oct 2018 18:41:30 +0000 (11:41 -0700)]
Share the code to format "info proc mappings" entries for FreeBSD.

gdb/ChangeLog:

* fbsd-nat.c (fbsd_nat_target::info_proc) Use
fbsd_info_proc_mappings_header and fbsd_info_proc_mappings_entry.
* fbsd-tdep.c (fbsd_vm_map_entry_flags): Mark static.
(fbsd_info_proc_mappings_header, fbsd_info_proc_mappings_entry):
New functions.
(fbsd_core_info_proc_mappings): Use fbsd_info_proc_mappings_header
and fbsd_info_proc_mappings_header.
* fbsd-tdep.h (fbsd_vm_map_entry_flags): Remove.
(fbsd_info_proc_mappings_header, fbsd_info_proc_mappings_entry):
New.

6 years agogdb/MAINTAINERS: Add Rainer Orth as Solaris maintainer for GDB
Joel Brobecker [Wed, 17 Oct 2018 18:04:14 +0000 (11:04 -0700)]
gdb/MAINTAINERS: Add Rainer Orth as Solaris maintainer for GDB

gdb/ChangeLog:

* MAINTAINERS (Responsible Maintainers): Add Rainer Orth as
Solaris Maintainer.

6 years agoPR23653, ld SIGSEGVs when attempts to link sparc object with x86_64 library
Alan Modra [Tue, 16 Oct 2018 22:47:30 +0000 (09:17 +1030)]
PR23653, ld SIGSEGVs when attempts to link sparc object with x86_64 library

This patch improves dynobj selection.  This allows the testcase in the
PR to proceed further before segfaulting due to other bugs in the
sparc backend.

../ld/ld-new --eh-frame-hdr -m elf_x86_64 -shared -o bug.so.5 bug.o ./libc.so.6 ./crtendS.o
../ld/ld-new: sparc architecture of input file `bug.o' is incompatible with i386:x86-64 output
../ld/ld-new: bug.o: in function `a':
bug.c:(.text+0x4): undefined reference to `_GLOBAL_OFFSET_TABLE_'
../ld/ld-new: bug.c:(.text+0x8): undefined reference to `_GLOBAL_OFFSET_TABLE_'
Segmentation fault

PR 23653
* elflink.c (_bfd_elf_link_create_dynstrtab): Match elf_object_id
too when choosing dynobj.

6 years agoAutomatic date update in version.in
GDB Administrator [Wed, 17 Oct 2018 00:01:28 +0000 (00:01 +0000)]
Automatic date update in version.in

6 years ago[gdb/testsuite] Rewrite catch-follow-exec.exp
Tom de Vries [Thu, 4 Oct 2018 22:04:27 +0000 (00:04 +0200)]
[gdb/testsuite] Rewrite catch-follow-exec.exp

There are two problems with the current catch-follow-exec.exp:
- INTERNAL_GDBFLAGS (containing the datadir setting) is not used
- remote host testing doesn't work

Fix the former by using gdb_spawn_with_cmdline_opts.  Fix the latter by
requiring gdb-native.

Build on x86_64-linux with and without ubsan, and tested.

2018-10-16  Tom de Vries  <tdevries@suse.de>

PR gdb/23730
* gdb.base/catch-follow-exec.c: Add copyright notice.
* gdb.base/catch-follow-exec.exp: Rewrite to use
gdb_spawn_with_cmdline_opts.  Require gdb-native.

6 years agoAArch64: Fix error checking for SIMD udot (by element)
Matthew Malcomson [Tue, 16 Oct 2018 17:49:36 +0000 (18:49 +0100)]
AArch64: Fix error checking for SIMD udot (by element)

Committed on behalf of Matthew Malcomson:

The SIMD UDOT instruction assembly has an unusual operand that selects a single
32 bit element with the mnemonic 4B.
This unusual mnemonic is handled by a special operand qualifier and associated
qualifier data in `aarch64_opnd_qualifiers`.

The current qualifier data describes 4 1-byte elements with the structure
{1, 4, 0x0, "4b", OQK_OPD_VARIANT}
This makes sense, as the instruction does work on 4 1-byte elements, however
some logic in the `operand_general_constraint_met_p` makes assumptions about
the range of index allowed when selecting a SIMD_ELEMENT depending on element
size.
That function reasons that e.g. in order to select a byte-sized element in a 16
byte V register an index must allow selection of one of the 16 elements and
hence its range will be in [0,15].

This reasoning breaks with the above description of a 4 part selection of 1
byte elements and allows an index outside the valid [0,3] range, triggering an
assert later on in the program in `aarch64_ins_reglane`.

vshcmd: > echo 'udot v0.2s, v1.8b, v2.4b[4]' | ../src/binutils-build/gas/as-new -march=armv8.4-a
as-new: ../../binutils-gdb/opcodes/aarch64-asm.c:134: aarch64_ins_reglane: Assertion `reglane_index < 4' failed.
{standard input}: Assembler messages:
{standard input}:1: Internal error (Aborted).
Please report this bug.

This patch changes the operand qualifier data so that it describes a single
32 bit element.
{4, 1, 0x0, "4b", OQK_OPD_VARIANT}
Hence the calculation in `operand_general_constraint_met_p` provides the
correct answer and the usual error checking machinery is used.

vshcmd: > echo 'udot v0.2s, v1.8b, v2.4b[4]' | ../src/binutils-build/gas/as-new -march=armv8.4-a
{standard input}: Assembler messages:
{standard input}:1: Error: register element index out of range 0 to 3 at operand 3 -- `udot v0.2s,v1.8b,v2.4b[4]'

6 years agoSimplify PR23110 PE_DEBUG_DATA size checks
Alan Modra [Tue, 16 Oct 2018 05:59:23 +0000 (16:29 +1030)]
Simplify PR23110 PE_DEBUG_DATA size checks

The negative size check can be rolled into the "exceeds space left in
section" check if that is done using an unsigned comparison.  We know
that "addr - section->vma" is never larger than section->size since
the section is found by find_section_by_vma.

* peXXigen.c (_bfd_XX_bfd_copy_private_bfd_data_common): Simplify
PE_DEBUG_DATA size checks.

6 years agoPR23781, _bfd_pe_bfd_copy_private_bfd_data_common memory leak
Alan Modra [Tue, 16 Oct 2018 04:53:20 +0000 (15:23 +1030)]
PR23781, _bfd_pe_bfd_copy_private_bfd_data_common memory leak

PR 23781
* peXXigen.c (_bfd_XX_bfd_copy_private_bfd_data_common): Free data
before returning.

6 years agoPR23780, assertion abort in function display_raw_attribute
Alan Modra [Tue, 16 Oct 2018 04:09:03 +0000 (14:39 +1030)]
PR23780, assertion abort in function display_raw_attribute

PR 23780
* readelf.c (display_raw_attribute): Correct assertion.

6 years agoPR23769, mixing split-stack and non-split-stack error message
Cherry Zhang [Tue, 16 Oct 2018 03:37:41 +0000 (14:07 +1030)]
PR23769, mixing split-stack and non-split-stack error message

Corrects which file is reported as being split-stack.

PR 23769
* gold.cc (queue_middle_tasks): Correct split-stack error message.

6 years agoRemove unnecessary casts from TUI
Tom Tromey [Sun, 14 Oct 2018 18:50:32 +0000 (12:50 -0600)]
Remove unnecessary casts from TUI

This removes a number of unnecessary casts from the TUI.  Some were
found with -Wuseless-cast (which, I think, can't easily be enabled for
gdb); and some were found by inspection.

Tested by rebuilding on x86-64 Fedora 28.
I'm checking this in.

gdb/ChangeLog
2018-10-15  Tom Tromey  <tom@tromey.com>

* tui/tui.c (strcat_to_buf): Remove casts.
* tui/tui-winsource.c (tui_show_source_line)
(tui_set_is_exec_point_at, tui_line_is_displayed): Remove casts.
* tui/tui-wingeneral.c (tui_refresh_win, box_win): Remove casts.
* tui/tui-windata.c (tui_first_data_item_displayed)
(tui_delete_data_content_windows, tui_erase_data_content)
(tui_display_all_data, tui_display_data_from)
(tui_refresh_data_win, tui_vertical_data_scroll): Remove casts.
* tui/tui-win.c (tui_set_win_height)
(make_invisible_and_set_new_height, parse_scrolling_args): Remove
casts.
* tui/tui-win.c (tui_resize_all): Remove casts.
(tui_scroll_backward_command, tui_set_focus)
(tui_set_tab_width_command): Likewise.
* tui/tui-source.c (tui_vertical_source_scroll): Remove cast.
* tui/tui-regs.c (tui_show_register_group): Remove cast.
* tui/tui-layout.c (tui_set_layout_by_name): Remove cast.
* tui/tui-disasm.c (tui_vertical_disassem_scroll): Remove cast.
* tui/tui-data.c (tui_partial_win_by_name, tui_free_win_content):
Remove casts.

6 years agoAutomatic date update in version.in
GDB Administrator [Tue, 16 Oct 2018 00:00:36 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoRISC-V: Adjust __global_pointer$ value to reduce code size.
Jim Wilson [Mon, 15 Oct 2018 23:00:28 +0000 (16:00 -0700)]
RISC-V: Adjust __global_pointer$ value to reduce code size.

ld/
* emulparams/elf32lriscv-defs.sh (DATA_START_SYMBOLS): New.
(SDATA_START_SYMBOLS): Define __SDATA_BEGIN__.  Don't define
__global_pointer$.
(OTHER_END_SYMBOLS): New.  Define __global_pointer$.
* testsuite/ld-riscv-elf/pcrel-lo-addend-2.d (#ld): Add --no-relax.

6 years agoRe: BFD_INIT_MAGIC
Alan Modra [Mon, 15 Oct 2018 22:31:55 +0000 (09:01 +1030)]
Re: BFD_INIT_MAGIC

I should know better than to introduce the first use of size_t in
bfd.h.

PR 23534
* init.c (bfd_init): Return an unsigned int.
bfd-in2.h: Regenerate.

6 years agoAdd Alan Hayward as AArch64/ARM GDB maintainer
Simon Marchi [Mon, 15 Oct 2018 19:52:03 +0000 (15:52 -0400)]
Add Alan Hayward as AArch64/ARM GDB maintainer

gdb/ChangeLog:

* MAINTAINERS (Responsible Maintainers): Add Alan Hayward as
AArch64/ARM maintainer.

6 years agoBFD_INIT_MAGIC
Alan Modra [Mon, 15 Oct 2018 05:40:27 +0000 (16:10 +1030)]
BFD_INIT_MAGIC

This patch performs a run-time test that a shared libbfd.so has been
compiled with the same size bfd_vma as that of apps using the library.
On a 32-bit host it is easily possible to have one libbfd.so compiled
to support 64-bit targets (or configured with --enable-64-bit-bfd)
while another only supports 32-bit targets.  The two libraries will
have differently sized bfd_vma types, and if the wrong one is loaded
all sorts of weird behaviour might be seen.

bfd/
PR 23534
* init.c (BFD_INIT_MAGIC): Define.
(bfd_init): Return BFD_INIT_MAGIC.
bfd-in2.h: Regenerate.
binutils/
PR 23534
* addr2line.c (main): Exit with fatal error if bfd_init
returns an unexpected value.
* ar.c (main): Likewise.
* dlltool.c (identify_dll_for_implib): Likewise.
* nm.c (main): Likewise.
* objcopy.c (main): Likewise.
* objdump.c (main): Likewise.
* size.c (main): Likewise.
* strings.c (main): Likewise.
* windmc.c (main): Likewise.
* windres.c (main): Likewise.
gas/
PR 23534
* as.c (main): Exit with fatal error if bfd_init returns an
unexpected value.
ld/
PR 23534
* ldmain.c (main): Exit with fatal error if bfd_init returns
an unexpected value.

6 years agoAutomatic date update in version.in
GDB Administrator [Mon, 15 Oct 2018 00:00:54 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoAutomatic date update in version.in
GDB Administrator [Sun, 14 Oct 2018 00:01:07 +0000 (00:01 +0000)]
Automatic date update in version.in

6 years ago_bfd_clear_contents bounds checking
Alan Modra [Sat, 13 Oct 2018 11:33:02 +0000 (22:03 +1030)]
_bfd_clear_contents bounds checking

This PR shows a fuzzed binary triggering a segfault via a bad
relocation in .debug_line.  It turns out that unlike normal
relocations applied to a section, the linker applies those with
symbols from discarded sections via _bfd_clear_contents without
checking that the relocation is within the section bounds.  The same
thing now happens when reading debug sections since commit
a4cd947aca23, the PR23425 fix.

PR 23770
PR 23425
* reloc.c (_bfd_clear_contents): Replace "location" param with
"buf" and "off".  Bounds check "off".  Return status.
* cofflink.c (_bfd_coff_generic_relocate_section): Update
_bfd_clear_contents call.
* elf-bfd.h (RELOC_AGAINST_DISCARDED_SECTION): Likewise.
* elf32-arc.c (elf_arc_relocate_section): Likewise.
* elf32-i386.c (elf_i386_relocate_section): Likewise.
* elf32-metag.c (metag_final_link_relocate): Likewise.
* elf32-nds32.c (nds32_elf_get_relocated_section_contents): Likewise.
* elf32-ppc.c (ppc_elf_relocate_section): Likewise.
* elf32-visium.c (visium_elf_relocate_section): Likewise.
* elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
* elf64-x86-64.c *(elf_x86_64_relocate_section): Likewise.
* libbfd-in.h (_bfd_clear_contents): Update prototype.
* libbfd.h: Regenerate.