[Pdbg] [PATCH 5/5] main: Use new api to read/write memory

Amitay Isaacs amitay at ozlabs.org
Mon Jan 7 15:30:20 AEDT 2019


Signed-off-by: Amitay Isaacs <amitay at ozlabs.org>
---
 src/mem.c       | 28 ++++++++++------------------
 src/pdbgproxy.c |  6 +++---
 src/thread.c    |  2 +-
 3 files changed, 14 insertions(+), 22 deletions(-)

diff --git a/src/mem.c b/src/mem.c
index 6454739..408ff11 100644
--- a/src/mem.c
+++ b/src/mem.c
@@ -41,7 +41,7 @@ struct mem_flags {
 #define MEM_CI_FLAG ("--ci", ci, parse_flag_noarg, false)
 #define BLOCK_SIZE (parse_number8_pow2, NULL)
 
-static int _getmem(uint64_t addr, uint64_t size, uint8_t block_size)
+static int _getmem(uint64_t addr, uint64_t size, uint8_t block_size, bool ci)
 {
 	struct pdbg_target *target;
 	uint8_t *buf;
@@ -60,11 +60,7 @@ static int _getmem(uint64_t addr, uint64_t size, uint8_t block_size)
 
 		pdbg_set_progress_tick(progress_tick);
 		progress_init();
-		if (block_size)
-			rc = adu_getmem_io(target, addr, buf, size, block_size);
-		else
-			rc = adu_getmem(target, addr, buf, size);
-
+		rc = mem_read(target, addr, buf, size, block_size, ci);
 		if (rc)
 			PR_ERROR("Unable to read memory.\n");
 
@@ -84,20 +80,20 @@ static int _getmem(uint64_t addr, uint64_t size, uint8_t block_size)
 static int getmem(uint64_t addr, uint64_t size, struct mem_flags flags)
 {
 	if (flags.ci)
-		return _getmem(addr, size, 8);
+		return _getmem(addr, size, 8, true);
 	else
-		return _getmem(addr, size, 0);
+		return _getmem(addr, size, 0, false);
 }
 OPTCMD_DEFINE_CMD_WITH_FLAGS(getmem, getmem, (ADDRESS, DATA),
 			     mem_flags, (MEM_CI_FLAG));
 
 static int getmemio(uint64_t addr, uint64_t size, uint8_t block_size)
 {
-	return _getmem(addr, size, block_size);
+	return _getmem(addr, size, block_size, true);
 }
 OPTCMD_DEFINE_CMD_WITH_ARGS(getmemio, getmemio, (ADDRESS, DATA, BLOCK_SIZE));
 
-static int _putmem(uint64_t addr, uint8_t block_size)
+static int _putmem(uint64_t addr, uint8_t block_size, bool ci)
 {
 	uint8_t *buf;
 	int read_size, rc = 0;
@@ -118,11 +114,7 @@ static int _putmem(uint64_t addr, uint8_t block_size)
 		if (read_size <= 0)
 			break;
 
-		if (block_size)
-			rc = adu_putmem_io(adu_target, addr, buf, read_size, block_size);
-		else
-			rc = adu_putmem(adu_target, addr, buf, read_size);
-
+		rc = mem_write(adu_target, addr, buf, read_size, block_size, ci);
 		if (rc) {
 			rc = 0;
 			printf("Unable to write memory.\n");
@@ -141,14 +133,14 @@ static int _putmem(uint64_t addr, uint8_t block_size)
 static int putmem(uint64_t addr, struct mem_flags flags)
 {
 	if (flags.ci)
-		return _putmem(addr, 8);
+		return _putmem(addr, 8, true);
 	else
-		return _putmem(addr, 0);
+		return _putmem(addr, 0, false);
 }
 OPTCMD_DEFINE_CMD_WITH_FLAGS(putmem, putmem, (ADDRESS), mem_flags, (MEM_CI_FLAG));
 
 static int putmemio(uint64_t addr, uint8_t block_size)
 {
-	return _putmem(addr, block_size);
+	return _putmem(addr, block_size, true);
 }
 OPTCMD_DEFINE_CMD_WITH_ARGS(putmemio, putmemio, (ADDRESS, BLOCK_SIZE));
diff --git a/src/pdbgproxy.c b/src/pdbgproxy.c
index dedea7a..572af01 100644
--- a/src/pdbgproxy.c
+++ b/src/pdbgproxy.c
@@ -183,7 +183,7 @@ static void get_spr(uint64_t *stack, void *priv)
 
 #define MAX_DATA 0x1000
 
-/* Returns a real address to use with adu_getmem or -1UL if we
+/* Returns a real address to use with mem_read or -1UL if we
  * couldn't determine a real address. At the moment we only deal with
  * kernel linear mapping but in future we could walk that page
  * tables. */
@@ -223,7 +223,7 @@ static void get_mem(uint64_t *stack, void *priv)
 
 	linear_map = get_real_addr(addr);
 	if (linear_map != -1UL) {
-		if (adu_getmem(adu_target, linear_map, (uint8_t *) data, len)) {
+		if (mem_read(adu_target, linear_map, (uint8_t *) data, len, 0, false)) {
 			PR_ERROR("Unable to read memory\n");
 			err = 1;
 		}
@@ -293,7 +293,7 @@ static void put_mem(uint64_t *stack, void *priv)
 
 	PR_INFO("put_mem 0x%016" PRIx64 " = 0x%016" PRIx64 "\n", addr, stack[2]);
 
-	if (adu_putmem(adu_target, addr, data, len)) {
+	if (mem_write(adu_target, addr, data, len, 0, false)) {
 		PR_ERROR("Unable to write memory\n");
 		err = 3;
 	}
diff --git a/src/thread.c b/src/thread.c
index 1fd448d..8f34233 100644
--- a/src/thread.c
+++ b/src/thread.c
@@ -35,7 +35,7 @@ static bool is_real_address(struct thread_regs *regs, uint64_t addr)
 
 static int load8(struct pdbg_target *target, uint64_t addr, uint64_t *value)
 {
-	if (adu_getmem(target, addr, (uint8_t *)value, 8)) {
+	if (mem_read(target, addr, (uint8_t *)value, 8, 0, false)) {
 		pdbg_log(PDBG_ERROR, "Unable to read memory address=%016" PRIx64 ".\n", addr);
 		return 0;
 	}
-- 
2.20.1



More information about the Pdbg mailing list