Removed all uses of nested functions as they only work with gcc and
cause the stack to be marked as executable in order for them to work.

All assembler files have also had a declaration added so that the
object they generate will be marked as not needing an executable stack.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2446 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/vg_hashtable.c b/coregrind/vg_hashtable.c
index 11a6d7c..f1966cd 100644
--- a/coregrind/vg_hashtable.c
+++ b/coregrind/vg_hashtable.c
@@ -133,27 +133,31 @@
 }
 
 /* Return the first VgHashNode satisfying the predicate p. */
-VgHashNode* VG_(HT_first_match) ( VgHashTable table, Bool (*p) ( VgHashNode* ))
+VgHashNode* VG_(HT_first_match) ( VgHashTable table,
+                                  Bool (*p) ( VgHashNode*, void* ),
+                                  void* d )
 {
    UInt      i;
    VgHashNode* node;
 
    for (i = 0; i < VG_N_CHAINS; i++)
       for (node = table[i]; node != NULL; node = node->next)
-         if ( p(node) )
+         if ( p(node, d) )
             return node;
 
    return NULL;
 }
 
-void VG_(HT_apply_to_all_nodes)( VgHashTable table, void (*f)(VgHashNode*) )
+void VG_(HT_apply_to_all_nodes)( VgHashTable table,
+                                 void (*f)(VgHashNode*, void*),
+                                 void* d )
 {
    UInt      i;
    VgHashNode* node;
 
    for (i = 0; i < VG_N_CHAINS; i++) {
       for (node = table[i]; node != NULL; node = node->next) {
-         f(node);
+         f(node, d);
       }
    }
 }