From: Ivan Maidanski Date: Mon, 1 Aug 2016 19:36:57 +0000 (+0300) Subject: Do not report multiple load-seg-overflow warnings per one dl-iterate X-Git-Tag: gc7_6_0~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=33fc2f8f30df3e94c2fc6df7e36958e5f3f832f5;p=platform%2Fupstream%2Flibgc.git Do not report multiple load-seg-overflow warnings per one dl-iterate (fix commit 017bd0a) * dyn_load.c [HAVE_DL_ITERATE_PHDR && PT_GNU_RELRO] (load_segs_overflow): New static variable. * dyn_load.c [HAVE_DL_ITERATE_PHDR && PT_GNU_RELRO] (GC_register_dynlib_callback): Do not call WARN if load_segs_overflow; set load_segs_overflow to true after calling WARN. * dyn_load.c [HAVE_DL_ITERATE_PHDR && PT_GNU_RELRO] (GC_register_dynamic_libraries_dl_iterate_phdr): Reset load_segs_overflow. --- diff --git a/dyn_load.c b/dyn_load.c index 7dddbb0..614f1d1 100644 --- a/dyn_load.c +++ b/dyn_load.c @@ -464,6 +464,7 @@ GC_INNER GC_bool GC_register_main_static_data(void) } load_segs[MAX_LOAD_SEGS]; static int n_load_segs; + static GC_bool load_segs_overflow; # endif /* PT_GNU_RELRO */ STATIC int GC_register_dynlib_callback(struct dl_phdr_info * info, @@ -498,8 +499,11 @@ STATIC int GC_register_dynlib_callback(struct dl_phdr_info * info, start = (ptr_t)((word)start & ~(sizeof(word) - 1)); # endif if (n_load_segs >= MAX_LOAD_SEGS) { - WARN("Too many PT_LOAD segments;" - " registering as roots directly...\n", 0); + if (!load_segs_overflow) { + WARN("Too many PT_LOAD segments;" + " registering as roots directly...\n", 0); + load_segs_overflow = TRUE; + } GC_add_roots_inner(start, end, TRUE); } else { load_segs[n_load_segs].start = start; @@ -577,6 +581,7 @@ STATIC GC_bool GC_register_dynamic_libraries_dl_iterate_phdr(void) { static GC_bool excluded_segs = FALSE; n_load_segs = 0; + load_segs_overflow = FALSE; if (!EXPECT(excluded_segs, TRUE)) { GC_exclude_static_roots_inner((ptr_t)load_segs, (ptr_t)load_segs + sizeof(load_segs));