51 lines
946 B
C
51 lines
946 B
C
/*
|
|
* Dump memory
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <sys/cpu.h>
|
|
#include "sysdump.h"
|
|
|
|
static char *lowmem;
|
|
static size_t lowmem_len;
|
|
|
|
void *zero_addr; /* Hack to keep gcc from complaining */
|
|
|
|
void snapshot_lowmem(void)
|
|
{
|
|
extern void _start(void);
|
|
|
|
lowmem_len = (size_t)_start;
|
|
lowmem = malloc(lowmem_len);
|
|
if (lowmem) {
|
|
printf("Snapshotting lowmem... ");
|
|
cli();
|
|
memcpy(lowmem, zero_addr, lowmem_len);
|
|
sti();
|
|
printf("ok\n");
|
|
}
|
|
}
|
|
|
|
static void dump_memory_range(struct upload_backend *be, const void *where,
|
|
const void *addr, size_t len)
|
|
{
|
|
char filename[32];
|
|
|
|
sprintf(filename, "memory/%08zx", (size_t)addr);
|
|
cpio_writefile(be, filename, where, len);
|
|
}
|
|
|
|
void dump_memory(struct upload_backend *be)
|
|
{
|
|
printf("Dumping memory... ");
|
|
|
|
cpio_mkdir(be, "memory");
|
|
|
|
if (lowmem)
|
|
dump_memory_range(be, lowmem, zero_addr, lowmem_len);
|
|
|
|
printf("done.\n");
|
|
}
|