Add ARM v8 AArch64 semihosting support
This patch implements semihosting support for AArch64. This picks code from previously submitted AArch64 semihosting support patch and rebases on top of reworked semihosting code. Tested in AArch64 mode on a Lemaker Hikey Board with NewLib and GDB. Change-Id: I228a38f1de24f79e49ba99d8514d822a28c2950b Signed-off-by: Omair Javaid <omair.javaid@linaro.org> Reviewed-on: http://openocd.zylin.com/4537 Tested-by: jenkins Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
This commit is contained in:
committed by
Matthias Welwarsky
parent
d04254196e
commit
a7da117ad6
@@ -28,6 +28,7 @@
|
||||
#include "target_type.h"
|
||||
#include "armv8_opcodes.h"
|
||||
#include "armv8_cache.h"
|
||||
#include "arm_semihosting.h"
|
||||
#include <helper/time_support.h>
|
||||
|
||||
enum restart_mode {
|
||||
@@ -522,6 +523,9 @@ static int aarch64_poll(struct target *target)
|
||||
if (target->smp)
|
||||
update_halt_gdb(target, debug_reason);
|
||||
|
||||
if (arm_semihosting(target, &retval) != 0)
|
||||
return retval;
|
||||
|
||||
switch (prev_target_state) {
|
||||
case TARGET_RUNNING:
|
||||
case TARGET_UNKNOWN:
|
||||
@@ -543,6 +547,9 @@ static int aarch64_poll(struct target *target)
|
||||
|
||||
static int aarch64_halt(struct target *target)
|
||||
{
|
||||
struct armv8_common *armv8 = target_to_armv8(target);
|
||||
armv8->last_run_control_op = ARMV8_RUNCONTROL_HALT;
|
||||
|
||||
if (target->smp)
|
||||
return aarch64_halt_smp(target, false);
|
||||
|
||||
@@ -831,6 +838,9 @@ static int aarch64_resume(struct target *target, int current,
|
||||
int retval = 0;
|
||||
uint64_t addr = address;
|
||||
|
||||
struct armv8_common *armv8 = target_to_armv8(target);
|
||||
armv8->last_run_control_op = ARMV8_RUNCONTROL_RESUME;
|
||||
|
||||
if (target->state != TARGET_HALTED)
|
||||
return ERROR_TARGET_NOT_HALTED;
|
||||
|
||||
@@ -1069,6 +1079,8 @@ static int aarch64_step(struct target *target, int current, target_addr_t addres
|
||||
int retval;
|
||||
uint32_t edecr;
|
||||
|
||||
armv8->last_run_control_op = ARMV8_RUNCONTROL_STEP;
|
||||
|
||||
if (target->state != TARGET_HALTED) {
|
||||
LOG_WARNING("target not halted");
|
||||
return ERROR_TARGET_NOT_HALTED;
|
||||
@@ -2351,6 +2363,7 @@ static int aarch64_init_target(struct command_context *cmd_ctx,
|
||||
struct target *target)
|
||||
{
|
||||
/* examine_first() does a bunch of this */
|
||||
arm_semihosting_init(target);
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user