ARMv8 using Qemu and GDB
This repo contains information, small examples, build scripts to support the aspiring learner in his undertaking of understanding arm v8 assembly.
Prerequisites
You need docker, gdb-multiarch
and make
installed.
install via
apt install -y make gdb-multiarch
and docker, if not already installed:
curl -fsSL https://get.docker.com | sh
Quickstart
This repository contains a script to get everything setup properly.
Run ./config.sh
to get started.
To compile everything
make
this will use an image called qemu
, which will be created using the config script
Visual Code Remote GDB Setup
This configuration can be used for remote debugging. Put it in .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach Debug to Qemu",
"type": "gdb",
"request": "attach",
"gdbpath": "/usr/bin/gdb-multiarch",
"executable": "${workspaceFolder}/target/kernel.elf",
"target": "localhost:8887",
"remote": true,
"cwd": "${workspaceRoot}",
"valuesFormatting": "parseText",
"preLaunchTask": "launch",
"postDebugTask": "stop"
}
]
}
additionally, we also need a tasks.json
as well
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command" : "make"
},
{
"label": "launch",
"dependsOn" : "build",
"command" : "./launch.sh"
},
{
"label": "stop",
"command" : "./stop.sh"
}
]
}
NOTE: This repo already contains these scripts.
To debug the main assembly file ( main.s
) you should have Native Debug
for Visual Code installed. Pressing F5 will build the program, and start qemu with a gdb server run.
Ending the debug session will clean up the running container.
Debugging
Visual Code does not have a register or memory view yet. However it is possible to obtain information from the registers by typing info registers
in the debug console during a debug sessions.
Updates
Date (DD/MM/YYYY) | Description |
---|---|
14/11/2010 | Split development to two branches: master-armv8 for aarch64master-armv7 for arm-v7 / arm32 developmentQemu will use cortex-a57 and cortex-a15 for aarch64 and arm32 respectively |