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
(15) |
|
2
(24) |
3
(16) |
4
(17) |
5
(11) |
6
(20) |
7
(11) |
8
(15) |
|
9
(10) |
10
(9) |
11
(10) |
12
(24) |
13
(16) |
14
(15) |
15
(8) |
|
16
(13) |
17
(15) |
18
(35) |
19
(11) |
20
(10) |
21
(11) |
22
(9) |
|
23
(10) |
24
(9) |
25
(9) |
26
(9) |
27
(9) |
28
(12) |
29
(16) |
|
30
(12) |
|
|
|
|
|
|
|
From: <sv...@va...> - 2006-04-12 22:53:27
|
Author: njn
Date: 2006-04-12 23:53:23 +0100 (Wed, 12 Apr 2006)
New Revision: 5846
Log:
Clarify the Helgrind-doesn't-work message.
Modified:
trunk/helgrind/hg_main.c
Modified: trunk/helgrind/hg_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/helgrind/hg_main.c 2006-04-12 17:15:35 UTC (rev 5845)
+++ trunk/helgrind/hg_main.c 2006-04-12 22:53:23 UTC (rev 5846)
@@ -3394,6 +3394,8 @@
" platforms introduced in Valgrind 3.0.0\n"
" (b) we need to get thread operation tracking working again after\n"
" the changes added in Valgrind 2.4.0\n"
+" If you want to use Helgrind, you'll have to use Valgrind 2.2.0, which =
is\n"
+" the most recent Valgrind release that contains a working Helgrind.\n"
"\n"
"Sorry for the inconvenience. Let us know if this is a problem for you.=
\n");
VG_(exit)(1);
|
|
From: <sv...@va...> - 2006-04-12 17:30:59
|
Author: sewardj
Date: 2006-04-12 18:30:46 +0100 (Wed, 12 Apr 2006)
New Revision: 1603
Log:
Allow 'repe scas' (possible fix for #124892).
Modified:
trunk/priv/guest-x86/toIR.c
Modified: trunk/priv/guest-x86/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-x86/toIR.c 2006-04-08 16:15:53 UTC (rev 1602)
+++ trunk/priv/guest-x86/toIR.c 2006-04-12 17:30:46 UTC (rev 1603)
@@ -11779,11 +11779,12 @@
dis_REP_op ( X86CondAlways, dis_STOS, sz, eip_orig,=20
guest_EIP_bbstart+delta, "rep stos"=
);
break;
-//--=20
-//-- case 0xAE: sz =3D 1; /* REPE SCAS<sz> */
-//-- case 0xAF:=20
-//-- dis_REP_op ( cb, CondZ, dis_SCAS, sz, eip_orig, eip, "repe=
scas" );
-//-- break;
+
+ case 0xAE: sz =3D 1; /* REPE SCAS<sz> */
+ case 0xAF:=20
+ dis_REP_op ( X86CondZ, dis_SCAS, sz, eip_orig,=20
+ guest_EIP_bbstart+delta, "repe scas" );
+ break;
=20
case 0x90: /* REP NOP (PAUSE) */
/* a hint to the P4 re spin-wait loop */
|
|
From: <sv...@va...> - 2006-04-12 17:15:46
|
Author: sewardj
Date: 2006-04-12 18:15:35 +0100 (Wed, 12 Apr 2006)
New Revision: 5845
Log:
Recent GCCs (3.4+ at least) optimize static unused functions out, so
making VALGRIND_PRINTF and VALGRIND_PRINTF_BACKTRACE static and
attribute unused proved to be much better than always compiling it as
exported weak function. (Jakub Jelinek)
Modified:
trunk/include/valgrind.h
Modified: trunk/include/valgrind.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/include/valgrind.h 2006-04-12 13:41:51 UTC (rev 5844)
+++ trunk/include/valgrind.h 2006-04-12 17:15:35 UTC (rev 5845)
@@ -2338,10 +2338,11 @@
=20
#else /* NVALGRIND */
=20
-int VALGRIND_PRINTF(const char *format, ...)
- __attribute__((format(__printf__, 1, 2)));
-__attribute__((weak))
-int
+/* Modern GCC will optimize the static routine out if unused,
+ and unused attribute will shut down warnings about it. */
+static int VALGRIND_PRINTF(const char *format, ...)
+ __attribute__((format(__printf__, 1, 2), __unused__));
+static int
VALGRIND_PRINTF(const char *format, ...)
{
unsigned long _qzz_res;
@@ -2354,10 +2355,9 @@
return (int)_qzz_res;
}
=20
-int VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
- __attribute__((format(__printf__, 1, 2)));
-__attribute__((weak))
-int
+static int VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
+ __attribute__((format(__printf__, 1, 2), __unused__));
+static int
VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
{
unsigned long _qzz_res;
|
|
From: Tom H. <to...@co...> - 2006-04-12 14:21:29
|
In message <200...@ac...>
Julian Seward <js...@ac...> wrote:
> I wasn't clear if this is a special version for debugging, or is this
> definition always used? If yes, then does __libc_message abort the
> program?
If the first argument (do_abort) is non-zero then yes it does. You
can find __libc_message in sysdeps/unix/sysv/linux/libc_fatal.c in
the glibc source.
> I see you've switched one of your nightly build machines to FC5-amd64,
> which is good.
Yep. I upgraded my workstation at work to FC5 which gave that - my
home machine has also gone to FC5 which gives us a 32 bit build. I
managed to find other FC4 boxes so we still have 32 and 64 bit builds
of that as well.
Tom
--
Tom Hughes (to...@co...)
http://www.compton.nu/
|
|
From: Julian S. <js...@ac...> - 2006-04-12 14:11:41
|
> __strcpy_chk is a checked version of strcpy - it takes an extra
> argument which is the length of the target buffer and if that would
> be overflowed it calls __chk_fail to abort the program I believe.
Yes. We could easily enough redirect it to a copy of the function
in glibc's sysdeps/generic/strcpy_chk.c (and that would be a
preferable solution). It's just that I couldn't figure out what
__chk_fail() should be.
debug/chk_fail.c has this:
void
__attribute__ ((noreturn))
__chk_fail (void)
{
/* The loop is added only to keep gcc happy. */
while (1)
__libc_message (1, "*** buffer overflow detected ***: %s terminated\n",
__libc_argv[0] ?: "<unknown>");
}
I wasn't clear if this is a special version for debugging, or is this
definition always used? If yes, then does __libc_message abort the
program?
> The __strcpy_chk calls are generated automagically by gcc if you
> compile with some special option when you call strcpy and gcc can
> work out the size of the target buffer (because it is a local on
> the stack or something).
Ah, ok. I'd never come across it before today.
I see you've switched one of your nightly build machines to FC5-amd64,
which is good.
J
|
|
From: Tom H. <to...@co...> - 2006-04-12 14:03:35
|
In message <200...@ja...>
sv...@va... wrote:
> Add a suppression for yet another glibc string function: __strcpy_chk.
> We really ought intercept/replace this, and that would be easy, except
> __strcpy_chk uses __chk_fail and I haven't figured out what that
> is/does.
__strcpy_chk is a checked version of strcpy - it takes an extra
argument which is the length of the target buffer and if that would
be overflowed it calls __chk_fail to abort the program I believe.
The __strcpy_chk calls are generated automagically by gcc if you
compile with some special option when you call strcpy and gcc can
work out the size of the target buffer (because it is a local on
the stack or something).
Tom
--
Tom Hughes (to...@co...)
http://www.compton.nu/
|
|
From: <sv...@va...> - 2006-04-12 13:42:09
|
Author: sewardj
Date: 2006-04-12 14:41:51 +0100 (Wed, 12 Apr 2006)
New Revision: 5844
Log:
Add a suppression for yet another glibc string function: __strcpy_chk.
We really ought intercept/replace this, and that would be easy, except
__strcpy_chk uses __chk_fail and I haven't figured out what that
is/does.
Modified:
trunk/glibc-2.4.supp
Modified: trunk/glibc-2.4.supp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=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/glibc-2.4.supp 2006-04-12 11:42:54 UTC (rev 5843)
+++ trunk/glibc-2.4.supp 2006-04-12 13:41:51 UTC (rev 5844)
@@ -61,6 +61,14 @@
obj:/lib*/libc-2.3.90.so
}
=20
+{
+ Fedora-Core-5-__strcpy_chk-64bit-hack-TODO-fix-this-properly
+ Memcheck:Addr8
+ fun:__strcpy_chk
+ obj:/usr/lib64/libX11.so.6.2.0
+ obj:/usr/lib64/libX11.so.6.2.0
+}
+
##----------------------------------------------------------------------=
##
{
glibc-2.3.x-on-SUSE-10.1-(PPC)-1
|
|
From: <js...@ac...> - 2006-04-12 12:05:22
|
Nightly build on minnie ( SuSE 10.0, ppc32 ) started at 2006-04-12 02:00:01 BST 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 == 203 tests, 11 stderr failures, 5 stdout failures, 0 posttest failures == memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/mempool (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/sigaltstack (stderr) memcheck/tests/stack_changes (stdout) memcheck/tests/stack_changes (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/mremap (stderr) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-fp (stderr) none/tests/ppc32/test_fx (stdout) none/tests/ppc32/test_fx (stderr) none/tests/ppc32/test_gx (stdout) |
|
From: <sv...@va...> - 2006-04-12 11:43:02
|
Author: sewardj
Date: 2006-04-12 12:42:54 +0100 (Wed, 12 Apr 2006)
New Revision: 5843
Log:
On x86, don't use x87 registers for 8-byte FP loads/stores; instead
use an mmx register (which is the same thing in disguise) since mmx
loads/stores are guaranteed to be the identity. This should fix
failures of this test on x86-linux.
Modified:
trunk/memcheck/tests/sh-mem-random.c
Modified: trunk/memcheck/tests/sh-mem-random.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/sh-mem-random.c 2006-04-12 11:10:46 UTC (rev 584=
2)
+++ trunk/memcheck/tests/sh-mem-random.c 2006-04-12 11:42:54 UTC (rev 584=
3)
@@ -18,6 +18,8 @@
typedef float F4;
typedef double F8;
=20
+typedef unsigned long UWord;
+
#define PAGE_SIZE 4096ULL
=20
=20
@@ -169,7 +171,29 @@
case 4: { // F8
if (src+8 >=3D N_BYTES || dst+8 >=3D N_BYTES)=20
goto tryagain;
+#if defined(__i386__)
+ /* Copying via an x87 register causes the test to fail,
+ because (I think) some obscure values that are FP
+ denormals get changed during the copy due to the FPU
+ normalising, or rounding, or whatever, them. This
+ causes them to no longer bit-for-bit match the
+ accompanying metadata. Yet we still need to do a
+ genuine 8-byte load/store to test the relevant memcheck
+ {LOADV8,STOREV8} routines. Hence use the MMX registers
+ instead, as copying through them should be
+ straightforward.. */
+ __asm__ __volatile__(
+ "movq (%1), %%mm2\n\t"
+ "movq %%mm2, (%0)\n\t"
+ "emms"
+ : : "r"(arr+dst), "r"(arr+src) : "memory"
+ );
+#else
+ /* Straightforward. On amd64, this gives a load/store of
+ the bottom half of an xmm register. On ppc32/64 this
+ is a straighforward load/store of an FP register. */
*(F8*)(arr+dst) =3D *(F8*)(arr+src);
+#endif
mv8f++;
break;
}
@@ -208,7 +232,9 @@
// 64-bit platform.
int tries;
int nbytes_p;
- U1* huge_addr =3D (U1*)0x6600000000; // 408GB
+ // (U1*)(UWord)constULL funny casting to keep gcc quiet on
+ // 32-bit platforms
+ U1* huge_addr =3D (U1*)(UWord)0x6600000000ULL; // 408GB
// Note, kernel 2.6.? on Athlon64 refuses fixed mmap requests
// at above 512GB.
=20
|
|
From: Josef W. <Jos...@gm...> - 2006-04-12 11:27:19
|
On Wednesday 12 April 2006 05:11, L. David Baron wrote:
> > That said, it looks wrong that callgrinds output is dependent on the
> > prelink status of the shared libraries. So if libraries are relayouted
> > by a newer prelink run afterwards, the assembler annotation isn't
> > working any longer for an old callgrind output...
> > Hmmm... but I do not see a better way; KCachegrind would have to look
> > up the prelink offset and do address correction itself if we wanted to
> > store the file offset in callgrinds output. That seems ugly, and changes
> > the format semantics in a subtle way.
>
> It probably wouldn't be too hard to do -- you can get that information
> with readelf if necessary: it's essentially
> readelf -l $LIBRARY | grep -m 1 LOAD | awk '{ print $3 }'
>
> But it would require a change in the file format. Perhaps it's worth
> adding to a list of things to do if it becomes worthwhile to change the
> file format.
After some thought, I think it is better to keep it as it is now.
In my reply above I forgot that a ELF binary itself is always already
relocated to the load address.
Josef
>
> -David
>
|
|
From: Julian S. <js...@ac...> - 2006-04-12 11:21:15
|
> On Tue, 11 Apr 2006, L. David Baron wrote: > > In any case, what needs to happen for the patch to get in? > > Generally speaking, Julian, Tom or I need to look at it and decide to check > it in. And our time is limited, so not everything that is posted gets > considered, unfortunately. I had been following the David - Josef discussion on this. My main concern with this one is that it doesn't break the debuginfo reader in some subtle way, but so far it looks OK on the 4 machines I tested it on. J |
|
From: Nicholas N. <nj...@cs...> - 2006-04-12 11:11:35
|
On Fri, 7 Apr 2006, Vince Weaver wrote: > I've been working on a few plugins that generate memory traces of > 2GB. > So this small patch just adds VKI_O_LARGEFILE so that I can > VG_(open) files with this flag and thus have files more than 2GB. Thanks. I just committed a modified version of this -- the constant needed to be added for alll the platforms, not just x86. Nick |
|
From: <sv...@va...> - 2006-04-12 11:11:13
|
Author: njn Date: 2006-04-12 12:10:46 +0100 (Wed, 12 Apr 2006) New Revision: 5842 Log: Add the O_LARGEFILE constant so people can use it when writing tools that generate large trace files (> 2GB). Modified: trunk/include/vki-amd64-linux.h trunk/include/vki-ppc32-linux.h trunk/include/vki-ppc64-linux.h trunk/include/vki-x86-linux.h Modified: trunk/include/vki-amd64-linux.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/include/vki-amd64-linux.h 2006-04-12 10:08:05 UTC (rev 5841) +++ trunk/include/vki-amd64-linux.h 2006-04-12 11:10:46 UTC (rev 5842) @@ -236,6 +236,7 @@ #define VKI_O_TRUNC 01000 /* not fcntl */ #define VKI_O_APPEND 02000 #define VKI_O_NONBLOCK 04000 +#define VKI_O_LARGEFILE 0100000 =20 #define VKI_F_DUPFD 0 /* dup */ #define VKI_F_GETFD 1 /* get close_on_exec */ Modified: trunk/include/vki-ppc32-linux.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/include/vki-ppc32-linux.h 2006-04-12 10:08:05 UTC (rev 5841) +++ trunk/include/vki-ppc32-linux.h 2006-04-12 11:10:46 UTC (rev 5842) @@ -289,6 +289,7 @@ #define VKI_O_TRUNC 01000 /* not fcntl */ #define VKI_O_APPEND 02000 #define VKI_O_NONBLOCK 04000 +#define VKI_O_LARGEFILE 0200000 =20 #define VKI_F_DUPFD 0 /* dup */ #define VKI_F_GETFD 1 /* get close_on_exec */ Modified: trunk/include/vki-ppc64-linux.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/include/vki-ppc64-linux.h 2006-04-12 10:08:05 UTC (rev 5841) +++ trunk/include/vki-ppc64-linux.h 2006-04-12 11:10:46 UTC (rev 5842) @@ -345,6 +345,7 @@ #define VKI_O_TRUNC 01000 /* not fcntl */ #define VKI_O_APPEND 02000 #define VKI_O_NONBLOCK 04000 +#define VKI_O_LARGEFILE 0200000 =20 #define VKI_F_DUPFD 0 /* dup */ #define VKI_F_GETFD 1 /* get close_on_exec */ Modified: trunk/include/vki-x86-linux.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/include/vki-x86-linux.h 2006-04-12 10:08:05 UTC (rev 5841) +++ trunk/include/vki-x86-linux.h 2006-04-12 11:10:46 UTC (rev 5842) @@ -268,6 +268,7 @@ #define VKI_O_TRUNC 01000 /* not fcntl */ #define VKI_O_APPEND 02000 #define VKI_O_NONBLOCK 04000 +#define VKI_O_LARGEFILE 0100000 =20 #define VKI_F_DUPFD 0 /* dup */ #define VKI_F_GETFD 1 /* get close_on_exec */ |
|
From: Nicholas N. <nj...@cs...> - 2006-04-12 11:09:19
|
On Tue, 11 Apr 2006, L. David Baron wrote: > In any case, what needs to happen for the patch to get in? Generally speaking, Julian, Tom or I need to look at it and decide to check it in. And our time is limited, so not everything that is posted gets considered, unfortunately. Nick |
|
From: Julian S. <js...@ac...> - 2006-04-12 10:11:28
|
On Wednesday 12 April 2006 04:11, L. David Baron wrote: > In any case, what needs to happen for the patch to get in? Committed. Let's see what the overnight builds say. I might add some parts of your original posting in this thread as comments. J |
|
From: <sv...@va...> - 2006-04-12 10:08:24
|
Author: sewardj
Date: 2006-04-12 11:08:05 +0100 (Wed, 12 Apr 2006)
New Revision: 5841
Log:
Properly handle external debuginfo (.gnu_debuglink) for stripped and
prelinked libraries (patch from L. David Baron).
Modified:
trunk/coregrind/m_debuginfo/priv_readdwarf.h
trunk/coregrind/m_debuginfo/priv_readstabs.h
trunk/coregrind/m_debuginfo/priv_storage.h
trunk/coregrind/m_debuginfo/readdwarf.c
trunk/coregrind/m_debuginfo/readelf.c
trunk/coregrind/m_debuginfo/readstabs.c
Modified: trunk/coregrind/m_debuginfo/priv_readdwarf.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/m_debuginfo/priv_readdwarf.h 2006-04-09 01:23:29 UTC =
(rev 5840)
+++ trunk/coregrind/m_debuginfo/priv_readdwarf.h 2006-04-12 10:08:05 UTC =
(rev 5841)
@@ -43,7 +43,7 @@
-------------------- */
extern
void ML_(read_debuginfo_dwarf2)
- ( struct _SegInfo* si,
+ ( struct _SegInfo* si, OffT debug_offset,
UChar* debuginfo, Int debug_info_sz, /* .debug_info */
UChar* debugabbrev, /* .debug_abbrev */
UChar* debugline, Int debug_line_sz, /* .debug_line */
Modified: trunk/coregrind/m_debuginfo/priv_readstabs.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/m_debuginfo/priv_readstabs.h 2006-04-09 01:23:29 UTC =
(rev 5840)
+++ trunk/coregrind/m_debuginfo/priv_readstabs.h 2006-04-12 10:08:05 UTC =
(rev 5841)
@@ -41,7 +41,7 @@
Stabs reader
-------------------- */
extern
-void ML_(read_debuginfo_stabs) ( struct _SegInfo* si,
+void ML_(read_debuginfo_stabs) ( struct _SegInfo* si, OffT debug_offset,
UChar* stabC, Int stab_sz,
UChar* stabstr, Int stabstr_sz );
=20
Modified: trunk/coregrind/m_debuginfo/priv_storage.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/m_debuginfo/priv_storage.h 2006-04-09 01:23:29 UTC (r=
ev 5840)
+++ trunk/coregrind/m_debuginfo/priv_storage.h 2006-04-12 10:08:05 UTC (r=
ev 5841)
@@ -170,8 +170,10 @@
UChar strtab[SEGINFO_STRCHUNKSIZE];
} *strchunks;
=20
- /* 'offset' is what we need to add to symbol table entries to get
- the location of that symbol in the running image. */
+ /* 'offset' is what needs to be added to an address in the address
+ space of the library as stored on disk (which is not 0-based for
+ executables or prelinked libraries) to get an address in memory
+ for the object loaded at 'start' */
OffT offset;
=20
/* Bounds of data, BSS, PLT, GOT and OPD (for ppc64-linux) so that
Modified: trunk/coregrind/m_debuginfo/readdwarf.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/readdwarf.c 2006-04-09 01:23:29 UTC (rev =
5840)
+++ trunk/coregrind/m_debuginfo/readdwarf.c 2006-04-12 10:08:05 UTC (rev =
5841)
@@ -301,7 +301,7 @@
/* Handled an extend line op. Returns true if this is the end
of sequence. */
static=20
-Int process_extended_line_op( struct _SegInfo* si,=20
+Int process_extended_line_op( struct _SegInfo* si, OffT debug_offset,
WordArray* filenames,=20
WordArray* dirnames,=20
WordArray* fnidx2dir,=20
@@ -330,7 +330,7 @@
switch (op_code) {
case DW_LNE_end_sequence:
if (0) VG_(printf)("1001: si->o %p, smr.a %p\n",=20
- si->offset, state_machine_regs.address );
+ debug_offset, state_machine_regs.address );
/* JRS: added for compliance with spec; is pointless due to
reset_state_machine below */
state_machine_regs.end_sequence =3D 1;=20
@@ -343,8 +343,8 @@
state_machine_regs.last_file),=20
lookupDir( state_machine_regs.last_file,
fnidx2dir, dirnames ),
- si->offset + state_machine_regs.last_address,=20
- si->offset + state_machine_regs.address,=20
+ debug_offset + state_machine_regs.last_address,=20
+ debug_offset + state_machine_regs.address,=20
state_machine_regs.last_line, 0
);
}
@@ -388,7 +388,7 @@
* Output: - si debug info structures get updated
*/
static=20
-void read_dwarf2_lineblock ( struct _SegInfo* si,=20
+void read_dwarf2_lineblock ( struct _SegInfo* si, OffT debug_offset,
UnitInfo* ui,=20
UChar* theBlock,=20
Int noLargerThan )
@@ -606,7 +606,7 @@
if (0) VG_(printf)("smr.a +=3D %p\n", adv );
adv =3D (op_code % info.li_line_range) + info.li_line_base;
if (0) VG_(printf)("1002: si->o %p, smr.a %p\n",=20
- si->offset, state_machine_regs.address );
+ debug_offset, state_machine_regs.address );
state_machine_regs.line +=3D adv;
=20
if (state_machine_regs.is_stmt) {
@@ -618,8 +618,8 @@
state_machine_regs.last_file )=
,
lookupDir( state_machine_regs.last_file,
&fnidx2dir, &dirnames ),
- si->offset + state_machine_regs.last_address,=20
- si->offset + state_machine_regs.address,=20
+ debug_offset + state_machine_regs.last_address,=20
+ debug_offset + state_machine_regs.address,=20
state_machine_regs.last_line,=20
0
);
@@ -634,13 +634,13 @@
switch (op_code) {
case DW_LNS_extended_op:
data +=3D process_extended_line_op (
- si, &filenames, &dirnames, &fnidx2dir,
+ si, debug_offset, &filenames, &dirnames, &fnidx2d=
ir,
data, info.li_default_is_stmt);
break;
=20
case DW_LNS_copy:
if (0) VG_(printf)("1002: si->o %p, smr.a %p\n",=20
- si->offset, state_machine_regs.address );
+ debug_offset, state_machine_regs.address =
);
if (state_machine_regs.is_stmt) {
/* only add a statement if there was a previous boundary =
*/
if (state_machine_regs.last_address)=20
@@ -650,8 +650,8 @@
state_machine_regs.last_fil=
e ),
lookupDir( state_machine_regs.last_file,
&fnidx2dir, &dirnames ),
- si->offset + state_machine_regs.last_address,=20
- si->offset + state_machine_regs.address,
+ debug_offset + state_machine_regs.last_address,=20
+ debug_offset + state_machine_regs.address,
state_machine_regs.last_line,=20
0
);
@@ -950,7 +950,7 @@
* Output: update si to contain all the dwarf2 debug infos
*/
void ML_(read_debuginfo_dwarf2)=20
- ( struct _SegInfo* si,
+ ( struct _SegInfo* si, OffT debug_offset,
UChar* debuginfo, Int debug_info_sz, /* .debug_info */
UChar* debugabbrev, /* .debug_abbrev */
UChar* debugline, Int debug_line_sz, /* .debug_line */
@@ -1006,7 +1006,7 @@
VG_(printf)("debug_line_sz %d, ui.stmt_list %lld %s\n",=20
debug_line_sz, ui.stmt_list, ui.name );
/* Read the .debug_line block for this compile unit */
- read_dwarf2_lineblock( si, &ui, debugline + ui.stmt_list,=20
+ read_dwarf2_lineblock( si, debug_offset, &ui, debugline + ui.stmt_=
list,=20
debug_line_sz - ui.stmt_list );
}
}
Modified: trunk/coregrind/m_debuginfo/readelf.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/readelf.c 2006-04-09 01:23:29 UTC (rev 58=
40)
+++ trunk/coregrind/m_debuginfo/readelf.c 2006-04-12 10:08:05 UTC (rev 58=
41)
@@ -192,6 +192,7 @@
Char* sym_name, /* name */
Addr sym_addr, /* declared address */
UChar* opd_filea, /* oimage of .opd sec (ppc64-linux only) *=
/
+ OffT opd_offset, /* base address assumed in oimage */
/* OUTPUTS */
Char** sym_name_out, /* name we should record */
Addr* sym_addr_out, /* addr we should record */
@@ -293,8 +294,8 @@
Int offset_in_opd;
ULong* fn_descr;
=20
- if (0) VG_(printf)("opdXXX: si->offset %p, sym_addr %p\n",=20
- (void*)(si->offset), (void*)sym_addr);
+ if (0) VG_(printf)("opdXXX: opd_offset %p, sym_addr %p\n",=20
+ (void*)(opd_offset), (void*)sym_addr);
=20
if (!VG_IS_8_ALIGNED(sym_addr)) {
TRACE_SYMTAB(" ignore -- not 8-aligned: %s\n", sym_name);
@@ -323,17 +324,13 @@
offset_in_opd, fn_descr);
if (0) VG_(printf)("opdXXZ: *fn_descr %p\n", (void*)(fn_descr[0]))=
;
=20
- sym_addr =3D fn_descr[0];
+ /* opd_offset is the difference between si->start (where the
+ library got mapped) and the address space used for addresses
+ within the library file. */
=20
- /* Hopefully sym_addr is now an offset into the text section.
- Problem is, where did the text section get mapped? Well,
- this SegInfo (si) exists because a text section got mapped,
- and it got mapped to si->start. Hence add si->start to the
- sym_addr to get the real vma. */
-
- sym_addr +=3D si->offset;
+ sym_addr =3D fn_descr[0] + opd_offset;
*sym_addr_out =3D sym_addr;
- *sym_tocptr_out =3D fn_descr[1] + si->offset;
+ *sym_tocptr_out =3D fn_descr[1] + opd_offset;
*from_opd_out =3D True;
is_in_opd =3D True;
=20
@@ -360,7 +357,9 @@
ignore it. */
if (*sym_addr_out + *sym_size_out <=3D si->start
|| *sym_addr_out >=3D si->start+si->size) {
- TRACE_SYMTAB( " ignore -- outside mapped range\n" );
+ TRACE_SYMTAB( "ignore -- %p .. %p outside mapped range %p .. %p\n"=
,
+ *sym_addr_out, *sym_addr_out + *sym_size_out,
+ si->start, si->start+si->size);
return False;
}
=20
@@ -386,9 +385,9 @@
__attribute__((unused)) /* not referred to on all targets */
void read_elf_symtab__normal(=20
struct _SegInfo* si, UChar* tab_name,
- ElfXX_Sym* o_symtab, UInt o_symtab_sz,
+ ElfXX_Sym* o_symtab, UInt o_symtab_sz, OffT o_symtab_offset,
UChar* o_strtab, UInt o_strtab_sz,
- UChar* opd_filea /* ppc64-linux only */=20
+ UChar* opd_filea, OffT opd_offset /* ppc64-linux only */=20
)
{
Int i;
@@ -416,12 +415,13 @@
for (i =3D 1; i < (Int)(o_symtab_sz/sizeof(ElfXX_Sym)); i++) {
sym =3D & o_symtab[i];
sym_name =3D (Char*)(o_strtab + sym->st_name);
- sym_addr =3D si->offset + sym->st_value;
+ sym_addr =3D o_symtab_offset + sym->st_value;
=20
if (VG_(clo_trace_symtab))
show_raw_elf_symbol(i, sym, sym_name, sym_addr, False);
=20
- if (get_elf_symbol_info(si, sym, sym_name, sym_addr, opd_filea,
+ if (get_elf_symbol_info(si, sym, sym_name, sym_addr,
+ opd_filea, opd_offset,
&sym_name_really,=20
&sym_addr_really,
&sym_size,
@@ -484,9 +484,9 @@
__attribute__((unused)) /* not referred to on all targets */
void read_elf_symtab__ppc64_linux(=20
struct _SegInfo* si, UChar* tab_name,
- ElfXX_Sym* o_symtab, UInt o_symtab_sz,
+ ElfXX_Sym* o_symtab, UInt o_symtab_sz, OffT o_symtab_offset,
UChar* o_strtab, UInt o_strtab_sz,
- UChar* opd_filea /* ppc64-linux only */=20
+ UChar* opd_filea, OffT opd_offset /* ppc64-linux only */=20
)
{
Int i, old_size;
@@ -523,12 +523,13 @@
for (i =3D 1; i < (Int)(o_symtab_sz/sizeof(ElfXX_Sym)); i++) {
sym =3D & o_symtab[i];
sym_name =3D (Char*)(o_strtab + sym->st_name);
- sym_addr =3D si->offset + sym->st_value;
+ sym_addr =3D o_symtab_offset + sym->st_value;
=20
if (VG_(clo_trace_symtab))
show_raw_elf_symbol(i, sym, sym_name, sym_addr, True);
=20
- if (get_elf_symbol_info(si, sym, sym_name, sym_addr, opd_filea,
+ if (get_elf_symbol_info(si, sym, sym_name, sym_addr,
+ opd_filea, opd_offset,
&sym_name_really,=20
&sym_addr_really,
&sym_size,
@@ -816,8 +817,10 @@
Bool ok;
Addr oimage;
UInt n_oimage;
+ OffT offset_oimage =3D 0;
Addr dimage =3D 0;
UInt n_dimage =3D 0;
+ OffT offset_dimage =3D 0;
struct vki_stat stat_buf;
=20
oimage =3D (Addr)NULL;
@@ -883,8 +886,6 @@
ElfXX_Addr prev_addr =3D 0;
Addr baseaddr =3D 0;
=20
- si->offset =3D 0;
-
vg_assert(si->soname =3D=3D NULL);
=20
for (i =3D 0; i < ehdr->e_phnum; i++) {
@@ -926,7 +927,7 @@
=20
if (!offset_set) {
offset_set =3D True;
- si->offset =3D si->start - o_phdr->p_vaddr;
+ offset_oimage =3D si->start - o_phdr->p_vaddr;
baseaddr =3D o_phdr->p_vaddr;
}
=20
@@ -938,7 +939,7 @@
prev_addr =3D o_phdr->p_vaddr;
=20
// Get the data and bss start/size if appropriate
- mapped =3D o_phdr->p_vaddr + si->offset;
+ mapped =3D o_phdr->p_vaddr + offset_oimage;
mapped_end =3D mapped + o_phdr->p_memsz;
if (si->data_start_vma =3D=3D 0 &&
(o_phdr->p_flags & (PF_R|PF_W|PF_X)) =3D=3D (PF_R|PF_W)) {
@@ -970,6 +971,8 @@
}
}
=20
+ si->offset =3D offset_oimage;
+
/* If, after looking at all the program headers, we still didn't=20
find a soname, add a fake one. */
if (si->soname =3D=3D NULL) {
@@ -1010,6 +1013,11 @@
UChar* opd_filea =3D NULL; /* .opd (dwarf2, ppc64-=
linux) */
UChar* dummy_filea =3D NULL;
=20
+ OffT o_symtab_offset =3D offset_oimage;
+ OffT o_dynsym_offset =3D offset_oimage;
+ OffT debug_offset =3D offset_oimage;
+ OffT opd_offset =3D offset_oimage;
+
/* Section sizes, in bytes */
UInt o_strtab_sz =3D 0;
UInt o_symtab_sz =3D 0;
@@ -1049,7 +1057,7 @@
# define FIND(sec_name, sec_size, sec_filea, sec_vma) \
if (0 =3D=3D VG_(strcmp)(sec_name, sh_strtab + shdr[i].sh_name)=
) { \
Bool nobits; \
- sec_vma =3D (Addr)(si->offset + shdr[i].sh_addr); \
+ sec_vma =3D (Addr)(offset_oimage + shdr[i].sh_addr); \
sec_filea =3D (void*)(oimage + shdr[i].sh_offset); \
sec_size =3D shdr[i].sh_size; \
nobits =3D shdr[i].sh_type =3D=3D SHT_NOBITS; \
@@ -1093,10 +1101,6 @@
# undef FIND
}
=20
- /* Check some sizes */
- vg_assert((o_dynsym_sz % sizeof(ElfXX_Sym)) =3D=3D 0);
- vg_assert((o_symtab_sz % sizeof(ElfXX_Sym)) =3D=3D 0);
-
/* Did we find a debuglink section? */
if (debuglink !=3D NULL) {
UInt crc_offset =3D VG_ROUNDUP(VG_(strlen)(debuglink)+1, 4);
@@ -1112,7 +1116,24 @@
ehdr =3D (ElfXX_Ehdr*)dimage;
=20
if (n_dimage >=3D sizeof(ElfXX_Ehdr)=20
- && ML_(is_elf_object_file(ehdr))) {
+ && ML_(is_elf_object_file(ehdr))
+ && ehdr->e_phoff + ehdr->e_phnum*sizeof(ElfXX_Phdr) <=3D=
n_dimage
+ && ehdr->e_shoff + ehdr->e_shnum*sizeof(ElfXX_Shdr) <=3D=
n_dimage)
+ {
+ Bool need_symtab =3D (NULL =3D=3D o_symtab);
+
+ for (i =3D 0; i < ehdr->e_phnum; i++) {
+ ElfXX_Phdr *o_phdr =3D &((ElfXX_Phdr *)(dimage + ehdr-=
>e_phoff))[i];
+ if (o_phdr->p_type =3D=3D PT_LOAD) {
+ offset_dimage =3D si->start - o_phdr->p_vaddr;
+ break;
+ }
+ }
+
+ debug_offset =3D offset_dimage;
+ if (need_symtab)
+ o_symtab_offset =3D offset_dimage;
+
shdr =3D (ElfXX_Shdr*)(dimage + ehdr->e_shoff);
sh_strtab =3D (UChar*)(dimage + shdr[ehdr->e_shstrndx].sh=
_offset);
=20
@@ -1122,8 +1143,9 @@
/* Find all interesting sections */
for (i =3D 0; i < ehdr->e_shnum; i++) {
=20
-# define FIND(sec_name, sec_size, sec_filea) \
- if (0 =3D=3D VG_(strcmp)(sec_name, sh_strtab + shdr[i]=
.sh_name)) { \
+# define FIND(condition, sec_name, sec_size, sec_filea) =
\
+ if (condition \
+ && 0 =3D=3D VG_(strcmp)(sec_name, sh_strtab + shdr=
[i].sh_name)) { \
Bool nobits; \
if (0 !=3D sec_filea) \
VG_(core_panic)("repeated section!\n"); \
@@ -1140,14 +1162,16 @@
} \
}
=20
- FIND(".stab", stab_sz, stab)
- FIND(".stabstr", stabstr_sz, stabstr)
- FIND(".debug_line", debug_line_sz, debug_line)
- FIND(".debug_info", debug_info_sz, debug_info)
- FIND(".debug_abbrev", debug_abbv_sz, debug_abbv)
- FIND(".debug_str", debug_str_sz, debug_str)
- FIND(".debug", dwarf1d_sz, dwarf1d)
- FIND(".line", dwarf1l_sz, dwarf1l)
+ FIND(need_symtab, ".symtab", o_symtab_sz, o_sy=
mtab)
+ FIND(need_symtab, ".strtab", o_strtab_sz, o_st=
rtab)
+ FIND(1, ".stab", stab_sz, stab=
)
+ FIND(1, ".stabstr", stabstr_sz, stab=
str)
+ FIND(1, ".debug_line", debug_line_sz, debu=
g_line)
+ FIND(1, ".debug_info", debug_info_sz, debu=
g_info)
+ FIND(1, ".debug_abbrev", debug_abbv_sz, debu=
g_abbv)
+ FIND(1, ".debug_str", debug_str_sz, debu=
g_str)
+ FIND(1, ".debug", dwarf1d_sz, dwar=
f1d)
+ FIND(1, ".line", dwarf1l_sz, dwar=
f1l)
=20
# undef FIND
}
@@ -1155,22 +1179,26 @@
}
}
=20
+ /* Check some sizes */
+ vg_assert((o_dynsym_sz % sizeof(ElfXX_Sym)) =3D=3D 0);
+ vg_assert((o_symtab_sz % sizeof(ElfXX_Sym)) =3D=3D 0);
+
/* Read symbols */
{
void (*read_elf_symtab)(struct _SegInfo*,UChar*,ElfXX_Sym*,
- UInt,UChar*,UInt,UChar*);
+ UInt,OffT,UChar*,UInt,UChar*,OffT);
# if defined(VGP_ppc64_linux)
read_elf_symtab =3D read_elf_symtab__ppc64_linux;
# else
read_elf_symtab =3D read_elf_symtab__normal;
# endif
read_elf_symtab(si, "symbol table",
- o_symtab, o_symtab_sz,
- o_strtab, o_strtab_sz, opd_filea);
+ o_symtab, o_symtab_sz, o_symtab_offset,
+ o_strtab, o_strtab_sz, opd_filea, opd_offset);
=20
read_elf_symtab(si, "dynamic symbol table",
- o_dynsym, o_dynsym_sz,
- o_dynstr, o_dynstr_sz, opd_filea);
+ o_dynsym, o_dynsym_sz, o_dynsym_offset,
+ o_dynstr, o_dynstr_sz, opd_filea, opd_offset);
}
=20
/* Read .eh_frame (call-frame-info) if any */
@@ -1183,7 +1211,7 @@
we ignore it. */
# if !defined(VGP_amd64_linux)
if (stab && stabstr) {
- ML_(read_debuginfo_stabs) ( si, stab, stab_sz,=20
+ ML_(read_debuginfo_stabs) ( si, debug_offset, stab, stab_sz,=20
stabstr, stabstr_sz );
}
# endif
@@ -1193,7 +1221,7 @@
read_unitinfo_dwarf2, do check that debugstr is non-NULL
before using it. */
if (debug_info && debug_abbv && debug_line /* && debug_str */) {
- ML_(read_debuginfo_dwarf2) ( si,=20
+ ML_(read_debuginfo_dwarf2) ( si, debug_offset,=20
debug_info, debug_info_sz,
debug_abbv,
debug_line, debug_line_sz,
Modified: trunk/coregrind/m_debuginfo/readstabs.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/readstabs.c 2006-04-09 01:23:29 UTC (rev =
5840)
+++ trunk/coregrind/m_debuginfo/readstabs.c 2006-04-12 10:08:05 UTC (rev =
5841)
@@ -77,7 +77,7 @@
/* Read stabs-format debug info. This is all rather horrible because
stabs is a underspecified, kludgy hack.
*/
-void ML_(read_debuginfo_stabs) ( SegInfo* si,
+void ML_(read_debuginfo_stabs) ( SegInfo* si, OffT debug_offset,
UChar* stabC, Int stab_sz,=20
UChar* stabstr, Int stabstr_sz )
{
@@ -333,7 +333,7 @@
line.first =3D True;
=20
/* line ends at start of next function */
- addr =3D si->offset + st->n_value;
+ addr =3D debug_offset + st->n_value;
=20
func.start =3D addr;
}
|
|
From: <js...@ac...> - 2006-04-12 03:12:25
|
Nightly build on phoenix ( SuSE 10.0 ) started at 2006-04-12 03:30:02 BST 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 == 234 tests, 6 stderr failures, 0 stdout failures, 0 posttest failures == memcheck/tests/leak-tree (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: L. D. B. <db...@db...> - 2006-04-12 03:11:42
|
On Sunday 2006-04-09 02:53 +0200, Josef Weidendorfer wrote:
> On Saturday 08 April 2006 19:37, L. David Baron wrote:
> > I'll attach a new patch (sometime later today) that restores
> > seginfo_sym_offset.
>=20
> That would be nice, thanks.
In any case, what needs to happen for the patch to get in?
> That said, it looks wrong that callgrinds output is dependent on the
> prelink status of the shared libraries. So if libraries are relayouted
> by a newer prelink run afterwards, the assembler annotation isn't
> working any longer for an old callgrind output...
> Hmmm... but I do not see a better way; KCachegrind would have to look
> up the prelink offset and do address correction itself if we wanted to
> store the file offset in callgrinds output. That seems ugly, and changes
> the format semantics in a subtle way.
It probably wouldn't be too hard to do -- you can get that information
with readelf if necessary: it's essentially
readelf -l $LIBRARY | grep -m 1 LOAD | awk '{ print $3 }'
But it would require a change in the file format. Perhaps it's worth
adding to a list of things to do if it becomes worthwhile to change the
file format.
-David
--=20
L. David Baron <URL: http://dbaron.org/ >
Technical Lead, Layout & CSS, Mozilla Corporation
|
|
From: <js...@ac...> - 2006-04-12 02:56:24
|
Nightly build on g5 ( YDL 4.0, ppc970 ) started at 2006-04-12 04:40:00 CEST 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 == 208 tests, 6 stderr failures, 3 stdout failures, 0 posttest failures == memcheck/tests/deep_templates (stdout) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/pointer-trace (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap (stderr) none/tests/ppc32/mftocrf (stdout) |
|
From: Tom H. <th...@cy...> - 2006-04-12 02:45:28
|
Nightly build on ford ( i686, Fedora Core 4 ) started at 2006-04-12 03:25:03 BST 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 == 237 tests, 8 stderr failures, 0 stdout failures, 0 posttest failures == memcheck/tests/leak-tree (stderr) memcheck/tests/mempool (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2006-04-12 02:33:48
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2006-04-12 03:15:05 BST 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 == 235 tests, 22 stderr failures, 2 stdout failures, 0 posttest failures == memcheck/tests/addressable (stderr) memcheck/tests/badjump (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/match-overrun (stderr) memcheck/tests/mempool (stderr) memcheck/tests/partial_load_dflt (stderr) memcheck/tests/partial_load_ok (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/sh-mem-random (stdout) memcheck/tests/sh-mem-random (stderr) memcheck/tests/sigkill (stderr) memcheck/tests/stack_changes (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/sse1_memory (stdout) memcheck/tests/xml1 (stderr) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2006-04-12 02:25:32
|
Nightly build on dellow ( x86_64, Fedora Core 5 ) started at 2006-04-12 03:10:04 BST 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 == 258 tests, 4 stderr failures, 1 stdout failure, 0 posttest failures == memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/sse1_memory (stdout) none/tests/amd64/faultstatus (stderr) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2006-04-12 02:24:43
|
Nightly build on aston ( x86_64, Fedora Core 3 ) started at 2006-04-12 03:05:13 BST 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 == 258 tests, 6 stderr failures, 1 stdout failure, 0 posttest failures == 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/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: Tom H. <th...@cy...> - 2006-04-12 02:18:58
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2006-04-12 03:00:02 BST 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 == 258 tests, 7 stderr failures, 1 stdout failure, 0 posttest failures == 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/fdleak_fcntl (stderr) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |