Re: [Valgrind-users] Is VG_REGPARM inlining?

2012-10-02 Thread Josef Weidendorfer
Am 01.10.2012 23:47, schrieb Wonjoon Song:
 In the example lackey, there is

 static VG_REGPARM(2) void trace_load(Addr addr, SizeT size);

 I saw a pdf http://valgrind.org/docs/iiswc2006.pdf that VG_REGPARM
  passes arguments using registers instead of stack. Is this inlining?

No.

VG_REGPARM(x) changes the used calling convention for a given
function such that more registers are used for parameters.

It is a convention in Valgrind that functions called from
generated code have to obey a calling convention using VG_REGPARM(x)
if x parameters are to be passed. This will speed up such calls
on platforms where the default calling convention uses the stack
to pass parameters (most important x86/32bit).

As trace_load() is to be called from generated code, it has to
use this calling convention.

 If it is not, what can i do to inline functions?
  because it says I can improve speed using inlining.

Inlining means embedding of instructions of a function into
a caller site. As the caller here always is generated code,
inlining here means to embed code generated at static time
into the dynamically generated code at runtime.

This could be done, but Valgrind currently does not support it
(Intels PIN tool does).

Instead, if you care about such optimizations, the current solution
is to directly generate VEX code in your instrumentation function, 
instead of calling a precompiled function.

Josef




 Thank you,
 Wonjoon
 --
 Got visibility?
 Most devs has no idea what their production app looks like.
 Find out how fast your code is with AppDynamics Lite.
 http://ad.doubleclick.net/clk;262219671;13503038;y?
 http://info.appdynamics.com/FreeJavaPerformanceDownload.html
 ___
 Valgrind-users mailing list
 Valgrind-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/valgrind-users



--
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
___
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users


Re: [Valgrind-users] closing bracket of destructor

2012-10-02 Thread David Faure
On Tuesday 02 October 2012 14:55:57 jody wrote:
 Th puzzling thing is that WorldTile.cpp:267 and TDWorker.cpp:130 refer
 to the closing brackets of the respective destructors.
 What does that mean?

This is where the local variables (the ones created on the stack) get deleted, 
obviously.

-- 
David Faure, fa...@kde.org, http://www.davidfaure.fr
Working on KDE, in particular KDE Frameworks 5


--
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
___
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users


Re: [Valgrind-users] closing bracket of destructor

2012-10-02 Thread Tom Hughes
On 02/10/12 13:55, jody wrote:

 I also don't understand why the Cell is deleted twice, because
 destroyGrid() does this in a loop (see below),
 and all other destructors are called only once.

 -
 void CellGrid::destroyGrid() {

  if (m_apCells != NULL) {
  for (coord j = 0; j  m_iNumCells; j++) {
  if (m_apCells[j] != NULL)  {
  delete m_apCells[j];
  }
  }
  delete[] m_apCells;
  }

// other stuff unrelated to m_apCells
 }

Although you check for m_apCells being null before doing the cleanup 
here you don't actually set it to null after the delete, so if this 
routine is called a second time it will try and cleanup an array that 
has already been freed.

 -
 Since this error does not appear for smaller array sizes, i suspect there
 must be some overwriting, but valgrind does not report this...

Are smaller arrays perhaps handled by a fixed size array of cells that 
is part of the objects, with dynamic allocation of an auxiliary cell 
array only being used when the cell count gets too large?

Tom

-- 
Tom Hughes (t...@compton.nu)
http://compton.nu/

--
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
___
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users


Re: [Valgrind-users] closing bracket of destructor

2012-10-02 Thread jody
@Tom:
Thank you for pointing the NULL thing out.

When i debugged the code and sporadically checked which index of the
array was currently being deleted,
i noticed that a while after 50'000 the index was 9'000. The type
'coord' of the index j was a unsigned short int.
So when the number of Cells was greater than 65535 the counter would
wrap over to 0  and start deleting the cells
with low indices for the second time.

So now only my curiosity question about the closing brackets remain :)

Jody

