Hi Vadim,
On 04/07/2022 20:37, Vadim Zaliva wrote:
Thanks!
I understand in principle what you are suggesting but I doubt I am up to doing it myself. I suppose it requires compiling a custom assembly startup code and linking my C program with it. Googling for `cvbar_elN` did not yield any results either.
So let's keep at a feature suggestion - to provide a config which compiles baremetal binaries for qemu with trap handlers initialized accordingly.
Apologies for the slow reply. I think what you want here is to use -specs=aem-validation.specs when building. This will use a start address that works with QEMU's memory map but, unlike rdimon.specs, aem-validation.specs will cause newlib's boot code to be linked in, which includes code to set a trap handler and terminate cleanly when an exception is thrown.
Hope that helps.
Alex
Vadim
-- Senior Research Associate Department of Computer Science and Technology University of Cambridge http://zaliva.org/
From: Jessica Clarke jrtc4@cam.ac.uk Sent: Thursday, June 30, 2022 20:21 To: Vadim Zaliva vz231@cam.ac.uk Cc: Alex Coplan alex.coplan@arm.com; Vadim Zaliva via Gnu-morello gnu-morello@op-lists.linaro.org Subject: Re: [Gnu-morello] running baremetal binaries under qemu
Write a trap handler and suitably configure cvbar_elN. Your trap handler can make a semihosting call to exit. Your hang is likely because cvbar_elN is uninitialised and so trapping redirects to a junk address (probably 0?) that itself faults, giving an infinite fault loop you can’t break out of.
Jess
On 1 Jul 2022, at 03:17, Vadim Zaliva via Gnu-morello <gnu-morello@op-lists.linaro.orgmailto:gnu-morello@op-lists.linaro.org> wrote:
Thanks! That worked.
If there is a way to catch CHERI protection traps? Now when they happen QEMU just hangs up. I would rather have it terminate with some error.
Maybe this is related to this warning from qemu:
TRICKBOX: WARN:Some AXI aborts are enabled but this is not yet implemented: 0
Vadim
-- Senior Research Associate Department of Computer Science and Technology University of Cambridge https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fzaliva.org%...https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fzaliva.org%2F&data=05%7C01%7Cvz231%40cam.ac.uk%7Ce3950e9b3bf14b444ba608da5b10d4e0%7C49a50445bdfa4b79ade3547b4f3986e9%7C0%7C0%7C637922425086263257%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=95OveKx2W5cA5cNeAEDmJWAdHffl%2F4RXCV%2FrEQUHaJQ%3D&reserved=0
From: Alex Coplan via Gnu-morello <gnu-morello@op-lists.linaro.orgmailto:gnu-morello@op-lists.linaro.org> Sent: Thursday, June 30, 2022 5:57 To: Vadim Zaliva <vz231@cam.ac.ukmailto:vz231@cam.ac.uk> Cc: Vadim Zaliva via Gnu-morello <gnu-morello@op-lists.linaro.orgmailto:gnu-morello@op-lists.linaro.org> Subject: [Gnu-morello] Re: running baremetal binaries under qemu
Hi Vadim,
On 29/06/2022 18:04, Vadim Zaliva wrote: Alex,
Thanks! I will give FVP a try, although I wish I could make qemu work, as it seems to be a much simpler option. The qemu I am using:
https://github.com/CTSRD-CHERI/qemu
I suspect the problem is with the start address of the text segment used during linking.
So I eventually figured out how to get this working (with some QEMU help on the CHERI-CPU Slack). So if you build an executable with:
build-aarch64-none-elf/install/bin/aarch64-none-elf-gcc -march=morello+c64 -mabi=purecap hello.c -specs=rdimon.specs
you should be able to run it with:
./qemu-system-morello -machine morello -cpu morello -nographic -serial none -monitor none -kernel a.out -semihosting
You should also be able to debug it with GDB (using the QEMU gdbserver stub), if needed.
Hope that helps.
Alex
Vadim
-- Senior Research Associate Department of Computer Science and Technology University of Cambridge https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fzaliva.org%...https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fzaliva.org%2F&data=05%7C01%7Cvz231%40cam.ac.uk%7Ce3950e9b3bf14b444ba608da5b10d4e0%7C49a50445bdfa4b79ade3547b4f3986e9%7C0%7C0%7C637922425086263257%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=95OveKx2W5cA5cNeAEDmJWAdHffl%2F4RXCV%2FrEQUHaJQ%3D&reserved=0
From: Alex Coplan via Gnu-morello <gnu-morello@op-lists.linaro.orgmailto:gnu-morello@op-lists.linaro.org> Sent: Wednesday, June 29, 2022 3:44 To: Vadim Zaliva <vz231@cam.ac.ukmailto:vz231@cam.ac.uk> Cc: Vadim Zaliva via Gnu-morello <gnu-morello@op-lists.linaro.orgmailto:gnu-morello@op-lists.linaro.org> Subject: [Gnu-morello] Re: running baremetal binaries under qemu
Hi Vadim,
On 28/06/2022 21:58, Vadim Zaliva via Gnu-morello wrote: I am trying to rung GCC-produced binaries under qemu, with no success. Here is what I did:
dummy.c:
#include <stdio.h>
int main() { fprintf(stderr,"hello world!\n"); }
$ ~/morello-gnu/bin/aarch64-none-elf-gcc -march=morello+c64 -mabi=purecap -specs=aem-ve.specs -O0 tests/cheri/dummy.c -o dummy
$ file dummy dummy: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, with debug_info, not stripped
$ ~/cheri/output/morello-sdk/bin/qemu-system-morello -M virt,gic-version=3 -cpu morello -m 2048 -nographic -device virtio-rng-pci -bios dummy
Where are you getting your QEMU from, out of interest? I wasn't aware of a QEMU port for Morello.
Note that the binaries that GCC produces don't include the sort of firmware that would need to boot on real hardware. There may of course also be incompatibilities in the memory map that QEMU is using and that which the binary expects.
Thanks, Alex
At this point, qemu hangs up eating a lot of CPU and has to be killed.
Any suggestions on how I can run the binaries?
Vadim
-- Senior Research Associate Department of Computer Science and Technology University of Cambridge https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fzaliva.org%...https://eur03.safelinks.protection.outlook.com/?url=http%3A%2F%2Fzaliva.org%2F&data=05%7C01%7Cvz231%40cam.ac.uk%7Ce3950e9b3bf14b444ba608da5b10d4e0%7C49a50445bdfa4b79ade3547b4f3986e9%7C0%7C0%7C637922425086263257%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=95OveKx2W5cA5cNeAEDmJWAdHffl%2F4RXCV%2FrEQUHaJQ%3D&reserved=0 -- Gnu-morello mailing list -- gnu-morello@op-lists.linaro.orgmailto:gnu-morello@op-lists.linaro.org To unsubscribe send an email to gnu-morello-leave@op-lists.linaro.orgmailto:gnu-morello-leave@op-lists.linaro.org
-- Alex -- Gnu-morello mailing list -- gnu-morello@op-lists.linaro.orgmailto:gnu-morello@op-lists.linaro.org To unsubscribe send an email to gnu-morello-leave@op-lists.linaro.orgmailto:gnu-morello-leave@op-lists.linaro.org -- Gnu-morello mailing list -- gnu-morello@op-lists.linaro.orgmailto:gnu-morello@op-lists.linaro.org To unsubscribe send an email to gnu-morello-leave@op-lists.linaro.orgmailto:gnu-morello-leave@op-lists.linaro.org