libsysprof: add mmap variant for elfparser

This commit is contained in:
Christian Hergert
2023-05-19 10:35:31 -07:00
parent 322a6253ba
commit 8e101624bc
2 changed files with 33 additions and 0 deletions

View File

@ -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)

View File

@ -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);