On Tue, Oct 2, 2012 at 3:35 PM, jody jody@gmail.com wrote:
 Thanks for the explanation.

 However, i wrote a small test program with some dummy classes A, B, C
 all of which have  local variables in their destructors. An in the
 constructor of C a B is created, and in the constructor of B an A is
 created. The destructor of C deletes the B instance, which in tur
 deletes its a instance. A creates an error by deleting an array twice.
 Here valgrind correctly shows the error source but it never mentions a
 closing bracket.

 So the question now is: under which circumstances are the closing
 brackets of destructors listed in a call stack?

 And why is the closing bracket of the destructor listed as the caller
 of the destructor itself?

 Jody

 On Tue, Oct 2, 2012 at 5:02 PM, David Faure fa...@kde.org wrote:
 On Tuesday 02 October 2012 14:55:57 jody wrote:
 Th puzzling thing is that WorldTile.cpp:267 and TDWorker.cpp:130 refer
 to the closing brackets of the respective destructors.
 What does that mean?

 This is where the local variables (the ones created on the stack) get 
 deleted,
 obviously.

 --
 David Faure, fa...@kde.org, http://www.davidfaure.fr
 Working on KDE, in particular KDE Frameworks 5


--
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
___
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users


Re: [Valgrind-users] closing bracket of destructor

2012-10-02 Thread David Chapman
On 10/2/2012 7:33 AM, Patrick J. LoPresti wrote:
 On Tue, Oct 2, 2012 at 5:55 AM, jody jody@gmail.com wrote:

 -
 void CellGrid::destroyGrid() {

  if (m_apCells != NULL) {
  for (coord j = 0; j  m_iNumCells; j++) {
  if (m_apCells[j] != NULL)  {
  delete m_apCells[j];
  }
  }
  delete[] m_apCells;
  }

// other stuff unrelated to m_apCells
 }
 This is not related to your problem, but...  In C++ -- all versions
 ever, standard or otherwise -- calling delete on a NULL pointer is
 guaranteed to be a no-op.  So there is never a need to check for NULL
 before calling delete.  Doing so makes your code run slower, makes
 it harder to read, and makes the reader wonder whether the author
 simply does not know C++ or is trying to work around some obscure bug
 in some compiler.

   - Pat


It wasn't so obscure 20 years ago - programs compiled with Zortech C++ 
would crash if you called a virtual destructor for a NULL pointer.  That 
wasn't fixed for a couple of versions.  Fortunately, all C++ compilers 
of which I am aware today handle this properly and the NULL check is 
truly redundant.  But I still find can't delete 0 in Zortech comments 
in some of my oldest C++ code.

And now back to your regularly scheduled programming...

-- 
 David Chapman  dcchap...@acm.org
 Chapman Consulting -- San Jose, CA
 Software Development Done Right.
 www.chapman-consulting-sj.com


--
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
___
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users


[Valgrind-users] Large application SIGSEGV when run in valgrind

2012-10-02 Thread Pierre-Luc Provencal

Hello,

I am new at using valgrind. I first tried it on a relatively small program, and 
everything worked ok.

When I try it with a much larger program (19MB), I get a SIGSEGV before the 
main() is actually called. It looks like the program crashes while calling in 
the constructor functions. This is a 32-bit program run on a CentOs 6.2 64-bit 
system. The system has 8 GB memory. The address that is being used when the 
crash occurs is: Access not within mapped region at address 0xFECB7114. Which 
is near 4 GB, but should be ok on a 8 GB system.

Any help is appreciated.

Here is the outout from valgrind:

[root@xms plp]# valgrind --leak-check=full test1 -cv
==11125== Memcheck, a memory error detector
==11125== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==11125== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==11125== Command: test1 -cv
==11125==
==11125== Invalid write of size 4
==11125==at 0x8055129: CStdStrwchar_t::CStdStr(wchar_t const*) 
(XString.h:1777)
==11125==by 0x8188CED: __static_initialization_and_destruction_0(int, int) 
(Base64.cpp:29)
==11125==by 0x8188D2F: global constructors keyed to Base64.cpp 
(Base64.cpp:121)
==11125==by 0x81B96DC: ??? (in /usr/bin/test1)
==11125==by 0x8053427: ??? (in /usr/bin/test1)
==11125==by 0x81B95F8: __libc_csu_init (in /usr/bin/test1)
==11125==by 0x483FC83: (below main) (in /lib/libc-2.12.so)
==11125==  Address 0xfecb7114 is not stack'd, malloc'd or (recently) free'd
==11125==
==11125==
==11125== Process terminating with default action of signal 11 (SIGSEGV)
==11125==  Access not within mapped region at address 0xFECB7114
==11125==at 0x8055129: CStdStrwchar_t::CStdStr(wchar_t const*) 
(XString.h:1777)
==11125==by 0x8188CED: __static_initialization_and_destruction_0(int, int) 
(Base64.cpp:29)
==11125==by 0x8188D2F: global constructors keyed to Base64.cpp 
(Base64.cpp:121)
==11125==by 0x81B96DC: ??? (in /usr/bin/test1)
==11125==by 0x8053427: ??? (in /usr/bin/test1)
==11125==by 0x81B95F8: __libc_csu_init (in /usr/bin/test1)
==11125==by 0x483FC83: (below main) (in /lib/libc-2.12.so)
==11125==  If you believe this happened as a result of a stack
==11125==  overflow in your program's main thread (unlikely but
==11125==  possible), you can try to increase the size of the
==11125==  main thread stack using the --main-stacksize= flag.
==11125==  The main thread stack size used in this run was 10485760.
==11125==
==11125== HEAP SUMMARY:
==11125== in use at exit: 172 bytes in 2 blocks
==11125==   total heap usage: 4 allocs, 2 frees, 644 bytes allocated
==11125==
==11125== 160 bytes in 1 blocks are possibly lost in loss record 2 of 2
==11125==at 0x4025F0D: calloc (vg_replace_malloc.c:593)
==11125==by 0x4011D19: _dl_allocate_tls (in /lib/ld-2.12.so)
==11125==by 0x451E328: pthread_create@@GLIBC_2.1 (in 
/lib/libpthread-2.12.so)
==11125==by 0x81B4174: XBeginThread(ttThreadHandle**, void* (*)(void*), 
bool, void*, int, bool) (XThreads.cpp:289)
==11125==by 0x81B6972: CXMultipleTimer::Run() (XMultipleTimer.cpp:65)
==11125==by 0x81B6701: CXMultipleTimer::CXMultipleTimer() 
(XMultipleTimer.cpp:31)
==11125==by 0x81B3E6A: __static_initialization_and_destruction_0(int, int) 
(XSocket.cpp:25)
==11125==by 0x81B3EAC: global constructors keyed to XSocket.cpp 
(XSocket.cpp:1331)
==11125==by 0x81B96DC: ??? (in /usr/bin/test1)
==11125==by 0x8053427: ??? (in /usr/bin/test1)
==11125==by 0x81B95F8: __libc_csu_init (in /usr/bin/test1)
==11125==by 0x483FC83: (below main) (in /lib/libc-2.12.so)
==11125==
==11125== LEAK SUMMARY:
==11125==definitely lost: 0 bytes in 0 blocks
==11125==indirectly lost: 0 bytes in 0 blocks
==11125==  possibly lost: 160 bytes in 1 blocks
==11125==still reachable: 12 bytes in 1 blocks
==11125== suppressed: 0 bytes in 0 blocks
==11125== Reachable blocks (those to which a pointer was found) are not shown.
==11125== To see them, rerun with: --leak-check=full --show-reachable=yes
==11125==
==11125== For counts of detected and suppressed errors, rerun with: -v
==11125== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 85 from 8)

Thanks,
Pierre

  --
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev___
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users


Re: [Valgrind-users] Large application SIGSEGV when run in valgrind

2012-10-02 Thread David Faure
On Tuesday 02 October 2012 12:27:12 Pierre-Luc Provencal wrote:
 ==11125==by 0x8188CED: __static_initialization_and_destruction_0(int, 
 int) (Base64.cpp:29)
 ==11125==by 0x8188D2F: global constructors keyed to Base64.cpp 
 (Base64.cpp:121)

