Add pthred_getattr_np / phread_attr_getstrack alternatives for uClibc

Based on https://dev.openwrt.org/log/packages/Xorg/lib/qt4/patches/100-fix-webkit-for-uclibc.patch?rev=20371

Signed-off-by: Johan Sagaert <sagaert.johan@skynet.be>
--- qt-everywhere-opensource-src-4.6.2/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Collector.cpp	2010-02-11 16:55:20.000000000 +0100
+++ qt-everywhere-opensource-src-4.6.2JS/src/3rdparty/javascriptcore/JavaScriptCore/runtime/Collector.cpp	2010-05-23 10:49:29.000000000 +0200
@@ -75,6 +75,22 @@
 #endif
 #include <unistd.h>
 
+#if defined(QT_LINUXBASE)
+#include <dlfcn.h>
+#endif
+
+#if defined(__UCLIBC__)
+// versions of uClibc 0.9.31 and below do not have
+// pthread_getattr_np or pthread_attr_getstack.
+#if __UCLIBC_MAJOR__ == 0 && \
+    (__UCLIBC_MINOR__ < 9 || \
+    (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ <= 31))
+#define UCLIBC_USE_PROC_SELF_MAPS 1
+#include <stdio_ext.h>
+extern int *__libc_stack_end;
+#endif
+#endif
+
 #if OS(SOLARIS)
 #include <thread.h>
 #else
@@ -667,18 +683,61 @@ static inline void* currentThreadStackBa
     get_thread_info(find_thread(NULL), &threadInfo);
     return threadInfo.stack_end;
 #elif OS(UNIX)
+#ifdef UCLIBC_USE_PROC_SELF_MAPS
+    // Read /proc/self/maps and locate the line whose address
+    // range contains __libc_stack_end.
+    FILE *file = fopen("/proc/self/maps", "r");
+    if (!file)
+        return 0;
+    __fsetlocking(file, FSETLOCKING_BYCALLER);
+    char *line = NULL;
+    size_t lineLen = 0;
+    while (!feof_unlocked(file)) {
+        if (getdelim(&line, &lineLen, '\n', file) <= 0)
+            break;
+
+        long from;
+        long to;
+        if (sscanf (line, "%lx-%lx", &from, &to) != 2)
+            continue;
+        if (from <= (long)__libc_stack_end && (long)__libc_stack_end < to) {
+            fclose(file);
+            free(line);
+#ifdef _STACK_GROWS_UP
+            return (void *)from;
+#else
+            return (void *)to;
+#endif
+        }
+    }
+    fclose(file);
+    free(line);
+    return 0;
+#else
     AtomicallyInitializedStatic(Mutex&, mutex = *new Mutex);
     MutexLocker locker(mutex);
     static void* stackBase = 0;
     static size_t stackSize = 0;
     static pthread_t stackThread;
     pthread_t thread = pthread_self();
     if (stackBase == 0 || thread != stackThread) {
+
+#if defined(QT_LINUXBASE)
+        // LinuxBase is missing pthread_getattr_np - resolve it once at runtime instead
+        // see http://bugs.linuxbase.org/show_bug.cgi?id=2364
+        typedef int (*GetAttrPtr)(pthread_t, pthread_attr_t *);
+        static int (*pthread_getattr_np_ptr)(pthread_t, pthread_attr_t *) = 0;
+        if (!pthread_getattr_np_ptr)
+            *(void **)&pthread_getattr_np_ptr = dlsym(RTLD_DEFAULT, "pthread_getattr_np");
+#endif
         pthread_attr_t sattr;
         pthread_attr_init(&sattr);
 #if HAVE(PTHREAD_NP_H) || OS(NETBSD)
         // e.g. on FreeBSD 5.4, neundorf@kde.org
         pthread_attr_get_np(thread, &sattr);
+#elif defined(QT_LINUXBASE)
+        if (pthread_getattr_np_ptr)
+            pthread_getattr_np_ptr(thread, &sattr);
 #else
         // FIXME: this function is non-portable; other POSIX systems may have different np alternatives
         pthread_getattr_np(thread, &sattr);
@@ -690,6 +749,7 @@ static inline void* currentThreadStackBa
         stackThread = thread;
     }
     return static_cast<char*>(stackBase) + stackSize;
+#endif
 #elif OS(WINCE)
     AtomicallyInitializedStatic(Mutex&, mutex = *new Mutex);
     MutexLocker locker(mutex);
