Created
October 6, 2020 15:00
-
-
Save hanetzer/1cdf8de484a16789165d6d55f90de1af to your computer and use it in GitHub Desktop.
$ cat bootblock.S;
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ cat bootblock.S | |
build/cbfs/fallback/bootblock.elf: file format elf64-powerpc | |
Disassembly of section .text: | |
0000000000000000 <_start>: | |
#define SAVE_GPR(reg,sp) std r##reg,STACK_GPR##reg(sp) | |
#define REST_GPR(reg,sp) ld r##reg,STACK_GPR##reg(sp) | |
ENTRY(_start) | |
FIXUP_ENDIAN | |
0: 08 00 00 48 tdi 0,r0,72 | |
4: 48 00 00 2c b 30 <_start+0x30> | |
8: a6 00 60 7d .long 0xa600607d | |
c: 01 00 6b 69 .long 0x1006b69 | |
10: a6 4b 7b 7d lhzu r18,31613(r11) | |
14: a6 02 68 7d lhzu r16,26749(r2) | |
18: 05 00 9f 42 .long 0x5009f42 | |
1c: a6 02 88 7d lhzu r16,-30595(r2) | |
20: 14 00 8c 39 .long 0x14008c39 | |
24: a6 4b 9a 7d lhzu r18,-25987(r11) | |
28: a6 03 68 7d lhzu r16,26749(r3) | |
2c: 24 02 00 4c dozi r0,r2,76 | |
/* Set thread priority high. */ | |
or 2,2,2 | |
30: 7c 42 13 78 mr r2,r2 | |
/* Clear MSR[TA] (bit 1) */ | |
mfmsr r20 | |
34: 7e 80 00 a6 mfmsr r20 | |
/* Clear bit 1 - result [1-63,0] */ | |
rldicl r20, r20, 1, 1 | |
38: 7a 94 08 40 rldicl r20,r20,1,1 | |
/* Rotate right 1 - result [0,63] */ | |
rotrdi r20, r20, 1 | |
3c: 7a 94 f8 02 rotldi r20,r20,63 | |
/* Set up srr0/srr1 to enable new MSR */ | |
mtmsr r20 | |
40: 7e 80 01 24 mtmsr r20 | |
/* Want to default NAP value */ | |
lis r20, 0x31 | |
44: 3e 80 00 31 lis r20,49 | |
/* Value is 0x310001 */ | |
ori r20, r20, 1 | |
48: 62 94 00 01 ori r20,r20,1 | |
/* Set actual psscr */ | |
mtspr 855, r20 | |
4c: 7e 97 d3 a6 mtspr 855,r20 | |
0000000000000050 <_start_postmsr>: | |
_start_postmsr: | |
/* bl relative_toc */ | |
/* Determine if this is the first thread */ | |
li r4, 2 | |
50: 38 80 00 02 li r4,2 | |
/* Read spinlock value */ | |
lis r20, kernel_other_thread_spinlock@ha | |
54: 3e 80 00 00 lis r20,0 | |
56: R_PPC64_ADDR16_HA kernel_other_thread_spinlock | |
ori r20, r20, kernel_other_thread_spinlock@l | |
58: 62 94 4d 80 ori r20,r20,19840 | |
5a: R_PPC64_ADDR16_LO kernel_other_thread_spinlock | |
lwsync | |
5c: 7c 20 04 ac lwsync | |
1: | |
ldarx r3, 0, r20 | |
60: 7c 60 a0 a8 ldarx r3,0,r20 | |
cmpwi r3, 0 | |
64: 2c 03 00 00 cmpwi r3,0 | |
bnel cr0, _other_thread_spinlock | |
68: 40 82 20 31 bnel 2098 <_other_thread_spinlock> | |
68: R_PPC64_REL14 _other_thread_spinlock | |
stdcx. r4, 0, r20 | |
6c: 7c 80 a1 ad stdcx. r4,0,r20 | |
bne 1b | |
70: 40 82 ff f0 bne 60 <_start_postmsr+0x10> | |
isync | |
74: 4c 00 01 2c isync | |
b call_bootblock | |
78: 48 00 20 44 b 20bc <call_bootblock> | |
78: R_PPC64_REL24 .text+0x20bc | |
... | |
0000000000000100 <sreset_vector>: | |
/* .balign 8 */ | |
/* p_toc: .8byte _toc + 0x8000 - 0b */ | |
. = 0x100 | |
sreset_vector: | |
FIXUP_ENDIAN | |
100: 08 00 00 48 tdi 0,r0,72 | |
104: 48 00 00 2c b 130 <sreset_vector+0x30> | |
108: a6 00 60 7d .long 0xa600607d | |
10c: 01 00 6b 69 .long 0x1006b69 | |
110: a6 4b 7b 7d lhzu r18,31613(r11) | |
114: a6 02 68 7d lhzu r16,26749(r2) | |
118: 05 00 9f 42 .long 0x5009f42 | |
11c: a6 02 88 7d lhzu r16,-30595(r2) | |
120: 14 00 8c 39 .long 0x14008c39 | |
124: a6 4b 9a 7d lhzu r18,-25987(r11) | |
128: a6 03 68 7d lhzu r16,26749(r3) | |
12c: 24 02 00 4c dozi r0,r2,76 | |
li r3, 0 | |
130: 38 60 00 00 li r3,0 | |
oris r3, r3, 0xa | |
134: 64 63 00 0a oris r3,r3,10 | |
b _start | |
138: 4b ff fe c8 b 0 <_start> | |
138: R_PPC64_REL24 _start | |
... | |
. = 0x180 | |
. = 0x200 | |
mtsprg0 r3 | |
200: 7c 70 43 a6 mtsprg 0,r3 | |
mtsprg1 r4 | |
204: 7c 91 43 a6 mtsprg 1,r4 | |
mfspr r3, SPR_SRR1 | |
208: 7c 7b 02 a6 mfsrr1 r3 | |
mfcr r4 | |
20c: 7c 80 00 26 mfcr r4 | |
rldicl. r3, r3, 48, 62 | |
210: 78 63 87 a3 rldicl. r3,r3,48,62 | |
bne 1f | |
214: 40 82 00 14 bne 228 <sreset_vector+0x128> | |
mtcr r4 | |
218: 7c 8f f1 20 mtcr r4 | |
mfspr r3, SPR_CFAR | |
21c: 7c 7c 02 a6 mfcfar r3 | |
li r4, 0x200 | |
220: 38 80 02 00 li r4,512 | |
b _exception | |
224: 48 00 1b dc b 1e00 <_exception> | |
1: | |
cmpdi r3, 0x1 | |
228: 2c 23 00 01 cmpdi r3,1 | |
bne 2f | |
22c: 40 82 00 10 bne 23c <sreset_vector+0x13c> | |
LOAD_IMM32(r3, sreset_vector - _start) | |
230: 3c 60 00 00 lis r3,0 | |
234: 60 63 01 00 ori r3,r3,256 | |
b 3f | |
238: 48 00 00 0c b 244 <sreset_vector+0x144> | |
2: | |
LOAD_IMM32(r3, sreset_vector - _start) | |
23c: 3c 60 00 00 lis r3,0 | |
240: 60 63 01 00 ori r3,r3,256 | |
3: | |
LOAD_IMM64(r5, _start) | |
244: 3c a0 00 00 lis r5,0 | |
246: R_PPC64_ADDR16_HIGHEST _start | |
248: 60 a5 00 00 ori r5,r5,0 | |
24a: R_PPC64_ADDR16_HIGHER _start | |
24c: 78 a5 07 c6 rldicr r5,r5,32,31 | |
250: 64 a5 00 00 oris r5,r5,0 | |
252: R_PPC64_ADDR16_HI _start | |
254: 60 a5 00 00 ori r5,r5,0 | |
256: R_PPC64_ADDR16_LO _start | |
add r3, r5, r3 | |
258: 7c 65 1a 14 add r3,r5,r3 | |
mtctr r3 | |
25c: 7c 69 03 a6 mtctr r3 | |
li r3, 0x200 | |
260: 38 60 02 00 li r3,512 | |
bctr | |
264: 4e 80 04 20 bctr | |
... | |
mfspr r3, SPR_CFAR ;\ | |
mtsprg1 r4 ;\ | |
li r4, nr ;\ | |
b _exception | |
EXCEPTION(0x300) | |
300: 7c 70 43 a6 mtsprg 0,r3 | |
304: 7c 7c 02 a6 mfcfar r3 | |
308: 7c 91 43 a6 mtsprg 1,r4 | |
30c: 38 80 03 00 li r4,768 | |
310: 48 00 1a f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0x380) | |
380: 7c 70 43 a6 mtsprg 0,r3 | |
384: 7c 7c 02 a6 mfcfar r3 | |
388: 7c 91 43 a6 mtsprg 1,r4 | |
38c: 38 80 03 80 li r4,896 | |
390: 48 00 1a 70 b 1e00 <_exception> | |
... | |
EXCEPTION(0x400) | |
400: 7c 70 43 a6 mtsprg 0,r3 | |
404: 7c 7c 02 a6 mfcfar r3 | |
408: 7c 91 43 a6 mtsprg 1,r4 | |
40c: 38 80 04 00 li r4,1024 | |
410: 48 00 19 f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0x480) | |
480: 7c 70 43 a6 mtsprg 0,r3 | |
484: 7c 7c 02 a6 mfcfar r3 | |
488: 7c 91 43 a6 mtsprg 1,r4 | |
48c: 38 80 04 80 li r4,1152 | |
490: 48 00 19 70 b 1e00 <_exception> | |
... | |
EXCEPTION(0x500) | |
500: 7c 70 43 a6 mtsprg 0,r3 | |
504: 7c 7c 02 a6 mfcfar r3 | |
508: 7c 91 43 a6 mtsprg 1,r4 | |
50c: 38 80 05 00 li r4,1280 | |
510: 48 00 18 f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0x600) | |
600: 7c 70 43 a6 mtsprg 0,r3 | |
604: 7c 7c 02 a6 mfcfar r3 | |
608: 7c 91 43 a6 mtsprg 1,r4 | |
60c: 38 80 06 00 li r4,1536 | |
610: 48 00 17 f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0x700) | |
700: 7c 70 43 a6 mtsprg 0,r3 | |
704: 7c 7c 02 a6 mfcfar r3 | |
708: 7c 91 43 a6 mtsprg 1,r4 | |
70c: 38 80 07 00 li r4,1792 | |
710: 48 00 16 f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0x800) | |
800: 7c 70 43 a6 mtsprg 0,r3 | |
804: 7c 7c 02 a6 mfcfar r3 | |
808: 7c 91 43 a6 mtsprg 1,r4 | |
80c: 38 80 08 00 li r4,2048 | |
810: 48 00 15 f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0x900) | |
900: 7c 70 43 a6 mtsprg 0,r3 | |
904: 7c 7c 02 a6 mfcfar r3 | |
908: 7c 91 43 a6 mtsprg 1,r4 | |
90c: 38 80 09 00 li r4,2304 | |
910: 48 00 14 f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0x980) | |
980: 7c 70 43 a6 mtsprg 0,r3 | |
984: 7c 7c 02 a6 mfcfar r3 | |
988: 7c 91 43 a6 mtsprg 1,r4 | |
98c: 38 80 09 80 li r4,2432 | |
990: 48 00 14 70 b 1e00 <_exception> | |
... | |
EXCEPTION(0xa00) | |
a00: 7c 70 43 a6 mtsprg 0,r3 | |
a04: 7c 7c 02 a6 mfcfar r3 | |
a08: 7c 91 43 a6 mtsprg 1,r4 | |
a0c: 38 80 0a 00 li r4,2560 | |
a10: 48 00 13 f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0xb00) | |
b00: 7c 70 43 a6 mtsprg 0,r3 | |
b04: 7c 7c 02 a6 mfcfar r3 | |
b08: 7c 91 43 a6 mtsprg 1,r4 | |
b0c: 38 80 0b 00 li r4,2816 | |
b10: 48 00 12 f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0xc00) | |
c00: 7c 70 43 a6 mtsprg 0,r3 | |
c04: 7c 7c 02 a6 mfcfar r3 | |
c08: 7c 91 43 a6 mtsprg 1,r4 | |
c0c: 38 80 0c 00 li r4,3072 | |
c10: 48 00 11 f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0xd00) | |
d00: 7c 70 43 a6 mtsprg 0,r3 | |
d04: 7c 7c 02 a6 mfcfar r3 | |
d08: 7c 91 43 a6 mtsprg 1,r4 | |
d0c: 38 80 0d 00 li r4,3328 | |
d10: 48 00 10 f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0xe00) | |
e00: 7c 70 43 a6 mtsprg 0,r3 | |
e04: 7c 7c 02 a6 mfcfar r3 | |
e08: 7c 91 43 a6 mtsprg 1,r4 | |
e0c: 38 80 0e 00 li r4,3584 | |
e10: 48 00 0f f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0xe20) | |
e20: 7c 70 43 a6 mtsprg 0,r3 | |
e24: 7c 7c 02 a6 mfcfar r3 | |
e28: 7c 91 43 a6 mtsprg 1,r4 | |
e2c: 38 80 0e 20 li r4,3616 | |
e30: 48 00 0f d0 b 1e00 <_exception> | |
... | |
EXCEPTION(0xe40) | |
e40: 7c 70 43 a6 mtsprg 0,r3 | |
e44: 7c 7c 02 a6 mfcfar r3 | |
e48: 7c 91 43 a6 mtsprg 1,r4 | |
e4c: 38 80 0e 40 li r4,3648 | |
e50: 48 00 0f b0 b 1e00 <_exception> | |
... | |
EXCEPTION(0xe60) | |
e60: 7c 70 43 a6 mtsprg 0,r3 | |
e64: 7c 7c 02 a6 mfcfar r3 | |
e68: 7c 91 43 a6 mtsprg 1,r4 | |
e6c: 38 80 0e 60 li r4,3680 | |
e70: 48 00 0f 90 b 1e00 <_exception> | |
... | |
EXCEPTION(0xe80) | |
e80: 7c 70 43 a6 mtsprg 0,r3 | |
e84: 7c 7c 02 a6 mfcfar r3 | |
e88: 7c 91 43 a6 mtsprg 1,r4 | |
e8c: 38 80 0e 80 li r4,3712 | |
e90: 48 00 0f 70 b 1e00 <_exception> | |
... | |
EXCEPTION(0xf00) | |
f00: 7c 70 43 a6 mtsprg 0,r3 | |
f04: 7c 7c 02 a6 mfcfar r3 | |
f08: 7c 91 43 a6 mtsprg 1,r4 | |
f0c: 38 80 0f 00 li r4,3840 | |
f10: 48 00 0e f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0xf20) | |
f20: 7c 70 43 a6 mtsprg 0,r3 | |
f24: 7c 7c 02 a6 mfcfar r3 | |
f28: 7c 91 43 a6 mtsprg 1,r4 | |
f2c: 38 80 0f 20 li r4,3872 | |
f30: 48 00 0e d0 b 1e00 <_exception> | |
... | |
EXCEPTION(0xf40) | |
f40: 7c 70 43 a6 mtsprg 0,r3 | |
f44: 7c 7c 02 a6 mfcfar r3 | |
f48: 7c 91 43 a6 mtsprg 1,r4 | |
f4c: 38 80 0f 40 li r4,3904 | |
f50: 48 00 0e b0 b 1e00 <_exception> | |
... | |
EXCEPTION(0xf60) | |
f60: 7c 70 43 a6 mtsprg 0,r3 | |
f64: 7c 7c 02 a6 mfcfar r3 | |
f68: 7c 91 43 a6 mtsprg 1,r4 | |
f6c: 38 80 0f 60 li r4,3936 | |
f70: 48 00 0e 90 b 1e00 <_exception> | |
... | |
EXCEPTION(0xf80) | |
f80: 7c 70 43 a6 mtsprg 0,r3 | |
f84: 7c 7c 02 a6 mfcfar r3 | |
f88: 7c 91 43 a6 mtsprg 1,r4 | |
f8c: 38 80 0f 80 li r4,3968 | |
f90: 48 00 0e 70 b 1e00 <_exception> | |
... | |
EXCEPTION(0x1000) | |
1000: 7c 70 43 a6 mtsprg 0,r3 | |
1004: 7c 7c 02 a6 mfcfar r3 | |
1008: 7c 91 43 a6 mtsprg 1,r4 | |
100c: 38 80 10 00 li r4,4096 | |
1010: 48 00 0d f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0x1100) | |
1100: 7c 70 43 a6 mtsprg 0,r3 | |
1104: 7c 7c 02 a6 mfcfar r3 | |
1108: 7c 91 43 a6 mtsprg 1,r4 | |
110c: 38 80 11 00 li r4,4352 | |
1110: 48 00 0c f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0x1200) | |
1200: 7c 70 43 a6 mtsprg 0,r3 | |
1204: 7c 7c 02 a6 mfcfar r3 | |
1208: 7c 91 43 a6 mtsprg 1,r4 | |
120c: 38 80 12 00 li r4,4608 | |
1210: 48 00 0b f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0x1300) | |
1300: 7c 70 43 a6 mtsprg 0,r3 | |
1304: 7c 7c 02 a6 mfcfar r3 | |
1308: 7c 91 43 a6 mtsprg 1,r4 | |
130c: 38 80 13 00 li r4,4864 | |
1310: 48 00 0a f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0x1400) | |
1400: 7c 70 43 a6 mtsprg 0,r3 | |
1404: 7c 7c 02 a6 mfcfar r3 | |
1408: 7c 91 43 a6 mtsprg 1,r4 | |
140c: 38 80 14 00 li r4,5120 | |
1410: 48 00 09 f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0x1500) | |
1500: 7c 70 43 a6 mtsprg 0,r3 | |
1504: 7c 7c 02 a6 mfcfar r3 | |
1508: 7c 91 43 a6 mtsprg 1,r4 | |
150c: 38 80 15 00 li r4,5376 | |
1510: 48 00 08 f0 b 1e00 <_exception> | |
... | |
EXCEPTION(0x1600) | |
1600: 7c 70 43 a6 mtsprg 0,r3 | |
1604: 7c 7c 02 a6 mfcfar r3 | |
1608: 7c 91 43 a6 mtsprg 1,r4 | |
160c: 38 80 16 00 li r4,5632 | |
1610: 48 00 07 f0 b 1e00 <_exception> | |
... | |
0000000000001e00 <_exception>: | |
. = 0x1e00 | |
_exception: | |
stdu r1, -INT_FRAMESIZE(r1) | |
1e00: f8 21 fc f1 stdu r1,-784(r1) | |
std r3, STACK_CFAR(r1) | |
1e04: f8 61 01 b8 std r3,440(r1) | |
std r4, STACK_TYPE(r1) | |
1e08: f8 81 00 80 std r4,128(r1) | |
mfspr r3, SPR_SRR0 | |
1e0c: 7c 7a 02 a6 mfsrr0 r3 | |
mfspr r4, SPR_SRR1 | |
1e10: 7c 9b 02 a6 mfsrr1 r4 | |
std r3, STACK_SRR0(r1) | |
1e14: f8 61 01 c0 std r3,448(r1) | |
std r3, 16(r1) | |
1e18: f8 61 00 10 std r3,16(r1) | |
std r4, STACK_SRR1(r1) | |
1e1c: f8 81 01 c8 std r4,456(r1) | |
mfspr r3, SPR_DSISR | |
1e20: 7c 72 02 a6 mfdsisr r3 | |
mfspr r4, SPR_DAR | |
1e24: 7c 93 02 a6 mfdar r4 | |
stw r3, STACK_DSISR(r1) | |
1e28: 90 61 01 90 stw r3,400(r1) | |
std r4, STACK_DAR(r1) | |
1e2c: f8 81 01 e0 std r4,480(r1) | |
mfmsr r3 | |
1e30: 7c 60 00 a6 mfmsr r3 | |
li r4, MSR_RI | |
1e34: 38 80 00 02 li r4,2 | |
std r3,STACK_MSR(r1) | |
1e38: f8 61 01 b0 std r3,432(r1) | |
mtmsrd r4,1 | |
1e3c: 7c 81 01 64 mtmsrd r4,1 | |
mfspr r3, SPR_HSRR0 | |
1e40: 7c 7a 4a a6 mfspr r3,314 | |
mfspr r4, SPR_HSRR1 | |
1e44: 7c 9b 4a a6 mfspr r4,315 | |
std r3, STACK_HSRR0(r1) | |
1e48: f8 61 01 d0 std r3,464(r1) | |
std r4, STACK_HSRR1(r1) | |
1e4c: f8 81 01 d8 std r4,472(r1) | |
mfsprg0 r3 | |
1e50: 7c 70 42 a6 mfsprg r3,0 | |
mfsprg1 r4 | |
1e54: 7c 91 42 a6 mfsprg r4,1 | |
SAVE_GPR(0, r1) | |
1e58: f8 01 00 88 std r0,136(r1) | |
SAVE_GPR(1, r1) | |
1e5c: f8 21 00 90 std r1,144(r1) | |
SAVE_GPR(2, r1) | |
1e60: f8 41 00 98 std r2,152(r1) | |
SAVE_GPR(3, r1) | |
1e64: f8 61 00 a0 std r3,160(r1) | |
SAVE_GPR(4, r1) | |
1e68: f8 81 00 a8 std r4,168(r1) | |
SAVE_GPR(5, r1) | |
1e6c: f8 a1 00 b0 std r5,176(r1) | |
SAVE_GPR(6, r1) | |
1e70: f8 c1 00 b8 std r6,184(r1) | |
SAVE_GPR(7, r1) | |
1e74: f8 e1 00 c0 std r7,192(r1) | |
SAVE_GPR(8, r1) | |
1e78: f9 01 00 c8 std r8,200(r1) | |
SAVE_GPR(9, r1) | |
1e7c: f9 21 00 d0 std r9,208(r1) | |
SAVE_GPR(10, r1) | |
1e80: f9 41 00 d8 std r10,216(r1) | |
SAVE_GPR(11, r1) | |
1e84: f9 61 00 e0 std r11,224(r1) | |
SAVE_GPR(12, r1) | |
1e88: f9 81 00 e8 std r12,232(r1) | |
SAVE_GPR(13, r1) | |
1e8c: f9 a1 00 f0 std r13,240(r1) | |
SAVE_GPR(14, r1) | |
1e90: f9 c1 00 f8 std r14,248(r1) | |
SAVE_GPR(15, r1) | |
1e94: f9 e1 01 00 std r15,256(r1) | |
SAVE_GPR(16, r1) | |
1e98: fa 01 01 08 std r16,264(r1) | |
SAVE_GPR(17, r1) | |
1e9c: fa 21 01 10 std r17,272(r1) | |
SAVE_GPR(18, r1) | |
1ea0: fa 41 01 18 std r18,280(r1) | |
SAVE_GPR(19, r1) | |
1ea4: fa 61 01 20 std r19,288(r1) | |
SAVE_GPR(20, r1) | |
1ea8: fa 81 01 28 std r20,296(r1) | |
SAVE_GPR(21, r1) | |
1eac: fa a1 01 30 std r21,304(r1) | |
SAVE_GPR(22, r1) | |
1eb0: fa c1 01 38 std r22,312(r1) | |
SAVE_GPR(23, r1) | |
1eb4: fa e1 01 40 std r23,320(r1) | |
SAVE_GPR(24, r1) | |
1eb8: fb 01 01 48 std r24,328(r1) | |
SAVE_GPR(25, r1) | |
1ebc: fb 21 01 50 std r25,336(r1) | |
SAVE_GPR(26, r1) | |
1ec0: fb 41 01 58 std r26,344(r1) | |
SAVE_GPR(27, r1) | |
1ec4: fb 61 01 60 std r27,352(r1) | |
SAVE_GPR(28, r1) | |
1ec8: fb 81 01 68 std r28,360(r1) | |
SAVE_GPR(29, r1) | |
1ecc: fb a1 01 70 std r29,368(r1) | |
SAVE_GPR(30, r1) | |
1ed0: fb c1 01 78 std r30,376(r1) | |
SAVE_GPR(31, r1) | |
1ed4: fb e1 01 80 std r31,384(r1) | |
mfcr r3 | |
1ed8: 7c 60 00 26 mfcr r3 | |
mfxer r4 | |
1edc: 7c 81 02 a6 mfxer r4 | |
mfctr r5 | |
1ee0: 7c a9 02 a6 mfctr r5 | |
mflr r6 | |
1ee4: 7c c8 02 a6 mflr r6 | |
stw r3, STACK_CR(r1) | |
1ee8: 90 61 01 88 stw r3,392(r1) | |
stw r4, STACK_XER(r1) | |
1eec: 90 81 01 8c stw r4,396(r1) | |
std r5, STACK_CTR(r1) | |
1ef0: f8 a1 01 98 std r5,408(r1) | |
std r6, STACK_LR(r1) | |
1ef4: f8 c1 01 a0 std r6,416(r1) | |
LOAD_IMM64(r3, STACK_INT_MAGIC) | |
1ef8: 3c 60 0b 1a lis r3,2842 | |
1efc: 60 63 b1 af ori r3,r3,45487 | |
1f00: 78 63 07 c6 rldicr r3,r3,32,31 | |
1f04: 64 63 00 ba oris r3,r3,186 | |
1f08: 60 63 12 34 ori r3,r3,4660 | |
std r3, STACK_MAGIC(r1) | |
1f0c: f8 61 00 78 std r3,120(r1) | |
LOAD_IMM64(r4, _start) | |
1f10: 3c 80 00 00 lis r4,0 | |
1f12: R_PPC64_ADDR16_HIGHEST _start | |
1f14: 60 84 00 00 ori r4,r4,0 | |
1f16: R_PPC64_ADDR16_HIGHER _start | |
1f18: 78 84 07 c6 rldicr r4,r4,32,31 | |
1f1c: 64 84 00 00 oris r4,r4,0 | |
1f1e: R_PPC64_ADDR16_HI _start | |
1f20: 60 84 00 00 ori r4,r4,0 | |
1f22: R_PPC64_ADDR16_LO _start | |
LOAD_IMM32(r5, _toc_start - _start) | |
1f24: 3c a0 00 01 lis r5,1 | |
1f26: R_PPC64_REL16_HI _toc_start+0x1f26 | |
1f28: 60 a5 80 00 ori r5,r5,32768 | |
1f2a: R_PPC64_REL16_LO _toc_start+0x1f2a | |
LOAD_IMM32(r6, exception_entry_foo - _start) | |
1f2c: 3c c0 00 00 lis r6,0 | |
1f30: 60 c6 1f 48 ori r6,r6,8008 | |
add r2, r4, r5 | |
1f34: 7c 44 2a 14 add r2,r4,r5 | |
mr r3, r1 | |
1f38: 7c 23 0b 78 mr r3,r1 | |
add r4, r4, r6 | |
1f3c: 7c 84 32 14 add r4,r4,r6 | |
mtctr r4 | |
1f40: 7c 89 03 a6 mtctr r4 | |
bctr | |
1f44: 4e 80 04 20 bctr | |
0000000000001f48 <exception_entry_foo>: | |
exception_entry_foo: | |
bl exception_entry | |
1f48: 48 00 01 a1 bl 20e8 <exception_entry+0x8> | |
1f48: R_PPC64_REL24 exception_entry | |
/* Restore HSRRs in case a NMI interrupted an HSRR-live section | |
* and the NMI uses HSRRs for something. Possibly does not happen | |
* in current code, but good to be careful. | |
*/ | |
ld r3, STACK_HSRR0(r1) | |
1f4c: e8 61 01 d0 ld r3,464(r1) | |
ld r4, STACK_HSRR1(r1) | |
1f50: e8 81 01 d8 ld r4,472(r1) | |
mtspr SPR_HSRR0, r3 | |
1f54: 7c 7a 4b a6 mtspr 314,r3 | |
mtspr SPR_HSRR1, r4 | |
1f58: 7c 9b 4b a6 mtspr 315,r4 | |
lwz r3, STACK_CR(r1) | |
1f5c: 80 61 01 88 lwz r3,392(r1) | |
lwz r4, STACK_XER(r1) | |
1f60: 80 81 01 8c lwz r4,396(r1) | |
ld r5, STACK_CTR(r1) | |
1f64: e8 a1 01 98 ld r5,408(r1) | |
ld r6, STACK_LR(r1) | |
1f68: e8 c1 01 a0 ld r6,416(r1) | |
mtcr r3 | |
1f6c: 7c 6f f1 20 mtcr r3 | |
mtxer r4 | |
1f70: 7c 81 03 a6 mtxer r4 | |
mtctr r5 | |
1f74: 7c a9 03 a6 mtctr r5 | |
mtlr r6 | |
1f78: 7c c8 03 a6 mtlr r6 | |
REST_GPR(0, r1) | |
1f7c: e8 01 00 88 ld r0,136(r1) | |
REST_GPR(2, r1) | |
1f80: e8 41 00 98 ld r2,152(r1) | |
REST_GPR(4, r1) | |
1f84: e8 81 00 a8 ld r4,168(r1) | |
REST_GPR(5, r1) | |
1f88: e8 a1 00 b0 ld r5,176(r1) | |
REST_GPR(6, r1) | |
1f8c: e8 c1 00 b8 ld r6,184(r1) | |
REST_GPR(7, r1) | |
1f90: e8 e1 00 c0 ld r7,192(r1) | |
REST_GPR(8, r1) | |
1f94: e9 01 00 c8 ld r8,200(r1) | |
REST_GPR(9, r1) | |
1f98: e9 21 00 d0 ld r9,208(r1) | |
REST_GPR(10, r1) | |
1f9c: e9 41 00 d8 ld r10,216(r1) | |
REST_GPR(11, r1) | |
1fa0: e9 61 00 e0 ld r11,224(r1) | |
REST_GPR(12, r1) | |
1fa4: e9 81 00 e8 ld r12,232(r1) | |
REST_GPR(13, r1) | |
1fa8: e9 a1 00 f0 ld r13,240(r1) | |
REST_GPR(14, r1) | |
1fac: e9 c1 00 f8 ld r14,248(r1) | |
REST_GPR(15, r1) | |
1fb0: e9 e1 01 00 ld r15,256(r1) | |
REST_GPR(16, r1) | |
1fb4: ea 01 01 08 ld r16,264(r1) | |
REST_GPR(17, r1) | |
1fb8: ea 21 01 10 ld r17,272(r1) | |
REST_GPR(18, r1) | |
1fbc: ea 41 01 18 ld r18,280(r1) | |
REST_GPR(19, r1) | |
1fc0: ea 61 01 20 ld r19,288(r1) | |
REST_GPR(20, r1) | |
1fc4: ea 81 01 28 ld r20,296(r1) | |
REST_GPR(21, r1) | |
1fc8: ea a1 01 30 ld r21,304(r1) | |
REST_GPR(22, r1) | |
1fcc: ea c1 01 38 ld r22,312(r1) | |
REST_GPR(23, r1) | |
1fd0: ea e1 01 40 ld r23,320(r1) | |
REST_GPR(24, r1) | |
1fd4: eb 01 01 48 ld r24,328(r1) | |
REST_GPR(25, r1) | |
1fd8: eb 21 01 50 ld r25,336(r1) | |
REST_GPR(26, r1) | |
1fdc: eb 41 01 58 ld r26,344(r1) | |
REST_GPR(27, r1) | |
1fe0: eb 61 01 60 ld r27,352(r1) | |
REST_GPR(28, r1) | |
1fe4: eb 81 01 68 ld r28,360(r1) | |
REST_GPR(29, r1) | |
1fe8: eb a1 01 70 ld r29,368(r1) | |
REST_GPR(30, r1) | |
1fec: eb c1 01 78 ld r30,376(r1) | |
REST_GPR(31, r1) | |
1ff0: eb e1 01 80 ld r31,384(r1) | |
li r3, 0 | |
1ff4: 38 60 00 00 li r3,0 | |
mtmsrd r3, 1 /* Clear MSR[RI] */ | |
1ff8: 7c 61 01 64 mtmsrd r3,1 | |
ld r3, STACK_SRR0(r1) | |
1ffc: e8 61 01 c0 ld r3,448(r1) | |
mtspr SPR_SRR0,r3 | |
2000: 7c 7a 03 a6 mtsrr0 r3 | |
ld r3, STACK_SRR1(r1) | |
2004: e8 61 01 c8 ld r3,456(r1) | |
mtspr SPR_SRR1, r3 | |
2008: 7c 7b 03 a6 mtsrr1 r3 | |
REST_GPR(3, r1) | |
200c: e8 61 00 a0 ld r3,160(r1) | |
addi r1, r1, INT_FRAMESIZE | |
2010: 38 21 03 10 addi r1,r1,784 | |
rfid | |
2014: 4c 00 00 24 rfid | |
b . | |
2018: 48 00 00 00 b 2018 <exception_entry_foo+0xd0> | |
000000000000201c <timer_monotonic_get>: | |
unsigned long tb; | |
/* We use a memory clobber to avoid this being | |
* moved in the instruction stream | |
*/ | |
asm volatile("mftb %0" : "=r"(tb) : : "memory"); | |
201c: 7d 2c 42 a6 mftb r9 | |
{ | |
// TODO: see src/kernel/timemgr.C | |
// looks right for now. | |
uint64_t value = mftb(); | |
uint64_t freq = 512000000ULL; | |
long usecs = (value * 1000000) / freq; | |
2020: 3d 40 00 0f lis r10,15 | |
2024: 61 4a 42 40 ori r10,r10,16960 | |
2028: 7d 29 51 d2 mulld r9,r9,r10 | |
202c: 3d 40 1e 84 lis r10,7812 | |
2030: 61 4a 80 00 ori r10,r10,32768 | |
2034: 7d 29 53 92 divdu r9,r9,r10 | |
int timer_sched_callback(struct timeout_callback *tocb, unsigned long us); | |
/* Set an absolute time to a number of microseconds. */ | |
static inline void mono_time_set_usecs(struct mono_time *mt, long us) | |
{ | |
mt->microseconds = us; | |
2038: f9 23 00 00 std r9,0(r3) | |
mono_time_set_usecs(mt, usecs); | |
} | |
203c: 4e 80 00 20 blr | |
... | |
000000000000204c <arch_prog_run>: | |
/* SPDX-License-Identifier: GPL-2.0-only */ | |
#include <program_loading.h> | |
void arch_prog_run(struct prog *prog) | |
{ | |
204c: 3c 40 00 02 lis r2,2 | |
204e: R_PPC64_ADDR16_HA .TOC. | |
2050: 38 42 80 00 addi r2,r2,-32768 | |
2052: R_PPC64_ADDR16_LO .TOC. | |
2054: 7c 08 02 a6 mflr r0 | |
2058: 7c 69 1b 78 mr r9,r3 | |
void (*doit)(void *) = prog_entry(prog); | |
doit(prog_entry_arg(prog)); | |
205c: e9 89 00 30 ld r12,48(r9) | |
{ | |
2060: f8 01 00 10 std r0,16(r1) | |
2064: f8 21 ff e1 stdu r1,-32(r1) | |
doit(prog_entry_arg(prog)); | |
2068: e8 63 00 38 ld r3,56(r3) | |
206c: 7d 89 03 a6 mtctr r12 | |
2070: f8 41 00 18 std r2,24(r1) | |
2074: 4e 80 04 21 bctrl | |
2078: e8 41 00 18 ld r2,24(r1) | |
} | |
207c: 38 21 00 20 addi r1,r1,32 | |
2080: e8 01 00 10 ld r0,16(r1) | |
2084: 7c 08 03 a6 mtlr r0 | |
2088: 4e 80 00 20 blr | |
208c: 00 00 00 00 .long 0x0 | |
2090: 00 00 00 01 .long 0x1 | |
2094: 80 00 00 00 lwz r0,0(0) | |
0000000000002098 <_other_thread_spinlock>: | |
ENTRY(_other_thread_spinlock) | |
/* Read spinlock value */ | |
lis r2, kernel_other_thread_spinlock@ha | |
2098: 3c 40 00 00 lis r2,0 | |
209a: R_PPC64_ADDR16_HA kernel_other_thread_spinlock | |
ori r2, r2, kernel_other_thread_spinlock@l | |
209c: 60 42 4d 80 ori r2,r2,19840 | |
209e: R_PPC64_ADDR16_LO kernel_other_thread_spinlock | |
1: | |
ld r3, 0(r2) | |
20a0: e8 62 00 00 ld r3,0(r2) | |
/* Loop until value is 1 */ | |
cmpwi cr0, r3, 1 | |
20a4: 2c 03 00 01 cmpwi r3,1 | |
beq _other_thread_spinlock_complete | |
20a8: 41 82 00 0c beq 20b4 <_other_thread_spinlock_complete> | |
/* Lower thread priority */ | |
or 1,1,1 | |
20ac: 7c 21 0b 78 mr r1,r1 | |
b 1b | |
20b0: 4b ff ff f0 b 20a0 <_other_thread_spinlock+0x8> | |
00000000000020b4 <_other_thread_spinlock_complete>: | |
_other_thread_spinlock_complete: | |
/* Raise thread priority */ | |
or 2,2,2 | |
20b4: 7c 42 13 78 mr r2,r2 | |
isync | |
20b8: 4c 00 01 2c isync | |
00000000000020bc <call_bootblock>: | |
ENDPROC(_other_thread_spinlock) | |
call_bootblock: | |
li r3, 0 | |
20bc: 38 60 00 00 li r3,0 | |
lis r1, _estack@h | |
20c0: 3c 20 00 07 lis r1,7 | |
20c2: R_PPC64_ADDR16_HI _estack | |
ori r1, r1, _estack@l | |
20c4: 60 21 ff 00 ori r1,r1,65280 | |
20c6: R_PPC64_ADDR16_LO _estack | |
std r3, 0(r1) | |
20c8: f8 61 00 00 std r3,0(r1) | |
std r3, 8(r1) | |
20cc: f8 61 00 08 std r3,8(r1) | |
std r3, 16(r1) | |
20d0: f8 61 00 10 std r3,16(r1) | |
/* std r0, 0(r1) */ | |
/* addi r1, r1, 8 */ | |
/* cmpd cr0, r1, r3 */ | |
/* bne init_stack_loop */ | |
bl main | |
20d4: 48 00 1c bd bl 3d90 <main+0x8> | |
20d4: R_PPC64_REL24 main | |
nop | |
20d8: 60 00 00 00 nop | |
b . | |
20dc: 48 00 00 00 b 20dc <call_bootblock+0x20> | |
00000000000020e0 <exception_entry>: | |
#define EXCEPTION_MAX_STR 320 | |
void exception_entry(struct stack_frame *); | |
void exception_entry(struct stack_frame *stack) | |
{ | |
20e0: 3c 40 00 02 lis r2,2 | |
20e2: R_PPC64_ADDR16_HA .TOC. | |
20e4: 38 42 80 00 addi r2,r2,-32768 | |
20e6: R_PPC64_ADDR16_LO .TOC. | |
uint64_t nip; | |
uint64_t msr; | |
char buf[EXCEPTION_MAX_STR]; | |
size_t l; | |
switch(stack->type) { | |
20e8: e9 23 00 80 ld r9,128(r3) | |
{ | |
20ec: 7c 08 02 a6 mflr r0 | |
switch(stack->type) { | |
20f0: 2b a9 0e 40 cmpldi cr7,r9,3648 | |
{ | |
20f4: 48 00 2b d9 bl 4ccc <_savegpr0_29> | |
20f4: R_PPC64_REL24 _savegpr0_29 | |
20f8: f8 21 fe 41 stdu r1,-448(r1) | |
20fc: 7c 7f 1b 78 mr r31,r3 | |
switch(stack->type) { | |
2100: 41 9e 00 1c beq cr7,211c <exception_entry+0x3c> | |
2104: 41 9d 00 a8 bgt cr7,21ac <exception_entry+0xcc> | |
2108: 2b a9 09 80 cmpldi cr7,r9,2432 | |
210c: 41 9e 00 10 beq cr7,211c <exception_entry+0x3c> | |
2110: 41 9d 00 8c bgt cr7,219c <exception_entry+0xbc> | |
2114: 2b a9 05 00 cmpldi cr7,r9,1280 | |
2118: 40 9e 00 b8 bne cr7,21d0 <exception_entry+0xf0> | |
hv = false; | |
break; | |
} | |
if (hv) { | |
nip = stack->hsrr0; | |
211c: eb df 01 d0 ld r30,464(r31) | |
msr = stack->hsrr1; | |
2120: eb bf 01 d8 ld r29,472(r31) | |
if (!(msr & MSR_RI)) | |
fatal = true; | |
l = 0; | |
switch (stack->type) { | |
2124: 2b a9 01 00 cmpldi cr7,r9,256 | |
2128: 3c 82 ff ff addis r4,r2,-1 | |
212a: R_PPC64_TOC16_HA .text+0x4998 | |
stack->msr = msr; | |
212c: fb bf 01 b0 std r29,432(r31) | |
stack->pc = nip; | |
2130: fb df 01 a8 std r30,424(r31) | |
"System Reset at "REG" ", nip); | |
} | |
break; | |
default: | |
fatal = true; | |
printk(BIOS_ERR, "***********************************************\n"); | |
2134: 38 60 00 03 li r3,3 | |
2138: 38 84 c9 98 addi r4,r4,-13928 | |
213a: R_PPC64_TOC16_LO .text+0x4998 | |
switch (stack->type) { | |
213c: 40 9e 00 a0 bne cr7,21dc <exception_entry+0xfc> | |
printk(BIOS_ERR, "***********************************************\n"); | |
2140: 48 00 10 0d bl 314c <do_printk+0x8> | |
2140: R_PPC64_REL24 do_printk | |
2144: 60 00 00 00 nop | |
l += snprintf(buf + l, EXCEPTION_MAX_STR -l, | |
2148: 3c a2 ff ff addis r5,r2,-1 | |
214a: R_PPC64_TOC16_HA .text+0x49c9 | |
if (fatal) { | |
214c: 73 a9 00 02 andi. r9,r29,2 | |
l += snprintf(buf + l, EXCEPTION_MAX_STR -l, | |
2150: 7f c6 f3 78 mr r6,r30 | |
2154: 38 a5 c9 c9 addi r5,r5,-13879 | |
2156: R_PPC64_TOC16_LO .text+0x49c9 | |
if (fatal) { | |
2158: 41 82 00 0c beq 2164 <exception_entry+0x84> | |
l += snprintf(buf + l, EXCEPTION_MAX_STR -l, | |
215c: 3c a2 ff ff addis r5,r2,-1 | |
215e: R_PPC64_TOC16_HA .text+0x49cf | |
2160: 38 a5 c9 cf addi r5,r5,-13873 | |
2162: R_PPC64_TOC16_LO .text+0x49cf | |
2164: 38 80 01 40 li r4,320 | |
2168: 38 61 00 60 addi r3,r1,96 | |
216c: 48 00 11 59 bl 32c4 <snprintf+0x8> | |
216c: R_PPC64_REL24 snprintf | |
2170: 60 00 00 00 nop | |
l += snprintf(buf + l, EXCEPTION_MAX_STR -l, | |
"Fatal Exception 0x%llx at "REG" ", stack->type, nip); | |
break; | |
} | |
l += snprintf(buf + l, EXCEPTION_MAX_STR - l, " MSR"REG, msr); | |
2174: 39 21 00 60 addi r9,r1,96 | |
2178: 3c a2 ff ff addis r5,r2,-1 | |
217a: R_PPC64_TOC16_HA .text+0x4a0e | |
217c: 20 83 01 40 subfic r4,r3,320 | |
2180: 7f a6 eb 78 mr r6,r29 | |
2184: 38 a5 ca 0e addi r5,r5,-13810 | |
2186: R_PPC64_TOC16_LO .text+0x4a0e | |
2188: 7c 69 1a 14 add r3,r9,r3 | |
218c: 48 00 11 39 bl 32c4 <snprintf+0x8> | |
218c: R_PPC64_REL24 snprintf | |
2190: 60 00 00 00 nop | |
} | |
2194: 38 21 01 c0 addi r1,r1,448 | |
2198: 48 00 2b 84 b 4d1c <_restgpr0_29> | |
2198: R_PPC64_REL24 _restgpr0_29 | |
switch(stack->type) { | |
219c: 2b a9 0e 00 cmpldi cr7,r9,3584 | |
21a0: 41 9e ff 7c beq cr7,211c <exception_entry+0x3c> | |
21a4: 2b a9 0e 20 cmpldi cr7,r9,3616 | |
21a8: 4b ff ff 70 b 2118 <exception_entry+0x38> | |
21ac: 2b a9 0e 80 cmpldi cr7,r9,3712 | |
21b0: 41 9e ff 6c beq cr7,211c <exception_entry+0x3c> | |
21b4: 41 9d 00 0c bgt cr7,21c0 <exception_entry+0xe0> | |
21b8: 2b a9 0e 60 cmpldi cr7,r9,3680 | |
21bc: 4b ff ff 5c b 2118 <exception_entry+0x38> | |
21c0: 2b a9 0e a0 cmpldi cr7,r9,3744 | |
21c4: 41 9e ff 58 beq cr7,211c <exception_entry+0x3c> | |
21c8: 2b a9 0f 80 cmpldi cr7,r9,3968 | |
21cc: 4b ff ff 4c b 2118 <exception_entry+0x38> | |
nip = stack->srr0; | |
21d0: eb df 01 c0 ld r30,448(r31) | |
msr = stack->srr1; | |
21d4: eb bf 01 c8 ld r29,456(r31) | |
21d8: 4b ff ff 4c b 2124 <exception_entry+0x44> | |
printk(BIOS_ERR, "***********************************************\n"); | |
21dc: 48 00 0f 71 bl 314c <do_printk+0x8> | |
21dc: R_PPC64_REL24 do_printk | |
21e0: 60 00 00 00 nop | |
l += snprintf(buf + l, EXCEPTION_MAX_STR -l, | |
21e4: 3c a2 ff ff addis r5,r2,-1 | |
21e6: R_PPC64_TOC16_HA .text+0x49ea | |
21e8: e8 df 00 80 ld r6,128(r31) | |
21ec: 7f c7 f3 78 mr r7,r30 | |
21f0: 38 80 01 40 li r4,320 | |
21f4: 38 61 00 60 addi r3,r1,96 | |
21f8: 38 a5 c9 ea addi r5,r5,-13846 | |
21fa: R_PPC64_TOC16_LO .text+0x49ea | |
21fc: 48 00 10 c9 bl 32c4 <snprintf+0x8> | |
21fc: R_PPC64_REL24 snprintf | |
2200: 60 00 00 00 nop | |
break; | |
2204: 4b ff ff 70 b 2174 <exception_entry+0x94> | |
2208: 00 00 00 00 .long 0x0 | |
220c: 00 00 00 01 .long 0x1 | |
2210: 80 03 00 00 lwz r0,0(r3) | |
0000000000002214 <boot_device_ro>: | |
#define rom_base ((void *) (uintptr_t)(0x6030000000000ULL-CONFIG_ROM_SIZE)) | |
static const struct mem_region_device boot_dev = | |
MEM_REGION_DEV_RO_INIT(rom_base, CONFIG_ROM_SIZE); | |
const struct region_device *boot_device_ro(void) | |
{ | |
2214: 3c 40 00 02 lis r2,2 | |
2216: R_PPC64_ADDR16_HA .TOC. | |
2218: 38 42 80 00 addi r2,r2,-32768 | |
221a: R_PPC64_ADDR16_LO .TOC. | |
return &boot_dev.rdev; | |
} | |
221c: 3c 62 ff ff addis r3,r2,-1 | |
221e: R_PPC64_TOC16_HA .data+0x48 | |
2220: 38 63 cd 90 addi r3,r3,-12912 | |
2222: R_PPC64_TOC16_LO .data+0x48 | |
2224: 4e 80 00 20 blr | |
... | |
0000000000002234 <ulz4fn.part.0>: | |
#include "lz4.c.inc" /* #include for inlining, do not link! */ | |
#define LZ4F_MAGICNUMBER 0x184D2204 | |
#define LZ4F_BLOCKUNCOMPRESSED_FLAG 0x80000000U | |
size_t ulz4fn(const void *src, size_t srcn, void *dst, size_t dstn) | |
2234: 3c 40 00 02 lis r2,2 | |
2236: R_PPC64_ADDR16_HA .TOC. | |
2238: 38 42 80 00 addi r2,r2,-32768 | |
223a: R_PPC64_ADDR16_LO .TOC. | |
return be32_to_cpu(big_endian_32bits); | |
} | |
static inline uint32_t le32toh(uint32_t little_endian_32bits) | |
{ | |
return le32_to_cpu(little_endian_32bits); | |
223c: 7d 20 1c 2c lwbrx r9,0,r3 | |
2240: 7c 08 02 a6 mflr r0 | |
2244: 7d 80 00 26 mfcr r12 | |
independent_blocks = (flags >> 5) & 0x1; | |
has_block_checksum = (flags >> 4) & 1; | |
has_content_size = (flags >> 3) & 0x1; | |
/* We assume there's always only a single, standard frame. */ | |
if (magic != LZ4F_MAGICNUMBER || version != 1) | |
2248: 6d 2a 18 4d xoris r10,r9,6221 | |
224c: 2f 8a 22 04 cmpwi cr7,r10,8708 | |
size_t ulz4fn(const void *src, size_t srcn, void *dst, size_t dstn) | |
2250: 48 00 2a 41 bl 4c90 <_etext> | |
2250: R_PPC64_REL24 _savegpr0_14 | |
2254: 91 81 00 08 stw r12,8(r1) | |
2258: f8 21 fe e1 stdu r1,-288(r1) | |
if (magic != LZ4F_MAGICNUMBER || version != 1) | |
225c: 40 9e 02 74 bne cr7,24d0 <ulz4fn.part.0+0x29c> | |
flags = *(const uint8_t *)in; | |
2260: 89 03 00 04 lbz r8,4(r3) | |
if (magic != LZ4F_MAGICNUMBER || version != 1) | |
2264: 79 09 d0 22 rldicl r9,r8,58,32 | |
2268: 2f 89 00 01 cmpwi cr7,r9,1 | |
226c: 40 9e 02 64 bne cr7,24d0 <ulz4fn.part.0+0x29c> | |
return 0; /* unknown format */ | |
if ((flags & 0x03) || (block_desc & 0x8f)) | |
2270: 89 43 00 05 lbz r10,5(r3) | |
2274: 55 09 07 be clrlwi r9,r8,30 | |
2278: 71 4a 00 8f andi. r10,r10,143 | |
227c: 7d 49 4b 78 or r9,r10,r9 | |
2280: 2f 89 00 00 cmpwi cr7,r9,0 | |
2284: 40 9e 02 4c bne cr7,24d0 <ulz4fn.part.0+0x29c> | |
return 0; /* reserved bits must be zero */ | |
if (!independent_blocks) | |
2288: 79 09 d8 22 rldicl r9,r8,59,32 | |
228c: 2f 89 00 02 cmpwi cr7,r9,2 | |
2290: 41 9e 02 40 beq cr7,24d0 <ulz4fn.part.0+0x29c> | |
return 0; /* we don't support block dependency */ | |
if (has_content_size) { | |
2294: 71 09 00 08 andi. r9,r8,8 | |
in += sizeof(uint8_t); | |
2298: 38 e3 00 06 addi r7,r3,6 | |
if (has_content_size) { | |
229c: 41 82 00 10 beq 22ac <ulz4fn.part.0+0x78> | |
if (srcn < sizeof(uint32_t) + 3*sizeof(uint8_t) + sizeof(uint64_t)) | |
22a0: 2b a4 00 0e cmpldi cr7,r4,14 | |
22a4: 40 9d 02 2c ble cr7,24d0 <ulz4fn.part.0+0x29c> | |
return 0; /* input overrun */ | |
in += sizeof(uint64_t); | |
22a8: 38 e3 00 0e addi r7,r3,14 | |
break; /* decompression error */ | |
out += ret; | |
} | |
in += block_size; | |
if (has_block_checksum) | |
22ac: 71 09 00 10 andi. r9,r8,16 | |
BYTE* cpy; | |
BYTE* oexit = op + targetOutputSize; | |
const BYTE* const lowLimit = lowPrefix - dictSize; | |
const BYTE* const dictEnd = (const BYTE*)dictStart + dictSize; | |
const unsigned dec32table[] = {4, 1, 2, 1, 4, 4, 4, 4}; | |
22b0: 3f 42 ff ff addis r26,r2,-1 | |
22b2: R_PPC64_TOC16_HA .text+0x4958 | |
22b4: 7c bb 2b 78 mr r27,r5 | |
22b8: 7c 97 23 78 mr r23,r4 | |
22bc: 7c 79 1b 78 mr r25,r3 | |
in += sizeof(uint8_t); | |
22c0: 38 e7 00 01 addi r7,r7,1 | |
void *out = dst; | |
22c4: 7c bc 2b 78 mr r28,r5 | |
22c8: 7f 05 32 14 add r24,r5,r6 | |
22cc: 3b 5a c9 58 addi r26,r26,-13992 | |
22ce: R_PPC64_TOC16_LO .text+0x4958 | |
const int dec64table[] = {0, 0, 0, -1, 0, 1, 2, 3}; | |
const int safeDecode = (endOnInput==endOnInputSize); | |
const int checkOffset = ((safeDecode) && (dictSize < (int)(64 KB))); | |
const int inPlaceDecode = ((ip >= op) && (ip < oend)); | |
22d0: 3a a0 00 00 li r21,0 | |
/* copy match within block */ | |
cpy = op + length; | |
if (unlikely(offset<8)) | |
{ | |
const int dec64 = dec64table[offset]; | |
22d4: 3a c1 00 20 addi r22,r1,32 | |
const int inPlaceDecode = ((ip >= op) && (ip < oend)); | |
22d8: 3a 80 00 01 li r20,1 | |
if (has_block_checksum) | |
22dc: 4e 00 00 00 mcrf cr4,cr0 | |
22e0: 7d 40 3c 2c lwbrx r10,0,r7 | |
in += sizeof(uint32_t); | |
22e4: 3a 67 00 04 addi r19,r7,4 | |
if ((size_t)(in - src) + block_size > srcn) | |
22e8: 7d 39 98 50 subf r9,r25,r19 | |
block_size = block_header & ~LZ4F_BLOCKUNCOMPRESSED_FLAG; | |
22ec: 55 48 00 7e clrlwi r8,r10,1 | |
22f0: 79 12 00 20 clrldi r18,r8,32 | |
if ((size_t)(in - src) + block_size > srcn) | |
22f4: 7d 29 92 14 add r9,r9,r18 | |
22f8: 7f b7 48 40 cmpld cr7,r23,r9 | |
22fc: 41 9c 01 d4 blt cr7,24d0 <ulz4fn.part.0+0x29c> | |
if (!block_size) { | |
2300: 2f b2 00 00 cmpdi cr7,r18,0 | |
2304: 40 9e 00 18 bne cr7,231c <ulz4fn.part.0+0xe8> | |
out_size = out - dst; | |
2308: 7c 7b e0 50 subf r3,r27,r28 | |
in += sizeof(uint32_t); | |
} | |
return out_size; | |
} | |
230c: 38 21 01 20 addi r1,r1,288 | |
2310: 81 81 00 08 lwz r12,8(r1) | |
2314: 7d 81 81 20 mtcrf 24,r12 | |
2318: 48 00 29 c8 b 4ce0 <_restgpr0_14> | |
2318: R_PPC64_REL24 _restgpr0_14 | |
if (block_header & LZ4F_BLOCKUNCOMPRESSED_FLAG) { | |
231c: 2f 8a 00 00 cmpwi cr7,r10,0 | |
size_t size = MIN((uintptr_t)block_size, (uintptr_t)dst | |
2320: 7f fc c0 50 subf r31,r28,r24 | |
if (block_header & LZ4F_BLOCKUNCOMPRESSED_FLAG) { | |
2324: 40 9c 00 3c bge cr7,2360 <ulz4fn.part.0+0x12c> | |
size_t size = MIN((uintptr_t)block_size, (uintptr_t)dst | |
2328: 7f bf 90 40 cmpld cr7,r31,r18 | |
memcpy(out, in, size); | |
232c: 7e 64 9b 78 mr r4,r19 | |
2330: 7f 83 e3 78 mr r3,r28 | |
size_t size = MIN((uintptr_t)block_size, (uintptr_t)dst | |
2334: 7f f2 ff 5e isel r31,r18,r31,29 | |
memcpy(out, in, size); | |
2338: 7f e5 fb 78 mr r5,r31 | |
233c: 48 00 22 61 bl 459c <memcpy> | |
233c: R_PPC64_REL24 memcpy | |
2340: 60 00 00 00 nop | |
if (size < block_size) | |
2344: 7f b2 f8 40 cmpld cr7,r18,r31 | |
2348: 41 9d 01 88 bgt cr7,24d0 <ulz4fn.part.0+0x29c> | |
out += ret; | |
234c: 7f 9c fa 14 add r28,r28,r31 | |
in += block_size; | |
2350: 7c f3 92 14 add r7,r19,r18 | |
if (has_block_checksum) | |
2354: 41 92 ff 8c beq cr4,22e0 <ulz4fn.part.0+0xac> | |
2358: 38 e7 00 04 addi r7,r7,4 | |
235c: 4b ff ff 84 b 22e0 <ulz4fn.part.0+0xac> | |
const unsigned dec32table[] = {4, 1, 2, 1, 4, 4, 4, 4}; | |
2360: e8 ba 00 00 ld r5,0(r26) | |
2364: e8 da 00 08 ld r6,8(r26) | |
2368: e9 5a 00 10 ld r10,16(r26) | |
236c: e9 3a 00 18 ld r9,24(r26) | |
const int inPlaceDecode = ((ip >= op) && (ip < oend)); | |
2370: 7f b3 e0 40 cmpld cr7,r19,r28 | |
int ret = LZ4_decompress_generic(in, out, block_size, | |
2374: 7f ff 07 b4 extsw r31,r31 | |
const BYTE* const iend = ip + inputSize; | |
2378: 7e 13 92 14 add r16,r19,r18 | |
BYTE* const oend = op + outputSize; | |
237c: 7e 3c fa 14 add r17,r28,r31 | |
const unsigned dec32table[] = {4, 1, 2, 1, 4, 4, 4, 4}; | |
2380: f8 a1 00 40 std r5,64(r1) | |
2384: f8 c1 00 48 std r6,72(r1) | |
2388: f9 41 00 50 std r10,80(r1) | |
238c: f9 21 00 58 std r9,88(r1) | |
const int dec64table[] = {0, 0, 0, -1, 0, 1, 2, 3}; | |
2390: e8 ba 00 20 ld r5,32(r26) | |
2394: e9 3a 00 38 ld r9,56(r26) | |
2398: e8 da 00 28 ld r6,40(r26) | |
239c: e9 5a 00 30 ld r10,48(r26) | |
23a0: f9 21 00 38 std r9,56(r1) | |
23a4: f8 a1 00 20 std r5,32(r1) | |
23a8: f8 c1 00 28 std r6,40(r1) | |
23ac: f9 41 00 30 std r10,48(r1) | |
const int inPlaceDecode = ((ip >= op) && (ip < oend)); | |
23b0: 39 20 00 00 li r9,0 | |
23b4: 41 9c 00 10 blt cr7,23c4 <ulz4fn.part.0+0x190> | |
23b8: 7f b3 88 40 cmpld cr7,r19,r17 | |
23bc: 7d 34 af 1e isel r9,r20,r21,28 | |
23c0: 7d 29 07 b4 extsw r9,r9 | |
if ((endOnInput) && (unlikely(outputSize==0))) return ((inputSize==1) && (*ip==0)) ? 0 : -1; /* Empty output buffer */ | |
23c4: 2f bf 00 00 cmpdi cr7,r31,0 | |
23c8: 7f 9d e3 78 mr r29,r28 | |
in += sizeof(uint32_t); | |
23cc: 7e 6a 9b 78 mr r10,r19 | |
23d0: 41 9e 00 ec beq cr7,24bc <ulz4fn.part.0+0x288> | |
if (unlikely((inPlaceDecode) && (op + WILDCOPYLENGTH > ip))) goto _output_error; /* output stream ran over input stream */ | |
23d4: 2d a9 00 00 cmpdi cr3,r9,0 | |
if ((endOnInput) && unlikely(ip>=iend-RUN_MASK)) goto _output_error; /* overflow detection */ | |
23d8: 39 d0 ff f1 addi r14,r16,-15 | |
if (((endOnInput) && ((cpy>(partialDecoding?oexit:oend-MFLIMIT)) || (ip+length>iend-(2+1+LASTLITERALS))) ) | |
23dc: 39 11 ff f4 addi r8,r17,-12 | |
23e0: 38 f0 ff f8 addi r7,r16,-8 | |
if ((endOnInput) && (ip > iend-LASTLITERALS)) goto _output_error; | |
23e4: 38 d0 ff fb addi r6,r16,-5 | |
} else { LZ4_copy8(op, match); match+=8; } | |
op += 8; | |
if (unlikely(cpy>oend-12)) | |
{ | |
BYTE* const oCopyLimit = oend-(WILDCOPYLENGTH-1); | |
23e8: 39 f1 ff f9 addi r15,r17,-7 | |
if (cpy > oend-LASTLITERALS) goto _output_error; /* Error : last LASTLITERALS bytes must be literals (uncompressed) */ | |
23ec: 39 71 ff fb addi r11,r17,-5 | |
if (unlikely((inPlaceDecode) && (op + WILDCOPYLENGTH > ip))) goto _output_error; /* output stream ran over input stream */ | |
23f0: 41 8e 00 10 beq cr3,2400 <ulz4fn.part.0+0x1cc> | |
23f4: 39 3d 00 08 addi r9,r29,8 | |
23f8: 7f aa 48 40 cmpld cr7,r10,r9 | |
23fc: 41 9c 02 7c blt cr7,2678 <ulz4fn.part.0+0x444> | |
token = *ip++; | |
2400: 88 8a 00 00 lbz r4,0(r10) | |
2404: 3b ea 00 01 addi r31,r10,1 | |
if ((length=(token>>ML_BITS)) == RUN_MASK) | |
2408: 54 89 e1 3e rlwinm r9,r4,28,4,31 | |
240c: 2b 89 00 0f cmplwi cr7,r9,15 | |
2410: 79 25 00 20 clrldi r5,r9,32 | |
2414: 40 9e 00 5c bne cr7,2470 <ulz4fn.part.0+0x23c> | |
if ((endOnInput) && unlikely(ip>=iend-RUN_MASK)) goto _output_error; /* overflow detection */ | |
2418: 7f bf 70 40 cmpld cr7,r31,r14 | |
241c: 40 9c 02 60 bge cr7,267c <ulz4fn.part.0+0x448> | |
2420: 39 4a 00 02 addi r10,r10,2 | |
2424: 7d 3f 70 50 subf r9,r31,r14 | |
2428: 38 a0 00 0f li r5,15 | |
242c: 7f ae 50 40 cmpld cr7,r14,r10 | |
2430: 39 40 00 01 li r10,1 | |
2434: 7d 2a 4f 1e isel r9,r10,r9,28 | |
s = *ip++; | |
2438: 3b ff 00 01 addi r31,r31,1 | |
while ( likely(endOnInput ? ip<iend-RUN_MASK : 1) && (s==255) ); | |
243c: 2c 29 00 01 cmpdi r9,1 | |
s = *ip++; | |
2440: 89 5f ff ff lbz r10,-1(r31) | |
while ( likely(endOnInput ? ip<iend-RUN_MASK : 1) && (s==255) ); | |
2444: 39 29 ff ff addi r9,r9,-1 | |
length += s; | |
2448: 7c a5 52 14 add r5,r5,r10 | |
while ( likely(endOnInput ? ip<iend-RUN_MASK : 1) && (s==255) ); | |
244c: 41 82 00 0c beq 2458 <ulz4fn.part.0+0x224> | |
2450: 2b 8a 00 ff cmplwi cr7,r10,255 | |
2454: 41 9e ff e4 beq cr7,2438 <ulz4fn.part.0+0x204> | |
if ((safeDecode) && unlikely((size_t)(op+length)<(size_t)(op))) goto _output_error; /* overflow detection */ | |
2458: 7d 3d 2a 14 add r9,r29,r5 | |
245c: 7f bd 48 40 cmpld cr7,r29,r9 | |
2460: 41 9d 02 1c bgt cr7,267c <ulz4fn.part.0+0x448> | |
if ((safeDecode) && unlikely((size_t)(ip+length)<(size_t)(ip))) goto _output_error; /* overflow detection */ | |
2464: 7d 3f 2a 14 add r9,r31,r5 | |
2468: 7f bf 48 40 cmpld cr7,r31,r9 | |
246c: 41 9d 02 10 bgt cr7,267c <ulz4fn.part.0+0x448> | |
cpy = op+length; | |
2470: 7f dd 2a 14 add r30,r29,r5 | |
if (((endOnInput) && ((cpy>(partialDecoding?oexit:oend-MFLIMIT)) || (ip+length>iend-(2+1+LASTLITERALS))) ) | |
2474: 7d 3f 2a 14 add r9,r31,r5 | |
2478: 7f be 40 40 cmpld cr7,r30,r8 | |
247c: 41 9d 00 0c bgt cr7,2488 <ulz4fn.part.0+0x254> | |
2480: 7f a9 38 40 cmpld cr7,r9,r7 | |
2484: 40 9d 00 54 ble cr7,24d8 <ulz4fn.part.0+0x2a4> | |
if ((endOnInput) && ((ip+length != iend) || (cpy > oend))) goto _output_error; /* Error : input must be consumed */ | |
2488: 7f b0 48 40 cmpld cr7,r16,r9 | |
248c: 40 9e 01 f0 bne cr7,267c <ulz4fn.part.0+0x448> | |
2490: 7f b1 f0 40 cmpld cr7,r17,r30 | |
2494: 41 9c 01 e8 blt cr7,267c <ulz4fn.part.0+0x448> | |
memmove(op, ip, length); | |
2498: 7f e4 fb 78 mr r4,r31 | |
249c: 7f a3 eb 78 mr r3,r29 | |
op=cpy; /* correction */ | |
} | |
/* end of decoding */ | |
if (endOnInput) | |
return (int) (((char*)op)-dest); /* Nb of output bytes decoded */ | |
24a0: 7f fc f0 50 subf r31,r28,r30 | |
memmove(op, ip, length); | |
24a4: 48 00 21 39 bl 45dc <memmove> | |
24a4: R_PPC64_REL24 memmove | |
24a8: 60 00 00 00 nop | |
else | |
return (int) (((const char*)ip)-source); /* Nb of input bytes read */ | |
/* Overflow error detected */ | |
_output_error: | |
return (int) (-(((const char*)ip)-source))-1; | |
24ac: 7f ff 07 b4 extsw r31,r31 | |
if (ret < 0) | |
24b0: 2f 9f 00 00 cmpwi cr7,r31,0 | |
24b4: 40 9c fe 98 bge cr7,234c <ulz4fn.part.0+0x118> | |
24b8: 48 00 00 18 b 24d0 <ulz4fn.part.0+0x29c> | |
if ((endOnInput) && (unlikely(outputSize==0))) return ((inputSize==1) && (*ip==0)) ? 0 : -1; /* Empty output buffer */ | |
24bc: 2b 88 00 01 cmplwi cr7,r8,1 | |
24c0: 40 9e 00 10 bne cr7,24d0 <ulz4fn.part.0+0x29c> | |
24c4: 89 27 00 04 lbz r9,4(r7) | |
24c8: 2f 89 00 00 cmpwi cr7,r9,0 | |
24cc: 41 9e fe 80 beq cr7,234c <ulz4fn.part.0+0x118> | |
return 0; /* unknown format */ | |
24d0: 38 60 00 00 li r3,0 | |
24d4: 4b ff fe 38 b 230c <ulz4fn.part.0+0xd8> | |
24d8: 3b ff ff f8 addi r31,r31,-8 | |
*(uint64_t *)dst = *(const uint64_t *)src; | |
24dc: e9 5f 00 09 ldu r10,8(r31) | |
do { LZ4_copy8(d,s); d+=8; s+=8; } while (d<e); | |
24e0: 3b bd 00 08 addi r29,r29,8 | |
24e4: f9 5d ff f8 std r10,-8(r29) | |
24e8: 7f be e8 40 cmpld cr7,r30,r29 | |
24ec: 41 9d ff f0 bgt cr7,24dc <ulz4fn.part.0+0x2a8> | |
return le16_to_cpu(little_endian_16bits); | |
24f0: 7d 40 4e 2c lhbrx r10,0,r9 | |
offset = LZ4_readLE16(ip); ip+=2; | |
24f4: 3b e9 00 02 addi r31,r9,2 | |
match = op - offset; | |
24f8: 7d 2a f0 50 subf r9,r10,r30 | |
if ((checkOffset) && (unlikely(match < lowLimit))) goto _output_error; /* Error : offset outside buffers */ | |
24fc: 7f bc 48 40 cmpld cr7,r28,r9 | |
2500: 41 9d 01 7c bgt cr7,267c <ulz4fn.part.0+0x448> | |
length = token & ML_MASK; | |
2504: 78 9d 07 20 clrldi r29,r4,60 | |
if (length == ML_MASK) | |
2508: 2b 9d 00 0f cmplwi cr7,r29,15 | |
250c: 40 9e 00 30 bne cr7,253c <ulz4fn.part.0+0x308> | |
length = token & ML_MASK; | |
2510: 3b a0 00 0f li r29,15 | |
if ((endOnInput) && (ip > iend-LASTLITERALS)) goto _output_error; | |
2514: 7f bf 30 40 cmpld cr7,r31,r6 | |
2518: 41 9d 01 64 bgt cr7,267c <ulz4fn.part.0+0x448> | |
s = *ip++; | |
251c: 3b ff 00 01 addi r31,r31,1 | |
2520: 88 bf ff ff lbz r5,-1(r31) | |
} while (s==255); | |
2524: 2b 85 00 ff cmplwi cr7,r5,255 | |
length += s; | |
2528: 7f bd 2a 14 add r29,r29,r5 | |
} while (s==255); | |
252c: 41 9e ff e8 beq cr7,2514 <ulz4fn.part.0+0x2e0> | |
if ((safeDecode) && unlikely((size_t)(op+length)<(size_t)op)) goto _output_error; /* overflow detection */ | |
2530: 7c be ea 14 add r5,r30,r29 | |
2534: 7f be 28 40 cmpld cr7,r30,r5 | |
2538: 41 9d 01 44 bgt cr7,267c <ulz4fn.part.0+0x448> | |
if (unlikely(offset<8)) | |
253c: 2b aa 00 07 cmpldi cr7,r10,7 | |
length += MINMATCH; | |
2540: 3b bd 00 04 addi r29,r29,4 | |
cpy = op + length; | |
2544: 7f be ea 14 add r29,r30,r29 | |
if (unlikely(offset<8)) | |
2548: 41 9d 00 e8 bgt cr7,2630 <ulz4fn.part.0+0x3fc> | |
const int dec64 = dec64table[offset]; | |
254c: 79 4a 17 64 rldicr r10,r10,2,61 | |
memcpy(op+4, match, 4); | |
2550: 38 7e 00 04 addi r3,r30,4 | |
2554: f9 61 00 88 std r11,136(r1) | |
2558: f8 c1 00 80 std r6,128(r1) | |
255c: f8 e1 00 78 std r7,120(r1) | |
2560: f9 01 00 70 std r8,112(r1) | |
const int dec64 = dec64table[offset]; | |
2564: 7c 16 52 aa lwax r0,r22,r10 | |
2568: 7c b6 52 14 add r5,r22,r10 | |
op[0] = match[0]; | |
256c: 89 49 00 00 lbz r10,0(r9) | |
2570: 99 5e 00 00 stb r10,0(r30) | |
op[1] = match[1]; | |
2574: 89 49 00 01 lbz r10,1(r9) | |
const int dec64 = dec64table[offset]; | |
2578: f8 01 00 68 std r0,104(r1) | |
op[1] = match[1]; | |
257c: 99 5e 00 01 stb r10,1(r30) | |
op[2] = match[2]; | |
2580: 89 49 00 02 lbz r10,2(r9) | |
2584: 99 5e 00 02 stb r10,2(r30) | |
op[3] = match[3]; | |
2588: 89 49 00 03 lbz r10,3(r9) | |
258c: 99 5e 00 03 stb r10,3(r30) | |
match += dec32table[offset]; | |
2590: 81 45 00 20 lwz r10,32(r5) | |
memcpy(op+4, match, 4); | |
2594: 38 a0 00 04 li r5,4 | |
match += dec32table[offset]; | |
2598: 7d 29 52 14 add r9,r9,r10 | |
memcpy(op+4, match, 4); | |
259c: 7d 24 4b 78 mr r4,r9 | |
25a0: f9 21 00 60 std r9,96(r1) | |
25a4: 48 00 1f f9 bl 459c <memcpy> | |
25a4: R_PPC64_REL24 memcpy | |
25a8: 60 00 00 00 nop | |
match -= dec64; | |
25ac: e9 21 00 60 ld r9,96(r1) | |
25b0: e8 01 00 68 ld r0,104(r1) | |
25b4: e9 01 00 70 ld r8,112(r1) | |
25b8: e8 e1 00 78 ld r7,120(r1) | |
25bc: e8 c1 00 80 ld r6,128(r1) | |
25c0: e9 61 00 88 ld r11,136(r1) | |
25c4: 7d 20 48 50 subf r9,r0,r9 | |
if (unlikely(cpy>oend-12)) | |
25c8: 7f a8 e8 40 cmpld cr7,r8,r29 | |
op += 8; | |
25cc: 3b de 00 08 addi r30,r30,8 | |
if (unlikely(cpy>oend-12)) | |
25d0: 38 a9 ff f8 addi r5,r9,-8 | |
25d4: 40 9c 00 8c bge cr7,2660 <ulz4fn.part.0+0x42c> | |
if (cpy > oend-LASTLITERALS) goto _output_error; /* Error : last LASTLITERALS bytes must be literals (uncompressed) */ | |
25d8: 7f bd 58 40 cmpld cr7,r29,r11 | |
25dc: 41 9d 00 a0 bgt cr7,267c <ulz4fn.part.0+0x448> | |
if (op < oCopyLimit) | |
25e0: 7f be 78 40 cmpld cr7,r30,r15 | |
25e4: 40 9c 00 28 bge cr7,260c <ulz4fn.part.0+0x3d8> | |
25e8: 7f ca f3 78 mr r10,r30 | |
25ec: e8 85 00 09 ldu r4,8(r5) | |
do { LZ4_copy8(d,s); d+=8; s+=8; } while (d<e); | |
25f0: 39 4a 00 08 addi r10,r10,8 | |
25f4: f8 8a ff f8 std r4,-8(r10) | |
25f8: 7f af 50 40 cmpld cr7,r15,r10 | |
25fc: 41 9d ff f0 bgt cr7,25ec <ulz4fn.part.0+0x3b8> | |
match += oCopyLimit - op; | |
2600: 7f de 78 50 subf r30,r30,r15 | |
2604: 7d 29 f2 14 add r9,r9,r30 | |
2608: 7d fe 7b 78 mr r30,r15 | |
260c: 7f be e8 40 cmpld cr7,r30,r29 | |
2610: 7d 5e e8 50 subf r10,r30,r29 | |
2614: 38 a9 ff ff addi r5,r9,-1 | |
2618: 39 4a 00 01 addi r10,r10,1 | |
261c: 41 9d 00 0c bgt cr7,2628 <ulz4fn.part.0+0x3f4> | |
2620: 2f bd 00 00 cmpdi cr7,r29,0 | |
2624: 40 9e 00 28 bne cr7,264c <ulz4fn.part.0+0x418> | |
2628: 39 40 00 01 li r10,1 | |
262c: 48 00 00 20 b 264c <ulz4fn.part.0+0x418> | |
2630: e9 49 00 00 ld r10,0(r9) | |
} else { LZ4_copy8(op, match); match+=8; } | |
2634: 39 29 00 08 addi r9,r9,8 | |
2638: f9 5e 00 00 std r10,0(r30) | |
263c: 4b ff ff 8c b 25c8 <ulz4fn.part.0+0x394> | |
while (op<cpy) *op++ = *match++; | |
2640: 8d 25 00 01 lbzu r9,1(r5) | |
2644: 3b de 00 01 addi r30,r30,1 | |
2648: 99 3e ff ff stb r9,-1(r30) | |
264c: 2c 2a 00 01 cmpdi r10,1 | |
2650: 39 4a ff ff addi r10,r10,-1 | |
2654: 40 82 ff ec bne 2640 <ulz4fn.part.0+0x40c> | |
cpy = op + length; | |
2658: 7f ea fb 78 mr r10,r31 | |
265c: 4b ff fd 94 b 23f0 <ulz4fn.part.0+0x1bc> | |
2660: e9 25 00 09 ldu r9,8(r5) | |
do { LZ4_copy8(d,s); d+=8; s+=8; } while (d<e); | |
2664: 3b de 00 08 addi r30,r30,8 | |
2668: f9 3e ff f8 std r9,-8(r30) | |
266c: 7f bd f0 40 cmpld cr7,r29,r30 | |
2670: 41 9d ff f0 bgt cr7,2660 <ulz4fn.part.0+0x42c> | |
2674: 4b ff ff e4 b 2658 <ulz4fn.part.0+0x424> | |
if (unlikely((inPlaceDecode) && (op + WILDCOPYLENGTH > ip))) goto _output_error; /* output stream ran over input stream */ | |
2678: 7d 5f 53 78 mr r31,r10 | |
return (int) (-(((const char*)ip)-source))-1; | |
267c: 7f f3 f8 50 subf r31,r19,r31 | |
2680: 7f ff f8 f8 not r31,r31 | |
2684: 4b ff fe 28 b 24ac <ulz4fn.part.0+0x278> | |
2688: 00 00 00 00 .long 0x0 | |
268c: 00 00 00 03 .long 0x3 | |
2690: 80 12 00 00 lwz r0,0(r18) | |
0000000000002694 <ulz4fn>: | |
{ | |
2694: 3c 40 00 02 lis r2,2 | |
2696: R_PPC64_ADDR16_HA .TOC. | |
2698: 38 42 80 00 addi r2,r2,-32768 | |
269a: R_PPC64_ADDR16_LO .TOC. | |
if (srcn < sizeof(uint32_t) + 3*sizeof(uint8_t)) | |
269c: 2b a4 00 06 cmpldi cr7,r4,6 | |
26a0: 40 9d 00 08 ble cr7,26a8 <ulz4fn+0x14> | |
26a4: 4b ff fb 98 b 223c <ulz4fn.part.0+0x8> | |
26a4: R_PPC64_REL24 ulz4fn.part.0 | |
} | |
26a8: 38 60 00 00 li r3,0 | |
26ac: 4e 80 00 20 blr | |
... | |
00000000000026bc <read_be32>: | |
static inline uint32_t read_be32(const void *src) | |
{ | |
const uint8_t *s = src; | |
return (((uint32_t)s[0]) << 24) | (((uint32_t)s[1]) << 16) | | |
(((uint32_t)s[2]) << 8) | (((uint32_t)s[3]) << 0); | |
} | |
26bc: 80 63 00 00 lwz r3,0(r3) | |
26c0: 4e 80 00 20 blr | |
... | |
00000000000026d0 <cbfs_for_each_file>: | |
return 0; | |
} | |
int cbfs_for_each_file(const struct region_device *cbfs, | |
const struct cbfsf *prev, struct cbfsf *fh) | |
{ | |
26d0: 3c 40 00 02 lis r2,2 | |
26d2: R_PPC64_ADDR16_HA .TOC. | |
26d4: 38 42 80 00 addi r2,r2,-32768 | |
26d6: R_PPC64_ADDR16_LO .TOC. | |
26d8: 7c 08 02 a6 mflr r0 | |
26dc: 48 00 25 ed bl 4cc8 <_savegpr0_28> | |
26dc: R_PPC64_REL24 _savegpr0_28 | |
if (f == NULL) | |
26e0: 7c 9c 23 79 mr. r28,r4 | |
{ | |
26e4: f8 21 ff a1 stdu r1,-96(r1) | |
26e8: 7c 7e 1b 78 mr r30,r3 | |
26ec: 7c bd 2b 78 mr r29,r5 | |
26f0: 3b e0 00 00 li r31,0 | |
if (f == NULL) | |
26f4: 41 82 00 20 beq 2714 <cbfs_for_each_file+0x44> | |
offset = rdev_relative_offset(cbfs, &f->data); | |
26f8: 38 9c 00 20 addi r4,r28,32 | |
26fc: 48 00 03 9d bl 2a98 <rdev_relative_offset+0x8> | |
26fc: R_PPC64_REL24 rdev_relative_offset | |
2700: 60 00 00 00 nop | |
return ALIGN_UP(offset, CBFS_ALIGNMENT); | |
2704: eb fc 00 38 ld r31,56(r28) | |
2708: 3b ff 00 3f addi r31,r31,63 | |
270c: 7f ff 1a 14 add r31,r31,r3 | |
2710: 7b ff 06 64 rldicr r31,r31,0,57 | |
/* Can't read file. Nothing else to do but bail out. */ | |
if (rdev_readat(cbfs, &file, offset, fsz) != fsz) | |
break; | |
if (memcmp(file.magic, CBFS_FILE_MAGIC, sizeof(file.magic))) { | |
2714: 3f 82 ff ff addis r28,r2,-1 | |
2716: R_PPC64_TOC16_HA .text+0x4a1b | |
2718: 3b 9c ca 1b addi r28,r28,-13797 | |
271a: R_PPC64_TOC16_LO .text+0x4a1b | |
if (offset >= region_device_sz(cbfs)) | |
271c: e9 3e 00 18 ld r9,24(r30) | |
2720: 7f bf 48 40 cmpld cr7,r31,r9 | |
2724: 40 9c 00 ac bge cr7,27d0 <cbfs_for_each_file+0x100> | |
if (rdev_readat(cbfs, &file, offset, fsz) != fsz) | |
2728: 38 c0 00 18 li r6,24 | |
272c: 7f e5 fb 78 mr r5,r31 | |
2730: 38 81 00 20 addi r4,r1,32 | |
2734: 7f c3 f3 78 mr r3,r30 | |
2738: 48 00 04 f9 bl 2c30 <rdev_readat+0x8> | |
2738: R_PPC64_REL24 rdev_readat | |
273c: 60 00 00 00 nop | |
2740: 2f a3 00 18 cmpdi cr7,r3,24 | |
2744: 40 9e 00 94 bne cr7,27d8 <cbfs_for_each_file+0x108> | |
if (memcmp(file.magic, CBFS_FILE_MAGIC, sizeof(file.magic))) { | |
2748: 38 a0 00 08 li r5,8 | |
274c: 7f 84 e3 78 mr r4,r28 | |
2750: 38 61 00 20 addi r3,r1,32 | |
2754: 48 00 1e 01 bl 4554 <memcmp> | |
2754: R_PPC64_REL24 memcmp | |
2758: 60 00 00 00 nop | |
275c: 2f a3 00 00 cmpdi cr7,r3,0 | |
2760: 41 9e 00 0c beq cr7,276c <cbfs_for_each_file+0x9c> | |
offset++; | |
offset = ALIGN_UP(offset, CBFS_ALIGNMENT); | |
2764: 3b ff 00 40 addi r31,r31,64 | |
continue; | |
2768: 4b ff ff b4 b 271c <cbfs_for_each_file+0x4c> | |
} | |
file.len = read_be32(&file.len); | |
276c: 38 61 00 28 addi r3,r1,40 | |
2770: 4b ff ff 4d bl 26bc <read_be32> | |
2770: R_PPC64_REL24 .text+0x26bc | |
2774: 90 61 00 28 stw r3,40(r1) | |
file.offset = read_be32(&file.offset); | |
2778: 38 61 00 34 addi r3,r1,52 | |
277c: 4b ff ff 41 bl 26bc <read_be32> | |
277c: R_PPC64_REL24 .text+0x26bc | |
DEBUG("File @ offset %zx size %x\n", offset, file.len); | |
/* Keep track of both the metadata and the data for the file. */ | |
if (rdev_chain(&fh->metadata, cbfs, offset, file.offset)) | |
2780: 7f e5 fb 78 mr r5,r31 | |
2784: 7f c4 f3 78 mr r4,r30 | |
file.offset = read_be32(&file.offset); | |
2788: 7c 66 1b 78 mr r6,r3 | |
278c: 90 61 00 34 stw r3,52(r1) | |
if (rdev_chain(&fh->metadata, cbfs, offset, file.offset)) | |
2790: 7f a3 eb 78 mr r3,r29 | |
2794: 48 00 05 31 bl 2cc4 <rdev_chain+0x8> | |
2794: R_PPC64_REL24 rdev_chain | |
2798: 60 00 00 00 nop | |
279c: 2f a3 00 00 cmpdi cr7,r3,0 | |
27a0: 40 9e 00 38 bne cr7,27d8 <cbfs_for_each_file+0x108> | |
break; | |
if (rdev_chain(&fh->data, cbfs, offset + file.offset, file.len)) | |
27a4: 80 a1 00 34 lwz r5,52(r1) | |
27a8: 80 c1 00 28 lwz r6,40(r1) | |
27ac: 7f c4 f3 78 mr r4,r30 | |
27b0: 38 7d 00 20 addi r3,r29,32 | |
27b4: 7c a5 fa 14 add r5,r5,r31 | |
27b8: 48 00 05 0d bl 2cc4 <rdev_chain+0x8> | |
27b8: R_PPC64_REL24 rdev_chain | |
27bc: 60 00 00 00 nop | |
27c0: 2c 23 00 00 cmpdi r3,0 | |
27c4: 40 82 00 14 bne 27d8 <cbfs_for_each_file+0x108> | |
/* Success. */ | |
return 0; | |
} | |
return -1; | |
} | |
27c8: 38 21 00 60 addi r1,r1,96 | |
27cc: 48 00 25 4c b 4d18 <_restgpr0_28> | |
27cc: R_PPC64_REL24 _restgpr0_28 | |
return 1; | |
27d0: 38 60 00 01 li r3,1 | |
27d4: 4b ff ff f4 b 27c8 <cbfs_for_each_file+0xf8> | |
return -1; | |
27d8: 38 60 ff ff li r3,-1 | |
27dc: 4b ff ff ec b 27c8 <cbfs_for_each_file+0xf8> | |
27e0: 00 00 00 00 .long 0x0 | |
27e4: 00 00 00 01 .long 0x1 | |
27e8: 80 04 00 00 lwz r0,0(r4) | |
00000000000027ec <cbfsf_file_type>: | |
rdev_munmap(&fh->metadata, metadata); | |
return 0; | |
} | |
int cbfsf_file_type(struct cbfsf *fh, uint32_t *ftype) | |
{ | |
27ec: 3c 40 00 02 lis r2,2 | |
27ee: R_PPC64_ADDR16_HA .TOC. | |
27f0: 38 42 80 00 addi r2,r2,-32768 | |
27f2: R_PPC64_ADDR16_LO .TOC. | |
27f4: 7c 08 02 a6 mflr r0 | |
27f8: fb e1 ff f8 std r31,-8(r1) | |
const size_t sz = sizeof(*ftype); | |
if (rdev_readat(&fh->metadata, ftype, | |
27fc: 38 c0 00 04 li r6,4 | |
2800: 38 a0 00 0c li r5,12 | |
{ | |
2804: 7c 9f 23 78 mr r31,r4 | |
2808: f8 01 00 10 std r0,16(r1) | |
280c: f8 21 ff d1 stdu r1,-48(r1) | |
if (rdev_readat(&fh->metadata, ftype, | |
2810: 48 00 04 21 bl 2c30 <rdev_readat+0x8> | |
2810: R_PPC64_REL24 rdev_readat | |
2814: 60 00 00 00 nop | |
2818: 2f a3 00 04 cmpdi cr7,r3,4 | |
281c: 40 9e 00 1c bne cr7,2838 <cbfsf_file_type+0x4c> | |
offsetof(struct cbfs_file, type), sz) != sz) | |
return -1; | |
*ftype = read_be32(ftype); | |
2820: 7f e3 fb 78 mr r3,r31 | |
2824: 4b ff fe 99 bl 26bc <read_be32> | |
2824: R_PPC64_REL24 .text+0x26bc | |
2828: 90 7f 00 00 stw r3,0(r31) | |
return 0; | |
282c: 38 60 00 00 li r3,0 | |
} | |
2830: 38 21 00 30 addi r1,r1,48 | |
2834: 48 00 25 04 b 4d38 <_restgpr0_31> | |
2834: R_PPC64_REL24 _restgpr0_31 | |
return -1; | |
2838: 38 60 ff ff li r3,-1 | |
283c: 4b ff ff f4 b 2830 <cbfsf_file_type+0x44> | |
2840: 00 00 00 00 .long 0x0 | |
2844: 00 00 00 01 .long 0x1 | |
2848: 80 01 00 00 lwz r0,0(r1) | |
000000000000284c <cbfs_locate>: | |
int cbfs_locate(struct cbfsf *fh, const struct region_device *cbfs, | |
const char *name, uint32_t *type) | |
{ | |
284c: 3c 40 00 02 lis r2,2 | |
284e: R_PPC64_ADDR16_HA .TOC. | |
2850: 38 42 80 00 addi r2,r2,-32768 | |
2852: R_PPC64_ADDR16_LO .TOC. | |
2854: 7c 08 02 a6 mflr r0 | |
2858: 7d 90 80 26 mfocrf r12,8 | |
285c: 91 81 00 08 stw r12,8(r1) | |
2860: 48 00 24 61 bl 4cc0 <_savegpr0_26> | |
2860: R_PPC64_REL24 _savegpr0_26 | |
2864: 7c 9c 23 78 mr r28,r4 | |
struct cbfsf *prev; | |
LOG("Locating '%s'\n", name); | |
2868: 3c 82 ff ff addis r4,r2,-1 | |
286a: R_PPC64_TOC16_HA .text+0x4a24 | |
{ | |
286c: 7c dd 33 78 mr r29,r6 | |
2870: f8 21 ff 61 stdu r1,-160(r1) | |
2874: 7c 7f 1b 78 mr r31,r3 | |
LOG("Locating '%s'\n", name); | |
2878: 38 60 00 06 li r3,6 | |
{ | |
287c: 7c bb 2b 78 mr r27,r5 | |
LOG("Locating '%s'\n", name); | |
2880: 38 84 ca 24 addi r4,r4,-13788 | |
2882: R_PPC64_TOC16_LO .text+0x4a24 | |
DEBUG(" Unmatched '%s' at %zx\n", fname, | |
rdev_relative_offset(cbfs, &fh->metadata)); | |
continue; | |
} | |
if (type != NULL) { | |
2884: 2e 3d 00 00 cmpdi cr4,r29,0 | |
LOG("Locating '%s'\n", name); | |
2888: 48 00 08 c5 bl 314c <do_printk+0x8> | |
2888: R_PPC64_REL24 do_printk | |
288c: 60 00 00 00 nop | |
prev = NULL; | |
2890: 38 80 00 00 li r4,0 | |
ret = cbfs_for_each_file(cbfs, prev, fh); | |
2894: 7f e5 fb 78 mr r5,r31 | |
2898: 7f 83 e3 78 mr r3,r28 | |
289c: 4b ff fe 3d bl 26d8 <cbfs_for_each_file+0x8> | |
289c: R_PPC64_REL24 cbfs_for_each_file | |
if (ret < 0 || ret > 0) | |
28a0: 2f a3 00 00 cmpdi cr7,r3,0 | |
28a4: 40 9e 00 88 bne cr7,292c <cbfs_locate+0xe0> | |
fname = rdev_mmap(&fh->metadata, fsz, | |
28a8: e8 bf 00 18 ld r5,24(r31) | |
28ac: 38 80 00 18 li r4,24 | |
28b0: 7f e3 fb 78 mr r3,r31 | |
28b4: 38 a5 ff e8 addi r5,r5,-24 | |
28b8: 48 00 02 75 bl 2b2c <rdev_mmap+0x8> | |
28b8: R_PPC64_REL24 rdev_mmap | |
28bc: 60 00 00 00 nop | |
if (fname == NULL) | |
28c0: 7c 7a 1b 79 mr. r26,r3 | |
28c4: 41 82 00 68 beq 292c <cbfs_locate+0xe0> | |
name_match = !strcmp(fname, name); | |
28c8: 7f 64 db 78 mr r4,r27 | |
28cc: 48 00 1f f5 bl 48c0 <strcmp> | |
28cc: R_PPC64_REL24 strcmp | |
28d0: 60 00 00 00 nop | |
rdev_munmap(&fh->metadata, fname); | |
28d4: 7f 44 d3 78 mr r4,r26 | |
name_match = !strcmp(fname, name); | |
28d8: 7c 7e 1b 78 mr r30,r3 | |
rdev_munmap(&fh->metadata, fname); | |
28dc: 7f e3 fb 78 mr r3,r31 | |
28e0: 48 00 02 e5 bl 2bc4 <rdev_munmap+0x8> | |
28e0: R_PPC64_REL24 rdev_munmap | |
28e4: 60 00 00 00 nop | |
if (!name_match) { | |
28e8: 2f be 00 00 cmpdi cr7,r30,0 | |
28ec: 7f e4 fb 78 mr r4,r31 | |
28f0: 40 9e ff a4 bne cr7,2894 <cbfs_locate+0x48> | |
if (type != NULL) { | |
28f4: 41 92 00 5c beq cr4,2950 <cbfs_locate+0x104> | |
uint32_t ftype; | |
if (cbfsf_file_type(fh, &ftype)) | |
28f8: 38 81 00 60 addi r4,r1,96 | |
28fc: 7f e3 fb 78 mr r3,r31 | |
2900: 4b ff fe f5 bl 27f4 <cbfsf_file_type+0x8> | |
2900: R_PPC64_REL24 cbfsf_file_type | |
2904: 2f a3 00 00 cmpdi cr7,r3,0 | |
2908: 40 9e 00 24 bne cr7,292c <cbfs_locate+0xe0> | |
break; | |
if (*type != 0 && *type != ftype) { | |
290c: 81 3d 00 00 lwz r9,0(r29) | |
2910: 81 41 00 60 lwz r10,96(r1) | |
2914: 2f a9 00 00 cmpdi cr7,r9,0 | |
2918: 41 9e 00 34 beq cr7,294c <cbfs_locate+0x100> | |
291c: 7f 89 50 40 cmplw cr7,r9,r10 | |
2920: 41 9e 00 30 beq cr7,2950 <cbfs_locate+0x104> | |
DEBUG(" Unmatched type %x at %zx\n", ftype, | |
rdev_relative_offset(cbfs, | |
&fh->metadata)); | |
continue; | |
2924: 7f e4 fb 78 mr r4,r31 | |
2928: 4b ff ff 6c b 2894 <cbfs_locate+0x48> | |
/* Success. */ | |
return 0; | |
} | |
LOG("'%s' not found.\n", name); | |
292c: 3c 82 ff ff addis r4,r2,-1 | |
292e: R_PPC64_TOC16_HA .text+0x4a5c | |
2930: 7f 65 db 78 mr r5,r27 | |
2934: 38 60 00 06 li r3,6 | |
return -1; | |
2938: 3b c0 ff ff li r30,-1 | |
LOG("'%s' not found.\n", name); | |
293c: 38 84 ca 5c addi r4,r4,-13732 | |
293e: R_PPC64_TOC16_LO .text+0x4a5c | |
2940: 48 00 08 0d bl 314c <do_printk+0x8> | |
2940: R_PPC64_REL24 do_printk | |
2944: 60 00 00 00 nop | |
return -1; | |
2948: 48 00 00 34 b 297c <cbfs_locate+0x130> | |
*type = ftype; | |
294c: 91 5d 00 00 stw r10,0(r29) | |
LOG("Found @ offset %zx size %zx\n", | |
2950: 7f e4 fb 78 mr r4,r31 | |
2954: 7f 83 e3 78 mr r3,r28 | |
2958: 48 00 01 41 bl 2a98 <rdev_relative_offset+0x8> | |
2958: R_PPC64_REL24 rdev_relative_offset | |
295c: 60 00 00 00 nop | |
2960: 3c 82 ff ff addis r4,r2,-1 | |
2962: R_PPC64_TOC16_HA .text+0x4a39 | |
2964: e8 df 00 38 ld r6,56(r31) | |
2968: 7c 65 1b 78 mr r5,r3 | |
296c: 38 84 ca 39 addi r4,r4,-13767 | |
296e: R_PPC64_TOC16_LO .text+0x4a39 | |
2970: 38 60 00 06 li r3,6 | |
2974: 48 00 07 d9 bl 314c <do_printk+0x8> | |
2974: R_PPC64_REL24 do_printk | |
2978: 60 00 00 00 nop | |
} | |
297c: 38 21 00 a0 addi r1,r1,160 | |
2980: 7f c3 f3 78 mr r3,r30 | |
2984: 81 81 00 08 lwz r12,8(r1) | |
2988: 7d 90 81 20 mtocrf 8,r12 | |
298c: 48 00 23 84 b 4d10 <_restgpr0_26> | |
298c: R_PPC64_REL24 _restgpr0_26 | |
2990: 00 00 00 00 .long 0x0 | |
2994: 00 00 00 03 .long 0x3 | |
2998: 80 06 00 00 lwz r0,0(r6) | |
000000000000299c <mdev_mmap>: | |
{ | |
const struct mem_region_device *mdev; | |
mdev = container_of(rd, __typeof__(*mdev), rdev); | |
return &mdev->base[offset]; | |
299c: e8 63 ff f8 ld r3,-8(r3) | |
} | |
29a0: 7c 63 22 14 add r3,r3,r4 | |
29a4: 4e 80 00 20 blr | |
... | |
00000000000029b4 <mdev_munmap>: | |
static int mdev_munmap(const struct region_device *rd __unused, | |
void *mapping __unused) | |
{ | |
return 0; | |
} | |
29b4: 38 60 00 00 li r3,0 | |
29b8: 4e 80 00 20 blr | |
... | |
00000000000029c8 <mdev_readat>: | |
static ssize_t mdev_readat(const struct region_device *rd, void *b, | |
size_t offset, size_t size) | |
{ | |
29c8: 3c 40 00 02 lis r2,2 | |
29ca: R_PPC64_ADDR16_HA .TOC. | |
29cc: 38 42 80 00 addi r2,r2,-32768 | |
29ce: R_PPC64_ADDR16_LO .TOC. | |
29d0: 7c 08 02 a6 mflr r0 | |
29d4: 7c 89 23 78 mr r9,r4 | |
29d8: fb e1 ff f8 std r31,-8(r1) | |
29dc: 7c df 33 78 mr r31,r6 | |
29e0: f8 01 00 10 std r0,16(r1) | |
const struct mem_region_device *mdev; | |
mdev = container_of(rd, __typeof__(*mdev), rdev); | |
memcpy(b, &mdev->base[offset], size); | |
29e4: e8 83 ff f8 ld r4,-8(r3) | |
{ | |
29e8: f8 21 ff d1 stdu r1,-48(r1) | |
memcpy(b, &mdev->base[offset], size); | |
29ec: 7d 23 4b 78 mr r3,r9 | |
29f0: 7c 84 2a 14 add r4,r4,r5 | |
29f4: 7c c5 33 78 mr r5,r6 | |
29f8: 48 00 1b a5 bl 459c <memcpy> | |
29f8: R_PPC64_REL24 memcpy | |
29fc: 60 00 00 00 nop | |
return size; | |
} | |
2a00: 38 21 00 30 addi r1,r1,48 | |
2a04: 7f e3 fb 78 mr r3,r31 | |
2a08: 48 00 23 30 b 4d38 <_restgpr0_31> | |
2a08: R_PPC64_REL24 _restgpr0_31 | |
2a0c: 00 00 00 00 .long 0x0 | |
2a10: 00 00 00 01 .long 0x1 | |
2a14: 80 01 00 00 lwz r0,0(r1) | |
0000000000002a18 <region_is_subregion>: | |
if (region_offset(c) < region_offset(p)) | |
2a18: e9 44 00 00 ld r10,0(r4) | |
2a1c: e9 23 00 00 ld r9,0(r3) | |
2a20: 7f aa 48 40 cmpld cr7,r10,r9 | |
2a24: 41 9c 00 30 blt cr7,2a54 <region_is_subregion+0x3c> | |
return r->size; | |
} | |
static inline size_t region_end(const struct region *r) | |
{ | |
return region_offset(r) + region_sz(r); | |
2a28: e8 e3 00 08 ld r7,8(r3) | |
2a2c: e9 04 00 08 ld r8,8(r4) | |
return 0; | |
2a30: 38 60 00 00 li r3,0 | |
2a34: 7d 0a 42 14 add r8,r10,r8 | |
2a38: 7d 29 3a 14 add r9,r9,r7 | |
if (region_end(c) > region_end(p)) | |
2a3c: 7f a9 40 40 cmpld cr7,r9,r8 | |
2a40: 4d 9c 00 20 bltlr cr7 | |
return 0; | |
2a44: 7f aa 40 40 cmpld cr7,r10,r8 | |
2a48: 38 60 00 01 li r3,1 | |
2a4c: 7c 60 1f 5e isel r3,0,r3,29 | |
2a50: 4e 80 00 20 blr | |
2a54: 38 60 00 00 li r3,0 | |
} | |
2a58: 4e 80 00 20 blr | |
... | |
0000000000002a68 <normalize_and_ok>: | |
{ | |
2a68: 3c 40 00 02 lis r2,2 | |
2a6a: R_PPC64_ADDR16_HA .TOC. | |
2a6c: 38 42 80 00 addi r2,r2,-32768 | |
2a6e: R_PPC64_ADDR16_LO .TOC. | |
inner->offset += region_offset(outer); | |
2a70: e9 24 00 00 ld r9,0(r4) | |
2a74: e9 03 00 00 ld r8,0(r3) | |
2a78: 7d 29 42 14 add r9,r9,r8 | |
2a7c: f9 24 00 00 std r9,0(r4) | |
return region_is_subregion(outer, inner); | |
2a80: 4b ff ff 98 b 2a18 <region_is_subregion> | |
2a80: R_PPC64_REL24 region_is_subregion | |
... | |
0000000000002a90 <rdev_relative_offset>: | |
{ | |
2a90: 3c 40 00 02 lis r2,2 | |
2a92: R_PPC64_ADDR16_HA .TOC. | |
2a94: 38 42 80 00 addi r2,r2,-32768 | |
2a96: R_PPC64_ADDR16_LO .TOC. | |
if (rdev->root == NULL) | |
2a98: e9 43 00 00 ld r10,0(r3) | |
2a9c: 2f aa 00 00 cmpdi cr7,r10,0 | |
2aa0: 40 9e 00 08 bne cr7,2aa8 <rdev_relative_offset+0x18> | |
return rdev; | |
2aa4: 7c 6a 1b 78 mr r10,r3 | |
if (rdev->root == NULL) | |
2aa8: e9 04 00 00 ld r8,0(r4) | |
2aac: 2f a8 00 00 cmpdi cr7,r8,0 | |
2ab0: 40 9e 00 08 bne cr7,2ab8 <rdev_relative_offset+0x28> | |
return rdev; | |
2ab4: 7c 88 23 78 mr r8,r4 | |
if (rdev_root(p) != rdev_root(c)) | |
2ab8: 7f aa 40 40 cmpld cr7,r10,r8 | |
return -1; | |
2abc: 39 20 ff ff li r9,-1 | |
if (rdev_root(p) != rdev_root(c)) | |
2ac0: 40 9e 00 50 bne cr7,2b10 <rdev_relative_offset+0x80> | |
{ | |
2ac4: 7c 08 02 a6 mflr r0 | |
2ac8: fb c1 ff f0 std r30,-16(r1) | |
2acc: fb e1 ff f8 std r31,-8(r1) | |
2ad0: 7c 9e 23 78 mr r30,r4 | |
2ad4: 7c 7f 1b 78 mr r31,r3 | |
if (!region_is_subregion(&p->region, &c->region)) | |
2ad8: 38 84 00 10 addi r4,r4,16 | |
2adc: 38 63 00 10 addi r3,r3,16 | |
{ | |
2ae0: f8 01 00 10 std r0,16(r1) | |
2ae4: f8 21 ff d1 stdu r1,-48(r1) | |
if (!region_is_subregion(&p->region, &c->region)) | |
2ae8: 4b ff ff 31 bl 2a18 <region_is_subregion> | |
2ae8: R_PPC64_REL24 region_is_subregion | |
return -1; | |
2aec: 39 20 ff ff li r9,-1 | |
if (!region_is_subregion(&p->region, &c->region)) | |
2af0: 2f a3 00 00 cmpdi cr7,r3,0 | |
2af4: 41 9e 00 10 beq cr7,2b04 <rdev_relative_offset+0x74> | |
return region_device_offset(c) - region_device_offset(p); | |
2af8: e9 5e 00 10 ld r10,16(r30) | |
2afc: e9 3f 00 10 ld r9,16(r31) | |
2b00: 7d 29 50 50 subf r9,r9,r10 | |
} | |
2b04: 38 21 00 30 addi r1,r1,48 | |
2b08: 7d 23 4b 78 mr r3,r9 | |
2b0c: 48 00 22 28 b 4d34 <_restgpr0_30> | |
2b0c: R_PPC64_REL24 _restgpr0_30 | |
2b10: 7d 23 4b 78 mr r3,r9 | |
2b14: 4e 80 00 20 blr | |
2b18: 00 00 00 00 .long 0x0 | |
2b1c: 00 00 00 01 .long 0x1 | |
2b20: 80 02 00 00 lwz r0,0(r2) | |
0000000000002b24 <rdev_mmap>: | |
{ | |
2b24: 3c 40 00 02 lis r2,2 | |
2b26: R_PPC64_ADDR16_HA .TOC. | |
2b28: 38 42 80 00 addi r2,r2,-32768 | |
2b2a: R_PPC64_ADDR16_LO .TOC. | |
2b2c: 7c 08 02 a6 mflr r0 | |
2b30: fb e1 ff f8 std r31,-8(r1) | |
2b34: 7c 7f 1b 78 mr r31,r3 | |
if (!normalize_and_ok(&rd->region, &req)) | |
2b38: 38 63 00 10 addi r3,r3,16 | |
{ | |
2b3c: f8 01 00 10 std r0,16(r1) | |
2b40: f8 21 ff c1 stdu r1,-64(r1) | |
struct region req = { | |
2b44: f8 81 00 20 std r4,32(r1) | |
if (!normalize_and_ok(&rd->region, &req)) | |
2b48: 38 81 00 20 addi r4,r1,32 | |
struct region req = { | |
2b4c: f8 a1 00 28 std r5,40(r1) | |
if (!normalize_and_ok(&rd->region, &req)) | |
2b50: 4b ff ff 21 bl 2a70 <normalize_and_ok+0x8> | |
2b50: R_PPC64_REL24 normalize_and_ok | |
2b54: 2f a3 00 00 cmpdi cr7,r3,0 | |
2b58: 41 9e 00 50 beq cr7,2ba8 <rdev_mmap+0x84> | |
if (rdev->root == NULL) | |
2b5c: e9 3f 00 00 ld r9,0(r31) | |
2b60: 2f a9 00 00 cmpdi cr7,r9,0 | |
2b64: 40 9e 00 08 bne cr7,2b6c <rdev_mmap+0x48> | |
return rdev; | |
2b68: 7f e9 fb 78 mr r9,r31 | |
if (rdev->ops->mmap == NULL) | |
2b6c: e9 49 00 08 ld r10,8(r9) | |
return NULL; | |
2b70: 38 60 00 00 li r3,0 | |
if (rdev->ops->mmap == NULL) | |
2b74: e9 4a 00 00 ld r10,0(r10) | |
2b78: 2f aa 00 00 cmpdi cr7,r10,0 | |
2b7c: 41 9e 00 24 beq cr7,2ba0 <rdev_mmap+0x7c> | |
return rdev->ops->mmap(rdev, req.offset, req.size); | |
2b80: e8 a1 00 28 ld r5,40(r1) | |
2b84: e8 81 00 20 ld r4,32(r1) | |
2b88: 7d 23 4b 78 mr r3,r9 | |
2b8c: f8 41 00 18 std r2,24(r1) | |
2b90: 7d 4c 53 78 mr r12,r10 | |
2b94: 7d 49 03 a6 mtctr r10 | |
2b98: 4e 80 04 21 bctrl | |
2b9c: e8 41 00 18 ld r2,24(r1) | |
} | |
2ba0: 38 21 00 40 addi r1,r1,64 | |
2ba4: 48 00 21 94 b 4d38 <_restgpr0_31> | |
2ba4: R_PPC64_REL24 _restgpr0_31 | |
return NULL; | |
2ba8: 38 60 00 00 li r3,0 | |
2bac: 4b ff ff f4 b 2ba0 <rdev_mmap+0x7c> | |
2bb0: 00 00 00 00 .long 0x0 | |
2bb4: 00 00 00 01 .long 0x1 | |
2bb8: 80 01 00 00 lwz r0,0(r1) | |
0000000000002bbc <rdev_munmap>: | |
{ | |
2bbc: 3c 40 00 02 lis r2,2 | |
2bbe: R_PPC64_ADDR16_HA .TOC. | |
2bc0: 38 42 80 00 addi r2,r2,-32768 | |
2bc2: R_PPC64_ADDR16_LO .TOC. | |
if (rdev->root == NULL) | |
2bc4: e9 23 00 00 ld r9,0(r3) | |
2bc8: 2f a9 00 00 cmpdi cr7,r9,0 | |
2bcc: 40 9e 00 08 bne cr7,2bd4 <rdev_munmap+0x18> | |
return rdev; | |
2bd0: 7c 69 1b 78 mr r9,r3 | |
if (rdev->ops->munmap == NULL) | |
2bd4: e9 49 00 08 ld r10,8(r9) | |
return -1; | |
2bd8: 38 60 ff ff li r3,-1 | |
if (rdev->ops->munmap == NULL) | |
2bdc: e9 4a 00 08 ld r10,8(r10) | |
2be0: 2f aa 00 00 cmpdi cr7,r10,0 | |
2be4: 4d 9e 00 20 beqlr cr7 | |
{ | |
2be8: 7c 08 02 a6 mflr r0 | |
return rdev->ops->munmap(rdev, mapping); | |
2bec: 7d 23 4b 78 mr r3,r9 | |
2bf0: 7d 4c 53 78 mr r12,r10 | |
2bf4: 7d 49 03 a6 mtctr r10 | |
{ | |
2bf8: f8 01 00 10 std r0,16(r1) | |
2bfc: f8 21 ff e1 stdu r1,-32(r1) | |
return rdev->ops->munmap(rdev, mapping); | |
2c00: f8 41 00 18 std r2,24(r1) | |
2c04: 4e 80 04 21 bctrl | |
2c08: e8 41 00 18 ld r2,24(r1) | |
} | |
2c0c: 38 21 00 20 addi r1,r1,32 | |
2c10: e8 01 00 10 ld r0,16(r1) | |
2c14: 7c 08 03 a6 mtlr r0 | |
2c18: 4e 80 00 20 blr | |
2c1c: 00 00 00 00 .long 0x0 | |
2c20: 00 00 00 01 .long 0x1 | |
2c24: 80 00 00 00 lwz r0,0(0) | |
0000000000002c28 <rdev_readat>: | |
{ | |
2c28: 3c 40 00 02 lis r2,2 | |
2c2a: R_PPC64_ADDR16_HA .TOC. | |
2c2c: 38 42 80 00 addi r2,r2,-32768 | |
2c2e: R_PPC64_ADDR16_LO .TOC. | |
2c30: 7c 08 02 a6 mflr r0 | |
2c34: fb c1 ff f0 std r30,-16(r1) | |
2c38: fb e1 ff f8 std r31,-8(r1) | |
2c3c: 7c 9e 23 78 mr r30,r4 | |
2c40: 7c 7f 1b 78 mr r31,r3 | |
if (!normalize_and_ok(&rd->region, &req)) | |
2c44: 38 63 00 10 addi r3,r3,16 | |
{ | |
2c48: f8 01 00 10 std r0,16(r1) | |
2c4c: f8 21 ff c1 stdu r1,-64(r1) | |
if (!normalize_and_ok(&rd->region, &req)) | |
2c50: 38 81 00 20 addi r4,r1,32 | |
struct region req = { | |
2c54: f8 a1 00 20 std r5,32(r1) | |
2c58: f8 c1 00 28 std r6,40(r1) | |
if (!normalize_and_ok(&rd->region, &req)) | |
2c5c: 4b ff fe 15 bl 2a70 <normalize_and_ok+0x8> | |
2c5c: R_PPC64_REL24 normalize_and_ok | |
2c60: 2f a3 00 00 cmpdi cr7,r3,0 | |
2c64: 41 9e 00 44 beq cr7,2ca8 <rdev_readat+0x80> | |
if (rdev->root == NULL) | |
2c68: e8 7f 00 00 ld r3,0(r31) | |
2c6c: 2f a3 00 00 cmpdi cr7,r3,0 | |
2c70: 40 9e 00 08 bne cr7,2c78 <rdev_readat+0x50> | |
return rdev; | |
2c74: 7f e3 fb 78 mr r3,r31 | |
return rdev->ops->readat(rdev, b, req.offset, req.size); | |
2c78: e9 23 00 08 ld r9,8(r3) | |
2c7c: e8 c1 00 28 ld r6,40(r1) | |
2c80: e8 a1 00 20 ld r5,32(r1) | |
2c84: 7f c4 f3 78 mr r4,r30 | |
2c88: e9 29 00 10 ld r9,16(r9) | |
2c8c: f8 41 00 18 std r2,24(r1) | |
2c90: 7d 2c 4b 78 mr r12,r9 | |
2c94: 7d 29 03 a6 mtctr r9 | |
2c98: 4e 80 04 21 bctrl | |
2c9c: e8 41 00 18 ld r2,24(r1) | |
} | |
2ca0: 38 21 00 40 addi r1,r1,64 | |
2ca4: 48 00 20 90 b 4d34 <_restgpr0_30> | |
2ca4: R_PPC64_REL24 _restgpr0_30 | |
return -1; | |
2ca8: 38 60 ff ff li r3,-1 | |
2cac: 4b ff ff f4 b 2ca0 <rdev_readat+0x78> | |
2cb0: 00 00 00 00 .long 0x0 | |
2cb4: 00 00 00 01 .long 0x1 | |
2cb8: 80 02 00 00 lwz r0,0(r2) | |
0000000000002cbc <rdev_chain>: | |
{ | |
2cbc: 3c 40 00 02 lis r2,2 | |
2cbe: R_PPC64_ADDR16_HA .TOC. | |
2cc0: 38 42 80 00 addi r2,r2,-32768 | |
2cc2: R_PPC64_ADDR16_LO .TOC. | |
2cc4: 7c 08 02 a6 mflr r0 | |
2cc8: fb c1 ff f0 std r30,-16(r1) | |
2ccc: fb e1 ff f8 std r31,-8(r1) | |
2cd0: 7c 9e 23 78 mr r30,r4 | |
2cd4: 7c 7f 1b 78 mr r31,r3 | |
if (!normalize_and_ok(&parent->region, &req)) | |
2cd8: 38 7e 00 10 addi r3,r30,16 | |
{ | |
2cdc: f8 01 00 10 std r0,16(r1) | |
2ce0: f8 21 ff c1 stdu r1,-64(r1) | |
if (!normalize_and_ok(&parent->region, &req)) | |
2ce4: 38 81 00 20 addi r4,r1,32 | |
struct region req = { | |
2ce8: f8 a1 00 20 std r5,32(r1) | |
2cec: f8 c1 00 28 std r6,40(r1) | |
if (!normalize_and_ok(&parent->region, &req)) | |
2cf0: 4b ff fd 81 bl 2a70 <normalize_and_ok+0x8> | |
2cf0: R_PPC64_REL24 normalize_and_ok | |
2cf4: 2f a3 00 00 cmpdi cr7,r3,0 | |
2cf8: 41 9e 00 3c beq cr7,2d34 <rdev_chain+0x78> | |
if (rdev->root == NULL) | |
2cfc: e9 3e 00 00 ld r9,0(r30) | |
2d00: 2f a9 00 00 cmpdi cr7,r9,0 | |
2d04: 40 9e 00 08 bne cr7,2d0c <rdev_chain+0x50> | |
return rdev; | |
2d08: 7f c9 f3 78 mr r9,r30 | |
child->root = rdev_root(parent); | |
2d0c: f9 3f 00 00 std r9,0(r31) | |
child->ops = NULL; | |
2d10: 39 20 00 00 li r9,0 | |
return 0; | |
2d14: 38 60 00 00 li r3,0 | |
child->ops = NULL; | |
2d18: f9 3f 00 08 std r9,8(r31) | |
child->region.offset = req.offset; | |
2d1c: e9 21 00 20 ld r9,32(r1) | |
2d20: f9 3f 00 10 std r9,16(r31) | |
child->region.size = req.size; | |
2d24: e9 21 00 28 ld r9,40(r1) | |
2d28: f9 3f 00 18 std r9,24(r31) | |
} | |
2d2c: 38 21 00 40 addi r1,r1,64 | |
2d30: 48 00 20 04 b 4d34 <_restgpr0_30> | |
2d30: R_PPC64_REL24 _restgpr0_30 | |
return -1; | |
2d34: 38 60 ff ff li r3,-1 | |
2d38: 4b ff ff f4 b 2d2c <rdev_chain+0x70> | |
2d3c: 00 00 00 00 .long 0x0 | |
2d40: 00 00 00 01 .long 0x1 | |
2d44: 80 02 00 00 lwz r0,0(r2) | |
0000000000002d48 <mem_region_device_ro_init>: | |
{ | |
2d48: 3c 40 00 02 lis r2,2 | |
2d4a: R_PPC64_ADDR16_HA .TOC. | |
2d4c: 38 42 80 00 addi r2,r2,-32768 | |
2d4e: R_PPC64_ADDR16_LO .TOC. | |
2d50: 7c 08 02 a6 mflr r0 | |
2d54: 48 00 1f 79 bl 4ccc <_savegpr0_29> | |
2d54: R_PPC64_REL24 _savegpr0_29 | |
2d58: f8 21 ff c1 stdu r1,-64(r1) | |
2d5c: 7c 9d 23 78 mr r29,r4 | |
2d60: 7c be 2b 78 mr r30,r5 | |
memset(mdev, 0, sizeof(*mdev)); | |
2d64: 38 80 00 00 li r4,0 | |
2d68: 38 a0 00 28 li r5,40 | |
{ | |
2d6c: 7c 7f 1b 78 mr r31,r3 | |
memset(mdev, 0, sizeof(*mdev)); | |
2d70: 48 00 18 d5 bl 4644 <memset> | |
2d70: R_PPC64_REL24 memset | |
2d74: 60 00 00 00 nop | |
mdev->rdev.ops = ops; | |
2d78: 3d 22 ff ff addis r9,r2,-1 | |
2d7a: R_PPC64_TOC16_HA .text+0x4a78 | |
} | |
2d7c: 38 21 00 40 addi r1,r1,64 | |
mdev->base = base; | |
2d80: fb bf 00 00 std r29,0(r31) | |
mdev->rdev.region.size = size; | |
2d84: fb df 00 20 std r30,32(r31) | |
mdev->rdev.ops = ops; | |
2d88: 39 29 ca 78 addi r9,r9,-13704 | |
2d8a: R_PPC64_TOC16_LO .text+0x4a78 | |
2d8c: f9 3f 00 10 std r9,16(r31) | |
} | |
2d90: 48 00 1f 8c b 4d1c <_restgpr0_29> | |
2d90: R_PPC64_REL24 _restgpr0_29 | |
2d94: 00 00 00 00 .long 0x0 | |
2d98: 00 00 00 01 .long 0x1 | |
2d9c: 80 03 00 00 lwz r0,0(r3) | |
0000000000002da0 <console_hw_init>: | |
#include <console/spi.h> | |
#include <console/flash.h> | |
#include <console/system76_ec.h> | |
void console_hw_init(void) | |
{ | |
2da0: 3c 40 00 02 lis r2,2 | |
2da2: R_PPC64_ADDR16_HA .TOC. | |
2da4: 38 42 80 00 addi r2,r2,-32768 | |
2da6: R_PPC64_ADDR16_LO .TOC. | |
2da8: 7c 08 02 a6 mflr r0 | |
2dac: f8 01 00 10 std r0,16(r1) | |
2db0: f8 21 ff e1 stdu r1,-32(r1) | |
#define __CBMEM_CONSOLE_ENABLE__ (CONFIG(CONSOLE_CBMEM) && \ | |
(ENV_RAMSTAGE || ENV_SEPARATE_VERSTAGE || ENV_POSTCAR || \ | |
ENV_ROMSTAGE || (ENV_BOOTBLOCK && CONFIG(BOOTBLOCK_CONSOLE)))) | |
#if __CBMEM_CONSOLE_ENABLE__ | |
static inline void __cbmemc_init(void) { cbmemc_init(); } | |
2db4: 48 00 13 0d bl 40c0 <cbmemc_init+0x8> | |
2db4: R_PPC64_REL24 cbmemc_init | |
2db8: 60 00 00 00 nop | |
__ne2k_init(); | |
__usbdebug_init(); | |
__spiconsole_init(); | |
__flashconsole_init(); | |
__system76_ec_init(); | |
} | |
2dbc: 38 21 00 20 addi r1,r1,32 | |
2dc0: e8 01 00 10 ld r0,16(r1) | |
2dc4: 7c 08 03 a6 mtlr r0 | |
2dc8: 4e 80 00 20 blr | |
2dcc: 00 00 00 00 .long 0x0 | |
2dd0: 00 00 00 01 .long 0x1 | |
2dd4: 80 00 00 00 lwz r0,0(0) | |
0000000000002dd8 <console_tx_byte>: | |
void console_tx_byte(unsigned char byte) | |
{ | |
2dd8: 3c 40 00 02 lis r2,2 | |
2dda: R_PPC64_ADDR16_HA .TOC. | |
2ddc: 38 42 80 00 addi r2,r2,-32768 | |
2dde: R_PPC64_ADDR16_LO .TOC. | |
2de0: 7c 08 02 a6 mflr r0 | |
2de4: f8 01 00 10 std r0,16(r1) | |
2de8: f8 21 ff e1 stdu r1,-32(r1) | |
static inline void __cbmemc_tx_byte(u8 data) { cbmemc_tx_byte(data); } | |
2dec: 48 00 13 6d bl 4158 <cbmemc_tx_byte+0x8> | |
2dec: R_PPC64_REL24 cbmemc_tx_byte | |
2df0: 60 00 00 00 nop | |
__ne2k_tx_byte(byte); | |
__usb_tx_byte(byte); | |
__spiconsole_tx_byte(byte); | |
__flashconsole_tx_byte(byte); | |
__system76_ec_tx_byte(byte); | |
} | |
2df4: 38 21 00 20 addi r1,r1,32 | |
2df8: e8 01 00 10 ld r0,16(r1) | |
2dfc: 7c 08 03 a6 mtlr r0 | |
2e00: 4e 80 00 20 blr | |
2e04: 00 00 00 00 .long 0x0 | |
2e08: 00 00 00 01 .long 0x1 | |
2e0c: 80 00 00 00 lwz r0,0(0) | |
0000000000002e10 <console_tx_flush>: | |
__uart_tx_flush(); | |
__ne2k_tx_flush(); | |
__usb_tx_flush(); | |
__flashconsole_tx_flush(); | |
__system76_ec_tx_flush(); | |
} | |
2e10: 4e 80 00 20 blr | |
... | |
0000000000002e20 <die_notify>: | |
* EC is capable of controlling LEDs or a buzzer the method can be overwritten | |
* in EC directory instead. | |
*/ | |
__weak void die_notify(void) | |
{ | |
} | |
2e20: 4e 80 00 20 blr | |
... | |
0000000000002e30 <die>: | |
/* Report a fatal error */ | |
void __noreturn die(const char *fmt, ...) | |
{ | |
2e30: 3c 40 00 02 lis r2,2 | |
2e32: R_PPC64_ADDR16_HA .TOC. | |
2e34: 38 42 80 00 addi r2,r2,-32768 | |
2e36: R_PPC64_ADDR16_LO .TOC. | |
2e38: 7c 08 02 a6 mflr r0 | |
2e3c: f8 01 00 10 std r0,16(r1) | |
2e40: f8 21 ff e1 stdu r1,-32(r1) | |
2e44: f8 81 00 48 std r4,72(r1) | |
2e48: f8 a1 00 50 std r5,80(r1) | |
va_list args; | |
va_start(args, fmt); | |
vprintk(BIOS_EMERG, fmt, args); | |
2e4c: 7c 64 1b 78 mr r4,r3 | |
2e50: 38 a1 00 48 addi r5,r1,72 | |
2e54: 38 60 00 00 li r3,0 | |
{ | |
2e58: f8 c1 00 58 std r6,88(r1) | |
2e5c: f8 e1 00 60 std r7,96(r1) | |
2e60: f9 01 00 68 std r8,104(r1) | |
2e64: f9 21 00 70 std r9,112(r1) | |
2e68: f9 41 00 78 std r10,120(r1) | |
vprintk(BIOS_EMERG, fmt, args); | |
2e6c: 48 00 02 39 bl 30a4 <do_vprintk+0x8> | |
2e6c: R_PPC64_REL24 do_vprintk | |
2e70: 60 00 00 00 nop | |
va_end(args); | |
die_notify(); | |
2e74: 4b ff ff ad bl 2e20 <die_notify> | |
2e74: R_PPC64_REL24 die_notify | |
2e78: 60 00 00 00 nop | |
halt(); | |
2e7c: 48 00 16 c9 bl 4544 <halt> | |
2e7c: R_PPC64_REL24 halt | |
2e80: 60 00 00 00 nop | |
2e84: 00 00 00 00 .long 0x0 | |
2e88: 00 00 00 01 .long 0x1 | |
2e8c: 80 00 00 00 lwz r0,0(0) | |
0000000000002e90 <console_log_level>: | |
set_log_level(debug_level); | |
} | |
int console_log_level(int msg_level) | |
{ | |
2e90: 3c 40 00 02 lis r2,2 | |
2e92: R_PPC64_ADDR16_HA .TOC. | |
2e94: 38 42 80 00 addi r2,r2,-32768 | |
2e96: R_PPC64_ADDR16_LO .TOC. | |
if (console_inited == 0) | |
2e98: 3d 42 ff ff addis r10,r2,-1 | |
2e9a: R_PPC64_TOC16_HA .bss | |
{ | |
2e9c: 7c 69 1b 78 mr r9,r3 | |
if (console_inited == 0) | |
2ea0: e8 6a cd e2 lwa r3,-12832(r10) | |
2ea2: R_PPC64_TOC16_LO_DS .bss | |
2ea4: 2f a3 00 00 cmpdi cr7,r3,0 | |
2ea8: 4d 9e 00 20 beqlr cr7 | |
return console_loglevel; | |
2eac: 3d 42 ff ff addis r10,r2,-1 | |
2eae: R_PPC64_TOC16_HA .data+0x68 | |
int log_level = get_log_level(); | |
if (log_level < 0) | |
return CONSOLE_LOG_NONE; | |
2eb0: 38 60 00 00 li r3,0 | |
return console_loglevel; | |
2eb4: e9 4a cd b2 lwa r10,-12880(r10) | |
2eb6: R_PPC64_TOC16_LO_DS .data+0x68 | |
if (log_level < 0) | |
2eb8: 2f 8a 00 00 cmpwi cr7,r10,0 | |
2ebc: 4d 9c 00 20 bltlr cr7 | |
if (msg_level <= log_level) | |
2ec0: 7f 89 50 00 cmpw cr7,r9,r10 | |
return CONSOLE_LOG_ALL; | |
2ec4: 38 60 00 02 li r3,2 | |
if (msg_level <= log_level) | |
2ec8: 4c 9d 00 20 blelr cr7 | |
return CONSOLE_LOG_NONE; | |
2ecc: 2f 89 00 07 cmpwi cr7,r9,7 | |
2ed0: 39 20 00 01 li r9,1 | |
2ed4: 7c 60 4f 5e isel r3,0,r9,29 | |
if (CONFIG(CONSOLE_CBMEM) && (msg_level <= BIOS_DEBUG)) | |
return CONSOLE_LOG_FAST; | |
return 0; | |
} | |
2ed8: 4e 80 00 20 blr | |
... | |
0000000000002ee8 <console_init>: | |
asmlinkage void console_init(void) | |
{ | |
2ee8: 3c 40 00 02 lis r2,2 | |
2eea: R_PPC64_ADDR16_HA .TOC. | |
2eec: 38 42 80 00 addi r2,r2,-32768 | |
2eee: R_PPC64_ADDR16_LO .TOC. | |
2ef0: 7c 08 02 a6 mflr r0 | |
2ef4: fb e1 ff f8 std r31,-8(r1) | |
console_loglevel = new_level; | |
2ef8: 39 20 00 07 li r9,7 | |
2efc: 3f e2 ff ff addis r31,r2,-1 | |
2efe: R_PPC64_TOC16_HA .data+0x68 | |
2f00: 91 3f cd b0 stw r9,-12880(r31) | |
2f02: R_PPC64_TOC16_LO .data+0x68 | |
{ | |
2f04: f8 01 00 10 std r0,16(r1) | |
2f08: f8 21 ff 91 stdu r1,-112(r1) | |
console_inited = 1; | |
if (CONFIG(EARLY_PCI_BRIDGE) && (ENV_BOOTBLOCK || ENV_ROMSTAGE)) | |
pci_early_bridge_init(); | |
console_hw_init(); | |
2f0c: 4b ff fe 9d bl 2da8 <console_hw_init+0x8> | |
2f0c: R_PPC64_REL24 console_hw_init | |
2f10: 60 00 00 00 nop | |
console_inited = 1; | |
printk(BIOS_NOTICE, "\n\ncoreboot-%s%s %s " ENV_STRING " starting (log level: %i)...\n", | |
2f14: e9 1f cd b2 lwa r8,-12880(r31) | |
2f16: R_PPC64_TOC16_LO_DS .data+0x68 | |
2f18: 3c e2 ff ff addis r7,r2,-1 | |
2f1a: R_PPC64_TOC16_HA coreboot_build | |
2f1c: 38 e7 cc 50 addi r7,r7,-13232 | |
2f1e: R_PPC64_TOC16_LO coreboot_build | |
2f20: 3c c2 ff ff addis r6,r2,-1 | |
2f22: R_PPC64_TOC16_HA coreboot_extra_version | |
2f24: 38 c6 cc 70 addi r6,r6,-13200 | |
2f26: R_PPC64_TOC16_LO coreboot_extra_version | |
2f28: 3c a2 ff ff addis r5,r2,-1 | |
2f2a: R_PPC64_TOC16_HA coreboot_version | |
2f2c: 38 a5 cc 78 addi r5,r5,-13192 | |
2f2e: R_PPC64_TOC16_LO coreboot_version | |
2f30: 3c 82 ff ff addis r4,r2,-1 | |
2f32: R_PPC64_TOC16_HA .text+0x4aa0 | |
console_inited = 1; | |
2f34: 39 20 00 01 li r9,1 | |
2f38: 3d 42 ff ff addis r10,r2,-1 | |
2f3a: R_PPC64_TOC16_HA .bss | |
printk(BIOS_NOTICE, "\n\ncoreboot-%s%s %s " ENV_STRING " starting (log level: %i)...\n", | |
2f3c: 38 60 00 05 li r3,5 | |
2f40: 38 84 ca a0 addi r4,r4,-13664 | |
2f42: R_PPC64_TOC16_LO .text+0x4aa0 | |
console_inited = 1; | |
2f44: 91 2a cd e0 stw r9,-12832(r10) | |
2f46: R_PPC64_TOC16_LO .bss | |
printk(BIOS_NOTICE, "\n\ncoreboot-%s%s %s " ENV_STRING " starting (log level: %i)...\n", | |
2f48: 48 00 02 05 bl 314c <do_printk+0x8> | |
2f48: R_PPC64_REL24 do_printk | |
2f4c: 60 00 00 00 nop | |
coreboot_version, coreboot_extra_version, coreboot_build, | |
get_log_level()); | |
} | |
2f50: 38 21 00 70 addi r1,r1,112 | |
2f54: 48 00 1d e4 b 4d38 <_restgpr0_31> | |
2f54: R_PPC64_REL24 _restgpr0_31 | |
2f58: 00 00 00 00 .long 0x0 | |
2f5c: 00 00 00 01 .long 0x1 | |
2f60: 80 01 00 00 lwz r0,0(r1) | |
0000000000002f64 <arch_post_code>: | |
2f64: 4e 80 00 20 blr | |
... | |
0000000000002f74 <mainboard_post>: | |
void __weak arch_post_code(uint8_t value) { } | |
/* Some mainboards have very nice features beyond just a simple display. | |
* They can override this function. | |
*/ | |
void __weak mainboard_post(uint8_t value) { } | |
2f74: 4e 80 00 20 blr | |
... | |
0000000000002f84 <post_code>: | |
void post_code(uint8_t value) | |
{ | |
2f84: 3c 40 00 02 lis r2,2 | |
2f86: R_PPC64_ADDR16_HA .TOC. | |
2f88: 38 42 80 00 addi r2,r2,-32768 | |
2f8a: R_PPC64_ADDR16_LO .TOC. | |
2f8c: 7c 08 02 a6 mflr r0 | |
2f90: fb e1 ff f8 std r31,-8(r1) | |
2f94: 7c 7f 1b 78 mr r31,r3 | |
2f98: f8 01 00 10 std r0,16(r1) | |
2f9c: f8 21 ff d1 stdu r1,-48(r1) | |
if (!CONFIG(NO_POST)) { | |
/* Assume this to be the most reliable and simplest type | |
for displaying POST so keep it first. */ | |
arch_post_code(value); | |
2fa0: 4b ff ff c5 bl 2f64 <arch_post_code> | |
2fa0: R_PPC64_REL24 arch_post_code | |
2fa4: 60 00 00 00 nop | |
if (CONFIG(CONSOLE_POST)) | |
printk(BIOS_EMERG, "POST: 0x%02x\n", value); | |
mainboard_post(value); | |
2fa8: 7f e3 fb 78 mr r3,r31 | |
2fac: 4b ff ff c9 bl 2f74 <mainboard_post> | |
2fac: R_PPC64_REL24 mainboard_post | |
2fb0: 60 00 00 00 nop | |
} | |
} | |
2fb4: 38 21 00 30 addi r1,r1,48 | |
2fb8: 48 00 1d 80 b 4d38 <_restgpr0_31> | |
2fb8: R_PPC64_REL24 _restgpr0_31 | |
2fbc: 00 00 00 00 .long 0x0 | |
2fc0: 00 00 00 01 .long 0x1 | |
2fc4: 80 01 00 00 lwz r0,0(r1) | |
0000000000002fc8 <wrap_putchar>: | |
console_tx_byte(byte); | |
console_time_stop(); | |
} | |
static void wrap_putchar(unsigned char byte, void *data) | |
{ | |
2fc8: 3c 40 00 02 lis r2,2 | |
2fca: R_PPC64_ADDR16_HA .TOC. | |
2fcc: 38 42 80 00 addi r2,r2,-32768 | |
2fce: R_PPC64_ADDR16_LO .TOC. | |
2fd0: 7c 08 02 a6 mflr r0 | |
2fd4: f8 01 00 10 std r0,16(r1) | |
2fd8: f8 21 ff e1 stdu r1,-32(r1) | |
console_tx_byte(byte); | |
2fdc: 4b ff fe 05 bl 2de0 <console_tx_byte+0x8> | |
2fdc: R_PPC64_REL24 console_tx_byte | |
2fe0: 60 00 00 00 nop | |
} | |
2fe4: 38 21 00 20 addi r1,r1,32 | |
2fe8: e8 01 00 10 ld r0,16(r1) | |
2fec: 7c 08 03 a6 mtlr r0 | |
2ff0: 4e 80 00 20 blr | |
2ff4: 00 00 00 00 .long 0x0 | |
2ff8: 00 00 00 01 .long 0x1 | |
2ffc: 80 00 00 00 lwz r0,0(0) | |
0000000000003000 <console_time_stop>: | |
{ | |
3000: 3c 40 00 02 lis r2,2 | |
3002: R_PPC64_ADDR16_HA .TOC. | |
3004: 38 42 80 00 addi r2,r2,-32768 | |
3006: R_PPC64_ADDR16_LO .TOC. | |
3008: 7c 08 02 a6 mflr r0 | |
timer_monotonic_get(&mt_stop); | |
300c: 3c 62 ff ff addis r3,r2,-1 | |
300e: R_PPC64_TOC16_HA .bss+0x18 | |
3010: 38 63 cd f8 addi r3,r3,-12808 | |
3012: R_PPC64_TOC16_LO .bss+0x18 | |
{ | |
3014: f8 01 00 10 std r0,16(r1) | |
3018: f8 21 ff e1 stdu r1,-32(r1) | |
timer_monotonic_get(&mt_stop); | |
301c: 4b ff f0 01 bl 201c <timer_monotonic_get> | |
301c: R_PPC64_REL24 timer_monotonic_get | |
3020: 60 00 00 00 nop | |
/* Return time difference between t1 and t2. i.e. t2 - t1. */ | |
static inline long mono_time_diff_microseconds(const struct mono_time *t1, | |
const struct mono_time *t2) | |
{ | |
return t2->microseconds - t1->microseconds; | |
3024: 3d 42 ff ff addis r10,r2,-1 | |
3026: R_PPC64_TOC16_HA .bss+0x18 | |
3028: e9 4a cd f8 ld r10,-12808(r10) | |
302a: R_PPC64_TOC16_LO_DS .bss+0x18 | |
302c: 3d 22 ff ff addis r9,r2,-1 | |
302e: R_PPC64_TOC16_HA .bss+0x10 | |
3030: e9 29 cd f0 ld r9,-12816(r9) | |
3032: R_PPC64_TOC16_LO_DS .bss+0x10 | |
console_usecs += mono_time_diff_microseconds(&mt_start, &mt_stop); | |
3034: 3d 02 ff ff addis r8,r2,-1 | |
3036: R_PPC64_TOC16_HA .bss+0x8 | |
} | |
3038: 38 21 00 20 addi r1,r1,32 | |
303c: e8 01 00 10 ld r0,16(r1) | |
3040: 7d 29 50 50 subf r9,r9,r10 | |
console_usecs += mono_time_diff_microseconds(&mt_start, &mt_stop); | |
3044: e9 48 cd e8 ld r10,-12824(r8) | |
3046: R_PPC64_TOC16_LO_DS .bss+0x8 | |
} | |
3048: 7c 08 03 a6 mtlr r0 | |
console_usecs += mono_time_diff_microseconds(&mt_start, &mt_stop); | |
304c: 7d 29 52 14 add r9,r9,r10 | |
3050: f9 28 cd e8 std r9,-12824(r8) | |
3052: R_PPC64_TOC16_LO_DS .bss+0x8 | |
} | |
3054: 4e 80 00 20 blr | |
3058: 00 00 00 00 .long 0x0 | |
305c: 00 00 00 01 .long 0x1 | |
3060: 80 00 00 00 lwz r0,0(0) | |
0000000000003064 <wrap_putchar_cbmemc>: | |
static void wrap_putchar_cbmemc(unsigned char byte, void *data) | |
{ | |
3064: 3c 40 00 02 lis r2,2 | |
3066: R_PPC64_ADDR16_HA .TOC. | |
3068: 38 42 80 00 addi r2,r2,-32768 | |
306a: R_PPC64_ADDR16_LO .TOC. | |
306c: 7c 08 02 a6 mflr r0 | |
3070: f8 01 00 10 std r0,16(r1) | |
3074: f8 21 ff e1 stdu r1,-32(r1) | |
3078: 48 00 10 e1 bl 4158 <cbmemc_tx_byte+0x8> | |
3078: R_PPC64_REL24 cbmemc_tx_byte | |
307c: 60 00 00 00 nop | |
__cbmemc_tx_byte(byte); | |
} | |
3080: 38 21 00 20 addi r1,r1,32 | |
3084: e8 01 00 10 ld r0,16(r1) | |
3088: 7c 08 03 a6 mtlr r0 | |
308c: 4e 80 00 20 blr | |
3090: 00 00 00 00 .long 0x0 | |
3094: 00 00 00 01 .long 0x1 | |
3098: 80 00 00 00 lwz r0,0(0) | |
000000000000309c <do_vprintk>: | |
int do_vprintk(int msg_level, const char *fmt, va_list args) | |
{ | |
309c: 3c 40 00 02 lis r2,2 | |
309e: R_PPC64_ADDR16_HA .TOC. | |
30a0: 38 42 80 00 addi r2,r2,-32768 | |
30a2: R_PPC64_ADDR16_LO .TOC. | |
30a4: 7c 08 02 a6 mflr r0 | |
30a8: 48 00 1c 25 bl 4ccc <_savegpr0_29> | |
30a8: R_PPC64_REL24 _savegpr0_29 | |
30ac: f8 21 ff c1 stdu r1,-64(r1) | |
30b0: 7c 9e 23 78 mr r30,r4 | |
30b4: 7c bd 2b 78 mr r29,r5 | |
if (CONFIG(SQUELCH_EARLY_SMP) && ENV_ROMSTAGE_OR_BEFORE && !boot_cpu()) | |
return 0; | |
log_this = console_log_level(msg_level); | |
if (log_this < CONSOLE_LOG_FAST) | |
return 0; | |
30b8: 3b e0 00 00 li r31,0 | |
log_this = console_log_level(msg_level); | |
30bc: 4b ff fd dd bl 2e98 <console_log_level+0x8> | |
30bc: R_PPC64_REL24 console_log_level | |
30c0: 60 00 00 00 nop | |
if (log_this < CONSOLE_LOG_FAST) | |
30c4: 2f 83 00 00 cmpwi cr7,r3,0 | |
30c8: 40 9d 00 44 ble cr7,310c <do_vprintk+0x70> | |
30cc: 7c 7f 1b 78 mr r31,r3 | |
timer_monotonic_get(&mt_start); | |
30d0: 3c 62 ff ff addis r3,r2,-1 | |
30d2: R_PPC64_TOC16_HA .bss+0x10 | |
30d4: 38 63 cd f0 addi r3,r3,-12816 | |
30d6: R_PPC64_TOC16_LO .bss+0x10 | |
30d8: 4b ff ef 45 bl 201c <timer_monotonic_get> | |
30d8: R_PPC64_REL24 timer_monotonic_get | |
30dc: 60 00 00 00 nop | |
DISABLE_TRACE; | |
spin_lock(&console_lock); | |
console_time_run(); | |
if (log_this == CONSOLE_LOG_FAST) { | |
30e0: 2f 9f 00 01 cmpwi cr7,r31,1 | |
i = vtxprintf(wrap_putchar_cbmemc, fmt, args, NULL); | |
30e4: 38 c0 00 00 li r6,0 | |
30e8: 7f a5 eb 78 mr r5,r29 | |
30ec: 7f c4 f3 78 mr r4,r30 | |
if (log_this == CONSOLE_LOG_FAST) { | |
30f0: 40 9e 00 28 bne cr7,3118 <do_vprintk+0x7c> | |
i = vtxprintf(wrap_putchar_cbmemc, fmt, args, NULL); | |
30f4: 3c 62 ff ff addis r3,r2,-1 | |
30f6: R_PPC64_TOC16_HA .text+0x3064 | |
30f8: 38 63 b0 64 addi r3,r3,-20380 | |
30fa: R_PPC64_TOC16_LO .text+0x3064 | |
30fc: 48 00 05 9d bl 3698 <vtxprintf+0x8> | |
30fc: R_PPC64_REL24 vtxprintf | |
3100: 60 00 00 00 nop | |
3104: 7c 7f 1b 78 mr r31,r3 | |
} else { | |
i = vtxprintf(wrap_putchar, fmt, args, NULL); | |
console_tx_flush(); | |
} | |
console_time_stop(); | |
3108: 4b ff ff 01 bl 3008 <console_time_stop+0x8> | |
3108: R_PPC64_REL24 console_time_stop | |
spin_unlock(&console_lock); | |
ENABLE_TRACE; | |
return i; | |
} | |
310c: 38 21 00 40 addi r1,r1,64 | |
3110: 7f e3 fb 78 mr r3,r31 | |
3114: 48 00 1c 08 b 4d1c <_restgpr0_29> | |
3114: R_PPC64_REL24 _restgpr0_29 | |
i = vtxprintf(wrap_putchar, fmt, args, NULL); | |
3118: 3c 62 ff ff addis r3,r2,-1 | |
311a: R_PPC64_TOC16_HA .text+0x2fc8 | |
311c: 38 63 af c8 addi r3,r3,-20536 | |
311e: R_PPC64_TOC16_LO .text+0x2fc8 | |
3120: 48 00 05 79 bl 3698 <vtxprintf+0x8> | |
3120: R_PPC64_REL24 vtxprintf | |
3124: 60 00 00 00 nop | |
3128: 7c 7f 1b 78 mr r31,r3 | |
console_tx_flush(); | |
312c: 4b ff fc e5 bl 2e10 <console_tx_flush> | |
312c: R_PPC64_REL24 console_tx_flush | |
3130: 60 00 00 00 nop | |
3134: 4b ff ff d4 b 3108 <do_vprintk+0x6c> | |
3138: 00 00 00 00 .long 0x0 | |
313c: 00 00 00 01 .long 0x1 | |
3140: 80 03 00 00 lwz r0,0(r3) | |
0000000000003144 <do_printk>: | |
int do_printk(int msg_level, const char *fmt, ...) | |
{ | |
3144: 3c 40 00 02 lis r2,2 | |
3146: R_PPC64_ADDR16_HA .TOC. | |
3148: 38 42 80 00 addi r2,r2,-32768 | |
314a: R_PPC64_ADDR16_LO .TOC. | |
314c: 7c 08 02 a6 mflr r0 | |
3150: f8 01 00 10 std r0,16(r1) | |
3154: f8 21 ff e1 stdu r1,-32(r1) | |
3158: f8 a1 00 50 std r5,80(r1) | |
va_list args; | |
int i; | |
va_start(args, fmt); | |
i = do_vprintk(msg_level, fmt, args); | |
315c: 38 a1 00 50 addi r5,r1,80 | |
{ | |
3160: f8 c1 00 58 std r6,88(r1) | |
3164: f8 e1 00 60 std r7,96(r1) | |
3168: f9 01 00 68 std r8,104(r1) | |
316c: f9 21 00 70 std r9,112(r1) | |
3170: f9 41 00 78 std r10,120(r1) | |
i = do_vprintk(msg_level, fmt, args); | |
3174: 4b ff ff 31 bl 30a4 <do_vprintk+0x8> | |
3174: R_PPC64_REL24 do_vprintk | |
va_end(args); | |
return i; | |
} | |
3178: 38 21 00 20 addi r1,r1,32 | |
317c: e8 01 00 10 ld r0,16(r1) | |
3180: 7c 08 03 a6 mtlr r0 | |
3184: 4e 80 00 20 blr | |
3188: 00 00 00 00 .long 0x0 | |
318c: 00 00 00 01 .long 0x1 | |
3190: 80 00 00 00 lwz r0,0(0) | |
0000000000003194 <console_time_report>: | |
{ | |
3194: 3c 40 00 02 lis r2,2 | |
3196: R_PPC64_ADDR16_HA .TOC. | |
3198: 38 42 80 00 addi r2,r2,-32768 | |
319a: R_PPC64_ADDR16_LO .TOC. | |
printk(BIOS_DEBUG, "BS: " ENV_STRING " times (exec / console): total (unknown) / %ld ms\n", | |
319c: 3c a2 ff ff addis r5,r2,-1 | |
319e: R_PPC64_TOC16_HA .bss+0x8 | |
31a0: e8 a5 cd e8 ld r5,-12824(r5) | |
31a2: R_PPC64_TOC16_LO_DS .bss+0x8 | |
{ | |
31a4: 7c 08 02 a6 mflr r0 | |
printk(BIOS_DEBUG, "BS: " ENV_STRING " times (exec / console): total (unknown) / %ld ms\n", | |
31a8: 2f a5 00 00 cmpdi cr7,r5,0 | |
{ | |
31ac: f8 01 00 10 std r0,16(r1) | |
31b0: f8 21 ff a1 stdu r1,-96(r1) | |
printk(BIOS_DEBUG, "BS: " ENV_STRING " times (exec / console): total (unknown) / %ld ms\n", | |
31b4: 40 9d 00 30 ble cr7,31e4 <console_time_report+0x50> | |
31b8: 38 a5 01 f4 addi r5,r5,500 | |
31bc: 39 20 03 e8 li r9,1000 | |
31c0: 3c 82 ff ff addis r4,r2,-1 | |
31c2: R_PPC64_TOC16_HA .text+0x4ada | |
31c4: 38 60 00 07 li r3,7 | |
31c8: 7c a5 4b d2 divd r5,r5,r9 | |
31cc: 38 84 ca da addi r4,r4,-13606 | |
31ce: R_PPC64_TOC16_LO .text+0x4ada | |
31d0: 4b ff ff 7d bl 314c <do_printk+0x8> | |
31d0: R_PPC64_REL24 do_printk | |
} | |
31d4: 38 21 00 60 addi r1,r1,96 | |
31d8: e8 01 00 10 ld r0,16(r1) | |
31dc: 7c 08 03 a6 mtlr r0 | |
31e0: 4e 80 00 20 blr | |
printk(BIOS_DEBUG, "BS: " ENV_STRING " times (exec / console): total (unknown) / %ld ms\n", | |
31e4: 38 a5 fe 0c addi r5,r5,-500 | |
31e8: 4b ff ff d4 b 31bc <console_time_report+0x28> | |
31ec: 00 00 00 00 .long 0x0 | |
31f0: 00 00 00 01 .long 0x1 | |
31f4: 80 00 00 00 lwz r0,0(0) | |
00000000000031f8 <str_tx_byte>: | |
}; | |
static void str_tx_byte(unsigned char byte, void *data) | |
{ | |
struct vsnprintf_context *ctx = data; | |
if (ctx->buf_limit) { | |
31f8: e9 24 00 08 ld r9,8(r4) | |
31fc: 2f a9 00 00 cmpdi cr7,r9,0 | |
3200: 4d 9e 00 20 beqlr cr7 | |
*ctx->str_buf = byte; | |
3204: e9 24 00 00 ld r9,0(r4) | |
3208: 98 69 00 00 stb r3,0(r9) | |
ctx->str_buf++; | |
320c: e9 24 00 00 ld r9,0(r4) | |
3210: 39 29 00 01 addi r9,r9,1 | |
3214: f9 24 00 00 std r9,0(r4) | |
ctx->buf_limit--; | |
3218: e9 24 00 08 ld r9,8(r4) | |
321c: 39 29 ff ff addi r9,r9,-1 | |
3220: f9 24 00 08 std r9,8(r4) | |
} | |
} | |
3224: 4e 80 00 20 blr | |
... | |
0000000000003234 <vsnprintf>: | |
int vsnprintf(char *buf, size_t size, const char *fmt, va_list args) | |
{ | |
3234: 3c 40 00 02 lis r2,2 | |
3236: R_PPC64_ADDR16_HA .TOC. | |
3238: 38 42 80 00 addi r2,r2,-32768 | |
323a: R_PPC64_ADDR16_LO .TOC. | |
323c: 7c 08 02 a6 mflr r0 | |
3240: 7d 90 80 26 mfocrf r12,8 | |
3244: 7c aa 2b 78 mr r10,r5 | |
struct vsnprintf_context ctx; | |
DISABLE_TRACE; | |
ctx.str_buf = buf; | |
ctx.buf_limit = size ? size - 1 : 0; | |
3248: 39 24 ff ff addi r9,r4,-1 | |
{ | |
324c: 7c c5 33 78 mr r5,r6 | |
3250: 91 81 00 08 stw r12,8(r1) | |
ctx.buf_limit = size ? size - 1 : 0; | |
3254: 2e 24 00 00 cmpdi cr4,r4,0 | |
{ | |
3258: f8 01 00 10 std r0,16(r1) | |
325c: f8 21 ff d1 stdu r1,-48(r1) | |
ctx.str_buf = buf; | |
3260: f8 61 00 20 std r3,32(r1) | |
ctx.buf_limit = size ? size - 1 : 0; | |
3264: 40 92 00 08 bne cr4,326c <vsnprintf+0x38> | |
3268: 39 20 00 00 li r9,0 | |
i = vtxprintf(str_tx_byte, fmt, args, &ctx); | |
326c: 3c 62 ff ff addis r3,r2,-1 | |
326e: R_PPC64_TOC16_HA .text+0x31f8 | |
3270: 38 c1 00 20 addi r6,r1,32 | |
3274: 7d 44 53 78 mr r4,r10 | |
ctx.buf_limit = size ? size - 1 : 0; | |
3278: f9 21 00 28 std r9,40(r1) | |
i = vtxprintf(str_tx_byte, fmt, args, &ctx); | |
327c: 38 63 b1 f8 addi r3,r3,-19976 | |
327e: R_PPC64_TOC16_LO .text+0x31f8 | |
3280: 48 00 04 19 bl 3698 <vtxprintf+0x8> | |
3280: R_PPC64_REL24 vtxprintf | |
3284: 60 00 00 00 nop | |
if (size) | |
3288: 41 92 00 10 beq cr4,3298 <vsnprintf+0x64> | |
*ctx.str_buf = '\0'; | |
328c: e9 21 00 20 ld r9,32(r1) | |
3290: 39 40 00 00 li r10,0 | |
3294: 99 49 00 00 stb r10,0(r9) | |
ENABLE_TRACE; | |
return i; | |
} | |
3298: 38 21 00 30 addi r1,r1,48 | |
329c: e8 01 00 10 ld r0,16(r1) | |
32a0: 81 81 00 08 lwz r12,8(r1) | |
32a4: 7c 08 03 a6 mtlr r0 | |
32a8: 7d 90 81 20 mtocrf 8,r12 | |
32ac: 4e 80 00 20 blr | |
32b0: 00 00 00 00 .long 0x0 | |
32b4: 00 00 00 03 .long 0x3 | |
32b8: 80 00 00 00 lwz r0,0(0) | |
00000000000032bc <snprintf>: | |
int snprintf(char *buf, size_t size, const char *fmt, ...) | |
{ | |
32bc: 3c 40 00 02 lis r2,2 | |
32be: R_PPC64_ADDR16_HA .TOC. | |
32c0: 38 42 80 00 addi r2,r2,-32768 | |
32c2: R_PPC64_ADDR16_LO .TOC. | |
32c4: 7c 08 02 a6 mflr r0 | |
32c8: f8 01 00 10 std r0,16(r1) | |
32cc: f8 21 ff e1 stdu r1,-32(r1) | |
32d0: f8 c1 00 58 std r6,88(r1) | |
va_list args; | |
int i; | |
va_start(args, fmt); | |
i = vsnprintf(buf, size, fmt, args); | |
32d4: 38 c1 00 58 addi r6,r1,88 | |
{ | |
32d8: f8 e1 00 60 std r7,96(r1) | |
32dc: f9 01 00 68 std r8,104(r1) | |
32e0: f9 21 00 70 std r9,112(r1) | |
32e4: f9 41 00 78 std r10,120(r1) | |
i = vsnprintf(buf, size, fmt, args); | |
32e8: 4b ff ff 55 bl 323c <vsnprintf+0x8> | |
32e8: R_PPC64_REL24 vsnprintf | |
va_end(args); | |
return i; | |
} | |
32ec: 38 21 00 20 addi r1,r1,32 | |
32f0: e8 01 00 10 ld r0,16(r1) | |
32f4: 7c 08 03 a6 mtlr r0 | |
32f8: 4e 80 00 20 blr | |
32fc: 00 00 00 00 .long 0x0 | |
3300: 00 00 00 01 .long 0x1 | |
3304: 80 00 00 00 lwz r0,0(0) | |
0000000000003308 <number>: | |
#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */ | |
static int number(void (*tx_byte)(unsigned char byte, void *data), | |
unsigned long long inum, int base, int size, int precision, int type, | |
void *data) | |
{ | |
3308: 3c 40 00 02 lis r2,2 | |
330a: R_PPC64_ADDR16_HA .TOC. | |
330c: 38 42 80 00 addi r2,r2,-32768 | |
330e: R_PPC64_ADDR16_LO .TOC. | |
3310: 7c 08 02 a6 mflr r0 | |
char c, sign, tmp[66]; | |
const char *digits = "0123456789abcdef"; | |
3314: 3d 42 ff ff addis r10,r2,-1 | |
3316: R_PPC64_TOC16_HA .text+0x4b1a | |
{ | |
3318: 7d 80 00 26 mfcr r12 | |
const char *digits = "0123456789abcdef"; | |
331c: 39 4a cb 1a addi r10,r10,-13542 | |
331e: R_PPC64_TOC16_LO .text+0x4b1a | |
{ | |
3320: 48 00 19 8d bl 4cac <_savegpr0_21> | |
3320: R_PPC64_REL24 _savegpr0_21 | |
3324: 7d 39 4b 78 mr r25,r9 | |
int i; | |
int count = 0; | |
unsigned long long num = inum; | |
long long snum = num; | |
if (type & LARGE) | |
3328: 71 09 00 40 andi. r9,r8,64 | |
{ | |
332c: 7c 7c 1b 78 mr r28,r3 | |
3330: 7c b8 2b 78 mr r24,r5 | |
3334: 91 81 00 08 stw r12,8(r1) | |
3338: 7d 1d 43 78 mr r29,r8 | |
333c: f8 21 ff 31 stdu r1,-208(r1) | |
if (type & LARGE) | |
3340: 41 82 00 0c beq 334c <number+0x44> | |
digits = "0123456789ABCDEF"; | |
3344: 3d 42 ff ff addis r10,r2,-1 | |
3346: R_PPC64_TOC16_HA .text+0x4b2b | |
3348: 39 4a cb 2b addi r10,r10,-13525 | |
334a: R_PPC64_TOC16_LO .text+0x4b2b | |
if (type & LEFT) | |
334c: 57 a9 06 f6 rlwinm r9,r29,0,27,27 | |
3350: 7d 29 07 b4 extsw r9,r9 | |
3354: 2e 29 00 00 cmpdi cr4,r9,0 | |
3358: 41 92 01 3c beq cr4,3494 <number+0x18c> | |
type &= ~ZEROPAD; | |
335c: 57 bd 00 3c rlwinm r29,r29,0,0,30 | |
c = (type & ZEROPAD) ? '0' : ' '; | |
3360: 3a c0 00 20 li r22,32 | |
type &= ~ZEROPAD; | |
3364: 7f bd 07 b4 extsw r29,r29 | |
sign = 0; | |
if (type & SIGN) { | |
3368: 73 a9 00 02 andi. r9,r29,2 | |
sign = 0; | |
336c: 3a a0 00 00 li r21,0 | |
if (type & SIGN) { | |
3370: 41 82 00 1c beq 338c <number+0x84> | |
if (snum < 0) { | |
3374: 2f a4 00 00 cmpdi cr7,r4,0 | |
3378: 40 9c 01 30 bge cr7,34a8 <number+0x1a0> | |
sign = '-'; | |
num = -snum; | |
size--; | |
337c: 38 c6 ff ff addi r6,r6,-1 | |
num = -snum; | |
3380: 7c 84 00 d0 neg r4,r4 | |
sign = '-'; | |
3384: 3a a0 00 2d li r21,45 | |
size--; | |
3388: 7c c6 07 b4 extsw r6,r6 | |
} else if (type & SPACE) { | |
sign = ' '; | |
size--; | |
} | |
} | |
if (type & SPECIAL) { | |
338c: 57 a9 06 b4 rlwinm r9,r29,0,26,26 | |
3390: 7d 29 07 b4 extsw r9,r9 | |
3394: 2d a9 00 00 cmpdi cr3,r9,0 | |
3398: 41 8e 00 14 beq cr3,33ac <number+0xa4> | |
if (base == 16) | |
339c: 2f 98 00 10 cmpwi cr7,r24,16 | |
33a0: 40 9e 01 38 bne cr7,34d8 <number+0x1d0> | |
size -= 2; | |
33a4: 38 c6 ff fe addi r6,r6,-2 | |
else if (base == 8) | |
size--; | |
33a8: 7c c6 07 b4 extsw r6,r6 | |
} | |
i = 0; | |
if (num == 0) { | |
33ac: 2f a4 00 00 cmpdi cr7,r4,0 | |
33b0: 40 9e 01 38 bne cr7,34e8 <number+0x1e0> | |
tmp[i++] = '0'; | |
33b4: 39 20 00 30 li r9,48 | |
33b8: 3b 40 00 01 li r26,1 | |
33bc: 99 21 00 20 stb r9,32(r1) | |
while (num != 0) { | |
tmp[i++] = digits[num % base]; | |
num /= base; | |
} | |
} | |
if (i > precision) { | |
33c0: 7f 87 d0 00 cmpw cr7,r7,r26 | |
precision = i; | |
} | |
size -= precision; | |
if (!(type&(ZEROPAD+LEFT))) { | |
33c4: 73 a9 00 11 andi. r9,r29,17 | |
int count = 0; | |
33c8: 3b e0 00 00 li r31,0 | |
33cc: 7c e7 d7 5e isel r7,r7,r26,29 | |
size -= precision; | |
33d0: 7f 67 30 50 subf r27,r7,r6 | |
33d4: 7c f7 07 b4 extsw r23,r7 | |
33d8: 7f 7e 07 b4 extsw r30,r27 | |
if (!(type&(ZEROPAD+LEFT))) { | |
33dc: 40 82 00 28 bne 3404 <number+0xfc> | |
33e0: 7b 7f 00 20 clrldi r31,r27,32 | |
while (size-- > 0) | |
33e4: 2f 9f 00 00 cmpwi cr7,r31,0 | |
33e8: 41 9d 01 34 bgt cr7,351c <number+0x214> | |
33ec: 2f 9b 00 00 cmpwi cr7,r27,0 | |
33f0: 38 db ff ff addi r6,r27,-1 | |
33f4: 7f c0 df 1e isel r30,0,r27,28 | |
33f8: 7f df 07 b4 extsw r31,r30 | |
33fc: 7f de 30 50 subf r30,r30,r6 | |
3400: 7f de 07 b4 extsw r30,r30 | |
call_tx(' '), count++; | |
} | |
if (sign) { | |
3404: 2f b5 00 00 cmpdi cr7,r21,0 | |
3408: 41 9e 00 28 beq cr7,3430 <number+0x128> | |
call_tx(sign), count++; | |
340c: 7f 24 cb 78 mr r4,r25 | |
3410: 7e a3 ab 78 mr r3,r21 | |
3414: f8 41 00 18 std r2,24(r1) | |
3418: 7f 8c e3 78 mr r12,r28 | |
341c: 7f 89 03 a6 mtctr r28 | |
3420: 3b ff 00 01 addi r31,r31,1 | |
3424: 7f ff 07 b4 extsw r31,r31 | |
3428: 4e 80 04 21 bctrl | |
342c: e8 41 00 18 ld r2,24(r1) | |
} | |
if (type & SPECIAL) { | |
3430: 41 8e 00 30 beq cr3,3460 <number+0x158> | |
if (base == 8) | |
3434: 2f 98 00 08 cmpwi cr7,r24,8 | |
3438: 40 9e 01 0c bne cr7,3544 <number+0x23c> | |
call_tx('0'), count++; | |
343c: 7f 24 cb 78 mr r4,r25 | |
3440: 38 60 00 30 li r3,48 | |
3444: f8 41 00 18 std r2,24(r1) | |
3448: 7f 8c e3 78 mr r12,r28 | |
344c: 7f 89 03 a6 mtctr r28 | |
3450: 3b ff 00 01 addi r31,r31,1 | |
3454: 7f ff 07 b4 extsw r31,r31 | |
3458: 4e 80 04 21 bctrl | |
345c: e8 41 00 18 ld r2,24(r1) | |
call_tx('X'), count++; | |
else | |
call_tx('x'), count++; | |
} | |
} | |
if (!(type & LEFT)) { | |
3460: 40 92 00 2c bne cr4,348c <number+0x184> | |
3464: 7b dd 00 20 clrldi r29,r30,32 | |
while (size-- > 0) | |
3468: 2f 9d 00 00 cmpwi cr7,r29,0 | |
346c: 41 9d 01 30 bgt cr7,359c <number+0x294> | |
3470: 2f 9e 00 00 cmpwi cr7,r30,0 | |
3474: 7d 20 f7 1e isel r9,0,r30,28 | |
3478: 3b de ff ff addi r30,r30,-1 | |
347c: 7f ff 4a 14 add r31,r31,r9 | |
3480: 7f c9 f0 50 subf r30,r9,r30 | |
3484: 7f ff 07 b4 extsw r31,r31 | |
3488: 7f de 07 b4 extsw r30,r30 | |
348c: 7e ff ba 14 add r23,r31,r23 | |
3490: 48 00 01 58 b 35e8 <number+0x2e0> | |
c = (type & ZEROPAD) ? '0' : ' '; | |
3494: 73 a9 00 01 andi. r9,r29,1 | |
3498: 3a c0 00 20 li r22,32 | |
349c: 39 20 00 30 li r9,48 | |
34a0: 7e d6 48 9e iseleq r22,r22,r9 | |
34a4: 4b ff fe c4 b 3368 <number+0x60> | |
} else if (type & PLUS) { | |
34a8: 73 a9 00 04 andi. r9,r29,4 | |
34ac: 41 82 00 14 beq 34c0 <number+0x1b8> | |
size--; | |
34b0: 38 c6 ff ff addi r6,r6,-1 | |
sign = '+'; | |
34b4: 3a a0 00 2b li r21,43 | |
size--; | |
34b8: 7c c6 07 b4 extsw r6,r6 | |
34bc: 4b ff fe d0 b 338c <number+0x84> | |
} else if (type & SPACE) { | |
34c0: 73 a9 00 08 andi. r9,r29,8 | |
34c4: 41 82 fe c8 beq 338c <number+0x84> | |
size--; | |
34c8: 38 c6 ff ff addi r6,r6,-1 | |
sign = ' '; | |
34cc: 3a a0 00 20 li r21,32 | |
size--; | |
34d0: 7c c6 07 b4 extsw r6,r6 | |
34d4: 4b ff fe b8 b 338c <number+0x84> | |
else if (base == 8) | |
34d8: 2f 98 00 08 cmpwi cr7,r24,8 | |
34dc: 40 9e fe d0 bne cr7,33ac <number+0xa4> | |
size--; | |
34e0: 38 c6 ff ff addi r6,r6,-1 | |
34e4: 4b ff fe c4 b 33a8 <number+0xa0> | |
34e8: 39 20 00 00 li r9,0 | |
tmp[i++] = digits[num % base]; | |
34ec: 38 a1 00 20 addi r5,r1,32 | |
34f0: 7d 04 c2 12 modud r8,r4,r24 | |
while (num != 0) { | |
34f4: 7f b8 20 40 cmpld cr7,r24,r4 | |
34f8: 3b 49 00 01 addi r26,r9,1 | |
34fc: 7f 5a 07 b4 extsw r26,r26 | |
tmp[i++] = digits[num % base]; | |
3500: 7d 0a 40 ae lbzx r8,r10,r8 | |
3504: 7d 09 29 ae stbx r8,r9,r5 | |
num /= base; | |
3508: 7d 04 c3 92 divdu r8,r4,r24 | |
350c: 39 29 00 01 addi r9,r9,1 | |
while (num != 0) { | |
3510: 41 9d fe b0 bgt cr7,33c0 <number+0xb8> | |
num /= base; | |
3514: 7d 04 43 78 mr r4,r8 | |
3518: 4b ff ff d8 b 34f0 <number+0x1e8> | |
call_tx(' '), count++; | |
351c: 7f 24 cb 78 mr r4,r25 | |
3520: 38 60 00 20 li r3,32 | |
3524: f8 41 00 18 std r2,24(r1) | |
3528: 7f 8c e3 78 mr r12,r28 | |
352c: 7f 89 03 a6 mtctr r28 | |
3530: 3b ff ff ff addi r31,r31,-1 | |
3534: 7b ff 00 20 clrldi r31,r31,32 | |
3538: 4e 80 04 21 bctrl | |
353c: e8 41 00 18 ld r2,24(r1) | |
3540: 4b ff fe a4 b 33e4 <number+0xdc> | |
else if (base == 16) { | |
3544: 2f 98 00 10 cmpwi cr7,r24,16 | |
3548: 40 9e ff 18 bne cr7,3460 <number+0x158> | |
call_tx('0'), count++; | |
354c: 7f 24 cb 78 mr r4,r25 | |
3550: 38 60 00 30 li r3,48 | |
3554: f8 41 00 18 std r2,24(r1) | |
3558: 7f 8c e3 78 mr r12,r28 | |
355c: 7f 89 03 a6 mtctr r28 | |
3560: 3b ff 00 02 addi r31,r31,2 | |
3564: 7f ff 07 b4 extsw r31,r31 | |
3568: 4e 80 04 21 bctrl | |
356c: e8 41 00 18 ld r2,24(r1) | |
if (type & LARGE) | |
3570: 73 a9 00 40 andi. r9,r29,64 | |
call_tx('X'), count++; | |
3574: 7f 24 cb 78 mr r4,r25 | |
3578: 38 60 00 58 li r3,88 | |
if (type & LARGE) | |
357c: 40 82 00 08 bne 3584 <number+0x27c> | |
call_tx('x'), count++; | |
3580: 38 60 00 78 li r3,120 | |
3584: f8 41 00 18 std r2,24(r1) | |
3588: 7f 8c e3 78 mr r12,r28 | |
358c: 7f 89 03 a6 mtctr r28 | |
3590: 4e 80 04 21 bctrl | |
3594: e8 41 00 18 ld r2,24(r1) | |
3598: 4b ff fe c8 b 3460 <number+0x158> | |
call_tx(c), count++; | |
359c: 7f 24 cb 78 mr r4,r25 | |
35a0: 7e c3 b3 78 mr r3,r22 | |
35a4: f8 41 00 18 std r2,24(r1) | |
35a8: 7f 8c e3 78 mr r12,r28 | |
35ac: 7f 89 03 a6 mtctr r28 | |
35b0: 3b bd ff ff addi r29,r29,-1 | |
35b4: 7b bd 00 20 clrldi r29,r29,32 | |
35b8: 4e 80 04 21 bctrl | |
35bc: e8 41 00 18 ld r2,24(r1) | |
35c0: 4b ff fe a8 b 3468 <number+0x160> | |
} | |
while (i < precision--) | |
call_tx('0'), count++; | |
35c4: 7f 24 cb 78 mr r4,r25 | |
35c8: 38 60 00 30 li r3,48 | |
35cc: f8 41 00 18 std r2,24(r1) | |
35d0: 7f 8c e3 78 mr r12,r28 | |
35d4: 7f 89 03 a6 mtctr r28 | |
35d8: 3b ff 00 01 addi r31,r31,1 | |
35dc: 7f ff 07 b4 extsw r31,r31 | |
35e0: 4e 80 04 21 bctrl | |
35e4: e8 41 00 18 ld r2,24(r1) | |
35e8: 7d 3f b8 50 subf r9,r31,r23 | |
while (i < precision--) | |
35ec: 7f 89 d0 00 cmpw cr7,r9,r26 | |
35f0: 41 9d ff d4 bgt cr7,35c4 <number+0x2bc> | |
35f4: 7f 5d d3 78 mr r29,r26 | |
while (i-- > 0) | |
call_tx(tmp[i]), count++; | |
35f8: 3b 61 00 20 addi r27,r1,32 | |
35fc: 3b bd ff ff addi r29,r29,-1 | |
while (i-- > 0) | |
3600: 39 3d 00 01 addi r9,r29,1 | |
3604: 2f 89 00 00 cmpwi cr7,r9,0 | |
3608: 41 9d 00 34 bgt cr7,363c <number+0x334> | |
360c: 7f fa fa 14 add r31,r26,r31 | |
3610: 7b dd 00 20 clrldi r29,r30,32 | |
while (size-- > 0) | |
3614: 2f 9d 00 00 cmpwi cr7,r29,0 | |
3618: 41 9d 00 44 bgt cr7,365c <number+0x354> | |
call_tx(' '), count++; | |
return count; | |
361c: 2f 9e 00 00 cmpwi cr7,r30,0 | |
} | |
3620: 38 21 00 d0 addi r1,r1,208 | |
return count; | |
3624: 7c 60 f7 1e isel r3,0,r30,28 | |
} | |
3628: 81 81 00 08 lwz r12,8(r1) | |
return count; | |
362c: 7c 63 fa 14 add r3,r3,r31 | |
} | |
3630: 7d 81 81 20 mtcrf 24,r12 | |
3634: 7c 63 07 b4 extsw r3,r3 | |
3638: 48 00 16 c4 b 4cfc <_restgpr0_21> | |
3638: R_PPC64_REL24 _restgpr0_21 | |
call_tx(tmp[i]), count++; | |
363c: 7c 7b e8 ae lbzx r3,r27,r29 | |
3640: 7f 24 cb 78 mr r4,r25 | |
3644: f8 41 00 18 std r2,24(r1) | |
3648: 7f 8c e3 78 mr r12,r28 | |
364c: 7f 89 03 a6 mtctr r28 | |
3650: 4e 80 04 21 bctrl | |
3654: e8 41 00 18 ld r2,24(r1) | |
3658: 4b ff ff a4 b 35fc <number+0x2f4> | |
call_tx(' '), count++; | |
365c: 7f 24 cb 78 mr r4,r25 | |
3660: 38 60 00 20 li r3,32 | |
3664: f8 41 00 18 std r2,24(r1) | |
3668: 7f 8c e3 78 mr r12,r28 | |
366c: 7f 89 03 a6 mtctr r28 | |
3670: 3b bd ff ff addi r29,r29,-1 | |
3674: 7b bd 00 20 clrldi r29,r29,32 | |
3678: 4e 80 04 21 bctrl | |
367c: e8 41 00 18 ld r2,24(r1) | |
3680: 4b ff ff 94 b 3614 <number+0x30c> | |
3684: 00 00 00 00 .long 0x0 | |
3688: 00 00 00 03 .long 0x3 | |
368c: 80 0b 00 00 lwz r0,0(r11) | |
0000000000003690 <vtxprintf>: | |
int vtxprintf(void (*tx_byte)(unsigned char byte, void *data), | |
const char *fmt, va_list args, void *data) | |
{ | |
3690: 3c 40 00 02 lis r2,2 | |
3692: R_PPC64_ADDR16_HA .TOC. | |
3694: 38 42 80 00 addi r2,r2,-32768 | |
3696: R_PPC64_ADDR16_LO .TOC. | |
3698: 7c 08 02 a6 mflr r0 | |
369c: 48 00 16 0d bl 4ca8 <_savegpr0_20> | |
369c: R_PPC64_REL24 _savegpr0_20 | |
} | |
} | |
/* get the conversion qualifier */ | |
qualifier = -1; | |
if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'z' || *fmt == 'j') { | |
36a0: 3e e0 40 01 lis r23,16385 | |
36a4: 62 f7 50 00 ori r23,r23,20480 | |
{ | |
36a8: f8 21 ff 71 stdu r1,-144(r1) | |
36ac: 7c 7b 1b 78 mr r27,r3 | |
36b0: 7c bc 2b 78 mr r28,r5 | |
36b4: 7c da 33 78 mr r26,r6 | |
for (count = 0; *fmt ; ++fmt) { | |
36b8: 3b e0 00 00 li r31,0 | |
call_tx('%'), count++; | |
continue; | |
/* integer number formats - set up the flags and "break" */ | |
case 'o': | |
base = 8; | |
36bc: 3b 00 00 08 li r24,8 | |
36c0: 3b 20 00 01 li r25,1 | |
{ | |
36c4: f8 81 00 20 std r4,32(r1) | |
if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'z' || *fmt == 'j') { | |
36c8: 7a f7 83 e4 rldicr r23,r23,16,47 | |
36cc: 62 f7 00 01 ori r23,r23,1 | |
for (count = 0; *fmt ; ++fmt) { | |
36d0: e9 21 00 20 ld r9,32(r1) | |
36d4: 88 69 00 00 lbz r3,0(r9) | |
36d8: 2f a3 00 00 cmpdi cr7,r3,0 | |
36dc: 40 9e 00 10 bne cr7,36ec <vtxprintf+0x5c> | |
num = va_arg(args, unsigned int); | |
} | |
count += number(tx_byte, num, base, field_width, precision, flags, data); | |
} | |
return count; | |
} | |
36e0: 38 21 00 90 addi r1,r1,144 | |
36e4: 7f e3 fb 78 mr r3,r31 | |
36e8: 48 00 16 10 b 4cf8 <_restgpr0_20> | |
36e8: R_PPC64_REL24 _restgpr0_20 | |
if (*fmt != '%') { | |
36ec: 2b 83 00 25 cmplwi cr7,r3,37 | |
call_tx(*fmt), count++; | |
36f0: 7f 44 d3 78 mr r4,r26 | |
if (*fmt != '%') { | |
36f4: 40 9e 04 b8 bne cr7,3bac <vtxprintf+0x51c> | |
flags = 0; | |
36f8: 3b c0 00 00 li r30,0 | |
++fmt; /* this also skips first '%' */ | |
36fc: e9 41 00 20 ld r10,32(r1) | |
3700: 39 2a 00 01 addi r9,r10,1 | |
3704: f9 21 00 20 std r9,32(r1) | |
switch (*fmt) { | |
3708: 89 2a 00 01 lbz r9,1(r10) | |
370c: 2b 89 00 2b cmplwi cr7,r9,43 | |
3710: 41 9e 01 84 beq cr7,3894 <vtxprintf+0x204> | |
3714: 41 9d 01 5c bgt cr7,3870 <vtxprintf+0x1e0> | |
3718: 2b 89 00 20 cmplwi cr7,r9,32 | |
371c: 41 9e 01 80 beq cr7,389c <vtxprintf+0x20c> | |
3720: 2b 89 00 23 cmplwi cr7,r9,35 | |
3724: 41 9e 01 80 beq cr7,38a4 <vtxprintf+0x214> | |
return c >= ' ' && c <= '~'; | |
} | |
static inline int isdigit(int c) | |
{ | |
return (c >= '0' && c <= '9'); | |
3728: 39 09 ff d0 addi r8,r9,-48 | |
if (isdigit(*fmt)) { | |
372c: 2b 88 00 09 cmplwi cr7,r8,9 | |
3730: 41 9d 01 7c bgt cr7,38ac <vtxprintf+0x21c> | |
field_width = skip_atoi((char **)&fmt); | |
3734: 38 61 00 20 addi r3,r1,32 | |
3738: 48 00 11 c1 bl 48f8 <skip_atoi> | |
3738: R_PPC64_REL24 skip_atoi | |
373c: 60 00 00 00 nop | |
3740: 7c 7d 07 b4 extsw r29,r3 | |
if (*fmt == '.') { | |
3744: e9 21 00 20 ld r9,32(r1) | |
precision = -1; | |
3748: 38 e0 ff ff li r7,-1 | |
if (*fmt == '.') { | |
374c: 89 49 00 00 lbz r10,0(r9) | |
3750: 2f 8a 00 2e cmpwi cr7,r10,46 | |
3754: 40 9e 00 38 bne cr7,378c <vtxprintf+0xfc> | |
++fmt; | |
3758: 39 49 00 01 addi r10,r9,1 | |
375c: f9 41 00 20 std r10,32(r1) | |
if (isdigit(*fmt)) { | |
3760: 89 49 00 01 lbz r10,1(r9) | |
3764: 39 0a ff d0 addi r8,r10,-48 | |
3768: 2b 88 00 09 cmplwi cr7,r8,9 | |
376c: 41 9d 01 78 bgt cr7,38e4 <vtxprintf+0x254> | |
precision = skip_atoi((char **)&fmt); | |
3770: 38 61 00 20 addi r3,r1,32 | |
3774: 48 00 11 85 bl 48f8 <skip_atoi> | |
3774: R_PPC64_REL24 skip_atoi | |
3778: 60 00 00 00 nop | |
377c: 7c 63 07 b4 extsw r3,r3 | |
if (precision < 0) { | |
3780: 2f 83 00 00 cmpwi cr7,r3,0 | |
3784: 7c e0 1f 1e isel r7,0,r3,28 | |
3788: 7c e7 07 b4 extsw r7,r7 | |
if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'z' || *fmt == 'j') { | |
378c: e9 01 00 20 ld r8,32(r1) | |
qualifier = -1; | |
3790: 39 40 ff ff li r10,-1 | |
if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'z' || *fmt == 'j') { | |
3794: 88 c8 00 00 lbz r6,0(r8) | |
3798: 39 26 ff b4 addi r9,r6,-76 | |
379c: 55 29 06 3e clrlwi r9,r9,24 | |
37a0: 2b 89 00 2e cmplwi cr7,r9,46 | |
37a4: 41 9d 00 50 bgt cr7,37f4 <vtxprintf+0x164> | |
37a8: 7e e9 4c 36 srd r9,r23,r9 | |
37ac: 71 29 00 01 andi. r9,r9,1 | |
37b0: 41 82 00 44 beq 37f4 <vtxprintf+0x164> | |
++fmt; | |
37b4: 39 28 00 01 addi r9,r8,1 | |
qualifier = *fmt; | |
37b8: 7c ca 07 b4 extsw r10,r6 | |
++fmt; | |
37bc: f9 21 00 20 std r9,32(r1) | |
if (*fmt == 'l') { | |
37c0: 89 28 00 01 lbz r9,1(r8) | |
37c4: 2f 89 00 6c cmpwi cr7,r9,108 | |
37c8: 40 9e 00 10 bne cr7,37d8 <vtxprintf+0x148> | |
++fmt; | |
37cc: 39 08 00 02 addi r8,r8,2 | |
qualifier = 'L'; | |
37d0: 39 40 00 4c li r10,76 | |
++fmt; | |
37d4: f9 01 00 20 std r8,32(r1) | |
if (*fmt == 'h') { | |
37d8: e9 21 00 20 ld r9,32(r1) | |
37dc: 89 09 00 00 lbz r8,0(r9) | |
37e0: 2f 88 00 68 cmpwi cr7,r8,104 | |
37e4: 40 9e 00 10 bne cr7,37f4 <vtxprintf+0x164> | |
++fmt; | |
37e8: 39 29 00 01 addi r9,r9,1 | |
qualifier = 'H'; | |
37ec: 39 40 00 48 li r10,72 | |
++fmt; | |
37f0: f9 21 00 20 std r9,32(r1) | |
switch (*fmt) { | |
37f4: e9 21 00 20 ld r9,32(r1) | |
37f8: 89 29 00 00 lbz r9,0(r9) | |
37fc: 2b 89 00 6e cmplwi cr7,r9,110 | |
3800: 41 9e 03 70 beq cr7,3b70 <vtxprintf+0x4e0> | |
3804: 41 9d 01 20 bgt cr7,3924 <vtxprintf+0x294> | |
3808: 2b 89 00 63 cmplwi cr7,r9,99 | |
380c: 41 9e 01 a0 beq cr7,39ac <vtxprintf+0x31c> | |
3810: 41 9d 00 f4 bgt cr7,3904 <vtxprintf+0x274> | |
3814: 2b 89 00 25 cmplwi cr7,r9,37 | |
3818: 41 9e 03 8c beq cr7,3ba4 <vtxprintf+0x514> | |
381c: 2b 89 00 58 cmplwi cr7,r9,88 | |
3820: 41 9e 03 ac beq cr7,3bcc <vtxprintf+0x53c> | |
call_tx('%'), count++; | |
3824: 38 60 00 25 li r3,37 | |
3828: 7f 44 d3 78 mr r4,r26 | |
382c: f8 41 00 18 std r2,24(r1) | |
3830: 7f 6c db 78 mr r12,r27 | |
3834: 7f 69 03 a6 mtctr r27 | |
3838: 4e 80 04 21 bctrl | |
383c: e8 41 00 18 ld r2,24(r1) | |
if (*fmt) | |
3840: e9 21 00 20 ld r9,32(r1) | |
3844: 88 69 00 00 lbz r3,0(r9) | |
3848: 2f a3 00 00 cmpdi cr7,r3,0 | |
384c: 41 9e 03 90 beq cr7,3bdc <vtxprintf+0x54c> | |
call_tx(*fmt), count++; | |
3850: 7f 44 d3 78 mr r4,r26 | |
3854: f8 41 00 18 std r2,24(r1) | |
3858: 7f 6c db 78 mr r12,r27 | |
385c: 7f 69 03 a6 mtctr r27 | |
3860: 3b ff 00 02 addi r31,r31,2 | |
3864: 4e 80 04 21 bctrl | |
3868: e8 41 00 18 ld r2,24(r1) | |
386c: 48 00 03 58 b 3bc4 <vtxprintf+0x534> | |
switch (*fmt) { | |
3870: 2b 89 00 2d cmplwi cr7,r9,45 | |
3874: 41 9e 00 14 beq cr7,3888 <vtxprintf+0x1f8> | |
3878: 2b 89 00 30 cmplwi cr7,r9,48 | |
387c: 40 9e fe ac bne cr7,3728 <vtxprintf+0x98> | |
case '0': flags |= ZEROPAD; goto repeat; | |
3880: 63 de 00 01 ori r30,r30,1 | |
3884: 48 00 00 08 b 388c <vtxprintf+0x1fc> | |
case '-': flags |= LEFT; goto repeat; | |
3888: 63 de 00 10 ori r30,r30,16 | |
case '0': flags |= ZEROPAD; goto repeat; | |
388c: 7f de 07 b4 extsw r30,r30 | |
3890: 4b ff fe 6c b 36fc <vtxprintf+0x6c> | |
case '+': flags |= PLUS; goto repeat; | |
3894: 63 de 00 04 ori r30,r30,4 | |
3898: 4b ff ff f4 b 388c <vtxprintf+0x1fc> | |
case ' ': flags |= SPACE; goto repeat; | |
389c: 63 de 00 08 ori r30,r30,8 | |
38a0: 4b ff ff ec b 388c <vtxprintf+0x1fc> | |
case '#': flags |= SPECIAL; goto repeat; | |
38a4: 63 de 00 20 ori r30,r30,32 | |
38a8: 4b ff ff e4 b 388c <vtxprintf+0x1fc> | |
} else if (*fmt == '*') { | |
38ac: 2b 89 00 2a cmplwi cr7,r9,42 | |
field_width = -1; | |
38b0: 3b a0 ff ff li r29,-1 | |
} else if (*fmt == '*') { | |
38b4: 40 9e fe 90 bne cr7,3744 <vtxprintf+0xb4> | |
field_width = va_arg(args, int); | |
38b8: eb bc 00 06 lwa r29,4(r28) | |
++fmt; | |
38bc: 39 4a 00 02 addi r10,r10,2 | |
field_width = va_arg(args, int); | |
38c0: 3b 9c 00 08 addi r28,r28,8 | |
++fmt; | |
38c4: f9 41 00 20 std r10,32(r1) | |
if (field_width < 0) { | |
38c8: 2f 9d 00 00 cmpwi cr7,r29,0 | |
38cc: 40 9c fe 78 bge cr7,3744 <vtxprintf+0xb4> | |
field_width = -field_width; | |
38d0: 7f bd 00 d0 neg r29,r29 | |
flags |= LEFT; | |
38d4: 63 de 00 10 ori r30,r30,16 | |
field_width = -field_width; | |
38d8: 7f bd 07 b4 extsw r29,r29 | |
flags |= LEFT; | |
38dc: 7f de 07 b4 extsw r30,r30 | |
38e0: 4b ff fe 64 b 3744 <vtxprintf+0xb4> | |
} else if (*fmt == '*') { | |
38e4: 2b 8a 00 2a cmplwi cr7,r10,42 | |
precision = 0; | |
38e8: 38 e0 00 00 li r7,0 | |
} else if (*fmt == '*') { | |
38ec: 40 9e fe a0 bne cr7,378c <vtxprintf+0xfc> | |
++fmt; | |
38f0: 39 29 00 02 addi r9,r9,2 | |
precision = va_arg(args, int); | |
38f4: e8 7c 00 06 lwa r3,4(r28) | |
38f8: 3b 9c 00 08 addi r28,r28,8 | |
++fmt; | |
38fc: f9 21 00 20 std r9,32(r1) | |
precision = va_arg(args, int); | |
3900: 4b ff fe 80 b 3780 <vtxprintf+0xf0> | |
switch (*fmt) { | |
3904: 2b 89 00 64 cmplwi cr7,r9,100 | |
3908: 41 9e 00 0c beq cr7,3914 <vtxprintf+0x284> | |
390c: 2b 89 00 69 cmplwi cr7,r9,105 | |
3910: 40 9e ff 14 bne cr7,3824 <vtxprintf+0x194> | |
flags |= SIGN; | |
3914: 63 de 00 02 ori r30,r30,2 | |
3918: 7f de 07 b4 extsw r30,r30 | |
base = 10; | |
391c: 38 a0 00 0a li r5,10 | |
3920: 48 00 00 6c b 398c <vtxprintf+0x2fc> | |
switch (*fmt) { | |
3924: 2b 89 00 73 cmplwi cr7,r9,115 | |
3928: 41 9e 01 4c beq cr7,3a74 <vtxprintf+0x3e4> | |
392c: 41 9d 00 4c bgt cr7,3978 <vtxprintf+0x2e8> | |
3930: 2b 89 00 6f cmplwi cr7,r9,111 | |
3934: 41 9e 02 bc beq cr7,3bf0 <vtxprintf+0x560> | |
3938: 2b 89 00 70 cmplwi cr7,r9,112 | |
393c: 40 9e fe e8 bne cr7,3824 <vtxprintf+0x194> | |
if (field_width == -1 && precision == -1) | |
3940: 7f a9 38 38 and r9,r29,r7 | |
flags |= SPECIAL; | |
3944: 63 c8 00 20 ori r8,r30,32 | |
count += number(tx_byte, | |
3948: e8 9c 00 00 ld r4,0(r28) | |
(unsigned long) va_arg(args, void *), 16, | |
394c: 3a dc 00 08 addi r22,r28,8 | |
count += number(tx_byte, | |
3950: 7f a6 eb 78 mr r6,r29 | |
3954: 38 a0 00 10 li r5,16 | |
precision = 2*sizeof(uint32_t); | |
3958: 2f 89 ff ff cmpwi cr7,r9,-1 | |
count += number(tx_byte, | |
395c: 7d 08 07 b4 extsw r8,r8 | |
3960: 7f 49 d3 78 mr r9,r26 | |
3964: 7c f8 3f 9e isel r7,r24,r7,30 | |
count += number(tx_byte, num, base, field_width, precision, flags, data); | |
3968: 7f 63 db 78 mr r3,r27 | |
396c: 4b ff f9 a5 bl 3310 <number+0x8> | |
396c: R_PPC64_REL24 number | |
3970: 7f e3 fa 14 add r31,r3,r31 | |
3974: 48 00 00 d8 b 3a4c <vtxprintf+0x3bc> | |
switch (*fmt) { | |
3978: 2b 89 00 75 cmplwi cr7,r9,117 | |
397c: 41 9e ff a0 beq cr7,391c <vtxprintf+0x28c> | |
3980: 2b 89 00 78 cmplwi cr7,r9,120 | |
base = 16; | |
3984: 38 a0 00 10 li r5,16 | |
switch (*fmt) { | |
3988: 40 9e fe 9c bne cr7,3824 <vtxprintf+0x194> | |
if (qualifier == 'L') { | |
398c: 2f 8a 00 4c cmpwi cr7,r10,76 | |
3990: 3a dc 00 08 addi r22,r28,8 | |
3994: 40 9e 02 64 bne cr7,3bf8 <vtxprintf+0x568> | |
num = va_arg(args, uintmax_t); | |
3998: e8 9c 00 00 ld r4,0(r28) | |
count += number(tx_byte, num, base, field_width, precision, flags, data); | |
399c: 7f 49 d3 78 mr r9,r26 | |
39a0: 7f c8 f3 78 mr r8,r30 | |
39a4: 7f a6 eb 78 mr r6,r29 | |
39a8: 4b ff ff c0 b 3968 <vtxprintf+0x2d8> | |
if (!(flags & LEFT)) | |
39ac: 73 c9 00 10 andi. r9,r30,16 | |
39b0: 40 82 00 54 bne 3a04 <vtxprintf+0x374> | |
39b4: 7f be eb 78 mr r30,r29 | |
39b8: 48 00 00 20 b 39d8 <vtxprintf+0x348> | |
call_tx(' '), count++; | |
39bc: 7f 44 d3 78 mr r4,r26 | |
39c0: 38 60 00 20 li r3,32 | |
39c4: f8 41 00 18 std r2,24(r1) | |
39c8: 7f 6c db 78 mr r12,r27 | |
39cc: 7f 69 03 a6 mtctr r27 | |
39d0: 4e 80 04 21 bctrl | |
39d4: e8 41 00 18 ld r2,24(r1) | |
while (--field_width > 0) | |
39d8: 39 3e ff ff addi r9,r30,-1 | |
39dc: 2f 89 00 00 cmpwi cr7,r9,0 | |
39e0: 7d 3e 07 b4 extsw r30,r9 | |
39e4: 41 9d ff d8 bgt cr7,39bc <vtxprintf+0x32c> | |
39e8: 2f 9d 00 00 cmpwi cr7,r29,0 | |
39ec: 7c dd cf 5e isel r6,r29,r25,29 | |
39f0: 38 66 ff ff addi r3,r6,-1 | |
39f4: 7f a6 e8 50 subf r29,r6,r29 | |
39f8: 7f e3 fa 14 add r31,r3,r31 | |
39fc: 7f bd 07 b4 extsw r29,r29 | |
3a00: 7f ff 07 b4 extsw r31,r31 | |
call_tx((unsigned char) va_arg(args, int)), count++; | |
3a04: 88 7c 00 07 lbz r3,7(r28) | |
3a08: 7f 44 d3 78 mr r4,r26 | |
3a0c: f8 41 00 18 std r2,24(r1) | |
3a10: 7f 6c db 78 mr r12,r27 | |
3a14: 7f 69 03 a6 mtctr r27 | |
3a18: 3a dc 00 08 addi r22,r28,8 | |
while (--field_width > 0) | |
3a1c: 7f be eb 78 mr r30,r29 | |
call_tx((unsigned char) va_arg(args, int)), count++; | |
3a20: 3b 9f 00 01 addi r28,r31,1 | |
3a24: 4e 80 04 21 bctrl | |
3a28: e8 41 00 18 ld r2,24(r1) | |
while (--field_width > 0) | |
3a2c: 39 3e ff ff addi r9,r30,-1 | |
3a30: 2f 89 00 00 cmpwi cr7,r9,0 | |
3a34: 7d 3e 07 b4 extsw r30,r9 | |
3a38: 41 9d 00 1c bgt cr7,3a54 <vtxprintf+0x3c4> | |
3a3c: 2f 9d 00 00 cmpwi cr7,r29,0 | |
3a40: 7f fd cf 5e isel r31,r29,r25,29 | |
3a44: 3b ff ff ff addi r31,r31,-1 | |
3a48: 7f ff e2 14 add r31,r31,r28 | |
count += number(tx_byte, num, base, field_width, precision, flags, data); | |
3a4c: 7f ff 07 b4 extsw r31,r31 | |
3a50: 48 00 00 88 b 3ad8 <vtxprintf+0x448> | |
call_tx(' '), count++; | |
3a54: 7f 44 d3 78 mr r4,r26 | |
3a58: 38 60 00 20 li r3,32 | |
3a5c: f8 41 00 18 std r2,24(r1) | |
3a60: 7f 6c db 78 mr r12,r27 | |
3a64: 7f 69 03 a6 mtctr r27 | |
3a68: 4e 80 04 21 bctrl | |
3a6c: e8 41 00 18 ld r2,24(r1) | |
3a70: 4b ff ff bc b 3a2c <vtxprintf+0x39c> | |
s = va_arg(args, char *); | |
3a74: ea bc 00 00 ld r21,0(r28) | |
3a78: 3a dc 00 08 addi r22,r28,8 | |
if (!s) | |
3a7c: 2f b5 00 00 cmpdi cr7,r21,0 | |
3a80: 40 9e 00 0c bne cr7,3a8c <vtxprintf+0x3fc> | |
s = "<NULL>"; | |
3a84: 3e a2 ff ff addis r21,r2,-1 | |
3a86: R_PPC64_TOC16_HA .text+0x4b3c | |
3a88: 3a b5 cb 3c addi r21,r21,-13508 | |
3a8a: R_PPC64_TOC16_LO .text+0x4b3c | |
len = strnlen(s, (size_t)precision); | |
3a8c: 7c e4 3b 78 mr r4,r7 | |
3a90: 7e a3 ab 78 mr r3,r21 | |
3a94: 48 00 0d f5 bl 4888 <strnlen> | |
3a94: R_PPC64_REL24 strnlen | |
3a98: 60 00 00 00 nop | |
if (!(flags & LEFT)) { | |
3a9c: 73 c9 00 10 andi. r9,r30,16 | |
len = strnlen(s, (size_t)precision); | |
3aa0: 7c 7c 07 b4 extsw r28,r3 | |
if (!(flags & LEFT)) { | |
3aa4: 41 82 00 78 beq 3b1c <vtxprintf+0x48c> | |
3aa8: 7f be eb 78 mr r30,r29 | |
for (i = 0; i < len; ++i) | |
3aac: 3b a0 00 00 li r29,0 | |
3ab0: 7f 9c e8 00 cmpw cr7,r28,r29 | |
3ab4: 41 9d 00 70 bgt cr7,3b24 <vtxprintf+0x494> | |
3ab8: 2f 9c 00 00 cmpwi cr7,r28,0 | |
3abc: 7c 60 e7 1e isel r3,0,r28,28 | |
3ac0: 7f e3 fa 14 add r31,r3,r31 | |
3ac4: 7f ff 07 b4 extsw r31,r31 | |
3ac8: 7f df f2 14 add r30,r31,r30 | |
3acc: 7d 3f f0 50 subf r9,r31,r30 | |
while (len < field_width--) | |
3ad0: 7f 89 e0 00 cmpw cr7,r9,r28 | |
3ad4: 41 9d 00 74 bgt cr7,3b48 <vtxprintf+0x4b8> | |
count += number(tx_byte, num, base, field_width, precision, flags, data); | |
3ad8: 7e dc b3 78 mr r28,r22 | |
3adc: 48 00 00 a8 b 3b84 <vtxprintf+0x4f4> | |
call_tx(' '), count++; | |
3ae0: 7f 44 d3 78 mr r4,r26 | |
3ae4: 38 60 00 20 li r3,32 | |
3ae8: f8 41 00 18 std r2,24(r1) | |
3aec: 7f 6c db 78 mr r12,r27 | |
3af0: 7f 69 03 a6 mtctr r27 | |
while (len < field_width--) | |
3af4: 7f dd f3 78 mr r29,r30 | |
call_tx(' '), count++; | |
3af8: 4e 80 04 21 bctrl | |
3afc: e8 41 00 18 ld r2,24(r1) | |
while (len < field_width--) | |
3b00: 7f 9d e0 00 cmpw cr7,r29,r28 | |
3b04: 7f fd a0 50 subf r31,r29,r20 | |
3b08: 3b dd ff ff addi r30,r29,-1 | |
3b0c: 7f ff 07 b4 extsw r31,r31 | |
3b10: 7f de 07 b4 extsw r30,r30 | |
3b14: 41 9d ff cc bgt cr7,3ae0 <vtxprintf+0x450> | |
3b18: 4b ff ff 94 b 3aac <vtxprintf+0x41c> | |
3b1c: 7e 9f ea 14 add r20,r31,r29 | |
3b20: 4b ff ff e0 b 3b00 <vtxprintf+0x470> | |
call_tx(*s++), count++; | |
3b24: 7c 75 e8 ae lbzx r3,r21,r29 | |
3b28: 7f 44 d3 78 mr r4,r26 | |
3b2c: f8 41 00 18 std r2,24(r1) | |
3b30: 7f 6c db 78 mr r12,r27 | |
3b34: 7f 69 03 a6 mtctr r27 | |
3b38: 3b bd 00 01 addi r29,r29,1 | |
3b3c: 4e 80 04 21 bctrl | |
3b40: e8 41 00 18 ld r2,24(r1) | |
3b44: 4b ff ff 6c b 3ab0 <vtxprintf+0x420> | |
call_tx(' '), count++; | |
3b48: 7f 44 d3 78 mr r4,r26 | |
3b4c: 38 60 00 20 li r3,32 | |
3b50: f8 41 00 18 std r2,24(r1) | |
3b54: 7f 6c db 78 mr r12,r27 | |
3b58: 7f 69 03 a6 mtctr r27 | |
3b5c: 3b ff 00 01 addi r31,r31,1 | |
3b60: 7f ff 07 b4 extsw r31,r31 | |
3b64: 4e 80 04 21 bctrl | |
3b68: e8 41 00 18 ld r2,24(r1) | |
3b6c: 4b ff ff 60 b 3acc <vtxprintf+0x43c> | |
if (qualifier == 'L') { | |
3b70: 2f 8a 00 4c cmpwi cr7,r10,76 | |
3b74: e9 3c 00 00 ld r9,0(r28) | |
3b78: 3b 9c 00 08 addi r28,r28,8 | |
3b7c: 40 9e 00 18 bne cr7,3b94 <vtxprintf+0x504> | |
*ip = count; | |
3b80: fb e9 00 00 std r31,0(r9) | |
for (count = 0; *fmt ; ++fmt) { | |
3b84: e9 21 00 20 ld r9,32(r1) | |
3b88: 39 29 00 01 addi r9,r9,1 | |
3b8c: f9 21 00 20 std r9,32(r1) | |
3b90: 4b ff fb 40 b 36d0 <vtxprintf+0x40> | |
} else if (qualifier == 'l') { | |
3b94: 2f 8a 00 6c cmpwi cr7,r10,108 | |
3b98: 41 9e ff e8 beq cr7,3b80 <vtxprintf+0x4f0> | |
*ip = count; | |
3b9c: 93 e9 00 00 stw r31,0(r9) | |
3ba0: 4b ff ff e4 b 3b84 <vtxprintf+0x4f4> | |
call_tx('%'), count++; | |
3ba4: 7f 44 d3 78 mr r4,r26 | |
3ba8: 38 60 00 25 li r3,37 | |
3bac: f8 41 00 18 std r2,24(r1) | |
3bb0: 7f 6c db 78 mr r12,r27 | |
3bb4: 7f 69 03 a6 mtctr r27 | |
3bb8: 3b ff 00 01 addi r31,r31,1 | |
3bbc: 4e 80 04 21 bctrl | |
3bc0: e8 41 00 18 ld r2,24(r1) | |
call_tx(*fmt), count++; | |
3bc4: 7f ff 07 b4 extsw r31,r31 | |
3bc8: 4b ff ff bc b 3b84 <vtxprintf+0x4f4> | |
flags |= LARGE; | |
3bcc: 63 de 00 40 ori r30,r30,64 | |
base = 16; | |
3bd0: 38 a0 00 10 li r5,16 | |
flags |= LARGE; | |
3bd4: 7f de 07 b4 extsw r30,r30 | |
3bd8: 4b ff fd b4 b 398c <vtxprintf+0x2fc> | |
call_tx('%'), count++; | |
3bdc: 3b ff 00 01 addi r31,r31,1 | |
--fmt; | |
3be0: 39 29 ff ff addi r9,r9,-1 | |
call_tx('%'), count++; | |
3be4: 7f ff 07 b4 extsw r31,r31 | |
--fmt; | |
3be8: f9 21 00 20 std r9,32(r1) | |
3bec: 4b ff ff 98 b 3b84 <vtxprintf+0x4f4> | |
base = 8; | |
3bf0: 38 a0 00 08 li r5,8 | |
3bf4: 4b ff fd 98 b 398c <vtxprintf+0x2fc> | |
} else if (qualifier == 'l') { | |
3bf8: 2f 8a 00 6c cmpwi cr7,r10,108 | |
3bfc: 41 9e fd 9c beq cr7,3998 <vtxprintf+0x308> | |
} else if (qualifier == 'z') { | |
3c00: 2f 8a 00 7a cmpwi cr7,r10,122 | |
3c04: 41 9e fd 94 beq cr7,3998 <vtxprintf+0x308> | |
} else if (qualifier == 'j') { | |
3c08: 2f 8a 00 6a cmpwi cr7,r10,106 | |
3c0c: 41 9e fd 8c beq cr7,3998 <vtxprintf+0x308> | |
} else if (qualifier == 'h') { | |
3c10: 2f 8a 00 68 cmpwi cr7,r10,104 | |
3c14: 57 c9 07 bc rlwinm r9,r30,0,30,30 | |
3c18: 80 9c 00 04 lwz r4,4(r28) | |
3c1c: 7d 29 07 b5 extsw. r9,r9 | |
3c20: 40 9e 00 18 bne cr7,3c38 <vtxprintf+0x5a8> | |
if (flags & SIGN) | |
3c24: 40 82 00 0c bne 3c30 <vtxprintf+0x5a0> | |
num = (unsigned short) va_arg(args, int); | |
3c28: 54 84 04 3e clrlwi r4,r4,16 | |
3c2c: 4b ff fd 70 b 399c <vtxprintf+0x30c> | |
num = (short) num; | |
3c30: 7c 84 07 34 extsh r4,r4 | |
3c34: 4b ff fd 68 b 399c <vtxprintf+0x30c> | |
} else if (qualifier == 'H') { | |
3c38: 2f 8a 00 48 cmpwi cr7,r10,72 | |
3c3c: 40 9e 00 18 bne cr7,3c54 <vtxprintf+0x5c4> | |
if (flags & SIGN) | |
3c40: 40 82 00 0c bne 3c4c <vtxprintf+0x5bc> | |
num = (unsigned char) va_arg(args, int); | |
3c44: 54 84 06 3e clrlwi r4,r4,24 | |
3c48: 4b ff fd 54 b 399c <vtxprintf+0x30c> | |
num = (signed char) num; | |
3c4c: 7c 84 07 74 extsb r4,r4 | |
3c50: 4b ff fd 4c b 399c <vtxprintf+0x30c> | |
} else if (flags & SIGN) { | |
3c54: 41 82 fd 48 beq 399c <vtxprintf+0x30c> | |
num = va_arg(args, int); | |
3c58: 7c 84 07 b4 extsw r4,r4 | |
3c5c: 4b ff fd 40 b 399c <vtxprintf+0x30c> | |
3c60: 00 00 00 00 .long 0x0 | |
3c64: 00 00 00 01 .long 0x1 | |
3c68: 80 0c 00 00 lwz r0,0(r12) | |
0000000000003c6c <boot_device_init>: | |
#include <boot_device.h> | |
void __weak boot_device_init(void) | |
{ | |
/* Provide weak do-nothing init. */ | |
} | |
3c6c: 4e 80 00 20 blr | |
... | |
0000000000003c7c <boot_device_ro_subregion>: | |
return rdev_chain(subrd, parent, region_offset(sub), region_sz(sub)); | |
} | |
int boot_device_ro_subregion(const struct region *sub, | |
struct region_device *subrd) | |
{ | |
3c7c: 3c 40 00 02 lis r2,2 | |
3c7e: R_PPC64_ADDR16_HA .TOC. | |
3c80: 38 42 80 00 addi r2,r2,-32768 | |
3c82: R_PPC64_ADDR16_LO .TOC. | |
3c84: 7c 08 02 a6 mflr r0 | |
3c88: fb c1 ff f0 std r30,-16(r1) | |
3c8c: fb e1 ff f8 std r31,-8(r1) | |
3c90: 7c 9e 23 78 mr r30,r4 | |
3c94: 7c 7f 1b 78 mr r31,r3 | |
3c98: f8 01 00 10 std r0,16(r1) | |
3c9c: f8 21 ff d1 stdu r1,-48(r1) | |
/* Ensure boot device has been initialized at least once. */ | |
boot_device_init(); | |
3ca0: 4b ff ff cd bl 3c6c <boot_device_init> | |
3ca0: R_PPC64_REL24 boot_device_init | |
3ca4: 60 00 00 00 nop | |
return boot_device_subregion(sub, subrd, boot_device_ro()); | |
3ca8: 4b ff e5 75 bl 221c <boot_device_ro+0x8> | |
3ca8: R_PPC64_REL24 boot_device_ro | |
3cac: 60 00 00 00 nop | |
if (parent == NULL) | |
3cb0: 7c 64 1b 79 mr. r4,r3 | |
3cb4: 41 82 00 20 beq 3cd4 <boot_device_ro_subregion+0x58> | |
return rdev_chain(subrd, parent, region_offset(sub), region_sz(sub)); | |
3cb8: e8 df 00 08 ld r6,8(r31) | |
3cbc: e8 bf 00 00 ld r5,0(r31) | |
3cc0: 7f c3 f3 78 mr r3,r30 | |
3cc4: 4b ff f0 01 bl 2cc4 <rdev_chain+0x8> | |
3cc4: R_PPC64_REL24 rdev_chain | |
3cc8: 60 00 00 00 nop | |
} | |
3ccc: 38 21 00 30 addi r1,r1,48 | |
3cd0: 48 00 10 64 b 4d34 <_restgpr0_30> | |
3cd0: R_PPC64_REL24 _restgpr0_30 | |
return -1; | |
3cd4: 38 60 ff ff li r3,-1 | |
3cd8: 4b ff ff f4 b 3ccc <boot_device_ro_subregion+0x50> | |
3cdc: 00 00 00 00 .long 0x0 | |
3ce0: 00 00 00 01 .long 0x1 | |
3ce4: 80 02 00 00 lwz r0,0(r2) | |
0000000000003ce8 <bootblock_mainboard_early_init>: | |
#include <post.h> | |
#include <program_loading.h> | |
#include <symbols.h> | |
#include <timestamp.h> | |
__weak void bootblock_mainboard_early_init(void) { /* no-op */ } | |
3ce8: 4e 80 00 20 blr | |
... | |
0000000000003cf8 <bootblock_soc_early_init>: | |
3cf8: 4e 80 00 20 blr | |
... | |
0000000000003d08 <bootblock_soc_init>: | |
3d08: 4e 80 00 20 blr | |
... | |
0000000000003d18 <bootblock_mainboard_init>: | |
3d18: 4e 80 00 20 blr | |
... | |
0000000000003d28 <bootblock_main_with_timestamp>: | |
* entered from C code. This function assumes that the timer has already been | |
* initialized, so it does not call init_timer(). | |
*/ | |
void bootblock_main_with_timestamp(uint64_t base_timestamp, | |
struct timestamp_entry *timestamps, size_t num_timestamps) | |
{ | |
3d28: 3c 40 00 02 lis r2,2 | |
3d2a: R_PPC64_ADDR16_HA .TOC. | |
3d2c: 38 42 80 00 addi r2,r2,-32768 | |
3d2e: R_PPC64_ADDR16_LO .TOC. | |
3d30: 7c 08 02 a6 mflr r0 | |
3d34: f8 01 00 10 std r0,16(r1) | |
3d38: f8 21 ff e1 stdu r1,-32(r1) | |
timestamps[i].entry_stamp); | |
} | |
timestamp_add_now(TS_START_BOOTBLOCK); | |
bootblock_soc_early_init(); | |
3d3c: 4b ff ff bd bl 3cf8 <bootblock_soc_early_init> | |
3d3c: R_PPC64_REL24 bootblock_soc_early_init | |
3d40: 60 00 00 00 nop | |
bootblock_mainboard_early_init(); | |
3d44: 4b ff ff a5 bl 3ce8 <bootblock_mainboard_early_init> | |
3d44: R_PPC64_REL24 bootblock_mainboard_early_init | |
3d48: 60 00 00 00 nop | |
if (CONFIG(CMOS_POST)) | |
cmos_post_init(); | |
if (CONFIG(BOOTBLOCK_CONSOLE)) { | |
console_init(); | |
3d4c: 4b ff f1 a5 bl 2ef0 <console_init+0x8> | |
3d4c: R_PPC64_REL24 console_init | |
3d50: 60 00 00 00 nop | |
exception_init(); | |
} | |
bootblock_soc_init(); | |
3d54: 4b ff ff b5 bl 3d08 <bootblock_soc_init> | |
3d54: R_PPC64_REL24 bootblock_soc_init | |
3d58: 60 00 00 00 nop | |
bootblock_mainboard_init(); | |
3d5c: 4b ff ff bd bl 3d18 <bootblock_mainboard_init> | |
3d5c: R_PPC64_REL24 bootblock_mainboard_init | |
3d60: 60 00 00 00 nop | |
timestamp_add_now(TS_END_BOOTBLOCK); | |
run_romstage(); | |
3d64: 48 00 09 cd bl 4730 <run_romstage+0x8> | |
3d64: R_PPC64_REL24 run_romstage | |
3d68: 60 00 00 00 nop | |
} | |
3d6c: 38 21 00 20 addi r1,r1,32 | |
3d70: e8 01 00 10 ld r0,16(r1) | |
3d74: 7c 08 03 a6 mtlr r0 | |
3d78: 4e 80 00 20 blr | |
3d7c: 00 00 00 00 .long 0x0 | |
3d80: 00 00 00 01 .long 0x1 | |
3d84: 80 00 00 00 lwz r0,0(0) | |
0000000000003d88 <main>: | |
{ | |
bootblock_main_with_timestamp(base_timestamp, NULL, 0); | |
} | |
void main(void) | |
{ | |
3d88: 3c 40 00 02 lis r2,2 | |
3d8a: R_PPC64_ADDR16_HA .TOC. | |
3d8c: 38 42 80 00 addi r2,r2,-32768 | |
3d8e: R_PPC64_ADDR16_LO .TOC. | |
3d90: 7c 08 02 a6 mflr r0 | |
3d94: f8 01 00 10 std r0,16(r1) | |
3d98: f8 21 ff e1 stdu r1,-32(r1) | |
uint64_t base_timestamp = 0; | |
init_timer(); | |
3d9c: 48 00 0b a9 bl 4944 <init_timer> | |
3d9c: R_PPC64_REL24 init_timer | |
3da0: 60 00 00 00 nop | |
if (CONFIG(COLLECT_TIMESTAMPS)) | |
base_timestamp = timestamp_get(); | |
bootblock_main_with_timestamp(base_timestamp, NULL, 0); | |
} | |
3da4: 38 21 00 20 addi r1,r1,32 | |
bootblock_main_with_timestamp(base_timestamp, NULL, 0); | |
3da8: 38 a0 00 00 li r5,0 | |
3dac: 38 80 00 00 li r4,0 | |
3db0: 38 60 00 00 li r3,0 | |
} | |
3db4: e8 01 00 10 ld r0,16(r1) | |
3db8: 7c 08 03 a6 mtlr r0 | |
bootblock_main_with_timestamp(base_timestamp, NULL, 0); | |
3dbc: 4b ff ff 74 b 3d30 <bootblock_main_with_timestamp+0x8> | |
3dbc: R_PPC64_REL24 bootblock_main_with_timestamp | |
3dc0: 00 00 00 00 .long 0x0 | |
3dc4: 00 00 00 01 .long 0x1 | |
3dc8: 80 00 00 00 lwz r0,0(0) | |
0000000000003dcc <cbfs_load_and_decompress>: | |
return true; | |
} | |
size_t cbfs_load_and_decompress(const struct region_device *rdev, size_t offset, | |
size_t in_size, void *buffer, size_t buffer_size, uint32_t compression) | |
{ | |
3dcc: 3c 40 00 02 lis r2,2 | |
3dce: R_PPC64_ADDR16_HA .TOC. | |
3dd0: 38 42 80 00 addi r2,r2,-32768 | |
3dd2: R_PPC64_ADDR16_LO .TOC. | |
3dd4: 7c 08 02 a6 mflr r0 | |
size_t out_size; | |
void *map; | |
switch (compression) { | |
3dd8: 2c 28 00 00 cmpdi r8,0 | |
{ | |
3ddc: 48 00 0e e9 bl 4cc4 <_savegpr0_27> | |
3ddc: R_PPC64_REL24 _savegpr0_27 | |
3de0: f8 21 ff b1 stdu r1,-80(r1) | |
3de4: 7c bf 2b 78 mr r31,r5 | |
3de8: 7c dd 33 78 mr r29,r6 | |
3dec: 7c fe 3b 78 mr r30,r7 | |
switch (compression) { | |
3df0: 41 82 00 14 beq 3e04 <cbfs_load_and_decompress+0x38> | |
3df4: 2b 88 00 02 cmplwi cr7,r8,2 | |
3df8: 41 9e 00 3c beq cr7,3e34 <cbfs_load_and_decompress+0x68> | |
case CBFS_COMPRESS_NONE: | |
if (buffer_size < in_size) | |
return 0; | |
if (rdev_readat(rdev, buffer, offset, in_size) != in_size) | |
return 0; | |
3dfc: 3b e0 00 00 li r31,0 | |
3e00: 48 00 00 28 b 3e28 <cbfs_load_and_decompress+0x5c> | |
if (buffer_size < in_size) | |
3e04: 7f a7 28 40 cmpld cr7,r7,r5 | |
3e08: 41 9c ff f4 blt cr7,3dfc <cbfs_load_and_decompress+0x30> | |
if (rdev_readat(rdev, buffer, offset, in_size) != in_size) | |
3e0c: 7c a6 2b 78 mr r6,r5 | |
3e10: 7c 85 23 78 mr r5,r4 | |
3e14: 7f a4 eb 78 mr r4,r29 | |
3e18: 4b ff ee 19 bl 2c30 <rdev_readat+0x8> | |
3e18: R_PPC64_REL24 rdev_readat | |
3e1c: 60 00 00 00 nop | |
3e20: 7f a3 f8 00 cmpd cr7,r3,r31 | |
3e24: 40 9e ff d8 bne cr7,3dfc <cbfs_load_and_decompress+0x30> | |
return out_size; | |
default: | |
return 0; | |
} | |
} | |
3e28: 38 21 00 50 addi r1,r1,80 | |
3e2c: 7f e3 fb 78 mr r3,r31 | |
3e30: 48 00 0e e4 b 4d14 <_restgpr0_27> | |
3e30: R_PPC64_REL24 _restgpr0_27 | |
3e34: 7c 7c 1b 78 mr r28,r3 | |
map = rdev_mmap(rdev, offset, in_size); | |
3e38: 4b ff ec f5 bl 2b2c <rdev_mmap+0x8> | |
3e38: R_PPC64_REL24 rdev_mmap | |
3e3c: 60 00 00 00 nop | |
if (map == NULL) | |
3e40: 7c 7b 1b 79 mr. r27,r3 | |
3e44: 41 82 ff b8 beq 3dfc <cbfs_load_and_decompress+0x30> | |
out_size = ulz4fn(map, in_size, buffer, buffer_size); | |
3e48: 7f e4 fb 78 mr r4,r31 | |
3e4c: 7f c6 f3 78 mr r6,r30 | |
3e50: 7f a5 eb 78 mr r5,r29 | |
3e54: 4b ff e8 49 bl 269c <ulz4fn+0x8> | |
3e54: R_PPC64_REL24 ulz4fn | |
3e58: 60 00 00 00 nop | |
rdev_munmap(rdev, map); | |
3e5c: 7f 64 db 78 mr r4,r27 | |
out_size = ulz4fn(map, in_size, buffer, buffer_size); | |
3e60: 7c 7f 1b 78 mr r31,r3 | |
rdev_munmap(rdev, map); | |
3e64: 7f 83 e3 78 mr r3,r28 | |
3e68: 4b ff ed 5d bl 2bc4 <rdev_munmap+0x8> | |
3e68: R_PPC64_REL24 rdev_munmap | |
3e6c: 60 00 00 00 nop | |
return out_size; | |
3e70: 4b ff ff b8 b 3e28 <cbfs_load_and_decompress+0x5c> | |
3e74: 00 00 00 00 .long 0x0 | |
3e78: 00 00 00 01 .long 0x1 | |
3e7c: 80 05 00 00 lwz r0,0(r5) | |
0000000000003e80 <cbfs_prog_stage_load>: | |
return cbfs_load_and_decompress(&fh.data, 0, region_device_sz(&fh.data), | |
buf, buf_size, compression_algo); | |
} | |
int cbfs_prog_stage_load(struct prog *pstage) | |
{ | |
3e80: 3c 40 00 02 lis r2,2 | |
3e82: R_PPC64_ADDR16_HA .TOC. | |
3e84: 38 42 80 00 addi r2,r2,-32768 | |
3e86: R_PPC64_ADDR16_LO .TOC. | |
3e88: 7c 08 02 a6 mflr r0 | |
void *entry; | |
size_t fsize; | |
size_t foffset; | |
const struct region_device *fh = prog_rdev(pstage); | |
if (rdev_readat(fh, &stage, 0, sizeof(stage)) != sizeof(stage)) | |
3e8c: 38 c0 00 1c li r6,28 | |
3e90: 38 a0 00 00 li r5,0 | |
{ | |
3e94: 48 00 0e 29 bl 4cbc <_savegpr0_25> | |
3e94: R_PPC64_REL24 _savegpr0_25 | |
3e98: f8 21 ff 21 stdu r1,-224(r1) | |
return prog->cbfs_type; | |
} | |
static inline struct region_device *prog_rdev(struct prog *prog) | |
{ | |
return &prog->rdev; | |
3e9c: 3b 83 00 10 addi r28,r3,16 | |
3ea0: 7c 7d 1b 78 mr r29,r3 | |
if (rdev_readat(fh, &stage, 0, sizeof(stage)) != sizeof(stage)) | |
3ea4: 38 81 00 80 addi r4,r1,128 | |
3ea8: 7f 83 e3 78 mr r3,r28 | |
3eac: 4b ff ed 85 bl 2c30 <rdev_readat+0x8> | |
3eac: R_PPC64_REL24 rdev_readat | |
3eb0: 60 00 00 00 nop | |
3eb4: 2f a3 00 1c cmpdi cr7,r3,28 | |
3eb8: 41 9e 00 10 beq cr7,3ec8 <cbfs_prog_stage_load+0x48> | |
} | |
fsize = cbfs_stage_load_and_decompress(fh, foffset, fsize, load, | |
stage.memlen, stage.compression); | |
if (!fsize) | |
return -1; | |
3ebc: 38 60 ff ff li r3,-1 | |
out: | |
prog_set_area(pstage, load, stage.memlen); | |
prog_set_entry(pstage, entry, NULL); | |
return 0; | |
} | |
3ec0: 38 21 00 e0 addi r1,r1,224 | |
3ec4: 48 00 0e 48 b 4d0c <_restgpr0_25> | |
3ec4: R_PPC64_REL24 _restgpr0_25 | |
fsize -= sizeof(stage); | |
3ec8: eb fd 00 28 ld r31,40(r29) | |
assert(fsize == stage.len); | |
3ecc: 81 21 00 94 lwz r9,148(r1) | |
fsize -= sizeof(stage); | |
3ed0: 3b ff ff e4 addi r31,r31,-28 | |
assert(fsize == stage.len); | |
3ed4: 7f a9 f8 00 cmpd cr7,r9,r31 | |
3ed8: 41 9e 00 24 beq cr7,3efc <cbfs_prog_stage_load+0x7c> | |
3edc: 3c a2 ff ff addis r5,r2,-1 | |
3ede: R_PPC64_TOC16_HA .text+0x4b4c | |
3ee0: 3c 82 ff ff addis r4,r2,-1 | |
3ee2: R_PPC64_TOC16_HA .text+0x4b5b | |
3ee4: 38 c0 01 2b li r6,299 | |
3ee8: 38 60 00 00 li r3,0 | |
3eec: 38 a5 cb 4c addi r5,r5,-13492 | |
3eee: R_PPC64_TOC16_LO .text+0x4b4c | |
3ef0: 38 84 cb 5b addi r4,r4,-13477 | |
3ef2: R_PPC64_TOC16_LO .text+0x4b5b | |
3ef4: 4b ff f2 59 bl 314c <do_printk+0x8> | |
3ef4: R_PPC64_REL24 do_printk | |
3ef8: 60 00 00 00 nop | |
fsize = cbfs_stage_load_and_decompress(fh, foffset, fsize, load, | |
3efc: 81 01 00 80 lwz r8,128(r1) | |
load = (void *)(uintptr_t)stage.load; | |
3f00: eb c1 00 8c ld r30,140(r1) | |
entry = (void *)(uintptr_t)stage.entry; | |
3f04: eb 21 00 84 ld r25,132(r1) | |
fsize = cbfs_stage_load_and_decompress(fh, foffset, fsize, load, | |
3f08: 83 41 00 98 lwz r26,152(r1) | |
if (compression == CBFS_COMPRESS_LZ4) { | |
3f0c: 2b 88 00 02 cmplwi cr7,r8,2 | |
3f10: 40 9e 00 c8 bne cr7,3fd8 <cbfs_prog_stage_load+0x158> | |
void *compr_start = buffer + buffer_size - in_size; | |
3f14: 7f 7f d0 50 subf r27,r31,r26 | |
if (rdev_readat(rdev, compr_start, offset, in_size) != in_size) | |
3f18: 7f e6 fb 78 mr r6,r31 | |
3f1c: 38 a0 00 1c li r5,28 | |
3f20: 7f 83 e3 78 mr r3,r28 | |
void *compr_start = buffer + buffer_size - in_size; | |
3f24: 7f 7e da 14 add r27,r30,r27 | |
if (rdev_readat(rdev, compr_start, offset, in_size) != in_size) | |
3f28: 7f 64 db 78 mr r4,r27 | |
3f2c: 4b ff ed 05 bl 2c30 <rdev_readat+0x8> | |
3f2c: R_PPC64_REL24 rdev_readat | |
3f30: 60 00 00 00 nop | |
3f34: 7f a3 f8 00 cmpd cr7,r3,r31 | |
3f38: 40 9e ff 84 bne cr7,3ebc <cbfs_prog_stage_load+0x3c> | |
rdev_chain(&rdev_src, &addrspace_32bit.rdev, | |
3f3c: 3c 82 ff ff addis r4,r2,-1 | |
3f3e: R_PPC64_TOC16_HA addrspace_32bit+0x8 | |
3f40: 38 84 cd c0 addi r4,r4,-12864 | |
3f42: R_PPC64_TOC16_LO addrspace_32bit+0x8 | |
3f44: 7f e6 fb 78 mr r6,r31 | |
3f48: 7f 65 db 78 mr r5,r27 | |
3f4c: 38 61 00 60 addi r3,r1,96 | |
3f50: 4b ff ed 75 bl 2cc4 <rdev_chain+0x8> | |
3f50: R_PPC64_REL24 rdev_chain | |
3f54: 60 00 00 00 nop | |
return cbfs_load_and_decompress(&rdev_src, 0, in_size, buffer, | |
3f58: 39 00 00 02 li r8,2 | |
3f5c: 7f 47 d3 78 mr r7,r26 | |
3f60: 7f c6 f3 78 mr r6,r30 | |
3f64: 7f e5 fb 78 mr r5,r31 | |
3f68: 38 80 00 00 li r4,0 | |
3f6c: 38 61 00 60 addi r3,r1,96 | |
return cbfs_load_and_decompress(rdev, offset, in_size, buffer, | |
3f70: 4b ff fe 65 bl 3dd4 <cbfs_load_and_decompress+0x8> | |
3f70: R_PPC64_REL24 cbfs_load_and_decompress | |
if (!fsize) | |
3f74: 2f a3 00 00 cmpdi cr7,r3,0 | |
3f78: 41 9e ff 44 beq cr7,3ebc <cbfs_prog_stage_load+0x3c> | |
memset(&load[fsize], 0, stage.memlen - fsize); | |
3f7c: 80 a1 00 98 lwz r5,152(r1) | |
3f80: 38 80 00 00 li r4,0 | |
3f84: 7c a3 28 50 subf r5,r3,r5 | |
3f88: 7c 7e 1a 14 add r3,r30,r3 | |
3f8c: 48 00 06 b9 bl 4644 <memset> | |
3f8c: R_PPC64_REL24 memset | |
3f90: 60 00 00 00 nop | |
prog_segment_loaded((uintptr_t)load, stage.memlen, SEG_FINAL); | |
3f94: 80 81 00 98 lwz r4,152(r1) | |
3f98: 38 a0 00 01 li r5,1 | |
3f9c: 7f c3 f3 78 mr r3,r30 | |
3fa0: 48 00 08 4d bl 47ec <prog_segment_loaded+0x8> | |
3fa0: R_PPC64_REL24 prog_segment_loaded | |
3fa4: 60 00 00 00 nop | |
extern const struct mem_region_device addrspace_32bit; | |
static inline void prog_memory_init(struct prog *prog, uintptr_t ptr, | |
size_t size) | |
{ | |
rdev_chain(&prog->rdev, &addrspace_32bit.rdev, ptr, size); | |
3fa8: 80 c1 00 98 lwz r6,152(r1) | |
3fac: 3c 82 ff ff addis r4,r2,-1 | |
3fae: R_PPC64_TOC16_HA addrspace_32bit+0x8 | |
3fb0: 38 84 cd c0 addi r4,r4,-12864 | |
3fb2: R_PPC64_TOC16_LO addrspace_32bit+0x8 | |
3fb4: 7f c5 f3 78 mr r5,r30 | |
3fb8: 7f 83 e3 78 mr r3,r28 | |
3fbc: 4b ff ed 09 bl 2cc4 <rdev_chain+0x8> | |
3fbc: R_PPC64_REL24 rdev_chain | |
3fc0: 60 00 00 00 nop | |
} | |
static inline void prog_set_entry(struct prog *prog, void *e, void *arg) | |
{ | |
prog->entry = e; | |
prog->arg = arg; | |
3fc4: 39 20 00 00 li r9,0 | |
prog->entry = e; | |
3fc8: fb 3d 00 30 std r25,48(r29) | |
return 0; | |
3fcc: 38 60 00 00 li r3,0 | |
prog->arg = arg; | |
3fd0: f9 3d 00 38 std r9,56(r29) | |
3fd4: 4b ff fe ec b 3ec0 <cbfs_prog_stage_load+0x40> | |
return cbfs_load_and_decompress(rdev, offset, in_size, buffer, | |
3fd8: 7f 47 d3 78 mr r7,r26 | |
3fdc: 7f c6 f3 78 mr r6,r30 | |
3fe0: 7f e5 fb 78 mr r5,r31 | |
3fe4: 38 80 00 1c li r4,28 | |
3fe8: 7f 83 e3 78 mr r3,r28 | |
3fec: 4b ff ff 84 b 3f70 <cbfs_prog_stage_load+0xf0> | |
3ff0: 00 00 00 00 .long 0x0 | |
3ff4: 00 00 00 01 .long 0x1 | |
3ff8: 80 07 00 00 lwz r0,0(r7) | |
0000000000003ffc <cbfs_boot_region_device>: | |
int cbfs_boot_region_device(struct region_device *rdev) | |
{ | |
3ffc: 3c 40 00 02 lis r2,2 | |
3ffe: R_PPC64_ADDR16_HA .TOC. | |
4000: 38 42 80 00 addi r2,r2,-32768 | |
4002: R_PPC64_ADDR16_LO .TOC. | |
4004: 7c 08 02 a6 mflr r0 | |
4008: fb e1 ff f8 std r31,-8(r1) | |
400c: 7c 7f 1b 78 mr r31,r3 | |
4010: f8 01 00 10 std r0,16(r1) | |
4014: f8 21 ff d1 stdu r1,-48(r1) | |
boot_device_init(); | |
4018: 4b ff fc 55 bl 3c6c <boot_device_init> | |
4018: R_PPC64_REL24 boot_device_init | |
401c: 60 00 00 00 nop | |
return vboot_locate_cbfs(rdev) && | |
fmap_locate_area_as_rdev("COREBOOT", rdev); | |
4020: 3c 62 ff ff addis r3,r2,-1 | |
4022: R_PPC64_TOC16_HA .text+0x4b43 | |
4024: 7f e4 fb 78 mr r4,r31 | |
4028: 38 63 cb 43 addi r3,r3,-13501 | |
402a: R_PPC64_TOC16_LO .text+0x4b43 | |
402c: 48 00 04 c9 bl 44f4 <fmap_locate_area_as_rdev+0x8> | |
402c: R_PPC64_REL24 fmap_locate_area_as_rdev | |
4030: 60 00 00 00 nop | |
} | |
4034: 38 21 00 30 addi r1,r1,48 | |
4038: 2f 83 00 00 cmpwi cr7,r3,0 | |
403c: 38 60 00 01 li r3,1 | |
4040: 7c 60 1f 9e isel r3,0,r3,30 | |
4044: 48 00 0c f4 b 4d38 <_restgpr0_31> | |
4044: R_PPC64_REL24 _restgpr0_31 | |
4048: 00 00 00 00 .long 0x0 | |
404c: 00 00 00 01 .long 0x1 | |
4050: 80 01 00 00 lwz r0,0(r1) | |
0000000000004054 <cbfs_boot_locate>: | |
{ | |
4054: 3c 40 00 02 lis r2,2 | |
4056: R_PPC64_ADDR16_HA .TOC. | |
4058: 38 42 80 00 addi r2,r2,-32768 | |
405a: R_PPC64_ADDR16_LO .TOC. | |
405c: 7c 08 02 a6 mflr r0 | |
4060: 48 00 0c 6d bl 4ccc <_savegpr0_29> | |
4060: R_PPC64_REL24 _savegpr0_29 | |
4064: f8 21 ff a1 stdu r1,-96(r1) | |
4068: 7c 7f 1b 78 mr r31,r3 | |
406c: 7c 9e 23 78 mr r30,r4 | |
4070: 7c bd 2b 78 mr r29,r5 | |
if (cbfs_boot_region_device(&rdev)) | |
4074: 38 61 00 20 addi r3,r1,32 | |
4078: 4b ff ff 8d bl 4004 <cbfs_boot_region_device+0x8> | |
4078: R_PPC64_REL24 cbfs_boot_region_device | |
407c: 2f a3 00 00 cmpdi cr7,r3,0 | |
4080: 40 9e 00 24 bne cr7,40a4 <cbfs_boot_locate+0x50> | |
int ret = cbfs_locate(fh, &rdev, name, type); | |
4084: 7f a6 eb 78 mr r6,r29 | |
4088: 7f c5 f3 78 mr r5,r30 | |
408c: 38 81 00 20 addi r4,r1,32 | |
4090: 7f e3 fb 78 mr r3,r31 | |
4094: 4b ff e7 c1 bl 2854 <cbfs_locate+0x8> | |
4094: R_PPC64_REL24 cbfs_locate | |
4098: 60 00 00 00 nop | |
} | |
409c: 38 21 00 60 addi r1,r1,96 | |
40a0: 48 00 0c 7c b 4d1c <_restgpr0_29> | |
40a0: R_PPC64_REL24 _restgpr0_29 | |
return -1; | |
40a4: 38 60 ff ff li r3,-1 | |
40a8: 4b ff ff f4 b 409c <cbfs_boot_locate+0x48> | |
40ac: 00 00 00 00 .long 0x0 | |
40b0: 00 00 00 01 .long 0x1 | |
40b4: 80 03 00 00 lwz r0,0(r3) | |
00000000000040b8 <cbmemc_init>: | |
current_console = cbm_cons_p; | |
} | |
void cbmemc_init(void) | |
{ | |
40b8: 3c 40 00 02 lis r2,2 | |
40ba: R_PPC64_ADDR16_HA .TOC. | |
40bc: 38 42 80 00 addi r2,r2,-32768 | |
40be: R_PPC64_ADDR16_LO .TOC. | |
if (ENV_ROMSTAGE_OR_BEFORE) { | |
/* Pre-RAM environments use special buffer placed by linker script. */ | |
init_console_ptr(_preram_cbmem_console, REGION_SIZE(preram_cbmem_console)); | |
40c0: 3d 42 00 07 addis r10,r2,7 | |
40c2: R_PPC64_TOC16_HA _preram_cbmem_console | |
40c4: 39 4a 80 00 addi r10,r10,-32768 | |
40c6: R_PPC64_TOC16_LO _preram_cbmem_console | |
40c8: 3d 22 00 07 addis r9,r2,7 | |
40ca: R_PPC64_TOC16_HA _epreram_cbmem_console | |
40cc: 39 29 a0 00 addi r9,r9,-24576 | |
40ce: R_PPC64_TOC16_LO _epreram_cbmem_console | |
if (!cbm_cons_p || total_space <= sizeof(struct cbmem_console)) { | |
40d0: 2f aa 00 00 cmpdi cr7,r10,0 | |
init_console_ptr(_preram_cbmem_console, REGION_SIZE(preram_cbmem_console)); | |
40d4: 7d 2a 48 50 subf r9,r10,r9 | |
40d8: 79 26 00 20 clrldi r6,r9,32 | |
if (!cbm_cons_p || total_space <= sizeof(struct cbmem_console)) { | |
40dc: 41 9e 00 0c beq cr7,40e8 <cbmemc_init+0x30> | |
40e0: 2b 86 00 08 cmplwi cr7,r6,8 | |
40e4: 41 9d 00 14 bgt cr7,40f8 <cbmemc_init+0x40> | |
current_console = NULL; | |
40e8: 39 20 00 00 li r9,0 | |
40ec: 3d 42 ff ff addis r10,r2,-1 | |
40ee: R_PPC64_TOC16_HA .bss+0x20 | |
40f0: f9 2a ce 00 std r9,-12800(r10) | |
40f2: R_PPC64_TOC16_LO_DS .bss+0x20 | |
return; | |
40f4: 4e 80 00 20 blr | |
return (cbm_cons_p->cursor & CURSOR_MASK) < cbm_cons_p->size && | |
40f8: 80 ea 00 04 lwz r7,4(r10) | |
40fc: 81 0a 00 00 lwz r8,0(r10) | |
4100: 54 e7 01 3e clrlwi r7,r7,4 | |
cbm_cons_p->size <= MAX_SIZE && | |
4104: 7f 87 40 40 cmplw cr7,r7,r8 | |
4108: 40 9c 00 20 bge cr7,4128 <cbmemc_init+0x70> | |
return (cbm_cons_p->cursor & CURSOR_MASK) < cbm_cons_p->size && | |
410c: 3c e0 10 00 lis r7,4096 | |
4110: 7f 88 38 40 cmplw cr7,r8,r7 | |
4114: 41 9d 00 14 bgt cr7,4128 <cbmemc_init+0x70> | |
cbm_cons_p->size == total_space - sizeof(struct cbmem_console); | |
4118: 79 29 00 20 clrldi r9,r9,32 | |
411c: 39 29 ff f8 addi r9,r9,-8 | |
cbm_cons_p->size <= MAX_SIZE && | |
4120: 7f a8 48 00 cmpd cr7,r8,r9 | |
4124: 41 9e 00 14 beq cr7,4138 <cbmemc_init+0x80> | |
cbm_cons_p->size = total_space - sizeof(struct cbmem_console); | |
4128: 38 c6 ff f8 addi r6,r6,-8 | |
cbm_cons_p->cursor = 0; | |
412c: 39 20 00 00 li r9,0 | |
cbm_cons_p->size = total_space - sizeof(struct cbmem_console); | |
4130: 90 ca 00 00 stw r6,0(r10) | |
cbm_cons_p->cursor = 0; | |
4134: 91 2a 00 04 stw r9,4(r10) | |
current_console = cbm_cons_p; | |
4138: 3d 22 ff ff addis r9,r2,-1 | |
413a: R_PPC64_TOC16_HA .bss+0x20 | |
413c: f9 49 ce 00 std r10,-12800(r9) | |
413e: R_PPC64_TOC16_LO_DS .bss+0x20 | |
} else { | |
/* Post-RAM uses static (BSS) buffer before CBMEM is reinitialized. */ | |
init_console_ptr(static_console, sizeof(static_console)); | |
} | |
} | |
4140: 4e 80 00 20 blr | |
... | |
0000000000004150 <cbmemc_tx_byte>: | |
void cbmemc_tx_byte(unsigned char data) | |
{ | |
4150: 3c 40 00 02 lis r2,2 | |
4152: R_PPC64_ADDR16_HA .TOC. | |
4154: 38 42 80 00 addi r2,r2,-32768 | |
4156: R_PPC64_ADDR16_LO .TOC. | |
if (!current_console || !current_console->size) | |
4158: 3d 42 ff ff addis r10,r2,-1 | |
415a: R_PPC64_TOC16_HA .bss+0x20 | |
415c: e9 4a ce 00 ld r10,-12800(r10) | |
415e: R_PPC64_TOC16_LO_DS .bss+0x20 | |
4160: 2f aa 00 00 cmpdi cr7,r10,0 | |
4164: 4d 9e 00 20 beqlr cr7 | |
4168: 80 ca 00 00 lwz r6,0(r10) | |
416c: 2f a6 00 00 cmpdi cr7,r6,0 | |
4170: 4d 9e 00 20 beqlr cr7 | |
return; | |
u32 flags = current_console->cursor & ~CURSOR_MASK; | |
4174: 81 2a 00 04 lwz r9,4(r10) | |
4178: 55 27 00 06 rlwinm r7,r9,0,0,3 | |
u32 cursor = current_console->cursor & CURSOR_MASK; | |
417c: 55 29 01 3e clrlwi r9,r9,4 | |
4180: 79 25 00 20 clrldi r5,r9,32 | |
current_console->body[cursor++] = data; | |
4184: 39 29 00 01 addi r9,r9,1 | |
u32 flags = current_console->cursor & ~CURSOR_MASK; | |
4188: 78 e8 00 20 clrldi r8,r7,32 | |
if (cursor >= current_console->size) { | |
418c: 7f 86 48 40 cmplw cr7,r6,r9 | |
current_console->body[cursor++] = data; | |
4190: 7c aa 2a 14 add r5,r10,r5 | |
4194: 79 24 00 20 clrldi r4,r9,32 | |
4198: 98 65 00 08 stb r3,8(r5) | |
if (cursor >= current_console->size) { | |
419c: 41 9d 00 10 bgt cr7,41ac <cbmemc_tx_byte+0x5c> | |
cursor = 0; | |
flags |= OVERFLOW; | |
41a0: 64 e8 80 00 oris r8,r7,32768 | |
cursor = 0; | |
41a4: 38 80 00 00 li r4,0 | |
flags |= OVERFLOW; | |
41a8: 79 08 00 20 clrldi r8,r8,32 | |
} | |
current_console->cursor = flags | cursor; | |
41ac: 7d 08 23 78 or r8,r8,r4 | |
41b0: 91 0a 00 04 stw r8,4(r10) | |
} | |
41b4: 4e 80 00 20 blr | |
... | |
00000000000041c4 <report>: | |
{ | |
return memcmp(fmap->signature, FMAP_SIGNATURE, sizeof(fmap->signature)); | |
} | |
static void report(const struct fmap *fmap) | |
{ | |
41c4: 3c 40 00 02 lis r2,2 | |
41c6: R_PPC64_ADDR16_HA .TOC. | |
41c8: 38 42 80 00 addi r2,r2,-32768 | |
41ca: R_PPC64_ADDR16_LO .TOC. | |
print_once(BIOS_DEBUG, "FMAP: Found \"%s\" version %d.%d at %#x.\n", | |
41cc: 3d 22 ff ff addis r9,r2,-1 | |
41ce: R_PPC64_TOC16_HA .bss+0x50 | |
41d0: 81 29 ce 30 lwz r9,-12752(r9) | |
41d2: R_PPC64_TOC16_LO .bss+0x50 | |
41d4: 2f 89 00 00 cmpwi cr7,r9,0 | |
41d8: 40 9e 00 84 bne cr7,425c <report+0x98> | |
{ | |
41dc: 7c 08 02 a6 mflr r0 | |
41e0: fb e1 ff f8 std r31,-8(r1) | |
print_once(BIOS_DEBUG, "FMAP: Found \"%s\" version %d.%d at %#x.\n", | |
41e4: 3c 82 ff ff addis r4,r2,-1 | |
41e6: R_PPC64_TOC16_HA .text+0x4bcc | |
41e8: 38 a3 00 16 addi r5,r3,22 | |
41ec: 7c 7f 1b 78 mr r31,r3 | |
41f0: 3d 00 00 02 lis r8,2 | |
41f4: 38 84 cb cc addi r4,r4,-13364 | |
41f6: R_PPC64_TOC16_LO .text+0x4bcc | |
{ | |
41f8: f8 01 00 10 std r0,16(r1) | |
41fc: f8 21 ff 91 stdu r1,-112(r1) | |
print_once(BIOS_DEBUG, "FMAP: Found \"%s\" version %d.%d at %#x.\n", | |
4200: 88 e3 00 09 lbz r7,9(r3) | |
4204: 88 c3 00 08 lbz r6,8(r3) | |
4208: 38 60 00 07 li r3,7 | |
420c: 4b ff ef 41 bl 314c <do_printk+0x8> | |
420c: R_PPC64_REL24 do_printk | |
4210: 60 00 00 00 nop | |
fmap->name, fmap->ver_major, fmap->ver_minor, FMAP_OFFSET); | |
print_once(BIOS_DEBUG, "FMAP: base = %#llx size = %#x #areas = %d\n", | |
4214: 3d 22 ff ff addis r9,r2,-1 | |
4216: R_PPC64_TOC16_HA .bss+0x50 | |
4218: 81 29 ce 30 lwz r9,-12752(r9) | |
421a: R_PPC64_TOC16_LO .bss+0x50 | |
421c: 2f 89 00 00 cmpwi cr7,r9,0 | |
4220: 40 9e 00 28 bne cr7,4248 <report+0x84> | |
4224: 39 3f 00 0a addi r9,r31,10 | |
4228: 3c 82 ff ff addis r4,r2,-1 | |
422a: R_PPC64_TOC16_HA .text+0x4bf4 | |
422c: a0 ff 00 36 lhz r7,54(r31) | |
4230: 80 df 00 12 lwz r6,18(r31) | |
4234: 38 60 00 07 li r3,7 | |
4238: e8 a9 00 00 ld r5,0(r9) | |
423c: 38 84 cb f4 addi r4,r4,-13324 | |
423e: R_PPC64_TOC16_LO .text+0x4bf4 | |
4240: 4b ff ef 0d bl 314c <do_printk+0x8> | |
4240: R_PPC64_REL24 do_printk | |
4244: 60 00 00 00 nop | |
(long long)fmap->base, fmap->size, fmap->nareas); | |
fmap_print_once = 1; | |
4248: 39 20 00 01 li r9,1 | |
424c: 3d 42 ff ff addis r10,r2,-1 | |
424e: R_PPC64_TOC16_HA .bss+0x50 | |
} | |
4250: 38 21 00 70 addi r1,r1,112 | |
fmap_print_once = 1; | |
4254: 91 2a ce 30 stw r9,-12752(r10) | |
4256: R_PPC64_TOC16_LO .bss+0x50 | |
} | |
4258: 48 00 0a e0 b 4d38 <_restgpr0_31> | |
4258: R_PPC64_REL24 _restgpr0_31 | |
fmap_print_once = 1; | |
425c: 39 20 00 01 li r9,1 | |
4260: 3d 42 ff ff addis r10,r2,-1 | |
4262: R_PPC64_TOC16_HA .bss+0x50 | |
4264: 91 2a ce 30 stw r9,-12752(r10) | |
4266: R_PPC64_TOC16_LO .bss+0x50 | |
4268: 4e 80 00 20 blr | |
426c: 00 00 00 00 .long 0x0 | |
4270: 00 00 00 01 .long 0x1 | |
4274: 80 01 00 00 lwz r0,0(r1) | |
0000000000004278 <find_fmap_directory>: | |
register_cache: | |
mem_region_device_ro_init(cache_mrdev, fmap, FMAP_SIZE); | |
} | |
static int find_fmap_directory(struct region_device *fmrd) | |
{ | |
4278: 3c 40 00 02 lis r2,2 | |
427a: R_PPC64_ADDR16_HA .TOC. | |
427c: 38 42 80 00 addi r2,r2,-32768 | |
427e: R_PPC64_ADDR16_LO .TOC. | |
4280: 7c 08 02 a6 mflr r0 | |
const struct region_device *boot; | |
struct fmap *fmap; | |
size_t offset = FMAP_OFFSET; | |
/* Try FMAP cache first */ | |
if (!region_device_sz(&fmap_cache.rdev)) | |
4284: 3d 22 ff ff addis r9,r2,-1 | |
4286: R_PPC64_TOC16_HA .bss+0x48 | |
4288: e9 29 ce 28 ld r9,-12760(r9) | |
428a: R_PPC64_TOC16_LO_DS .bss+0x48 | |
428c: 2f a9 00 00 cmpdi cr7,r9,0 | |
{ | |
4290: 48 00 0a 3d bl 4ccc <_savegpr0_29> | |
4290: R_PPC64_REL24 _savegpr0_29 | |
return &rdev->region; | |
} | |
static inline size_t region_device_sz(const struct region_device *rdev) | |
{ | |
return region_sz(region_device_region(rdev)); | |
4294: 3f c2 ff ff addis r30,r2,-1 | |
4296: R_PPC64_TOC16_HA .bss+0x28 | |
4298: f8 21 ff 81 stdu r1,-128(r1) | |
429c: 7c 7d 1b 78 mr r29,r3 | |
42a0: 3b de ce 08 addi r30,r30,-12792 | |
42a2: R_PPC64_TOC16_LO .bss+0x28 | |
if (!region_device_sz(&fmap_cache.rdev)) | |
42a4: 40 9e 00 90 bne cr7,4334 <find_fmap_directory+0xbc> | |
memset(fmap->signature, 0, sizeof(fmap->signature)); | |
42a8: 3f e2 00 07 addis r31,r2,7 | |
42aa: R_PPC64_TOC16_HA _fmap_cache | |
42ac: 3b ff a0 00 addi r31,r31,-24576 | |
42ae: R_PPC64_TOC16_LO _fmap_cache | |
42b0: 38 a0 00 08 li r5,8 | |
42b4: 38 80 00 00 li r4,0 | |
42b8: 7f e3 fb 78 mr r3,r31 | |
42bc: 48 00 03 89 bl 4644 <memset> | |
42bc: R_PPC64_REL24 memset | |
42c0: 60 00 00 00 nop | |
boot_device_init(); | |
42c4: 4b ff f9 a9 bl 3c6c <boot_device_init> | |
42c4: R_PPC64_REL24 boot_device_init | |
42c8: 60 00 00 00 nop | |
const struct region_device *boot_rdev = boot_device_ro(); | |
42cc: 4b ff df 51 bl 221c <boot_device_ro+0x8> | |
42cc: R_PPC64_REL24 boot_device_ro | |
42d0: 60 00 00 00 nop | |
if (!boot_rdev) | |
42d4: 2f a3 00 00 cmpdi cr7,r3,0 | |
42d8: 41 9e 00 5c beq cr7,4334 <find_fmap_directory+0xbc> | |
if (rdev_readat(boot_rdev, fmap, FMAP_OFFSET, FMAP_SIZE) != FMAP_SIZE) | |
42dc: 38 c0 00 e0 li r6,224 | |
42e0: 3c a0 00 02 lis r5,2 | |
42e4: 7f e4 fb 78 mr r4,r31 | |
42e8: 4b ff e9 49 bl 2c30 <rdev_readat+0x8> | |
42e8: R_PPC64_REL24 rdev_readat | |
42ec: 60 00 00 00 nop | |
42f0: 2f a3 00 e0 cmpdi cr7,r3,224 | |
42f4: 40 9e 00 40 bne cr7,4334 <find_fmap_directory+0xbc> | |
return memcmp(fmap->signature, FMAP_SIGNATURE, sizeof(fmap->signature)); | |
42f8: 3c 82 ff ff addis r4,r2,-1 | |
42fa: R_PPC64_TOC16_HA .text+0x4b80 | |
42fc: 38 a0 00 08 li r5,8 | |
4300: 7f e3 fb 78 mr r3,r31 | |
4304: 38 84 cb 80 addi r4,r4,-13440 | |
4306: R_PPC64_TOC16_LO .text+0x4b80 | |
4308: 48 00 02 4d bl 4554 <memcmp> | |
4308: R_PPC64_REL24 memcmp | |
430c: 60 00 00 00 nop | |
if (check_signature(fmap)) | |
4310: 2f a3 00 00 cmpdi cr7,r3,0 | |
4314: 40 9e 00 20 bne cr7,4334 <find_fmap_directory+0xbc> | |
report(fmap); | |
4318: 7f e3 fb 78 mr r3,r31 | |
431c: 4b ff fe b1 bl 41cc <report+0x8> | |
431c: R_PPC64_REL24 report | |
mem_region_device_ro_init(cache_mrdev, fmap, FMAP_SIZE); | |
4320: 38 a0 00 e0 li r5,224 | |
4324: 7f e4 fb 78 mr r4,r31 | |
4328: 7f c3 f3 78 mr r3,r30 | |
432c: 4b ff ea 25 bl 2d50 <mem_region_device_ro_init+0x8> | |
432c: R_PPC64_REL24 mem_region_device_ro_init | |
4330: 60 00 00 00 nop | |
4334: 3c c2 ff ff addis r6,r2,-1 | |
4336: R_PPC64_TOC16_HA .bss+0x48 | |
4338: e8 c6 ce 28 ld r6,-12760(r6) | |
433a: R_PPC64_TOC16_LO_DS .bss+0x48 | |
static inline int rdev_chain_full(struct region_device *child, | |
const struct region_device *parent) | |
{ | |
/* Chain full size of parent. */ | |
return rdev_chain(child, parent, 0, region_device_sz(parent)); | |
433c: 38 a0 00 00 li r5,0 | |
4340: 38 9e 00 08 addi r4,r30,8 | |
setup_preram_cache(&fmap_cache); | |
if (region_device_sz(&fmap_cache.rdev)) | |
4344: 2f a6 00 00 cmpdi cr7,r6,0 | |
4348: 40 9e 00 ac bne cr7,43f4 <find_fmap_directory+0x17c> | |
return rdev_chain_full(fmrd, &fmap_cache.rdev); | |
boot_device_init(); | |
434c: 4b ff f9 21 bl 3c6c <boot_device_init> | |
434c: R_PPC64_REL24 boot_device_init | |
4350: 60 00 00 00 nop | |
boot = boot_device_ro(); | |
4354: 4b ff de c9 bl 221c <boot_device_ro+0x8> | |
4354: R_PPC64_REL24 boot_device_ro | |
4358: 60 00 00 00 nop | |
if (boot == NULL) | |
435c: 7c 7f 1b 79 mr. r31,r3 | |
4360: 40 82 00 10 bne 4370 <find_fmap_directory+0xf8> | |
return -1; | |
if (check_signature(fmap)) { | |
printk(BIOS_DEBUG, "No FMAP found at %zx offset.\n", offset); | |
rdev_munmap(boot, fmap); | |
return -1; | |
4364: 38 60 ff ff li r3,-1 | |
report(fmap); | |
rdev_munmap(boot, fmap); | |
return rdev_chain(fmrd, boot, offset, FMAP_SIZE); | |
} | |
4368: 38 21 00 80 addi r1,r1,128 | |
436c: 48 00 09 b0 b 4d1c <_restgpr0_29> | |
436c: R_PPC64_REL24 _restgpr0_29 | |
fmap = rdev_mmap(boot, offset, sizeof(struct fmap)); | |
4370: 38 a0 00 38 li r5,56 | |
4374: 3c 80 00 02 lis r4,2 | |
4378: 4b ff e7 b5 bl 2b2c <rdev_mmap+0x8> | |
4378: R_PPC64_REL24 rdev_mmap | |
437c: 60 00 00 00 nop | |
if (fmap == NULL) | |
4380: 7c 7e 1b 79 mr. r30,r3 | |
4384: 41 82 ff e0 beq 4364 <find_fmap_directory+0xec> | |
return memcmp(fmap->signature, FMAP_SIGNATURE, sizeof(fmap->signature)); | |
4388: 3c 82 ff ff addis r4,r2,-1 | |
438a: R_PPC64_TOC16_HA .text+0x4b80 | |
438c: 38 a0 00 08 li r5,8 | |
4390: 38 84 cb 80 addi r4,r4,-13440 | |
4392: R_PPC64_TOC16_LO .text+0x4b80 | |
4394: 48 00 01 c1 bl 4554 <memcmp> | |
4394: R_PPC64_REL24 memcmp | |
4398: 60 00 00 00 nop | |
if (check_signature(fmap)) { | |
439c: 2f a3 00 00 cmpdi cr7,r3,0 | |
43a0: 41 9e 00 30 beq cr7,43d0 <find_fmap_directory+0x158> | |
printk(BIOS_DEBUG, "No FMAP found at %zx offset.\n", offset); | |
43a4: 3c 82 ff ff addis r4,r2,-1 | |
43a6: R_PPC64_TOC16_HA .text+0x4b89 | |
43a8: 3c a0 00 02 lis r5,2 | |
43ac: 38 60 00 07 li r3,7 | |
43b0: 38 84 cb 89 addi r4,r4,-13431 | |
43b2: R_PPC64_TOC16_LO .text+0x4b89 | |
43b4: 4b ff ed 99 bl 314c <do_printk+0x8> | |
43b4: R_PPC64_REL24 do_printk | |
43b8: 60 00 00 00 nop | |
rdev_munmap(boot, fmap); | |
43bc: 7f c4 f3 78 mr r4,r30 | |
43c0: 7f e3 fb 78 mr r3,r31 | |
43c4: 4b ff e8 01 bl 2bc4 <rdev_munmap+0x8> | |
43c4: R_PPC64_REL24 rdev_munmap | |
43c8: 60 00 00 00 nop | |
43cc: 4b ff ff 98 b 4364 <find_fmap_directory+0xec> | |
report(fmap); | |
43d0: 7f c3 f3 78 mr r3,r30 | |
43d4: 4b ff fd f9 bl 41cc <report+0x8> | |
43d4: R_PPC64_REL24 report | |
rdev_munmap(boot, fmap); | |
43d8: 7f c4 f3 78 mr r4,r30 | |
43dc: 7f e3 fb 78 mr r3,r31 | |
43e0: 4b ff e7 e5 bl 2bc4 <rdev_munmap+0x8> | |
43e0: R_PPC64_REL24 rdev_munmap | |
43e4: 60 00 00 00 nop | |
return rdev_chain(fmrd, boot, offset, FMAP_SIZE); | |
43e8: 38 c0 00 e0 li r6,224 | |
43ec: 3c a0 00 02 lis r5,2 | |
43f0: 7f e4 fb 78 mr r4,r31 | |
43f4: 7f a3 eb 78 mr r3,r29 | |
43f8: 4b ff e8 cd bl 2cc4 <rdev_chain+0x8> | |
43f8: R_PPC64_REL24 rdev_chain | |
43fc: 60 00 00 00 nop | |
4400: 4b ff ff 68 b 4368 <find_fmap_directory+0xf0> | |
4404: 00 00 00 00 .long 0x0 | |
4408: 00 00 00 01 .long 0x1 | |
440c: 80 03 00 00 lwz r0,0(r3) | |
0000000000004410 <fmap_locate_area>: | |
return boot_device_rw_subregion(&ar, area); | |
} | |
int fmap_locate_area(const char *name, struct region *ar) | |
{ | |
4410: 3c 40 00 02 lis r2,2 | |
4412: R_PPC64_ADDR16_HA .TOC. | |
4414: 38 42 80 00 addi r2,r2,-32768 | |
4416: R_PPC64_ADDR16_LO .TOC. | |
4418: 7c 08 02 a6 mflr r0 | |
441c: 48 00 08 a9 bl 4cc4 <_savegpr0_27> | |
441c: R_PPC64_REL24 _savegpr0_27 | |
4420: f8 21 ff 51 stdu r1,-176(r1) | |
4424: 7c 7b 1b 78 mr r27,r3 | |
4428: 7c 9c 23 78 mr r28,r4 | |
442c: 3b c0 00 38 li r30,56 | |
struct region_device fmrd; | |
size_t offset; | |
if (find_fmap_directory(&fmrd)) | |
4430: 38 61 00 60 addi r3,r1,96 | |
4434: 4b ff fe 4d bl 4280 <find_fmap_directory+0x8> | |
4434: R_PPC64_REL24 find_fmap_directory | |
4438: 2f a3 00 00 cmpdi cr7,r3,0 | |
443c: 41 9e 00 14 beq cr7,4450 <fmap_locate_area+0x40> | |
return -1; | |
4440: 3b a0 ff ff li r29,-1 | |
} | |
printk(BIOS_DEBUG, "FMAP: area %s not found\n", name); | |
return -1; | |
} | |
4444: 38 21 00 b0 addi r1,r1,176 | |
4448: 7f a3 eb 78 mr r3,r29 | |
444c: 48 00 08 c8 b 4d14 <_restgpr0_27> | |
444c: R_PPC64_REL24 _restgpr0_27 | |
area = rdev_mmap(&fmrd, offset, sizeof(*area)); | |
4450: 38 a0 00 2a li r5,42 | |
4454: 7f c4 f3 78 mr r4,r30 | |
4458: 38 61 00 60 addi r3,r1,96 | |
445c: 4b ff e6 d1 bl 2b2c <rdev_mmap+0x8> | |
445c: R_PPC64_REL24 rdev_mmap | |
4460: 60 00 00 00 nop | |
if (area == NULL) | |
4464: 7c 7f 1b 79 mr. r31,r3 | |
4468: 41 82 ff d8 beq 4440 <fmap_locate_area+0x30> | |
if (strcmp((const char *)area->name, name)) { | |
446c: 7f 64 db 78 mr r4,r27 | |
4470: 38 7f 00 08 addi r3,r31,8 | |
4474: 48 00 04 4d bl 48c0 <strcmp> | |
4474: R_PPC64_REL24 strcmp | |
4478: 60 00 00 00 nop | |
447c: 7c 7d 1b 79 mr. r29,r3 | |
4480: 41 82 00 1c beq 449c <fmap_locate_area+0x8c> | |
rdev_munmap(&fmrd, area); | |
4484: 7f e4 fb 78 mr r4,r31 | |
4488: 38 61 00 60 addi r3,r1,96 | |
offset += sizeof(struct fmap_area); | |
448c: 3b de 00 2a addi r30,r30,42 | |
rdev_munmap(&fmrd, area); | |
4490: 4b ff e7 35 bl 2bc4 <rdev_munmap+0x8> | |
4490: R_PPC64_REL24 rdev_munmap | |
4494: 60 00 00 00 nop | |
while (1) { | |
4498: 4b ff ff b8 b 4450 <fmap_locate_area+0x40> | |
printk(BIOS_DEBUG, "FMAP: area %s found @ %x (%d bytes)\n", | |
449c: 80 ff 00 04 lwz r7,4(r31) | |
44a0: 80 df 00 00 lwz r6,0(r31) | |
44a4: 3c 82 ff ff addis r4,r2,-1 | |
44a6: R_PPC64_TOC16_HA .text+0x4ba7 | |
44a8: 7f 65 db 78 mr r5,r27 | |
44ac: 38 60 00 07 li r3,7 | |
44b0: 38 84 cb a7 addi r4,r4,-13401 | |
44b2: R_PPC64_TOC16_LO .text+0x4ba7 | |
44b4: 4b ff ec 99 bl 314c <do_printk+0x8> | |
44b4: R_PPC64_REL24 do_printk | |
44b8: 60 00 00 00 nop | |
ar->offset = area->offset; | |
44bc: 81 3f 00 00 lwz r9,0(r31) | |
rdev_munmap(&fmrd, area); | |
44c0: 7f e4 fb 78 mr r4,r31 | |
44c4: 38 61 00 60 addi r3,r1,96 | |
ar->offset = area->offset; | |
44c8: f9 3c 00 00 std r9,0(r28) | |
ar->size = area->size; | |
44cc: 81 3f 00 04 lwz r9,4(r31) | |
44d0: f9 3c 00 08 std r9,8(r28) | |
rdev_munmap(&fmrd, area); | |
44d4: 4b ff e6 f1 bl 2bc4 <rdev_munmap+0x8> | |
44d4: R_PPC64_REL24 rdev_munmap | |
44d8: 60 00 00 00 nop | |
return 0; | |
44dc: 4b ff ff 68 b 4444 <fmap_locate_area+0x34> | |
44e0: 00 00 00 00 .long 0x0 | |
44e4: 00 00 00 01 .long 0x1 | |
44e8: 80 05 00 00 lwz r0,0(r5) | |
00000000000044ec <fmap_locate_area_as_rdev>: | |
{ | |
44ec: 3c 40 00 02 lis r2,2 | |
44ee: R_PPC64_ADDR16_HA .TOC. | |
44f0: 38 42 80 00 addi r2,r2,-32768 | |
44f2: R_PPC64_ADDR16_LO .TOC. | |
44f4: 7c 08 02 a6 mflr r0 | |
44f8: fb e1 ff f8 std r31,-8(r1) | |
44fc: 7c 9f 23 78 mr r31,r4 | |
4500: f8 01 00 10 std r0,16(r1) | |
4504: f8 21 ff c1 stdu r1,-64(r1) | |
if (fmap_locate_area(name, &ar)) | |
4508: 38 81 00 20 addi r4,r1,32 | |
450c: 4b ff ff 0d bl 4418 <fmap_locate_area+0x8> | |
450c: R_PPC64_REL24 fmap_locate_area | |
4510: 2f a3 00 00 cmpdi cr7,r3,0 | |
4514: 40 9e 00 1c bne cr7,4530 <fmap_locate_area_as_rdev+0x44> | |
return boot_device_ro_subregion(&ar, area); | |
4518: 7f e4 fb 78 mr r4,r31 | |
451c: 38 61 00 20 addi r3,r1,32 | |
4520: 4b ff f7 65 bl 3c84 <boot_device_ro_subregion+0x8> | |
4520: R_PPC64_REL24 boot_device_ro_subregion | |
4524: 60 00 00 00 nop | |
} | |
4528: 38 21 00 40 addi r1,r1,64 | |
452c: 48 00 08 0c b 4d38 <_restgpr0_31> | |
452c: R_PPC64_REL24 _restgpr0_31 | |
return -1; | |
4530: 38 60 ff ff li r3,-1 | |
4534: 4b ff ff f4 b 4528 <fmap_locate_area_as_rdev+0x3c> | |
4538: 00 00 00 00 .long 0x0 | |
453c: 00 00 00 01 .long 0x1 | |
4540: 80 01 00 00 lwz r0,0(r1) | |
0000000000004544 <halt>: | |
/* SPDX-License-Identifier: GPL-2.0-only */ | |
static __always_inline void hlt(void) | |
{ | |
while (1) | |
; | |
4544: 48 00 00 00 b 4544 <halt> | |
... | |
0000000000004554 <memcmp>: | |
{ | |
const unsigned char *s1, *s2; | |
int result; | |
s1 = src1; | |
s2 = src2; | |
result = 0; | |
4554: 39 05 00 01 addi r8,r5,1 | |
while ((bytes > 0) && (result == 0)) { | |
4558: 39 40 00 00 li r10,0 | |
result = 0; | |
455c: 39 20 00 00 li r9,0 | |
4560: 7d 09 03 a6 mtctr r8 | |
while ((bytes > 0) && (result == 0)) { | |
4564: 42 40 00 0c bdz 4570 <memcmp+0x1c> | |
4568: 2f a9 00 00 cmpdi cr7,r9,0 | |
456c: 41 9e 00 0c beq cr7,4578 <memcmp+0x24> | |
bytes--; | |
s1++; | |
s2++; | |
} | |
return result; | |
} | |
4570: 7d 23 4b 78 mr r3,r9 | |
4574: 4e 80 00 20 blr | |
result = *s1 - *s2; | |
4578: 7d 03 50 ae lbzx r8,r3,r10 | |
457c: 7d 24 50 ae lbzx r9,r4,r10 | |
4580: 39 4a 00 01 addi r10,r10,1 | |
4584: 7d 29 40 50 subf r9,r9,r8 | |
4588: 7d 29 07 b4 extsw r9,r9 | |
s2++; | |
458c: 4b ff ff d8 b 4564 <memcmp+0x10> | |
... | |
000000000000459c <memcpy>: | |
{ | |
const char *src = vsrc; | |
char *dest = vdest; | |
int i; | |
for (i = 0; i < (int)bytes; i++) | |
459c: 78 a9 00 20 clrldi r9,r5,32 | |
45a0: 2f 85 00 00 cmpwi cr7,r5,0 | |
45a4: 39 00 00 01 li r8,1 | |
45a8: 39 40 00 00 li r10,0 | |
45ac: 39 29 00 01 addi r9,r9,1 | |
45b0: 7d 28 4f 1e isel r9,r8,r9,28 | |
45b4: 2c 29 00 01 cmpdi r9,1 | |
45b8: 39 29 ff ff addi r9,r9,-1 | |
45bc: 4d 82 00 20 beqlr | |
dest[i] = src[i]; | |
45c0: 7d 04 50 ae lbzx r8,r4,r10 | |
45c4: 7d 03 51 ae stbx r8,r3,r10 | |
45c8: 39 4a 00 01 addi r10,r10,1 | |
45cc: 4b ff ff e8 b 45b4 <memcpy+0x18> | |
... | |
00000000000045dc <memmove>: | |
void *memmove(void *vdest, const void *vsrc, size_t count) | |
{ | |
const char *src = vsrc; | |
char *dest = vdest; | |
if (dest <= src) { | |
45dc: 7f a4 18 40 cmpld cr7,r4,r3 | |
45e0: 40 9c 00 38 bge cr7,4618 <memmove+0x3c> | |
while (count--) | |
*dest++ = *src++; | |
} else { | |
src += count - 1; | |
dest += count - 1; | |
while (count--) | |
45e4: 39 05 00 01 addi r8,r5,1 | |
45e8: 39 25 ff ff addi r9,r5,-1 | |
45ec: 39 40 00 00 li r10,0 | |
45f0: 7d 09 03 a6 mtctr r8 | |
src += count - 1; | |
45f4: 7c 84 4a 14 add r4,r4,r9 | |
dest += count - 1; | |
45f8: 7d 23 4a 14 add r9,r3,r9 | |
while (count--) | |
45fc: 42 00 00 2c bdnz 4628 <memmove+0x4c> | |
*dest-- = *src--; | |
} | |
return vdest; | |
} | |
4600: 4e 80 00 20 blr | |
*dest++ = *src++; | |
4604: 7d 44 48 ae lbzx r10,r4,r9 | |
4608: 7d 43 49 ae stbx r10,r3,r9 | |
460c: 39 29 00 01 addi r9,r9,1 | |
while (count--) | |
4610: 42 00 ff f4 bdnz 4604 <memmove+0x28> | |
4614: 4e 80 00 20 blr | |
4618: 39 45 00 01 addi r10,r5,1 | |
461c: 39 20 00 00 li r9,0 | |
4620: 7d 49 03 a6 mtctr r10 | |
4624: 4b ff ff ec b 4610 <memmove+0x34> | |
*dest-- = *src--; | |
4628: 7d 04 50 ae lbzx r8,r4,r10 | |
462c: 7d 09 51 ae stbx r8,r9,r10 | |
4630: 39 4a ff ff addi r10,r10,-1 | |
4634: 4b ff ff c8 b 45fc <memmove+0x20> | |
... | |
0000000000004644 <memset>: | |
void *memset(void *s, int c, size_t n) | |
{ | |
int i; | |
char *ss = (char *) s; | |
for (i = 0; i < (int)n; i++) | |
4644: 78 a9 00 20 clrldi r9,r5,32 | |
4648: 2f 85 00 00 cmpwi cr7,r5,0 | |
464c: 39 00 00 01 li r8,1 | |
4650: 39 40 00 00 li r10,0 | |
4654: 39 29 00 01 addi r9,r9,1 | |
4658: 7d 28 4f 1e isel r9,r8,r9,28 | |
465c: 2c 29 00 01 cmpdi r9,1 | |
4660: 39 29 ff ff addi r9,r9,-1 | |
4664: 4d 82 00 20 beqlr | |
ss[i] = c; | |
4668: 7c 83 51 ae stbx r4,r3,r10 | |
466c: 39 4a 00 01 addi r10,r10,1 | |
4670: 4b ff ff ec b 465c <memset+0x18> | |
... | |
0000000000004680 <prog_locate_hook>: | |
die_with_post_code(POST_INVALID_ROM, | |
"Couldn't load romstage.\n"); | |
halt(); | |
} | |
int __weak prog_locate_hook(struct prog *prog) { return 0; } | |
4680: 38 60 00 00 li r3,0 | |
4684: 4e 80 00 20 blr | |
... | |
0000000000004694 <prog_locate>: | |
{ | |
4694: 3c 40 00 02 lis r2,2 | |
4696: R_PPC64_ADDR16_HA .TOC. | |
4698: 38 42 80 00 addi r2,r2,-32768 | |
469a: R_PPC64_ADDR16_LO .TOC. | |
469c: 7c 08 02 a6 mflr r0 | |
46a0: fb e1 ff f8 std r31,-8(r1) | |
46a4: fb c1 ff f0 std r30,-16(r1) | |
46a8: 7c 7f 1b 78 mr r31,r3 | |
46ac: f8 01 00 10 std r0,16(r1) | |
46b0: f8 21 ff 91 stdu r1,-112(r1) | |
if (prog_locate_hook(prog)) | |
46b4: 4b ff ff cd bl 4680 <prog_locate_hook> | |
46b4: R_PPC64_REL24 prog_locate_hook | |
46b8: 60 00 00 00 nop | |
46bc: 2f a3 00 00 cmpdi cr7,r3,0 | |
46c0: 41 9e 00 14 beq cr7,46d4 <prog_locate+0x40> | |
return -1; | |
46c4: 3b c0 ff ff li r30,-1 | |
} | |
46c8: 38 21 00 70 addi r1,r1,112 | |
46cc: 7f c3 f3 78 mr r3,r30 | |
46d0: 48 00 06 64 b 4d34 <_restgpr0_30> | |
46d0: R_PPC64_REL24 _restgpr0_30 | |
if (cbfs_boot_locate(&file, prog_name(prog), NULL)) | |
46d4: e8 9f 00 08 ld r4,8(r31) | |
46d8: 38 a0 00 00 li r5,0 | |
46dc: 38 61 00 20 addi r3,r1,32 | |
46e0: 4b ff f9 7d bl 405c <cbfs_boot_locate+0x8> | |
46e0: R_PPC64_REL24 cbfs_boot_locate | |
46e4: 60 00 00 00 nop | |
46e8: 7c 7e 1b 79 mr. r30,r3 | |
46ec: 40 82 ff d8 bne 46c4 <prog_locate+0x30> | |
cbfsf_file_type(&file, &prog->cbfs_type); | |
46f0: 38 9f 00 04 addi r4,r31,4 | |
46f4: 38 61 00 20 addi r3,r1,32 | |
46f8: 4b ff e0 fd bl 27f4 <cbfsf_file_type+0x8> | |
46f8: R_PPC64_REL24 cbfsf_file_type | |
46fc: 60 00 00 00 nop | |
4700: e8 c1 00 58 ld r6,88(r1) | |
4704: 38 a0 00 00 li r5,0 | |
4708: 38 81 00 40 addi r4,r1,64 | |
470c: 38 7f 00 10 addi r3,r31,16 | |
4710: 4b ff e5 b5 bl 2cc4 <rdev_chain+0x8> | |
4710: R_PPC64_REL24 rdev_chain | |
4714: 60 00 00 00 nop | |
4718: 4b ff ff b0 b 46c8 <prog_locate+0x34> | |
471c: 00 00 00 00 .long 0x0 | |
4720: 00 00 00 01 .long 0x1 | |
4724: 80 02 00 00 lwz r0,0(r2) | |
0000000000004728 <run_romstage>: | |
{ | |
4728: 3c 40 00 02 lis r2,2 | |
472a: R_PPC64_ADDR16_HA .TOC. | |
472c: 38 42 80 00 addi r2,r2,-32768 | |
472e: R_PPC64_ADDR16_LO .TOC. | |
4730: 7c 08 02 a6 mflr r0 | |
struct prog romstage = | |
4734: 38 a0 00 3c li r5,60 | |
4738: 38 80 00 00 li r4,0 | |
{ | |
473c: f8 01 00 10 std r0,16(r1) | |
4740: f8 21 ff 61 stdu r1,-160(r1) | |
struct prog romstage = | |
4744: 38 61 00 64 addi r3,r1,100 | |
4748: 4b ff fe fd bl 4644 <memset> | |
4748: R_PPC64_REL24 memset | |
474c: 60 00 00 00 nop | |
4750: 39 20 00 03 li r9,3 | |
if (prog_locate(&romstage)) | |
4754: 38 61 00 60 addi r3,r1,96 | |
struct prog romstage = | |
4758: 91 21 00 60 stw r9,96(r1) | |
475c: 3d 22 ff ff addis r9,r2,-1 | |
475e: R_PPC64_TOC16_HA .text+0x4c1f | |
4760: 39 29 cc 1f addi r9,r9,-13281 | |
4762: R_PPC64_TOC16_LO .text+0x4c1f | |
4764: f9 21 00 68 std r9,104(r1) | |
if (prog_locate(&romstage)) | |
4768: 4b ff ff 35 bl 469c <prog_locate+0x8> | |
4768: R_PPC64_REL24 prog_locate | |
476c: 2f a3 00 00 cmpdi cr7,r3,0 | |
4770: 40 9e 00 2c bne cr7,479c <run_romstage+0x74> | |
if (cbfs_prog_stage_load(&romstage)) | |
4774: 38 61 00 60 addi r3,r1,96 | |
4778: 4b ff f7 11 bl 3e88 <cbfs_prog_stage_load+0x8> | |
4778: R_PPC64_REL24 cbfs_prog_stage_load | |
477c: 60 00 00 00 nop | |
4780: 2f a3 00 00 cmpdi cr7,r3,0 | |
4784: 40 9e 00 18 bne cr7,479c <run_romstage+0x74> | |
console_time_report(); | |
4788: 4b ff ea 15 bl 319c <console_time_report+0x8> | |
4788: R_PPC64_REL24 console_time_report | |
478c: 60 00 00 00 nop | |
prog_run(&romstage); | |
4790: 38 61 00 60 addi r3,r1,96 | |
4794: 48 00 00 b9 bl 484c <prog_run+0x8> | |
4794: R_PPC64_REL24 prog_run | |
4798: 60 00 00 00 nop | |
die_with_post_code(POST_INVALID_ROM, | |
479c: 38 60 00 e0 li r3,224 | |
47a0: 4b ff e7 ed bl 2f8c <post_code+0x8> | |
47a0: R_PPC64_REL24 post_code | |
47a4: 60 00 00 00 nop | |
47a8: 3c 62 ff ff addis r3,r2,-1 | |
47aa: R_PPC64_TOC16_HA .text+0x4c31 | |
47ac: 38 63 cc 31 addi r3,r3,-13263 | |
47ae: R_PPC64_TOC16_LO .text+0x4c31 | |
47b0: 4b ff e6 89 bl 2e38 <die+0x8> | |
47b0: R_PPC64_REL24 die | |
47b4: 60 00 00 00 nop | |
47b8: 00 00 00 00 .long 0x0 | |
47bc: 00 00 00 01 .long 0x1 | |
47c0: 80 00 00 00 lwz r0,0(0) | |
00000000000047c4 <platform_segment_loaded>: | |
void __weak platform_segment_loaded(uintptr_t start, | |
size_t size, int flags) | |
{ | |
/* do nothing */ | |
} | |
47c4: 4e 80 00 20 blr | |
... | |
00000000000047d4 <arch_segment_loaded>: | |
47d4: 4e 80 00 20 blr | |
... | |
00000000000047e4 <prog_segment_loaded>: | |
{ | |
47e4: 3c 40 00 02 lis r2,2 | |
47e6: R_PPC64_ADDR16_HA .TOC. | |
47e8: 38 42 80 00 addi r2,r2,-32768 | |
47ea: R_PPC64_ADDR16_LO .TOC. | |
47ec: 7c 08 02 a6 mflr r0 | |
47f0: 48 00 04 dd bl 4ccc <_savegpr0_29> | |
47f0: R_PPC64_REL24 _savegpr0_29 | |
47f4: f8 21 ff c1 stdu r1,-64(r1) | |
47f8: 7c 7f 1b 78 mr r31,r3 | |
47fc: 7c 9e 23 78 mr r30,r4 | |
4800: 7c bd 2b 78 mr r29,r5 | |
platform_segment_loaded(start, size, flags); | |
4804: 4b ff ff c1 bl 47c4 <platform_segment_loaded> | |
4804: R_PPC64_REL24 platform_segment_loaded | |
4808: 60 00 00 00 nop | |
arch_segment_loaded(start, size, flags); | |
480c: 7f a5 eb 78 mr r5,r29 | |
4810: 7f c4 f3 78 mr r4,r30 | |
4814: 7f e3 fb 78 mr r3,r31 | |
4818: 4b ff ff bd bl 47d4 <arch_segment_loaded> | |
4818: R_PPC64_REL24 arch_segment_loaded | |
481c: 60 00 00 00 nop | |
} | |
4820: 38 21 00 40 addi r1,r1,64 | |
4824: 48 00 04 f8 b 4d1c <_restgpr0_29> | |
4824: R_PPC64_REL24 _restgpr0_29 | |
4828: 00 00 00 00 .long 0x0 | |
482c: 00 00 00 01 .long 0x1 | |
4830: 80 03 00 00 lwz r0,0(r3) | |
0000000000004834 <platform_prog_run>: | |
} | |
void __weak platform_prog_run(struct prog *prog) | |
{ | |
/* do nothing */ | |
} | |
4834: 4e 80 00 20 blr | |
... | |
0000000000004844 <prog_run>: | |
{ | |
4844: 3c 40 00 02 lis r2,2 | |
4846: R_PPC64_ADDR16_HA .TOC. | |
4848: 38 42 80 00 addi r2,r2,-32768 | |
484a: R_PPC64_ADDR16_LO .TOC. | |
484c: 7c 08 02 a6 mflr r0 | |
4850: fb e1 ff f8 std r31,-8(r1) | |
4854: 7c 7f 1b 78 mr r31,r3 | |
4858: f8 01 00 10 std r0,16(r1) | |
485c: f8 21 ff d1 stdu r1,-48(r1) | |
platform_prog_run(prog); | |
4860: 4b ff ff d5 bl 4834 <platform_prog_run> | |
4860: R_PPC64_REL24 platform_prog_run | |
4864: 60 00 00 00 nop | |
arch_prog_run(prog); | |
4868: 7f e3 fb 78 mr r3,r31 | |
486c: 4b ff d7 e9 bl 2054 <arch_prog_run+0x8> | |
486c: R_PPC64_REL24 arch_prog_run | |
4870: 60 00 00 00 nop | |
} | |
4874: 38 21 00 30 addi r1,r1,48 | |
4878: 48 00 04 c0 b 4d38 <_restgpr0_31> | |
4878: R_PPC64_REL24 _restgpr0_31 | |
487c: 00 00 00 00 .long 0x0 | |
4880: 00 00 00 01 .long 0x1 | |
4884: 80 01 00 00 lwz r0,0(r1) | |
0000000000004888 <strnlen>: | |
return d; | |
} | |
size_t strnlen(const char *src, size_t max) | |
{ | |
size_t i = 0; | |
4888: 39 44 00 01 addi r10,r4,1 | |
488c: 39 20 00 00 li r9,0 | |
4890: 7d 49 03 a6 mtctr r10 | |
while ((*src++) && (i < max)) | |
4894: 7d 43 48 ae lbzx r10,r3,r9 | |
4898: 2f 8a 00 00 cmpwi cr7,r10,0 | |
489c: 41 9e 00 08 beq cr7,48a4 <strnlen+0x1c> | |
48a0: 42 00 00 0c bdnz 48ac <strnlen+0x24> | |
i++; | |
return i; | |
} | |
48a4: 7d 23 4b 78 mr r3,r9 | |
48a8: 4e 80 00 20 blr | |
i++; | |
48ac: 39 29 00 01 addi r9,r9,1 | |
48b0: 4b ff ff e4 b 4894 <strnlen+0xc> | |
... | |
00000000000048c0 <strcmp>: | |
int strcmp(const char *s1, const char *s2) | |
{ | |
int r; | |
while ((r = (*s1 - *s2)) == 0 && *s1) { | |
48c0: 38 e0 00 00 li r7,0 | |
48c4: 7d 03 38 ae lbzx r8,r3,r7 | |
48c8: 7d 24 38 ae lbzx r9,r4,r7 | |
48cc: 7d 29 40 50 subf r9,r9,r8 | |
48d0: 7d 29 07 b5 extsw. r9,r9 | |
48d4: 40 82 00 10 bne 48e4 <strcmp+0x24> | |
48d8: 2f a8 00 00 cmpdi cr7,r8,0 | |
48dc: 38 e7 00 01 addi r7,r7,1 | |
48e0: 40 9e ff e4 bne cr7,48c4 <strcmp+0x4> | |
s1++; | |
s2++; | |
} | |
return r; | |
} | |
48e4: 7d 23 4b 78 mr r3,r9 | |
48e8: 4e 80 00 20 blr | |
... | |
00000000000048f8 <skip_atoi>: | |
return 0; | |
} | |
unsigned int skip_atoi(char **s) | |
{ | |
unsigned int i = 0; | |
48f8: 39 20 00 00 li r9,0 | |
while (isdigit(**s)) | |
48fc: e9 03 00 00 ld r8,0(r3) | |
4900: 89 48 00 00 lbz r10,0(r8) | |
4904: 39 4a ff d0 addi r10,r10,-48 | |
4908: 2b 8a 00 09 cmplwi cr7,r10,9 | |
490c: 40 9d 00 0c ble cr7,4918 <skip_atoi+0x20> | |
i = i*10 + *((*s)++) - '0'; | |
return i; | |
} | |
4910: 7d 23 4b 78 mr r3,r9 | |
4914: 4e 80 00 20 blr | |
i = i*10 + *((*s)++) - '0'; | |
4918: 39 48 00 01 addi r10,r8,1 | |
491c: 1d 29 00 0a mulli r9,r9,10 | |
4920: f9 43 00 00 std r10,0(r3) | |
4924: 89 48 00 00 lbz r10,0(r8) | |
4928: 39 4a ff d0 addi r10,r10,-48 | |
492c: 7d 2a 4a 14 add r9,r10,r9 | |
4930: 79 29 00 20 clrldi r9,r9,32 | |
4934: 4b ff ff c8 b 48fc <skip_atoi+0x4> | |
... | |
0000000000004944 <init_timer>: | |
#include <timer.h> | |
#include <delay.h> | |
#include <thread.h> | |
__weak void init_timer(void) { /* do nothing */ } | |
4944: 4e 80 00 20 blr | |
... | |
4954: 60 00 00 00 nop | |
0000000000004958 <_ersbe_init_begin>: | |
4958: 00 00 00 04 .long 0x4 | |
495c: 00 00 00 01 .long 0x1 | |
4960: 00 00 00 02 .long 0x2 | |
4964: 00 00 00 01 .long 0x1 | |
4968: 00 00 00 04 .long 0x4 | |
496c: 00 00 00 04 .long 0x4 | |
4970: 00 00 00 04 .long 0x4 | |
4974: 00 00 00 04 .long 0x4 | |
... | |
4984: ff ff ff ff fnmadd. f31,f31,f31,f31 | |
4988: 00 00 00 00 .long 0x0 | |
498c: 00 00 00 01 .long 0x1 | |
4990: 00 00 00 02 .long 0x2 | |
4994: 00 00 00 03 .long 0x3 | |
4998: 2a 2a 2a 2a cmpldi cr4,r10,10794 | |
499c: 2a 2a 2a 2a cmpldi cr4,r10,10794 | |
49a0: 2a 2a 2a 2a cmpldi cr4,r10,10794 | |
49a4: 2a 2a 2a 2a cmpldi cr4,r10,10794 | |
49a8: 2a 2a 2a 2a cmpldi cr4,r10,10794 | |
49ac: 2a 2a 2a 2a cmpldi cr4,r10,10794 | |
49b0: 2a 2a 2a 2a cmpldi cr4,r10,10794 | |
49b4: 2a 2a 2a 2a cmpldi cr4,r10,10794 | |
49b8: 2a 2a 2a 2a cmpldi cr4,r10,10794 | |
49bc: 2a 2a 2a 2a cmpldi cr4,r10,10794 | |
49c0: 2a 2a 2a 2a cmpldi cr4,r10,10794 | |
49c4: 2a 2a 2a 0a cmpldi cr4,r10,10762 | |
49c8: 00 46 61 74 .long 0x466174 | |
49cc: 61 6c 20 53 ori r12,r11,8275 | |
49d0: 79 73 74 65 rldicr. r19,r11,14,49 | |
49d4: 6d 20 52 65 xoris r0,r9,21093 | |
49d8: 73 65 74 20 andi. r5,r27,29728 | |
49dc: 61 74 20 25 ori r20,r11,8229 | |
49e0: 30 31 36 6c addic r1,r17,13932 | |
49e4: 6c 78 20 20 xoris r24,r3,8224 | |
49e8: 20 00 46 61 subfic r0,r0,18017 | |
49ec: 74 61 6c 20 andis. r1,r3,27680 | |
49f0: 45 78 63 65 .long 0x45786365 | |
49f4: 70 74 69 6f andi. r20,r3,26991 | |
49f8: 6e 20 30 78 xoris r0,r17,12408 | |
49fc: 25 6c 6c 78 dozi r11,r12,27768 | |
4a00: 20 61 74 20 subfic r3,r1,29728 | |
4a04: 25 30 31 36 dozi r9,r16,12598 | |
4a08: 6c 6c 78 20 xoris r12,r3,30752 | |
4a0c: 20 00 20 20 subfic r0,r0,8224 | |
4a10: 4d 53 52 25 .long 0x4d535225 | |
4a14: 30 31 36 6c addic r1,r17,13932 | |
4a18: 6c 78 00 4c xoris r24,r3,76 | |
4a1c: 41 52 43 48 bdzt 4*cr4+eq,8d64 <_ebss+0x3f2c> | |
4a20: 49 56 45 00 b 1568f20 <_eramstage+0x468f20> | |
4a24: 43 42 46 53 bcla- 26,eq,4650 <memset+0xc> | |
4a28: 3a 20 4c 6f li r17,19567 | |
4a2c: 63 61 74 69 ori r1,r27,29801 | |
4a30: 6e 67 20 27 xoris r7,r19,8231 | |
4a34: 25 73 27 0a dozi r11,r19,9994 | |
4a38: 00 43 42 46 .long 0x434246 | |
4a3c: 53 3a 20 46 rlwimi r26,r25,4,1,3 | |
4a40: 6f 75 6e 64 xoris r21,r27,28260 | |
4a44: 20 40 20 6f subfic r2,r0,8303 | |
4a48: 66 66 73 65 oris r6,r19,29541 | |
4a4c: 74 20 25 7a andis. r0,r1,9594 | |
4a50: 78 20 73 69 rldic. r0,r1,14,45 | |
4a54: 7a 65 20 25 rldicr. r5,r19,4,32 | |
4a58: 7a 78 0a 00 rldicl r24,r19,1,8 | |
4a5c: 43 42 46 53 bcla- 26,eq,4650 <memset+0xc> | |
4a60: 3a 20 27 25 li r17,10021 | |
4a64: 73 27 20 6e andi. r7,r25,8302 | |
4a68: 6f 74 20 66 xoris r20,r27,8294 | |
4a6c: 6f 75 6e 64 xoris r21,r27,28260 | |
4a70: 2e 0a 00 00 cmpwi cr4,r10,0 | |
4a74: 00 00 00 00 .long 0x0 | |
0000000000004a78 <mem_rdev_ro_ops>: | |
4a78: 00 00 00 00 00 00 29 9c 00 00 00 00 00 00 29 b4 ......).......). | |
4a78: R_PPC64_ADDR64 .text+0x299c | |
4a80: R_PPC64_ADDR64 .text+0x29b4 | |
4a88: 00 00 00 00 00 00 29 c8 00 00 00 00 00 00 00 00 ......)......... | |
4a88: R_PPC64_ADDR64 .text+0x29c8 | |
... | |
4aa0: 0a 0a 63 6f 72 65 62 6f 6f 74 2d 25 73 25 73 20 ..coreboot-%s%s | |
4ab0: 25 73 20 62 6f 6f 74 62 6c 6f 63 6b 20 73 74 61 %s bootblock sta | |
4ac0: 72 74 69 6e 67 20 28 6c 6f 67 20 6c 65 76 65 6c rting (log level | |
4ad0: 3a 20 25 69 29 2e 2e 2e 0a 00 42 53 3a 20 62 6f : %i).....BS: bo | |
4ae0: 6f 74 62 6c 6f 63 6b 20 74 69 6d 65 73 20 28 65 otblock times (e | |
4af0: 78 65 63 20 2f 20 63 6f 6e 73 6f 6c 65 29 3a 20 xec / console): | |
4b00: 74 6f 74 61 6c 20 28 75 6e 6b 6e 6f 77 6e 29 20 total (unknown) | |
4b10: 2f 20 25 6c 64 20 6d 73 0a 00 30 31 32 33 34 35 / %ld ms..012345 | |
4b20: 36 37 38 39 61 62 63 64 65 66 00 30 31 32 33 34 6789abcdef.01234 | |
4b30: 35 36 37 38 39 41 42 43 44 45 46 00 3c 4e 55 4c 56789ABCDEF.<NUL | |
4b40: 4c 3e 00 43 4f 52 45 42 4f 4f 54 00 73 72 63 2f L>.COREBOOT.src/ | |
4b50: 6c 69 62 2f 63 62 66 73 2e 63 00 41 53 53 45 52 lib/cbfs.c.ASSER | |
4b60: 54 49 4f 4e 20 45 52 52 4f 52 3a 20 66 69 6c 65 TION ERROR: file | |
4b70: 20 27 25 73 27 2c 20 6c 69 6e 65 20 25 64 0a 00 '%s', line %d.. | |
4b80: 5f 5f 46 4d 41 50 5f 5f 00 4e 6f 20 46 4d 41 50 __FMAP__.No FMAP | |
4b90: 20 66 6f 75 6e 64 20 61 74 20 25 7a 78 20 6f 66 found at %zx of | |
4ba0: 66 73 65 74 2e 0a 00 46 4d 41 50 3a 20 61 72 65 fset...FMAP: are | |
4bb0: 61 20 25 73 20 66 6f 75 6e 64 20 40 20 25 78 20 a %s found @ %x | |
4bc0: 28 25 64 20 62 79 74 65 73 29 0a 00 46 4d 41 50 (%d bytes)..FMAP | |
4bd0: 3a 20 46 6f 75 6e 64 20 22 25 73 22 20 76 65 72 : Found "%s" ver | |
4be0: 73 69 6f 6e 20 25 64 2e 25 64 20 61 74 20 25 23 sion %d.%d at %# | |
4bf0: 78 2e 0a 00 46 4d 41 50 3a 20 62 61 73 65 20 3d x...FMAP: base = | |
4c00: 20 25 23 6c 6c 78 20 73 69 7a 65 20 3d 20 25 23 %#llx size = %# | |
4c10: 78 20 23 61 72 65 61 73 20 3d 20 25 64 0a 00 66 x #areas = %d..f | |
4c20: 61 6c 6c 62 61 63 6b 2f 72 6f 6d 73 74 61 67 65 allback/romstage | |
4c30: 00 43 6f 75 6c 64 6e 27 74 20 6c 6f 61 64 20 72 .Couldn't load r | |
4c40: 6f 6d 73 74 61 67 65 2e 0a 00 00 00 00 00 00 00 omstage......... | |
0000000000004c50 <coreboot_build>: | |
4c50: 54 75 65 20 4f 63 74 20 20 36 20 31 32 3a 32 36 Tue Oct 6 12:26 | |
4c60: 3a 35 31 20 55 54 43 20 32 30 32 30 00 00 00 00 :51 UTC 2020.... | |
0000000000004c70 <coreboot_extra_version>: | |
... | |
0000000000004c78 <coreboot_version>: | |
4c78: 34 2e 31 32 2d 33 31 34 39 2d 67 33 34 38 66 37 4.12-3149-g348f7 | |
4c88: 61 37 66 36 62 00 00 00 a7f6b... | |
Disassembly of section .sfpr: | |
0000000000004c90 <_savegpr0_14>: | |
4c90: f9 c1 ff 70 std r14,-144(r1) | |
0000000000004c94 <_savegpr0_15>: | |
4c94: f9 e1 ff 78 std r15,-136(r1) | |
0000000000004c98 <_savegpr0_16>: | |
4c98: fa 01 ff 80 std r16,-128(r1) | |
0000000000004c9c <_savegpr0_17>: | |
4c9c: fa 21 ff 88 std r17,-120(r1) | |
0000000000004ca0 <_savegpr0_18>: | |
4ca0: fa 41 ff 90 std r18,-112(r1) | |
0000000000004ca4 <_savegpr0_19>: | |
4ca4: fa 61 ff 98 std r19,-104(r1) | |
0000000000004ca8 <_savegpr0_20>: | |
4ca8: fa 81 ff a0 std r20,-96(r1) | |
0000000000004cac <_savegpr0_21>: | |
4cac: fa a1 ff a8 std r21,-88(r1) | |
0000000000004cb0 <_savegpr0_22>: | |
4cb0: fa c1 ff b0 std r22,-80(r1) | |
0000000000004cb4 <_savegpr0_23>: | |
4cb4: fa e1 ff b8 std r23,-72(r1) | |
0000000000004cb8 <_savegpr0_24>: | |
4cb8: fb 01 ff c0 std r24,-64(r1) | |
0000000000004cbc <_savegpr0_25>: | |
4cbc: fb 21 ff c8 std r25,-56(r1) | |
0000000000004cc0 <_savegpr0_26>: | |
4cc0: fb 41 ff d0 std r26,-48(r1) | |
0000000000004cc4 <_savegpr0_27>: | |
4cc4: fb 61 ff d8 std r27,-40(r1) | |
0000000000004cc8 <_savegpr0_28>: | |
4cc8: fb 81 ff e0 std r28,-32(r1) | |
0000000000004ccc <_savegpr0_29>: | |
4ccc: fb a1 ff e8 std r29,-24(r1) | |
0000000000004cd0 <_savegpr0_30>: | |
4cd0: fb c1 ff f0 std r30,-16(r1) | |
0000000000004cd4 <_savegpr0_31>: | |
4cd4: fb e1 ff f8 std r31,-8(r1) | |
4cd8: f8 01 00 10 std r0,16(r1) | |
4cdc: 4e 80 00 20 blr | |
0000000000004ce0 <_restgpr0_14>: | |
4ce0: e9 c1 ff 70 ld r14,-144(r1) | |
0000000000004ce4 <_restgpr0_15>: | |
4ce4: e9 e1 ff 78 ld r15,-136(r1) | |
0000000000004ce8 <_restgpr0_16>: | |
4ce8: ea 01 ff 80 ld r16,-128(r1) | |
0000000000004cec <_restgpr0_17>: | |
4cec: ea 21 ff 88 ld r17,-120(r1) | |
0000000000004cf0 <_restgpr0_18>: | |
4cf0: ea 41 ff 90 ld r18,-112(r1) | |
0000000000004cf4 <_restgpr0_19>: | |
4cf4: ea 61 ff 98 ld r19,-104(r1) | |
0000000000004cf8 <_restgpr0_20>: | |
4cf8: ea 81 ff a0 ld r20,-96(r1) | |
0000000000004cfc <_restgpr0_21>: | |
4cfc: ea a1 ff a8 ld r21,-88(r1) | |
0000000000004d00 <_restgpr0_22>: | |
4d00: ea c1 ff b0 ld r22,-80(r1) | |
0000000000004d04 <_restgpr0_23>: | |
4d04: ea e1 ff b8 ld r23,-72(r1) | |
0000000000004d08 <_restgpr0_24>: | |
4d08: eb 01 ff c0 ld r24,-64(r1) | |
0000000000004d0c <_restgpr0_25>: | |
4d0c: eb 21 ff c8 ld r25,-56(r1) | |
0000000000004d10 <_restgpr0_26>: | |
4d10: eb 41 ff d0 ld r26,-48(r1) | |
0000000000004d14 <_restgpr0_27>: | |
4d14: eb 61 ff d8 ld r27,-40(r1) | |
0000000000004d18 <_restgpr0_28>: | |
4d18: eb 81 ff e0 ld r28,-32(r1) | |
0000000000004d1c <_restgpr0_29>: | |
4d1c: e8 01 00 10 ld r0,16(r1) | |
4d20: eb a1 ff e8 ld r29,-24(r1) | |
4d24: 7c 08 03 a6 mtlr r0 | |
4d28: eb c1 ff f0 ld r30,-16(r1) | |
4d2c: eb e1 ff f8 ld r31,-8(r1) | |
4d30: 4e 80 00 20 blr | |
0000000000004d34 <_restgpr0_30>: | |
4d34: eb c1 ff f0 ld r30,-16(r1) | |
0000000000004d38 <_restgpr0_31>: | |
4d38: e8 01 00 10 ld r0,16(r1) | |
4d3c: eb e1 ff f8 ld r31,-8(r1) | |
4d40: 7c 08 03 a6 mtlr r0 | |
4d44: 4e 80 00 20 blr | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment