46 lines
1.1 KiB
C
46 lines
1.1 KiB
C
#ifndef MEMORY_H_
|
|
#define MEMORY_H_
|
|
|
|
#include "array/array.h"
|
|
#include "types.h"
|
|
|
|
#include <assert.h>
|
|
|
|
typedef enum {
|
|
HI_MEMORY_READ = 1 << 0,
|
|
HI_MEMORY_WRITE = 1 << 1,
|
|
HI_MEMORY_EXECUTE = 1 << 2,
|
|
HI_MEMORY_SHARED = 1 << 3,
|
|
HI_MEMORY_PRIVATE = 1 << 4
|
|
} MemoryPermissions;
|
|
|
|
typedef struct {
|
|
uptr region_start;
|
|
uptr region_end;
|
|
} MemoryRegionSpan;
|
|
|
|
typedef struct {
|
|
uptr region_start;
|
|
uptr region_end;
|
|
ptrdiff offset;
|
|
u64 inode;
|
|
const char *pathname;
|
|
u32 permission; // enum MemoryPermissions
|
|
} MemoryRegion;
|
|
|
|
sc_array_def(MemoryRegion, memreg);
|
|
|
|
/* A pointer that can be used to place the memory regions into. Clears regions
|
|
* before use, but uses the same buffer. */
|
|
HiloadResult read_memory_maps_self(struct sc_array_memreg *regions);
|
|
|
|
/* Return index the pointer is found in */
|
|
HiloadResult memory_find_pointer(uptr ptr,
|
|
struct sc_array_memreg *const regions,
|
|
size_t *index);
|
|
|
|
MemoryRegionSpan memory_get_module_span(const struct sc_array_memreg *const regions,
|
|
const char module_name[static 1]);
|
|
|
|
#endif // MEMORY_H_
|