[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 05/16] lib: Make Linux scaffold work for RV64.
From: |
W. J. van der Laan |
Subject: |
[PATCH 05/16] lib: Make Linux scaffold work for RV64. |
Date: |
Sat, 24 Apr 2021 14:22:11 +0000 |
* lib/linux/riscv64-mes-gcc/exit-42.S: Added. Makes basic scaffold pass on RV64.
* lib/linux/riscv64-mes-gcc/hello-mes.S: Same.
* lib/linux/riscv64-mes/elf64-0exit-42.hex2: Same.
* lib/linux/riscv64-mes/elf64-0header.hex2: Same.
* lib/linux/riscv64-mes/elf64-0hello-mes.hex2: Same.
* lib/linux/riscv64-mes/elf64-body-exit-42.hex2: Same.
* lib/linux/riscv64-mes/elf64-body-hello-mes.hex2: Same.
* lib/linux/riscv64-mes/elf64-footer-single-main.hex2: Same.
* lib/linux/riscv64-mes/elf64-header.hex2: Same.
---
lib/linux/riscv64-mes-gcc/exit-42.S | 31 +++
lib/linux/riscv64-mes-gcc/hello-mes.S | 45 ++++
lib/linux/riscv64-mes/elf64-0exit-42.hex2 | 34 +++
lib/linux/riscv64-mes/elf64-0header.hex2 | 84 ++++++
lib/linux/riscv64-mes/elf64-0hello-mes.hex2 | 59 +++++
lib/linux/riscv64-mes/elf64-body-exit-42.hex2 | 53 ++++
.../riscv64-mes/elf64-body-hello-mes.hex2 | 70 +++++
.../riscv64-mes/elf64-footer-single-main.hex2 | 62 +++++
lib/linux/riscv64-mes/elf64-header.hex2 | 241 ++++++++++++++++++
9 files changed, 679 insertions(+)
create mode 100644 lib/linux/riscv64-mes-gcc/exit-42.S
create mode 100644 lib/linux/riscv64-mes-gcc/hello-mes.S
create mode 100644 lib/linux/riscv64-mes/elf64-0exit-42.hex2
create mode 100644 lib/linux/riscv64-mes/elf64-0header.hex2
create mode 100644 lib/linux/riscv64-mes/elf64-0hello-mes.hex2
create mode 100644 lib/linux/riscv64-mes/elf64-body-exit-42.hex2
create mode 100644 lib/linux/riscv64-mes/elf64-body-hello-mes.hex2
create mode 100644 lib/linux/riscv64-mes/elf64-footer-single-main.hex2
create mode 100644 lib/linux/riscv64-mes/elf64-header.hex2
diff --git a/lib/linux/riscv64-mes-gcc/exit-42.S
b/lib/linux/riscv64-mes-gcc/exit-42.S
new file mode 100644
index
0000000000000000000000000000000000000000..13098ac6479845af39e4cca10c4934feb4cfaa2a
--- /dev/null
+++ b/lib/linux/riscv64-mes-gcc/exit-42.S
@@ -0,0 +1,31 @@
+/*
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2021 W. J. van der Laan <laanwj@protonmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+/** Code: */
+
+SYS_exit = 93 /* Linux syscalls. */
+ .globl _start /* Magic linker symbol: --entry-address. */
+
+ .text /* Program text. */
+_start:
+ li a7, SYS_exit /* System call function: exit, in a7. */
+ li a0, 42 /* 1st parameter: exit status, in a0. */
+ ecall /* Call system. */
+ wfi /* Should not be reached. */
diff --git a/lib/linux/riscv64-mes-gcc/hello-mes.S
b/lib/linux/riscv64-mes-gcc/hello-mes.S
new file mode 100644
index
0000000000000000000000000000000000000000..118faf1853d3083eca3e0b774312a9514e82d249
--- /dev/null
+++ b/lib/linux/riscv64-mes-gcc/hello-mes.S
@@ -0,0 +1,45 @@
+/*
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2021 W. J. van der Laan <laanwj@protonmail.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+/** Code: */
+
+SYS_exit = 93 /* Linux syscalls. */
+SYS_write = 64
+stdout = 1 /* File descriptor */
+ .globl _start /* Magic linker symbol: --entry-address. */
+
+ .text /* Program text. */
+hello: .ascii "Hello, GNU Mes!\n"
+bye:
+.equ string_size, (bye - hello)
+
+_start:
+ li a7, SYS_write /* System call function: write, in a7. */
+ li a0, stdout /* 1st parameter: file descriptor, in a0. */
+.equ string_offset, (hello - .)
+ auipc a1, 0 /* Load pc for pc-relative address */
+ addi a1, a1, string_offset /* 2nd parameter: address, in a1. */
+ li a2, string_size /* 3rd parameter: byte count a2. */
+ ecall /* Call system. */
+
+ li a7, SYS_exit /* System call function: exit, in a7. */
+ li a0, 0 /* 1st parameter: exit status, in a0. */
+ ecall /* Call system. */
+ wfi /* Should not be reached. */
diff --git a/lib/linux/riscv64-mes/elf64-0exit-42.hex2
b/lib/linux/riscv64-mes/elf64-0exit-42.hex2
new file mode 100644
index
0000000000000000000000000000000000000000..79dd21a694dba080fa3aeaf0e06f1eb5afac83ed
--- /dev/null
+++ b/lib/linux/riscv64-mes/elf64-0exit-42.hex2
@@ -0,0 +1,34 @@
+### GNU Mes --- Maxwell Equations of Software
+### Copyright © 2021 W. J. van der Laan <laanwj@protonmail.com>
+###
+### 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 <http://www.gnu.org/licenses/>.
+
+### Commentary:
+
+# elf64-exit-42.hex2: `exit 42' for riscv64-linux written in hex2
+# assembly, for usage with elf64-0header.hex2. This produces a 160-byte
+# binary (a0 hex). Inspiration was taken from GNU Gcc output of
+# exit-42.S.
+
+### Code:
+
+# @80
+:ELF_text
+93 08 d0 05 # li a7,93
+13 05 a0 02 # li a0,42
+73 00 00 00 # ecall
+73 00 50 10 # wfi
+:ELF_end
diff --git a/lib/linux/riscv64-mes/elf64-0header.hex2
b/lib/linux/riscv64-mes/elf64-0header.hex2
new file mode 100644
index
0000000000000000000000000000000000000000..f1afe421f357f0860c2c11e178d1cdc6502a25f5
--- /dev/null
+++ b/lib/linux/riscv64-mes/elf64-0header.hex2
@@ -0,0 +1,84 @@
+### Copyright (C) 2016 Jeremiah Orians
+### Copyright (C) 2017,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+### Copyright © 2021 W. J. van der Laan <laanwj@protonmail.com>
+###
+### 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 <http://www.gnu.org/licenses/>.
+
+### Commentary:
+
+# elf64-0header.hex2: Simplest 64 bit elf header in hex2. Only a text
+# segment, no data segment, no symbol tables.
+
+# stage0's hex2 format for riscv64
+# !<label> 1 byte relative
+# $<label> 2 byte address
+# @<label> 2 byte relative
+# &<label> 4 byte address
+# %<label> 4 byte relative
+# local_<label> function-local
+# string_<index> string #<index>
+
+### Code:
+
+:ELF_base
+7F 45 4C 46 # e_ident[EI_MAG0-3] ELF's magic number
+
+02 # e_ident[EI_CLASS] Indicating 64 bit
+01 # e_ident[EI_DATA] Indicating little endianness
+01 # e_ident[EI_VERSION] Indicating original elf
+
+00 # e_ident[EI_OSABI] Set at 0 because none cares
+00 # e_ident[EI_ABIVERSION] See above
+
+00 00 00 00 00 00 00 # e_ident[EI_PAD]
+
+02 00 # e_type Indicating Executable
+F3 00 # e_machine Indicating RV64
+01 00 00 00 # e_version Indicating original elf
+
+&ELF_text 00 00 00 00 # e_entry Address of the entry point
+%ELF_program_headers>ELF_base # e_phoff Address of program header table
+ 00 00 00 00
+
+00 00 00 00 00 00 00 00 # e_shoff Address of section header table
+
+00 00 00 00 # e_flags
+
+40 00 # e_ehsize Indicating our 64 Byte header
+
+38 00 # e_phentsize size of a program header table
+01 00 # e_phnum number of entries in program table
+
+00 00 # e_shentsize size of a section header table
+00 00 # e_shnum number of entries in section table
+
+00 00 # e_shstrndx index of the section names
+
+# @40
+:ELF_program_headers
+:ELF_program_header__text
+01 00 00 00 # ph_type: PT-LOAD = 1
+07 00 00 00 # ph_flags: PF-X|PF-W|PF-R = 7
+00 00 00 00 00 00 00 00 # p_offset
+&ELF_base 00 00 00 00 # ph_vaddr
+&ELF_base 00 00 00 00 # ph_physaddr
+%ELF_end>ELF_base 00 00 00 00 # ph_filesz
+%ELF_end>ELF_base 00 00 00 00 # ph_memsz
+01 00 00 00 00 00 00 00 # ph_align
+
+00 00 00 00 00 00 00 00 # align to @80
+# @80
+:ELF_text
diff --git a/lib/linux/riscv64-mes/elf64-0hello-mes.hex2
b/lib/linux/riscv64-mes/elf64-0hello-mes.hex2
new file mode 100644
index
0000000000000000000000000000000000000000..403f0e8e7ab069571c7fb39e3874e067239edc43
--- /dev/null
+++ b/lib/linux/riscv64-mes/elf64-0hello-mes.hex2
@@ -0,0 +1,59 @@
+### GNU Mes --- Maxwell Equations of Software
+### Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+###
+### 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 <http://www.gnu.org/licenses/>.
+
+### Commentary:
+
+# elf64-hello-mes.hex2: `Hello, GNU Mes!' for x86_64-linux written in
+# hex2 assembly, for usage with elf64-0header.hex2. This produces a
+# 224-byte binary (e0 hex). Inspiration was taken from GNU Gcc output
+# of hello-mes.S.
+
+### Code:
+
+# @80
+:ELF_text
+ # print <hello>
+93 08 00 04 # li a7,64 (sys_write)
+13 05 10 00 # li a0,1
+97 05 00 00 # auipc a1,0x0
+83 e5 c5 00 # lwu a1,12(a1) # addr
+6f 00 80 00 # j 10
+&hello
+
+17 06 00 00 # auipc a2,0x0
+03 66 c6 00 # lwu a2,12(a2) # addr
+6f 00 80 00 # j 10
+%bye>hello
+
+13 06 00 01 # li a2,16
+73 00 00 00 # ecall sys_write
+93 08 d0 05 # li a7,93 (sys_exit)
+13 05 00 00 # li a0,0
+73 00 00 00 # ecall sys_exit
+73 00 50 10 # wfi
+
+00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 # align to @d0
+
+# @d0
+:ELF_data
+:hello
+48 65 6c 6c 6f 2c 20 47 # Hello, G
+4e 55 20 4d 65 73 21 0a # NU Mes!\n
+:bye
+:ELF_end
diff --git a/lib/linux/riscv64-mes/elf64-body-exit-42.hex2
b/lib/linux/riscv64-mes/elf64-body-exit-42.hex2
new file mode 100644
index
0000000000000000000000000000000000000000..7bf846200fcea79d7ac63e5b03cd294aea077018
--- /dev/null
+++ b/lib/linux/riscv64-mes/elf64-body-exit-42.hex2
@@ -0,0 +1,53 @@
+### GNU Mes --- Maxwell Equations of Software
+### Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+### Copyright © 2021 W. J. van der Laan <laanwj@protonmail.com>
+###
+### 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 <http://www.gnu.org/licenses/>.
+
+### Commentary:
+
+# elf64-body-exit-42.hex2: `exit 42' for x86_64-linux written in hex2
+# assembly, for usage with generic elf64-header.hex2 and
+# elf64-footer-single-main.hex.
+
+# This ELF binary contains a symbol table, which means that objdump and
+# gdb can be used to inspect and debug.
+
+### Code:
+
+# @300
+:ELF_text
+:_start
+# exit(42)
+97 02 00 00 # auipc t0,0x0
+83 e2 c2 00 # ld t0,12(t0) # main
+e7 80 02 00 # jalr t0
+&main
+
+# @310
+:main
+93 08 d0 05 # li a7,93
+13 05 a0 02 # li a0,42
+73 00 00 00 # ecall
+73 00 50 10 # wfi
+
+00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 # align to 330
+
+# @330
+:ELF_data
+65 78 69 74 34 32 20 64 61 74 61 20 68 65 72 65 # exit42 data here"
+00
diff --git a/lib/linux/riscv64-mes/elf64-body-hello-mes.hex2
b/lib/linux/riscv64-mes/elf64-body-hello-mes.hex2
new file mode 100644
index
0000000000000000000000000000000000000000..6c9690f93761b69eb2be049705157a1bc3171490
--- /dev/null
+++ b/lib/linux/riscv64-mes/elf64-body-hello-mes.hex2
@@ -0,0 +1,70 @@
+### GNU Mes --- Maxwell Equations of Software
+### Copyright © 2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+###
+### 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 <http://www.gnu.org/licenses/>.
+
+### Commentary:
+
+# elf64-body-hello-mes.hex2: `Hello, GNU Mes!' for x86_64-linux written
+# in hex2 assembly, for usage with generic elf64-header.hex2 and
+# elf64-footer-single-main.hex.
+
+# This ELF binary contains a symbol table which means that objdump and
+# gdb can be used to inspect and debug.
+
+### Code:
+
+# @300
+:ELF_text
+:_start
+# exit(42)
+97 02 00 00 # auipc t0,0x0
+83 e2 c2 00 # ld t0,12(t0) # main
+e7 80 02 00 # jalr t0
+&main
+
+# @310
+:main
+ # print <hello>
+93 08 00 04 # li a7,64 (sys_write)
+13 05 10 00 # li a0,1
+97 05 00 00 # auipc a1,0x0
+83 e5 c5 00 # lwu a1,12(a1) # addr
+6f 00 80 00 # j 10
+&hello
+
+17 06 00 00 # auipc a2,0x0
+03 66 c6 00 # lwu a2,12(a2) # addr
+6f 00 80 00 # j 10
+%bye>hello
+
+13 06 00 01 # li a2,16
+73 00 00 00 # ecall sys_write
+93 08 d0 05 # li a7,93 (sys_exit)
+13 05 00 00 # li a0,0
+73 00 00 00 # ecall sys_exit
+73 00 50 10 # wfi
+
+00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 # align to @360
+
+# @360
+:ELF_data
+:hello
+48 65 6c 6c 6f 2c 20 47 # Hello, G
+4e 55 20 4d 65 73 21 0a # NU Mes!\n
+:bye
+:ELF_end
diff --git a/lib/linux/riscv64-mes/elf64-footer-single-main.hex2
b/lib/linux/riscv64-mes/elf64-footer-single-main.hex2
new file mode 100644
index
0000000000000000000000000000000000000000..0e319c3f7413a0608e2f778e64cf4a99321276d1
--- /dev/null
+++ b/lib/linux/riscv64-mes/elf64-footer-single-main.hex2
@@ -0,0 +1,62 @@
+### Copyright (C) 2017 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+### This file is part of stage0.
+###
+### stage0 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.
+###
+### 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 <http://www.gnu.org/licenses/>.
+
+### stage0's hex2 format for x86_64
+### !<label> 1 byte relative
+### $<label> 2 byte address
+### @<label> 2 byte relative
+### &<label> 4 byte address
+### %<label> 4 byte relative
+### local_<label> function-local
+### string_<index> string #<index>
+
+# @230
+
+:ELF_str
+00 # 0
+:ELF_str__start
+5f 73 74 61 72 74 00 # _start
+:ELF_str__main
+6d 61 69 6e 00 # main
+
+00 00 00
+
+# @370
+:ELF_sym
+00 00 00 00 # st-name
+00 # st-info = stt-func= 2
+00 # st-other
+01 00 # st-shndx: 1
+00 00 00 00 00 00 00 00 # st-offset: &_start - BaseAddress
+00 00 00 00 00 00 00 00 # st-len : &main - _start
+
+# _start
+%ELF_str__start>ELF_str # st-name
+02 # st-info = stt-func= 2
+00 # st-other
+01 00 # st-shndx: 1
+&_start 00 00 00 00
+10 00 00 00 00 00 00 00 # st-len : &main - _start
+
+# main
+%ELF_str__main>ELF_str # st-name
+02 # st-info = stt-func= 2
+00 # st-other
+01 00 # st-shndx: 1
+&main 00 00 00 00
+10 00 00 00 00 00 00 00 # st-len : &ELF_data - main
+
+:ELF_end
diff --git a/lib/linux/riscv64-mes/elf64-header.hex2
b/lib/linux/riscv64-mes/elf64-header.hex2
new file mode 100644
index
0000000000000000000000000000000000000000..e342a29d260995915cc8897c1af6742bca23a689
--- /dev/null
+++ b/lib/linux/riscv64-mes/elf64-header.hex2
@@ -0,0 +1,241 @@
+### Copyright (C) 2016 Jeremiah Orians
+### Copyright (C) 2017,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+### Copyright © 2021 W. J. van der Laan <laanwj@protonmail.com>
+###
+### 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 <http://www.gnu.org/licenses/>.
+
+### Commentary:
+
+# elf64-header.hex2: 64 bit elf header in hex2, with text segment, data
+# segment and symbol tables.
+
+# stage0's hex2 format for riscv64
+# !<label> 1 byte relative
+# $<label> 2 byte address
+# @<label> 2 byte relative
+# &<label> 4 byte address
+# %<label> 4 byte relative
+# local_<label> function-local
+# string_<index> string #<index>
+
+### Code:
+
+:ELF_base
+7F 45 4c 46 # e_ident[EI_MAG0-3] ELF's magic number
+
+02 # e_ident[EI_CLASS] Indicating 64 bit
+01 # e_ident[EI_DATA] Indicating little endianness
+01 # e_ident[EI_VERSION] Indicating original elf
+
+00 # e_ident[EI_OSABI] Set at 0 because none cares
+00 # e_ident[EI_ABIVERSION] See above
+
+00 00 00 00 00 00 00 # e_ident[EI_PAD]
+
+# 0x10
+02 00 # e_type Indicating Executable
+f3 00 # e_machine Indicating AMD64
+01 00 00 00 # e_version Indicating original elf
+
+# 0x18
+&ELF_text 00 00 00 00 # e_entry Address of the entry point
+%ELF_program_headers>ELF_base # e_phoff Address of program header table
+ 00 00 00 00
+
+%ELF_section_headers>ELF_base # e_shoff Address of section header table
+ 00 00 00 00
+
+00 00 00 00 # e_flags
+
+40 00 # e_ehsize Indicating our 64 Byte header
+
+38 00 # e_phentsize size of a program header table
+01 00 # e_phnum number of entries in program table
+
+40 00 # e_shentsize size of a section header table
+07 00 # e_shnum number of entries in section table
+
+04 00 # e_shstrndx index of the section names
+
+# @40
+:ELF_program_headers
+:ELF_program_header__text
+01 00 00 00 # ph_type: PT-LOAD = 1
+07 00 00 00 # ph_flags: PF-X|PF-W|PF-R = 7
+00 00 00 00 00 00 00 00 # p_offset
+&ELF_base 00 00 00 00 # ph_vaddr
+&ELF_base 00 00 00 00 # ph_physaddr
+%ELF_end>ELF_base 00 00 00 00 # ph_filesz
+%ELF_end>ELF_base 00 00 00 00 # ph_memsz
+01 00 00 00 00 00 00 00 # ph_align
+
+
+# @60
+#:ELF_program_header__data # NOT USED
+ # FIXME: linux 4.17 does not allow this overlap
+ # Uhuuh, elf segment at 0000000001000000
+ # requested but the memory is mapped already
+01 00 00 00 # ph_type: PT-LOAD = 1
+07 00 00 00 # ph_flags: PF-X|PF-W|PF-R = 7
+00 00 00 00 00 00 00 00 # ph_offset
+&ELF_base 00 00 00 00 # ph_vaddr
+&ELF_base 00 00 00 00 # ph_physaddr
+%ELF_end>ELF_base 00 00 00 00 # ph_filesz
+%ELF_end>ELF_base 00 00 00 00 # ph_memsz
+01 00 00 00 00 00 00 00 # ph_align
+
+# @b0
+:ELF_comment
+4d 45 53 00 # MES
+00 00 00 00 # align
+00 00 00 00
+00 00 00 00
+
+# @c0
+4d 45 53 00 # MES
+00 00 00 00 # align
+00 00 00 00
+00 00 00 00
+
+# @d0
+:ELF_shstr
+00
+:ELF_shstr__text
+2e 74 65 78 74 00 # .text
+:ELF_shstr__data
+2e 64 61 74 61 00 # .data
+:ELF_shstr__comment
+2e 63 6f 6d 6d 65 6e 74 00 # .comment
+:ELF_shstr__shstr
+2e 73 68 73 74 72 74 61 62 00 # .shstrtab
+:ELF_shstr__sym
+2e 73 79 6d 74 61 62 00 # .symtab
+:ELF_shstr__str
+2e 73 74 72 74 61 62 00 # .strtab
+
+# @100
+
+:ELF_section_headers
+00 00 00 00 # sh_name
+00 00 00 00 # sh_type
+00 00 00 00 00 00 00 00 # sh_flags
+00 00 00 00 00 00 00 00 # sh_addr
+00 00 00 00 00 00 00 00 # sh_offset
+00 00 00 00 00 00 00 00 # sh_length
+00 00 00 00 # sh_link
+00 00 00 00 # sh_info
+00 00 00 00 00 00 00 00 # sh_1?
+00 00 00 00 00 00 00 00 # sh_entsize
+
+## FIXME: M0 for calculations?
+:ELF_section_header_text
+%ELF_shstr__text>ELF_shstr # sh_name
+01 00 00 00 # sh_type = SHT_PROGBITS = 1
+06 00 00 00 00 00 00 00 # sh_flags = SHF-ALLOC|SHF-EXEC =2 | 4 = 6
+&ELF_text 00 00 00 00 # sh_addr
+%ELF_text>ELF_base 00 00 00 00 # sh_offset
+%ELF_data>ELF_text 00 00 00 00 # sh_length
+00 00 00 00 # sh_link
+00 00 00 00 # sh_info
+01 00 00 00 00 00 00 00 # sh_1?
+00 00 00 00 00 00 00 00 # sh_entsize
+
+:ELF_section_header_data
+%ELF_shstr__data>ELF_shstr # sh_name
+01 00 00 00 # sh_type = SHT_PROGBITS = 1
+03 00 00 00 00 00 00 00 # sh_flags = SHF-WRITE|SHF-ALLOC = 1 | 2 = 3
+&ELF_data 00 00 00 00 # sh_addr
+%ELF_data>ELF_base 00 00 00 00 # sh_offset
+%ELF_sym>ELF_data 00 00 00 00 # sh_length
+00 00 00 00 # sh_link
+00 00 00 00 # sh_info
+01 00 00 00 00 00 00 00 # sh_1?
+00 00 00 00 00 00 00 00 # sh_entsize
+
+:ELF_section_header_comment
+%ELF_shstr__comment>ELF_shstr # sh_name
+01 00 00 00 # sh_type = SHT_PROGBITS = 1
+00 00 00 00 00 00 00 00 # sh_flags
+&ELF_comment 00 00 00 00 # sh_addr
+%ELF_comment>ELF_base 00 00 00 00 # sh_offset
+%ELF_shstr>ELF_comment 00 00 00 00 # sh_length
+00 00 00 00 # sh_link
+00 00 00 00 # sh_info
+01 00 00 00 00 00 00 00 # sh_1?
+00 00 00 00 00 00 00 00 # sh_entsize
+
+:ELF_section_header_shstr
+%ELF_shstr__shstr>ELF_shstr # sh_name
+03 00 00 00 # sh_type: str-sht-strtab
+00 00 00 00 00 00 00 00 # sh_flags
+&ELF_shstr 00 00 00 00 # sh_addr
+%ELF_shstr>ELF_base 00 00 00 00 # sh_offset
+%ELF_section_headers>ELF_shstr 00 00 00 00 # sh_length
+00 00 00 00 # sh_link
+00 00 00 00 # sh_info
+01 00 00 00 00 00 00 00 # sh_1?
+00 00 00 00 00 00 00 00 # sh_entsize
+
+:ELF_section_header_sym
+%ELF_shstr__sym>ELF_shstr # sh_name
+02 00 00 00 # sh_type: str-sht-symtab
+00 00 00 00 00 00 00 00 # sh_flags
+&ELF_sym 00 00 00 00 # sh_addr
+%ELF_sym>ELF_base 00 00 00 00 # sh_offset
+%ELF_end>ELF_sym 00 00 00 00 # sh_length
+06 00 00 00 # sh_link:6
+03 00 00 00 # sh_info (=number of entries)
+01 00 00 00 00 00 00 00 # sh_1?
+18 00 00 00 00 00 00 00 # sh_entsize
+
+:ELF_section_header_str
+%ELF_shstr__str>ELF_shstr # sh_name
+03 00 00 00 # sh_type: str-sht-strtab
+00 00 00 00 00 00 00 00 # sh_flags
+&ELF_str 00 00 00 00 # sh_addr
+%ELF_str>ELF_base 00 00 00 00 # sh_offset
+%ELF_sym>ELF_str 00 00 00 00 # sh_length
+00 00 00 00 # sh_link
+00 00 00 00 # sh_info
+01 00 00 00 00 00 00 00 # sh_1?
+00 00 00 00 00 00 00 00 # sh_entsize
+
+# @2c0
+00 00 00 00 # align
+00 00 00 00
+00 00 00 00
+00 00 00 00
+
+# @2d0
+00 00 00 00 # align
+00 00 00 00
+00 00 00 00
+00 00 00 00
+
+# @2e0
+00 00 00 00 # align
+00 00 00 00
+00 00 00 00
+00 00 00 00
+
+# @2f0
+00 00 00 00 # align
+00 00 00 00
+00 00 00 00
+00 00 00 00
+
+# @300
+:ELF_text
--
2.27.0
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH 05/16] lib: Make Linux scaffold work for RV64.,
W. J. van der Laan <=