From: Ivo Raisr Date: Tue, 23 May 2017 21:37:50 +0000 (+0000) Subject: Port changes from r16407 to Solaris OS. X-Git-Tag: svn/VALGRIND_3_13_0~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2cc0e531ecddea7bcface7071e02a01fc10517c0;p=thirdparty%2Fvalgrind.git Port changes from r16407 to Solaris OS. n-i-bz git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16411 --- diff --git a/coregrind/m_syswrap/syswrap-solaris.c b/coregrind/m_syswrap/syswrap-solaris.c index a296e6b6af..22a75014bc 100644 --- a/coregrind/m_syswrap/syswrap-solaris.c +++ b/coregrind/m_syswrap/syswrap-solaris.c @@ -1966,6 +1966,24 @@ void VG_(track_client_dataseg)(ThreadId tid) VG_TRACK(die_mem_brk, VG_(brk_base), seg->end + 1 - VG_(brk_base)); } +static void PRINTF_CHECK(1, 2) +possibly_complain_brk(const HChar *format, ...) +{ + static Bool alreadyComplained = False; + if (!alreadyComplained) { + alreadyComplained = True; + if (VG_(clo_verbosity) > 0) { + va_list vargs; + va_start(vargs, format); + VG_(vmessage)(Vg_UserMsg, format, vargs); + va_end(vargs); + VG_(umsg)("(See section Limitations in the user manual.)\n"); + VG_(umsg)("NOTE: further instances of this message will not be " + "shown.\n"); + } + } +} + PRE(sys_brk) { /* unsigned long brk(caddr_t end_data_segment); */ @@ -2013,8 +2031,8 @@ PRE(sys_brk) vg_assert(VG_(brk_base) == VG_(brk_limit)); if (!VG_(setup_client_dataseg)()) { - VG_(umsg)("Cannot map memory to initialize brk segment in thread #%d " - "at %#lx\n", tid, VG_(brk_base)); + possibly_complain_brk("Cannot map memory to initialize brk segment in " + "thread #%d at %#lx\n", tid, VG_(brk_base)); SET_STATUS_Failure(VKI_ENOMEM); return; } @@ -2156,8 +2174,8 @@ PRE(sys_brk) Bool ok = VG_(am_create_reservation)(resvn_start, resvn_size, SmLower, anon_size); if (!ok) { - VG_(umsg)("brk segment overflow in thread #%d: can't grow " - "to %#lx\n", tid, new_brk); + possibly_complain_brk("brk segment overflow in thread #%d: can not " + "grow to %#lx\n", tid, new_brk); SET_STATUS_Failure(VKI_ENOMEM); return; } @@ -2170,8 +2188,8 @@ PRE(sys_brk) /* Address space manager will merge old and new data segments. */ sres = VG_(am_mmap_anon_fixed_client)(anon_start, anon_size, prot); if (sr_isError(sres)) { - VG_(umsg)("Cannot map memory to grow brk segment in thread #%d " - "to %#lx\n", tid, new_brk); + possibly_complain_brk("Cannot map memory to grow brk segment in " + "thread #%d to %#lx\n", tid, new_brk); SET_STATUS_Failure(VKI_ENOMEM); return; } diff --git a/memcheck/tests/solaris/brk.stderr.exp b/memcheck/tests/solaris/brk.stderr.exp index 3e981d510e..d391c95757 100644 --- a/memcheck/tests/solaris/brk.stderr.exp +++ b/memcheck/tests/solaris/brk.stderr.exp @@ -1,3 +1,4 @@ + Invalid read of size 1 at 0x........: test_begin (brk.c:19) by 0x........: main (brk.c:78) @@ -8,4 +9,15 @@ Invalid read of size 1 by 0x........: main (brk.c:78) Address 0x........ is 0 bytes after the brk data segment limit 0x........ -brk segment overflow in thread #1: can't grow to 0x........ +brk segment overflow in thread #1: can not grow to 0x........ +(See section Limitations in the user manual.) +NOTE: further instances of this message will not be shown. + +HEAP SUMMARY: + in use at exit: 0 bytes in 0 blocks + total heap usage: 0 allocs, 0 frees, 0 bytes allocated + +For a detailed leak analysis, rerun with: --leak-check=full + +For counts of detected and suppressed errors, rerun with: -v +ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0) diff --git a/memcheck/tests/solaris/brk.vgtest b/memcheck/tests/solaris/brk.vgtest index 1306b7786b..b1766ffc38 100644 --- a/memcheck/tests/solaris/brk.vgtest +++ b/memcheck/tests/solaris/brk.vgtest @@ -1,2 +1 @@ prog: brk -vgopts: -q