Taesoo Kim
Taesoo Kim
gen_range()
for RdRand
impls::next_u32_via_fill()
in next_u32()
RNG_DATA.read_volatile() as u64
in next_u64()
no_std
/lib/crt*.so
)ld
)asm
)libcore
: dependency-free foundation (i.e., no libc, no heap)
panic
and eh_personality
liballoc
: smart pointers and heap-managed collections (i.e., Box)
global_allocator
and alloc_error_handler
libstd
: a set of shared abstractions for Rust software (e.g., I/O, networking, thread)
libcore
and liballoc
libcore
: our OS code, in particular early code, only relies on core
(from lab1)liballoc
: once we have a managed heap on physical pages (from lab3)libstd
: not allowed! but partly import what we’d like (e.g., Path
from lab3)eh_personality
Makefile
layout.ld
init.S
blinky.elf
/ blinky.bin
.cargo/layout.ld
src/init/init.s
src/init/panic.rs
src/init.rs
$ ./qemu.sh build/blinky.elf -d in_asm
IN:
0x0000000004000000: d53800a1 mrs x1, (unknown)
0x0000000004000004: 92400421 and x1, x1, #0x3
0x0000000004000008: b4000061 cbz x1, #+0xc (addr 0x4000014)
IN:
0x0000000004000014: 10ffff61 adr x1, #-0x14 (addr 0x4000000)
0x0000000004000018: 9100003f mov sp, x1
0x000000000400001c: 94000003 bl #+0xc (addr 0x4000028)
IN: kinit
0x0000000004000028: 90000008 adrp x8, #+0x0 (addr 0x4000000)
0x000000000400002c: 91030108 add x8, x8, #0xc0 (192)
0x0000000004000030: 90000009 adrp x9, #+0x0 (addr 0x4000000)
...