Greetings from Provence :-)

What does the code at these two lines, say?

Unless valgrind is wrong, something funky is being done by that code, so it 
might help to see what it's doing.

-- 
David Faure, fa...@kde.org, http://www.davidfaure.fr
Working on KDE, in particular KDE Frameworks 5


--
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
___
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users


Re: [Valgrind-users] closing bracket of destructor

2012-10-02 Thread Patrick J. LoPresti
On Tue, Oct 2, 2012 at 9:16 AM, John Reiser jrei...@bitwagon.com wrote:

 Not necessarily.

Yes, necessarily.

 In *your* favorite modern CPU, a transfer of control
 to a non-local destination can cost 15 times as much as a local test-and-
 skip-over, depending on branch prediction and Icache misses.

True but irrelevant.  As I said, delete of NULL is guaranteed by the
language to be a no-op; i.e., when the pointer is null, the destructor
is not invoked.  The compiler emits an inline null check even with
optimization disabled.

 Particularly
 if 'delete' has not been called recently, then code which uses a local
 guard might be faster.

No, the code with your own guard is never faster under any
circumstances.  At best it can be the same speed if your compiler is
smart enough to recognize the test as redundant.

 It is also true that prevalent compilers don't make the obvious optimization
 of removing the test.

Also wrong.  The current GCC (4.7.1) omits the redundant null check
when optimization is enabled.

 An unconditional breakpoint
 is much faster (no dynamic cost unless triggered) than a conditional one.

Yes, let's all make our code longer, harder to read, and slower, just
in case somebody inserts a breakpoint there and wants it to run a few
nanoseconds faster under the debugger.  I always heard engineering is
about trade-offs; this must be one of those times.

John, I know how much you love to argue with me, but you would save
others some time if you would check your facts first.

 - Pat

--
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
___
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users


Re: [Valgrind-users] Large application SIGSEGV when run in valgrind

2012-10-02 Thread Pierre-Luc Provencal

Well,

This is just initialization for a static member from the class CBase64:
==11125==by 0x8188CED: __static_initialization_and_destruction_0(int, int) 
(Base64.cpp:29):
 27
 28 CXString CBase64::m_sBase64Alphabet =
 29   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/;
 30


The other line is just the end of the file.
==11125==by 0x8188D2F: global constructors keyed to Base64.cpp 
(Base64.cpp:121)

My guess is that the constructor code resides at the end of the code for the 
current file, but this is just my guess. ;-)

Pierre


 From: fa...@kde.org
 To: valgrind-users@lists.sourceforge.net
 CC: pierr...@hotmail.com
 Subject: Re: [Valgrind-users] Large application SIGSEGV when run in valgrind
 Date: Tue, 2 Oct 2012 18:38:07 +
 
 On Tuesday 02 October 2012 12:27:12 Pierre-Luc Provencal wrote:
  ==11125==by 0x8188CED: __static_initialization_and_destruction_0(int, 
  int) (Base64.cpp:29)
  ==11125==by 0x8188D2F: global constructors keyed to Base64.cpp 
  (Base64.cpp:121)
 
 Greetings from Provence :-)
 
 What does the code at these two lines, say?
 
 Unless valgrind is wrong, something funky is being done by that code, so it 
 might help to see what it's doing.
 
 -- 
 David Faure, fa...@kde.org, http://www.davidfaure.fr
 Working on KDE, in particular KDE Frameworks 5
 
  --
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev___
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users


Re: [Valgrind-users] Large application SIGSEGV when run in valgrind

2012-10-02 Thread John Reiser
On 10/02/2012 09:27 AM, Pierre-Luc Provencal wrote:
 Hello,
 
 I am new at using valgrind. I first tried it on a relatively small program, 
 and everything worked ok.
 
 When I try it with a much larger program (19MB), I get a SIGSEGV before the 
 main() is actually called. It looks like the program crashes while calling in 
 the constructor functions. This is a 32-bit program run on a CentOs 6.2 
 64-bit system. The system has 8 GB memory. The address that is being used
 when the crash occurs is: Access not within mapped region at address 
 0xFECB7114. Which is near 4 GB, but should be ok on a 8 GB system.

