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
(1) |
2
(2) |
3
|
4
(1) |
5
(6) |
6
|
|
7
(1) |
8
|
9
(1) |
10
(2) |
11
(6) |
12
(3) |
13
(3) |
|
14
|
15
(11) |
16
(8) |
17
(5) |
18
(5) |
19
(5) |
20
(3) |
|
21
(2) |
22
(4) |
23
(5) |
24
(4) |
25
|
26
|
27
|
|
28
(8) |
|
|
|
|
|
|
|
From: Loïc M. <lo...@do...> - 2010-02-12 23:04:48
|
Hey there! I was poking at the valgrind Ubuntu build (valgrind was apparently broken and SVN tip worked fine and had all these nice ARM patches... :-) and noticed that the package is huge due to the 121M of unstripped binaries in /usr/lib/valgrind. debian/changelog says: valgrind (1.0pre2-2) unstable; urgency=low * removed call to dh_strip, at upstream's request * Added an override against unstripped-binary-or-object, after shaleh gave green light. -- Cyrille Chepelov <cy...@ch...> Fri, 21 Jun 2002 15:12:24 +0200 I'd like to readd stripping, but am checking here just in case it's something you really care we don't do. Thanks! -- Loïc Minier |
|
From: <sv...@va...> - 2010-02-12 13:22:48
|
Author: sewardj
Date: 2010-02-12 12:19:36 +0000 (Fri, 12 Feb 2010)
New Revision: 11040
Log:
Reduce verbosity of the PDB reader a bit. Original verbosity is still
available using "-v".
Modified:
trunk/coregrind/m_debuginfo/readpdb.c
Modified: trunk/coregrind/m_debuginfo/readpdb.c
===================================================================
--- trunk/coregrind/m_debuginfo/readpdb.c 2010-02-12 12:12:39 UTC (rev 11039)
+++ trunk/coregrind/m_debuginfo/readpdb.c 2010-02-12 12:19:36 UTC (rev 11040)
@@ -1864,7 +1864,7 @@
}
}
- if (VG_(clo_verbosity) > 0) {
+ if (VG_(clo_verbosity) > 1) {
VG_(message)(Vg_DebugMsg,
"PDB_READER:\n");
VG_(message)(Vg_DebugMsg,
@@ -2176,7 +2176,7 @@
if ( types_image ) ML_(dinfo_free)( types_image );
if ( pdb->u.jg.toc ) ML_(dinfo_free)( pdb->u.jg.toc );
- if (VG_(clo_verbosity) > 0) {
+ if (VG_(clo_verbosity) > 1) {
VG_(message)(Vg_DebugMsg,
" # symbols read = %llu\n", n_syms_read );
VG_(message)(Vg_DebugMsg,
|
|
From: <sv...@va...> - 2010-02-12 13:22:27
|
Author: sewardj
Date: 2010-02-12 12:12:39 +0000 (Fri, 12 Feb 2010)
New Revision: 11039
Log:
Try to find the PDB file for a given PE file by the totally kludgey
method of doing "strings file.dll | egrep '\.pdb|\.PDB'".
Distantly derived from a patch by le...@uc.... Fixes #222902,
although I still would prefer to do this the proper way, by parsing
the PE file properly.
Modified:
trunk/coregrind/m_debuginfo/debuginfo.c
trunk/coregrind/m_debuginfo/priv_readpdb.h
trunk/coregrind/m_debuginfo/readpdb.c
Modified: trunk/coregrind/m_debuginfo/debuginfo.c
===================================================================
--- trunk/coregrind/m_debuginfo/debuginfo.c 2010-02-10 13:37:37 UTC (rev 11038)
+++ trunk/coregrind/m_debuginfo/debuginfo.c 2010-02-12 12:12:39 UTC (rev 11039)
@@ -38,6 +38,7 @@
#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
#include "pub_core_libcfile.h"
+#include "pub_core_libcproc.h" // VG_(getenv)
#include "pub_core_seqmatch.h"
#include "pub_core_options.h"
#include "pub_core_redir.h" // VG_(redir_notify_{new,delete}_SegInfo)
@@ -896,7 +897,7 @@
SizeT total_size,
PtrdiffT unknown_purpose__reloc )
{
- Int r, sz_exename;
+ Int i, r, sz_exename;
ULong obj_mtime, pdb_mtime;
Char exename[VKI_PATH_MAX];
Char* pdbname = NULL;
@@ -939,28 +940,87 @@
VG_(message)(Vg_UserMsg, "LOAD_PDB_DEBUGINFO: objname: %s\n", exename);
}
- /* Try to find a matching PDB file from which to read debuginfo.
- Windows PE files have symbol tables and line number information,
- but MSVC doesn't seem to use them. */
- /* Why +5 ? Because in the worst case, we could find a dot as the
- last character of pdbname, and we'd then put "pdb" right after
- it, hence extending it a bit. */
- pdbname = ML_(dinfo_zalloc)("di.debuginfo.lpd1", sz_exename+5);
- VG_(strcpy)(pdbname, exename);
- vg_assert(pdbname[sz_exename+5-1] == 0);
- dot = VG_(strrchr)(pdbname, '.');
- if (!dot)
- goto out; /* there's no dot in the exe's name ?! */
- if (dot[1] == 0)
- goto out; /* hmm, path ends in "." */
+ /* Try to get the PDB file name from the executable. */
+ pdbname = ML_(find_name_of_pdb_file)(exename);
+ if (pdbname) {
+ vg_assert(VG_(strlen)(pdbname) >= 5); /* 5 = strlen("X.pdb") */
+ /* So we successfully extracted a name from the PE file. But it's
+ likely to be of the form
+ e:\foo\bar\xyzzy\wibble.pdb
+ and we need to change it into something we can actually open
+ in Wine-world, which basically means turning it into
+ $HOME/.wine/drive_e/foo/bar/xyzzy/wibble.pdb
+ We also take into account $WINEPREFIX, if it is set.
+ For the moment, if the name isn't fully qualified, just forget it
+ (we'd have to root around to find where the pdb actually is)
+ */
+ /* Change all the backslashes to forward slashes */
+ for (i = 0; pdbname[i]; i++) {
+ if (pdbname[i] == '\\')
+ pdbname[i] = '/';
+ }
+ Bool is_quald
+ = ('a' <= VG_(tolower)(pdbname[0]) && VG_(tolower)(pdbname[0]) <= 'z')
+ && pdbname[1] == ':'
+ && pdbname[2] == '/';
+ HChar* home = VG_(getenv)("HOME");
+ HChar* wpfx = VG_(getenv)("WINEPREFIX");
+ if (is_quald && wpfx) {
+ /* Change e:/foo/bar/xyzzy/wibble.pdb
+ to $WINEPREFIX/drive_e/foo/bar/xyzzy/wibble.pdb
+ */
+ Int mashedSzB = VG_(strlen)(pdbname) + VG_(strlen)(wpfx) + 50/*misc*/;
+ HChar* mashed = ML_(dinfo_zalloc)("di.debuginfo.dnpdi.1", mashedSzB);
+ VG_(sprintf)(mashed, "%s/drive_%c%s",
+ wpfx, pdbname[0], &pdbname[2]);
+ vg_assert(mashed[mashedSzB-1] == 0);
+ ML_(dinfo_free)(pdbname);
+ pdbname = mashed;
+ }
+ else if (is_quald && home && !wpfx) {
+ /* Change e:/foo/bar/xyzzy/wibble.pdb
+ to $HOME/.wine/drive_e/foo/bar/xyzzy/wibble.pdb
+ */
+ Int mashedSzB = VG_(strlen)(pdbname) + VG_(strlen)(home) + 50/*misc*/;
+ HChar* mashed = ML_(dinfo_zalloc)("di.debuginfo.dnpdi.2", mashedSzB);
+ VG_(sprintf)(mashed, "%s/.wine/drive_%c%s",
+ home, pdbname[0], &pdbname[2]);
+ vg_assert(mashed[mashedSzB-1] == 0);
+ ML_(dinfo_free)(pdbname);
+ pdbname = mashed;
+ } else {
+ /* It's not a fully qualified path, or neither $HOME nor $WINE
+ are set (strange). Give up. */
+ ML_(dinfo_free)(pdbname);
+ pdbname = NULL;
+ }
+ }
- if ('A' <= dot[1] && dot[1] <= 'Z')
- VG_(strcpy)(dot, ".PDB");
- else
- VG_(strcpy)(dot, ".pdb");
+ /* Try s/exe/pdb/ if we don't have a valid pdbname. */
+ if (!pdbname) {
+ /* Try to find a matching PDB file from which to read debuginfo.
+ Windows PE files have symbol tables and line number information,
+ but MSVC doesn't seem to use them. */
+ /* Why +5 ? Because in the worst case, we could find a dot as the
+ last character of pdbname, and we'd then put "pdb" right after
+ it, hence extending it a bit. */
+ pdbname = ML_(dinfo_zalloc)("di.debuginfo.lpd1", sz_exename+5);
+ VG_(strcpy)(pdbname, exename);
+ vg_assert(pdbname[sz_exename+5-1] == 0);
+ dot = VG_(strrchr)(pdbname, '.');
+ if (!dot)
+ goto out; /* there's no dot in the exe's name ?! */
+ if (dot[1] == 0)
+ goto out; /* hmm, path ends in "." */
- vg_assert(pdbname[sz_exename+5-1] == 0);
+ if ('A' <= dot[1] && dot[1] <= 'Z')
+ VG_(strcpy)(dot, ".PDB");
+ else
+ VG_(strcpy)(dot, ".pdb");
+ vg_assert(pdbname[sz_exename+5-1] == 0);
+ }
+
/* See if we can find it, and check it's in-dateness. */
sres = VG_(stat)(pdbname, &stat_buf);
if (sr_isError(sres)) {
Modified: trunk/coregrind/m_debuginfo/priv_readpdb.h
===================================================================
--- trunk/coregrind/m_debuginfo/priv_readpdb.h 2010-02-10 13:37:37 UTC (rev 11038)
+++ trunk/coregrind/m_debuginfo/priv_readpdb.h 2010-02-12 12:12:39 UTC (rev 11039)
@@ -48,6 +48,12 @@
ULong pdbmtime
);
+/* Finds the name of the PDB file that's embedded with the specified
+ PE file, or NULL on failure. Caller deallocates with
+ ML_(dinfo_free). */
+HChar* ML_(find_name_of_pdb_file)( HChar* pename );
+
+
#endif /* ndef __PRIV_READPDB_H */
#endif // defined(VGO_linux) || defined(VGO_darwin)
Modified: trunk/coregrind/m_debuginfo/readpdb.c
===================================================================
--- trunk/coregrind/m_debuginfo/readpdb.c 2010-02-10 13:37:37 UTC (rev 11038)
+++ trunk/coregrind/m_debuginfo/readpdb.c 2010-02-12 12:12:39 UTC (rev 11039)
@@ -42,7 +42,9 @@
#include "pub_core_vki.h" // VKI_PAGE_SIZE
#include "pub_core_libcbase.h"
#include "pub_core_libcassert.h"
+#include "pub_core_libcfile.h" // VG_(open), read, lseek, close
#include "pub_core_libcprint.h"
+#include "pub_core_libcproc.h" // VG_(getpid), system
#include "pub_core_options.h" // VG_(clo_verbosity)
#include "pub_core_xarray.h" // keeps priv_storage.h happy
#include "pub_core_redir.h"
@@ -2193,6 +2195,8 @@
/*--- ---*/
/*------------------------------------------------------------*/
+/* Read line, symbol and unwind information from a PDB file.
+*/
Bool ML_(read_pdb_debug_info)(
DebugInfo* di,
Addr obj_avma,
@@ -2422,6 +2426,123 @@
return True;
}
+
+/* Examine a PE file to see if it states the path of an associated PDB
+ file; if so return that. Caller must deallocate with
+ ML_(dinfo_free).
+*/
+
+HChar* ML_(find_name_of_pdb_file)( HChar* pename )
+{
+ /* This is a giant kludge, of the kind "you did WTF?!?", but it
+ works. */
+ Bool do_cleanup = False;
+ HChar tmpname[100], tmpnameroot[50];
+ Int fd, r;
+ HChar* res = NULL;
+
+ if (!pename)
+ goto out;
+
+ fd = -1;
+ VG_(memset)(tmpnameroot, 0, sizeof(tmpnameroot));
+ VG_(sprintf)(tmpnameroot, "petmp%d", VG_(getpid)());
+ VG_(memset)(tmpname, 0, sizeof(tmpname));
+ fd = VG_(mkstemp)( tmpnameroot, tmpname );
+ if (fd == -1) {
+ VG_(message)(Vg_UserMsg,
+ "Find PDB file: Can't create /tmp file %s\n", tmpname);
+ goto out;
+ }
+ do_cleanup = True;
+
+ /* Make up the command to run, essentially:
+ sh -c "strings (pename) | egrep '\.pdb|\.PDB' > (tmpname)"
+ */
+ HChar* sh = "/bin/sh";
+ HChar* strings = "/usr/bin/strings";
+ HChar* egrep = "/usr/bin/egrep";
+
+ /* (sh) -c "(strings) (pename) | (egrep) 'pdb' > (tmpname) */
+ Int cmdlen = VG_(strlen)(strings) + VG_(strlen)(pename)
+ + VG_(strlen)(egrep) + VG_(strlen)(tmpname)
+ + 100/*misc*/;
+ HChar* cmd = ML_(dinfo_zalloc)("di.readpe.fnopf.cmd", cmdlen);
+ vg_assert(cmd);
+ VG_(sprintf)(cmd, "%s -c \"%s %s | %s '\\.pdb|\\.PDB' >> %s\"",
+ sh, strings, pename, egrep, tmpname);
+ vg_assert(cmd[cmdlen-1] == 0);
+ if (0) VG_(printf)("QQQQQQQQ: %s\n", cmd);
+
+ r = VG_(system)( cmd );
+ if (r) {
+ VG_(message)(Vg_DebugMsg,
+ "Find PDB file: Command failed:\n %s\n", cmd);
+ goto out;
+ }
+
+ /* Find out how big the file is, and get it aboard. */
+ struct vg_stat stat_buf;
+ VG_(memset)(&stat_buf, 0, sizeof(stat_buf));
+
+ SysRes sr = VG_(stat)(tmpname, &stat_buf);
+ if (sr_isError(sr)) {
+ VG_(umsg)("Find PDB file: can't stat %s\n", tmpname);
+ goto out;
+ }
+
+ Int szB = (Int)stat_buf.size;
+ if (szB == 0) {
+ VG_(umsg)("Find PDB file: %s is empty\n", tmpname);
+ goto out;
+ }
+ /* 6 == strlen("X.pdb\n") */
+ if (szB < 6 || szB > 1024/*let's say*/) {
+ VG_(umsg)("Find PDB file: %s has implausible size %d\n",
+ tmpname, szB);
+ goto out;
+ }
+
+ HChar* pdbname = ML_(dinfo_zalloc)("di.readpe.fnopf.pdbname", szB + 1);
+ vg_assert(pdbname);
+ pdbname[szB] = 0;
+
+ Int nread = VG_(read)(fd, pdbname, szB);
+ if (nread != szB) {
+ VG_(umsg)("Find PDB file: read of %s failed\n", tmpname);
+ goto out;
+ }
+ vg_assert(pdbname[szB] == 0);
+
+ /* Check we've got something remotely sane -- must have one dot and
+ one \n in it, and the \n must be at the end */
+ Bool saw_dot = False;
+ Int saw_n_crs = 0;
+ Int i;
+ for (i = 0; pdbname[i]; i++) {
+ if (pdbname[i] == '.') saw_dot = True;
+ if (pdbname[i] == '\n') saw_n_crs++;
+ }
+ if (!saw_dot || saw_n_crs != 1 || pdbname[szB-1] != '\n') {
+ VG_(umsg)("Find PDB file: can't make sense of: %s\n", pdbname);
+ goto out;
+ }
+ /* Change the \n to a terminating zero, so we have a "normal" string */
+ pdbname[szB-1] = 0;
+
+ if (0) VG_(printf)("QQQQQQQQ: got %s\n", pdbname);
+
+ res = pdbname;
+ goto out;
+
+ out:
+ if (do_cleanup) {
+ VG_(close)(fd);
+ VG_(unlink)( tmpname );
+ }
+ return res;
+}
+
#endif // defined(VGO_linux) || defined(VGO_darwin)
/*--------------------------------------------------------------------*/
|