saimaa: sblmain stack-pc override prop; sbl analysis tools
This commit is contained in:
@@ -100,6 +100,7 @@ struct SaimaaMachineState {
|
||||
MachineState parent_obj;
|
||||
char *sbl1;
|
||||
char *emmc;
|
||||
char *sblmain; /* hex: popped-PC override for PBL trampoline */
|
||||
};
|
||||
typedef struct SaimaaMachineState SaimaaMachineState;
|
||||
|
||||
@@ -181,6 +182,14 @@ static void saimaa_machine_init(MachineState *machine)
|
||||
}
|
||||
ARM_CPU(first_cpu)->env.regs[13] = 0x085FFF00;
|
||||
ARM_CPU(first_cpu)->env.regs[0] = 0x00220000; /* fake pbl_shared */
|
||||
if (sms->sblmain) {
|
||||
/* PBL trampoline pops pc from stack top; override it */
|
||||
uint32_t tgt = strtoul(sms->sblmain, NULL, 0);
|
||||
uint32_t zero = 0;
|
||||
cpu_physical_memory_write(0x085FFF00, &zero, 4);
|
||||
cpu_physical_memory_write(0x085FFF00 + 12 * 4, &tgt, 4);
|
||||
printf("saimaa: stack-pc override -> 0x%x\n", tgt);
|
||||
}
|
||||
printf("saimaa: SBL1 %s loaded (%zd bytes), entry 0x%lx\n",
|
||||
sms->sbl1, sz, (unsigned long)entry);
|
||||
}
|
||||
@@ -204,12 +213,27 @@ static void saimaa_set_sbl1(Object *obj, const char *value, Error **errp)
|
||||
sms->sbl1 = g_strdup(value);
|
||||
}
|
||||
|
||||
static char *saimaa_get_sblmain(Object *obj, Error **errp)
|
||||
{
|
||||
return g_strdup(SAIMAA_MACHINE(obj)->sblmain);
|
||||
}
|
||||
|
||||
static void saimaa_set_sblmain(Object *obj, const char *value, Error **errp)
|
||||
{
|
||||
SaimaaMachineState *sms = SAIMAA_MACHINE(obj);
|
||||
g_free(sms->sblmain);
|
||||
sms->sblmain = g_strdup(value);
|
||||
}
|
||||
|
||||
static void saimaa_machine_instance_init(Object *obj)
|
||||
{
|
||||
SaimaaMachineState *sms = SAIMAA_MACHINE(obj);
|
||||
sms->sbl1 = NULL;
|
||||
sms->emmc = NULL;
|
||||
sms->sblmain = NULL;
|
||||
object_property_add_str(obj, "sbl1", saimaa_get_sbl1, saimaa_set_sbl1);
|
||||
object_property_add_str(obj, "sblmain", saimaa_get_sblmain,
|
||||
saimaa_set_sblmain);
|
||||
}
|
||||
|
||||
static void saimaa_machine_class_init(ObjectClass *oc, void *data)
|
||||
|
||||
Reference in New Issue
Block a user