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
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 http://zaliva.org/
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 http://zaliva.org/
Hi Alex:
You can find Morello support in QEMU CHERI (https://github.com/CTSRD-CHERI/qemu). This includes support for both full system and CheriABI userlevel emulation. Most folk build it using cheribuild (https://github.com/CTSRD-CHERI/cheribuild), but it can of course be built manually. It’s quite a lot faster than the FVP, but one presumes its level of correctness/accuracy is rather lower, not just because it’s gone through less verification than the FVP, but also because it is “Morello features added to the baseline version of Armv8-a in QEMU”, which is not the same as the 8.2 found in the Neoverse N1 baseline used for Morello.
Robert
On 29 Jun 2022, at 11:44, Alex Coplan via Gnu-morello gnu-morello@op-lists.linaro.org wrote:
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 http://zaliva.org/
-- Gnu-morello mailing list -- gnu-morello@op-lists.linaro.org To unsubscribe send an email to gnu-morello-leave@op-lists.linaro.org
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.
Vadim
-- Senior Research Associate Department of Computer Science and Technology University of Cambridge http://zaliva.org/
________________________________ From: Alex Coplan via Gnu-morello gnu-morello@op-lists.linaro.org Sent: Wednesday, June 29, 2022 3:44 To: Vadim Zaliva vz231@cam.ac.uk Cc: Vadim Zaliva via Gnu-morello 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%...
-- Gnu-morello mailing list -- gnu-morello@op-lists.linaro.org To unsubscribe send an email to gnu-morello-leave@op-lists.linaro.org
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 http://zaliva.org/
From: Alex Coplan via Gnu-morello gnu-morello@op-lists.linaro.org Sent: Wednesday, June 29, 2022 3:44 To: Vadim Zaliva vz231@cam.ac.uk Cc: Vadim Zaliva via Gnu-morello 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%...
-- Gnu-morello mailing list -- gnu-morello@op-lists.linaro.org To unsubscribe send an email to gnu-morello-leave@op-lists.linaro.org
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 http://zaliva.org/
________________________________ From: Alex Coplan via Gnu-morello gnu-morello@op-lists.linaro.org Sent: Thursday, June 30, 2022 5:57 To: Vadim Zaliva vz231@cam.ac.uk Cc: Vadim Zaliva via Gnu-morello 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%...
From: Alex Coplan via Gnu-morello gnu-morello@op-lists.linaro.org Sent: Wednesday, June 29, 2022 3:44 To: Vadim Zaliva vz231@cam.ac.uk Cc: Vadim Zaliva via Gnu-morello 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%...
-- Gnu-morello mailing list -- gnu-morello@op-lists.linaro.org To unsubscribe send an email to gnu-morello-leave@op-lists.linaro.org
-- Alex -- Gnu-morello mailing list -- gnu-morello@op-lists.linaro.org To unsubscribe send an email to gnu-morello-leave@op-lists.linaro.org
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%...
________________________________ 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%...
________________________________ 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%... -- 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
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.
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
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
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
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?
Another option here is to use the Morello Platform FVP, available from here: https://developer.arm.com/downloads/-/arm-ecosystem-fvps
You can follow the instructions here: https://git.morello-project.org/morello/docs/-/blob/morello/mainline/user-gu... to build the firmware for the FVP.
Then, you can follow the instructions in the LLVM user guide: https://git.morello-project.org/morello/llvm-project-releases/-/blob/morello... to compile and run baremetal binaries, but switching out LLVM for GCC when you build your code. You'll want to use the GCC flags you used above, but then use the make-bm-image.sh script from the LLVM release as described in the above doc and use the FVP command given in the doc to run the binary.
Hope that helps.
Alex
Vadim
-- Senior Research Associate Department of Computer Science and Technology University of Cambridge http://zaliva.org/
-- Gnu-morello mailing list -- gnu-morello@op-lists.linaro.org To unsubscribe send an email to gnu-morello-leave@op-lists.linaro.org
gnu-morello@op-lists.linaro.org