regcache::cooked_read unit test
This patch adds a unit test to regcache::cooked_read. This unit test is a little different from normal unit test, it is more about conformance test or interaction test. This test pass both raw register number and pseudo register number to regcache::cooked_read, in order to inspect 1) return value of cooked_read, 2) how are target_ops to_xfer_partial, to_{fetch,store}_registers called (because regcache is updated by means of these three target_ops methods). With this test here, we have a clear picture about how each port of GDB get cooked registers. This patch also shares some code on mock target. gdb: 2017-11-24 Yao Qi <yao.qi@linaro.org> * gdbarch-selftests.c (test_target_has_registers): Move it to target.c. (test_target_has_stack): Likewise. (test_target_has_memory): Likewise. (test_target_prepare_to_store): Likewise. (test_target_store_registers): Likewise. (test_target_ops): Likewise. * regcache.c: Include selftest-arch.h and gdbthread.h. (target_ops_no_register): New class. (test_target_fetch_registers): New. (test_target_store_registers): New. (test_target_xfer_partial): New. (readwrite_regcache): New. (cooked_read_test): New. (_initialize_regcache): Register the test. * target.c: (test_target_has_registers): Moved from gdbarch-selftests.c. (test_target_has_stack): Likewise. (test_target_has_memory): Likewise. (test_target_prepare_to_store): Likewise. (test_target_store_registers): Likewise. * target.h (test_target_ops): New class.
This commit is contained in:
parent
6654d750c7
commit
1b30aaa566
5 changed files with 278 additions and 49 deletions
47
gdb/target.c
47
gdb/target.c
|
@ -4018,6 +4018,53 @@ set_write_memory_permission (const char *args, int from_tty,
|
|||
update_observer_mode ();
|
||||
}
|
||||
|
||||
#if GDB_SELF_TEST
|
||||
namespace selftests {
|
||||
|
||||
static int
|
||||
test_target_has_registers (target_ops *self)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
test_target_has_stack (target_ops *self)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
test_target_has_memory (target_ops *self)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
test_target_prepare_to_store (target_ops *self, regcache *regs)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
test_target_store_registers (target_ops *self, regcache *regs, int regno)
|
||||
{
|
||||
}
|
||||
|
||||
test_target_ops::test_target_ops ()
|
||||
: target_ops {}
|
||||
{
|
||||
to_magic = OPS_MAGIC;
|
||||
to_stratum = process_stratum;
|
||||
to_has_memory = test_target_has_memory;
|
||||
to_has_stack = test_target_has_stack;
|
||||
to_has_registers = test_target_has_registers;
|
||||
to_prepare_to_store = test_target_prepare_to_store;
|
||||
to_store_registers = test_target_store_registers;
|
||||
|
||||
complete_target_initialization (this);
|
||||
}
|
||||
|
||||
} // namespace selftests
|
||||
#endif /* GDB_SELF_TEST */
|
||||
|
||||
void
|
||||
initialize_targets (void)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue