here are the tips given to me on #openzaurus to build gpe-minibroswer:
webcore : cvsdate 20050430 and two patches :
http://www.kernelconcepts.de/~fuchs/oe/gdk-colorspace.diff
http://www.kernelconcepts.de/~fuchs/oe/sto...e-loading.patch
(not specially related to open-bsd )
[div align=\"right\"][a href=\"index.php?act=findpost&pid=115314\"][{POST_SNAPBACK}][/a][/div]
Thanks pgas but the nature of this issue doesn't effect Linux since Linux implements an alternate non-posix extension to pthreads that the kjs source in JavaScriptCore utilises if __linux is defined so you wouldn't have the issue that I'm working on anyway.
Basically the call sequence is used to get the stack address of the thread, something which isn't in the posix specification and sounds just the sort of extension that OpenBSD wouldn't want since it is potentially open to misuse. I took a look at version of kdelibs that this version of kjs was derived from and there is a critical comment inside the source about 'changing this since it isn't portable'. - I guess I will trawl for kdelibs patches next... someone porting to QNX or something else may have a workaround.
here's the member function from kdelibs to show you...
299 void Collector::markCurrentThreadConservatively()
300 {
301 jmp_buf registers;
302 setjmp(registers);
303
304 #if __APPLE__
305 pthread_t thread = pthread_self();
306 void *stackBase = pthread_get_stackaddr_np(thread);
307 #elif defined(_WIN32) || defined(_WIN64)
308 NT_TIB *pTib;
309 #ifdef __GNUC__
310 __asm__("movl %%fs:0x18,%0"
311 : "=r" (pTib)
312 );
313 #else
314 __asm {
315 MOV EAX, FS:[18h]
316 MOV pTib, EAX
317 }
318 #endif
319 void *stackBase = (void *)pTib->StackBase;
320 #else
321 static void *stackBase = 0;
322 static pthread_t stackThread;
323 pthread_t thread = pthread_self();
324 if (stackBase == 0 || thread != stackThread) {
325 pthread_attr_t sattr;
326 #ifdef HAVE_PTHREAD_NP_H
327 // e.g. on FreeBSD 5.4, neundorf@kde.org
328 pthread_attr_get_np(thread, &sattr);
329 #else
330 // FIXME: this function is non-portable; other POSIX systems may have different np alternatives
331 pthread_getattr_np(thread, &sattr);
332 #endif
333 // Should work but fails on Linux (?)
334 // pthread_attr_getstack(&sattr, &stackBase, &stackSize);
335 pthread_attr_getstackaddr(&sattr, &stackBase);
336 assert(stackBase);
337 stackThread = thread;
338 }
339 #endif
340
341 int dummy;
342 void *stackPointer = &dummy;
343
344 markStackObjectsConservatively(stackPointer, stackBase);
345 }
EDIT:.... found a kludge for now..
/* OpenBSD workaround */
stack_t stack_info;
pthread_stackseg_np(thread,&stack_info);
void *stackBase=stack_info.ss_sp;
....
- Andy