Commit Graph

7 Commits

Author SHA1 Message Date
Yao Qi 8acf9577e5 Move the traceframe_available_memory code from memory_xfer_partial_1 down to the targets
As a follow-up to

  [PATCH 7/8] Adjust read_value_memory to use to_xfer_partial
  https://sourceware.org/ml/gdb-patches/2014-02/msg00384.html

this patch moves traceframe_available_memory down to the target side.
After this patch, the gdb core code is cleaner, and code on handling
unavailable memory is moved to remote/tfile/ctf targets.

In details, this patch moves traceframe_available_memory code from
memory_xfer_partial_1 to remote target only, so remote target still
uses traceframe_info mechanism to check unavailable memory, and use
remote_ops to read them from read-only sections.  We don't use
traceframe_info mechanism for tfile and ctf target, because it is
fast to iterate all traceframes from trace file, so the summary
information got from traceframe_info is not necessary.

This patch also moves two functions to remote.c from target.c,
because they are only used in remote.c.  I'll clean them up in another
patch.

gdb:

2014-03-22  Yao Qi  <yao@codesourcery.com>

	* ctf.c (ctf_xfer_partial): Check the return value of
	exec_read_partial_read_only, if it is not TARGET_XFER_OK,
	return TARGET_XFER_UNAVAILABLE.
	* tracefile-tfile.c (tfile_xfer_partial): Likewise.
	* target.c (target_read_live_memory): Move it to remote.c.
	(memory_xfer_live_readonly_partial): Likewise.
	(memory_xfer_partial_1): Move some code to remote_read_bytes.
	* remote.c (target_read_live_memory): Moved from target.c.
	(memory_xfer_live_readonly_partial): Likewise.
	(remote_read_bytes): New, factored out from
	memory_xfer_partial_1.
2014-03-22 18:31:30 +08:00
Yao Qi 1ee79381dd Use new to_xfer_partial interface in ctf and tfile target
This patch adjust both ctf and tfile target implementation of to_xfer_partial,
to return TARGET_XFER_E_UNAVAILABLE and set *XFERED_LEN if data is
unavailable.  Note that some code on xfer in exec.c can be shared, but
we can do it in a separate pass later.

gdb:

2014-02-23  Yao Qi  <yao@codesourcery.com>

	* exec.c (section_table_read_available_memory): New function.
	* exec.h (section_table_read_available_memory): Declare.
	* ctf.c (ctf_xfer_partial): Call
	section_table_read_available_memory.
	* tracefile-tfile.c (tfile_xfer_partial): Likewise.
2014-02-23 11:44:27 +08:00
Yao Qi 1ca49d376d Share code on to_xfer_partial for tfile and ctf target
In the to_xfer_partial implementations of ctf and tfile, the code on
reading from read-only sections is duplicated.  This patch moves it to
a separate function exec_read_partial_read_only.

gdb:

2014-02-23  Yao Qi  <yao@codesourcery.com>

	* ctf.c (ctf_xfer_partial): Move code to ...
	* exec.c (exec_read_partial_read_only): ... it.  New function.
	* tracefile-tfile.c (tfile_xfer_partial): Likewise.
	* tracefile.c: Include "exec.h".
	* exec.h (exec_read_partial_read_only): Declare.
2014-02-23 11:44:27 +08:00
Yao Qi a283690eb7 Let tracefile has_memory and has_all_memory.
At present, tfile target thinks it has memory but ctf doesn't.
This is an oversight when I added ctf target support.  This patch
moves the implementations of to_has_all_memory and to_has_memory to
upper layer.  After this change, both tfile and ctf target think
they have memory.

gdb:

2014-02-23  Yao Qi  <yao@codesourcery.com>

	* tracefile-tfile.c (tfile_has_all_memory): Remove.
	(tfile_has_memory): Remove.
	(init_tfile_ops): Don't set fields to_has_all_memory and
	to_has_memory of tfile_ops.
	* tracefile.c (tracefile_has_all_memory): New function.
	(tracefile_has_memory): New function.
	(init_tracefile_ops): Initialize fields to_has_all_memory and
	to_has_memory of 'ops'.
2014-02-23 11:44:27 +08:00
Yao Qi 12e03cd06a Share some code between ctf and tfile target.
This patch move the duplicated code between tfile and ctf
targets into file tracefile.c.  The common part of target_ops
fields are set in init_tracefile_ops.

gdb:

