|
From: <sv...@va...> - 2005-07-03 17:10:14
|
Author: njn
Date: 2005-07-03 18:10:04 +0100 (Sun, 03 Jul 2005)
New Revision: 4099
Log:
whoops
Modified:
trunk/Makefile.am
trunk/coregrind/m_hashtable.c
Modified: trunk/Makefile.am
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/Makefile.am 2005-07-03 16:08:58 UTC (rev 4098)
+++ trunk/Makefile.am 2005-07-03 17:10:04 UTC (rev 4099)
@@ -20,7 +20,7 @@
DIST_SUBDIRS =3D $(SUBDIRS) addrcheck
=20
SUPP_FILES =3D \
- glibc-2.1.supp glibc-2.2.supp glibc-2.3.supp glibc-2.4.supp \
+ glibc-2.2.supp glibc-2.3.supp glibc-2.4.supp \
xfree-3.supp xfree-4.supp
=20
dist_val_DATA =3D $(SUPP_FILES) default.supp
Modified: trunk/coregrind/m_hashtable.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_hashtable.c 2005-07-03 16:08:58 UTC (rev 4098)
+++ trunk/coregrind/m_hashtable.c 2005-07-03 17:10:04 UTC (rev 4099)
@@ -39,18 +39,28 @@
=20
/* Holds malloc'd but not freed blocks. Static, so zero-inited by defau=
lt. */
=20
-#define VG_N_CHAINS 80021 /*4999*/ /* a prime number */
+//#define VG_N_CHAINS 80021 /*4999*/ /* a prime number */
=20
-#define VG_CHAIN_NO(aa) (((UWord)(aa)) % VG_N_CHAINS)
+#define CHAIN_NO(key,tbl) (((UWord)(key)) % tbl->n_chains)
=20
+struct {
+ UInt n_chains; // should be prime
+ VgHashNode* chains[0];
+}
+_VgHashTable;
+
+typedef (struct _VgHashTable *) VgHashTable;
+
/*--------------------------------------------------------------------*/
/*--- Functions ---*/
/*--------------------------------------------------------------------*/
=20
-VgHashTable VG_(HT_construct)(void)
+VgHashTable VG_(HT_construct)(UInt n_chains)
{
/* Initialises to zero, ie. all entries NULL */
- return VG_(calloc)(VG_N_CHAINS, sizeof(VgHashNode*));
+ VgHashTable* table =3D=20
+ VG_(calloc)(sizeof(struct _VgHashTable) + n_chains*sizeof(VgHashNo=
de*));
+ table->n_chains =3D n_chains;
}
=20
Int VG_(HT_count_nodes) ( VgHashTable table )
@@ -59,8 +69,8 @@
UInt chain;
Int n =3D 0;
=20
- for (chain =3D 0; chain < VG_N_CHAINS; chain++)
- for (node =3D table[chain]; node !=3D NULL; node =3D node->next)
+ for (chain =3D 0; chain < table->n_chains; chain++)
+ for (node =3D table->chains[chain]; node !=3D NULL; node =3D node-=
>next)
n++;
return n;
}
@@ -68,8 +78,8 @@
/* Puts a new, heap allocated VgHashNode, into the malloclist. */
void VG_(HT_add_node) ( VgHashTable table, VgHashNode* node )
{
- UInt chain =3D VG_CHAIN_NO(node->key);
- node->next =3D table[chain];
+ UInt chain =3D CHAIN_NO(node->key);
+ node->next =3D table->chains[chain];
table[chain] =3D node;
}
=20
@@ -77,15 +87,15 @@
the previous node's 'next' pointer which allows it to be removed from=
the
list later without having to look it up again. */
VgHashNode* VG_(HT_get_node) ( VgHashTable table, UWord key,
- /*OUT*/VgHashNode*** next_ptr )
+ /*OUT*/VgHashNode*** next_ptr )
{
VgHashNode *prev, *curr;
Int chain;
=20
- chain =3D VG_CHAIN_NO(key);
+ chain =3D CHAIN_NO(key);
=20
prev =3D NULL;
- curr =3D table[chain];
+ curr =3D table->chains[chain];
while (True) {
if (curr =3D=3D NULL)
break;
@@ -96,9 +106,9 @@
}
=20
if (NULL =3D=3D prev)
- *next_ptr =3D & table[chain];
+ *next_ptr =3D & (table->chain[chain]);
else
- *next_ptr =3D & prev->next;
+ *next_ptr =3D & (prev->next);
=20
return curr;
}
@@ -114,8 +124,8 @@
VgHashNode* node;
=20
*n_shadows =3D 0;
- for (i =3D 0; i < VG_N_CHAINS; i++) {
- for (node =3D table[i]; node !=3D NULL; node =3D node->next) {
+ for (i =3D 0; i < table->n_chains; i++) {
+ for (node =3D table->chains[i]; node !=3D NULL; node =3D node->nex=
t) {
(*n_shadows)++;
}
}
@@ -125,8 +135,8 @@
arr =3D VG_(malloc)( *n_shadows * sizeof(VgHashNode*) );
=20
j =3D 0;
- for (i =3D 0; i < VG_N_CHAINS; i++) {
- for (node =3D table[i]; node !=3D NULL; node =3D node->next) {
+ for (i =3D 0; i < table->n_chains; i++) {
+ for (node =3D table->chains[i]; node !=3D NULL; node =3D node->nex=
t) {
arr[j++] =3D node;
}
}
@@ -143,8 +153,8 @@
UInt i;
VgHashNode* node;
=20
- for (i =3D 0; i < VG_N_CHAINS; i++)
- for (node =3D table[i]; node !=3D NULL; node =3D node->next)
+ for (i =3D 0; i < table->n_chains; i++)
+ for (node =3D table->chains[i]; node !=3D NULL; node =3D node->nex=
t)
if ( p(node, d) )
return node;
=20
@@ -158,8 +168,8 @@
UInt i;
VgHashNode* node;
=20
- for (i =3D 0; i < VG_N_CHAINS; i++) {
- for (node =3D table[i]; node !=3D NULL; node =3D node->next) {
+ for (i =3D 0; i < table->n_chains; i++) {
+ for (node =3D table->chains[i]; node !=3D NULL; node =3D node->nex=
t) {
f(node, d);
}
}
@@ -170,8 +180,8 @@
UInt i;
VgHashNode* node;
=20
- for (i =3D 0; i < VG_N_CHAINS; i++) {
- for (node =3D table[i]; node !=3D NULL; node =3D node->next) {
+ for (i =3D 0; i < table->n_chains; i++) {
+ for (node =3D table->chains[i]; node !=3D NULL; node =3D node->nex=
t) {
VG_(free)(node);
}
}
|