mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof: add mmap variant for elfparser
This commit is contained in:
@ -297,6 +297,37 @@ open_mapped_file (const char *filename,
|
||||
return file;
|
||||
}
|
||||
|
||||
ElfParser *
|
||||
elf_parser_new_from_mmap (GMappedFile *file,
|
||||
GError **error)
|
||||
{
|
||||
const guchar *data;
|
||||
gsize length;
|
||||
ElfParser *parser;
|
||||
|
||||
if (file == NULL)
|
||||
return NULL;
|
||||
|
||||
data = (guchar *)g_mapped_file_get_contents (file);
|
||||
length = g_mapped_file_get_length (file);
|
||||
parser = elf_parser_new_from_data (data, length);
|
||||
|
||||
if (!parser)
|
||||
{
|
||||
g_set_error (error,
|
||||
G_FILE_ERROR,
|
||||
G_FILE_ERROR_FAILED,
|
||||
"Failed to load ELF from mmap region");
|
||||
g_mapped_file_unref (file);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
parser->filename = NULL;
|
||||
parser->file = file;
|
||||
|
||||
return parser;
|
||||
}
|
||||
|
||||
ElfParser *
|
||||
elf_parser_new (const char *filename,
|
||||
GError **error)
|
||||
|
||||
@ -27,6 +27,8 @@ typedef struct ElfParser ElfParser;
|
||||
|
||||
ElfParser *elf_parser_new_from_data (const guchar *data,
|
||||
gsize length);
|
||||
ElfParser *elf_parser_new_from_mmap (GMappedFile *mapped_file,
|
||||
GError **err);
|
||||
ElfParser *elf_parser_new (const char *filename,
|
||||
GError **err);
|
||||
void elf_parser_free (ElfParser *parser);
|
||||
|
||||
Reference in New Issue
Block a user