2014-02-23  Yao Qi  <yao@codesourcery.com>

	* ctf.c (ctf_has_stack, ctf_has_registers): Remove.
	(ctf_thread_alive, ctf_get_trace_status): Remove.
	(init_ctf_ops): Don't set some fields of ctf_ops.  Call
	init_tracefile_ops.
	* tracefile-tfile.c (tfile_get_trace_status): Remove.
	(tfile_has_stack, tfile_has_registers): Remove.
	(tfile_thread_alive): Remove.
	(init_tfile_ops): Don't set some fields of tfile_ops.  Call
	init_tracefile_ops.
	* tracefile.c (tracefile_has_stack): New function.
	(tracefile_has_registers): New function.
	(tracefile_thread_alive): New function.
	(tracefile_get_trace_status): New function.
	(init_tracefile_ops): New function.
	* tracefile.h (init_tracefile_ops): Declare.
2014-02-23 11:44:26 +08:00
Yao Qi 1139532379 Move tfile target to tracefile-tfile.c
This patch moves tfile target related code from tracepoint.c to
tracefile-tfile.c.

gdb:

2014-02-23  Yao Qi  <yao@codesourcery.com>

	* tracepoint.c (TFILE_PID): Move it to tracefile-tfile.c.
	(O_LARGEFILE): Likewise.
	(tfile_ops): Likewise.
	(TRACE_HEADER_SIZE): Likewise.
	(trace_fd, trace_frames_offset, cur_offset): Likewise.
	(cur_data_size): Likewise.
	(tfile_read, tfile_open, tfile_interp_line): Likewise.
	(tfile_close, tfile_files_info): Likewise.
	(tfile_get_trace_status): Likewise.
	(tfile_get_tracepoint_status): Likewise.
	(tfile_get_traceframe_address): Likewise.
	(tfile_trace_find, match_blocktype): Likewise.
	(traceframe_walk_blocks, traceframe_find_block_type): Likewise.
	(tfile_fetch_registers, tfile_xfer_partial): Likewise.
	(tfile_get_trace_state_variable_value): Likewise.
	(tfile_has_all_memory, tfile_has_memory): Likewise.
	(tfile_has_stack, tfile_has_registers): Likewise.
	(tfile_thread_alive, build_traceframe_info): Likewise.
	(tfile_traceframe_info, init_tfile_ops): Likewise.
	(_initialize_tracepoint): Don't call init_tfile_ops
	and add_target_with_completer.
	* tracefile-tfile.c: Include regcache.h, inferior.h, gdbthread.h,
	exec.h, completer.h and filenames.h.
	(_initialize_tracefile_tfile): New function.
2014-02-23 11:44:26 +08:00
Yao Qi 7951c4eb08 Move trace file writer out of tracepoint.c
This patch is a refactor which moves trace file writer related code
out of tracepoint.c, which has 6k LOC.  It moves general trace file
writer to a new file tracefile.c and moves tfile specific writer to
tracefile-tfile.c.

gdb:

2014-02-23  Yao Qi  <yao@codesourcery.com>

	* Makefile.in (REMOTE_OBS): Append tracefile.o and
	tracefile-tfile.o.
	(HFILES_NO_SRCDIR): Add tracefile.h.
	* ctf.c: Include "tracefile.h".
	* tracefile.h: New file.
	* tracefile.c: New file
	* tracefile-tfile.c: New file.
	* tracepoint.c: Include "tracefile.h".
	(free_uploaded_tps, free_uploaded_tsvs): Remove declarations.
	(stop_reason_names): Add const.
	(trace_file_writer_xfree): Move it to tracefile.c.
	(trace_save, trace_save_command, trace_save_tfile): Likewise.
	(trace_save_ctf): Likewise.
	(struct tfile_trace_file_writer): Move it to tracefile-tfile.c.
	(tfile_target_save, tfile_dtor, tfile_start): Likewise.
	(tfile_write_header, tfile_write_regblock_type): Likewise.
	(tfile_write_status, tfile_write_uploaded_tsv): Likewise.
	(tfile_write_uploaded_tp, tfile_write_definition_end): Likewise.
	(tfile_write_raw_data, tfile_end): Likewise.
	(tfile_trace_file_writer_new): Likewise.
	(free_uploaded_tp): Make it extern.
	(free_uploaded_tsv): Make it extern.
	(_initialize_tracepoint): Move code to register command 'tsave'
	to tracefile.c.
	* tracepoint.h (stop_reason_names): Declare.
	(struct trace_frame_write_ops): Move it to tracefile.h.
	(struct trace_file_write_ops): Likewise.
	(struct trace_file_writer): Likewise.
	(free_uploaded_tsvs, free_uploaded_tps): Declare.
2014-02-23 11:44:26 +08:00