Я разрабатываю простое ядро Aarch64. Проблема исчезает, если структура имеет 16 байтов. < /P>
env < /p>
Qemu Emulator Версия 9.0.2 < /p>
aarch64-linux-gnu-g ++ (ubuntu 14.2.0-4ubuntu2) 14.2.0 < /p> p> p> p> p> p> p> p> p> p> p> p> p> p> p> p> p> p> pro-gnu-gnu-gnu-gnu-gnu-gnu (ubuntu 14.2.0-4ubuntu2) /> < /ul>
main.cpp
extern "C" void _start() {
asm volatile("ldr x11, =stack_top\n\t"
"mov sp, x11\n\t"
"bl main\n\t");
}
void putc(char character) { *(char *)0x9000000 = character; }
struct param_t {
char data[15]; // Work if 16
};
void callee(param_t var) { putc('a'); }
void main() {
putc('0');
callee({});
putc('1');
}
< /code>
Команда строительства < /pbr /> # build on ubuntu
aarch64-linux-gnu-g++ -ffreestanding -nostdlib -Wl,--entry=_start -Wl,--section-start=.text=0x40100000 -Wl,--defsym=stack_top=0x40101000 -o aarch64_minimal main.cpp
# Run in QEMU
qemu-system-aarch64 -nographic -serial stdio -monitor telnet::2333,server,nowait -m 1024M -machine virt -cpu cortex-a72 -kernel aarch64_minimal
Подробнее здесь: https://stackoverflow.com/questions/795 ... h64-kernel