Added a regression test for it.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2619
Addr ret = VG_(brk_limit);
static const Bool debug = False;
Segment *seg;
+ Addr current, newaddr;
+
if (debug)
VG_(printf)("do_brk: brk_base=%p brk_limit=%p newbrk=%p\n",
if (seg != NULL && newbrk > seg->addr)
return VG_(brk_limit);
- if (PGROUNDDN(newbrk) != PGROUNDDN(VG_(brk_limit))) {
- Addr current = PGROUNDUP(VG_(brk_limit));
- Addr newaddr = PGROUNDUP(newbrk);
+ current = PGROUNDUP(VG_(brk_limit));
+ newaddr = PGROUNDUP(newbrk);
+ if (newaddr != current) {
/* new brk in a new page - fix the mappings */
if (newbrk > VG_(brk_limit)) {
badloop.stderr.exp badloop.vgtest \
badrw.stderr.exp badrw.vgtest \
brk.stderr.exp brk.vgtest \
+ brk2.stderr.exp brk2.vgtest \
buflen_check.stderr.exp buflen_check.vgtest \
clientperm.stderr.exp \
clientperm.stdout.exp clientperm.vgtest \
zeropage.stderr.exp zeropage.vgtest
check_PROGRAMS = \
- badaddrvalue badfree badjump badloop badrw brk buflen_check \
+ badaddrvalue badfree badjump badloop badrw brk brk2 buflen_check \
clientperm custom_alloc \
doublefree error_counts errs1 exitprog execve execve2 \
fpeflags fprw fwrite inits inline \
badloop_SOURCES = badloop.c
badrw_SOURCES = badrw.c
brk_SOURCES = brk.c
+brk2_SOURCES = brk2.c
buflen_check_SOURCES = buflen_check.c
clientperm_SOURCES = clientperm.c
custom_alloc_SOURCES = custom_alloc.c
--- /dev/null
+#include <stdio.h>
+#include <unistd.h>
+
+#define MAX 3000
+
+// At one time, this was causing a seg fault within Valgrind -- it was when
+// extending the brk segment onto a new page. Fixed in vg_syscalls.c 1.129.
+
+int main () {
+ char* ptr;
+ int i;
+
+ for (i=0; i<MAX; i++) {
+ ptr = sbrk(1);
+
+ if (ptr == (void*)-1) {
+ printf ("sbrk() failed!\n");
+ return 0;
+ }
+
+ *ptr = 0;
+ }
+
+ return 0;
+}
--- /dev/null
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
+malloc/free: in use at exit: 0 bytes in 0 blocks.
+malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
+For a detailed leak analysis, rerun with: --leak-check=yes
+For counts of detected errors, rerun with: -v
--- /dev/null
+prog: brk2