1 /*
2 * Dump memory
3 */
4
5 #include <stdio.h>
6 #include <string.h>
7 #include <stdlib.h>
8 #include <sys/cpu.h>
9 #include "sysdump.h"
10
11 static char *lowmem;
12 static size_t lowmem_len;
13
14 void *zero_addr; /* Hack to keep gcc from complaining */
15
snapshot_lowmem(void)16 void snapshot_lowmem(void)
17 {
18 extern void _start(void);
19
20 lowmem_len = (size_t)_start;
21 lowmem = malloc(lowmem_len);
22 if (lowmem) {
23 printf("Snapshotting lowmem... ");
24 cli();
25 memcpy(lowmem, zero_addr, lowmem_len);
26 sti();
27 printf("ok\n");
28 }
29 }
30
dump_memory_range(struct upload_backend * be,const void * where,const void * addr,size_t len)31 static void dump_memory_range(struct upload_backend *be, const void *where,
32 const void *addr, size_t len)
33 {
34 char filename[32];
35
36 sprintf(filename, "memory/%08zx", (size_t)addr);
37 cpio_writefile(be, filename, where, len);
38 }
39
dump_memory(struct upload_backend * be)40 void dump_memory(struct upload_backend *be)
41 {
42 printf("Dumping memory... ");
43
44 cpio_mkdir(be, "memory");
45
46 if (lowmem)
47 dump_memory_range(be, lowmem, zero_addr, lowmem_len);
48
49 printf("done.\n");
50 }
51