Commit Graph

90368 Commits

Author SHA1 Message Date
GDB Administrator
35387fdec5 Automatic date update in version.in 2017-05-03 00:00:41 +00:00
Maciej W. Rozycki
82d808edbc MIPS16/GAS: Fix absolute references with PC-relative synthetic instructions
Complement commit 88a7ef1689 ("MIPS16/GAS: Restore unsupported
relocation diagnostics") and also propagate constant expressions, either
already reduced from absolute symbol references or created from literals
in the first place, used as a PC-relative operand with the MIPS16 LA,
LW, DLA and LD synthetic instructions to relaxation, matching the way
forward absolute symbol references have been handled as from the commit
referred and letting relaxation produce any necessary relocations, if
possible, for the absolute value requested to be reproduced at the run
time.

Call `symbol_append' for any expression symbol created for the purpose
of MIPS16 relaxation as with constant expressions now propagated from
earlier on such symbols may make it through and have R_MIPS16_PC16_S1
relocations emitted against, and therefore need to appear in the symbol
table produced.

	gas/
	* config/tc-mips.c (append_insn): Call `symbol_append' for any
	expression symbol created for MIPS16 relaxation.
	(match_mips16_insn): Don't encode a constant value as an
	immediate with a PC-relative operand.

	* testsuite/gas/mips/mips16-pcrel-absolute-1.d: New test.
	* testsuite/gas/mips/mips16-branch-absolute-1.d: New test.
	* testsuite/gas/mips/mips16-branch-absolute-2.d: New test.
	* testsuite/gas/mips/mips16-branch-absolute-addend-1.d: New
	test.
	* testsuite/gas/mips/mips16-branch-absolute-n32-1.d: New test.
	* testsuite/gas/mips/mips16-branch-absolute-n32-2.d: New test.
	* testsuite/gas/mips/mips16-branch-absolute-addend-n32-1.d: New
	test.
	* testsuite/gas/mips/mips16-branch-absolute-n64-1.d: New test.
	* testsuite/gas/mips/mips16-branch-absolute-n64-2.d: New test.
	* testsuite/gas/mips/mips16-branch-absolute-addend-n64-1.d: New
	test.
	* testsuite/gas/mips/mips16-pcrel-absolute-1.l: New stderr
	output.
	* testsuite/gas/mips/mips16-pcrel-absolute-1.s: New test source.
	* testsuite/gas/mips/mips16-branch-absolute-1.s: New test
	source.
	* testsuite/gas/mips/mips16-branch-absolute-2.s: New test
	source.
	* testsuite/gas/mips/mips16-branch-absolute-addend-1.s: New test
	source.
	* testsuite/gas/mips/mips.exp: Run the new tests.

	ld/
	* testsuite/ld-mips-elf/mips16-branch-absolute-1.d: New test.
	* testsuite/ld-mips-elf/mips16-branch-absolute-2.d: New test.
	* testsuite/ld-mips-elf/mips16-branch-absolute-addend-1.d: New
	test.
	* testsuite/ld-mips-elf/mips16-branch-absolute-n32-1.d: New
	test.
	* testsuite/ld-mips-elf/mips16-branch-absolute-n32-2.d: New
	test.
	* testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32-1.d:
	New test.
	* testsuite/ld-mips-elf/mips16-branch-absolute-n64-1.d: New
	test.
	* testsuite/ld-mips-elf/mips16-branch-absolute-n64-2.d: New
	test.
	* testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64-1.d:
	New test.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
2017-05-03 00:15:56 +01:00
H.J. Lu
3d8505928a x86: Add -Wl,--no-as-needed to some TLS tests
* testsuite/ld-i386/tls.exp: Add -Wl,--no-as-needed to
	"TLS without PLT (1)" and "TLS without PLT (3)".
	* testsuite/ld-x86-64/tls.exp: Add -Wl,--no-as-needed to
	to "TLS without PLT (3)".
2017-05-02 16:01:39 -07:00
Michael Clark
43e379d74c RISC-V: Change CALL macro to use ra as the temporary address register
e.g.

    1:  auipc ra, %pcrel_hi(symbol)
        jalr  ra, %pcrel_lo(1b)(ra)

The use of ra instead of t1 for address construction provides an
opportunity for a microarchitecture to elide the write of the
destination address, and instead read the target address as an
immediate spread across the fused auipc+jalr pair. The link
register ra in the jalr overwrites the target address temporary.

2017-05-01  Michael Clark  <michaeljclark@mac.com>

	* riscv-opc.c (riscv_opcodes) <call>: Use RA not T1 as a temporary
	register.
2017-05-02 15:19:07 -07:00
Palmer Dabbelt
763a5fa4f3 RISC-V: Allow 32-bit BFD to handle 64-bit objects
We've been telling people that the riscv32-* and riscv64-* toolchains
are exactly the same, but it turns out we were lying: the riscv32-* BFD
doesn't handle 64-bit objects.  This fixes that difference, so the ports
are actually the same.

bfd/ChangeLog

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

        * config.bfd (riscv32-*): Enable rv64.
2017-05-02 15:19:05 -07:00
H.J. Lu
640226f048 Add a test for PR ld/21384
PR ld/21384
	* testsuite/ld-elf/pr21384.d: New file.
	* testsuite/ld-elf/pr21384.dl: Likewise.
	* testsuite/ld-elf/pr21384.ld: Likewise.
	* testsuite/ld-elf/pr21384.s: Likewise.
2017-05-02 13:54:22 -07:00
H.J. Lu
2ecf0cc317 Cast relcount to unsigned long when comparing with sec->reloc_count
The type of relcount is long and the type of sec->reloc_count is
unsigned int.  On 32-bit hosts, GCC issues an error:

objcopy.c:2144:20: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
       if (relcount > sec->reloc_count)

Cast relcount to unsigned long to silence GCC.

	* objcopy.c (merge_gnu_build_notes): Cast relcount to unsigned
	long when comparing with sec->reloc_count.
2017-05-02 12:16:26 -07:00
Simon Marchi
d17f7b365c solib-target: Remove local variables
Now that we use std::vector, these local variables are not very useful.
They're not much shorter than the expressions they stand for.

gdb/ChangeLog:

	* solib-target.c (solib_target_relocate_section_addresses):
	Remove num_section_bases, num_bases, segment_bases variables.
2017-05-02 14:25:43 -04:00
Simon Marchi
b560ebd660 Remove definition of VEC (CORE_ADDR)
gdb/ChangeLog:

	* common/gdb_vecs.h (DEF_VEC_I (CORE_ADDR)): Remove.
2017-05-02 13:30:09 -04:00
Simon Marchi
f2f46dfcda Use std::vector in lm_info_target
Replace the two VEC fields with std::vector.

gdb/ChangeLog:

	* solib-target.c: Include <vector>
	(struct lm_info_target) <~lm_info_target>: Remove.
	<segment_bases, section_bases>: Change type to
	std::vector<CORE_ADDR>.
	(library_list_start_segment, library_list_start_section,
	library_list_end_library,
	solib_target_relocate_section_addresses): Adjust.
2017-05-02 13:30:08 -04:00
Simon Marchi
a0ff9e1ad2 Change return type of gdbarch_software_single_step to vector<CORE_ADDR>
This is a relatively straightforward patch that changes
gdbarch_software_single_step so it returns an std::vector<CORE_ADDR>
instead of a VEC (CORE_ADDR).

gdb/ChangeLog:

	* gdbarch.sh (software_single_step): Change return type to
	std::vector<CORE_ADDR>.
	* gdbarch.c, gdbarch.h: Re-generate.
	* arch/arm-get-next-pcs.c (thumb_deal_with_atomic_sequence_raw):
	Adjust.
	(arm_deal_with_atomic_sequence_raw): Adjust.
	(thumb_get_next_pcs_raw): Adjust.
	(arm_get_next_pcs_raw): Adjust.
	(arm_get_next_pcs): Adjust.
	* arch/arm-get-next-pcs.h (arm_get_next_pcs): Adjust.
	* aarch64-tdep.c (aarch64_software_single_step): Adjust.
	* alpha-tdep.c (alpha_deal_with_atomic_sequence): Adjust.
	(alpha_software_single_step): Adjust.
	* alpha-tdep.h (alpha_software_single_step): Adjust.
	* arm-linux-tdep.c (arm_linux_software_single_step): Adjust.
	* arm-tdep.c (arm_software_single_step): Adjust.
	(arm_breakpoint_kind_from_current_state): Adjust.
	* arm-tdep.h (arm_software_single_step): Adjust.
	* breakpoint.c (insert_single_step_breakpoint): Adjust.
	* cris-tdep.c (cris_software_single_step): Adjust.
	* mips-tdep.c (mips_deal_with_atomic_sequence): Adjust.
	(micromips_deal_with_atomic_sequence): Adjust.
	(deal_with_atomic_sequence): Adjust.
	(mips_software_single_step): Adjust.
	* mips-tdep.h (mips_software_single_step): Adjust.
	* moxie-tdep.c (moxie_software_single_step): Adjust.
	* nios2-tdep.c (nios2_software_single_step): Adjust.
	* ppc-tdep.h (ppc_deal_with_atomic_sequence): Adjust.
	* rs6000-aix-tdep.c (rs6000_software_single_step): Adjust.
	* rs6000-tdep.c (ppc_deal_with_atomic_sequence): Adjust.
	* s390-linux-tdep.c (s390_software_single_step): Adjust.
	* sparc-tdep.c (sparc_software_single_step): Adjust.
	* spu-tdep.c (spu_software_single_step): Adjust.
	* tic6x-tdep.c (tic6x_software_single_step): Adjust.

gdb/gdbserver/ChangeLog:

	* linux-arm-low.c (arm_gdbserver_get_next_pcs): Adjust to
	software_single_step change of return type to
	std::vector<CORE_ADDR>.
	* linux-low.c (install_software_single_step_breakpoints):
	Likewise.
	* linux-low.h (install_software_single_step_breakpoints):
	Likewise.
2017-05-02 13:30:07 -04:00
Simon Marchi
ea480a306d Change field separator in gdbarch.sh
The fields in the description of the gdbarch interface are separated
using colons.  That becomes a problem if we want to use things like
std::vector in it. This patch changes the field separator to use
semicolons instead.

I think there's very little chance we'll ever want to use a semicolon in
one of the fields, but if you think another character would be more
appropriate, let me know.

gdb/ChangeLog:

	* gdbarch.sh: Use semi-colon as field separator instead of colon.
	* gdbarch.h: Re-generate.
2017-05-02 13:30:07 -04:00
Nick Clifton
1395c6ce47 Don't merge notes when the relocs associated with them cannot be reliably deleted.
* objcopy.c (merge_gnu_build_notes): Disable merge if there are
	more internal relocs than external relocs.
2017-05-02 16:55:31 +01:00
Alan Modra
73ec947d59 PR 21384, --dynamic-list regression with f02cb058
The commit to "Always descend into output section statements in
lang_do_assignments" meant that linker script symbols were not
bfd_link_hash_new when ld called bfd_elf_record_link_assignment.
This patch corrects that problem by testing h->non_elf instead.

	PR 21384
	* elflink.c (bfd_elf_link_mark_dynamic_symbol): Test h->non_elf
	rather than h->root.type == bfd_link_hash_new.
	(bfd_elf_record_link_assignment): Similarly, call
	bfd_elf_link_mark_dynamic_symbol when h->non_elf.
2017-05-03 00:51:06 +09:30
Maciej W. Rozycki
a4ddc54ec1 MIPS16/opcodes: Keep the LSB of PC-relative offsets in disassembly
Correct the disassembly of the PC-relative immediate argument of the
MIPS16 synthetic LA, LW, DLA and LD instructions and do not mask the
LSB, which in this case is a part of the data address rather than the
ISA bit and has to be fully presented.

	opcodes/
	* mips-dis.c (print_insn_arg): Only clear the ISA bit for jumps
	and branches and not synthetic data instructions.

	binutils/
	* testsuite/binutils-all/mips/mips16-undecoded.d: Adjust the
	disassembly of PC-relative LA and LW synthetic instructions.
2017-05-02 11:58:44 +01:00
Nick Clifton
39ff1b79f6 Prevent memory exhaustion from a corrupt PE binary with an overlarge number of relocs.
PR 21440
	* objdump.c (dump_relocs_in_section): Check for an excessive
	number of relocs before attempting to dump them.
2017-05-02 11:54:53 +01:00
Tim Wiederhake
d050f7d7f4 Python: Introduce gdb.Instruction class
This adds a generic instruction class to Python and has gdb.RecordInstruction
inherit from it.
2017-05-02 11:35:54 +02:00
Tim Wiederhake
14f819c8c5 Python: Move and rename gdb.BtraceFunction
Remove gdb.BtraceFunctionCall and replace by gdb.FunctionSegment.  Additionally,
rename prev_segment and next_segment to prev and next.
2017-05-02 11:35:54 +02:00
Tim Wiederhake
0ed5da759e Python: Move and rename gdb.BtraceInstruction
Remove gdb.BtraceInstruction and replace by gdb.RecordInstruction.
2017-05-02 11:35:54 +02:00
Tim Wiederhake
913aeadd9d Python: Introduce gdb.RecordGap class
As discussed here: https://sourceware.org/ml/gdb-patches/2017-04/msg00157.html

A gap is not an instruction and it should not pretend to be one.
gdb.Record.instruction_history is now a list of gdb.RecordInstruction and
gdb.RecordGap objects.  This allows the user to deal with Gaps in the record
in a more sane way.
2017-05-02 11:35:54 +02:00
Tim Wiederhake
a3be24ad59 Python: Remove ptid from gdb.Record interface
As discussed here: https://sourceware.org/ml/gdb-patches/2017-04/msg00166.html
2017-05-02 11:35:54 +02:00
Tim Wiederhake
ae20e79ae8 Python: Use correct ptid in btrace recording
The user would always get the instruction_history and function_call_history
objects of the current thread, not the thread for which the gdb.Record object
was created.

The attached testcase fails without this patch and passes with the patch.
2017-05-02 11:35:54 +02:00
Tim Wiederhake
8d0050ea19 Python: Fix indentation in py-record-btrace.c 2017-05-02 11:35:54 +02:00
Bernd Edlinger
fe50e98c9a Fix value in comment of disassembled ARM type A opcodes.
* arm-dis.c (print_insn_thumb32): Fix value_in_comment.
2017-05-02 10:28:09 +01:00
GDB Administrator
122a483d4f Automatic date update in version.in 2017-05-02 00:00:39 +00:00
H.J. Lu
0aae7e72a2 x86: Run GNU2 TLS tests with working GNU2 TLS support
Check if GNU2 TLS really works before running GNU2 TLS tests.

	* testsuite/ld-i386/tls.exp: Run GNU2 TLS tests only if there
	is working GNU2 TLS support.
	* testsuite/ld-x86-64/tls.exp: Likewise.
	* testsuite/lib/ld-lib.exp (check_gnu2_tls_available): New proc.
2017-05-01 11:02:55 -07:00
Joel Brobecker
3f380b5027 gdb/MAINTAINERS: Move Daniel J and Mark to the Past Maintainers section.
gdb/ChangeLog:

        * MAINTAINERS: Move Daniel Jacobowitz and Mark Kettenis to
        the past maintainers section.
2017-05-01 10:02:51 -07:00
Alan Modra
ee7e95efb9 merge_gnu_build_notes reloc deletion
If moving relocs, the next reloc to look at is at the same location.

	* objcopy.c (merge_gnu_build_notes): Correct code deleting
	relocs.
2017-05-01 14:13:31 +09:30
GDB Administrator
6224c85813 Automatic date update in version.in 2017-05-01 00:00:35 +00:00
GDB Administrator
020bf56c8e Automatic date update in version.in 2017-04-30 00:00:31 +00:00
Alan Modra
a941291cab PR21432, buffer overflow in perform_relocation
The existing reloc offset range tests didn't catch small negative
offsets less than the size of the reloc field.

	PR 21432
	* reloc.c (reloc_offset_in_range): New function.
	(bfd_perform_relocation, bfd_install_relocation): Use it.
	(_bfd_final_link_relocate): Likewise.
2017-04-29 18:59:37 +09:30
Sergio Durigan Junior
45ce1b47e4 Make environ.exp run on all platforms (and create info-program.exp)
This has been on my TODO list for a while.  There's a really old bug
about this (PR testsuite/8595), and there was no reason for
environ.exp to be specific for hppa* targets.  So this patch removes
this constraint, modernizes the testcase, and cleans up some things.
Most of the tests remained, and some were rewritten (especially the
one that checks if "show environment" works, which is something kind
of hard to do).

As a bonus, I'm adding a separated info-program.exp file containing
all the tests related to "info program" that were present on
environ.exp.

Tested locally, everything still passes.

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

	PR testsuite/8595
	* gdb.base/environ.exp: Make test available in all architectures.
	Move bits related to "info program" testing to
	gdb.base/info-program.exp.  Rewrite tests to use the two new
	procedures mentione below.
	(test_set_show_env_var) New procedure.
	(test_set_show_env_var_equal): Likewise.
	* gdb.base/info-program.exp: New file.
2017-04-28 20:29:20 -04:00
GDB Administrator
a93866c8bf Automatic date update in version.in 2017-04-29 00:00:38 +00:00
Yao Qi
0749542484 Remove cleanup in get_return_value
With regcache ctor, we can use it to create local object in
get_return_value (), so that the cleanup can be removed.

gdb:

2017-04-28  Yao Qi  <yao.qi@linaro.org>

	* infcmd.c (get_return_value): Use regcache ctor, and remove
	cleanup.
2017-04-28 22:48:42 +01:00
Yao Qi
deb1fa3eda Use tag dispatch regcache ctor in regcache_dup
This patch adds a tag dispatch ctor to create read-only regcache from
a write-through regcache, also this patch deletes copy ctor and
assignment operator.

gdb:

2017-04-28  Yao Qi  <yao.qi@linaro.org>
	    Pedro Alves  <palves@redhat.com>

	* regcache.c (regcache::regcache): New tag dispatch ctor.
	(do_cooked_read): Moved above.
	(regcache_dup): Use the tag dispatch ctor..
	* regcache.h (regcache): Declare ctor, delete copy ctor and
	assignment operator, remove friend regcache_dup.
2017-04-28 22:48:42 +01:00
Yao Qi
b421c83cb8 Simplify regcache_dup
regcache_dup, in fact, is to create a readonly regcache from a
non-readonly regcache.  This patch adds an assert that src is not
readonly.

gdb:

2017-04-28  Yao Qi  <yao.qi@linaro.org>

	* regcache.c (regcache_dup): Assert !src->m_readonly_p and
	call method save instead of regcache_cpy.
	* regcache.h (struct regcache): Make regcache_dup a friend.
2017-04-28 22:48:42 +01:00
Yao Qi
ef79d9a3c6 Class-fy regcache
This patch moves regcache declaration to regcache.h, and converts
regcache apis to member functions, for example, regcache_invalidate
is changed to regcache::invalidate.

This patch also add "m_" prefix to these private fields.

gdb:

2017-04-28  Yao Qi  <yao.qi@linaro.org>

	* regcache.c (struct regcache): Move to regcache.h
	(regcache::arch): New method.
	(regcache_get_ptid): Update.
	(get_regcache_arch): Call arch method.
	(get_regcache_aspace): Call method aspace.
	(register_buffer): Change it to method.
	(regcache_save): Change it to regcache::save.
	(regcache_restore): Likewise.
	(regcache_cpy_no_passthrough): Remove the declaration.
	(regcache_cpy): Call methods restore and cpy_no_passthrough.
	(regcache_cpy_no_passthrough): Change it to method
	cpy_no_passthrough.
	(regcache_register_status): Change it to method
	get_register_status.
	(regcache_invalidate): Change it to method invalidate.
	(regcache_thread_ptid_changed): Use methods ptid and set_ptid.
	(regcache_raw_update): Change it to method raw_update.
	(regcache_raw_read): Likewise.
	(regcache_raw_read_signed): Likewise.
	(regcache_raw_read_unsigned): Likewise.
	(regcache_raw_write_signed): Likewise.
	(regcache_raw_write_unsigned): Likewise.
	(regcache_cooked_read): Likewise.
	(regcache_cooked_read_value): Likewise.
	(regcache_cooked_read_signed): Likewise.
	(regcache_cooked_read_unsigned): Likewise.
	(regcache_cooked_write_signed): Likewise.
	(regcache_cooked_write_unsigned): Likewise.
	(regcache_raw_set_cached_value): Likewise.
	(regcache_raw_write): Likewise.
	(regcache_cooked_write): Likewise.
	(regcache_xfer_part): Likewise.
	(regcache_raw_read_part): Likewise.
	(regcache_raw_write_part): Likewise.
	(regcache_cooked_read_part): Likewise.
	(regcache_cooked_write_part): Likewise.
	(regcache_raw_supply): Likewise.
	(regcache_raw_collect): Likewise.
	(regcache_transfer_regset): Likewise.
	(regcache_supply_regset): Likewise.
	(regcache_collect_regset): Likewise.
	(regcache_debug_print_register): Likewise.
	(enum regcache_dump_what): Move it to regcache.h.
	(regcache_dump): Change it to method dump.
	* regcache.h (enum regcache_dump_what): New.
	(class regcache): New.
	* target.c (target_fetch_registers): Call method
	debug_print_register.
	(target_store_registers): Likewise.
2017-04-28 22:48:42 +01:00
Simon Marchi
f8fdb78eaf Class-ify lm_info_windows
This patch makes lm_info_windows a "real" class.  It initializes the field
and replaces XCNEW/xfree with new/delete.

gdb/ChangeLog:

	* windows-nat.c (struct lm_info_windows): Initialize field.
	(windows_make_so): Allocate lm_info_windows with new.
	(windows_free_so): Free lm_info_windows with delete.
2017-04-28 17:16:18 -04:00
Simon Marchi
9ccbfd7bc1 Class-ify lm_info_darwin
This patch makes lm_info_darwin a "real" class.  It initializes the
field and replaces XCNEW/xfree with new/delete.

gdb/ChangeLog:

	* solib-darwin.c (struct lm_info_darwin): Initialize field.
	(darwin_current_sos): Allocate lm_info_darwin with new, remove
	cleanup.
	(darwin_free_so): Free lm_info_darwin with delete.
2017-04-28 17:16:18 -04:00
Simon Marchi
76e75227c3 Class-ify lm_info_svr4
This patch makes lm_info_svr4 a "real" class.  It initializes fields,
uses bool and replaces XCNEW/xfree with new/delete.

The memcpy in svr4_copy_library_list is replaced by a usage of the
default copy constructor.

gdb/ChangeLog:

	* solib-svr4.h (struct lm_info_svr4): Initialize fields.
	<l_addr_p>: Change type to bool.
	* solib-svr4.c (lm_info_read): Allocate lm_info_svr4 with new.
	(svr4_free_so): Free lm_info_svr4 with delete.
	(svr4_copy_library_list): Replace memcpy with call to copy
	constructor.
	(library_list_start_library, svr4_default_sos): Allocate
	lm_info_svr4 with new.
2017-04-28 17:16:17 -04:00
Simon Marchi
51046d9e60 Class-ify lm_info_target
This patch makes lm_info_target a "real" class.  It adds a destructor,
uses std::string, initializes the fields and replaces XCNEW/xfree with
new/delete.

gdb/ChangeLog:

	* solib-target.c (struct lm_info_target): Add destructor,
	initialize fields.
	<name>: Change type to std::string.
	(library_list_start_library): Allocate lm_info_target with new.
	(solib_target_free_library_list): Free lm_info_target with
	delete.
	(solib_target_current_sos): Adapt to std::string.
	(solib_target_free_so): Free lm_info_target with delete.
2017-04-28 17:16:16 -04:00
Simon Marchi
4023ae762e Class-ify lm_info_frv
This patches makes lm_info_frv a "real" class.  It adds a destructor,
initializes the fields and replaces XCNEW/xfree with new/delete.

gdb/ChangeLog:

	* solib-frv.c (struct lm_info_frv): Add destructor, initialize
	fields.
	(frv_current_sos): Allocate lm_info_frv with new.
	(frv_relocate_main_executable): Free lm_info_frv with delete,
	allocate with new.
	(frv_clear_solib, frv_free_so): Free lm_info_frv with delete.
2017-04-28 17:16:16 -04:00
Simon Marchi
af43057baf Fix indentation of lm_info_frv
This patch fixes the indentation of lm_info_frv, so that the real
changes of the following patch are not lost in the reformatting.

gdb/ChangeLog:

	* solib-frv.c (struct lm_info_frv): Fix indentation.
2017-04-28 17:16:15 -04:00
Simon Marchi
b091120773 Class-ify lm_info_dsbt
This patches makes lm_info_dsbt a "real" class.  It introduces a
destructor, initializes the field and replaces XCNEW/xfree with
new/delete.

gdb/ChangeLog:

	* solib-dsbt.c (struct lm_info_dsbt): Add destructor, initialize
	map field.
	(dsbt_current_sos): Allocate lm_info_dsbt with new.
	(dsbt_relocate_main_executable): Free lm_info_dsbt with delete
	and allocate with new.
	(dsbt_clear_solib, dsbt_free_so): Free lm_info_dsbt with delete.
2017-04-28 17:16:14 -04:00
Simon Marchi
6c401f72e9 Class-ify lm_info_aix
This patch makes lm_info_aix a "real" class.  It uses std::string,
initializes fields in-class and replaces XCNEW/xfree with new/delete.
The solib_aix_new_lm_info can be replaced by using the default copy
constructor.

gdb/ChangeLog:

	* solib-aix.c (struct lm_info_aix): Initialize fields in-class.
	<filename, member_name>: Change type to std::string.
	(solib_aix_new_lm_info, solib_aix_xfree_lm_info): Remove.
	(library_list_start_library): Allocate lm_info_aix with new.
	(solib_aix_free_library_list, solib_aix_free_so): Free with delete.
	(solib_aix_current_sos): Adapt to std::string, copy lm_info_aix
	with copy constructor.
2017-04-28 17:16:14 -04:00
Simon Marchi
d0e449a186 Make various lm_info implementations inherit from a base class
The lm_info structure is used to store target specific information about
mapped libraries.  It is currently defined as an opaque type in solist.h
and a pointer to it is included in solist, the target-agnostic object
representing a loaded shared library.  Multiple targets define their own
implementation of lm_info.

In anticipation of using C++ stuff (e.g. vector) in the lm_info objects,
we first need to avoid different definitions of classes with the same
name (which violates the one definition rule).  This patch does it by
having a base class (lm_info_base) from which all the specific lm_info
derive.  Each implementation is renamed to something that makes sense
(e.g. lm_info_aix for AIX).  The next logical step would probably be to
derive directly from so_list, it's not really obvious, so I'll keep that
for another day.

One special case is the Neutrino (nto) support.  It uses SVR4-style
libraries, but overrides some methods.  To do that, it needed to have
its own copy of SVR4's lm_info structure in nto-tdep.c, because it was
just not possible to put it in solib-svr4.h and include that file.  Over
time, that copy got out of sync, which is still the case today.  I can
only assume that the lm_addr function in nto-tdep.c is broken right now.
The first field of the old lm_info was a pointer (gdb_byte *), whereas
in the new lm_info it's an address in the inferior (CORE_ADDR).  Trying
to use that field today probably results in a crash.  With this
refactor, it's now possible to put lm_info_svr4 in solib-svr4.h and just
include it.  I have adapted the code in nto-tdep.c to that it builds,
but it's probably not correct.  Since I don't have the knowledge nor
setup to try this on Neutrino, somebody else would have to fix it.  But
I am confident that I am not making things worse than they already are.

gdb/ChangeLog:

	* solist.h (struct lm_info): Remove.
	(struct lm_info_base): New class.
	(struct so_list) <lm_info>: Change type to lm_info_base *.
	* nto-tdep.c (struct lm_info): Remove.
	(lm_addr): Adjust.
	* solib-aix.c (struct lm_info): Rename to ...
	(struct lm_info_aix): ... this.  Extend lm_info_base.
	(lm_info_p): Rename to ...
	(lm_info_aix_p): ... this, and adjust.
	(solib_aix_new_lm_info, solib_aix_xfree_lm_info,
	solib_aix_parse_libraries, library_list_start_library,
	solib_aix_free_library_list, solib_aix_parse_libraries,
	solib_aix_get_library_list,
	solib_aix_relocate_section_addresses, solib_aix_free_so,
	solib_aix_get_section_offsets,
	solib_aix_solib_create_inferior_hook, solib_aix_current_sos):
	Adjust.
	(struct solib_aix_inferior_data) <library_list>: Adjust.
	* solib-darwin.c (struct lm_info): Rename to ...
	(struct lm_info_darwin): ... this.  Extend lm_info_base.
	(darwin_current_sos, darwin_relocate_section_addresses): Adjust.
	* solib-dsbt.c (struct lm_info): Rename to ...
	(struct lm_info_dsbt): ... this.  Extend lm_info_base.
	(struct dsbt_info) <main_executable_lm_info): Adjust.
	(dsbt_current_sos, dsbt_relocate_main_executable, dsbt_free_so,
	dsbt_relocate_section_addresses): Adjust.
	* solib-frv.c (struct lm_info): Rename to ...
	(struct lm_info_frv): ... this.  Extend lm_info_base.
	(main_executable_lm_info): Adjust.
	(frv_current_sos, frv_relocate_main_executable, frv_free_so,
	frv_relocate_section_addresses, frv_fdpic_find_global_pointer,
	find_canonical_descriptor_in_load_object,
	frv_fdpic_find_canonical_descriptor): Adjust.
	* solib-svr4.c (struct lm_info): Move to solib-svr4.h, renamed
	to lm_info_svr4.
	(lm_info_read, lm_addr_check, svr4_keep_data_in_core,
	svr4_clear_so, svr4_copy_library_list,
	library_list_start_library, svr4_default_sos, svr4_read_so_list,
	svr4_current_sos, svr4_fetch_objfile_link_map,
	solist_update_incremental): Adjust.
	* solib-svr4.h (struct lm_info_svr4): Move here from
	solib-svr4.c.
	* solib-target.c (struct lm_info): Rename to ...
	(struct lm_info_target): ... this.  Extend lm_info_base.
	(lm_info_p): Rename to ...
	(lm_info_target_p): ... this.
	(solib_target_parse_libraries, library_list_start_segment,
	library_list_start_section, library_list_start_library,
	library_list_end_library, solib_target_free_library_list,
	solib_target_current_sos, solib_target_free_so,
	solib_target_relocate_section_addresses): Adjust.
	* windows-nat.c (struct lm_info): Rename to ...
	(struct lm_info_windows): ... this.  Extend lm_info_base.
	(windows_make_so, handle_load_dll, handle_unload_dll,
	windows_xfer_shared_libraries): Adjust.