What is large is not necessarily the 19MB program, but the use of almost 4GiB
of address space.

0xFECB7114 is within 20MB or so of the architectural limit on a 32-bit address.
In addition to the architectural limit, the software which provides a 32-bit
environment on a 64-bit machine imposes an even lower limit on a 32-bit address.
There is a large gain in speed if some high 32-bit addresses can be reserved
for use by the operating system and libc, instead of making the entire 4GiB 
range
available to the 32-bit client (memcheck, including the program being 
checked.)

The reserved amount is at least 256KiB, but might be enough to cover 20MiB,
which would tend to explain some of the problems you see.

In any case, please run cat /proc/PID/maps (where PID is the numerical
process ID) and show us what the mappings look like for addresses 0xFE00
and above, when the program hits the memcheck error (or shortly before.)

-- 


--
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
___
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users


Re: [Valgrind-users] Large application SIGSEGV when run in valgrind

2012-10-02 Thread Philippe Waroquiers
On Tue, 2012-10-02 at 12:48 -0700, John Reiser wrote:
 In any case, please run cat /proc/PID/maps (where PID is the numerical
 process ID) and show us what the mappings look like for addresses 0xFE00
 and above, when the program hits the memcheck error (or shortly before.)
The easiest to obtain this info when the segv is triggered
is to start with --vgdb-error=1, then attach with gdb/vgdb when the error is 
reported.

In gdb, you can then use:
   monitor v.info memory aspacemgr
   # this will show the set of mappings as seen by Valgrind

   shell cat /proc/pidmaps
   # this will show the mappings as seen by the kernel

Philippe




--
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
___
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users


Re: [Valgrind-users] Large application SIGSEGV when run in valgrind

2012-10-02 Thread John Reiser
 Using valgrind with gdb, the faulty address is now 0xFEABA104:
 
 ==29254== Process terminating with default action of signal 11 (SIGSEGV)
 ==29254==  Access not within mapped region at address 0xFEABA104
 ==29254==at 0x8055129: CStdStrwchar_t::CStdStr(wchar_t const*) 
 (XString.h:1777)
 ==29254==by 0x8188CED: __static_initialization_and_destruction_0(int, 
 int) (Base64.cpp:29)
 ==29254==by 0x8188D2F: global constructors keyed to Base64.cpp 
 (Base64.cpp:121)
 ==29254==by 0x81B96DC: ??? (in /usr/bin/test1)
 ==29254==by 0x8053427: ??? (in /usr/bin/test1)
 ==29254==by 0x81B95F8: __libc_csu_init (in /usr/bin/test1)
 ==29254==by 0x483FC83: (below main) (in /lib/libc-2.12.so)
 
 The address 0xFEABA104 does not seem to be mapped:
 
 # cat /proc/29254/maps
 0400-0401e000 r-xp  08:01 347089 
 /lib/ld-2.12.so  ## shared libraries
   [snip]
 08048000-0828d000 r-xp  08:01 266751 
 /usr/bin/test1   ## the program being checked
 0828d000-08292000 rw-p 00245000 08:01 266751 
 /usr/bin/test1
 08292000-082aa000 rw-p  00:00 0
 082aa000-082ab000 rwxp  00:00 0
 3800-382ab000 r-xp 1000 08:01 355740 
 /usr/local/lib/valgrind/memcheck-x86-linux   ## the main program
 382ab000-382ad000 rw-p 002ab000 08:01 355740 
 /usr/local/lib/valgrind/memcheck-x86-linux
 382ad000-38d43000 rw-p  00:00 0

  ### This gap from 0x38.. to 0x81.. is interesting.
  ### A bad access at 0xFEABA104 is beginning to look like
  ### bad code (sign error, etc.) in static inits or CStdStrwchar_t.

 81d6-82785000 rwxp  00:00 0
   [snip]
 866fa000-867fa000 rwxp  00:00 0
 867fa000-867fc000 ---p  00:00 0   # is this the hole between two 
 thread stacks?
 feabb000-feabe000 rwxp  00:00 0
 ffaab000-ffac rw-p  00:00 0  
 [stack]

   ## So the reserved area is about (0x1 - 0xffac) == 5.5MB
   ## which looks like 4MiB plus some deliberate randomization
   ## as a defense against malware.

