tech-toolchain archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Gimp does not build on macppc: No space available for static Thread Local Storage
On Fri, May 27, 2022 at 06:56:57AM +0200, Martin Husemann wrote:
> Hey folks,
>
> trying to build Gimp from pkgsrc-current on NetBSD/macppc -current
> fails with:
>
> mkdir -p `dirname 64/gimp-info.png` && GEGL_USE_OPENCL=no GEGL_SWAP=ram /usr/pkg/bin/gegl ../../icons/Symbolic/64/gimp-info.png -o 64/gimp-info.png -- cast-format input-format="R'G'B'A float" output-format="RGBA float" brightness-contrast contrast=1.5 cast-format input-format="RGBA float" output-format="R'G'B'A float"
> GEGL-Message: 06:50:10.625: Module '/usr/pkg/lib/gegl-0.4/exr-save.so' load error: /usr/lib/libstdc++.so.9: No space available for static Thread Local Storage
I added a bit more debugging info:
Module '/usr/pkg/lib/gegl-0.4/exr-save.so' load error:
/usr/lib/libstdc++.so.9: No space available for static Thread Local
Storage, initial space 3936, initial offset 3872, offset 3936, align 4,
tlssize 16, next_offset 3952, _rtld_tls_static_space 3936
and that values confuse me a bit (patch that produced them below). IIUC:
- we are loading "obj" /usr/lib/libstdc++.so.9
- that object asks for 16 bytes of TLS storage with 4 byte alignement
- we initially allocated 3936 bytes of TLS space but set start offset
to 3872 (why?)
- and that is exactly how we are when starting to resolve this request
for libstdc++ (offset is still 3936 and will be 3952 after allocation,
which exceeds the allocated 3936)
That totally sounds like random garbage initially in _rtld_tls_static_offset,
but the only place it gets modified we should not have reached yet (a few
lines after the error message is printed).
Any ideas?
Martin
Index: tls.c
===================================================================
RCS file: /cvsroot/src/libexec/ld.elf_so/tls.c,v
retrieving revision 1.14
diff -u -p -r1.14 tls.c
--- tls.c 5 Nov 2019 22:22:42 -0000 1.14
+++ tls.c 27 May 2022 09:59:34 -0000
@@ -53,6 +53,11 @@ static size_t _rtld_tls_static_offset; /
size_t _rtld_tls_dtv_generation = 1;
size_t _rtld_tls_max_index = 1;
+/* debug vars for later error message */
+static size_t _rtld_orig_tls_static_space;
+static size_t _rtld_orig_tls_static_offset;
+
+
#define DTV_GENERATION(dtv) ((size_t)((dtv)[0]))
#define DTV_MAX_INDEX(dtv) ((size_t)((dtv)[-1]))
#define SET_DTV_GENERATION(dtv, val) (dtv)[0] = (void *)(size_t)(val)
@@ -105,6 +110,9 @@ _rtld_tls_initial_allocation(void)
#endif
dbg(("_rtld_tls_static_space %zu", _rtld_tls_static_space));
+_rtld_orig_tls_static_space = _rtld_tls_static_space;
+_rtld_orig_tls_static_offset = _rtld_tls_static_offset;
+
tcb = _rtld_tls_allocate_locked();
#ifdef __HAVE___LWP_SETTCB
__lwp_settcb(tcb);
@@ -255,8 +263,15 @@ _rtld_tls_offset_allocate(Obj_Entry *obj
}
if (next_offset > _rtld_tls_static_space) {
_rtld_error("%s: No space available "
- "for static Thread Local Storage",
- obj->path);
+ "for static Thread Local Storage, initial space %zu, "
+ "initial offset %zu, offset %zu, "
+ "align %zu, tlssize %zu, next_offset %zu, "
+ "_rtld_tls_static_space %zu",
+ obj->path,
+ _rtld_orig_tls_static_space, _rtld_orig_tls_static_offset,
+ offset,
+ obj->tlsalign, obj->tlssize, next_offset,
+ _rtld_tls_static_space);
return -1;
}
}
Home |
Main Index |
Thread Index |
Old Index