2017-04-28 17:16:13 -04:00
Simon Marchi
434a402395 Standardize darwin's lm_info
Darwin's lm_info structure is used a little bit differently than the
other solib implementations.  The other implementations first allocate
an so_list object, then instanciate their specific lm_info structure,
and assign it to so_list::lm_info.

The Darwin implementation allocates both at the same time
(darwin_so_list).  This patch changes it to be like the others, so that
we'll be able to do some generalizations later.

gdb/ChangeLog:

	* solib-darwin.c (struct darwin_so_list): Remove.
	(darwin_current_sos): Allocate an so_list object instead of a
	darwin_so_list, separately allocate an lm_info object.
	(darwin_free_so): Free lm_info.
2017-04-28 17:16:12 -04:00
H.J. Lu
1670f9c154 x86: Add run-time tests for -mtls-dialect=gnu2
* testsuite/config/default.exp (GNU2_CFLAGS): New.  Set
	to -mtls-dialect=gnu2 if target compiler supports it.
	* testsuite/ld-i386/tls.exp: Run -mtls-dialect=gnu2 tests.
	* testsuite/ld-x86-64/tls.exp: Likewise.
	* testsuite/ld-i386/tlsdesc1a.c: New file.
	* testsuite/ld-i386/tlsdesc1b.c: Likewise.
	* testsuite/ld-x86-64/tlsdesc1a.c: Likewise.
	* testsuite/ld-x86-64/tlsdesc1b.c: Likewise.
2017-04-28 12:42:18 -07:00
H.J. Lu
d6f48aed23 ELF: Add run-time tests for -z now
* testsuite/ld-elf/shared.exp: Add run-time tests for -z now.
	* testsuite/ld-i386/tls.exp: Likewise.
	* testsuite/ld-ifunc/ifunc.exp: Likewise.
	* testsuite/ld-x86-64/tls.exp: Likewise.
2017-04-28 12:35:18 -07:00
John Baldwin
428544e8ae Consistently use fprintf_filtered when displaying MIPS registers.
One line was using printf_filtered instead of fprintf_filtered
to the requested file.

gdb/ChangeLog:

	* mips-tdep.c (print_gp_register_row): Replace printf_filtered
	with fprintf_filtered.
2017-04-28 09:35:14 -07:00