On Thu, Dec 05, 2024 at 02:15:28PM +0100, Alexander Bluhm wrote: > On Thu, Dec 05, 2024 at 10:01:42AM +0900, ASOU Masato wrote: > > Ok, I will make devel/llvm-lit. > > Attached is a llvm-openmp that uses llvm-lit as test dependency. > > Unfortunately some tests are failing. > > Total Discovered Tests: 305 > Unsupported: 18 (5.90%) > Passed : 246 (80.66%) > Failed : 41 (13.44%) > > Nevertheless I want to get some of these ports commited and debug > problems in tree. llvm-lit passes all self tests.
Most of the tests fail as our ld.so does not call the destructors. Patch below decrements object refcount so callbacks from dynamic loader to the openmp destructors work. As the order of the thread teardown callbacks are different from linux I need some patches in kmp_runtime.cpp to avoid crashes. Not sure if all may patches are correct, but OpenMP tests pass now. bluhm Index: libexec/ld.so/library_subr.c =================================================================== RCS file: /mount/openbsd/cvs/src/libexec/ld.so/library_subr.c,v diff -u -p -r1.55 library_subr.c --- libexec/ld.so/library_subr.c 27 Apr 2023 12:27:56 -0000 1.55 +++ libexec/ld.so/library_subr.c 6 Dec 2024 20:28:11 -0000 @@ -533,6 +533,17 @@ _dl_link_child(elf_object_t *dep, elf_ob } void +_dl_unlink_children(void) +{ + elf_object_t *node; + + for (node = _dl_objects; node != NULL; node = node->next) { + if (node->refcount > 0) + _dl_child_refcnt_decrement(node); + } +} + +void object_vec_grow(struct object_vector *vec, int more) { vec->alloc += more; Index: libexec/ld.so/loader.c =================================================================== RCS file: /mount/openbsd/cvs/src/libexec/ld.so/loader.c,v diff -u -p -r1.223 loader.c --- libexec/ld.so/loader.c 22 Jan 2024 02:08:31 -0000 1.223 +++ libexec/ld.so/loader.c 6 Dec 2024 20:25:07 -0000 @@ -202,6 +202,7 @@ _dl_dtors(void) /* ORDER? */ _dl_unload_dlopen(); + _dl_unlink_children(); DL_DEB(("doing dtors\n")); Index: libexec/ld.so/resolve.h =================================================================== RCS file: /mount/openbsd/cvs/src/libexec/ld.so/resolve.h,v diff -u -p -r1.108 resolve.h --- libexec/ld.so/resolve.h 21 May 2024 05:00:47 -0000 1.108 +++ libexec/ld.so/resolve.h 6 Dec 2024 20:23:31 -0000 @@ -318,6 +318,7 @@ int _dl_load_dep_libs(elf_object_t *obje int _dl_rtld(elf_object_t *object); void _dl_call_init(elf_object_t *object); void _dl_link_child(elf_object_t *dep, elf_object_t *p); +void _dl_unlink_children(void); void _dl_link_grpsym(elf_object_t *object); void _dl_cache_grpsym_list_setup(elf_object_t *_object); void _dl_link_grpref(elf_object_t *load_group, elf_object_t *load_object);
llvm-openmp.tgz
Description: application/tar-gz