mem_ap: fix target arch_info type

The target mem_ap appears as an ARM target, thus it allows the
execution of ARM specific commands causing the crash of OpenOCD.
E.g. 'arm mrc ...' can be executed and segfaults.

Replace the incorrect ARM magic number with a dedicated one.
While there, remove the 'struct arm', that is now holding only the
mem_ap's dap, and replace it with a pointer to the dap.

Change-Id: I881332d3fdf8d8f8271b8711607737b052a5699b
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/6213
Tested-by: jenkins
This commit is contained in:
Antonio Borneo 2021-01-06 18:01:00 +01:00
parent 0c5ca348ec
commit 2fe2cafe20
1 changed files with 7 additions and 5 deletions

View File

@ -18,14 +18,16 @@
#include "target.h"
#include "target_type.h"
#include "arm.h"
#include "arm_adi_v5.h"
#include "register.h"
#include <jtag/jtag.h>
#define MEM_AP_COMMON_MAGIC 0x4DE4DA50
struct mem_ap {
struct arm arm;
int common_magic;
struct adiv5_dap *dap;
struct adiv5_ap *ap;
int ap_num;
};
@ -51,8 +53,8 @@ static int mem_ap_target_create(struct target *target, Jim_Interp *interp)
}
mem_ap->ap_num = pc->ap_num;
mem_ap->arm.common_magic = ARM_COMMON_MAGIC;
mem_ap->arm.dap = pc->dap;
mem_ap->common_magic = MEM_AP_COMMON_MAGIC;
mem_ap->dap = pc->dap;
target->arch_info = mem_ap;
@ -137,7 +139,7 @@ static int mem_ap_examine(struct target *target)
struct mem_ap *mem_ap = target->arch_info;
if (!target_was_examined(target)) {
mem_ap->ap = dap_ap(mem_ap->arm.dap, mem_ap->ap_num);
mem_ap->ap = dap_ap(mem_ap->dap, mem_ap->ap_num);
target_set_examined(target);
target->state = TARGET_UNKNOWN;
target->debug_reason = DBG_REASON_UNDEFINED;