Changeset View
Changeset View
Standalone View
Standalone View
sys/arm64/arm64/minidump_machdep.c
Show First 20 Lines • Show All 297 Lines • ▼ Show 20 Lines | if ((l1e & ATTR_DESCR_MASK) == L1_BLOCK) { | ||||
/* | /* | ||||
* Handle a 1GB block mapping: write out 512 fake L2 | * Handle a 1GB block mapping: write out 512 fake L2 | ||||
* pages. | * pages. | ||||
*/ | */ | ||||
pa = (l1e & ~ATTR_MASK) | (va & L1_OFFSET); | pa = (l1e & ~ATTR_MASK) | (va & L1_OFFSET); | ||||
for (i = 0; i < Ln_ENTRIES; i++) { | for (i = 0; i < Ln_ENTRIES; i++) { | ||||
for (j = 0; j < Ln_ENTRIES; j++) { | for (j = 0; j < Ln_ENTRIES; j++) { | ||||
tmpbuffer[j] = pa + i * L2_SIZE + | tmpbuffer[j] = (pa + i * L2_SIZE + | ||||
j * PAGE_SIZE | ATTR_DEFAULT | | j * PAGE_SIZE) | ATTR_DEFAULT | | ||||
L3_PAGE; | L3_PAGE; | ||||
} | } | ||||
error = blk_write(di, (char *)&tmpbuffer, 0, | error = blk_write(di, (char *)&tmpbuffer, 0, | ||||
PAGE_SIZE); | PAGE_SIZE); | ||||
if (error) | if (error) | ||||
goto fail; | goto fail; | ||||
} | } | ||||
/* flush, in case we reuse tmpbuffer in the same block*/ | /* flush, in case we reuse tmpbuffer in the same block*/ | ||||
error = blk_flush(di); | error = blk_flush(di); | ||||
if (error) | if (error) | ||||
goto fail; | goto fail; | ||||
bzero(&tmpbuffer, sizeof(tmpbuffer)); | bzero(&tmpbuffer, sizeof(tmpbuffer)); | ||||
va += L1_SIZE - L2_SIZE; | va += L1_SIZE - L2_SIZE; | ||||
} else if ((l2e & ATTR_DESCR_MASK) == L2_BLOCK) { | } else if ((l2e & ATTR_DESCR_MASK) == L2_BLOCK) { | ||||
pa = (l2e & ~ATTR_MASK) | (va & L2_OFFSET); | pa = (l2e & ~ATTR_MASK) | (va & L2_OFFSET); | ||||
/* Generate fake l3 entries based upon the l1 entry */ | /* Generate fake l3 entries based upon the l1 entry */ | ||||
for (i = 0; i < Ln_ENTRIES; i++) { | for (i = 0; i < Ln_ENTRIES; i++) { | ||||
tmpbuffer[i] = pa + (i * PAGE_SIZE) | | tmpbuffer[i] = (pa + i * PAGE_SIZE) | | ||||
ATTR_DEFAULT | L3_PAGE; | ATTR_DEFAULT | L3_PAGE; | ||||
} | } | ||||
error = blk_write(di, (char *)&tmpbuffer, 0, PAGE_SIZE); | error = blk_write(di, (char *)&tmpbuffer, 0, PAGE_SIZE); | ||||
if (error) | if (error) | ||||
goto fail; | goto fail; | ||||
/* flush, in case we reuse fakepd in the same block */ | /* flush, in case we reuse fakepd in the same block */ | ||||
error = blk_flush(di); | error = blk_flush(di); | ||||
if (error) | if (error) | ||||
▲ Show 20 Lines • Show All 60 Lines • Show Last 20 Lines |