From: Julian Seward Date: Sun, 13 Oct 2002 14:40:29 +0000 (+0000) Subject: Implement (sort-of) pthread_attr_{set,get}guardsize. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b1b9b3cb08c8e54d3c25e05c295054985ccc741f;p=thirdparty%2Fvalgrind.git Implement (sort-of) pthread_attr_{set,get}guardsize. MERGE TO HEAD git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_1_0_BRANCH@1221 --- diff --git a/vg_libpthread.c b/vg_libpthread.c index d4bc427511..c83d440366 100644 --- a/vg_libpthread.c +++ b/vg_libpthread.c @@ -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. diff --git a/vg_libpthread_unimp.c b/vg_libpthread_unimp.c index 777b5c89ad..254db10924 100644 --- a/vg_libpthread_unimp.c +++ b/vg_libpthread_unimp.c @@ -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 )