93747 Commits

Author SHA1 Message Date
Maciej W. Rozycki
dfdad367e4 MIPS/LD/testsuite: Correct LD emulations for `mips*-*-kfreebsd*-gnu'
Complement commit 86b24e15c45b ("MIPS/LD/testsuite: Correct
comm-data.exp test ABI/emul/endian arrangement") and set LD emulations
correctly for `mips*-*-kfreebsd*-gnu' targets in comm-data.exp, removing
test suite failures:

FAIL: MIPS o32/copyreloc common symbol override test (auxiliary shared object build)
FAIL: MIPS o32/copyreloc common symbol override test
FAIL: MIPS o32/nocopyreloc common symbol override test (auxiliary shared object build)
FAIL: MIPS o32/nocopyreloc common symbol override test

	ld/
	* testsuite/ld-mips-elf/comm-data.exp: Correct support for
	`mips*-*-kfreebsd*-gnu' targets.
2018-04-03 09:18:06 +01:00
Cary Coutant
bce5a025d2 Fix problem where mixed section types can cause internal error during a -r link.
During a -r (or --emit-relocs) link, if two sections had the same name but
different section types, gold would put relocations for both sections into
the same relocation section even though the data sections remained separate.

For .eh_frame sections, when one section is PROGBITS and another is
X86_64_UNWIND, we really should be using the UNWIND section type and
combining the sections anyway.  For other sections, we should be
creating one relocation section for each output data section.

gold/
	PR gold/23016
	* incremental.cc (can_incremental_update): Check for unwind section
	type.
	* layout.h (Layout::layout): Add sh_type parameter.
	* layout.cc (Layout::layout): Likewise.
	(Layout::layout_reloc): Create new output reloc section if data
	section does not already have one.
	(Layout::layout_eh_frame): Check for unwind section type.
	(Layout::make_eh_frame_section): Use unwind section type for .eh_frame
	and .eh_frame_hdr.
	* object.h (Sized_relobj_file::Shdr_write): New typedef.
	(Sized_relobj_file::layout_section): Add sh_type parameter.
	(Sized_relobj_file::Deferred_layout::Deferred_layout): Add sh_type
	parameter.
	* object.cc (Sized_relobj_file::check_eh_frame_flags): Check for
	unwind section type.
	(Sized_relobj_file::layout_section): Add sh_type parameter; pass it
	to Layout::layout.
	(Sized_relobj_file::do_layout): Make local copy of sh_type.
	Force .eh_frame sections to unwind section type.
	Pass sh_type to layout_section.
	(Sized_relobj_file<size, big_endian>::do_layout_deferred_sections):
	Pass sh_type to layout_section.
	* output.cc (Output_section::Output_section): Initialize reloc_section_.
	* output.h (Output_section::reloc_section): New method.
	(Output_section::set_reloc_section): New method.
	(Output_section::reloc_section_): New data member.
	* target.h (Target::unwind_section_type): New method.
	(Target::Target_info::unwind_section_type): New data member.

	* aarch64.cc (aarch64_info): Add unwind_section_type.
	* arm.cc (arm_info, arm_nacl_info): Likewise.
	* i386.cc (i386_info, i386_nacl_info, iamcu_info): Likewise.
	* mips.cc (mips_info, mips_nacl_info): Likewise.
	* powerpc.cc (powerpc_info): Likewise.
	* s390.cc (s390_info): Likewise.
	* sparc.cc (sparc_info): Likewise.
	* tilegx.cc (tilegx_info): Likewise.
	* x86_64.cc (x86_64_info, x86_64_nacl_info): Likewise.

	* testsuite/Makefile.am (pr23016_1, pr23016_2): New test cases.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/testfile.cc: Add unwind_section_type.
	* testsuite/pr23016_1.sh: New test script.
	* testsuite/pr23016_1a.s: New source file.
	* testsuite/pr23016_1b.s: New source file.
	* testsuite/pr23016_2.sh: New test script.
	* testsuite/pr23016_2a.s: New source file.
	* testsuite/pr23016_2b.s: New source file.
2018-04-02 19:07:04 -07:00
GDB Administrator
8849a5e9ed Automatic date update in version.in 2018-04-03 00:00:24 +00:00
Weimin Pan
b39efc483a Add myself as a write-after-approval GDB maintainer. 2018-04-02 16:23:59 -05:00
Joel Brobecker
121ad66c94 Fix merge issues in gdb/ChangeLog and gdb/testsuite/ChangeLog...
... introduced by the previous commit to these files.
Also adjust the date in the new ChangeLog entries (out of date).
2018-04-02 11:34:11 -07:00
Weimin Pan
79f1873171 Fix infinite recursion when printing static member with typedef
The original problem was fixed (see related PR 22242). But using a typedef
as the declared type for a static member variable, as commented in this PR,
is still causing gdb to get into infinite loop when printing the static
member's value. This problem can be reproduced as follows:

% cat t.cc
class A {
    typedef A type;
public:
    bool operator==(const type& other) { return true; }

    static const type INSTANCE;
};

const A A::INSTANCE;

int main() {
    A a;
    if (a == A::INSTANCE) {
        return -1;
    }
    return 0;
}
% g++ -g t.cc
% gdb -ex "start" -ex "p a" a.out

The fix is rather trivial - in cp_print_static_field(), should call
check_typedef() to get the static member's real type and use it to
check whether it's a struct or an array.

As Simon suggested, I've added a new test case to the testsuite
and am passing the original type, not the real type, as argument
to both cp_print_value_fields() and val_print().

Re-tested on both aarch64-linux-gnu and amd64-linux-gnu. No regressions.
2018-04-02 12:53:43 -05:00
Joel Brobecker
3d6b3b8221 gdb/ChangeLog: Fix filenames in a couple of entries 2018-04-02 06:49:57 -07:00
Tom Tromey
09473be85c Change rs6000_ptrace_ldinfo to return a byte_vector
This changes rs6000_ptrace_ldinfo to return a byte_vector.  I think
this points out an existing double-free in
rs6000_xfer_shared_libraries.

Tested by the buildbot.

gdb/ChangeLog
2018-04-01  Tom Tromey  <tom@tromey.com>

	* rs6000-nat.c (rs6000_ptrace_ldinfo): Return a byte_vector.
	(rs6000_xfer_shared_libraries): Update.
2018-04-01 20:28:51 -06:00
GDB Administrator
a9f4c2f56f Automatic date update in version.in 2018-04-02 00:00:44 +00:00
Simon Marchi
ec1f2d91e0 Remove char_ptr typedef
Now that all instances of VEC(char_ptr) are gone, we can remove the
typedef.  There is just one usage left, that is trivial to replace.

Tested by rebuilding on an enable-targets=all build.

gdb/ChangeLog:

	* common/gdb_vecs.h (char_ptr): Remove.
	* tracepoint.c (encode_actions_1): Remove usage of char_ptr.
2018-04-01 14:23:17 -04:00
GDB Administrator
a16ffec0da Automatic date update in version.in 2018-04-01 00:00:56 +00:00
GDB Administrator
dc20d41409 Automatic date update in version.in 2018-03-31 00:00:27 +00:00
Simon Marchi
d8611974cf Remove usage of VEC(char_ptr) in gdbscm_parse_function_args
This is a straightforward replacement, no change in behavior are
intended/expected.

This is the last usage of VEC(char_ptr), so it can now be removed.

gdb/ChangeLog:

	* guile/scm-utils.c (gdbscm_parse_function_args): Replace VEC
	with std::vector.
	* common/gdb_vecs.h (DEF_VEC_P (char_ptr)): Remove.
2018-03-30 17:18:56 -04:00
Simon Marchi
17d08cd413 Use std::vector and std::string instead of VEC(char_ptr) in gdbserver tdesc
This is a straightforward replacement, no change in behavior are
intended/expected.

gdb/gdbserver/ChangeLog:

	* tdesc.h (struct target_desc) <features>: Change type to
	std::vector<std::string>.
	* tdesc.c (target_desc::~target_desc): Adjust to std::vector
	changes.
	(tdesc_get_features_xml): Likewise.
	(tdesc_create_feature): Likewise.
2018-03-30 17:18:55 -04:00
Simon Marchi
a18ba4e4c9 Use std::vector in uploaded_tp
This patch changes the VEC(char_ptr) fields in uploaded_tp to use
std::vector<char *>.  At first, I wanted to creep in more changes, like
using std::string, but it was making the patch too big and less focused,
so I decided to keep it to just that.

It also looks like the strings in those vectors are never free'd.  If
so, we can fix that in another patch.

gdb/ChangeLog:

	* tracepoint.h (struct uploaded_tp): Initialize fields.
	<actions, step_actions, cmd_strings>: Change type to
	std::vector<char *>.
	* tracepoint.c (get_uploaded_tp): Allocate with new.
	(free_uploaded_tps): Free with delete.
	(parse_tracepoint_definition): Adjust to std::vector change.
	* breakpoint.c (read_uploaded_action): Likewise.
	(create_tracepoint_from_upload): Likewise.
	* ctf.c (ctf_write_uploaded_tp): Likewise.
	(SET_ARRAY_FIELD): Likewise.
	* tracefile-tfile.c (tfile_write_uploaded_tp): Likewise.
2018-03-30 17:18:54 -04:00
Tom Tromey
a7961323e2 Remove some cleanups from solib-svr4.c
This removes a few cleanups from solib-svr4.c in a straightforward
way.

gdb/ChangeLog
2018-03-30  Tom Tromey  <tom@tromey.com>

	* solib-svr4.c (lm_info_read): Use gdb::byte_vector.  Return
	std::unique_ptr.
	(svr4_keep_data_in_core): Update.
	(svr4_read_so_list): Update.
2018-03-30 13:22:58 -06:00
Tom Tromey
e83e4e2402 Change target_read_string to use unique_xmalloc_ptr
This changes the out parameter of target_read_string to be a
unique_xmalloc_ptr.  This avoids a cleanup and sets the stage for more
cleanup removals.

This patch also removes a seemingly needless alloca from
print_subexp_standard.

gdb/ChangeLog
2018-03-30  Tom Tromey  <tom@tromey.com>

	* windows-nat.c (handle_output_debug_string, handle_exception):
	Update.
	* target.h (target_read_string): Update.
	* target.c (target_read_string): Change "string" to
	unique_xmalloc_ptr.
	* solib-svr4.c (open_symbol_file_object, svr4_read_so_list):
	Update.
	* solib-frv.c (frv_current_sos): Update.
	* solib-dsbt.c (dsbt_current_sos): Update.
	* solib-darwin.c (darwin_current_sos): Update.
	* linux-thread-db.c (inferior_has_bug): Update.
	* expprint.c (print_subexp_standard) <case OP_OBJC_MSGCALL>:
	Update.  Remove alloca.
	* ada-lang.c (ada_main_name): Update.
2018-03-30 13:22:58 -06:00
Tom Tromey
263db9a1f4 Remove free_dwo_file_cleanup
This removes free_dwo_file_cleanup, the last cleanup in dwarf2read.c.
This is replaced with a unique_ptr; which, despite the fact that a
dwo_file is obstack-allocated, seemed like the best fit.

gdb/ChangeLog
2018-03-30  Tom Tromey  <tom@tromey.com>

	* dwarf2read.c (struct free_dwo_file_cleanup_data): Remove.
	(struct dwo_file_deleter): New.
	(dwo_file_up): New typedef.
	(open_and_init_dwo_file): Use dwo_file_up.
	(free_dwo_file_cleanup): Remove.
2018-03-30 13:15:58 -06:00
Tom Tromey
5dafb3d176 Remove parameter from free_dwo_file
The objfile parameter to free_dwo_file is unused, so remove it.

gdb/ChangeLog
2018-03-30  Tom Tromey  <tom@tromey.com>

	* dwarf2read.c (free_dwo_file): Remove "objfile" parameter.
	(free_dwo_file_cleanup, free_dwo_file_from_slot): Update.
2018-03-30 13:15:57 -06:00
Tom Tromey
11ed8cada6 Remove free_cached_comp_units cleanups
This changes free_cached_comp_units from a cleanup function to an RAII
class.

gdb/ChangeLog
2018-03-30  Tom Tromey  <tom@tromey.com>

	* dwarf2read.c (class free_cached_comp_units): New class.
	(dw2_instantiate_symtab, dwarf2_build_psymtabs_hard): Use it.
	(free_cached_comp_units): Remove function.
2018-03-30 13:15:57 -06:00
Tom Tromey
9ae79dac31 Remove make_cleanup_unpush_target
This removes make_cleanup_unpush_target, replacing it with a
unique_ptr.  This may seem odd, because the object in question is not
actually freed, but unique_ptr provided the necessary functionality.

Tested by the buildbot.

gdb/ChangeLog
2018-03-30  Tom Tromey  <tom@tromey.com>

	* utils.h (make_cleanup_unpush_target): Remove.
	* inf-ptrace.c (struct target_unpusher): New.
	(target_unpush_up) New typedef.
	(inf_ptrace_create_inferior, inf_ptrace_attach): Use
	target_unpush_up.
	* utils.c (do_unpush_target, make_cleanup_unpush_target): Remove.
2018-03-30 13:10:42 -06:00
Peter Bergner
f2ab4b4206 Make power8 the default cpu when assembling for 64-bit little endian targets.
gas/
	PR binutils/23013
	* config/tc-ppc.c (ppc_set_cpu): Select appropriate cpu when ppc_obj64
	and little endian.
2018-03-30 08:33:27 -05:00
GDB Administrator
f7c486b165 Automatic date update in version.in 2018-03-30 00:00:36 +00:00
Maciej W. Rozycki
75def2abc3 PR binutils/22875: MIPS: Remove duplicate unsupported relocation processing
Remove a duplicate `unsupported relocation type' message and the setting
of the `bfd_error_bad_value' error from `mips_elf32_rtype_to_howto',
added with commit f3185997ac09 ("PR 22875: Stop strip corrupting unknown
relocs"), <https://sourceware.org/ml/binutils/2018-02/msg00445.html>.
This message is already produced and the `bfd_error_bad_value' error set
by `mips_elf32_rtype_to_howto' before a NULL howto is returned, so there
is no need to repeat these actions here.

	bfd/
	* elf32-mips.c (mips_info_to_howto_rel): Remove the calls to
	`_bfd_error_handler' and to set the `bfd_error_bad_value' error.
2018-03-29 14:10:37 +01:00
GDB Administrator
515d75a486 Automatic date update in version.in 2018-03-29 00:00:32 +00:00
Maciej W. Rozycki
8b6a949ae5 BFD/PA: Remove ATTRIBUTE_UNUSED from `elf_hppa_info_to_howto_rel'
Remove ATTRIBUTE_UNUSED annotation from the `abfd' parameter in
`elf_hppa_info_to_howto' now that commit f3185997ac09 ("PR 22875: Stop
strip corrupting unknown relocs"),
<https://sourceware.org/ml/binutils/2018-02/msg00445.html>, made it
used.

	bfd/
	* elf-hppa.h (elf_hppa_info_to_howto_rel): Remove
	ATTRIBUTE_UNUSED from `abfd'.
2018-03-28 22:42:17 +01:00
Maciej W. Rozycki
d81270c369 BFD/PA: Correct formatting in `elf_hppa_info_to_howto_rel'
Wrap the `_bfd_error_handler' call to fit in 80 columns, fixing commit
e8f5af786c76 ("Use standardized error message for unrecognized relocs.").

	bfd/
	* elf-hppa.h (elf_hppa_info_to_howto_rel): Correct
	`_bfd_error_handler' call formatting.
2018-03-28 22:42:17 +01:00
Maciej W. Rozycki
60dceb8d3b MIPS/BFD: Call `mips_elf32_rtype_to_howto' directly with o32 (ChangeLog)
Correct ChangeLog date for commit 8205a328f8b8 ("MIPS/BFD: Call
`mips_elf32_rtype_to_howto' directly with o32").
2018-03-28 22:42:17 +01:00
Cary Coutant
24538276c6 Use top-level config support for enabling plugins.
Also recognizes --plugin options when plugins are disabled.

2018-03-28  Cary Coutant  <ccoutant@gmail.com>

gold/
	PR gold/21423
	PR gold/22500
	* configure.ac: Call AC_USE_SYSTEM_EXTENSIONS.
	Replace check for --enable-plugins with AC_PLUGINS.
	* options.cc (parse_plugin, parse_plugin_opt): Remove #ifdef.
	(General_options::finalize): Check if plugins enabled.
	* options.h (--plugin, --plugin-opt): Define even if plugins not
	enabled.
	* Makefile.in: Regenerate.
	* aclocal.m4: Regenerate.
	* configure: Regenerate.
	* testsuite/Makefile.in: Regenerate.
2018-03-28 14:02:41 -07:00
Maciej W. Rozycki
8205a328f8 MIPS/BFD: Call `mips_elf32_rtype_to_howto' directly with o32
Call `mips_elf32_rtype_to_howto' directly rather than via the
`->elf_backend_mips_rtype_to_howto' method in the o32 backend,
complementing commit 861fb55ab50a ("Defer allocation of R_MIPS_REL32 GOT
slots"), <https://sourceware.org/ml/binutils/2008-08/msg00096.html>, and
reverting the change to `mips_info_to_howto_rel' originally made with
commit 0a44bf6950b3 ("mips-vxworks support"),
<https://sourceware.org/ml/binutils/2006-03/msg00179.html>.

With `mips_vxworks_rtype_to_howto' gone there is a single backend method
used across all o32 targets, so there in no need for the indirection and
the associated extra cost.  This also makes the o32 backend consistent
with the n32 and n64 backends.

	bfd/
	* elf32-mips.c (mips_info_to_howto_rel): Call
	`mips_elf32_rtype_to_howto' directly rather than via
	`->elf_backend_mips_rtype_to_howto'.
2018-03-28 21:37:37 +01:00
Renlin Li
e04ef02299 [2/2][LD][AARCH64]Add BFD_RELOC_AARCH64_TLSLE_LDST8/16/32/64_TPREL_LO12 support in LD.
This patch adds the following relocation support into binutils bfd linker.
BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12,
BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12_NC,
BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12,
BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12_NC,
BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12,
BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12_NC,
BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12,
BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12_NC.

Those relocations includes both ip64 and ilp32 variant.
2018-03-28 18:08:51 +01:00
Renlin Li
84f1b9fb08 [1/2][GAS][AARCH64]Add BFD_RELOC_AARCH64_TLSLE_LDST8/16/32/64_TPREL_LO12 support in GAS.
This patch adds the following relocation support into binutils gas.
BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12,
BFD_RELOC_AARCH64_TLSLE_LDST16_TPREL_LO12_NC,
BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12,
BFD_RELOC_AARCH64_TLSLE_LDST32_TPREL_LO12_NC,
BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12,
BFD_RELOC_AARCH64_TLSLE_LDST64_TPREL_LO12_NC,
BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12,
BFD_RELOC_AARCH64_TLSLE_LDST8_TPREL_LO12_NC.

Those relocations includes both ip64 and ilp32 variant.
2018-03-28 18:03:55 +01:00
Cary Coutant
e82e6b2b19 Add support for R_AARCH64_TLSLE_LDST8_TPREL_LO12, etc.
elfcpp/
	PR gold/22969
	* aarch64.h: Fix spelling of R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC.
gold/
	PR gold/22969
	* aarch64-reloc.def: Add TLSLE_LDST* relocations.
	* aarch64.cc (Target_aarch64::optimize_tls_reloc): Likewise.
	(Target_aarch64::Scan::local): Likewise.
	(Target_aarch64::Scan::global): Likewise.
	(Target_aarch64::Relocate::relocate): Likewise.
	(Target_aarch64::Relocate::relocate_tls): Likewise.
2018-03-28 09:10:25 -07:00
Jan Beulich
c39e5b2671 x86: drop VecESize
It again can be inferred from other information.

The vpopcntd templates all need to have Dword added to their memory
operands; the lack thereof was actually a bug preventing certain Intel
syntax code to assemble, so test cases get extended.
2018-03-28 14:25:07 +02:00
Jan Beulich
8e6e0792d1 x86: convert broadcast insn attribute to boolean
The (only) valid broadcast type for an insn can be inferred from other
information.
2018-03-28 14:24:05 +02:00
Jan Beulich
9f123b911e x86: fold to-scalar-int conversion insns 2018-03-28 14:22:56 +02:00
Jan Beulich
9646c87b5a x86: don't show suffixes for to-scalar-int conversion insns
In the course of folding their patterns (possible now that the pointless
and partly even bogus VecESize are no longer in the way) I've noticed
that vcvt*2usi, other than their vcvt*2si counterparts, don't allow for
any suffixes. As that is supposedly intentional, make the disassembler
consistently omit suffixes for all to-scalar-int conversion insns.
2018-03-28 14:22:00 +02:00
Eric Botcazou
f8745e1cd1 PR ld/22972 on SPARC.
This is a regression for the corner case of a hidden symbol in a PIC/PIE
binary which is subject to both a new-style GOTDATA relocation and an
old-style GOT relocation.  In this case, depending  on the link order,
the R_SPARC_RELATIVE dynamic relocation for the GOT slot needed because
of the old-style relocation can be replaced with R_SPARC_NONE coming
from the GOTDATA relocation.

The fix simply records whether an old-style GOT relocation is seen for a
symbol and prevents the R_SPARC_NONE from being generated in this case.

bfd/
	* elfxx-sparc.c (struct _bfd_sparc_elf_link_hash_entry): Add new flag
	has_old_style_got_reloc.
	(_bfd_sparc_elf_check_relocs) <GOT relocations>: Set it for old-style
	relocations.  Fix a couple of long lines.
	(_bfd_sparc_elf_relocate_section) <R_SPARC_GOTDATA_OP>: Do not generate
	a R_SPARC_NONE for the GOT slot if the symbol is also subject to
	old-style GOT relocations.
ld/
	* testsuite/ld-sparc/sparc.exp: Add test for mixed GOTDATA/GOT relocs.
	* testsuite/ld-sparc/gotop-hidden.c: New file.
	* testsuite/ld-sparc/got-hidden32.s: Likewise.
	* testsuite/ld-sparc/got-hidden64.s: Likewise.
	* testsuite/ld-sparc/pass.out: Likewise.
2018-03-28 12:17:15 +02:00
Nick Clifton
c8d59609b1 Enhance the AARCH64 assembler to support LDFF1xx instructions which use REG+REG addressing with an assumed offset register.
PR 22988
opcode	* opcode/aarch64.h (enum aarch64_opnd): Add
	AARCH64_OPND_SVE_ADDR_R.

opcodes	* aarch64-tbl.h (aarch64_opcode_table): Add entries for LDFF1xx
	instructions with only a base address register.
	* aarch64-opc.c (operand_general_constraint_met_p): Add code to
	handle AARHC64_OPND_SVE_ADDR_R.
	(aarch64_print_operand): Likewise.
	* aarch64-asm-2.c: Regenerate.
	* aarch64_dis-2.c: Regenerate.
	* aarch64-opc-2.c: Regenerate.

gas	* config/tc-aarch64.c (parse_operands): Add code to handle
	AARCH64_OPN_SVE_ADDR_R.
	* testsuite/gas/aarch64/sve.s: Add tests for LDFF1xx instructions
	with an assumed XZR offset address register.
	* testsuite/gas/aarch64/sve.d: Update expected disassembly.
2018-03-28 09:44:45 +01:00
Roland McGrath
9c75b45645 gold/testsuite: Fix bad regexp in split_x86_64.sh
gold/
	* testsuite/split_x86_64.sh: Fix bad regexp.
2018-03-27 18:51:22 -07:00
GDB Administrator
bbcd71b480 Automatic date update in version.in 2018-03-28 00:00:30 +00:00
Tom Tromey
5aa892761c Remove cleanups from prompt_for_continue
This removes the cleanups from prompt_for_continue by the use of
unique_xmalloc_ptr.

gdb/ChangeLog
2018-03-27  Tom Tromey  <tom@tromey.com>

	* utils.c (prompt_for_continue): Use unique_xmalloc_ptr.
2018-03-27 10:46:43 -06:00
Tom Tromey
1dbeed45b6 Remove cleanups from gdb_readline_wrapper
This removes some cleanups from gdb_readline_wrapper by changing the
existing gdb_readline_wrapper_cleanup struct to have a constructor and
destructor, and then changing gdb_readline_wrapper to simply
instantiate it on the stack.

gdb/ChangeLog
2018-03-27  Pedro Alves  <palves@redhat.com>
	    Tom Tromey  <tom@tromey.com>

	* top.c (class gdb_readline_wrapper_cleanup): Add constructor,
	destructor.  Now a class.
	(gdb_readline_wrapper_cleanup): Remove function.
	(gdb_readline_wrapper): Remove cleanups.
2018-03-27 10:46:42 -06:00
Tom Tromey
c819b2c0b2 C++-ify typedef hash
This changes the typedef_hash_table structure to be a C++ class.  It
adds constructors and destructors and changes some functions to be
methods of the class.  Then it changes the various users of this class
to adapt.  This allows for the removal of some cleanups.

Regression tested by the buildbot.

gdb/ChangeLog
2018-03-27  Tom Tromey  <tom@tromey.com>

	* typeprint.h (struct type_print_options) <local_typedefs,
	global_typedefs>: Remove "struct" keyword.
	(class typedef_hash_table): New class.
	(recursively_update_typedef_hash, add_template_parameters)
	(create_typedef_hash, free_typedef_hash, copy_typedef_hash)
	(find_typedef_in_hash): Don't declare.
	* typeprint.c (struct typedef_hash_table): Move to typeprint.h.
	(typedef_hash_table::recursively_update): Rename from
	recursively_update_typedef_hash.  Now a member.
	(typedef_hash_table::add_template_parameters): Rename from
	add_template_parameters.  Now a member.
	(typedef_hash_table::typedef_hash_table): Now a constructor;
	rename from create_typedef_hash.
	(typedef_hash_table::~typedef_hash_table): Now a destructor;
	rename from free_typedef_hash.
	(do_free_typedef_hash, make_cleanup_free_typedef_hash)
	(do_free_global_table): Remove.
	(typedef_hash_table::typedef_hash_table): New constructor; renamed
	from copy_type_recursive.
	(create_global_typedef_table): Remove.
	(typedef_hash_table::find_global_typedef): Now a member of
	typedef_hash_table.
	(typedef_hash_table::find_typedef): Rename from
	find_typedef_in_hash; now a member.
	(whatis_exp): Update.
	* extension.h (struct ext_lang_type_printers): Add constructor and
	destructor.
	(start_ext_lang_type_printers, free_ext_lang_type_printers): Don't
	declare.
	* extension.c (ext_lang_type_printers::ext_lang_type_printers):
	Now a constructor; rename from start_ext_lang_type_printers.
	(ext_lang_type_printers): Now a destructor; rename from
	free_ext_lang_type_printers.
	* c-typeprint.c (find_typedef_for_canonicalize, c_print_type_1):
	Update.
	(c_type_print_base_struct_union): Update.  Remove cleanups.
2018-03-27 10:09:25 -06:00
Tom Tromey
608219fb29 Include <cmath> in dwarf-index-write.c
On x86-64 Fedora 26, when building with the system gcc, I get:

../../binutils-gdb/gdb/dwarf-index-write.c: In member function ‘void debug_names::build()’:
../../binutils-gdb/gdb/dwarf-index-write.c:705:13: error: ‘pow’ is not a member of ‘std’

There are actually more messages, but this is sufficient to show the
problem.

The fix is to include <cmath>.

I'm checking this in as obvious.  Tested by building.

gdb/ChangeLog
2018-03-27  Tom Tromey  <tom@tromey.com>

	* dwarf-index-write.c: Include <cmath>.
2018-03-27 08:55:13 -06:00
Joel Brobecker
3fcded8f30 set varsize-limit: New GDB setting for maximum dynamic object size
This is a command we somehow forgot to contribute at the time the Ada
language was first contributed to the FSF. This command allows
the user to change the maximum size we allow when reading memory
from dynamic objects (the default is 65536 bytes).

At the moment, this limit is only used by Ada, and so the implementation
is kept inside ada-lang.c. However, it is conceivable that other language
might want to use it also to handle the same kind of issues; for instance,
this might be useful when handling dynamic types in C. So the name
of the setting was made language-neutral, to allow for this.

Note that an alias for "set var" needs to be introduced as well.
We are not adding a test for that, since this is a feature that is
already exercized by numerous existing tests.

gdb/ChangeLog

        * NEWS: Add entry describing new "set|show varsize-limit" command.
        * ada-lang.c (_initialize_ada_language): Add "set/show varsize-limit"
        command.
        * printcmd.c (_initialize_printcmd): Add "set var" alias of
        "set variable".

gdb/doc/ChangeLog:

        * gdb.texinfo (Ada Settings): New subsubsection.

gdb/testsuite/ChangeLog:

        * gdb.ada/varsize_limit: New testcase.

Tested on x86_64-linux.
2018-03-27 10:17:45 -04:00
Simon Marchi
cd4fb1b2ff Move DWARF index-related things to a separate file
I want to add a DWARF index-related feature (automatically produce index
files when loading objfiles in GDB), but I don't want to add many
hundred lines to the already too big dwarf2read.c.  I thought it would
be a logical split to move everything related to the DWARF index to its
own file.

I first tried to move everything that reads and writes DWARF indices to
a separate file, but found that the "read" part is a little bit
entangled with the rest of dwarf2read.c, so the line is hard to draw
about where to split.  The write part is quite isolated though, so I
moved this part to a new file, dwarf-index-write.c.  Some things are
necessary to both reading and writing indices, so I placed them in
dwarf-index-common.{c,h}.  The idea would be to have a
dwarf-index-read.c eventually that would use it too (for now that code
is still in dwarf2read.c).

This required moving some things to a new dwarf2read.h header, so they
can be read by the code that writes the index.

The patch is big in number of lines, but it's all existing code being
moved around.  The only changes are that some functions are not static
anymore, a declaration is added in a .h file, and therefore the comment
is moved there.

I built-tested it with a little and big endian target.

This patch is also available on the users/simark/split-dwarf2read
branch.

gdb/ChangeLog:

	* Makefile.in (COMMON_SFILES): Add dwarf-index-common.c and
	dwarf-index-write.c
	(HFILES_NO_SRCDIR): Add dwarf-index-common.h and dwarf2read.h.
	* dwarf-index-common.c: New file.
	* dwarf-index-common.h: New file.
	* dwarf-index-write.c: New file.
	* dwarf2read.c: Include dwarf2read.h and dwarf-index-common.h.
	(struct dwarf2_section_info): Move from here.
	(dwarf2_section_info_def): Likewise.
	(DEF_VEC_O (dwarf2_section_info_def)): Likewise.
	(offset_type): Likewise.
	(DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE): Likewise.
	(DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE): Likewise.
	(DW2_GDB_INDEX_CU_SET_VALUE): Likewise.
	(byte_swap): Likewise.
	(MAYBE_SWAP): Likewise.
	(dwarf2_per_cu_ptr): Likewise.
	(DEF_VEC_P (dwarf2_per_cu_ptr)): Likewise.
	(struct tu_stats): Likewise.
	(struct dwarf2_per_objfile): Likewise.
	(struct dwarf2_per_cu_data): Likewise.
	(struct signatured_type): Likewise.
	(sig_type_ptr): Likewise.
	(DEF_VEC_P (sig_type_ptr)): Likewise.
	(INDEX4_SUFFIX): Likewise.
	(INDEX5_SUFFIX): Likewise.
	(DEBUG_STR_SUFFIX): Likewise.
	(dwarf2_read_section): Make non-static.
	(mapped_index_string_hash): Move from here.
	(dwarf5_djb_hash): Likewise.
	(file_write): Likewise.
	(class data_buf): Likewise.
	(struct symtab_index_entry): Likewise.
	(struct mapped_symtab): Likewise.
	(find_slot): Likewise.
	(hash_expand): Likewise.
	(add_index_entry): Likewise.
	(uniquify_cu_indices): Likewise.
	(class c_str_view): Likewise.
	(class c_str_view_hasher): Likewise.
	(class vector_hasher): Likewise.
	(write_hash_table): Likewise.
	(psym_index_map): Likewise.
	(struct addrmap_index_data): Likewise.
	(add_address_entry): Likewise.
	(add_address_entry_worker): Likewise.
	(write_address_map): Likewise.
	(symbol_kind): Likewise.
	(write_psymbols): Likewise.
	(struct signatured_type_index_data): Likewise.
	(write_one_signatured_type): Likewise.
	(recursively_count_psymbols): Likewise.
	(recursively_write_psymbols): Likewise.
	(class debug_names): Likewise.
	(check_dwarf64_offsets): Likewise.
	(psyms_seen_size): Likewise.
	(write_gdbindex): Likewise.
	(write_debug_names): Likewise.
	(assert_file_size): Likewise.
	(write_psymtabs_to_index): Likewise.
	(save_gdb_index_command): Likewise.
	(_initialize_dwarf2_read): Don't register the "save gdb-index"
	command.
	* dwarf2read.h: New file.
2018-03-27 10:07:47 -04:00
Joel Brobecker
59cc4834e5 problem looking up some symbols when they have a linkage name
This patch fixes a known failure in gdb.ada/maint_with_ada.exp
(maintenance check-psymtabs). Another way to witness the same
issue is by considering the following Ada declarations...

   type Wrapper is record
      A : Integer;
   end record;
   u00045 : constant Wrapper := (A => 16#060287af#);
   pragma Export (C, u00045, "symada__cS");

... which declares a variable name "u00045" but with a linkage
name which is "symada__cS". This variable is a record with one
component, the Ada equivalent of a struct with one field in C.
Trying to print that variable's value currently yields:

    (gdb) p /x <symada__cS>
    'symada(char, signed)' has unknown type; cast it to its declared type

This indicates that GDB was only able to find the minimal symbol,
but not the full symbol. The expected output is:

    (gdb) print /x <symada__cS>
    $1 = (a => 0x60287af)

The error message gives a hint about what's happening: We processed
the symbol through gdb_demangle, which in the case of this particular
symbol name, ends up matching the C++ naming scheme. As a result,
the demangler transforms our symbol name into 'symada(char, signed)',
thus breaking Ada lookups.

This patch fixes the issue by first introducing a new language_defn
attribute called la_store_sym_names_in_linkage_form_p, which is a boolean
to be set to true for the few languages that do not want their symbols
to have their names stored in demangled form, and false otherwise.
We then use this language attribute to skip the call to gdb_demangle
for all languages whose la_store_sym_names_in_linkage_form_p is true.

In terms of the selection of languages for which the new attribute
is set to true, the selection errs on the side of preserving the
existing behavior, and only changes the behavior for the languages
where we are certain storing symbol names in demangling form is not
needed. It is conceivable that other languages might be in the same
situation, but I not knowing in detail the symbol name enconding
strategy, I decided to play it safe and let other language maintainers
potentially adjust their language if it makes sense to do so.

gdb/ChangeLog:

        PR gdb/22670
        * dwarf2read.c (dwarf2_physname): Do not return the demangled
        symbol name if the CU's language stores symbol names in linkage
        format.
        * language.h (struct language_defn)
        <la_store_sym_names_in_linkage_form_p>: New field.  Adjust
        all instances of this struct.

gdb/testsuite/ChangeLog:

        * gdb.ada/maint_with_ada.exp: Remove PR gdb/22670 setup_kfail.

        * gdb.ada/notcplusplus: New testcase.

        * gdb.base/c-linkage-name.c: New file.
        * gdb.base/c-linkage-name.exp: New testcase.

Tested on x86_64-linux.
This also passes AdaCore's internal GDB testsuite.
2018-03-27 09:57:16 -04:00
Tom Tromey
675015399b Remove verbose code from backtrace command
In https://sourceware.org/ml/gdb-patches/2017-06/msg00741.html,
Pedro asks:

> Doesn't the "info verbose on" bit affect frame filters too?

The answer is that yes, it could.  However, it's not completely
effective, because the C code can't guess how many frames might need
to be unwound to satisfy the request -- a frame filter will request as
many frames as it needs.

Also, I tried removing this code from backtrace, and I think the
result is better without it.  In particular, now the expansion line
occurs just before the frame that caused the expansion, like:

    (gdb) bt no-filters
    #0  0x00007ffff576cecd in poll () from /lib64/libc.so.6
    Reading in symbols for ../../binutils-gdb/gdb/event-loop.c...done.
    #1  0x00000000007ecc33 in gdb_wait_for_event (block=1)
	at ../../binutils-gdb/gdb/event-loop.c:772
    #2  0x00000000007ec006 in gdb_do_one_event ()
	at ../../binutils-gdb/gdb/event-loop.c:347
    #3  0x00000000007ec03e in start_event_loop ()
	at ../../binutils-gdb/gdb/event-loop.c:371
    Reading in symbols for ../../binutils-gdb/gdb/main.c...done.
    #4  0x000000000086693d in captured_command_loop (
	Reading in symbols for ../../binutils-gdb/gdb/exceptions.c...done.
    data=0x0) at ../../binutils-gdb/gdb/main.c:325

So, I am proposing this patch to simply remove this code.

gdb/ChangeLog
2018-03-26  Tom Tromey  <tom@tromey.com>

	* stack.c (backtrace_command_1): Remove verbose code.
2018-03-26 21:57:15 -06:00
Tom Tromey
76c939acfd Simplify exception handling in py-framefilter.c
This patch changes py-framefilter.c as suggested by Pedro in:
https://sourceware.org/ml/gdb-patches/2017-06/msg00748.html

In particular, gdb exceptions are now caught at the outermost layer,
rather than in each particular function.  This simplifies much of the
code.

gdb/ChangeLog
2018-03-26  Tom Tromey  <tom@tromey.com>

	* python/py-framefilter.c (py_print_type): Don't catch
	exceptions.  Return void.
	(py_print_value): Likewise.
	(py_print_single_arg): Likewise.
	(enumerate_args): Don't catch exceptions.
	(py_print_args): Likewise.
	(py_print_frame): Likewise.
	(gdbpy_apply_frame_filter): Catch exceptions here.
2018-03-26 21:57:14 -06:00