You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
1
(10) |
2
(22) |
3
(15) |
4
(14) |
5
(8) |
6
(10) |
7
(14) |
|
8
(9) |
9
(10) |
10
(21) |
11
(16) |
12
(17) |
13
(15) |
14
(8) |
|
15
(12) |
16
(8) |
17
(44) |
18
(24) |
19
(29) |
20
(29) |
21
(17) |
|
22
(17) |
23
(16) |
24
(18) |
25
(16) |
26
(15) |
27
(16) |
28
(11) |
|
29
(11) |
30
(10) |
31
(12) |
|
|
|
|
|
From: Nicholas N. <nj...@cs...> - 2006-01-18 23:29:53
|
On Wed, 18 Jan 2006, Ashley Pittman wrote:
> I'm trying to instrument my code with the correct VALGRIND_[MAKE|
> CHECK]_[READ|WRITE]ABLE macros and want to check with you guys that I'm
> using the correct ones.
>
> [snip]
>
> #define V_START_GET(TARGET,LEN) \
> do { \
> VALGRIND_CHECK_WRITABLE(TARGET,LEN); \
> VALGRIND_MAKE_WRITABLE(TARGET,LEN); \
> } while (0)
You don't need the MAKE_WRITABLE here, AFAICT.
> #define V_END_GET(TARGET,LEN) \
> do { \
> VALGRIND_MAKE_READABLE(TARGET,LEN); \
> } while (0)
>
> #define V_START_PUT(TARGET,LEN) \
> do { \
> VALGRIND_CHECK_READABLE(TARGET,LEN); \
> } while (0)
>
> Now my questions are mainly about the asynchronous get, it checks that
> the buffer it's been given is valid (VALGRIND_CHECK_WRITABLE) and
> temporarily marks it as addressable but undefined whilst the data is
> arriving. My question is what does VALGRIND_MAKE_WRITABLE do if the
> buffer isn't addressable before it's called. I don't want it to mark a
> buffer as addressable when it isn't, only to mark it as undefined while
> the network transfer is underway. Am I doing the right thing here?
There is no way to mark memory as undefined without also forcing it to be
considered addressable, which sounds like is what you want. But just
removing the MKAE_WRITABLE like I said above might be good enough?
Nick
|
|
From: Julian S. <js...@ac...> - 2006-01-18 22:34:52
|
> and I get the following errors building the test programs in
> helgrind/tests. Should these tests compile cleanly?
>
> make allok deadlock inherit race race2 readshared
> make[1]: Entering directory `/home/dcn/svn/1-18/helgrind/tests'
> if gcc -DHAVE_CONFIG_H -I. -I. -I../.. -Winline -Wall -Wshadow
> -gstabs -m64 -Wno-long-long -Wdeclaration-after-statement -MT allok.o
> -MD -MP -MF ".deps/allok.Tpo" -c -o allok.o allok.c; \
> then mv -f ".deps/allok.Tpo" ".deps/allok.Po"; else rm -f
> ".deps/allok.Tpo"; exit 1; fi
> /tmp/ccYznKU9.s: Assembler messages:
> /tmp/ccYznKU9.s:285: Error: can't resolve `main' {.opd section} -
> `.L.main' {.text section}
They should compile cleanly and indeed they have on our 970.
helgrind/allok.c is a completely vanilla small pthreads program.
Are you able to compile it by hand (gcc -m64 -o allok allok.c -lpthread) ?
J
|
|
From: Dave N. <dc...@us...> - 2006-01-18 21:25:10
|
I tried building this version on an IBM PPC970. uname -a: Linux elm3b148.beaverton.ibm.com 2.6.9-5.EL #1 SMP Wed Jan 5 19:23:58 EST 2005 ppc64 ppc64 ppc64 GNU/Linux elm3b148% gcc -v Reading specs from /usr/lib/gcc/ppc64-redhat-linux/3.4.3/specs Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=ppc64-redhat-linux --build=ppc64-redhat-linux --target=ppc64-redhat-linux --with-cpu=default32 Thread model: posix gcc version 3.4.3 20050227 (Red Hat 3.4.3-22.1) and I get the following errors building the test programs in helgrind/tests. Should these tests compile cleanly? make allok deadlock inherit race race2 readshared make[1]: Entering directory `/home/dcn/svn/1-18/helgrind/tests' if gcc -DHAVE_CONFIG_H -I. -I. -I../.. -Winline -Wall -Wshadow -gstabs -m64 -Wno-long-long -Wdeclaration-after-statement -MT allok.o -MD -MP -MF ".deps/allok.Tpo" -c -o allok.o allok.c; \ then mv -f ".deps/allok.Tpo" ".deps/allok.Po"; else rm -f ".deps/allok.Tpo"; exit 1; fi /tmp/ccYznKU9.s: Assembler messages: /tmp/ccYznKU9.s:285: Error: can't resolve `main' {.opd section} - `.L.main' {.text section} /tmp/ccYznKU9.s:285: Error: expression too complex make[1]: *** [allok.o] Error 1 make[1]: Leaving directory `/home/dcn/svn/1-18/helgrind/tests' make: *** [check-am] Error 2 Julian Seward wrote: > Folks with ppc64-linux boxes might like to check out and give it > a try. There will inevitably be breakage, and some testing at > this stage would be no bad thing. > |
|
From: Ashley P. <as...@qu...> - 2006-01-18 19:02:56
|
Hi,
I'm trying to instrument my code with the correct VALGRIND_[MAKE|
CHECK]_[READ|WRITE]ABLE macros and want to check with you guys that I'm
using the correct ones.
As a bit of background my library interacts with the network hardware
directly in user-space so the normal system calls don't intercept data
transfers over the network, I'm trying to make up for this by
instrumenting the code to instruct valgrind properly.
The functions I want to instrument vary greatly in semantics but in the
end all boil down to asynchronous reads and writes, that is you start a
DMA, keep a handle to it and come back later to wait for it to finish.
The macros I've defined are as follows, hopefully the names are fairly
self explanatory...
#define V_START_GET(TARGET,LEN) \
do { \
VALGRIND_CHECK_WRITABLE(TARGET,LEN); \
VALGRIND_MAKE_WRITABLE(TARGET,LEN); \
} while (0)
#define V_END_GET(TARGET,LEN) \
do { \
VALGRIND_MAKE_READABLE(TARGET,LEN); \
} while (0)
#define V_START_PUT(TARGET,LEN) \
do { \
VALGRIND_CHECK_READABLE(TARGET,LEN); \
} while (0)
Now my questions are mainly about the asynchronous get, it checks that
the buffer it's been given is valid (VALGRIND_CHECK_WRITABLE) and
temporarily marks it as addressable but undefined whilst the data is
arriving. My question is what does VALGRIND_MAKE_WRITABLE do if the
buffer isn't addressable before it's called. I don't want it to mark a
buffer as addressable when it isn't, only to mark it as undefined while
the network transfer is underway. Am I doing the right thing here?
Another request I have is can error reports from client requests include
a byte counter in the output, in the case of buffer over-runs it would
really help, in this case it was reading eight bytes from a malloced
buffer of four although it's impossible to see that from the output.
==26004== Uninitialised byte(s) found during client check request
==26004== at 0x40641F3: elan_hbcast (common/group_hbcast.c:820)
==26004== by 0x8048661: main
(in /opt/ashley/auto-build/quadrics/qstests/a.out)
==26004== Address 0x5ABDFC0 is 0 bytes inside a block of size 4 alloc'd
==26004== at 0x400446D: malloc (vg_replace_malloc.c:149)
==26004== by 0x804863E: main
(in /opt/ashley/auto-build/quadrics/qstests/a.out)
Ashley,
|
|
From: Robert W. <rj...@du...> - 2006-01-18 17:43:58
|
On Tue, 2006-01-17 at 04:25 +0000, Julian Seward wrote: > On Tuesday 17 January 2006 03:11, Robert Walsh wrote: > > > Even with a clean build, Robin? I did check in a load of > > > stuff just now, but revs 1540/5541 appear to work OK on my > > > amd64 box. > > > > Yup - even with a clean build. Details are: Athlon64 with 1GB memory > > running stock FC4 w/ glibc-2.3.5-10.3. It looks like every single test > > fails. >=20 > Hmm. Looking at the nightly builds, there's clearly something up, but > I can't reproduce it. A fresh checkout of 1540/5541 builds and tests > ok for me on SuSE 9.2 (amd64) and SuSE 10.0 (ppc32). Might this be > to do with svn up-ing an existing tree vs using a new checkout? Well, that wasn't the problem, but it did go away after later check-ins, so I think everything is OK now. Regards, Robert. --=20 Robert Walsh Amalgamated Durables, Inc. - "We don't make the things you buy." Email: rj...@du... |
|
From: Josef W. <Jos...@gm...> - 2006-01-18 15:19:58
|
On Wednesday 18 January 2006 06:24, Julian Seward wrote: > to the post-actions since both are in the same function. Recursion and > I think longjmping still work (perhaps not on ppc64). Longjumping will skip the frame of the wrapper function, too. So post-actions are not called. I am not sure this is a problem in practice. Josef |
|
From: <js...@ac...> - 2006-01-18 09:58:19
|
Nightly build on minnie ( SuSE 10.0, ppc32 ) started at 2006-01-18 05:00:01 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 182 tests, 14 stderr failures, 3 stdout failures ================= memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/mempool (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/stack_changes (stdout) memcheck/tests/stack_changes (stderr) memcheck/tests/supp1 (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/mremap (stderr) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-fp (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 182 tests, 17 stderr failures, 3 stdout failures ================= memcheck/tests/badjump (stderr) memcheck/tests/badjump2 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/mempool (stderr) memcheck/tests/nanoleak_supp (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/stack_changes (stdout) memcheck/tests/stack_changes (stderr) memcheck/tests/supp1 (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/mremap (stderr) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-fp (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Wed Jan 18 05:10:13 2006 --- new.short Wed Jan 18 05:19:46 2006 *************** *** 8,12 **** ! == 182 tests, 17 stderr failures, 3 stdout failures ================= ! memcheck/tests/badjump (stderr) ! memcheck/tests/badjump2 (stderr) memcheck/tests/leak-cycle (stderr) --- 8,10 ---- ! == 182 tests, 14 stderr failures, 3 stdout failures ================= memcheck/tests/leak-cycle (stderr) *************** *** 15,17 **** memcheck/tests/mempool (stderr) - memcheck/tests/nanoleak_supp (stderr) memcheck/tests/partiallydefinedeq (stderr) --- 13,14 ---- |
|
From: Oswald B. <os...@kd...> - 2006-01-18 08:45:27
|
On Wed, Jan 18, 2006 at 05:24:34AM +0000, Julian Seward wrote: > > the wrapped function is actually called from within the wrapper - > > that means it will see an additional stack frame. i imagine this > > might pose a problem for some conceivable functions. > > Well, yes, and that extra frame is visible in stack traces. > Not sure what problems this will cause though. > i've seen such a function only once so far, and this was function 0x26 of int 0x21 in DOS. i know this, because turbo debugger's syscall wrapping screwed it up. i'm having a hard time coming up with a function where it really might be a problem, particularly which might be a candidate for wrapping. so it's just a vague idea, as i tried to express. > > if it was implemented that way, this extra-elaborate wrapper loading and > > naming scheme could go away; > > No .. the wrapper naming scheme (involving wildcards for both fn names > and so names), and the specification vs active concepts, are independent of > how the low level control flow stuff is done. > i don't understand. having to track specifications is a direct consequence of having them loadable in the client code. if they were static parts of the tools, it would be just a static table per tool. of course, the weird naming scheme is not really imposed by the loading mechanism, as it could simply look for a specification table with a magic symbol. it just happens to be an "interesting" way of keeping related things close to each other. -- Hi! I'm a .signature virus! Copy me into your ~/.signature, please! -- Chaos, panic, and disorder - my work here is done. |
|
From: Julian S. <js...@ac...> - 2006-01-18 06:02:20
|
After a great deal of hacking (mostly by Cerion) the ppc64-linux port is coming to life. As of revisions 1541/5549, it fails 24 out of 185 regression tests on a PPC970 running YDL4.0. This puts it within hailing distance of the other three ports. Folks with ppc64-linux boxes might like to check out and give it a try. There will inevitably be breakage, and some testing at this stage would be no bad thing. Currently known deficiencies are: - there's something funny about stack unwinding I haven't figured out yet, causing stack traces that should be different to look the same. - function wrapping (but not intercepting) is broken. The ELF ppc64 ABI makes a difficult problem even harder, and I haven't got all the loose ends tied up yet. It may turn out that with this ABI, function wrapping cannot be made to work as robustly as on ELF x86/amd64/ppc32. - Lots of missing syscalls. As with the amd64 port, this port is fully biarch-capable and so a single build on a ppc64-linux box should be able to run 32-bit executables too. J == 185 tests, 18 stderr failures, 6 stdout failures ================= memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/overlap (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/post-syscall (stdout) memcheck/tests/sigaltstack (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/stack_changes (stdout) memcheck/tests/stack_changes (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/supp1 (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/wrap5 (stdout) memcheck/tests/wrap5 (stderr) memcheck/tests/wrap6 (stdout) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/sem (stderr) |
|
From: Julian S. <js...@ac...> - 2006-01-18 05:24:41
|
> the wrapped function is actually called from within the wrapper - that > means it will see an additional stack frame. i imagine this might pose a > problem for some conceivable functions. Well, yes, and that extra frame is visible in stack traces. Not sure what problems this will cause though. > additionally it might turn out > to be hard or at least work intensive to replicate the args of varargs > functions. This is true. The wrapping is not as general or clean as would be ideal - that is part of the tradeoff needed for a relatively simple and robust implementation. For wrapping pthreads we don't need varargs, and I prefer to avoid complexity until it's demonstrated to be necessary. > iirc, it was discussed to instrument the prologues/epilogues of wrapped > functions. what has become of this idea? The just-implemented scheme is similar in some ways, but it's simpler and more portable at the expense of being less flexible. The main difference is that here you have to write by hand a wrapper function. That naturally deals with all issues of passing state from the pre-actions to the post-actions since both are in the same function. Recursion and I think longjmping still work (perhaps not on ppc64). > if it was implemented that way, this extra-elaborate wrapper loading and > naming scheme could go away; No .. the wrapper naming scheme (involving wildcards for both fn names and so names), and the specification vs active concepts, are independent of how the low level control flow stuff is done. J |
|
From: <sv...@va...> - 2006-01-18 04:25:26
|
Author: sewardj
Date: 2006-01-18 04:25:20 +0000 (Wed, 18 Jan 2006)
New Revision: 5549
Log:
Make VG_(get_StackTrace2) aware of bogus LR values in
replacement/wrapper functions on ppc64-linux, which otherwise mess up
the backtraces.
Modified:
trunk/coregrind/m_libcassert.c
trunk/coregrind/m_stacktrace.c
trunk/coregrind/m_translate.c
trunk/coregrind/pub_core_stacktrace.h
Modified: trunk/coregrind/m_libcassert.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_libcassert.c 2006-01-18 04:23:10 UTC (rev 5548)
+++ trunk/coregrind/m_libcassert.c 2006-01-18 04:25:20 UTC (rev 5549)
@@ -138,7 +138,8 @@
=20
stacktop =3D tst->os_state.valgrind_stack_init_SP;
=20
- VG_(get_StackTrace2)(ips, BACKTRACE_DEPTH, ip, sp, fp, lr, sp, stackt=
op);
+ VG_(get_StackTrace2)(0/*tid is unknown*/,=20
+ ips, BACKTRACE_DEPTH, ip, sp, fp, lr, sp, stackt=
op);
VG_(pp_StackTrace) (ips, BACKTRACE_DEPTH);
=20
// Don't print this, as it's not terribly interesting and avoids a
Modified: trunk/coregrind/m_stacktrace.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_stacktrace.c 2006-01-18 04:23:10 UTC (rev 5548)
+++ trunk/coregrind/m_stacktrace.c 2006-01-18 04:25:20 UTC (rev 5549)
@@ -48,8 +48,13 @@
IPs into 'ips'. In order to be thread-safe, we pass in the
thread's IP SP, FP if that's meaningful, and LR if that's
meaningful. Returns number of IPs put in 'ips'.
+
+ If you know what the thread ID for this stack is, send that as the
+ first parameter, else send zero. This helps generate better stack
+ traces on ppc64-linux and has no effect on other platforms.
*/
-UInt VG_(get_StackTrace2) ( Addr* ips, UInt n_ips,=20
+UInt VG_(get_StackTrace2) ( ThreadId tid_if_known,
+ Addr* ips, UInt n_ips,=20
Addr ip, Addr sp, Addr fp, Addr lr,
Addr fp_min, Addr fp_max_orig )
{
@@ -230,7 +235,7 @@
=20
# elif defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
=20
- /*--------------------- ppc32 ---------------------*/
+ /*--------------------- ppc32/64 ---------------------*/
=20
/* fp is %r1. ip is %cia. Note, ppc uses r1 as both the stack and
frame pointers. */
@@ -259,7 +264,11 @@
/* on ppc64-linux (ppc64-elf, really), the lr save slot is 2
words back from sp, whereas on ppc32-elf(?) it's only one
word back. */
- const Int lr_offset =3D VG_WORDSIZE=3D=3D8 ? 2 : 1;
+# if defined(VGP_ppc64_linux)
+ const Int lr_offset =3D 2;
+# else
+ const Int lr_offset =3D 1;
+# endif
=20
if (i >=3D n_ips)
break;
@@ -274,6 +283,24 @@
else
ip =3D (((UWord*)fp)[lr_offset]);
=20
+# if defined(VGP_ppc64_linux)
+ /* Nasty hack to do with function replacement/wrapping on
+ ppc64-linux. If LR points to our magic return stub,
+ then we are in a wrapped or intercepted function, in
+ which LR has been messed with. The original LR will
+ have been pushed onto the thread's hidden REDIR stack
+ one down from the top (top element is the saved R2) and
+ so we should restore the value from there instead. */
+ if (i =3D=3D 1=20
+ && ip =3D=3D (Addr)&VG_(ppc64_linux_magic_redirect_retur=
n_stub)
+ && VG_(is_valid_tid)(tid_if_known)) {
+ Long hsp =3D VG_(threads)[tid_if_known].arch.vex.guest_RE=
DIR_SP;
+ if (hsp >=3D 1 && hsp < VEX_GUEST_PPC64_REDIR_STACK_SIZE)
+ ip =3D VG_(threads)[tid_if_known]
+ .arch.vex.guest_REDIR_STACK[hsp-1];
+ }
+# endif
+
fp =3D (((UWord*)fp)[0]);
ips[i++] =3D ip;
if (debug)
@@ -324,7 +351,8 @@
VG_(printf)("tid %d: stack_highest=3D%p ip=3D%p sp=3D%p fp=3D%p\n"=
,
tid, stack_highest_word, ip, sp, fp);
=20
- return VG_(get_StackTrace2)(ips, n_ips, ip, sp, fp, lr, sp, stack_hig=
hest_word);
+ return VG_(get_StackTrace2)(tid, ips, n_ips, ip, sp, fp, lr, sp,=20
+ stack_highest_word);
}
=20
static void printIpDesc(UInt n, Addr ip)
Modified: trunk/coregrind/m_translate.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_translate.c 2006-01-18 04:23:10 UTC (rev 5548)
+++ trunk/coregrind/m_translate.c 2006-01-18 04:25:20 UTC (rev 5549)
@@ -566,6 +566,8 @@
}
=20
=20
+/* --------------- ppc64-linux specific helpers --------------- */
+
#if defined(VGP_ppc64_linux)
static IRExpr* mkU64 ( ULong n )
{
@@ -681,6 +683,7 @@
}
#endif
=20
+/* --------------- END ppc64-linux specific helpers --------------- */
=20
/* This is an the IR preamble generators used for replacement
functions. It adds code to set the guest_NRADDR to zero
@@ -692,7 +695,11 @@
replacement function, and sets LR to point at the magic return-stub
address. Setting LR causes the return of the wrapped/redirected
function to lead to our magic return stub, which restores LR and R2
- from said stack and returns for real. */
+ from said stack and returns for real.
+
+ VG_(get_StackTrace2) understands that the LR value may point to the
+ return stub address, and that in that case it can get the real LR
+ value from the hidden stack instead. */
static=20
Bool mk_preamble__set_NRADDR_to_zero ( void* closureV, IRBB* bb )
{
Modified: trunk/coregrind/pub_core_stacktrace.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/pub_core_stacktrace.h 2006-01-18 04:23:10 UTC (rev 55=
48)
+++ trunk/coregrind/pub_core_stacktrace.h 2006-01-18 04:25:20 UTC (rev 55=
49)
@@ -39,7 +39,12 @@
#include "pub_tool_stacktrace.h"
=20
// Variant that gives a little more control over the stack-walking.
-extern UInt VG_(get_StackTrace2) ( StackTrace ips, UInt n_ips,=20
+// If you know what the thread ID for this stack is, send that
+// as the first parameter, else send zero. This helps generate
+// better stack traces on ppc64-linux and has no effect on other
+// platforms.
+extern UInt VG_(get_StackTrace2) ( ThreadId tid_if_known,
+ StackTrace ips, UInt n_ips,=20
Addr ip, Addr sp, Addr fp, Addr lr,
Addr fp_min, Addr fp_max );
=20
|
|
From: <sv...@va...> - 2006-01-18 04:23:14
|
Author: sewardj
Date: 2006-01-18 04:23:10 +0000 (Wed, 18 Jan 2006)
New Revision: 5548
Log:
Fix an all-platforms bug introduced by the recent overhaul of function
interception and wrapping. This was causing failures matching
function names in suppressions to function names in backtraces when
the latter names were Z-encoded (eg malloc), which typically caused
all leak suppressions to fail because they contain names such as
malloc, which are Z-encoded.
Modified:
trunk/coregrind/m_debuginfo/symtab.c
trunk/coregrind/m_errormgr.c
trunk/coregrind/pub_core_debuginfo.h
Modified: trunk/coregrind/m_debuginfo/symtab.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_debuginfo/symtab.c 2006-01-18 04:20:04 UTC (rev 554=
7)
+++ trunk/coregrind/m_debuginfo/symtab.c 2006-01-18 04:23:10 UTC (rev 554=
8)
@@ -2556,6 +2556,32 @@
/*show offset?*/False );
}
=20
+/* This is only available to core... don't demangle C++ names, but do
+ do Z-demangling, match anywhere in function, and don't show
+ offsets. */
+Bool VG_(get_fnname_Z_demangle_only) ( Addr a, Char* buf, Int nbuf )
+{
+# define N_TMPBUF 4096 /* arbitrary, 4096 =3D=3D ERRTXT_LEN */
+ Char tmpbuf[N_TMPBUF];
+ Bool ok;
+ vg_assert(nbuf > 0);
+ ok =3D get_fnname ( /*demangle*/False, a, tmpbuf, N_TMPBUF,
+ /*match_anywhere_in_fun*/True,=20
+ /*show offset?*/False );
+ tmpbuf[N_TMPBUF-1] =3D 0; /* paranoia */
+ if (!ok)=20
+ return False;
+ /* We have something, at least. Try to Z-demangle it. */
+ ok =3D VG_(maybe_Z_demangle)(tmpbuf, NULL, 0, buf, nbuf, NULL);
+ if (!ok) {
+ /* Didn't Z-demangle, so just return whatever we have. */
+ VG_(strncpy)(buf, tmpbuf, nbuf);
+ }
+ buf[nbuf-1] =3D 0; /* paranoia */
+ return True;
+# undef N_TMPBUF
+}
+
/* Map a code address to the name of a shared object file or the executa=
ble.
Returns False if no idea; otherwise True. Doesn't require debug info=
.
Caller supplies buf and nbuf. */
Modified: trunk/coregrind/m_errormgr.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_errormgr.c 2006-01-18 04:20:04 UTC (rev 5547)
+++ trunk/coregrind/m_errormgr.c 2006-01-18 04:23:10 UTC (rev 5548)
@@ -1110,8 +1110,12 @@
break;=20
=20
case FunName:=20
- // Nb: mangled names used in suppressions
- if (!VG_(get_fnname_nodemangle)(a, caller_name, ERRTXT_LEN))
+ // Nb: mangled names used in suppressions. Do, though,
+ // Z-demangle them, since otherwise it's possible to wind
+ // up comparing "malloc" in the suppression against
+ // "_vgrZU_libcZdsoZa_malloc" in the backtrace, and the
+ // two of them need to be made to match.
+ if (!VG_(get_fnname_Z_demangle_only)(a, caller_name, ERRTXT_=
LEN))
VG_(strcpy)(caller_name, "???");
break;
default: VG_(tool_panic)("supp_matches_callers");
Modified: trunk/coregrind/pub_core_debuginfo.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/pub_core_debuginfo.h 2006-01-18 04:20:04 UTC (rev 554=
7)
+++ trunk/coregrind/pub_core_debuginfo.h 2006-01-18 04:23:10 UTC (rev 554=
8)
@@ -69,6 +69,12 @@
guest_code_addr. Returns 0 if not known. */
extern Addr VG_(get_tocptr) ( Addr guest_code_addr );
=20
+/* This is only available to core... don't demangle C++ names, but do
+ do Z-demangling, match anywhere in function, and don't show
+ offsets. */
+extern
+Bool VG_(get_fnname_Z_demangle_only) ( Addr a, Char* buf, Int nbuf );
+
#endif // __PUB_CORE_DEBUGINFO_H
=20
/*--------------------------------------------------------------------*/
|
|
From: <sv...@va...> - 2006-01-18 04:20:07
|
Author: sewardj
Date: 2006-01-18 04:20:04 +0000 (Wed, 18 Jan 2006)
New Revision: 5547
Log:
To reduce the endless nuisance of multiple different names for "the
frame below main()" screwing up the testsuite, change all known
incarnations of said into a single name, "(below main)".
Modified:
trunk/coregrind/m_demangle/demangle.c
trunk/memcheck/tests/badjump.stderr.exp
trunk/memcheck/tests/badjump2.stderr.exp
Modified: trunk/coregrind/m_demangle/demangle.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_demangle/demangle.c 2006-01-18 04:17:18 UTC (rev 55=
46)
+++ trunk/coregrind/m_demangle/demangle.c 2006-01-18 04:20:04 UTC (rev 55=
47)
@@ -90,6 +90,13 @@
// does leak. But, we can't do much about it, and it's not a disaste=
r,
// so we just let it slide without aborting or telling the user.
=20
+ // Finally, to reduce the endless nuisance of multiple different name=
s=20
+ // for "the frame below main()" screwing up the testsuite, change all
+ // known incarnations of said into a single name, "(below main)".
+ if (0=3D=3DVG_(strcmp)("__libc_start_main", result)
+ || 0=3D=3DVG_(strcmp)("generic_start_main", result))
+ VG_(strncpy_safely)(result, "(below main)", 13);
+
# undef N_ZBUF
}
=20
Modified: trunk/memcheck/tests/badjump.stderr.exp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/tests/badjump.stderr.exp 2006-01-18 04:17:18 UTC (rev =
5546)
+++ trunk/memcheck/tests/badjump.stderr.exp 2006-01-18 04:20:04 UTC (rev =
5547)
@@ -1,13 +1,13 @@
=20
Jump to the invalid address stated on the next line
at 0x........: ???
- by 0x........: __libc_start_main (in /...libc...)
+ by 0x........: (below main) (in /...libc...)
Address 0x........ is not stack'd, malloc'd or (recently) free'd
=20
Process terminating with default action of signal 11 (SIGSEGV)
Access not within mapped region at address 0x........
at 0x........: ???
- by 0x........: __libc_start_main (in /...libc...)
+ by 0x........: (below main) (in /...libc...)
=20
ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
malloc/free: in use at exit: 0 bytes in 0 blocks.
Modified: trunk/memcheck/tests/badjump2.stderr.exp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/tests/badjump2.stderr.exp 2006-01-18 04:17:18 UTC (rev=
5546)
+++ trunk/memcheck/tests/badjump2.stderr.exp 2006-01-18 04:20:04 UTC (rev=
5547)
@@ -1,5 +1,5 @@
Jump to the invalid address stated on the next line
at 0x........: ???
- by 0x........: __libc_start_main (in /...libc...)
+ by 0x........: (below main) (in /...libc...)
Address 0x........ is not stack'd, malloc'd or (recently) free'd
Signal caught, as expected
|
|
From: <sv...@va...> - 2006-01-18 04:17:24
|
Author: sewardj
Date: 2006-01-18 04:17:18 +0000 (Wed, 18 Jan 2006)
New Revision: 5546
Log:
Make these behave correctly on ppc64 ELF.
Modified:
trunk/memcheck/tests/badjump.c
trunk/memcheck/tests/badjump2.c
Modified: trunk/memcheck/tests/badjump.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/tests/badjump.c 2006-01-18 04:16:27 UTC (rev 5545)
+++ trunk/memcheck/tests/badjump.c 2006-01-18 04:17:18 UTC (rev 5546)
@@ -1,6 +1,18 @@
=20
int main ( void )
{
+#if defined(__powerpc64__)
+ /* on ppc64-linux, a function pointer points to a function
+ descriptor, not to the function's entry point. Hence to get
+ uniform behaviour on all supported targets - a jump to 0xE000000
+ - the following is needed. */
+ unsigned long long int fake_fndescr[3];
+ fake_fndescr[0] =3D 0xE000000;
+ fake_fndescr[1] =3D 0;
+ fake_fndescr[2] =3D 0;
+ return ((int(*)(void)) fake_fndescr) ();
+#else
char* p =3D (char*)0xE000000;
return ((int(*)(void)) p) ();
+#endif
}
Modified: trunk/memcheck/tests/badjump2.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/tests/badjump2.c 2006-01-18 04:16:27 UTC (rev 5545)
+++ trunk/memcheck/tests/badjump2.c 2006-01-18 04:17:18 UTC (rev 5546)
@@ -33,8 +33,16 @@
=20
if (__builtin_setjmp(myjmpbuf) =3D=3D 0) {
// Jump to zero; will cause seg fault
+#if defined(__powerpc64__)
+ unsigned long long int fake_fndescr[3];
+ fake_fndescr[0] =3D 0;
+ fake_fndescr[1] =3D 0;
+ fake_fndescr[2] =3D 0;
+ ((void(*)(void)) fake_fndescr) ();
+#else
void (*fn)(void) =3D 0;
fn();
+#endif
fprintf(stderr, "Got here??\n");
} else {
fprintf(stderr, "Signal caught, as expected\n");
|
|
From: <sv...@va...> - 2006-01-18 04:16:31
|
Author: sewardj
Date: 2006-01-18 04:16:27 +0000 (Wed, 18 Jan 2006)
New Revision: 5545
Log:
Valgrind-side handling (fast case) for the ppc64 ELF stack redzone.
Modified:
trunk/memcheck/mc_main.c
Modified: trunk/memcheck/mc_main.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/mc_main.c 2006-01-18 04:15:42 UTC (rev 5544)
+++ trunk/memcheck/mc_main.c 2006-01-18 04:16:27 UTC (rev 5545)
@@ -1006,6 +1006,7 @@
any attempt to access it will elicit an addressing error,
and that's good enough.
*/
+ /* 128 bytes (16 ULongs) is the magic value for ELF amd64. */
if (EXPECTED_TAKEN( len =3D=3D 128
&& VG_IS_8_ALIGNED(base)=20
)) {
@@ -1050,7 +1051,74 @@
}
}
=20
+ /* 288 bytes (36 ULongs) is the magic value for ELF ppc64. */
+ if (EXPECTED_TAKEN( len =3D=3D 288
+ && VG_IS_8_ALIGNED(base)=20
+ )) {
+ /* Now we know the address range is suitably sized and
+ aligned. */
+ UWord a_lo =3D (UWord)base;
+ UWord a_hi =3D (UWord)(base + 287);
+ UWord sec_lo =3D a_lo >> 16;
+ UWord sec_hi =3D a_hi >> 16;
+
+ if (EXPECTED_TAKEN( sec_lo =3D=3D sec_hi=20
+ && sec_lo <=3D N_PRIMARY_MAP
+ )) {
+ /* Now we know that the entire address range falls within a
+ single secondary map, and that that secondary 'lives' in
+ the main primary map. */
+ SecMap* sm =3D primary_map[sec_lo];
+
+ if (EXPECTED_TAKEN( !is_distinguished_sm(sm) )) {
+ /* And finally, now we know that the secondary in question
+ is modifiable. */
+ UWord v_off =3D a_lo & 0xFFFF;
+ ULong* p =3D (ULong*)(&sm->vbyte[v_off]);
+ p[ 0] =3D VGM_WORD64_INVALID;
+ p[ 1] =3D VGM_WORD64_INVALID;
+ p[ 2] =3D VGM_WORD64_INVALID;
+ p[ 3] =3D VGM_WORD64_INVALID;
+ p[ 4] =3D VGM_WORD64_INVALID;
+ p[ 5] =3D VGM_WORD64_INVALID;
+ p[ 6] =3D VGM_WORD64_INVALID;
+ p[ 7] =3D VGM_WORD64_INVALID;
+ p[ 8] =3D VGM_WORD64_INVALID;
+ p[ 9] =3D VGM_WORD64_INVALID;
+ p[10] =3D VGM_WORD64_INVALID;
+ p[11] =3D VGM_WORD64_INVALID;
+ p[12] =3D VGM_WORD64_INVALID;
+ p[13] =3D VGM_WORD64_INVALID;
+ p[14] =3D VGM_WORD64_INVALID;
+ p[15] =3D VGM_WORD64_INVALID;
+ p[16] =3D VGM_WORD64_INVALID;
+ p[17] =3D VGM_WORD64_INVALID;
+ p[18] =3D VGM_WORD64_INVALID;
+ p[19] =3D VGM_WORD64_INVALID;
+ p[20] =3D VGM_WORD64_INVALID;
+ p[21] =3D VGM_WORD64_INVALID;
+ p[22] =3D VGM_WORD64_INVALID;
+ p[23] =3D VGM_WORD64_INVALID;
+ p[24] =3D VGM_WORD64_INVALID;
+ p[25] =3D VGM_WORD64_INVALID;
+ p[26] =3D VGM_WORD64_INVALID;
+ p[27] =3D VGM_WORD64_INVALID;
+ p[28] =3D VGM_WORD64_INVALID;
+ p[29] =3D VGM_WORD64_INVALID;
+ p[30] =3D VGM_WORD64_INVALID;
+ p[31] =3D VGM_WORD64_INVALID;
+ p[32] =3D VGM_WORD64_INVALID;
+ p[33] =3D VGM_WORD64_INVALID;
+ p[34] =3D VGM_WORD64_INVALID;
+ p[35] =3D VGM_WORD64_INVALID;
+ return;
+ }
+ }
+ }
+
/* else fall into slow case */
+ if (0) VG_(printf)("MC_(helperc_MAKE_STACK_UNINIT): "
+ "slow case, %d\n", len);
mc_make_writable(base, len);
}
=20
|
|
From: <sv...@va...> - 2006-01-18 04:15:47
|
Author: sewardj
Date: 2006-01-18 04:15:42 +0000 (Wed, 18 Jan 2006)
New Revision: 5544
Log:
Allow more syscalls.
Modified:
trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
Modified: trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2006-01-17 16:41:34 U=
TC (rev 5543)
+++ trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2006-01-18 04:15:42 U=
TC (rev 5544)
@@ -1194,7 +1194,7 @@
// _____(__NR_lchown, sys_lchown), // 16
// _____(__NR_break, sys_break), // 17
// _____(__NR_oldstat, sys_oldstat), // 18
-// _____(__NR_lseek, sys_lseek), // 19
+ LINX_(__NR_lseek, sys_lseek), // 19
=20
GENX_(__NR_getpid, sys_getpid), // 20
// _____(__NR_mount, sys_mount), // 21
@@ -1204,7 +1204,7 @@
=20
// _____(__NR_stime, sys_stime), // 25
// _____(__NR_ptrace, sys_ptrace), // 26
-// _____(__NR_alarm, sys_alarm), // 27
+ GENX_(__NR_alarm, sys_alarm), // 27
// _____(__NR_oldfstat, sys_oldfstat), // 28
GENX_(__NR_pause, sys_pause), // 29
=20
@@ -1218,7 +1218,7 @@
// _____(__NR_sync, sys_sync), // 36
GENX_(__NR_kill, sys_kill), // 37
// _____(__NR_rename, sys_rename), // 38
-// _____(__NR_mkdir, sys_mkdir), // 39
+ GENX_(__NR_mkdir, sys_mkdir), // 39
=20
// _____(__NR_rmdir, sys_rmdir), // 40
GENXY(__NR_dup, sys_dup), // 41
@@ -1346,7 +1346,7 @@
// _____(__NR_flock, sys_flock), // 143
// _____(__NR_msync, sys_msync), // 144
=20
-// _____(__NR_readv, sys_readv), // 145
+ GENXY(__NR_readv, sys_readv), // 145
GENX_(__NR_writev, sys_writev), // 146
// _____(__NR_getsid, sys_getsid), // 147
// _____(__NR_fdatasync, sys_fdatasync), // 148
|
|
From: <sv...@va...> - 2006-01-18 04:14:58
|
Author: sewardj
Date: 2006-01-18 04:14:52 +0000 (Wed, 18 Jan 2006)
New Revision: 1541
Log:
For ppc64, emit AbiHints from the front end so as to tell tools when
the 288-byte stack should be regarded as having become undefined as
per the ppc64 ELF ABI.
Modified:
trunk/priv/guest-ppc/toIR.c
trunk/priv/host-ppc/isel.c
Modified: trunk/priv/guest-ppc/toIR.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-ppc/toIR.c 2006-01-17 01:48:46 UTC (rev 1540)
+++ trunk/priv/guest-ppc/toIR.c 2006-01-18 04:14:52 UTC (rev 1541)
@@ -46,8 +46,8 @@
=20
/* TODO 18/Nov/05:
=20
- Spot rlwimi cases which are simply left/right shifts and
- emit Shl32/Shr32 accordingly.
+ Spot rld... cases which are simply left/right shifts and emit
+ Shl64/Shr64 accordingly.
=20
Altivec
- datastream insns
@@ -81,6 +81,11 @@
to zero, whereas we keep maximum accuracy. However, using
Non-Java mode would give us more inaccuracy, as our intermediate
results would then be zeroed, too.
+
+ - 64-bit mode: AbiHints for the stack red zone are only emitted for
+ unconditional calls and returns (bl, blr). They should also be
+ emitted for conditional calls and returns, but we don't have a=20
+ way to express that right now. Ah well.
*/
=20
/* "Special" instructions.
@@ -1193,6 +1198,22 @@
}
=20
=20
+/* Generate AbiHints which mark points at which the ELF ppc64 ABI says
+ that the stack red zone (viz, -288(r1) .. -1(r1)) becomes
+ undefined. That is at function calls and returns. Only in 64-bit
+ mode - ELF ppc32 doesn't have this "feature".
+*/
+static void make_redzone_AbiHint ( HChar* who )
+{
+ if (0) vex_printf("AbiHint: %s\n", who);
+ vassert(mode64);
+ stmt( IRStmt_AbiHint(=20
+ binop(Iop_Sub64, getIReg(1), mkU64(288)),=20
+ 288=20
+ ));
+}
+
+
/*------------------------------------------------------------*/
/*--- Helpers for condition codes. ---*/
/*------------------------------------------------------------*/
@@ -4193,8 +4214,11 @@
flag_LK ? "l" : "", flag_AA ? "a" : "", (Addr32)tgt);
}
=20
- if (flag_LK)
+ if (flag_LK) {
putGST( PPC_GST_LR, e_nia );
+ if (mode64)
+ make_redzone_AbiHint( "branch-and-link (unconditional call)"=
);
+ }
=20
if (resteerOkFn( callback_opaque, tgt )) {
dres->whatNext =3D Dis_Resteer;
@@ -4273,10 +4297,11 @@
irbb->next =3D mkexpr(lr_old);
break;
=20
- case 0x010: // bclr (Branch Cond. to Link Register, PPC32 p365)=20
-
+ case 0x010: { // bclr (Branch Cond. to Link Register, PPC32 p365)=20
+ Bool vanilla_return =3D False;
if ((BO & 0x14 /* 1z1zz */) =3D=3D 0x14 && flag_LK =3D=3D 0) {
DIP("blr\n");
+ vanilla_return =3D True;
} else {
DIP("bclr%s 0x%x, 0x%x\n", flag_LK ? "l" : "", BO, BI);
}
@@ -4303,13 +4328,16 @@
Ijk_Boring,
c_nia ));
=20
+ if (vanilla_return && mode64)
+ make_redzone_AbiHint( "branch-to-lr (unconditional return)" =
);
+
/* blrl is pretty strange; it's like a return that sets the
return address of its caller to the insn following this
one. Mark it as a return. */
irbb->jumpkind =3D Ijk_Ret; /* was flag_LK ? Ijk_Call : Ijk_Re=
t; */
irbb->next =3D mkexpr(lr_old);
break;
- =20
+ }
default:
vex_printf("dis_int_branch(ppc)(opc2)\n");
return False;
Modified: trunk/priv/host-ppc/isel.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/host-ppc/isel.c 2006-01-17 01:48:46 UTC (rev 1540)
+++ trunk/priv/host-ppc/isel.c 2006-01-18 04:14:52 UTC (rev 1541)
@@ -4455,6 +4455,12 @@
case Ist_IMark:
return;
=20
+ /* --------- ABI HINT --------- */
+ /* These have no meaning (denotation in the IR) and so we ignore
+ them ... if any actually made it this far. */
+ case Ist_AbiHint:
+ return;
+
/* --------- NO-OP --------- */
/* Fairly self-explanatory, wouldn't you say? */
case Ist_NoOp:
|
|
From: <js...@ac...> - 2006-01-18 04:01:32
|
Nightly build on phoenix ( SuSE 10.0 ) started at 2006-01-18 03:30:02 GMT Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 215 tests, 6 stderr failures, 1 stdout failure ================= memcheck/tests/leak-tree (stderr) memcheck/tests/nanoleak_supp (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: <js...@ac...> - 2006-01-18 03:58:12
|
Nightly build on g5 ( YDL 4.0, ppc970 ) started at 2006-01-18 04:40:00 CET Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 185 tests, 46 stderr failures, 7 stdout failures ================= memcheck/tests/badaddrvalue (stderr) memcheck/tests/badfree-2trace (stderr) memcheck/tests/badfree (stderr) memcheck/tests/badjump (stderr) memcheck/tests/badjump2 (stderr) memcheck/tests/badpoll (stderr) memcheck/tests/badrw (stderr) memcheck/tests/custom_alloc (stderr) memcheck/tests/doublefree (stderr) memcheck/tests/error_counts (stdout) memcheck/tests/errs1 (stderr) memcheck/tests/exitprog (stderr) memcheck/tests/fprw (stderr) memcheck/tests/fwrite (stderr) memcheck/tests/inline (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/malloc1 (stderr) memcheck/tests/malloc2 (stderr) memcheck/tests/memalign_test (stderr) memcheck/tests/mempool (stderr) memcheck/tests/mismatches (stderr) memcheck/tests/mmaptest (stderr) memcheck/tests/nanoleak (stderr) memcheck/tests/overlap (stderr) memcheck/tests/partial_load_dflt (stderr) memcheck/tests/partial_load_ok (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/post-syscall (stdout) memcheck/tests/post-syscall (stderr) memcheck/tests/realloc3 (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/stack_changes (stdout) memcheck/tests/stack_changes (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/supp1 (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/suppfree (stderr) memcheck/tests/trivialleak (stderr) memcheck/tests/wrap5 (stdout) memcheck/tests/wrap5 (stderr) memcheck/tests/wrap6 (stdout) memcheck/tests/writev (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/sem (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 185 tests, 48 stderr failures, 7 stdout failures ================= memcheck/tests/badaddrvalue (stderr) memcheck/tests/badfree-2trace (stderr) memcheck/tests/badfree (stderr) memcheck/tests/badjump (stderr) memcheck/tests/badjump2 (stderr) memcheck/tests/badpoll (stderr) memcheck/tests/badrw (stderr) memcheck/tests/custom_alloc (stderr) memcheck/tests/doublefree (stderr) memcheck/tests/error_counts (stdout) memcheck/tests/errs1 (stderr) memcheck/tests/exitprog (stderr) memcheck/tests/fprw (stderr) memcheck/tests/fwrite (stderr) memcheck/tests/inline (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/malloc1 (stderr) memcheck/tests/malloc2 (stderr) memcheck/tests/memalign_test (stderr) memcheck/tests/mempool (stderr) memcheck/tests/mismatches (stderr) memcheck/tests/mmaptest (stderr) memcheck/tests/nanoleak (stderr) memcheck/tests/overlap (stderr) memcheck/tests/partial_load_dflt (stderr) memcheck/tests/partial_load_ok (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/post-syscall (stdout) memcheck/tests/post-syscall (stderr) memcheck/tests/realloc3 (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/sigprocmask (stderr) memcheck/tests/stack_changes (stdout) memcheck/tests/stack_changes (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/supp1 (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/suppfree (stderr) memcheck/tests/trivialleak (stderr) memcheck/tests/wrap5 (stdout) memcheck/tests/wrap5 (stderr) memcheck/tests/wrap6 (stdout) memcheck/tests/writev (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/sem (stderr) none/tests/shell_valid2 (stderr) none/tests/shell_valid3 (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Wed Jan 18 04:48:41 2006 --- new.short Wed Jan 18 04:58:06 2006 *************** *** 8,10 **** ! == 185 tests, 48 stderr failures, 7 stdout failures ================= memcheck/tests/badaddrvalue (stderr) --- 8,10 ---- ! == 185 tests, 46 stderr failures, 7 stdout failures ================= memcheck/tests/badaddrvalue (stderr) *************** *** 62,65 **** none/tests/sem (stderr) - none/tests/shell_valid2 (stderr) - none/tests/shell_valid3 (stderr) --- 62,63 ---- |
|
From: Tom H. <to...@co...> - 2006-01-18 03:43:04
|
Nightly build on dunsmere ( athlon, Fedora Core 4 ) started at 2006-01-18 03:30:05 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 217 tests, 8 stderr failures, 2 stdout failures ================= memcheck/tests/leak-tree (stderr) memcheck/tests/mempool (stderr) memcheck/tests/nanoleak_supp (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/sse1_memory (stdout) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2006-01-18 03:33:32
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2006-01-18 03:00:19 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 236 tests, 6 stderr failures, 1 stdout failure ================= memcheck/tests/nanoleak_supp (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/sse1_memory (stdout) none/tests/amd64/faultstatus (stderr) none/tests/fdleak_fcntl (stderr) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2006-01-18 03:30:46
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2006-01-18 03:15:03 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 216 tests, 18 stderr failures, 2 stdout failures ================= memcheck/tests/addressable (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/erringfds (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/match-overrun (stderr) memcheck/tests/mempool (stderr) memcheck/tests/nanoleak_supp (stderr) memcheck/tests/partial_load_dflt (stderr) memcheck/tests/partial_load_ok (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/sigkill (stderr) memcheck/tests/stack_changes (stderr) memcheck/tests/x86/sse1_memory (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2006-01-18 03:24:19
|
Nightly build on dellow ( x86_64, Fedora Core 4 ) started at 2006-01-18 03:10:08 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 236 tests, 6 stderr failures, 2 stdout failures ================= memcheck/tests/nanoleak_supp (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/sse1_memory (stdout) none/tests/amd64/faultstatus (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2006-01-18 03:18:59
|
Nightly build on aston ( x86_64, Fedora Core 3 ) started at 2006-01-18 03:05:06 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 236 tests, 8 stderr failures, 2 stdout failures ================= memcheck/tests/nanoleak_supp (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) none/tests/amd64/faultstatus (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |