From 9b973e64513694458e53b3682497c2cea212316f Mon Sep 17 00:00:00 2001 From: Kai Tietz Date: Sat, 27 Jun 2009 17:50:20 +0000 Subject: [PATCH] [multiple changes] 2009-06-27 Kai Tietz Merged from trunk rev/148061 2009-06-01 Jakub Jelinek PR other/40024 * emutls.c (__emutls_get_address): Change arr->size to mean number of allocated arr->data entries instead of # of slots + 1. From-SVN: r149015 --- gcc/ChangeLog | 8 ++++++++ gcc/emutls.c | 10 +++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 036ca97ebce6..2af5b4801242 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2009-06-27 Kai Tietz + + Merged from trunk rev/148061 + 2009-06-01 Jakub Jelinek + PR other/40024 + * emutls.c (__emutls_get_address): Change arr->size to mean number + of allocated arr->data entries instead of # of slots + 1. + 2009-06-25 Richard Guenther * c-parser.c (c_parser_postfix_expression): Fix merge glitch. diff --git a/gcc/emutls.c b/gcc/emutls.c index adb682b2a1fa..33c07ebebaff 100644 --- a/gcc/emutls.c +++ b/gcc/emutls.c @@ -157,23 +157,23 @@ __emutls_get_address (struct __emutls_object *obj) if (__builtin_expect (arr == NULL, 0)) { pointer size = offset + 32; - arr = calloc (size, sizeof (void *)); + arr = calloc (size + 1, sizeof (void *)); if (arr == NULL) abort (); arr->size = size; __gthread_setspecific (emutls_key, (void *) arr); } - else if (__builtin_expect (offset >= arr->size, 0)) + else if (__builtin_expect (offset > arr->size, 0)) { pointer orig_size = arr->size; pointer size = orig_size * 2; - if (offset >= size) + if (offset > size) size = offset + 32; - arr = realloc (arr, size * sizeof (void *)); + arr = realloc (arr, (size + 1) * sizeof (void *)); if (arr == NULL) abort (); arr->size = size; - memset (arr->data + orig_size - 1, 0, + memset (arr->data + orig_size, 0, (size - orig_size) * sizeof (void *)); __gthread_setspecific (emutls_key, (void *) arr); } -- 2.47.2