[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] avr: Fix wrong initial value of stack pointer
|
From: |
Gihun Nam |
|
Subject: |
[PATCH] avr: Fix wrong initial value of stack pointer |
|
Date: |
Mon, 27 Nov 2023 09:00:52 +0900 |
The current implementation initializes the stack pointer of AVR devices
to 0, but it should be set to RAMEND according to the specs.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1525
Signed-off-by: Gihun Nam <gihun.nam@outlook.com>
---
hw/avr/atmega.c | 3 +++
target/avr/cpu.c | 2 +-
target/avr/cpu.h | 3 +++
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/hw/avr/atmega.c b/hw/avr/atmega.c
index a34803e642..3a8caccf99 100644
--- a/hw/avr/atmega.c
+++ b/hw/avr/atmega.c
@@ -233,6 +233,9 @@ static void atmega_realize(DeviceState *dev, Error **errp)
/* CPU */
object_initialize_child(OBJECT(dev), "cpu", &s->cpu, mc->cpu_type);
+
+ s->cpu.init_sp = mc->io_size + mc->sram_size - 1;
+
qdev_realize(DEVICE(&s->cpu), NULL, &error_abort);
cpudev = DEVICE(&s->cpu);
diff --git a/target/avr/cpu.c b/target/avr/cpu.c
index 44de1e18d1..1da7d7dbf3 100644
--- a/target/avr/cpu.c
+++ b/target/avr/cpu.c
@@ -95,7 +95,7 @@ static void avr_cpu_reset_hold(Object *obj)
env->rampY = 0;
env->rampZ = 0;
env->eind = 0;
- env->sp = 0;
+ env->sp = cpu->init_sp;
env->skip = 0;
diff --git a/target/avr/cpu.h b/target/avr/cpu.h
index 8a17862737..7960c5c57a 100644
--- a/target/avr/cpu.h
+++ b/target/avr/cpu.h
@@ -145,6 +145,9 @@ struct ArchCPU {
CPUState parent_obj;
CPUAVRState env;
+
+ /* Initial value of stack pointer */
+ uint32_t init_sp;
};
/**
--
2.39.2
- [PATCH] avr: Fix wrong initial value of stack pointer,
Gihun Nam <=