1 1.1 skrll # $NetBSD: README.ipl,v 1.1 2014/02/24 07:23:43 skrll Exp $ 2 1.1 skrll 3 1.1 skrll Coding note: 4 1.1 skrll 5 1.1 skrll In order to make this relocatable, you must follow following 6 1.1 skrll restrictions: 7 1.1 skrll 8 1.1 skrll 1. Do not place any objects in text segment 9 1.1 skrll 1.1. For compiler, 10 1.1 skrll (1) do not declare or define any objects to be placed in 11 1.1 skrll text segment, that is, do not use ``const'' keyword 12 1.1 skrll (but declaring a pointer to const is probably OK), 13 1.1 skrll 14 1.1 skrll (2) make sure string literals, if any, are placed in data 15 1.1 skrll segment (use traditional compiler), 16 1.1 skrll 17 1.1 skrll (3) avoid initialization of automatic objects (non-static 18 1.1 skrll function-local variables) of aggregate types (arrays, 19 1.1 skrll structs and unions), which may implicitly emits 20 1.1 skrll constant data. 21 1.1 skrll 22 1.1 skrll In summary, do not use ANSI extension. Use traditional C. :-) 23 1.1 skrll 24 1.1 skrll 1.2. For linker, do not actually place objects in text segment. 25 1.1 skrll 26 1.1 skrll 2. Do not use function pointers. 27 1.1 skrll 28 1.1 skrll 29 1.1 skrll On-disk layout: 30 1.1 skrll 31 1.1 skrll We have 6.5KB for the primary boot. 32 1.1 skrll 33 1.1 skrll disk address 34 1.1 skrll start size 35 1.1 skrll 000000 0000FC LIF header 36 1.1 skrll 0000FC 000104 unused 37 1.1 skrll 000200 000194 disklabel (404 bytes for 16-partition label) 38 1.1 skrll 000394 00006C unused 39 1.1 skrll 000400 000400 ipl part 2 (1KB) 40 1.1 skrll 000800 000100 optional LIF directory 41 1.1 skrll 000900 000100 unused 42 1.1 skrll 000A00 000600 ipl part 3 (1.5KB) 43 1.1 skrll 001000 001000 ipl part 1 (4KB) 44 1.1 skrll 002000 (file system starts here) 45 1.1 skrll 46 1.1 skrll 47 1.1 skrll On-memory layout on IPL startup: 48 1.1 skrll 49 1.1 skrll The firmware loads ipl part 1 on the memory, and executes it. 50 1.1 skrll 51 1.1 skrll address offset 52 1.1 skrll start size 53 1.1 skrll 000000 001000 ipl part 1 54 1.1 skrll 001000 000A00 (not loaded yet) 55 1.1 skrll (bss section etc) 56 1.1 skrll x 001000 temporary disk buffer 57 1.1 skrll x+1000 stack 58 1.1 skrll 59 1.1 skrll 60 1.1 skrll Then the IPL will load the rest of itself: 61 1.1 skrll 62 1.1 skrll ipl part 1 loads parts 2 and 3, then continues execution. 63 1.1 skrll 64 1.1 skrll address offset 65 1.1 skrll start size 66 1.1 skrll 000000 001000 ipl part 1 67 1.1 skrll 001000 000400 ipl part 2 68 1.1 skrll 001400 000600 ipl part 3 69 1.1 skrll 001A00 xxxxxx (bss section etc) 70