diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | malloc/memusage.c | 4 | ||||
-rw-r--r-- | malloc/memusagestat.c | 184 |
3 files changed, 59 insertions, 133 deletions
diff --git a/ChangeLog b/ChangeLog index bfae5f6ae9..0f4bcc6ff5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2004-08-09 Ulrich Drepper <drepper@redhat.com> + * malloc/memusage.c (me): Use creat64, not creat. + * malloc/memusagestat.c: Fix handling of very large sizes. [BZ #285] + Patch by Guy Maor <guymaor@yahoo.com>. + * elf/ldconfig.c (options): Mark parameter option names as translatable. [BZ #253] Patch by Jakub Bogusz <qboosh@pld-linux.org>. diff --git a/malloc/memusage.c b/malloc/memusage.c index d5b73f5921..b552ec37b0 100644 --- a/malloc/memusage.c +++ b/malloc/memusage.c @@ -1,5 +1,5 @@ /* Profile heap and stack memory usage of running program. - Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1998-2002, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -233,7 +233,7 @@ me (void) if (outname != NULL && outname[0] != '\0' && (access (outname, R_OK | W_OK) == 0 || errno == ENOENT)) { - fd = creat (outname, 0666); + fd = creat64 (outname, 0666); if (fd == -1) /* Don't do anything in future calls if we cannot write to diff --git a/malloc/memusagestat.c b/malloc/memusagestat.c index fa2d219c36..b1cad9b251 100644 --- a/malloc/memusagestat.c +++ b/malloc/memusagestat.c @@ -18,6 +18,8 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#define _FILE_OFFSET_BITS 64 + #include <argp.h> #include <assert.h> #include <errno.h> @@ -128,6 +130,8 @@ main (int argc, char *argv[]) uint64_t start_time; uint64_t end_time; uint64_t total_time; + const char *heap_format, *stack_format; + int heap_scale, stack_scale, line; outname = NULL; xsize = XSIZE; @@ -241,13 +245,46 @@ main (int argc, char *argv[]) gdImageRectangle (im_out, 40, 20, xsize - 40, ysize - 20, blue); + if (maxsize_heap < 1024) + { + heap_format = "%Zu"; + heap_scale = 1; + } + else if (maxsize_heap < 1024 * 1024 * 100) + { + heap_format = "%Zuk"; + heap_scale = 1024; + } + else + { + heap_format = "%ZuM"; + heap_scale = 1024 * 1024; + } + + if (maxsize_stack < 1024) + { + stack_format = "%Zu"; + stack_scale = 1; + } + else if (maxsize_stack < 1024 * 1024 * 100) + { + stack_format = "%Zuk"; + stack_scale = 1024; + } + else + { + stack_format = "%ZuM"; + stack_scale = 1024 * 1024; + } + gdImageString (im_out, gdFontSmall, 38, ysize - 14, (unsigned char *) "0", blue); + snprintf(buf, sizeof (buf), heap_format, 0); gdImageString (im_out, gdFontSmall, maxsize_heap < 1024 ? 32 : 26, - ysize - 26, - (unsigned char *) (maxsize_heap < 1024 ? "0" : "0k"), red); + ysize - 26, buf, red); + snprintf(buf, sizeof (buf), stack_format, 0); gdImageString (im_out, gdFontSmall, xsize - 37, ysize - 26, - (unsigned char *) (maxsize_stack < 1024 ? "0" : "0k"), green); + buf, green); if (string != NULL) gdImageString (im_out, gdFontLarge, (xsize - strlen (string) * 8) / 2, @@ -263,148 +300,33 @@ main (int argc, char *argv[]) gdImageStringUp (im_out, gdFontSmall, xsize - 27, ysize / 2 - 10, (unsigned char *) "stack", green); - if (maxsize_heap < 1024) - { - snprintf (buf, sizeof (buf), "%Zu", maxsize_heap); - gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6, 14, buf, red); - } - else - { - snprintf (buf, sizeof (buf), "%Zuk", maxsize_heap / 1024); - gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6, 14, buf, red); - } - if (maxsize_stack < 1024) - { - snprintf (buf, sizeof (buf), "%Zu", maxsize_stack); - gdImageString (im_out, gdFontSmall, xsize - 37, 14, buf, green); - } - else - { - snprintf (buf, sizeof (buf), "%Zuk", maxsize_stack / 1024); - gdImageString (im_out, gdFontSmall, xsize - 37, 14, buf, green); - } + snprintf (buf, sizeof (buf), heap_format, maxsize_heap / heap_scale); + gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6, 14, buf, red); + snprintf (buf, sizeof (buf), stack_format, maxsize_stack / stack_scale); + gdImageString (im_out, gdFontSmall, xsize - 37, 14, buf, green); - - if (maxsize_heap < 1024) - { - cnt = ((ysize - 40) * (maxsize_heap / 4)) / maxsize_heap; - gdImageDashedLine (im_out, 40, ysize - 20 - cnt, xsize - 40, - ysize - 20 - cnt, red); - snprintf (buf, sizeof (buf), "%Zu", maxsize_heap / 4); - gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6, - ysize - 26 - cnt, buf, red); - } - else + for (line = 1; line <= 3; ++line) { - cnt = ((ysize - 40) * (maxsize_heap / 4096)) / (maxsize_heap / 1024); + cnt = ((ysize - 40) * (maxsize_heap / 4 * line / heap_scale)) / + (maxsize_heap / heap_scale); gdImageDashedLine (im_out, 40, ysize - 20 - cnt, xsize - 40, ysize - 20 - cnt, red); - snprintf (buf, sizeof (buf), "%Zuk", maxsize_heap / 4096); + snprintf (buf, sizeof (buf), heap_format, maxsize_heap / 4 * line / + heap_scale); gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6, ysize - 26 - cnt, buf, red); - } - if (maxsize_stack < 1024) - { - cnt2 = ((ysize - 40) * (maxsize_stack / 4)) / maxsize_stack; - if (cnt != cnt2) - gdImageDashedLine (im_out, 40, ysize - 20 - cnt2, xsize - 40, - ysize - 20 - cnt2, green); - snprintf (buf, sizeof (buf), "%Zu", maxsize_stack / 4); - gdImageString (im_out, gdFontSmall, xsize - 37, ysize - 26 - cnt2, - buf, green); - } - else - { - cnt2 = ((ysize - 40) * (maxsize_stack / 4096)) / (maxsize_stack / 1024); - if (cnt != cnt2) - gdImageDashedLine (im_out, 40, ysize - 20 - cnt2, xsize - 40, - ysize - 20 - cnt2, green); - snprintf (buf, sizeof (buf), "%Zuk", maxsize_stack / 4096); - gdImageString (im_out, gdFontSmall, xsize - 37, ysize - 26 - cnt2, - buf, green); - } - if (maxsize_heap < 1024) - { - cnt = ((ysize - 40) * (maxsize_heap / 2)) / maxsize_heap; - gdImageDashedLine (im_out, 40, ysize - 20 - cnt, xsize - 40, - ysize - 20 - cnt, red); - snprintf (buf, sizeof (buf), "%Zu", maxsize_heap / 2); - gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6, - ysize - 26 - cnt, buf, red); - } - else - { - cnt = ((ysize - 40) * (maxsize_heap / 2048)) / (maxsize_heap / 1024); - gdImageDashedLine (im_out, 40, ysize - 20 - cnt, xsize - 40, - ysize - 20 - cnt, red); - snprintf (buf, sizeof (buf), "%Zuk", maxsize_heap / 2048); - gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6, - ysize - 26 - cnt, buf, red); - } - if (maxsize_stack < 1024) - { - cnt2 = ((ysize - 40) * (maxsize_stack / 2)) / maxsize_stack; - if (cnt != cnt2) - gdImageDashedLine (im_out, 40, ysize - 20 - cnt2, xsize - 40, - ysize - 20 - cnt2, green); - snprintf (buf, sizeof (buf), "%Zu", maxsize_stack / 2); - gdImageString (im_out, gdFontSmall, xsize - 37, ysize - 26 - cnt2, - buf, green); - } - else - { - cnt2 = ((ysize - 40) * (maxsize_stack / 2048)) / (maxsize_stack / 1024); - if (cnt != cnt2) - gdImageDashedLine (im_out, 40, ysize - 20 - cnt2, xsize - 40, - ysize - 20 - cnt2, green); - snprintf (buf, sizeof (buf), "%Zuk", maxsize_stack / 2048); - gdImageString (im_out, gdFontSmall, xsize - 37, ysize - 26 - cnt2, - buf, green); - } - - if (maxsize_heap < 1024) - { - cnt = ((ysize - 40) * ((3 * maxsize_heap) / 4)) / maxsize_heap; - gdImageDashedLine (im_out, 40, ysize - 20 - cnt, xsize - 40, - ysize - 20 - cnt, red); - snprintf (buf, sizeof (buf), "%Zu", (3 * maxsize_heap) / 4); - gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6, - ysize - 26 - cnt, buf, red); - } - else - { - cnt = ((ysize - 40) * ((3 * maxsize_heap) / 4096)) / (maxsize_heap - / 1024); - gdImageDashedLine (im_out, 40, ysize - 20 - cnt, xsize - 40, - ysize - 20 - cnt, red); - snprintf (buf, sizeof (buf), "%Zuk", (3 * maxsize_heap) / 4096); - gdImageString (im_out, gdFontSmall, 39 - strlen (buf) * 6, - ysize - 26 - cnt, buf, red); - } - if (maxsize_stack < 1024) - { - cnt2 = ((ysize - 40) * ((3 * maxsize_stack) / 4)) / maxsize_stack; - if (cnt != cnt2) - gdImageDashedLine (im_out, 40, ysize - 20 - cnt2, xsize - 40, - ysize - 20 - cnt2, green); - snprintf (buf, sizeof (buf), "%Zu", (3 * maxsize_stack) / 4); - gdImageString (im_out, gdFontSmall, xsize - 37, ysize - 26 - cnt2, - buf, green); - } - else - { - cnt2 = (((ysize - 40) * ((3 * maxsize_stack) / 4096)) - / (maxsize_stack / 1024)); + cnt2 = ((ysize - 40) * (maxsize_stack / 4 * line / stack_scale)) / + (maxsize_stack / stack_scale); if (cnt != cnt2) gdImageDashedLine (im_out, 40, ysize - 20 - cnt2, xsize - 40, ysize - 20 - cnt2, green); - snprintf (buf, sizeof (buf), "%Zuk", (3 * maxsize_stack) / 4096); + snprintf (buf, sizeof (buf), stack_format, maxsize_stack / 4 * line / + stack_scale); gdImageString (im_out, gdFontSmall, xsize - 37, ysize - 26 - cnt2, buf, green); } - snprintf (buf, sizeof (buf), "%llu", (unsigned long long) total); gdImageString (im_out, gdFontSmall, xsize - 50, ysize - 14, buf, blue); |