summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlistair Popple <alistair@popple.id.au>2017-07-13 17:03:27 +1000
committerAlistair Popple <alistair@popple.id.au>2017-07-14 14:23:28 +1000
commit62ddc2bfa872aeaae3bf07e8ac1d9e6b028c87ce (patch)
tree37cc7445589f9f0b721b4dbe4c897215ec84a56d
parent63c4c233624154d6dcbf21ecab10b4444d332d3c (diff)
downloadpdbg-62ddc2bfa872aeaae3bf07e8ac1d9e6b028c87ce.tar.gz
pdbg-62ddc2bfa872aeaae3bf07e8ac1d9e6b028c87ce.zip
src/main.c: Add error message when no command could be run
All commands need a target to operate on. Running a command with no target would produce no output which can be confusing. Instead return an error message and a hint. Signed-off-by: Alistair Popple <alistair@popple.id.au>
-rw-r--r--src/main.c38
1 files changed, 23 insertions, 15 deletions
diff --git a/src/main.c b/src/main.c
index 7517cf2..2ef9326 100644
--- a/src/main.c
+++ b/src/main.c
@@ -556,17 +556,17 @@ static int putmem(uint64_t addr)
static int start_thread(struct target *thread_target, uint32_t index, uint64_t *unused, uint64_t *unused1)
{
- return ram_start_thread(thread_target) ? 1 : 0;
+ return ram_start_thread(thread_target) ? 0 : 1;
}
static int step_thread(struct target *thread_target, uint32_t index, uint64_t *count, uint64_t *unused1)
{
- return ram_step_thread(thread_target, *count) ? 1 : 0;
+ return ram_step_thread(thread_target, *count) ? 0 : 1;
}
static int stop_thread(struct target *thread_target, uint32_t index, uint64_t *unused, uint64_t *unused1)
{
- return ram_stop_thread(thread_target) ? 1 : 0;
+ return ram_stop_thread(thread_target) ? 0 : 1;
}
static void enable_dn(struct dt_node *dn)
@@ -790,50 +790,51 @@ int main(int argc, char *argv[])
printf("Wrote %d bytes starting at 0x%016" PRIx64 "\n", rc, cmd_args[0]);
break;
case GETGPR:
- for_each_target("thread", getprocreg, &cmd_args[0], NULL);
+ rc = for_each_target("thread", getprocreg, &cmd_args[0], NULL);
break;
case PUTGPR:
- for_each_target("thread", putprocreg, &cmd_args[0], &cmd_args[1]);
+ rc = for_each_target("thread", putprocreg, &cmd_args[0], &cmd_args[1]);
break;
case GETNIA:
cmd_args[0] = REG_NIA;
- for_each_target("thread", getprocreg, &cmd_args[0], NULL);
+ rc = for_each_target("thread", getprocreg, &cmd_args[0], NULL);
break;
case PUTNIA:
cmd_args[1] = cmd_args[0];
cmd_args[0] = REG_NIA;
- for_each_target("thread", putprocreg, &cmd_args[0], &cmd_args[1]);
+ rc = for_each_target("thread", putprocreg, &cmd_args[0], &cmd_args[1]);
break;
case GETSPR:
cmd_args[0] += REG_R31;
- for_each_target("thread", getprocreg, &cmd_args[0], NULL);
+ rc = for_each_target("thread", getprocreg, &cmd_args[0], NULL);
break;
case PUTSPR:
cmd_args[0] += REG_R31;
- for_each_target("thread", putprocreg, &cmd_args[0], &cmd_args[1]);
+ rc = for_each_target("thread", putprocreg, &cmd_args[0], &cmd_args[1]);
break;
case GETMSR:
cmd_args[0] = REG_MSR;
- for_each_target("thread", getprocreg, &cmd_args[0], NULL);
+ rc = for_each_target("thread", getprocreg, &cmd_args[0], NULL);
break;
case PUTMSR:
cmd_args[1] = cmd_args[0];
cmd_args[0] = REG_MSR;
- for_each_target("thread", putprocreg, &cmd_args[0], &cmd_args[1]);
+ rc = for_each_target("thread", putprocreg, &cmd_args[0], &cmd_args[1]);
break;
case THREADSTATUS:
- for_each_target("pib", print_proc_thread_status, NULL, NULL);
+ rc = for_each_target("pib", print_proc_thread_status, NULL, NULL);
break;
case START:
- for_each_target("thread", start_thread, NULL, NULL);
+ rc = for_each_target("thread", start_thread, NULL, NULL);
break;
case STEP:
- for_each_target("thread", step_thread, &cmd_args[0], NULL);
+ rc = for_each_target("thread", step_thread, &cmd_args[0], NULL);
break;
case STOP:
- for_each_target("thread", stop_thread, NULL, NULL);
+ rc = for_each_target("thread", stop_thread, NULL, NULL);
break;
case PROBE:
+ rc = 1;
print_target(dt_root, 0);
printf("\nNote that only selected targets will be shown above. If none are shown\n"
"try adding '-a' to select all targets\n");
@@ -843,6 +844,13 @@ int main(int argc, char *argv[])
break;
}
+ if (rc <= 0) {
+ printf("No valid targets found or specified. Try adding -p/-c/-t options to specify a target.\n");
+ printf("Alternatively run %s -a probe to get a list of all valid targets\n", argv[0]);
+ rc = 1;
+ } else
+ rc = 0;
+
if (backend == FSI)
fsi_destroy(NULL);
OpenPOWER on IntegriCloud