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
(25) |
2
(33) |
3
(25) |
4
(27) |
5
(17) |
|
6
(3) |
7
(18) |
8
(16) |
9
(21) |
10
(14) |
11
(17) |
12
(11) |
|
13
(3) |
14
(24) |
15
(19) |
16
(13) |
17
(16) |
18
(29) |
19
(19) |
|
20
(17) |
21
(27) |
22
(21) |
23
(32) |
24
(19) |
25
(24) |
26
(16) |
|
27
(2) |
28
(21) |
29
(20) |
30
(20) |
31
(2) |
|
|
|
From: <sv...@va...> - 2013-10-06 21:23:15
|
Author: philippe
Date: Sun Oct 6 21:23:04 2013
New Revision: 13623
Log:
Fix leak scan SEGV catcher when ptr starts in unreadable page (readable for aspacemgr)
The fault catcher installed during leak scan to catter e.g. for
possible desynchronisation between real protection and aspacemgr
was not activated when the scanned ptr was directly pointing in
a desynchronised page.
This was (initially only) visible on ppc32 (gcc110) as the page size of
gcc110 is big (64 K).
=> modified the leak-segv-jmp test so as to produce the problem also
on systems with smaller pages.
The fix consists in calling the setjmp before the scan loop,
and skip the bad address which has been recorded by the fault
catcher.
Also, deemed better to just skip one single Addr rather than a full page
(e.g. to skip less data in case some addresses are unreadable e.g.
on strange hardware).
Performance of the leak scan has been measured, seems slightly
faster on x86,amd64 and ppc32. Slightly slower on ppc64.
Also if verbose argument is given, outputs the nr of bytes skipped
due to fault.
Modified:
trunk/memcheck/mc_leakcheck.c
trunk/memcheck/tests/leak-segv-jmp.c
trunk/memcheck/tests/leak-segv-jmp.stderr.exp
Modified: trunk/memcheck/mc_leakcheck.c
==============================================================================
--- trunk/memcheck/mc_leakcheck.c (original)
+++ trunk/memcheck/mc_leakcheck.c Sun Oct 6 21:23:04 2013
@@ -488,6 +488,9 @@
// Keeps track of how many bytes of memory we've scanned, for printing.
// (Nb: We don't keep track of how many register bytes we've scanned.)
static SizeT lc_scanned_szB;
+// Keeps track of how many bytes we have not scanned due to read errors that
+// caused a signal such as SIGSEGV.
+static SizeT lc_sig_skipped_szB;
SizeT MC_(bytes_leaked) = 0;
@@ -886,14 +889,17 @@
static VG_MINIMAL_JMP_BUF(memscan_jmpbuf);
+static volatile Addr bad_scanned_addr;
static
void scan_all_valid_memory_catcher ( Int sigNo, Addr addr )
{
if (0)
VG_(printf)("OUCH! sig=%d addr=%#lx\n", sigNo, addr);
- if (sigNo == VKI_SIGSEGV || sigNo == VKI_SIGBUS)
+ if (sigNo == VKI_SIGSEGV || sigNo == VKI_SIGBUS) {
+ bad_scanned_addr = addr;
VG_MINIMAL_LONGJMP(memscan_jmpbuf);
+ }
}
// lc_scan_memory has 2 modes:
@@ -935,8 +941,8 @@
end portions of the block if they are not aligned on sizeof(Addr):
These cannot be a valid pointer, and calls to MC_(is_valid_aligned_word)
will assert for a non aligned address. */
- Addr ptr = VG_ROUNDUP(start, sizeof(Addr));
- Addr end = VG_ROUNDDN(start+len, sizeof(Addr));
+ Addr ptr = VG_ROUNDUP(start, sizeof(Addr));
+ const Addr end = VG_ROUNDDN(start+len, sizeof(Addr));
vki_sigset_t sigmask;
if (VG_DEBUG_LEAKCHECK)
@@ -966,10 +972,28 @@
// if not, skip onto the next page.
ptr = VG_PGROUNDUP(ptr+1); // First page is bad - skip it.
}
- /* This optimisation and below loop is based on some relationships between
- VKI_PAGE_SIZE, SM_SIZE and sizeof(Addr) which are asserted in
+ /* The above optimisation and below loop is based on some relationships
+ between VKI_PAGE_SIZE, SM_SIZE and sizeof(Addr) which are asserted in
MC_(detect_memory_leaks). */
+ // During scan, we check with aspacemgr that each page is readable and
+ // belongs to client.
+ // We still protect against SIGSEGV and SIGBUS e.g. in case aspacemgr is
+ // desynchronised with the real page mappings.
+ // Such a desynchronisation could happen due to an aspacemgr bug.
+ // Note that if the application is using mprotect(NONE), then
+ // a page can be unreadable but have addressable and defined
+ // VA bits (see mc_main.c function mc_new_mem_mprotect).
+ if (VG_MINIMAL_SETJMP(memscan_jmpbuf) != 0) {
+ // Catch read error ...
+ // We need to restore the signal mask, because we were
+ // longjmped out of a signal handler.
+ VG_(sigprocmask)(VKI_SIG_SETMASK, &sigmask, NULL);
+ lc_sig_skipped_szB += sizeof(Addr);
+ tl_assert(bad_scanned_addr >= VG_ROUNDUP(start, sizeof(Addr)));
+ tl_assert(bad_scanned_addr < VG_ROUNDDN(start+len, sizeof(Addr)));
+ ptr = bad_scanned_addr + sizeof(Addr); // Unaddressable, - skip it.
+ }
while (ptr < end) {
Addr addr;
@@ -987,29 +1011,11 @@
ptr += VKI_PAGE_SIZE; // Bad page - skip it.
continue;
}
- // aspacemgr indicates the page is readable and belongs to client.
- // We still probe the page explicitely in case aspacemgr is
- // desynchronised with the real page mappings.
- // Such a desynchronisation can happen due to an aspacemgr bug.
- // Note that if the application is using mprotect(NONE), then
- // a page can be unreadable but have addressable and defined
- // VA bits (see mc_main.c function mc_new_mem_mprotect).
- if (VG_MINIMAL_SETJMP(memscan_jmpbuf) == 0) {
- // Try a read in the beginning of the page ...
- Addr test = *(volatile Addr *)ptr;
- __asm__ __volatile__("": :"r"(test) : "cc","memory");
- } else {
- // Catch read error ...
- // We need to restore the signal mask, because we were
- // longjmped out of a signal handler.
- VG_(sigprocmask)(VKI_SIG_SETMASK, &sigmask, NULL);
- ptr += VKI_PAGE_SIZE; // Bad page - skip it.
- continue;
- }
}
if ( MC_(is_valid_aligned_word)(ptr) ) {
lc_scanned_szB += sizeof(Addr);
+ // If the below read fails, we will longjmp to the loop begin.
addr = *(Addr *)ptr;
// If we get here, the scanned word is in valid memory. Now
// let's see if its contents point to a chunk.
@@ -1034,10 +1040,10 @@
ch->data, addr, pp_heuristic(h));
}
}
- // Verify the loop above has properly scanned all heuristics.
- // If the below fails, it probably means the LeakCheckHeuristic
- // enum is not in sync anymore with the above loop and/or
- // with N_LEAK_CHECK_HEURISTICS.
+ // Verify the loop above has properly scanned all
+ // heuristics. If the below fails, it probably means the
+ // LeakCheckHeuristic enum is not in sync anymore with the
+ // above loop and/or with N_LEAK_CHECK_HEURISTICS.
tl_assert (h == N_LEAK_CHECK_HEURISTICS);
}
}
@@ -1556,6 +1562,7 @@
tl_assert(seg_starts && n_seg_starts > 0);
lc_scanned_szB = 0;
+ lc_sig_skipped_szB = 0;
// VG_(am_show_nsegments)( 0, "leakcheck");
for (i = 0; i < n_seg_starts; i++) {
@@ -1757,6 +1764,9 @@
if (VG_(clo_verbosity) > 1 && !VG_(clo_xml)) {
VG_(umsg)("Checked %'lu bytes\n", lc_scanned_szB);
+ if (lc_sig_skipped_szB > 0)
+ VG_(umsg)("Skipped %'lu bytes due to read errors\n",
+ lc_sig_skipped_szB);
VG_(umsg)( "\n" );
}
Modified: trunk/memcheck/tests/leak-segv-jmp.c
==============================================================================
--- trunk/memcheck/tests/leak-segv-jmp.c (original)
+++ trunk/memcheck/tests/leak-segv-jmp.c Sun Oct 6 21:23:04 2013
@@ -190,9 +190,12 @@
{
long pagesize;
#define RNDPAGEDOWN(a) ((long)a & ~(pagesize-1))
+ int i;
+ const int nr_ptr = (10000 * 4)/sizeof(char*);
- b10 = malloc ((10000 * 4)/sizeof(char*) * sizeof(char*));
-
+ b10 = calloc (nr_ptr * sizeof(char*), 1);
+ for (i = 0; i < nr_ptr; i++)
+ b10[i] = (char*)b10;
b10[4000] = malloc (1000);
fprintf(stderr, "expecting no leaks\n");
@@ -231,6 +234,22 @@
fflush(stderr);
VALGRIND_DO_LEAK_CHECK;
+ if (RUNNING_ON_VALGRIND)
+ (void) VALGRIND_NON_SIMD_CALL2(non_simd_mprotect,
+ RNDPAGEDOWN(&b10[0]),
+ RNDPAGEDOWN(&(b10[nr_ptr-1]))
+ - RNDPAGEDOWN(&(b10[0])));
+ else
+ mprotect_result = mprotect((void*) RNDPAGEDOWN(&b10[0]),
+ RNDPAGEDOWN(&(b10[nr_ptr-1]))
+ - RNDPAGEDOWN(&(b10[0])),
+ PROT_NONE);
+ fprintf(stderr, "full mprotect result %d\n", mprotect_result);
+
+ fprintf(stderr, "expecting a leak again after full mprotect\n");
+ fflush(stderr);
+ VALGRIND_DO_LEAK_CHECK;
+
fprintf(stderr, "finished\n");
}
Modified: trunk/memcheck/tests/leak-segv-jmp.stderr.exp
==============================================================================
--- trunk/memcheck/tests/leak-segv-jmp.stderr.exp (original)
+++ trunk/memcheck/tests/leak-segv-jmp.stderr.exp Sun Oct 6 21:23:04 2013
@@ -14,8 +14,8 @@
expecting a leak
1,000 bytes in 1 blocks are definitely lost in loss record ... of ...
at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: f (leak-segv-jmp.c:196)
- by 0x........: main (leak-segv-jmp.c:243)
+ by 0x........: f (leak-segv-jmp.c:199)
+ by 0x........: main (leak-segv-jmp.c:262)
LEAK SUMMARY:
definitely lost: 1,000 bytes in 1 blocks
@@ -30,8 +30,24 @@
expecting a leak again
1,000 bytes in 1 blocks are definitely lost in loss record ... of ...
at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: f (leak-segv-jmp.c:196)
- by 0x........: main (leak-segv-jmp.c:243)
+ by 0x........: f (leak-segv-jmp.c:199)
+ by 0x........: main (leak-segv-jmp.c:262)
+
+LEAK SUMMARY:
+ definitely lost: 1,000 bytes in 1 blocks
+ indirectly lost: 0 bytes in 0 blocks
+ possibly lost: 0 bytes in 0 blocks
+ still reachable: 40,000 bytes in 1 blocks
+ suppressed: 0 bytes in 0 blocks
+Reachable blocks (those to which a pointer was found) are not shown.
+To see them, rerun with: --leak-check=full --show-leak-kinds=all
+
+full mprotect result 0
+expecting a leak again after full mprotect
+1,000 bytes in 1 blocks are definitely lost in loss record ... of ...
+ at 0x........: malloc (vg_replace_malloc.c:...)
+ by 0x........: f (leak-segv-jmp.c:199)
+ by 0x........: main (leak-segv-jmp.c:262)
LEAK SUMMARY:
definitely lost: 1,000 bytes in 1 blocks
@@ -63,4 +79,4 @@
For a detailed leak analysis, rerun with: --leak-check=full
For counts of detected and suppressed errors, rerun with: -v
-ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
|
|
From: <sv...@va...> - 2013-10-06 16:35:49
|
Author: philippe
Date: Sun Oct 6 16:35:35 2013
New Revision: 13622
Log:
pub_tool_oset.h and m_oset.c cleanup
* Remove dead code in m_oset.c VG_(OSetGen_ResetIterAt)
The code at the end of VG_(OSetGen_ResetIterAt) was unreachable
(detected by BEAM checker).
Looking at SVN, the initial commit of VG_(OSetGen_ResetIterAt)
already contained this deadcode.
* pub_tool_oset.h was wrongly indicating that signed words could
be used for fast cmp oset.
* modified memcheck/tests/unit_oset.c to test VG_(OSetGen_ResetIterAt)
* modified memcheck/tests/unit_oset.c to not use signed words
(it was previously using signed words, but only with positive values)
Modified:
trunk/coregrind/m_oset.c
trunk/include/pub_tool_oset.h
trunk/memcheck/tests/unit_oset.c
trunk/memcheck/tests/unit_oset.stdout.exp
Modified: trunk/coregrind/m_oset.c
==============================================================================
--- trunk/coregrind/m_oset.c (original)
+++ trunk/coregrind/m_oset.c Sun Oct 6 16:35:35 2013
@@ -864,7 +864,6 @@
// function supplied to VG_(OSetGen_Create).
void VG_(OSetGen_ResetIterAt)(AvlTree* oset, const void* k)
{
- Int i;
AvlNode *n, *t;
Word cmpresS; /* signed */
UWord cmpresU; /* unsigned */
@@ -910,13 +909,6 @@
}
t = cmpresU==0 ? t->left : t->right;
}
- if (stackPop(oset, &n, &i)) {
- // If we've pushed something to stack and did not find the exact key,
- // we must fix the top element of stack.
- vg_assert(i == 2);
- stackPush(oset, n, 3);
- // the stack looks like {2, 2, ..., 2, 3}
- }
}
/*--------------------------------------------------------------------*/
Modified: trunk/include/pub_tool_oset.h
==============================================================================
--- trunk/include/pub_tool_oset.h (original)
+++ trunk/include/pub_tool_oset.h Sun Oct 6 16:35:35 2013
@@ -56,9 +56,12 @@
// function even a (non-overlapping) interval list can be created. But
// the cost of calling a function for every comparison can be high during
// lookup. If no comparison function is provided, we assume that keys are
-// (signed or unsigned) words, and that the key is the first word in each
+// unsigned words, and that the key is the first word in each
// element. This fast comparison is suitable for an OSet containing
// structs where the first element is an Addr, for example.
+// Do not assume fast comparison works properly with signed words.
+// A.o. iterating over the values will not return them in the correct
+// order.
//
// Each OSet interface also has an iterator, which makes it simple to
// traverse all the nodes in order. Note that the iterator maintains state
@@ -228,7 +231,7 @@
// If there are several OSet managing similar such elements, it might be
// interesting to use a shared pool for these OSet.
// To have multiple OSets sharing a pool allocator, create the first OSet
-// with VG_(OSetGen_Create). Create subsequent OSet with
+// with VG_(OSetGen_Create_With_Pool). Create subsequent OSet with
// VG_(OSetGen_EmptyClone).
extern void VG_(OSetGen_Destroy) ( OSet* os );
Modified: trunk/memcheck/tests/unit_oset.c
==============================================================================
--- trunk/memcheck/tests/unit_oset.c (original)
+++ trunk/memcheck/tests/unit_oset.c Sun Oct 6 16:35:35 2013
@@ -85,9 +85,10 @@
void example1singleset(OSet* oset, char *descr)
{
Int i, n;
- Word v, prev;
- Word* vs[NN];
- Word *pv;
+ UWord v, prev;
+ UWord* vs[NN];
+ UWord *pv;
+ UWord sorted_elts[NN]; // Used to test VG_(OSetGen_ResetIterAt)
// Try some operations on an empty OSet to ensure they don't screw up.
vg_assert( ! VG_(OSetGen_Contains)(oset, &v) );
@@ -100,13 +101,14 @@
// and shuffle them randomly.
for (i = 0; i < NN; i++) {
vs[i] = VG_(OSetGen_AllocNode)(oset, sizeof(Word));
- *(vs[i]) = 2*i;
+ *(vs[i]) = 2*(i+1);
+ sorted_elts[i] = *(vs[i]);
}
seed = 0;
for (i = 0; i < NN; i++) {
- Word r1 = myrandom() % NN;
- Word r2 = myrandom() % NN;
- Word* tmp= vs[r1];
+ UWord r1 = myrandom() % NN;
+ UWord r2 = myrandom() % NN;
+ UWord* tmp= vs[r1];
vs[r1] = vs[r2];
vs[r2] = tmp;
}
@@ -124,15 +126,60 @@
assert( VG_(OSetGen_Contains)(oset, vs[i]) );
}
+#define FULLCHECKEVERY 20
+ // Check VG_(OSetGen_ResetIterAt) works before, at, and after each element.
+ // For some elements, we check all the successive elements.
+ for (i = 0; i < NN; i++) {
+ UWord k;
+ UWord *pval;
+ Int j;
+
+ // check ResetIterAt just before an elt gives this elt.
+ k = sorted_elts[i] - 1;
+ VG_(OSetGen_ResetIterAt) (oset, &k);
+ // Check all elts till the end
+ for (j = i; j < NN; j++) {
+ pval = VG_(OSetGen_Next)(oset);
+ assert (*pval == sorted_elts[j]);
+ if (i % FULLCHECKEVERY != 0) break;
+ }
+
+ // check ResetIterAt at an elt gives this elt.
+ k = sorted_elts[i];
+ VG_(OSetGen_ResetIterAt) (oset, &k);
+ // Check all elts till the end
+ for (j = i; j < NN; j++) {
+ pval = VG_(OSetGen_Next)(oset);
+ assert (*pval == sorted_elts[j]);
+ if (i % FULLCHECKEVERY != 0) break;
+ }
+
+ // check ResetIterAt after an elt gives the next elt or nothing
+ // when we reset after the last elt.
+ k = sorted_elts[i] + 1;
+ VG_(OSetGen_ResetIterAt) (oset, &k);
+ if (i < NN - 1) {
+ for (j = i+1; j < NN; j++) {
+ pval = VG_(OSetGen_Next)(oset);
+ assert (*pval == sorted_elts[j]);
+ if (i % FULLCHECKEVERY != 0) break;
+ }
+ } else {
+ pval = VG_(OSetGen_Next)(oset);
+ assert (pval == NULL);
+ }
+
+ }
+
// Check we cannot find elements we did not insert, below, within (odd
// numbers), and above the inserted elements.
- v = -1;
+ v = 0;
assert( ! VG_(OSetGen_Contains)(oset, &v) );
for (i = 0; i < NN; i++) {
v = *(vs[i]) + 1;
assert( ! VG_(OSetGen_Contains)(oset, &v) );
}
- v = NN*2;
+ v = 2*(NN+1);
assert( ! VG_(OSetGen_Contains)(oset, &v) );
// Check we can find all the elements we inserted, and the right values
@@ -145,10 +192,10 @@
// there is the right number of them.
n = 0;
pv = NULL;
- prev = -1;
+ prev = 0;
VG_(OSetGen_ResetIter)(oset);
while ( (pv = VG_(OSetGen_Next)(oset)) ) {
- Word curr = *pv;
+ UWord curr = *pv;
assert(prev < curr);
prev = curr;
n++;
@@ -212,7 +259,7 @@
{
OSet *oset, *oset_empty_clone;
- // Create a static OSet of Ints. This one uses fast (built-in)
+ // Create a static OSet of UWords. This one uses fast (built-in)
// comparisons.
// First a single oset, no pool allocator.
@@ -255,10 +302,10 @@
void example1b(void)
{
Int i, n;
- Word v = 0, prev;
- Word vs[NN];
+ UWord v = 0, prev;
+ UWord vs[NN];
- // Create a static OSet of Ints. This one uses fast (built-in)
+ // Create a static OSet of UWords. This one uses fast (built-in)
// comparisons.
OSet* oset = VG_(OSetWord_Create)(allocate_node, "oset_test.2", free_node);
@@ -275,9 +322,9 @@
}
seed = 0;
for (i = 0; i < NN; i++) {
- Word r1 = myrandom() % NN;
- Word r2 = myrandom() % NN;
- Word tmp = vs[r1];
+ UWord r1 = myrandom() % NN;
+ UWord r2 = myrandom() % NN;
+ UWord tmp = vs[r1];
vs[r1] = vs[r2];
vs[r2] = tmp;
}
@@ -297,7 +344,7 @@
// Check we cannot find elements we did not insert, below, within (odd
// numbers), and above the inserted elements.
- v = -1;
+ v = 0xffffffff;
assert( ! VG_(OSetWord_Contains)(oset, v) );
for (i = 0; i < NN; i++) {
v = vs[i] + 1;
@@ -314,11 +361,14 @@
// Check that we can iterate over the OSet elements in sorted order, and
// there is the right number of them.
n = 0;
- prev = -1;
+ prev = 0;
VG_(OSetWord_ResetIter)(oset);
while ( VG_(OSetWord_Next)(oset, (UWord *)&v) ) {
- Word curr = v;
- assert(prev < curr);
+ UWord curr = v;
+ if (n == 0)
+ assert(prev == curr);
+ else
+ assert(prev < curr);
prev = curr;
n++;
}
Modified: trunk/memcheck/tests/unit_oset.stdout.exp
==============================================================================
--- trunk/memcheck/tests/unit_oset.stdout.exp (original)
+++ trunk/memcheck/tests/unit_oset.stdout.exp Sun Oct 6 16:35:35 2013
@@ -1,3998 +1,3998 @@
-- start single oset, no pool allocator ----------------
-.. .. .. .. .. .. .. .. .. 1998
-.. .. .. .. .. .. .. .. 1996
-.. .. .. .. .. .. .. .. .. .. 1994
-.. .. .. .. .. .. .. .. .. 1992
-.. .. .. .. .. .. .. .. .. .. 1990
-.. .. .. .. .. .. .. 1988
-.. .. .. .. .. .. .. .. .. 1986
-.. .. .. .. .. .. .. .. .. .. 1984
-.. .. .. .. .. .. .. .. 1982
-.. .. .. .. .. .. .. .. .. .. 1980
-.. .. .. .. .. .. .. .. .. 1978
-.. .. .. .. .. .. .. .. .. .. 1976
-.. .. .. .. .. .. 1974
-.. .. .. .. .. .. .. .. .. .. 1972
-.. .. .. .. .. .. .. .. .. 1970
-.. .. .. .. .. .. .. .. .. .. 1968
-.. .. .. .. .. .. .. .. 1966
-.. .. .. .. .. .. .. .. .. .. 1964
-.. .. .. .. .. .. .. .. .. 1962
-.. .. .. .. .. .. .. 1960
-.. .. .. .. .. .. .. .. .. .. 1958
-.. .. .. .. .. .. .. .. .. 1956
-.. .. .. .. .. .. .. .. 1954
-.. .. .. .. .. .. .. .. .. .. 1952
-.. .. .. .. .. .. .. .. .. 1950
-.. .. .. .. .. .. .. .. .. .. 1948
-.. .. .. .. .. 1946
-.. .. .. .. .. .. .. .. .. 1944
-.. .. .. .. .. .. .. .. 1942
-.. .. .. .. .. .. .. 1940
-.. .. .. .. .. .. .. .. .. .. 1938
-.. .. .. .. .. .. .. .. .. 1936
-.. .. .. .. .. .. .. .. 1934
-.. .. .. .. .. .. .. .. .. 1932
-.. .. .. .. .. .. 1930
-.. .. .. .. .. .. .. .. .. 1928
-.. .. .. .. .. .. .. .. .. .. 1926
-.. .. .. .. .. .. .. .. 1924
-.. .. .. .. .. .. .. .. .. .. 1922
-.. .. .. .. .. .. .. .. .. 1920
-.. .. .. .. .. .. .. .. .. .. 1918
-.. .. .. .. .. .. .. 1916
-.. .. .. .. .. .. .. .. .. 1914
-.. .. .. .. .. .. .. .. 1912
-.. .. .. .. .. .. .. .. .. .. 1910
-.. .. .. .. .. .. .. .. .. 1908
-.. .. .. .. .. .. .. .. .. .. 1906
-.. .. .. .. 1904
-.. .. .. .. .. .. .. .. .. 1902
-.. .. .. .. .. .. .. .. 1900
-.. .. .. .. .. .. .. 1898
-.. .. .. .. .. .. .. .. .. 1896
-.. .. .. .. .. .. .. .. 1894
-.. .. .. .. .. .. .. .. .. 1892
-.. .. .. .. .. .. 1890
-.. .. .. .. .. .. .. .. .. .. 1888
-.. .. .. .. .. .. .. .. .. 1886
-.. .. .. .. .. .. .. .. .. .. 1884
-.. .. .. .. .. .. .. .. 1882
-.. .. .. .. .. .. .. .. .. 1880
-.. .. .. .. .. .. .. 1878
-.. .. .. .. .. .. .. .. 1876
-.. .. .. .. .. .. .. .. .. 1874
-.. .. .. .. .. 1872
-.. .. .. .. .. .. .. .. .. .. 1870
-.. .. .. .. .. .. .. .. .. 1868
-.. .. .. .. .. .. .. .. .. .. 1866
-.. .. .. .. .. .. .. .. 1864
-.. .. .. .. .. .. .. .. .. 1862
-.. .. .. .. .. .. .. .. .. .. 1860
-.. .. .. .. .. .. .. 1858
-.. .. .. .. .. .. .. .. .. 1856
-.. .. .. .. .. .. .. .. 1854
-.. .. .. .. .. .. .. .. .. 1852
-.. .. .. .. .. .. 1848
-.. .. .. .. .. .. .. .. .. 1846
-.. .. .. .. .. .. .. .. 1844
-.. .. .. .. .. .. .. .. .. .. 1842
-.. .. .. .. .. .. .. .. .. 1840
-.. .. .. .. .. .. .. 1838
-.. .. .. .. .. .. .. .. .. .. 1836
-.. .. .. .. .. .. .. .. .. 1834
-.. .. .. .. .. .. .. .. .. .. 1832
-.. .. .. .. .. .. .. .. 1830
-.. .. .. .. .. .. .. .. .. .. 1828
-.. .. .. .. .. .. .. .. .. 1826
-.. .. .. .. .. .. .. .. .. .. 1824
-.. .. .. 1822
-.. .. .. .. .. .. .. .. 1820
-.. .. .. .. .. .. .. .. .. 1818
-.. .. .. .. .. .. .. 1816
-.. .. .. .. .. .. .. .. 1814
-.. .. .. .. .. .. 1812
-.. .. .. .. .. .. .. .. 1810
-.. .. .. .. .. .. .. .. .. 1808
-.. .. .. .. .. .. .. 1806
-.. .. .. .. .. .. .. .. 1804
-.. .. .. .. .. 1802
-.. .. .. .. .. .. .. .. 1800
-.. .. .. .. .. .. .. .. .. 1798
-.. .. .. .. .. .. .. 1796
-.. .. .. .. .. .. .. .. 1794
-.. .. .. .. .. .. 1792
-.. .. .. .. .. .. .. .. 1790
-.. .. .. .. .. .. .. .. .. 1788
-.. .. .. .. .. .. .. 1786
-.. .. .. .. .. .. .. .. .. 1784
-.. .. .. .. .. .. .. .. 1782
-.. .. .. .. .. .. .. .. .. 1780
-.. .. .. .. 1778
-.. .. .. .. .. .. .. .. .. 1776
-.. .. .. .. .. .. .. .. 1774
-.. .. .. .. .. .. .. 1772
-.. .. .. .. .. .. .. .. 1770
-.. .. .. .. .. .. 1768
-.. .. .. .. .. .. .. .. .. 1766
-.. .. .. .. .. .. .. .. 1764
-.. .. .. .. .. .. .. .. .. 1762
-.. .. .. .. .. .. .. 1760
-.. .. .. .. .. .. .. .. .. 1758
-.. .. .. .. .. .. .. .. 1756
-.. .. .. .. .. 1754
-.. .. .. .. .. .. .. .. 1752
-.. .. .. .. .. .. .. 1750
-.. .. .. .. .. .. .. .. .. 1748
-.. .. .. .. .. .. .. .. 1746
-.. .. .. .. .. .. 1744
-.. .. .. .. .. .. .. .. .. 1742
-.. .. .. .. .. .. .. .. 1740
-.. .. .. .. .. .. .. .. .. 1738
-.. .. .. .. .. .. .. 1736
-.. .. .. .. .. .. .. .. .. 1734
-.. .. .. .. .. .. .. .. .. .. 1732
-.. .. .. .. .. .. .. .. 1730
-.. .. .. .. .. .. .. .. .. 1728
-.. .. 1726
-.. .. .. .. .. .. .. .. .. 1724
-.. .. .. .. .. .. .. .. 1722
-.. .. .. .. .. .. .. .. .. 1720
-.. .. .. .. .. .. .. .. .. .. 1718
-.. .. .. .. .. .. .. 1716
-.. .. .. .. .. .. .. .. .. 1714
-.. .. .. .. .. .. .. .. 1712
-.. .. .. .. .. .. 1710
-.. .. .. .. .. .. .. .. .. 1708
-.. .. .. .. .. .. .. .. 1706
-.. .. .. .. .. .. .. 1704
-.. .. .. .. .. .. .. .. .. 1702
-.. .. .. .. .. .. .. .. .. .. 1700
-.. .. .. .. .. .. .. .. 1698
-.. .. .. .. .. .. .. .. .. 1696
-.. .. .. .. .. 1694
-.. .. .. .. .. .. .. .. 1692
-.. .. .. .. .. .. .. .. .. 1690
-.. .. .. .. .. .. .. 1688
-.. .. .. .. .. .. .. .. .. 1686
-.. .. .. .. .. .. .. .. 1684
-.. .. .. .. .. .. .. .. .. 1682
-.. .. .. .. .. .. 1680
-.. .. .. .. .. .. .. .. 1678
-.. .. .. .. .. .. .. 1676
-.. .. .. .. 1674
-.. .. .. .. .. .. .. .. 1672
-.. .. .. .. .. .. .. 1670
-.. .. .. .. .. .. .. .. 1668
-.. .. .. .. .. .. 1666
-.. .. .. .. .. .. .. .. .. 1664
-.. .. .. .. .. .. .. .. 1662
-.. .. .. .. .. .. .. 1660
-.. .. .. .. .. .. .. .. 1658
-.. .. .. .. .. 1656
-.. .. .. .. .. .. .. .. .. 1654
-.. .. .. .. .. .. .. .. 1652
-.. .. .. .. .. .. .. 1650
-.. .. .. .. .. .. .. .. .. 1648
-.. .. .. .. .. .. .. .. 1646
-.. .. .. .. .. .. .. .. .. 1644
-.. .. .. .. .. .. 1642
-.. .. .. .. .. .. .. .. 1640
-.. .. .. .. .. .. .. .. .. 1638
-.. .. .. .. .. .. .. 1636
-.. .. .. .. .. .. .. .. .. 1634
-.. .. .. .. .. .. .. .. 1632
-.. .. .. .. .. .. .. .. .. 1630
-.. .. .. 1628
-.. .. .. .. .. .. .. .. 1626
-.. .. .. .. .. .. .. 1624
-.. .. .. .. .. .. 1622
-.. .. .. .. .. .. .. .. 1620
-.. .. .. .. .. .. .. 1618
-.. .. .. .. .. .. .. .. .. 1616
-.. .. .. .. .. .. .. .. 1614
-.. .. .. .. .. 1612
-.. .. .. .. .. .. .. .. .. 1610
-.. .. .. .. .. .. .. .. 1608
-.. .. .. .. .. .. .. 1606
-.. .. .. .. .. .. .. .. .. 1604
-.. .. .. .. .. .. .. .. 1602
-.. .. .. .. .. .. .. .. .. 1600
-.. .. .. .. .. .. 1598
-.. .. .. .. .. .. .. .. 1596
-.. .. .. .. .. .. .. .. .. 1594
-.. .. .. .. .. .. .. 1592
-.. .. .. .. .. .. .. .. 1590
-.. .. .. .. 1588
-.. .. .. .. .. .. .. .. 1586
-.. .. .. .. .. .. .. 1584
-.. .. .. .. .. .. .. .. .. 1582
-.. .. .. .. .. .. .. .. 1580
-.. .. .. .. .. .. 1578
-.. .. .. .. .. .. .. .. 1576
-.. .. .. .. .. .. .. 1574
-.. .. .. .. .. .. .. .. 1572
-.. .. .. .. .. .. .. .. .. 1570
-.. .. .. .. .. 1568
-.. .. .. .. .. .. .. .. 1566
-.. .. .. .. .. .. .. 1564
-.. .. .. .. .. .. .. .. .. 1562
-.. .. .. .. .. .. .. .. 1560
-.. .. .. .. .. .. .. .. .. 1558
-.. .. .. .. .. .. 1556
-.. .. .. .. .. .. .. .. 1554
-.. .. .. .. .. .. .. 1552
-.. .. .. .. .. .. .. .. 1550
-.. 1548
-.. .. .. .. .. .. .. .. 1546
-.. .. .. .. .. .. .. 1544
-.. .. .. .. .. .. .. .. 1542
-.. .. .. .. .. .. 1540
-.. .. .. .. .. .. .. .. .. 1538
-.. .. .. .. .. .. .. .. 1536
-.. .. .. .. .. .. .. 1534
-.. .. .. .. .. .. .. .. 1532
-.. .. .. .. .. 1530
-.. .. .. .. .. .. .. .. .. 1528
-.. .. .. .. .. .. .. .. 1526
-.. .. .. .. .. .. .. 1524
-.. .. .. .. .. .. .. .. 1522
-.. .. .. .. .. .. .. .. .. 1520
-.. .. .. .. .. .. 1518
-.. .. .. .. .. .. .. .. 1516
-.. .. .. .. .. .. .. 1514
-.. .. .. .. .. .. .. .. .. 1512
-.. .. .. .. .. .. .. .. 1510
-.. .. .. .. 1508
-.. .. .. .. .. .. .. .. 1506
-.. .. .. .. .. .. .. 1504
-.. .. .. .. .. .. .. .. 1502
-.. .. .. .. .. .. 1500
-.. .. .. .. .. .. .. 1498
-.. .. .. .. .. .. .. .. 1496
-.. .. .. .. .. 1494
-.. .. .. .. .. .. .. 1492
-.. .. .. .. .. .. .. .. 1490
-.. .. .. .. .. .. 1488
-.. .. .. .. .. .. .. .. .. 1486
-.. .. .. .. .. .. .. .. 1484
-.. .. .. .. .. .. .. .. .. 1482
-.. .. .. .. .. .. .. 1480
-.. .. .. .. .. .. .. .. .. 1478
-.. .. .. .. .. .. .. .. 1476
-.. .. .. .. .. .. .. .. .. 1474
-.. .. .. 1472
-.. .. .. .. .. .. .. .. .. .. 1470
-.. .. .. .. .. .. .. .. .. 1468
-.. .. .. .. .. .. .. .. .. .. 1466
-.. .. .. .. .. .. .. .. 1464
-.. .. .. .. .. .. .. .. .. 1462
-.. .. .. .. .. .. .. 1460
-.. .. .. .. .. .. .. .. .. .. 1458
-.. .. .. .. .. .. .. .. .. 1456
-.. .. .. .. .. .. .. .. .. .. 1454
-.. .. .. .. .. .. .. .. 1452
-.. .. .. .. .. .. .. .. .. 1450
-.. .. .. .. .. .. .. .. .. .. 1448
-.. .. .. .. .. .. 1446
-.. .. .. .. .. .. .. .. .. 1444
-.. .. .. .. .. .. .. .. 1442
-.. .. .. .. .. .. .. .. .. 1440
-.. .. .. .. .. .. .. 1438
-.. .. .. .. .. .. .. .. 1436
-.. .. .. .. .. 1434
-.. .. .. .. .. .. .. .. .. 1432
-.. .. .. .. .. .. .. .. 1430
-.. .. .. .. .. .. .. .. .. 1428
-.. .. .. .. .. .. .. 1426
-.. .. .. .. .. .. .. .. .. .. 1424
-.. .. .. .. .. .. .. .. .. 1422
-.. .. .. .. .. .. .. .. .. .. 1420
-.. .. .. .. .. .. .. .. 1418
-.. .. .. .. .. .. .. .. .. .. 1416
-.. .. .. .. .. .. .. .. .. 1414
-.. .. .. .. .. .. 1412
-.. .. .. .. .. .. .. .. .. 1410
-.. .. .. .. .. .. .. .. 1408
-.. .. .. .. .. .. .. .. .. 1406
-.. .. .. .. .. .. .. .. .. .. 1404
-.. .. .. .. .. .. .. 1402
-.. .. .. .. .. .. .. .. .. .. 1400
-.. .. .. .. .. .. .. .. .. 1398
-.. .. .. .. .. .. .. .. .. .. 1396
-.. .. .. .. .. .. .. .. 1394
-.. .. .. .. .. .. .. .. .. .. 1392
-.. .. .. .. .. .. .. .. .. 1390
-.. .. .. .. 1388
-.. .. .. .. .. .. .. .. .. .. 1386
-.. .. .. .. .. .. .. .. .. 1384
-.. .. .. .. .. .. .. .. 1382
-.. .. .. .. .. .. .. .. .. .. 1380
-.. .. .. .. .. .. .. .. .. 1378
-.. .. .. .. .. .. .. .. .. .. 1376
-.. .. .. .. .. .. .. 1374
-.. .. .. .. .. .. .. .. 1372
-.. .. .. .. .. .. .. .. .. 1370
-.. .. .. .. .. .. 1368
-.. .. .. .. .. .. .. .. .. .. 1366
-.. .. .. .. .. .. .. .. .. 1364
-.. .. .. .. .. .. .. .. .. .. 1362
-.. .. .. .. .. .. .. .. 1360
-.. .. .. .. .. .. .. .. .. 1358
-.. .. .. .. .. .. .. 1356
-.. .. .. .. .. .. .. .. .. 1354
-.. .. .. .. .. .. .. .. .. .. 1352
-.. .. .. .. .. .. .. .. 1350
-.. .. .. .. .. .. .. .. .. .. 1348
-.. .. .. .. .. .. .. .. .. 1346
-.. .. .. .. .. .. .. .. .. .. 1344
-.. .. .. .. .. 1342
-.. .. .. .. .. .. .. .. .. .. 1340
-.. .. .. .. .. .. .. .. .. 1338
-.. .. .. .. .. .. .. .. 1336
-.. .. .. .. .. .. .. .. .. .. 1334
-.. .. .. .. .. .. .. .. .. 1332
-.. .. .. .. .. .. .. .. .. .. 1330
-.. .. .. .. .. .. .. 1328
-.. .. .. .. .. .. .. .. .. .. 1326
-.. .. .. .. .. .. .. .. .. 1324
-.. .. .. .. .. .. .. .. .. .. 1322
-.. .. .. .. .. .. .. .. 1320
-.. .. .. .. .. .. .. .. .. 1318
-.. .. .. .. .. .. .. .. .. .. 1316
-.. .. .. .. .. .. 1314
-.. .. .. .. .. .. .. .. 1312
-.. .. .. .. .. .. .. .. .. 1310
-.. .. .. .. .. .. .. 1308
-.. .. .. .. .. .. .. .. .. .. 1306
-.. .. .. .. .. .. .. .. .. 1304
-.. .. .. .. .. .. .. .. .. .. 1302
-.. .. .. .. .. .. .. .. 1300
-.. .. .. .. .. .. .. .. .. 1298
-.. .. .. .. .. .. .. .. .. .. 1296
-.. .. 1294
-.. .. .. .. .. .. .. .. .. 1292
-.. .. .. .. .. .. .. .. 1290
-.. .. .. .. .. .. .. 1288
-.. .. .. .. .. .. .. .. .. 1286
-.. .. .. .. .. .. .. .. 1284
-.. .. .. .. .. .. .. .. .. 1282
-.. .. .. .. .. .. 1280
-.. .. .. .. .. .. .. .. 1278
-.. .. .. .. .. .. .. 1276
-.. .. .. .. .. 1274
-.. .. .. .. .. .. .. .. 1272
-.. .. .. .. .. .. .. .. .. 1270
-.. .. .. .. .. .. .. 1268
-.. .. .. .. .. .. .. .. .. 1266
-.. .. .. .. .. .. .. .. 1264
-.. .. .. .. .. .. .. .. .. 1262
-.. .. .. .. .. .. 1260
-.. .. .. .. .. .. .. .. .. 1258
-.. .. .. .. .. .. .. .. 1256
-.. .. .. .. .. .. .. 1254
-.. .. .. .. .. .. .. .. .. .. 1252
-.. .. .. .. .. .. .. .. .. 1250
-.. .. .. .. .. .. .. .. 1248
-.. .. .. .. .. .. .. .. .. 1246
-.. .. .. .. .. .. .. .. .. .. 1244
-.. .. .. .. 1242
-.. .. .. .. .. .. .. .. .. 1240
-.. .. .. .. .. .. .. .. 1238
-.. .. .. .. .. .. .. .. .. 1236
-.. .. .. .. .. .. .. 1234
-.. .. .. .. .. .. .. .. 1232
-.. .. .. .. .. .. 1230
-.. .. .. .. .. .. .. .. .. 1228
-.. .. .. .. .. .. .. .. 1226
-.. .. .. .. .. .. .. 1224
-.. .. .. .. .. .. .. .. .. 1222
-.. .. .. .. .. .. .. .. 1220
-.. .. .. .. .. .. .. .. .. 1218
-.. .. .. .. .. 1216
-.. .. .. .. .. .. .. .. .. 1214
-.. .. .. .. .. .. .. .. 1212
-.. .. .. .. .. .. .. .. .. 1210
-.. .. .. .. .. .. .. 1208
-.. .. .. .. .. .. .. .. 1206
-.. .. .. .. .. .. 1204
-.. .. .. .. .. .. .. .. .. 1202
-.. .. .. .. .. .. .. .. .. .. 1200
-.. .. .. .. .. .. .. .. 1198
-.. .. .. .. .. .. .. .. .. 1196
-.. .. .. .. .. .. .. 1194
-.. .. .. .. .. .. .. .. .. 1192
-.. .. .. .. .. .. .. .. 1190
-.. .. .. .. .. .. .. .. .. 1188
-.. .. .. 1186
-.. .. .. .. .. .. .. .. .. 1184
-.. .. .. .. .. .. .. .. .. .. 1182
-.. .. .. .. .. .. .. .. 1180
-.. .. .. .. .. .. .. .. .. 1178
-.. .. .. .. .. .. .. 1176
-.. .. .. .. .. .. .. .. .. 1174
-.. .. .. .. .. .. .. .. .. .. 1172
-.. .. .. .. .. .. .. .. 1170
-.. .. .. .. .. .. .. .. .. 1168
-.. .. .. .. .. .. 1166
-.. .. .. .. .. .. .. .. .. .. 1164
-.. .. .. .. .. .. .. .. .. 1162
-.. .. .. .. .. .. .. .. 1160
-.. .. .. .. .. .. .. .. .. 1158
-.. .. .. .. .. .. .. .. .. .. 1156
-.. .. .. .. .. .. .. 1152
-.. .. .. .. .. .. .. .. .. 1150
-.. .. .. .. .. .. .. .. .. .. 1148
-.. .. .. .. .. .. .. .. 1146
-.. .. .. .. .. .. .. .. .. 1144
-.. .. .. .. .. 1142
-.. .. .. .. .. .. .. .. .. 1140
-.. .. .. .. .. .. .. .. 1138
-.. .. .. .. .. .. .. .. .. 1136
-.. .. .. .. .. .. .. 1134
-.. .. .. .. .. .. .. .. .. 1132
-.. .. .. .. .. .. .. .. 1130
-.. .. .. .. .. .. .. .. .. 1128
-.. .. .. .. .. .. .. .. .. .. 1126
-.. .. .. .. .. .. 1124
-.. .. .. .. .. .. .. .. .. 1122
-.. .. .. .. .. .. .. .. 1120
-.. .. .. .. .. .. .. .. .. 1118
-.. .. .. .. .. .. .. .. .. .. 1116
-.. .. .. .. .. .. .. 1114
-.. .. .. .. .. .. .. .. 1112
-.. .. .. .. .. .. .. .. .. 1110
-.. .. .. .. 1108
-.. .. .. .. .. .. .. .. .. 1106
-.. .. .. .. .. .. .. .. 1104
-.. .. .. .. .. .. .. .. .. 1102
-.. .. .. .. .. .. .. 1100
-.. .. .. .. .. .. .. .. .. 1098
-.. .. .. .. .. .. .. .. .. .. 1096
-.. .. .. .. .. .. .. .. 1094
-.. .. .. .. .. .. .. .. .. 1092
-.. .. .. .. .. .. 1090
-.. .. .. .. .. .. .. .. 1088
-.. .. .. .. .. .. .. .. .. 1086
-.. .. .. .. .. .. .. 1084
-.. .. .. .. .. .. .. .. 1082
-.. .. .. .. .. .. .. .. .. 1080
-.. .. .. .. .. 1078
-.. .. .. .. .. .. .. .. 1076
-.. .. .. .. .. .. .. 1074
-.. .. .. .. .. .. .. .. 1072
-.. .. .. .. .. .. .. .. .. 1070
-.. .. .. .. .. .. 1068
-.. .. .. .. .. .. .. 1066
-.. .. .. .. .. .. .. .. 1064
-1062
-.. .. .. .. .. .. .. .. .. 1060
-.. .. .. .. .. .. .. .. 1058
-.. .. .. .. .. .. .. .. .. 1056
-.. .. .. .. .. .. .. 1054
-.. .. .. .. .. .. .. .. .. 1052
-.. .. .. .. .. .. .. .. 1050
-.. .. .. .. .. .. .. .. .. .. 1048
-.. .. .. .. .. .. .. .. .. 1046
-.. .. .. .. .. .. 1044
-.. .. .. .. .. .. .. .. .. .. 1042
-.. .. .. .. .. .. .. .. .. .. .. 1040
-.. .. .. .. .. .. .. .. .. 1038
-.. .. .. .. .. .. .. .. .. .. .. 1036
-.. .. .. .. .. .. .. .. .. .. 1034
-.. .. .. .. .. .. .. .. .. .. .. 1032
-.. .. .. .. .. .. .. .. 1030
-.. .. .. .. .. .. .. .. .. .. 1028
-.. .. .. .. .. .. .. .. .. 1026
-.. .. .. .. .. .. .. .. .. .. 1024
-.. .. .. .. .. .. .. 1022
-.. .. .. .. .. .. .. .. .. .. 1020
-.. .. .. .. .. .. .. .. .. 1018
-.. .. .. .. .. .. .. .. .. .. 1016
-.. .. .. .. .. .. .. .. 1014
-.. .. .. .. .. .. .. .. .. .. 1012
-.. .. .. .. .. .. .. .. .. 1010
-.. .. .. .. .. .. .. .. .. .. 1008
-.. .. .. .. .. 1006
-.. .. .. .. .. .. .. .. .. 1004
-.. .. .. .. .. .. .. .. 1002
-.. .. .. .. .. .. .. .. .. 1000
-.. .. .. .. .. .. .. 998
-.. .. .. .. .. .. .. .. .. .. 996
-.. .. .. .. .. .. .. .. .. 994
-.. .. .. .. .. .. .. .. .. .. 992
-.. .. .. .. .. .. .. .. 990
-.. .. .. .. .. .. .. .. .. 988
-.. .. .. .. .. .. 986
-.. .. .. .. .. .. .. .. .. .. 984
-.. .. .. .. .. .. .. .. .. 982
-.. .. .. .. .. .. .. .. .. .. 980
-.. .. .. .. .. .. .. .. 978
-.. .. .. .. .. .. .. .. .. 976
-.. .. .. .. .. .. .. .. .. .. 974
-.. .. .. .. .. .. .. 972
-.. .. .. .. .. .. .. .. .. 970
-.. .. .. .. .. .. .. .. 968
-.. .. .. .. .. .. .. .. .. 966
-.. .. .. .. 964
-.. .. .. .. .. .. .. .. .. 962
-.. .. .. .. .. .. .. .. .. .. 960
-.. .. .. .. .. .. .. .. 958
-.. .. .. .. .. .. .. .. .. 956
-.. .. .. .. .. .. .. 954
-.. .. .. .. .. .. .. .. 952
-.. .. .. .. .. .. .. .. .. 950
-.. .. .. .. .. .. 948
-.. .. .. .. .. .. .. .. .. 946
-.. .. .. .. .. .. .. .. .. .. 944
-.. .. .. .. .. .. .. .. 942
-.. .. .. .. .. .. .. .. .. 940
-.. .. .. .. .. .. .. 938
-.. .. .. .. .. .. .. .. .. .. 936
-.. .. .. .. .. .. .. .. .. 934
-.. .. .. .. .. .. .. .. 932
-.. .. .. .. .. .. .. .. .. .. 930
-.. .. .. .. .. .. .. .. .. 928
-.. .. .. .. .. .. .. .. .. .. 926
-.. .. .. .. .. 924
-.. .. .. .. .. .. .. .. .. 922
-.. .. .. .. .. .. .. .. 920
-.. .. .. .. .. .. .. .. .. .. 918
-.. .. .. .. .. .. .. .. .. 916
-.. .. .. .. .. .. .. 914
-.. .. .. .. .. .. .. .. .. 912
-.. .. .. .. .. .. .. .. 910
-.. .. .. .. .. .. 908
-.. .. .. .. .. .. .. .. 906
-.. .. .. .. .. .. .. 904
-.. .. .. .. .. .. .. .. .. 900
-.. .. .. .. .. .. .. .. 898
-.. .. .. 896
-.. .. .. .. .. .. .. .. .. 894
-.. .. .. .. .. .. .. .. 892
-.. .. .. .. .. .. .. .. .. 890
-.. .. .. .. .. .. .. .. .. .. 888
-.. .. .. .. .. .. .. 886
-.. .. .. .. .. .. .. .. .. .. 884
-.. .. .. .. .. .. .. .. .. 882
-.. .. .. .. .. .. .. .. .. .. .. 880
-.. .. .. .. .. .. .. .. .. .. 878
-.. .. .. .. .. .. .. .. 876
-.. .. .. .. .. .. .. .. .. .. 874
-.. .. .. .. .. .. .. .. .. 872
-.. .. .. .. .. .. .. .. .. .. 870
-.. .. .. .. .. .. 868
-.. .. .. .. .. .. .. .. .. .. 866
-.. .. .. .. .. .. .. .. .. 864
-.. .. .. .. .. .. .. .. 862
-.. .. .. .. .. .. .. .. .. 860
-.. .. .. .. .. .. .. .. .. .. 858
-.. .. .. .. .. .. .. 856
-.. .. .. .. .. .. .. .. .. 854
-.. .. .. .. .. .. .. .. 852
-.. .. .. .. .. .. .. .. .. 850
-.. .. .. .. .. .. .. .. .. .. 848
-.. .. .. .. .. 846
-.. .. .. .. .. .. .. .. .. .. 844
-.. .. .. .. .. .. .. .. .. 842
-.. .. .. .. .. .. .. .. 840
-.. .. .. .. .. .. .. .. .. 838
-.. .. .. .. .. .. .. 836
-.. .. .. .. .. .. .. .. .. 834
-.. .. .. .. .. .. .. .. .. .. 832
-.. .. .. .. .. .. .. .. 830
-.. .. .. .. .. .. .. .. .. 828
-.. .. .. .. .. .. 826
-.. .. .. .. .. .. .. .. .. 824
-.. .. .. .. .. .. .. .. 822
-.. .. .. .. .. .. .. 820
-.. .. .. .. .. .. .. .. .. .. 818
-.. .. .. .. .. .. .. .. .. 816
-.. .. .. .. .. .. .. .. 814
-.. .. .. .. .. .. .. .. .. .. 812
-.. .. .. .. .. .. .. .. .. 810
-.. .. .. .. 808
-.. .. .. .. .. .. .. .. .. 806
-.. .. .. .. .. .. .. .. 804
-.. .. .. .. .. .. .. 802
-.. .. .. .. .. .. .. .. .. 800
-.. .. .. .. .. .. .. .. 798
-.. .. .. .. .. .. .. .. .. 796
-.. .. .. .. .. .. 794
-.. .. .. .. .. .. .. .. .. 792
-.. .. .. .. .. .. .. .. 790
-.. .. .. .. .. .. .. .. .. 788
-.. .. .. .. .. .. .. 786
-.. .. .. .. .. .. .. .. 784
-.. .. .. .. .. .. .. .. .. 782
-.. .. .. .. .. 780
-.. .. .. .. .. .. .. .. .. .. 778
-.. .. .. .. .. .. .. .. .. 776
-.. .. .. .. .. .. .. .. .. .. 774
-.. .. .. .. .. .. .. .. 772
-.. .. .. .. .. .. .. .. .. 770
-.. .. .. .. .. .. .. 768
-.. .. .. .. .. .. .. .. .. .. 766
-.. .. .. .. .. .. .. .. .. 764
-.. .. .. .. .. .. .. .. 762
-.. .. .. .. .. .. .. .. .. .. 760
-.. .. .. .. .. .. .. .. .. 758
-.. .. .. .. .. .. .. .. .. .. 756
-.. .. .. .. .. .. 754
-.. .. .. .. .. .. .. .. .. .. 752
-.. .. .. .. .. .. .. .. .. 750
-.. .. .. .. .. .. .. .. .. .. 748
-.. .. .. .. .. .. .. .. 746
-.. .. .. .. .. .. .. .. .. .. 744
-.. .. .. .. .. .. .. .. .. 742
-.. .. .. .. .. .. .. .. .. .. 740
-.. .. .. .. .. .. .. 738
-.. .. .. .. .. .. .. .. .. 736
-.. .. .. .. .. .. .. .. 734
-.. .. .. .. .. .. .. .. .. 732
-.. .. .. .. .. .. .. .. .. .. 730
-.. .. 728
-.. .. .. .. .. .. .. .. 726
-.. .. .. .. .. .. .. .. .. 724
-.. .. .. .. .. .. .. 722
-.. .. .. .. .. .. .. .. .. 720
-.. .. .. .. .. .. .. .. .. .. 718
-.. .. .. .. .. .. .. .. 716
-.. .. .. .. .. .. .. .. .. 714
-.. .. .. .. .. .. 712
-.. .. .. .. .. .. .. .. .. 710
-.. .. .. .. .. .. .. .. 708
-.. .. .. .. .. .. .. 706
-.. .. .. .. .. .. .. .. .. 704
-.. .. .. .. .. .. .. .. 702
-.. .. .. .. .. .. .. .. .. 700
-.. .. .. .. .. 698
-.. .. .. .. .. .. .. .. 696
-.. .. .. .. .. .. .. 694
-.. .. .. .. .. .. .. .. 692
-.. .. .. .. .. .. .. .. .. 690
-.. .. .. .. .. .. 688
-.. .. .. .. .. .. .. 686
-.. .. .. .. .. .. .. .. 684
-.. .. .. .. 682
-.. .. .. .. .. .. .. .. 680
-.. .. .. .. .. .. .. 678
-.. .. .. .. .. .. 676
-.. .. .. .. .. .. .. .. 674
-.. .. .. .. .. .. .. 672
-.. .. .. .. .. .. .. .. 670
-.. .. .. .. .. 668
-.. .. .. .. .. .. .. .. .. 666
-.. .. .. .. .. .. .. .. 664
-.. .. .. .. .. .. .. .. .. 662
-.. .. .. .. .. .. .. 660
-.. .. .. .. .. .. .. .. 658
-.. .. .. .. .. .. 656
-.. .. .. .. .. .. .. .. .. 654
-.. .. .. .. .. .. .. .. 652
-.. .. .. .. .. .. .. .. .. 650
-.. .. .. .. .. .. .. 648
-.. .. .. .. .. .. .. .. 646
-.. .. .. .. .. .. .. .. .. 644
-.. .. .. 642
-.. .. .. .. .. .. .. .. .. 640
-.. .. .. .. .. .. .. .. 638
-.. .. .. .. .. .. .. 636
-.. .. .. .. .. .. .. .. .. 634
-.. .. .. .. .. .. .. .. 632
-.. .. .. .. .. .. .. .. .. 630
-.. .. .. .. .. .. 628
-.. .. .. .. .. .. .. .. .. 626
-.. .. .. .. .. .. .. .. 624
-.. .. .. .. .. .. .. .. .. 622
-.. .. .. .. .. .. .. 620
-.. .. .. .. .. .. .. .. .. 618
-.. .. .. .. .. .. .. .. 616
-.. .. .. .. .. 614
-.. .. .. .. .. .. .. .. .. 612
-.. .. .. .. .. .. .. .. 610
-.. .. .. .. .. .. .. .. .. .. 608
-.. .. .. .. .. .. .. .. .. 606
-.. .. .. .. .. .. .. .. .. .. 604
-.. .. .. .. .. .. .. 602
-.. .. .. .. .. .. .. .. .. 600
-.. .. .. .. .. .. .. .. 598
-.. .. .. .. .. .. 596
-.. .. .. .. .. .. .. .. .. 594
-.. .. .. .. .. .. .. .. 592
-.. .. .. .. .. .. .. .. .. 590
-.. .. .. .. .. .. .. 588
-.. .. .. .. .. .. .. .. .. .. 586
-.. .. .. .. .. .. .. .. .. 584
-.. .. .. .. .. .. .. .. 582
-.. .. .. .. .. .. .. .. .. 580
-.. .. .. .. 578
-.. .. .. .. .. .. .. .. .. 576
-.. .. .. .. .. .. .. .. 574
-.. .. .. .. .. .. .. .. .. 572
-.. .. .. .. .. .. .. 570
-.. .. .. .. .. .. .. .. .. .. 568
-.. .. .. .. .. .. .. .. .. 566
-.. .. .. .. .. .. .. .. .. .. 564
-.. .. .. .. .. .. .. .. 562
-.. .. .. .. .. .. .. .. .. 560
-.. .. .. .. .. .. .. .. .. .. 558
-.. .. .. .. .. .. 556
-.. .. .. .. .. .. .. .. .. 554
-.. .. .. .. .. .. .. .. 552
-.. .. .. .. .. .. .. 550
-.. .. .. .. .. .. .. .. .. 548
-.. .. .. .. .. .. .. .. 546
-.. .. .. .. .. 544
-.. .. .. .. .. .. .. .. 542
-.. .. .. .. .. .. .. .. .. 540
-.. .. .. .. .. .. .. 538
-.. .. .. .. .. .. .. .. .. 536
-.. .. .. .. .. .. .. .. 534
-.. .. .. .. .. .. .. .. .. 532
-.. .. .. .. .. .. 530
-.. .. .. .. .. .. .. .. 528
-.. .. .. .. .. .. .. 526
-.. .. .. .. .. .. .. .. 524
-.. 522
-.. .. .. .. .. .. .. .. .. .. 520
-.. .. .. .. .. .. .. .. .. 518
-.. .. .. .. .. .. .. .. 516
-.. .. .. .. .. .. .. .. .. 514
-.. .. .. .. .. .. .. .. .. .. 512
-.. .. .. .. .. .. .. 510
-.. .. .. .. .. .. .. .. .. 508
-.. .. .. .. .. .. .. .. 506
-.. .. .. .. .. .. .. .. .. 504
-.. .. .. .. .. .. 502
-.. .. .. .. .. .. .. .. .. .. 500
-.. .. .. .. .. .. .. .. .. 498
-.. .. .. .. .. .. .. .. 496
-.. .. .. .. .. .. .. .. .. 494
-.. .. .. .. .. .. .. 492
-.. .. .. .. .. .. .. .. .. .. 490
-.. .. .. .. .. .. .. .. .. 488
-.. .. .. .. .. .. .. .. 486
-.. .. .. .. .. .. .. .. .. 484
-.. .. .. .. .. 482
-.. .. .. .. .. .. .. .. .. 480
-.. .. .. .. .. .. .. .. 478
-.. .. .. .. .. .. .. .. .. 476
-.. .. .. .. .. .. .. 474
-.. .. .. .. .. .. .. .. 472
-.. .. .. .. .. .. 470
-.. .. .. .. .. .. .. .. 468
-.. .. .. .. .. .. .. 466
-.. .. .. .. .. .. .. .. 464
-.. .. .. .. 462
-.. .. .. .. .. .. .. .. .. .. 460
-.. .. .. .. .. .. .. .. .. 458
-.. .. .. .. .. .. .. .. .. .. 456
-.. .. .. .. .. .. .. .. 454
-.. .. .. .. .. .. .. .. .. .. 452
-.. .. .. .. .. .. .. .. .. 450
-.. .. .. .. .. .. .. .. .. .. 448
-.. .. .. .. .. .. .. 446
-.. .. .. .. .. .. .. .. 444
-.. .. .. .. .. .. .. .. .. 442
-.. .. .. .. .. .. 440
-.. .. .. .. .. .. .. .. .. .. 438
-.. .. .. .. .. .. .. .. .. 436
-.. .. .. .. .. .. .. .. .. .. 434
-.. .. .. .. .. .. .. .. 432
-.. .. .. .. .. .. .. .. .. 430
-.. .. .. .. .. .. .. 428
-.. .. .. .. .. .. .. .. 426
-.. .. .. .. .. .. .. .. .. 424
-.. .. .. .. .. 422
-.. .. .. .. .. .. .. .. .. 420
-.. .. .. .. .. .. .. .. .. .. 418
-.. .. .. .. .. .. .. .. 416
-.. .. .. .. .. .. .. .. .. .. 414
-.. .. .. .. .. .. .. .. .. 412
-.. .. .. .. .. .. .. 410
-.. .. .. .. .. .. .. .. .. 408
-.. .. .. .. .. .. .. .. .. .. 406
-.. .. .. .. .. .. .. .. 404
-.. .. .. .. .. .. .. .. .. 402
-.. .. .. .. .. .. .. .. .. .. 400
-.. .. .. .. .. .. 398
-.. .. .. .. .. .. .. .. .. 396
-.. .. .. .. .. .. .. .. 394
-.. .. .. .. .. .. .. .. .. 392
-.. .. .. .. .. .. .. .. .. .. 390
-.. .. .. .. .. .. .. 388
-.. .. .. .. .. .. .. .. .. .. 386
-.. .. .. .. .. .. .. .. .. 384
-.. .. .. .. .. .. .. .. 382
-.. .. .. .. .. .. .. .. .. .. 380
-.. .. .. .. .. .. .. .. .. 378
-.. .. .. .. .. .. .. .. .. .. 376
-.. .. .. 374
-.. .. .. .. .. .. .. .. 372
-.. .. .. .. .. .. .. 370
-.. .. .. .. .. .. 368
-.. .. .. .. .. .. .. .. 366
-.. .. .. .. .. .. .. .. .. 364
-.. .. .. .. .. .. .. 362
-.. .. .. .. .. .. .. .. 360
-.. .. .. .. .. 358
-.. .. .. .. .. .. .. .. 356
-.. .. .. .. .. .. .. .. .. 354
-.. .. .. .. .. .. .. 352
-.. .. .. .. .. .. .. .. .. 350
-.. .. .. .. .. .. .. .. 348
-.. .. .. .. .. .. .. .. .. 346
-.. .. .. .. .. .. 344
-.. .. .. .. .. .. .. .. .. 342
-.. .. .. .. .. .. .. .. 340
-.. .. .. .. .. .. .. .. .. 338
-.. .. .. .. .. .. .. 336
-.. .. .. .. .. .. .. .. .. 334
-.. .. .. .. .. .. .. .. 332
-.. .. .. .. .. .. .. .. .. 330
-.. .. .. .. 328
-.. .. .. .. .. .. .. .. .. 326
-.. .. .. .. .. .. .. .. 324
-.. .. .. .. .. .. .. 322
-.. .. .. .. .. .. .. .. 320
-.. .. .. .. .. .. 318
-.. .. .. .. .. .. .. .. .. 316
-.. .. .. .. .. .. .. .. 314
-.. .. .. .. .. .. .. .. .. .. 312
-.. .. .. .. .. .. .. .. .. 310
-.. .. .. .. .. .. .. .. .. .. 308
-.. .. .. .. .. .. .. 306
-.. .. .. .. .. .. .. .. .. .. 304
-.. .. .. .. .. .. .. .. .. 302
-.. .. .. .. .. .. .. .. 300
-.. .. .. .. .. .. .. .. .. 298
-.. .. .. .. .. 296
-.. .. .. .. .. .. .. .. .. 294
-.. .. .. .. .. .. .. .. 292
-.. .. .. .. .. .. .. .. .. 290
-.. .. .. .. .. .. .. 288
-.. .. .. .. .. .. .. .. 286
-.. .. .. .. .. .. 284
-.. .. .. .. .. .. .. .. .. 282
-.. .. .. .. .. .. .. .. 280
-.. .. .. .. .. .. .. .. .. 278
-.. .. .. .. .. .. .. 276
-.. .. .. .. .. .. .. .. .. .. 274
-.. .. .. .. .. .. .. .. .. 272
-.. .. .. .. .. .. .. .. 270
-.. .. .. .. .. .. .. .. .. 268
-.. .. 266
-.. .. .. .. .. .. .. .. .. 264
-.. .. .. .. .. .. .. .. 262
-.. .. .. .. .. .. .. .. .. 260
-.. .. .. .. .. .. .. 258
-.. .. .. .. .. .. .. .. .. 256
-.. .. .. .. .. .. .. .. 254
-.. .. .. .. .. .. .. .. .. 252
-.. .. .. .. .. .. 250
-.. .. .. .. .. .. .. .. .. 248
-.. .. .. .. .. .. .. .. 246
-.. .. .. .. .. .. .. .. .. 244
-.. .. .. .. .. .. .. 242
-.. .. .. .. .. .. .. .. 240
-.. .. .. .. .. 238
-.. .. .. .. .. .. .. .. .. 236
-.. .. .. .. .. .. .. .. 234
-.. .. .. .. .. .. .. .. .. 232
-.. .. .. .. .. .. .. 230
-.. .. .. .. .. .. .. .. 228
-.. .. .. .. .. .. 226
-.. .. .. .. .. .. .. .. .. .. 224
-.. .. .. .. .. .. .. .. .. 222
-.. .. .. .. .. .. .. .. 220
-.. .. .. .. .. .. .. .. .. .. 218
-.. .. .. .. .. .. .. .. .. 216
-.. .. .. .. .. .. .. 214
-.. .. .. .. .. .. .. .. .. 212
-.. .. .. .. .. .. .. .. 210
-.. .. .. .. 208
-.. .. .. .. .. .. .. .. .. .. 206
-.. .. .. .. .. .. .. .. .. 204
-.. .. .. .. .. .. .. .. .. .. 202
-.. .. .. .. .. .. .. .. 200
-.. .. .. .. .. .. .. .. .. .. 198
-.. .. .. .. .. .. .. .. .. 196
-.. .. .. .. .. .. .. 194
-.. .. .. .. .. .. .. .. .. 192
-.. .. .. .. .. .. .. .. .. .. 190
-.. .. .. .. .. .. .. .. 188
-.. .. .. .. .. .. .. .. .. 186
-.. .. .. .. .. .. 184
-.. .. .. .. .. .. .. .. .. 182
-.. .. .. .. .. .. .. .. 180
-.. .. .. .. .. .. .. .. .. 178
-.. .. .. .. .. .. .. 176
-.. .. .. .. .. .. .. .. .. .. 174
-.. .. .. .. .. .. .. .. .. 172
-.. .. .. .. .. .. .. .. 170
-.. .. .. .. .. .. .. .. .. .. 168
-.. .. .. .. .. .. .. .. .. 166
-.. .. .. .. .. .. .. .. .. .. 164
-.. .. .. .. .. 162
-.. .. .. .. .. .. .. .. .. 160
-.. .. .. .. .. .. .. .. 158
-.. .. .. .. .. .. .. .. .. 156
-.. .. .. .. .. .. .. 154
-.. .. .. .. .. .. .. .. 152
-.. .. .. .. .. .. .. .. .. 150
-.. .. .. .. .. .. 148
-.. .. .. .. .. .. .. .. 146
-.. .. .. .. .. .. .. .. .. 144
-.. .. .. .. .. .. .. 142
-.. .. .. .. .. .. .. .. .. 140
-.. .. .. .. .. .. .. .. 138
-.. .. .. .. .. .. .. .. .. .. 136
-.. .. .. .. .. .. .. .. .. 134
-.. .. .. 132
-.. .. .. .. .. .. .. .. 130
-.. .. .. .. .. .. .. 128
-.. .. .. .. .. .. .. .. .. 126
-.. .. .. .. .. .. .. .. 124
-.. .. .. .. .. .. 122
-.. .. .. .. .. .. .. .. .. 120
-.. .. .. .. .. .. .. .. 118
-.. .. .. .. .. .. .. 116
-.. .. .. .. .. .. .. .. .. 114
-.. .. .. .. .. .. .. .. 112
-.. .. .. .. .. .. .. .. .. 110
-.. .. .. .. .. 108
-.. .. .. .. .. .. .. .. .. 106
-.. .. .. .. .. .. .. .. 104
-.. .. .. .. .. .. .. .. .. 102
-.. .. .. .. .. .. .. 100
-.. .. .. .. .. .. .. .. .. 98
-.. .. .. .. .. .. .. .. 96
-.. .. .. .. .. .. .. .. .. 94
-.. .. .. .. .. .. .. .. .. .. 92
-.. .. .. .. .. .. 90
-.. .. .. .. .. .. .. .. .. 88
-.. .. .. .. .. .. .. .. 86
-.. .. .. .. .. .. .. .. .. 84
-.. .. .. .. .. .. .. 82
-.. .. .. .. .. .. .. .. .. 80
-.. .. .. .. .. .. .. .. 78
-.. .. .. .. 76
-.. .. .. .. .. .. .. .. .. 74
-.. .. .. .. .. .. .. .. 72
-.. .. .. .. .. .. .. .. .. 70
-.. .. .. .. .. .. .. 68
-.. .. .. .. .. .. .. .. .. .. 66
-.. .. .. .. .. .. .. .. .. 64
-.. .. .. .. .. .. .. .. .. .. 62
-.. .. .. .. .. .. .. .. 60
-.. .. .. .. .. .. .. .. .. 58
-.. .. .. .. .. .. 56
-.. .. .. .. .. .. .. .. .. 54
-.. .. .. .. .. .. .. .. 52
-.. .. .. .. .. .. .. .. .. 50
-.. .. .. .. .. .. .. 48
-.. .. .. .. .. .. .. .. .. 46
-.. .. .. .. .. .. .. .. 44
-.. .. .. .. .. .. .. .. .. 42
-.. .. .. .. .. 40
-.. .. .. .. .. .. .. .. .. .. 38
-.. .. .. .. .. .. .. .. .. 36
-.. .. .. .. .. .. .. .. 34
-.. .. .. .. .. .. .. .. .. 32
-.. .. .. .. .. .. .. 30
-.. .. .. .. .. .. .. .. .. 28
-.. .. .. .. .. .. .. .. 26
-.. .. .. .. .. .. .. .. .. 24
-.. .. .. .. .. .. .. .. .. .. 22
-.. .. .. .. .. .. 20
-.. .. .. .. .. .. .. .. .. .. 18
-.. .. .. .. .. .. .. .. .. 16
-.. .. .. .. .. .. .. .. .. .. 14
-.. .. .. .. .. .. .. .. 12
-.. .. .. .. .. .. .. .. .. 10
-.. .. .. .. .. .. .. .. .. .. 8
-.. .. .. .. .. .. .. 6
-.. .. .. .. .. .. .. .. .. 4
-.. .. .. .. .. .. .. .. 2
-.. .. .. .. .. .. .. .. .. 0
--- end single oset, no pool allocator ----------------
--- start single oset, pool allocator ----------------
-.. .. .. .. .. .. .. .. .. 1998
-.. .. .. .. .. .. .. .. 1996
-.. .. .. .. .. .. .. .. .. .. 1994
-.. .. .. .. .. .. .. .. .. 1992
-.. .. .. .. .. .. .. .. .. .. 1990
-.. .. .. .. .. .. .. 1988
-.. .. .. .. .. .. .. .. .. 1986
-.. .. .. .. .. .. .. .. .. .. 1984
-.. .. .. .. .. .. .. .. 1982
-.. .. .. .. .. .. .. .. .. .. 1980
-.. .. .. .. .. .. .. .. .. 1978
-.. .. .. .. .. .. .. .. .. .. 1976
-.. .. .. .. .. .. 1974
-.. .. .. .. .. .. .. .. .. .. 1972
-.. .. .. .. .. .. .. .. .. 1970
-.. .. .. .. .. .. .. .. .. .. 1968
-.. .. .. .. .. .. .. .. 1966
-.. .. .. .. .. .. .. .. .. .. 1964
-.. .. .. .. .. .. .. .. .. 1962
-.. .. .. .. .. .. .. 1960
-.. .. .. .. .. .. .. .. .. .. 1958
-.. .. .. .. .. .. .. .. .. 1956
-.. .. .. .. .. .. .. .. 1954
-.. .. .. .. .. .. .. .. .. .. 1952
-.. .. .. .. .. .. .. .. .. 1950
-.. .. .. .. .. .. .. .. .. .. 1948
-.. .. .. .. .. 1946
-.. .. .. .. .. .. .. .. .. 1944
-.. .. .. .. .. .. .. .. 1942
-.. .. .. .. .. .. .. 1940
-.. .. .. .. .. .. .. .. .. .. 1938
-.. .. .. .. .. .. .. .. .. 1936
-.. .. .. .. .. .. .. .. 1934
-.. .. .. .. .. .. .. .. .. 1932
-.. .. .. .. .. .. 1930
-.. .. .. .. .. .. .. .. .. 1928
-.. .. .. .. .. .. .. .. .. .. 1926
-.. .. .. .. .. .. .. .. 1924
-.. .. .. .. .. .. .. .. .. .. 1922
-.. .. .. .. .. .. .. .. .. 1920
-.. .. .. .. .. .. .. .. .. .. 1918
-.. .. .. .. .. .. .. 1916
-.. .. .. .. .. .. .. .. .. 1914
-.. .. .. .. .. .. .. .. 1912
-.. .. .. .. .. .. .. .. .. .. 1910
-.. .. .. .. .. .. .. .. .. 1908
-.. .. .. .. .. .. .. .. .. .. 1906
-.. .. .. .. 1904
-.. .. .. .. .. .. .. .. .. 1902
-.. .. .. .. .. .. .. .. 1900
-.. .. .. .. .. .. .. 1898
-.. .. .. .. .. .. .. .. .. 1896
-.. .. .. .. .. .. .. .. 1894
-.. .. .. .. .. .. .. .. .. 1892
-.. .. .. .. .. .. 1890
-.. .. .. .. .. .. .. .. .. .. 1888
-.. .. .. .. .. .. .. .. .. 1886
-.. .. .. .. .. .. .. .. .. .. 1884
-.. .. .. .. .. .. .. .. 1882
-.. .. .. .. .. .. .. .. .. 1880
-.. .. .. .. .. .. .. 1878
-.. .. .. .. .. .. .. .. 1876
-.. .. .. .. .. .. .. .. .. 1874
-.. .. .. .. .. 1872
-.. .. .. .. .. .. .. .. .. .. 1870
-.. .. .. .. .. .. .. .. .. 1868
-.. .. .. .. .. .. .. .. .. .. 1866
-.. .. .. .. .. .. .. .. 1864
-.. .. .. .. .. .. .. .. .. 1862
-.. .. .. .. .. .. .. .. .. .. 1860
-.. .. .. .. .. .. .. 1858
-.. .. .. .. .. .. .. .. .. 1856
-.. .. .. .. .. .. .. .. 1854
-.. .. .. .. .. .. .. .. .. 1852
-.. .. .. .. .. .. 1848
-.. .. .. .. .. .. .. .. .. 1846
-.. .. .. .. .. .. .. .. 1844
-.. .. .. .. .. .. .. .. .. .. 1842
-.. .. .. .. .. .. .. .. .. 1840
-.. .. .. .. .. .. .. 1838
-.. .. .. .. .. .. .. .. .. .. 1836
-.. .. .. .. .. .. .. .. .. 1834
-.. .. .. .. .. .. .. .. .. .. 1832
-.. .. .. .. .. .. .. .. 1830
-.. .. .. .. .. .. .. .. .. .. 1828
-.. .. .. .. .. .. .. .. .. 1826
-.. .. .. .. .. .. .. .. .. .. 1824
-.. .. .. 1822
-.. .. .. .. .. .. .. .. 1820
-.. .. .. .. .. .. .. .. .. 1818
-.. .. .. .. .. .. .. 1816
-.. .. .. .. .. .. .. .. 1814
-.. .. .. .. .. .. 1812
-.. .. .. .. .. .. .. .. 1810
-.. .. .. .. .. .. .. .. .. 1808
-.. .. .. .. .. .. .. 1806
-.. .. .. .. .. .. .. .. 1804
-.. .. .. .. .. 1802
-.. .. .. .. .. .. .. .. 1800
-.. .. .. .. .. .. .. .. .. 1798
-.. .. .. .. .. .. .. 1796
-.. .. .. .. .. .. .. .. 1794
-.. .. .. .. .. .. 1792
-.. .. .. .. .. .. .. .. 1790
-.. .. .. .. .. .. .. .. .. 1788
-.. .. .. .. .. .. .. 1786
-.. .. .. .. .. .. .. .. .. 1784
-.. .. .. .. .. .. .. .. 1782
-.. .. .. .. .. .. .. .. .. 1780
-.. .. .. .. 1778
-.. .. .. .. .. .. .. .. .. 1776
-.. .. .. .. .. .. .. .. 1774
-.. .. .. .. .. .. .. 1772
-.. .. .. .. .. .. .. .. 1770
-.. .. .. .. .. .. 1768
-.. .. .. .. .. .. .. .. .. 1766
-.. .. .. .. .. .. .. .. 1764
-.. .. .. .. .. .. .. .. .. 1762
-.. .. .. .. .. .. .. 1760
-.. .. .. .. .. .. .. .. .. 1758
-.. .. .. .. .. .. .. .. 1756
-.. .. .. .. .. 1754
-.. .. .. .. .. .. .. .. 1752
-.. .. .. .. .. .. .. 1750
-.. .. .. .. .. .. .. .. .. 1748
-.. .. .. .. .. .. .. .. 1746
-.. .. .. .. .. .. 1744
-.. .. .. .. .. .. .. .. .. 1742
-.. .. .. .. .. .. .. .. 1740
-.. .. .. .. .. .. .. .. .. 1738
-.. .. .. .. .. .. .. 1736
-.. .. .. .. .. .. .. .. .. 1734
-.. .. .. .. .. .. .. .. .. .. 1732
-.. .. .. .. .. .. .. .. 1730
-.. .. .. .. .. .. .. .. .. 1728
-.. .. 1726
-.. .. .. .. .. .. .. .. .. 1724
-.. .. .. .. .. .. .. .. 1722
-.. .. .. .. .. .. .. .. .. 1720
-.. .. .. .. .. .. .. .. .. .. 1718
-.. .. .. .. .. .. .. 1716
-.. .. .. .. .. .. .. .. .. 1714
-.. .. .. .. .. .. .. .. 1712
-.. .. .. .. .. .. 1710
-.. .. .. .. .. .. .. .. .. 1708
-.. .. .. .. .. .. .. .. 1706
-.. .. .. .. .. .. .. 1704
-.. .. .. .. .. .. .. .. .. 1702
-.. .. .. .. .. .. .. .. .. .. 1700
-.. .. .. .. .. .. .. .. 1698
-.. .. .. .. .. .. .. .. .. 1696
-.. .. .. .. .. 1694
-.. .. .. .. .. .. .. .. 1692
-.. .. .. .. .. .. .. .. .. 1690
-.. .. .. .. .. .. .. 1688
-.. .. .. .. .. .. .. .. .. 1686
-.. .. .. .. .. .. .. .. 1684
-.. .. .. .. .. .. .. .. .. 1682
-.. .. .. .. .. .. 1680
-.. .. .. .. .. .. .. .. 1678
-.. .. .. .. .. .. .. 1676
-.. .. .. .. 1674
-.. .. .. .. .. .. .. .. 1672
-.. .. .. .. .. .. .. 1670
-.. .. .. .. .. .. .. .. 1668
-.. .. .. .. .. .. 1666
-.. .. .. .. .. .. .. .. .. 1664
-.. .. .. .. .. .. .. .. 1662
-.. .. .. .. .. .. .. 1660
-.. .. .. .. .. .. .. .. 1658
-.. .. .. .. .. 1656
-.. .. .. .. .. .. .. .. .. 1654
-.. .. .. .. .. .. .. .. 1652
-.. .. .. .. .. .. .. 1650
-.. .. .. .. .. .. .. .. .. 1648
-.. .. .. .. .. .. .. .. 1646
-.. .. .. .. .. .. .. .. .. 1644
-.. .. .. .. .. .. 1642
-.. .. .. .. .. .. .. .. 1640
-.. .. .. .. .. .. .. .. .. 1638
-.. .. .. .. .. .. .. 1636
-.. .. .. .. .. .. .. .. .. 1634
-.. .. .. .. .. .. .. .. 1632
-.. .. .. .. .. .. .. .. .. 1630
-.. .. .. 1628
-.. .. .. .. .. .. .. .. 1626
-.. .. .. .. .. .. .. 1624
-.. .. .. .. .. .. 1622
-.. .. .. .. .. .. .. .. 1620
-.. .. .. .. .. .. .. 1618
-.. .. .. .. .. .. .. .. .. 1616
-.. .. .. .. .. .. .. .. 1614
-.. .. .. .. .. 1612
-.. .. .. .. .. .. .. .. .. 1610
-.. .. .. .. .. .. .. .. 1608
-.. .. .. .. .. .. .. 1606
-.. .. .. .. .. .. .. .. .. 1604
-.. .. .. .. .. .. .. .. 1602
-.. .. .. .. .. .. .. .. .. 1600
-.. .. .. .. .. .. 1598
-.. .. .. .. .. .. .. .. 1596
-.. .. .. .. .. .. .. .. .. 1594
-.. .. .. .. .. .. .. 1592
-.. .. .. .. .. .. .. .. 1590
-.. .. .. .. 1588
-.. .. .. .. .. .. .. .. 1586
-.. .. .. .. .. .. .. 1584
-.. .. .. .. .. .. .. .. .. 1582
-.. .. .. .. .. .. .. .. 1580
-.. .. .. .. .. .. 1578
-.. .. .. .. .. .. .. .. 1576
-.. .. .. .. .. .. .. 1574
-.. .. .. .. .. .. .. .. 1572
-.. .. .. .. .. .. .. .. .. 1570
-.. .. .. .. .. 1568
-.. .. .. .. .. .. .. .. 1566
-.. .. .. .. .. .. .. 1564
-.. .. .. .. .. .. .. .. .. 1562
-.. .. .. .. .. .. .. .. 1560
-.. .. .. .. .. .. .. .. .. 1558
-.. .. .. .. .. .. 1556
-.. .. .. .. .. .. .. .. 1554
-.. .. .. .. .. .. .. 1552
-.. .. .. .. .. .. .. .. 1550
-.. 1548
-.. .. .. .. .. .. .. .. 1546
-.. .. .. .. .. .. .. 1544
-.. .. .. .. .. .. .. .. 1542
-.. .. .. .. .. .. 1540
-.. .. .. .. .. .. .. .. .. 1538
-.. .. .. .. .. .. .. .. 1536
-.. .. .. .. .. .. .. 1534
-.. .. .. .. .. .. .. .. 1532
-.. .. .. .. .. 1530
-.. .. .. .. .. .. .. .. .. 1528
-.. .. .. .. .. .. .. .. 1526
-.. .. .. .. .. .. .. 1524
-.. .. .. .. .. .. .. .. 1522
-.. .. .. .. .. .. .. .. .. 1520
-.. .. .. .. .. .. 1518
-.. .. .. .. .. .. .. .. 1516
-.. .. .. .. .. .. .. 1514
-.. .. .. .. .. .. .. .. .. 1512
-.. .. .. .. .. .. .. .. 1510
-.. .. .. .. 1508
-.. .. .. .. .. .. .. .. 1506
-.. .. .. .. .. .. .. 1504
-.. .. .. .. .. .. .. .. 1502
-.. .. .. .. .. .. 1500
-.. .. .. .. .. .. .. 1498
-.. .. .. .. .. .. .. .. 1496
-.. .. .. .. .. 1494
-.. .. .. .. .. .. .. 1492
-.. .. .. .. .. .. .. .. 1490
-.. .. .. .. .. .. 1488
-.. .. .. .. .. .. .. .. .. 1486
-.. .. .. .. .. .. .. .. 1484
-.. .. .. .. .. .. .. .. .. 1482
-.. .. .. .. .. .. .. 1480
-.. .. .. .. .. .. .. .. .. 1478
-.. .. .. .. .. .. .. .. 1476
-.. .. .. .. .. .. .. .. .. 1474
-.. .. .. 1472
-.. .. .. .. .. .. .. .. .. .. 1470
-.. .. .. .. .. .. .. .. .. 1468
-.. .. .. .. .. .. .. .. .. .. 1466
-.. .. .. .. .. .. .. .. 1464
-.. .. .. .. .. .. .. .. .. 1462
-.. .. .. .. .. .. .. 1460
-.. .. .. .. .. .. .. .. .. .. 1458
-.. .. .. .. .. .. .. .. .. 1456
-.. .. .. .. .. .. .. .. .. .. 1454
-.. .. .. .. .. .. .. .. 1452
-.. .. .. .. .. .. .. .. .. 1450
-.. .. .. .. .. .. .. .. .. .. 1448
-.. .. .. .. .. .. 1446
-.. .. .. .. .. .. .. .. .. 1444
-.. .. .. .. .. .. .. .. 1442
-.. .. .. .. .. .. .. .. .. 1440
-.. .. .. .. .. .. .. 1438
-.. .. .. .. .. .. .. .. 1436
-.. .. .. .. .. 1434
-.. .. .. .. .. .. .. .. .. 1432
-.. .. .. .. .. .. .. .. 1430
-.. .. .. .. .. .. .. .. .. 1428
-.. .. .. .. .. .. .. 1426
-.. .. .. .. .. .. .. .. .. .. 1424
-.. .. .. .. .. .. .. .. .. 1422
-.. .. .. .. .. .. .. .. .. .. 1420
-.. .. .. .. .. .. .. .. 1418
-.. .. .. .. .. .. .. .. .. .. 1416
-.. .. .. .. .. .. .. .. .. 1414
-.. .. .. .. .. .. 1412
-.. .. .. .. .. .. .. .. .. 1410
-.. .. .. .. .. .. .. .. 1408
-.. .. .. .. .. .. .. .. .. 1406
-.. .. .. .. .. .. .. .. .. .. 1404
-.. .. .. .. .. .. .. 1402
-.. .. .. .. .. .. .. .. .. .. 1400
-.. .. .. .. .. .. .. .. .. 1398
-.. .. .. .. .. .. .. .. .. .. 1396
-.. .. .. .. .. .. .. .. 1394
-.. .. .. .. .. .. .. .. .. .. 1392
-.. .. .. .. .. .. .. .. .. 1390
-.. .. .. .. 1388
-.. .. .. .. .. .. .. .. .. .. 1386
-.. .. .. .. .. .. .. .. .. 1384
-.. .. .. .. .. .. .. .. 1382
-.. .. .. .. .. .. .. .. .. .. 1380
-.. .. .. .. .. .. .. .. .. 1378
-.. .. .. .. .. .. .. .. .. .. 1376
-.. .. .. .. .. .. .. 1374
-.. .. .. .. .. .. .. .. 1372
-.. .. .. .. .. .. .. .. .. 1370
-.. .. .. .. .. .. 1368
-.. .. .. .. .. .. .. .. .. .. 1366
-.. .. .. .. .. .. .. .. .. 1364
-.. .. .. .. .. .. .. .. .. .. 1362
-.. .. .. .. .. .. .. .. 1360
-.. .. .. .. .. .. .. .. .. 1358
-.. .. .. .. .. .. .. 1356
-.. .. .. .. .. .. .. .. .. 1354
-.. .. .. .. .. .. .. .. .. .. 1352
-.. .. .. .. .. .. .. .. 1350
-.. .. .. .. .. .. .. .. .. .. 1348
-.. .. .. .. .. .. .. .. .. 1346
-.. .. .. .. .. .. .. .. .. .. 1344
-.. .. .. .. .. 1342
-.. .. .. .. .. .. .. .. .. .. 1340
-.. .. .. .. .. .. .. .. .. 1338
-.. .. .. .. .. .. .. .. 1336
-.. .. .. .. .. .. .. .. .. .. 1334
-.. .. .. .. .. .. .. .. .. 1332
-.. .. .. .. .. .. .. .. .. .. 1330
-.. .. .. .. .. .. .. 1328
-.. .. .. .. .. .. .. .. .. .. 1326
-.. .. .. .. .. .. .. .. .. 1324
-.. .. .. .. .. .. .. .. .. .. 1322
-.. .. .. .. .. .. .. .. 1320
-.. .. .. .. .. .. .. .. .. 1318
-.. .. .. .. .. .. .. .. .. .. 1316
-.. .. .. .. .. .. 1314
-.. .. .. .. .. .. .. .. 1312
-.. .. .. .. .. .. .. .. .. 1310
-.. .. .. .. .. .. .. 1308
-.. .. .. .. .. .. .. .. .. .. 1306
-.. .. .. .. .. .. .. .. .. 1304
-.. .. .. .. .. .. .. .. .. .. 1302
-.. .. .. .. .. .. .. .. 1300
-.. .. .. .. .. .. .. .. .. 1298
-.. .. .. .. .. .. .. .. .. .. 1296
-.. .. 1294
-.. .. .. .. .. .. .. .. .. 1292
-.. .. .. .. .. .. .. .. 1290
-.. .. .. .. .. .. .. 1288
-.. .. .. .. .. .. .. .. .. 1286
-.. .. .. .. .. .. .. .. 1284
-.. .. .. .. .. .. .. .. .. 1282
-.. .. .. .. .. .. 1280
-.. .. .. .. .. .. .. .. 1278
-.. .. .. .. .. .. .. 1276
-.. .. .. .. .. 1274
-.. .. .. .. .. .. .. .. 1272
-.. .. .. .. .. .. .. .. .. 1270
-.. .. .. .. .. .. .. 1268
-.. .. .. .. .. .. .. .. .. 1266
-.. .. .. .. .. .. .. .. 1264
-.. .. .. .. .. .. .. .. .. 1262
-.. .. .. .. .. .. 1260
-.. .. .. .. .. .. .. .. .. 1258
-.. .. .. .. .. .. .. .. 1256
-.. .. .. .. .. .. .. 1254
-.. .. .. .. .. .. .. .. .. .. 1252
-.. .. .. .. .. .. .. .. .. 1250
-.. .. .. .. .. .. .. .. 1248
-.. .. .. .. .. .. .. .. .. 1246
-.. .. .. .. .. .. .. .. .. .. 1244
-.. .. .. .. 1242
-.. .. .. .. .. .. .. .. .. 1240
-.. .. .. .. .. .. .. .. 1238
-.. .. .. .. .. .. .. .. .. 1236
-.. .. .. .. .. .. .. 1234
-.. .. .. .. .. .. .. .. 1232
-.. .. .. .. .. .. 1230
-.. .. .. .. .. .. .. .. .. 1228
-.. .. .. .. .. .. .. .. 1226
-.. .. .. .. .. .. .. 1224
-.. .. .. .. .. .. .. .. .. 1222
-.. .. .. .. .. .. .. .. 1220
-.. .. .. .. .. .. .. .. .. 1218
-.. .. .. .. .. 1216
-.. .. .. .. .. .. .. .. .. 1214
-.. .. .. .. .. .. .. .. 1212
-.. .. .. .. .. .. .. .. .. 1210
-.. .. .. .. .. .. .. 1208
-.. .. .. .. .. .. .. .. 1206
-.. .. .. .. .. .. 1204
-.. .. .. .. .. .. .. .. .. 1202
-.. .. .. .. .. .. .. .. .. .. 1200
-.. .. .. .. .. .. .. .. 1198
-.. .. .. .. .. .. .. .. .. 1196
-.. .. .. .. .. .. .. 1194
-.. .. .. .. .. .. .. .. .. 1192
-.. .. .. .. .. .. .. .. 1190
-.. .. .. .. .. .. .. .. .. 1188
-.. .. .. 1186
-.. .. .. .. .. .. .. .. .. 1184
-.. .. .. .. .. .. .. .. .. .. 1182
-.. .. .. .. .. .. .. .. 1180
-.. .. .. .. .. .. .. .. .. 1178
-.. .. .. .. .. .. .. 1176
-.. .. .. .. .. .. .. .. .. 1174
-.. .. .. .. .. .. .. .. .. .. 1172
-.. .. .. .. .. .. .. .. 1170
-.. .. .. .. .. .. .. .. .. 1168
-.. .. .. .. .. .. 1166
-.. .. .. .. .. .. .. .. .. .. 1164
-.. .. .. .. .. .. .. .. .. 1162
-.. .. .. .. .. .. .. .. 1160
-.. .. .. .. .. .. .. .. .. 1158
-.. .. .. .. .. .. .. .. .. .. 1156
-.. .. .. .. .. .. .. 1152
-.. .. .. .. .. .. .. .. .. 1150
-.. .. .. .. .. .. .. .. .. .. 1148
-.. .. .. .. .. .. .. .. 1146
-.. .. .. .. .. .. .. .. .. 1144
-.. .. .. .. .. 1142
-.. .. .. .. .. .. .. .. .. 1140
-.. .. .. .. .. .. .. .. 1138
-.. .. .. .. .. .. .. .. .. 1136
-.. .. .. .. .. .. .. 1134
-.. .. .. .. .. .. .. .. .. 1132
-.. .. .. .. .. .. .. .. 1130
-.. .. .. .. .. .. .. .. .. 1128
-.. .. .. .. .. .. .. .. .. .. 1126
-.. .. .. .. .. .. 1124
-.. .. .. .. .. .. .. .. .. 1122
-.. .. .. .. .. .. .. .. 1120
-.. .. .. .. .. .. .. .. .. 1118
-.. .. .. .. .. .. .. .. .. .. 1116
-.. .. .. .. .. .. .. 1114
-.. .. .. .. .. .. .. .. 1112
-.. .. .. .. .. .. .. .. .. 1110
-.. .. .. .. 1108
-.. .. .. .. .. .. .. .. .. 1106
-.. .. .. .. .. .. .. .. 1104
-.. .. .. .. .. .. .. .. .. 1102
-.. .. .. .. .. .. .. 1100
-.. .. .. .. .. .. .. .. .. 1098
-.. .. .. .. .. .. .. .. .. .. 1096
-.. .. .. .. .. .. .. .. 1094
-.. .. .. .. .. .. .. .. .. 1092
-.. .. .. .. .. .. 1090
-.. .. .. .. .. .. .. .. 1088
-.. .. .. .. .. .. .. .. .. 1086
-.. .. .. .. .. .. .. 1084
-.. .. .. .. .. .. .. .. 1082
-.. .. .. .. .. .. .. .. .. 1080
-.. .. .. .. .. 1078
-.. .. .. .. .. .. .. .. 1076
-.. .. .. .. .. .. .. 1074
-.. .. .. .. .. .. .. .. 1072
-.. .. .. .. .. .. .. .. .. 1070
-.. .. .. .. .. .. 1068
-.. .. .. .. .. .. .. 1066
-.. .. .. .. .. .. .. .. 1064
-1062
-.. .. .. .. .. .. .. .. .. 1060
-.. .. .. .. .. .. .. .. 1058
-.. .. .. .. .. .. .. .. .. 1056
-.. .. .. .. .. .. .. 1054
-.. .. .. .. .. .. .. .. .. 1052
-.. .. .. .. .. .. .. .. 1050
-.. .. .. .. .. .. .. .. .. .. 1048
-.. .. .. .. .. .. .. .. .. 1046
-.. .. .. .. .. .. 1044
-.. .. .. .. .. .. .. .. .. .. 1042
-.. .. .. .. .. .. .. .. .. .. .. 1040
-.. .. .. .. .. .. .. .. .. 1038
-.. .. .. .. .. .. .. .. .. .. .. 1036
-.. .. .. .. .. .. .. .. .. .. 1034
-.. .. .. .. .. .. .. .. .. .. .. 1032
-.. .. .. .. .. .. .. .. 1030
-.. .. .. .. .. .. .. .. .. .. 1028
-.. .. .. .. .. .. .. .. .. 1026
-.. .. .. .. .. .. .. .. .. .. 1024
-.. .. .. .. .. .. .. 1022
-.. .. .. .. .. .. .. .. .. .. 1020
-.. .. .. .. .. .. .. .. .. 1018
-.. .. .. .. .. .. .. .. .. .. 1016
-.. .. .. .. .. .. .. .. 1014
-.. .. .. .. .. .. .. .. .. .. 1012
-.. .. .. .. .. .. .. .. .. 1010
-.. .. .. .. .. .. .. .. .. .. 1008
-.. .. .. .. .. 1006
-.. .. .. .. .. .. .. .. .. 1004
-.. .. .. .. .. .. .. .. 1002
-.. .. .. .. .. .. .. .. .. 1000
-.. .. .. .. .. .. .. 998
-.. .. .. .. .. .. .. .. .. .. 996
-.. .. .. .. .. .. .. .. .. 994
-.. .. .. .. .. .. .. .. .. .. 992
-.. .. .. .. .. .. .. .. 990
-.. .. .. .. .. .. .. .. .. 988
-.. .. .. .. .. .. 986
-.. .. .. .. .. .. .. .. .. .. 984
-.. .. .. .. .. .. .. .. .. 982
-.. .. .. .. .. .. .. .. .. .. 980
-.. .. .. .. .. .. .. .. 978
-.. .. .. .. .. .. .. .. .. 976
-.. .. .. .. .. .. .. .. .. .. 974
-.. .. .. .. .. .. .. 972
-.. .. .. .. .. .. .. .. .. 970
-.. .. .. .. .. .. .. .. 968
-.. .. .. .. .. .. .. .. .. 966
-.. .. .. .. 964
-.. .. .. .. .. .. .. .. .. 962
-.. .. .. .. .. .. .. .. .. .. 960
-.. .. .. .. .. .. .. .. 958
-.. .. .. .. .. .. .. .. .. 956
-.. .. .. .. .. .. .. 954
-.. .. .. .. .. .. .. .. 952
-.. .. .. .. .. .. .. .. .. 950
-.. .. .. .. .. .. 948
-.. .. .. .. .. .. .. .. .. 946
-.. .. .. .. .. .. .. .. .. .. 944
-.. .. .. .. .. .. .. .. 942
-.. .. .. .. .. .. .. .. .. 940
-.. .. .. .. .. .. .. 938
-.. .. .. .. .. .. .. .. .. .. 936
-.. .. .. .. .. .. .. .. .. 934
-.. .. .. .. .. .. .. .. 932
-.. .. .. .. .. .. .. .. .. .. 930
-.. .. .. .. .. .. .. .. .. 928
-.. .. .. .. .. .. .. .. .. .. 926
-.. .. .. .. .. 924
-.. .. .. .. .. .. .. .. .. 922
-.. .. .. .. .. .. .. .. 920
-.. .. .. .. .. .. .. .. .. .. 918
-.. .. .. .. .. .. .. .. .. 916
-.. .. .. .. .. .. .. 914
-.. .. .. .. .. .. .. .. .. 912
-.. .. .. .. .. .. .. .. 910
-.. .. .. .. .. .. 908
-.. .. .. .. .. .. .. .. 906
-.. .. .. .. .. .. .. 904
-.. .. .. .. .. .. .. .. .. 900
-.. .. .. .. .. .. .. .. 898
-.. .. .. 896
-.. .. .. .. .. .. .. .. .. 894
-.. .. .. .. .. .. .. .. 892
-.. .. .. .. .. .. .. .. .. 890
-.. .. .. .. .. .. .. .. .. .. 888
-.. .. .. .. .. .. .. 886
-.. .. .. .. .. .. .. .. .. .. 884
-.. .. .. .. .. .. .. .. .. 882
-.. .. .. .. .. .. .. .. .. .. .. 880
-.. .. .. .. .. .. .. .. .. .. 878
-.. .. .. .. .. .. .. .. 876
-.. .. .. .. .. .. .. .. .. .. 874
-.. .. .. .. .. .. .. .. .. 872
-.. .. .. .. .. .. .. .. .. .. 870
-.. .. .. .. .. .. 868
-.. .. .. .. .. .. .. .. .. .. 866
-.. .. .. .. .. .. .. .. .. 864
-.. .. .. .. .. .. .. .. 862
-.. .. .. .. .. .. .. .. .. 860
-.. .. .. .. .. .. .. .. .. .. 858
-.. .. .. .. .. .. .. 856
-.. .. .. .. .. .. .. .. .. 854
-.. .. .. .. .. .. .. .. 852
-.. .. .. .. .. .. .. .. .. 850
-.. .. .. .. .. .. .. .. .. .. 848
-.. .. .. .. .. 846
-.. .. .. .. .. .. .. .. .. .. 844
-.. .. .. .. .. .. .. .. .. 842
-.. .. .. .. .. .. .. .. 840
-.. .. .. .. .. .. .. .. .. 838
-.. .. .. .. .. .. .. 836
-.. .. .. .. .. .. .. .. .. 834
-.. .. .. .. .. .. .. .. .. .. 832
-.. .. .. .. .. .. .. .. 830
-.. .. .. .. .. .. .. .. .. 828
-.. .. .. .. .. .. 826
-.. .. .. .. .. .. .. .. .. 824
-.. .. .. .. .. .. .. .. 822
-.. .. .. .. .. .. .. 820
-.. .. .. .. .. .. .. .. .. .. 818
-.. .. .. .. .. .. .. .. .. 816
-.. .. .. .. .. .. .. .. 814
-.. .. .. .. .. .. .. .. .. .. 812
-.. .. .. .. .. .. .. .. .. 810
-.. .. .. .. 808
-.. .. .. .. .. .. .. .. .. 806
-.. .. .. .. .. .. .. .. 804
-.. .. .. .. .. .. .. 802
-.. .. .. .. .. .. .. .. .. 800
-.. .. .. .. .. .. .. .. 798
-.. .. .. .. .. .. .. .. .. 796
-.. .. .. .. .. .. 794
-.. .. .. .. .. .. .. .. .. 792
-.. .. .. .. .. .. .. .. 790
-.. .. .. .. .. .. .. .. .. 788
-.. .. .. .. .. .. .. 786
-.. .. .. .. .. .. .. .. 784
-.. .. .. .. .. .. .. .. .. 782
-.. .. .. .. .. 780
-.. .. .. .. .. .. .. .. .. .. 778
-.. .. .. .. .. .. .. .. .. 776
-.. .. .. .. .. .. .. .. .. .. 774
-.. .. .. .. .. .. .. .. 772
-.. .. .. .. .. .. .. .. .. 770
-.. .. .. .. .. .. .. 768
-.. .. .. .. .. .. .. .. .. .. 766
-.. .. .. .. .. .. .. .. .. 764
-.. .. .. .. .. .. .. .. 762
-.. .. .. .. .. .. .. .. .. .. 760
-.. .. .. .. .. .. .. .. .. 758
-.. .. .. .. .. .. .. .. .. .. 756
-.. .. .. .. .. .. 754
-.. .. .. .. .. .. .. .. .. .. 752
-.. .. .. .. .. .. .. .. .. 750
-.. .. .. .. .. .. .. .. .. .. 748
-.. .. .. .. .. .. .. .. 746
-.. .. .. .. .. .. .. .. .. .. 744
-.. .. .. .. .. .. .. .. .. 742
-.. .. .. .. .. .. .. .. .. .. 740
-.. .. .. .. .. .. .. 738
-.. .. .. .. .. .. .. .. .. 736
-.. .. .. .. .. .. .. .. 734
-.. .. .. .. .. .. .. .. .. 732
-.. .. .. .. .. .. .. .. .. .. 730
-.. .. 728
-.. .. .. .. .. .. .. .. 726
-.. .. .. .. .. .. .. .. .. 724
-.. .. .. .. .. .. .. 722
-.. .. .. .. .. .. .. .. .. 720
-.. .. .. .. .. .. .. .. .. .. 718
-.. .. .. .. .. .. .. .. 716
-.. .. .. .. .. .. .. .. .. 714
-.. .. .. .. .. .. 712
-.. .. .. .. .. .. .. .. .. 710
-.. .. .. .. .. .. .. .. 708
-.. .. .. .. .. .. .. 706
-.. .. .. .. .. .. .. .. .. 704
-.. .. .. .. .. .. .. .. 702
-.. .. .. .. .. .. .. .. .. 700
-.. .. .. .. .. 698
-.. .. .. .. .. .. .. .. 696
-.. .. .. .. .. .. .. 694
-.. .. .. .. .. .. .. .. 692
-.. .. .. .. .. .. .. .. .. 690
-.. .. .. .. .. .. 688
-.. .. .. .. .. .. .. 686
-.. .. .. .. .. .. .. .. 684
-.. .. .. .. 682
-.. .. .. .. .. .. .. .. 680
-.. .. .. .. .. .. .. 678
-.. .. .. .. .. .. 676
-.. .. .. .. .. .. .. .. 674
-.. .. .. .. .. .. .. 672
-.. .. .. .. .. .. .. .. 670
-.. .. .. .. .. 668
-.. .. .. .. .. .. .. .. .. 666
-.. .. .. .. .. .. .. .. 664
-.. .. .. .. .. .. .. .. .. 662
-.. .. .. .. .. .. .. 660
-.. .. .. .. .. .. .. .. 658
-.. .. .. .. .. .. 656
-.. .. .. .. .. .. .. .. .. 654
-.. .. .. .. .. .. .. .. 652
-.. .. .. .. .. .. .. .. .. 650
-.. .. .. .. .. .. .. 648
-.. .. .. .. .. .. .. .. 646
-.. .. .. .. .. .. .. .. .. 644
-.. .. .. 642
-.. .. .. .. .. .. .. .. .. 640
-.. .. .. .. .. .. .. .. 638
-.. .. .. .. .. .. .. 636
-.. .. .. .. .. .. .. .. .. 634
-.. .. .. .. .. .. .. .. 632
-.. .. .. .. .. .. .. .. .. 630
-.. .. .. .. .. .. 628
-.. .. .. .. .. .. .. .. .. 626
-.. .. .. .. .. .. .. .. 624
-.. .. .. .. .. .. .. .. .. 622
-.. .. .. .. .. .. .. 620
-.. .. .. .. .. .. .. .. .. 618
-.. .. .. .. .. .. .. .. 616
-.. .. .. .. .. 614
-.. .. .. .. .. .. .. .. .. 612
-.. .. .. .. .. .. .. .. 610
-.. .. .. .. .. .. .. .. .. .. 608
-.. .. .. .. .. .. .. .. .. 606
-.. .. .. .. .. .. .. .. .. .. 604
-.. .. .. .. .. .. .. 602
-.. .. .. .. .. .. .. .. .. 600
-.. .. .. .. .. .. .. .. 598
-.. .. .. .. .. .. 596
-.. .. .. .. .. .. .. .. .. 594
-.. .. .. .. .. .. .. .. 592
-.. .. .. .. .. .. .. .. .. 590
-.. .. .. .. .. .. .. 588
-.. .. .. .. .. .. .. .. .. .. 586
-.. .. .. .. .. .. .. .. .. 584
-.. .. .. .. .. .. .. .. 582
-.. .. .. .. .. .. .. .. .. 580
-.. .. .. .. 578
-.. .. .. .. .. .. .. .. .. 576
-.. .. .. .. .. .. .. .. 574
-.. .. .. .. .. .. .. .. .. 572
-.. .. .. .. .. .. .. 570
-.. .. .. .. .. .. .. .. .. .. 568
-.. .. .. .. .. .. .. .. .. 566
-.. .. .. .. .. .. .. .. .. .. 564
-.. .. .. .. .. .. .. .. 562
-.. .. .. .. .. .. .. .. .. 560
-.. .. .. .. .. .. .. .. .. .. 558
-.. .. .. .. .. .. 556
-.. .. .. .. .. .. .. .. .. 554
-.. .. .. .. .. .. .. .. 552
-.. .. .. .. .. .. .. 550
-.. .. .. .. .. .. .. .. .. 548
-.. .. .. .. .. .. .. .. 546
-.. .. .. .. .. 544
-.. .. .. .. .. .. .. .. 542
-.. .. .. .. .. .. .. .. .. 540
-.. .. .. .. .. .. .. 538
-.. .. .. .. .. .. .. .. .. 536
-.. .. .. .. .. .. .. .. 534
-.. .. .. .. .. .. ...
[truncated message content] |
|
From: Vasily G. <vas...@gm...> - 2013-10-06 05:52:55
|
Hello, all.
I would like to propose for discussion one assumption for function's
boundaries detection on ARM. I tried it on "expedit" - test N 48. It
is not a simplest case, but we can see from sources (comparing with
Callgrind's output) that Callgrind doesn't identify correctly return
from _op_copy_p_dp_neon. In fact, if someone can provide simplest case
that identifies problems of callgraph on ARM - it will be really great
to test my proposal on it.
At first, I consulted with gcc-arm Community. Gcc doesn't (normally!)
generates "unclear" call to function on ARM. It means: compilers uses
BL (move in LR return address) or somehow synthesizes the situation
when at the first instruction of function we indeed have in LR the
return address according to the Caller Conventions. So, I think it is
normal idea to rely on this fact.
Under Valgrind we have a set of Basic Blocks (BB) generated
dynamically. And we can insert some code right before the first
instruction of any BB. Let’s describe the algorithm:
1. At the start of BB we ask Valgrind’s core if the address of the
BB is the start of some function. According to the rules of generation
of BB the start of any function will be the start of some BB.
Valgrind’s core used available information from .dynsym, .symtab and
debug-info to answer us.
2. If it is the ENTRY in function we save LR at our local stack
structure (1 per each tread for multithreaded program), because
according to the calling convenient it is guaranteed that LR == return
address from this function.
3. If it is not the ENTRY we compare the address of BB with the top
of the local STACK for current thread. If they are equal then we found
return from function and we do pop from local STACK. Hint: for working
with optimization like:
{
main:
mov r0, r0
bl func_1
…
func_1:
mov r0, r0
b func_2
// Nothing.
func_2:
// Now in LR we have RA to the main.
mov PC, LR
}
We will pop until value at the top of the STACK equals to the address of BB.
Of course, there are some limitations and I think I can provide
reasonable solution:
1. At the first instruction of function in LR we have “wrong value”
rather than return address (some crazy asm implementation, no Calling
Convention) .
a. Solution: Implement new flag –skip-functions=”name_1, name_2,
etc.” to skip it in call graph (aggregate cost in upper function). At
this point developer have to know names of this functions.
2. Some functions (like _Exit) has no return. In gcc there is
attribute “noreturn”
a. Solution: Implement new flag –skip-noreturn-functions=”name_1,
name_2, etc.” to skip it in call graph (aggregate cost in upper
function). It is possible manually to analyze source code to prepare
this list. There is the assumption that it will be not a huge one.
3. If function has zero prolog and some loop that each time jumps
to the first instruction of this function we will detect a lot of
functions, not a loop.
a. Solution: Maybe it is not a common situation in real code? I
mean we have to save some registers at stack if we want to have free
registers in body of function... In any case - it can be #1.
5. What about the time consumption of the algorithm proposed VS
current algorithm.
a. Solution: Test, think about local cache mechanism. Simplest
implementation is 4 times slower that current Callgrind on expedit. I
think we can ask Core (valgrind's) about size of function (if we found
start of function) and maintain (A_start_previous_func,
A_end_previous_func). If bb_addr(BB) > A_start_previous_func and
bb_addr(BB) < A_end_previous_funct we haven't call to Valgrind's core
and ask if this BB is the start of some function. It may significantly
decrease time.
Any comments\suggestions are welcome. If someone have good test cases
- please, provide them. Now I am trying to "hack" creation of
callgraph based on my approach in the simplest way (1 thread, static
allocation of my local stack structure, not (A_start, A_end), etc.).
When I will have smth to show I will do it. And, maybe, it will be
ready for FOSDEM meeting, not sure.
Best regards,
Vasily
On Wed, Sep 18, 2013 at 11:18 PM, Josef Weidendorfer
<Jos...@gm...> wrote:
> Hi,
>
> Am 18.09.2013 17:41, schrieb Vasily Golubev:
>> I am trying to propose some technique for improvement of callgraph on
>> ARM. Could I kindly ask you to review one idea?
>> I think that we can find ENTRANCE and EXIT of function by analysis of
>> sequence of BBs. In runtime we can have Table with
>> Name_of_function->Start_address.
>> It is available from debug info or from available tables in binary (and
>> libraries). As far as I understand, we can test (bb_addr ==
>> one_of_address in our Table) and if true -> we are ENTERING in function.
>> So, we can track ALL entrances in functions.
>
> So you unconditionally assume a function entry whenever a given
> instruction is executed? What if a function has an empty prolog, and
> a loop always jumps back to the first instruction of the function?
>
> Anyway. You do not need a table for that, as this property can be
> detected at instrumentation time.
>
>> And I propose to add one internal structure (in fact, simple STACK).
>
> Callgrind already maintains a shadow stack.
>
> If
>> we find ENTRANCE, we push guest_lr on our STACK. During testing
>> (bb_addr(bb) == one_of_address in our Table) if fail we can also test
>> (bb_addr(bb) == TOP_ELEMENT_IN_OUR_STACK). And if true, we are EXITING
>> from function. So, we can track all EXITS from functions.
>
> So you assume that the LR found when executing the first BB of a
> function always represents a return address?
> If the code just jumps to a function, LR may have an arbitrary value,
> which never gets popped from the shadow stack. This may easily result
> in an overflow. What to do then?
>
>> Some problems:
>> 1. I am not sure that we can tests all conditions in runtime if we want
>> to work fast enough. Maybe we can somehow organize a set of Tables. At
>> firs, identify object (file) and then analyze in it.
>> 2. Maybe we have to test not only with TOP_OF_STACK, but also try to
>> find deeper (in case of some optimizations).
>
> Yes. It should work with longjmps, returning from multiple stack frames
> at once.
>
> For that reason, Callgrind uses the stack pointer to regularly sync its
> shadow stack. Exactly this is not really working on ARM, as not every
> entry/exit of a function changes the stack pointer.
>
>> 3. As far as I understand, each exit of function (next running
>> instruction, in fact) will be the start of new BB. Or maybe I am wrong?
>
> VEX is working on superblocks (SB), not basic blocks. Thus, in can
> instrument multiple BBs at once, if they are linked by unconditional
> jumps ("chasing").
> With tail recursion optimization, a function may end by jumping to
> another function (in original source, this is a call).
> Thus, the beginning of the next function could be inside an SB, and
> would not be recognized by your approach.
> However, Callgrind bypasses this issue by setting
> VG_(clo_vex_control).guest_chase_thresh = 0;
>
> So, the anwser to your question is "yes".
>
>> 4. I am not sure that it will be enough (track ENTRY and EXIT) for
>> callgrind's purposes.
>
> The main idea of callgrind's call graph tracing is to produce a sensible
> call graph for compiler generated code, ie. the graph
> that is expected by a programmer, reflecting his program code.
> However, this is not always possible, as different source may
> have the same compiler output (e.g. iterative vs. recursive
> version of the same algorithm).
> And the technique must be robust on hand-crafted machine code.
>
> I do not really know the ABI conventions used by compilers on
> ARM, so I cannot really say if your proposal is useful/working.
> In the end, you need to check the outcome of your proposal against
> what you would expect with a reasonable large code yourself.
>
> It would be nice to have tests which check that the right call
> graph was detected for a given code.
>
> Josef
>
>
>>
>> Thank you in advance,
>> Vasily
>>
>>
>> On Fri, Aug 30, 2013 at 4:14 AM, Josef Weidendorfer
>> <Jos...@gm... <mailto:Jos...@gm...>> wrote:
>>
>> Am 29.08.2013 06:41, schrieb Vasily Golubev:
>> > I noticed that heuristics for x86 based on the fact that we can
>> identify
>> > all entry\exit analyzing BB for BB at start. I mean the fact that
>> entry
>> > in\exit from function can occur only as the first IMark at BB
>> > (superblock).
>>
>> Callgrind is asking VEX to feed BBs (not SBs) of guest code
>> to its instrumentation function.
>>
>> Is it true in general?
>>
>> As a BB is a continuous number of bytes in memory: yes, it is true that
>> a function entry can only start at the beginning of a (dynamic) BB, and
>> a function exit needs to be at the end of a BB (which then is detected
>> at beginning of the next BB).
>>
>> Or I misunderstand logic of analysis?
>>
>> No, your analysis was correct.
>>
>> Josef
>>
>> >
>> > Vasily
>> >
>> >
>> > On Mon, Aug 26, 2013 at 5:35 PM, Emilio Coppa <er...@gm...
>> <mailto:er...@gm...>
>> > <mailto:er...@gm... <mailto:er...@gm...>>> wrote:
>> >
>> > Hi all,
>> >
>> > More or less all of the call/return tracing heuristic is
>> found in
>> > the ugly setup_bbcc function in callgrind/bbcc.c - a first
>> step
>> > would be to clean it up to allow for different heuristics on
>> > different architectures in the first place.
>> >
>> >
>> > You can also check aprof's callstack code
>> >
>> <https://code.google.com/p/aprof/source/browse/branches/stable/aprof/callstack.c>,
>> > highly inspired by callgrind's code.
>> >
>> > As how to start into a callpath collection tool, I'd say
>> an improved
>> > callstack generator for valgrind would be an excellent
>> > beginning, especially
>> > as it would greatly improve all valgrind tooling.
>> >
>> >
>> > I am really interested in this. I am not a Valgrind expert but I
>> > will be happy to help.
>> >
>> > Emilio.
>> >
>> >
>> >
>> ------------------------------------------------------------------------------
>> > Introducing Performance Central, a new site from SourceForge and
>> > AppDynamics. Performance Central is your source for news,
>> insights,
>> > analysis and resources for efficient Application Performance
>> Management.
>> > Visit us today!
>> >
>> http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk
>> > _______________________________________________
>> > Valgrind-developers mailing list
>> > Val...@li...
>> <mailto:Val...@li...>
>> > <mailto:Val...@li...
>> <mailto:Val...@li...>>
>> > https://lists.sourceforge.net/lists/listinfo/valgrind-developers
>> >
>> >
>> >
>> >
>> > --
>> > Best Regards,
>> > Vasily
>> >
>> >
>> >
>> ------------------------------------------------------------------------------
>> > Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more!
>> > Discover the easy way to master current and previous Microsoft
>> technologies
>> > and advance your career. Get an incredible 1,500+ hours of
>> step-by-step
>> > tutorial videos with LearnDevNow. Subscribe today and save!
>> >
>> http://pubads.g.doubleclick.net/gampad/clk?id=58040911&iu=/4140/ostg.clktrk
>> >
>> >
>> >
>> > _______________________________________________
>> > Valgrind-developers mailing list
>> > Val...@li...
>> <mailto:Val...@li...>
>> > https://lists.sourceforge.net/lists/listinfo/valgrind-developers
>> >
>>
>>
>>
>>
>> --
>> Best Regards,
>> Vasily
>
--
Best Regards,
Vasily
|