-- 


--
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
___
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users


Re: [Valgrind-users] Large application SIGSEGV when run in valgrind

2012-10-02 Thread Pierre-Luc Provencal

The thing is, I could move on further by not making this one variable static, 
but then I got another error for another static variable somewhere else.
It really looks like static variable initialization is buggy.
Thanks,Pierre

 Date: Tue, 2 Oct 2012 15:37:44 -0700
 From: jrei...@bitwagon.com
 CC: valgrind-users@lists.sourceforge.net
 Subject: Re: [Valgrind-users] Large application SIGSEGV when run in valgrind
 
  Using valgrind with gdb, the faulty address is now 0xFEABA104:
  
  ==29254== Process terminating with default action of signal 11 (SIGSEGV)
  ==29254==  Access not within mapped region at address 0xFEABA104
  ==29254==at 0x8055129: CStdStrwchar_t::CStdStr(wchar_t const*) 
  (XString.h:1777)
  ==29254==by 0x8188CED: __static_initialization_and_destruction_0(int, 
  int) (Base64.cpp:29)
  ==29254==by 0x8188D2F: global constructors keyed to Base64.cpp 
  (Base64.cpp:121)
  ==29254==by 0x81B96DC: ??? (in /usr/bin/test1)
  ==29254==by 0x8053427: ??? (in /usr/bin/test1)
  ==29254==by 0x81B95F8: __libc_csu_init (in /usr/bin/test1)
  ==29254==by 0x483FC83: (below main) (in /lib/libc-2.12.so)
  
  The address 0xFEABA104 does not seem to be mapped:
  
  # cat /proc/29254/maps
  0400-0401e000 r-xp  08:01 347089 
  /lib/ld-2.12.so  ## shared libraries
[snip]
  08048000-0828d000 r-xp  08:01 266751 
  /usr/bin/test1   ## the program being checked
  0828d000-08292000 rw-p 00245000 08:01 266751 
  /usr/bin/test1
  08292000-082aa000 rw-p  00:00 0
  082aa000-082ab000 rwxp  00:00 0
  3800-382ab000 r-xp 1000 08:01 355740 
  /usr/local/lib/valgrind/memcheck-x86-linux   ## the main program
  382ab000-382ad000 rw-p 002ab000 08:01 355740 
  /usr/local/lib/valgrind/memcheck-x86-linux
  382ad000-38d43000 rw-p  00:00 0
 
   ### This gap from 0x38.. to 0x81.. is interesting.
   ### A bad access at 0xFEABA104 is beginning to look like
   ### bad code (sign error, etc.) in static inits or CStdStrwchar_t.
 
  81d6-82785000 rwxp  00:00 0
[snip]
  866fa000-867fa000 rwxp  00:00 0
  867fa000-867fc000 ---p  00:00 0   # is this the hole between two 
  thread stacks?
  feabb000-feabe000 rwxp  00:00 0
  ffaab000-ffac rw-p  00:00 0  
  [stack]
 
## So the reserved area is about (0x1 - 0xffac) == 5.5MB
## which looks like 4MiB plus some deliberate randomization
## as a defense against malware.
 
 -- 
 
 
 --
 Don't let slow site performance ruin your business. Deploy New Relic APM
 Deploy New Relic app performance management and know exactly
 what is happening inside your Ruby, Python, PHP, Java, and .NET app
 Try New Relic at no cost today and get our sweet Data Nerd shirt too!
 http://p.sf.net/sfu/newrelic-dev2dev
 ___
 Valgrind-users mailing list
 Valgrind-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/valgrind-users
  --
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev___
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users