diff --git a/01_wait_forever/Makefile b/01_wait_forever/Makefile index 70ee5689..6f6f10ab 100644 --- a/01_wait_forever/Makefile +++ b/01_wait_forever/Makefile @@ -83,7 +83,7 @@ readelf: readelf -a kernel objdump: - cargo objdump --target $(TARGET) -- -disassemble -print-imm-hex kernel + cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel nm: - cargo nm --target $(TARGET) -- kernel | sort + cargo nm --target $(TARGET) -- -print-size kernel | sort diff --git a/02_runtime_init/Makefile b/02_runtime_init/Makefile index 70ee5689..6f6f10ab 100644 --- a/02_runtime_init/Makefile +++ b/02_runtime_init/Makefile @@ -83,7 +83,7 @@ readelf: readelf -a kernel objdump: - cargo objdump --target $(TARGET) -- -disassemble -print-imm-hex kernel + cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel nm: - cargo nm --target $(TARGET) -- kernel | sort + cargo nm --target $(TARGET) -- -print-size kernel | sort diff --git a/03_hacky_hello_world/Makefile b/03_hacky_hello_world/Makefile index f34edb92..31abd79a 100644 --- a/03_hacky_hello_world/Makefile +++ b/03_hacky_hello_world/Makefile @@ -83,7 +83,7 @@ readelf: readelf -a kernel objdump: - cargo objdump --target $(TARGET) -- -disassemble -print-imm-hex kernel + cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel nm: - cargo nm --target $(TARGET) -- kernel | sort + cargo nm --target $(TARGET) -- -print-size kernel | sort diff --git a/04_zero_overhead_abstraction/Makefile b/04_zero_overhead_abstraction/Makefile index f34edb92..31abd79a 100644 --- a/04_zero_overhead_abstraction/Makefile +++ b/04_zero_overhead_abstraction/Makefile @@ -83,7 +83,7 @@ readelf: readelf -a kernel objdump: - cargo objdump --target $(TARGET) -- -disassemble -print-imm-hex kernel + cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel nm: - cargo nm --target $(TARGET) -- kernel | sort + cargo nm --target $(TARGET) -- -print-size kernel | sort diff --git a/05_safe_globals/Makefile b/05_safe_globals/Makefile index f34edb92..31abd79a 100644 --- a/05_safe_globals/Makefile +++ b/05_safe_globals/Makefile @@ -83,7 +83,7 @@ readelf: readelf -a kernel objdump: - cargo objdump --target $(TARGET) -- -disassemble -print-imm-hex kernel + cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel nm: - cargo nm --target $(TARGET) -- kernel | sort + cargo nm --target $(TARGET) -- -print-size kernel | sort diff --git a/06_drivers_gpio_uart/Makefile b/06_drivers_gpio_uart/Makefile index f34edb92..31abd79a 100644 --- a/06_drivers_gpio_uart/Makefile +++ b/06_drivers_gpio_uart/Makefile @@ -83,7 +83,7 @@ readelf: readelf -a kernel objdump: - cargo objdump --target $(TARGET) -- -disassemble -print-imm-hex kernel + cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel nm: - cargo nm --target $(TARGET) -- kernel | sort + cargo nm --target $(TARGET) -- -print-size kernel | sort diff --git a/07_uart_chainloader/Makefile b/07_uart_chainloader/Makefile index 8a58fa8d..ca03e22d 100644 --- a/07_uart_chainloader/Makefile +++ b/07_uart_chainloader/Makefile @@ -102,7 +102,7 @@ readelf: readelf -a kernel objdump: - cargo objdump --target $(TARGET) -- -disassemble -print-imm-hex kernel + cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel nm: - cargo nm --target $(TARGET) -- kernel | sort + cargo nm --target $(TARGET) -- -print-size kernel | sort diff --git a/08_timestamps/Makefile b/08_timestamps/Makefile index ffa386af..6df50b6e 100644 --- a/08_timestamps/Makefile +++ b/08_timestamps/Makefile @@ -93,7 +93,7 @@ readelf: readelf -a kernel objdump: - cargo objdump --target $(TARGET) -- -disassemble -print-imm-hex kernel + cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel nm: - cargo nm --target $(TARGET) -- kernel | sort + cargo nm --target $(TARGET) -- -print-size kernel | sort diff --git a/09_hw_debug_JTAG/Makefile b/09_hw_debug_JTAG/Makefile index fb661c66..e90c829e 100644 --- a/09_hw_debug_JTAG/Makefile +++ b/09_hw_debug_JTAG/Makefile @@ -121,7 +121,7 @@ readelf: readelf -a kernel objdump: - cargo objdump --target $(TARGET) -- -disassemble -print-imm-hex kernel + cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel nm: - cargo nm --target $(TARGET) -- kernel | sort + cargo nm --target $(TARGET) -- -print-size kernel | sort diff --git a/10_privilege_level/Makefile b/10_privilege_level/Makefile index fb661c66..e90c829e 100644 --- a/10_privilege_level/Makefile +++ b/10_privilege_level/Makefile @@ -121,7 +121,7 @@ readelf: readelf -a kernel objdump: - cargo objdump --target $(TARGET) -- -disassemble -print-imm-hex kernel + cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel nm: - cargo nm --target $(TARGET) -- kernel | sort + cargo nm --target $(TARGET) -- -print-size kernel | sort diff --git a/10_privilege_level/README.md b/10_privilege_level/README.md index 8837a198..e94300a9 100644 --- a/10_privilege_level/README.md +++ b/10_privilege_level/README.md @@ -145,28 +145,28 @@ make objdump Disassembly of section .text: 0000000000080000 _start: - 80000: a8 00 38 d5 mrs x8, MPIDR_EL1 - 80004: 1f 05 40 f2 tst x8, #0x3 - 80008: 81 00 00 54 b.ne #0x10 <_start+0x18> - 8000c: 48 42 38 d5 mrs x8, CurrentEL - 80010: 1f 21 00 71 cmp w8, #0x8 - 80014: 60 00 00 54 b.eq #0xc <_start+0x20> - 80018: 5f 20 03 d5 wfe - 8001c: ff ff ff 17 b #-0x4 <_start+0x18> - 80020: e8 03 1f aa mov x8, xzr - 80024: 69 00 80 52 mov w9, #0x3 - 80028: 09 e1 1c d5 msr CNTHCTL_EL2, x9 - 8002c: 68 e0 1c d5 msr CNTVOFF_EL2, x8 - 80030: 08 00 00 90 adrp x8, #0x0 - 80034: 0a 00 b0 52 mov w10, #-0x80000000 - 80038: ab 78 80 52 mov w11, #0x3c5 - 8003c: 0c 01 a0 52 mov w12, #0x80000 - 80040: 0a 11 1c d5 msr HCR_EL2, x10 - 80044: 0b 40 1c d5 msr SPSR_EL2, x11 - 80048: 08 91 2f 91 add x8, x8, #0xbe4 - 8004c: 28 40 1c d5 msr ELR_EL2, x8 - 80050: 0c 41 1c d5 msr SP_EL1, x12 - 80054: e0 03 9f d6 eret + 80000: mrs x8, MPIDR_EL1 + 80004: tst x8, #0x3 + 80008: b.ne #0x10 <_start+0x18> + 8000c: mrs x8, CurrentEL + 80010: cmp w8, #0x8 + 80014: b.eq #0xc <_start+0x20> + 80018: wfe + 8001c: b #-0x4 <_start+0x18> + 80020: mov x8, xzr + 80024: mov w9, #0x3 + 80028: msr CNTHCTL_EL2, x9 + 8002c: msr CNTVOFF_EL2, x8 + 80030: adrp x8, #0x0 + 80034: mov w10, #-0x80000000 + 80038: mov w11, #0x3c5 + 8003c: mov w12, #0x80000 + 80040: msr HCR_EL2, x10 + 80044: msr SPSR_EL2, x11 + 80048: add x8, x8, #0xdd0 + 8004c: msr ELR_EL2, x8 + 80050: msr SP_EL1, x12 + 80054: eret ``` Looks good! Thanks zero-overhead abstractions in the diff --git a/11_virtual_memory/Makefile b/11_virtual_memory/Makefile index fb661c66..e90c829e 100644 --- a/11_virtual_memory/Makefile +++ b/11_virtual_memory/Makefile @@ -121,7 +121,7 @@ readelf: readelf -a kernel objdump: - cargo objdump --target $(TARGET) -- -disassemble -print-imm-hex kernel + cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel nm: - cargo nm --target $(TARGET) -- kernel | sort + cargo nm --target $(TARGET) -- -print-size kernel | sort diff --git a/12_cpu_exceptions_part1/Makefile b/12_cpu_exceptions_part1/Makefile index fb661c66..e90c829e 100644 --- a/12_cpu_exceptions_part1/Makefile +++ b/12_cpu_exceptions_part1/Makefile @@ -121,7 +121,7 @@ readelf: readelf -a kernel objdump: - cargo objdump --target $(TARGET) -- -disassemble -print-imm-hex kernel + cargo objdump --target $(TARGET) -- -disassemble -no-show-raw-insn -print-imm-hex kernel nm: - cargo nm --target $(TARGET) -- kernel | sort + cargo nm --target $(TARGET) -- -print-size kernel | sort diff --git a/12_cpu_exceptions_part1/README.md b/12_cpu_exceptions_part1/README.md index 138809b0..f6092e3e 100644 --- a/12_cpu_exceptions_part1/README.md +++ b/12_cpu_exceptions_part1/README.md @@ -716,13 +716,13 @@ diff -uNr 11_virtual_memory/src/arch/aarch64/exception.rs 12_cpu_exceptions_part diff -uNr 11_virtual_memory/src/arch/aarch64/exception.S 12_cpu_exceptions_part1/src/arch/aarch64/exception.S --- 11_virtual_memory/src/arch/aarch64/exception.S +++ 12_cpu_exceptions_part1/src/arch/aarch64/exception.S -@@ -0,0 +1,135 @@ +@@ -0,0 +1,133 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright (c) 2018-2019 Andre Richter + -+/// Call the function provided by parameter `\handler` after saving exception context, providing the -+/// same as the first parameter. ++/// Call the function provided by parameter `\handler` after saving exception context. Provide the ++/// context as the first parameter to '\handler'. +.macro CALL_WITH_CONTEXT handler + // Make room on the stack for the exception context. + sub sp, sp, #16 * 17 @@ -775,7 +775,6 @@ diff -uNr 11_virtual_memory/src/arch/aarch64/exception.S 12_cpu_exceptions_part1 +.align 11 + +// Export a symbol for the Rust code to use. -+.global __exception_vector_start +__exception_vector_start: + +// Current exception level with SP_EL0. @@ -825,7 +824,6 @@ diff -uNr 11_virtual_memory/src/arch/aarch64/exception.S 12_cpu_exceptions_part1 +//-------------------------------------------------------------------------------------------------- +// Helper functions +//-------------------------------------------------------------------------------------------------- -+.global __exception_restore_context +__exception_restore_context: + ldr w19, [sp, #16 * 16] + ldp lr, x20, [sp, #16 * 15] diff --git a/12_cpu_exceptions_part1/kernel b/12_cpu_exceptions_part1/kernel index f0b221c2..e452eae8 100755 Binary files a/12_cpu_exceptions_part1/kernel and b/12_cpu_exceptions_part1/kernel differ diff --git a/12_cpu_exceptions_part1/src/arch/aarch64/exception.S b/12_cpu_exceptions_part1/src/arch/aarch64/exception.S index 3fbac5d0..3ed770b2 100644 --- a/12_cpu_exceptions_part1/src/arch/aarch64/exception.S +++ b/12_cpu_exceptions_part1/src/arch/aarch64/exception.S @@ -2,8 +2,8 @@ // // Copyright (c) 2018-2019 Andre Richter -/// Call the function provided by parameter `\handler` after saving exception context, providing the -/// same as the first parameter. +/// Call the function provided by parameter `\handler` after saving exception context. Provide the +/// context as the first parameter to '\handler'. .macro CALL_WITH_CONTEXT handler // Make room on the stack for the exception context. sub sp, sp, #16 * 17 @@ -56,7 +56,6 @@ .align 11 // Export a symbol for the Rust code to use. -.global __exception_vector_start __exception_vector_start: // Current exception level with SP_EL0. @@ -106,7 +105,6 @@ __exception_vector_start: //-------------------------------------------------------------------------------------------------- // Helper functions //-------------------------------------------------------------------------------------------------- -.global __exception_restore_context __exception_restore_context: ldr w19, [sp, #16 * 16] ldp lr, x20, [sp, #16 * 15]