]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Implement (sort-of) pthread_attr_{set,get}guardsize.
authorJulian Seward <jseward@acm.org>
Sun, 13 Oct 2002 14:40:29 +0000 (14:40 +0000)
committerJulian Seward <jseward@acm.org>
Sun, 13 Oct 2002 14:40:29 +0000 (14:40 +0000)
MERGE TO HEAD

git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_1_0_BRANCH@1221

vg_libpthread.c
vg_libpthread_unimp.c

index d4bc427511ad6240289f6e4d9756e78c54e62dcd..c83d4403660f794ef87011756f658a97e279e0d7 100644 (file)
@@ -302,6 +302,9 @@ int pthread_attr_init(pthread_attr_t *attr)
 {
    /* Just initialise the fields which we might look at. */
    attr->__detachstate = PTHREAD_CREATE_JOINABLE;
+   /* Linuxthreads sets this field to the value __getpagesize(), so I
+      guess the following is OK. */
+   attr->__guardsize = VKI_BYTES_PER_PAGE;
    return 0;
 }
 
@@ -433,6 +436,7 @@ int pthread_getattr_np (pthread_t thread, pthread_attr_t *attr)
 
 
 /* Bogus ... */
+__attribute__((weak)) 
 int pthread_attr_getstackaddr ( const pthread_attr_t * attr,
                                 void ** stackaddr )
 {
@@ -444,6 +448,7 @@ int pthread_attr_getstackaddr ( const pthread_attr_t * attr,
 }
 
 /* Not bogus (!) */
+__attribute__((weak)) 
 int pthread_attr_getstacksize ( const pthread_attr_t * _attr, 
                                 size_t * __stacksize )
 {
@@ -471,6 +476,34 @@ int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy)
 }
 
 
+/* This is completely bogus.  We reject all attempts to change it from
+   VKI_BYTES_PER_PAGE.  I don't have a clue what it's for so it seems
+   safest to be paranoid. */
+__attribute__((weak)) 
+int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize)
+{
+   static int moans = N_MOANS;
+
+   if (guardsize == VKI_BYTES_PER_PAGE)
+      return 0;
+
+   if (moans-- > 0) 
+      ignored("pthread_attr_setguardsize: ignoring guardsize != 4096");
+
+   return 0;
+}
+
+/* A straight copy of the LinuxThreads code. */
+__attribute__((weak)) 
+int pthread_attr_getguardsize(const pthread_attr_t *attr, size_t *guardsize)
+{
+   *guardsize = attr->__guardsize;
+   return 0;
+}
+
+
+
+
 /* --------------------------------------------------- 
    Helper functions for running a thread 
    and for clearing up afterwards.
index 777b5c89adfbc06b1f6aedcc6c51e88b72a13614..254db1092456d20eb99ce0c0f27a95720710556e 100644 (file)
@@ -222,16 +222,16 @@ weak_alias(_IO_ftrylockfile, ftrylockfile)
 __attribute__((weak)) void tcdrain ( void ) { vgPlain_unimp("tcdrain"); }
 //--//__attribute__((weak)) void vfork ( void ) { vgPlain_unimp("vfork"); }
 
-__attribute__((weak)) void pthread_attr_getguardsize ( void )
-                      { vgPlain_unimp("pthread_attr_getguardsize"); }
+//__attribute__((weak)) void pthread_attr_getguardsize ( void )
+//                      { vgPlain_unimp("pthread_attr_getguardsize"); }
 __attribute__((weak)) void pthread_attr_getstack ( void )
                       { vgPlain_unimp("pthread_attr_getstack"); }
 __attribute__((weak)) void pthread_attr_getstackaddr ( void )
                       { vgPlain_unimp("pthread_attr_getstackaddr"); }
 __attribute__((weak)) void pthread_attr_getstacksize ( void )
                       { vgPlain_unimp("pthread_attr_getstacksize"); }
-__attribute__((weak)) void pthread_attr_setguardsize ( void )
-                      { vgPlain_unimp("pthread_attr_setguardsize"); }
+//__attribute__((weak)) void pthread_attr_setguardsize ( void )
+//                      { vgPlain_unimp("pthread_attr_setguardsize"); }
 __attribute__((weak)) void pthread_attr_setstack ( void )
                       { vgPlain_unimp("pthread_attr_setstack"); }
 __attribute__((weak)) void pthread_attr_setstackaddr ( void )