mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-09 22:50:54 +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;
|
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 *
|
ElfParser *
|
||||||
elf_parser_new (const char *filename,
|
elf_parser_new (const char *filename,
|
||||||
GError **error)
|
GError **error)
|
||||||
|
|||||||
@ -27,6 +27,8 @@ typedef struct ElfParser ElfParser;
|
|||||||
|
|
||||||
ElfParser *elf_parser_new_from_data (const guchar *data,
|
ElfParser *elf_parser_new_from_data (const guchar *data,
|
||||||
gsize length);
|
gsize length);
|
||||||
|
ElfParser *elf_parser_new_from_mmap (GMappedFile *mapped_file,
|
||||||
|
GError **err);
|
||||||
ElfParser *elf_parser_new (const char *filename,
|
ElfParser *elf_parser_new (const char *filename,
|
||||||
GError **err);
|
GError **err);
|
||||||
void elf_parser_free (ElfParser *parser);
|
void elf_parser_free (ElfParser *parser);
|
||||||
|
|||||||
Reference in New Issue
Block a user