From 37149aa84dcd2b1254b3cbc114a2c35510931ac5 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Thu, 7 Mar 2019 21:24:50 +0100 Subject: [PATCH] porting: arm scaffold WIP --- lib/arm-mes-gcc/exit-42.S | 46 +++++++++++++++++++++ lib/arm-mes-gcc/hello-mes.S | 58 ++++++++++++++++++++++++++ lib/arm-mes/elf-0footer.hex2 | 27 ------------ lib/arm-mes/elf32-0exit-42.hex2 | 34 +++++++++++++++ lib/arm-mes/elf32-0header.hex2 | 47 ++++++++++++--------- lib/arm-mes/elf32-0hello-mes.hex2 | 50 +++++++++++++++++++++++ lib/arm-mes/elf32-body-exit-42.hex2 | 57 +++++++++++++------------- lib/arm-mes/elf32-body-hello-mes.hex2 | 59 +++++++++++++++++++++++++++ lib/arm-mes/elf32-header.hex2 | 44 ++++++++++++-------- 9 files changed, 328 insertions(+), 94 deletions(-) create mode 100644 lib/arm-mes-gcc/exit-42.S create mode 100644 lib/arm-mes-gcc/hello-mes.S delete mode 100644 lib/arm-mes/elf-0footer.hex2 create mode 100644 lib/arm-mes/elf32-0exit-42.hex2 create mode 100644 lib/arm-mes/elf32-0hello-mes.hex2 create mode 100644 lib/arm-mes/elf32-body-hello-mes.hex2 diff --git a/lib/arm-mes-gcc/exit-42.S b/lib/arm-mes-gcc/exit-42.S new file mode 100644 index 00000000..afe33713 --- /dev/null +++ b/lib/arm-mes-gcc/exit-42.S @@ -0,0 +1,46 @@ +/* + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +/** Commentary: */ + +/* Using gdb, esp. GUD in GNU Emacs is recommended +M-x gdb-display-disassembly-buffer +M-x gdb-display-io-buffer +set disassemble-next-line on +break _start +run +info registers +si +p/x $r0 +RET +... +*/ + +/** Code: */ + +SYS_exit = 1 /* Linux syscall: exit. */ + .globl _start /* Magic linker symbol: --entry-address. */ + + .text /* Program text. */ +_start: + mov r7,$SYS_exit /* System call function: exit, in r7. */ + mov r0,$42 /* First parameter: exit status, in r0. */ + swi 0 /* Call system. */ + wfi /* Should not be reached. */ diff --git a/lib/arm-mes-gcc/hello-mes.S b/lib/arm-mes-gcc/hello-mes.S new file mode 100644 index 00000000..a86928f4 --- /dev/null +++ b/lib/arm-mes-gcc/hello-mes.S @@ -0,0 +1,58 @@ +/* + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +/** Commentary: */ + +/* Using gdb, esp. GUD in GNU Emacs is recommended +M-x gdb-display-disassembly-buffer +M-x gdb-display-io-buffer +set disassemble-next-line on +break _start +run +info registers +si +p/x $r0 +RET +... +*/ + +/** Code: */ + +SYS_exit = 1 /* Linux syscalls. */ +SYS_write = 4 +stdout = 1 /* File discriptor */ + .globl _start /* Magic linker symbol: --entry-address. */ + + .text /* Program text. */ +_start: + mov r7, $SYS_write /* System call function: write, in r7. */ + mov r0, $stdout /* 1st parameter: file descriptor, in r0. */ + add r1, pc, $(hello - here - 4) /* 2nd parameter: address, in r1. */ +here: + mov r2, $(bye-hello) /* 3rd parameter: byte count r2. */ + swi 0 /* Call system. */ + + mov r7,$SYS_exit /* System call function: exit, in r7. */ + mov r0,$0 /* 1st parameter: exit status, in r0. */ + swi 0 /* Call system. */ + wfi /* Should not be reached. */ + +hello: .ascii "Hello, GNU Mes!\n" +bye: diff --git a/lib/arm-mes/elf-0footer.hex2 b/lib/arm-mes/elf-0footer.hex2 deleted file mode 100644 index ef856bc8..00000000 --- a/lib/arm-mes/elf-0footer.hex2 +++ /dev/null @@ -1,27 +0,0 @@ -### Copyright (C) 2017 Jan (janneke) Nieuwenhuizen -### Copyright (C) 2019 Danny Milosavljevic -### This file is part of stage0. -### -### stage0 is free software: you an redistribute it and/or modify -### it under the terms of the GNU General Public License as published by -### the Free Software Foundation, either version 3 of the License, or -### (at your option) any later version. -### -### stage0 is distributed in the hope that it will be useful, -### but WITHOUT ANY WARRANTY; without even the implied warranty of -### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -### GNU General Public License for more details. -### -### You should have received a copy of the GNU General Public License -### along with stage0. If not, see . - -### stage0's hex2 format for arm -### !