summaryrefslogtreecommitdiff
path: root/src/format/format.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2016-05-19 21:21:30 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2016-05-19 21:21:30 (GMT)
commitf828d126a74facac145531822c6ea9c8259b50e0 (patch)
tree521bfa44de551f30934ee321339a7a87d12a3243 /src/format/format.c
parente92c777c91612c8508d263645480c6c3889b679d (diff)
Loaded the ELF internal symbols using all the available CPUs.
Diffstat (limited to 'src/format/format.c')
-rw-r--r--src/format/format.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/format/format.c b/src/format/format.c
index 1ee3001..ea67d2d 100644
--- a/src/format/format.c
+++ b/src/format/format.c
@@ -97,6 +97,8 @@ static void g_binary_format_class_init(GBinFormatClass *klass)
static void g_binary_format_init(GBinFormat *format)
{
+ g_rw_lock_init(&format->pt_lock);
+
g_rw_lock_init(&format->syms_lock);
}
@@ -212,6 +214,8 @@ SourceEndian g_binary_format_get_endianness(const GBinFormat *format)
void g_binary_format_register_code_point(GBinFormat *format, virt_t pt, bool entry)
{
+ g_rw_lock_writer_lock(&format->pt_lock);
+
if (entry)
{
format->entry_points = (virt_t *)realloc(format->entry_points,
@@ -235,6 +239,8 @@ void g_binary_format_register_code_point(GBinFormat *format, virt_t pt, bool ent
}
+ g_rw_lock_writer_unlock(&format->pt_lock);
+
}
@@ -251,16 +257,20 @@ void g_binary_format_register_code_point(GBinFormat *format, virt_t pt, bool ent
* *
******************************************************************************/
-void g_binary_format_setup_disassembling_context(const GBinFormat *format, GProcContext *ctx)
+void g_binary_format_setup_disassembling_context(GBinFormat *format, GProcContext *ctx)
{
size_t i; /* Boucle de parcours */
+ g_rw_lock_reader_lock(&format->pt_lock);
+
for (i = 0; i < format->ep_count; i++)
g_proc_context_push_drop_point(ctx, 0, format->entry_points[i]);
for (i = 0; i < format->xp_count; i++)
g_proc_context_push_drop_point(ctx, 0, format->extra_points[i]);
+ g_rw_lock_reader_unlock(&format->pt_lock);
+
}