Skip to content

Commit

Permalink
[gc] new uintval_fmt for size_t printf
Browse files Browse the repository at this point in the history
memsize is unsigned for >2GB, and we need to print it properly.
otherwise it will print a negative number >4GB in i386
  • Loading branch information
Reini Urban committed Nov 8, 2014
1 parent 08bb58b commit b20ff2b
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 16 deletions.
6 changes: 4 additions & 2 deletions config/auto/format.pm
@@ -1,4 +1,4 @@
# Copyright (C) 2001-2003, Parrot Foundation.
# Copyright (C) 2001-2003,2014, Parrot Foundation.

=head1 NAME
Expand Down Expand Up @@ -32,7 +32,6 @@ sub runstep {
my ( $self, $conf ) = @_;

_set_intvalfmt($conf);

_set_floatvalfmt_nvsize($conf);

return 1;
Expand All @@ -55,7 +54,10 @@ sub _set_intvalfmt {
else {
die qq{Configure.pl: Can't find a printf-style format specifier for type '$iv'\n};
}
my $uvformat = $ivformat;
$uvformat =~ s/d$/u/;
$conf->data->set( intvalfmt => $ivformat );
$conf->data->set( uintvalfmt => $uvformat );
}

sub _set_floatvalfmt_nvsize {
Expand Down
3 changes: 2 additions & 1 deletion config/gen/config_h/config_h.in
Expand Up @@ -149,7 +149,8 @@ typedef void DPOINTER;
#define PARROT_HAS_ICU @has_icu@

/* Int and float formats. */
#define INTVAL_FMT "@intvalfmt@"
#define UINTVAL_FMT "@uintvalfmt@"
#define INTVAL_FMT "@intvalfmt@"
#define FLOATVAL_FMT "@floatvalfmt@"

#include "parrot/has_header.h"
Expand Down
12 changes: 6 additions & 6 deletions src/platform/darwin/sysmem.c
Expand Up @@ -78,27 +78,27 @@ Parrot_sysmem_amount(PARROT_INTERP)
#ifndef NDEBUG
if (Interp_debug_TEST(interp, PARROT_MEM_STAT_DEBUG_FLAG)) {
ori_memsize = memsize;
fprintf(stderr, "Free Memory: %ld\n", memsize);
fprintf(stderr, "Free Memory: "UINTVAL_FMT"\n", memsize);
}
#endif

#if defined(PARROT_HAS_HEADER_SYSRESOURCE)
if (getrlimit(RLIMIT_DATA, &rlim) == 0) {
if ((rlim.rlim_max != RLIM_INFINITY) && (rlim.rlim_max < memsize))
if ((rlim.rlim_max != RLIM_INFINITY) && (rlim.rlim_max < memsize))
memsize = rlim.rlim_max;
else if ((rlim.rlim_cur != RLIM_INFINITY) && (rlim.rlim_cur < memsize))
else if ((rlim.rlim_cur != RLIM_INFINITY) && (rlim.rlim_cur < memsize))
memsize = rlim.rlim_cur;
}
if (getrlimit(RLIMIT_RSS, &rlim) == 0) {
if ((rlim.rlim_max != RLIM_INFINITY) && (rlim.rlim_max < memsize))
if ((rlim.rlim_max != RLIM_INFINITY) && (rlim.rlim_max < memsize))
memsize = rlim.rlim_max;
else if ((rlim.rlim_cur != RLIM_INFINITY) && (rlim.rlim_cur < memsize))
else if ((rlim.rlim_cur != RLIM_INFINITY) && (rlim.rlim_cur < memsize))
memsize = rlim.rlim_cur;
}
# ifndef NDEBUG
if (Interp_debug_TEST(interp, PARROT_MEM_STAT_DEBUG_FLAG)
&& ori_memsize != memsize)
fprintf(stderr, "Memory via rlimit restricted to: %ld\n", memsize);
fprintf(stderr, "Memory via rlimit restricted to: "UINTVAL_FMT"\n", memsize);
# endif
#endif

Expand Down
20 changes: 13 additions & 7 deletions src/platform/generic/sysmem.c
Expand Up @@ -77,6 +77,12 @@ Parrot_sysmem_amount(PARROT_INTERP)
* doesn't probe for that yet.
*/
memsize = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGESIZE);
# ifndef NDEBUG
if (Interp_debug_TEST(interp, PARROT_MEM_STAT_DEBUG_FLAG)) {
ori_memsize = memsize;
fprintf(stderr, "Free Memory: "UINTVAL_FMT"\n", memsize);
}
# endif

#elif defined(PARROT_HAS_HEADER_SYSSYSCTL) && defined(CTL_HW) && \
(defined(HW_MEMSIZE) || defined(HW_PHYSMEM))
Expand Down Expand Up @@ -115,7 +121,7 @@ Parrot_sysmem_amount(PARROT_INTERP)
# ifndef NDEBUG
if (Interp_debug_TEST(interp, PARROT_MEM_STAT_DEBUG_FLAG)) {
ori_memsize = memsize;
fprintf(stderr, "Free Memory: %ld\n", memsize);
fprintf(stderr, "Free Memory: "UINTVAL_FMT"\n", memsize);
}
# endif
#else
Expand All @@ -128,28 +134,28 @@ Parrot_sysmem_amount(PARROT_INTERP)
# ifndef NDEBUG
if (Interp_debug_TEST(interp, PARROT_MEM_STAT_DEBUG_FLAG)) {
ori_memsize = memsize;
fprintf(stderr, "Default Memory: %ld\n", memsize);
fprintf(stderr, "Default Memory: "UINTVAL_FMT"\n", memsize);
}
# endif
#endif

#if defined(PARROT_HAS_HEADER_SYSRESOURCE)
if (getrlimit(RLIMIT_DATA, &rlim) == 0) {
if ((rlim.rlim_max != RLIM_INFINITY) && (rlim.rlim_max < memsize))
if ((rlim.rlim_max != RLIM_INFINITY) && (rlim.rlim_max < memsize))
memsize = rlim.rlim_max;
else if ((rlim.rlim_cur != RLIM_INFINITY) && (rlim.rlim_cur < memsize))
else if ((rlim.rlim_cur != RLIM_INFINITY) && (rlim.rlim_cur < memsize))
memsize = rlim.rlim_cur;
}
if (getrlimit(RLIMIT_AS, &rlim) == 0) {
if ((rlim.rlim_max != RLIM_INFINITY) && (rlim.rlim_max < memsize))
if ((rlim.rlim_max != RLIM_INFINITY) && (rlim.rlim_max < memsize))
memsize = rlim.rlim_max;
else if ((rlim.rlim_cur != RLIM_INFINITY) && (rlim.rlim_cur < memsize))
else if ((rlim.rlim_cur != RLIM_INFINITY) && (rlim.rlim_cur < memsize))
memsize = rlim.rlim_cur;
}
# ifndef NDEBUG
if (Interp_debug_TEST(interp, PARROT_MEM_STAT_DEBUG_FLAG)
&& ori_memsize != memsize)
fprintf(stderr, "Memory via rlimit restricted to: %ld\n", memsize);
fprintf(stderr, "Memory via rlimit restricted to: "UINTVAL_FMT"\n", memsize);
# endif
#endif

Expand Down

0 comments on commit b20ff2b

Please sign in to comment.