--- wikisrc/users/leot/aarch64_problems.mdwn 2018/07/28 19:14:29 1.9 +++ wikisrc/users/leot/aarch64_problems.mdwn 2019/01/04 22:26:31 1.12 @@ -4,7 +4,10 @@ Here a list of possible problems of NetB investigation in order to write proper PR or better yet to fix them! -## `mpv` and NetBSD crashes +## `mpv` SIGSEGVs (strnlen(s, (size_t)-1) always returns -1) + +**UPDATE**: This was fixed by ``, thanks! + Just by invoking `mpv` via: % mpv @@ -59,58 +62,65 @@ It SEGV as follows: #3 0x00000002001cbea4 in ta_strdup_append_buffer (str=str@entry=0xf96f6f4ff348, a=) at ../ta/ta_utils.c:165 #4 0x00000002001cb7b8 in ta_talloc_strdup_append_buffer (s=, s@entry=0x0, a=) at ../ta/ta_talloc.c:31 #5 0x0000000200157eec in print_str_list (opt=, src=) at ../options/m_option.c:1477 - #6 0x000000020015db90 in m_option_print (val_ptr=0xf96f6f4ff3c0, opt=0xf96f6f4ff430) at ../options/m_option.h:496 - #7 m_property_do (log=0xf96f71045130, prop_list=0xf96f71081040, name=name@entry=0xf96f6e139218 "property-list", - action=action@entry=6, arg=arg@entry=0xf96f6f4ff598, ctx=ctx@entry=0xf96f71011040) at ../options/m_property.c:127 - #8 0x000000020016f9f8 in mp_property_do_silent (name=0xf96f6e139218 "property-list", action=6, val=0xf96f6f4ff598, ctx=0xf96f71011040) - at ../player/command.c:4167 - #9 0x0000000200171014 in mp_property_do (name=0xf96f6e139218 "property-list", action=action@entry=6, val=, - val@entry=0xf96f6f4ff5c8, ctx=0xf96f71011040) at ../player/command.c:4177 - #10 0x00000002001637bc in getproperty_fn (arg=0xf96f6f4ff5d8, arg@entry=0xf96f6f4ff5e8) at ../player/client.c:1261 - #11 0x00000002001655b0 in run_locked (fn_data=0xf96f6f4ff5e8, fn=0x200163648 , ctx=0xf96f6f5071c0) - at ../player/client.c:1003 - #12 mpv_get_property (ctx=0xf96f6f5071c0, name=name@entry=0xf96f6e139218 "property-list", format=format@entry=MPV_FORMAT_STRING, - data=data@entry=0xf96f6f4ff668) at ../player/client.c:1335 - #13 0x0000000200179b4c in script_get_property (L=0xf96f6e103400) at ../player/lua.c:794 - #14 0x0000f96f72b2cb80 in luaD_precall () from /usr/pkg/lib/liblua5.2.so.5 - #15 0x0000f96f72b3877c in luaV_execute () from /usr/pkg/lib/liblua5.2.so.5 - #16 0x0000f96f72b2cf04 in luaD_call () from /usr/pkg/lib/liblua5.2.so.5 - #17 0x0000f96f72b28e40 in lua_callk () from /usr/pkg/lib/liblua5.2.so.5 - #18 0x0000000200178270 in load_builtin (L=0xf96f6e103400) at ../player/lua.c:214 - #19 0x0000f96f72b2cb80 in luaD_precall () from /usr/pkg/lib/liblua5.2.so.5 - #20 0x0000f96f72b2cef8 in luaD_call () from /usr/pkg/lib/liblua5.2.so.5 - #21 0x0000f96f72b28e40 in lua_callk () from /usr/pkg/lib/liblua5.2.so.5 - #22 0x0000f96f72b43900 in ll_require () from /usr/pkg/lib/liblua5.2.so.5 - #23 0x0000f96f72b2cb80 in luaD_precall () from /usr/pkg/lib/liblua5.2.so.5 - ---Type to continue, or q to quit--- - #24 0x0000f96f72b3877c in luaV_execute () from /usr/pkg/lib/liblua5.2.so.5 - #25 0x0000f96f72b2cf04 in luaD_call () from /usr/pkg/lib/liblua5.2.so.5 - #26 0x0000f96f72b28e40 in lua_callk () from /usr/pkg/lib/liblua5.2.so.5 - #27 0x0000000200179524 in require (L=L@entry=0xf96f6e103400, name=name@entry=0xf96f6f503420 "@stats.lua") at ../player/lua.c:232 - #28 0x000000020017963c in load_scripts (L=0xf96f6e103400) at ../player/lua.c:260 - #29 0x0000f96f72b2cb80 in luaD_precall () from /usr/pkg/lib/liblua5.2.so.5 - #30 0x0000f96f72b2cef8 in luaD_call () from /usr/pkg/lib/liblua5.2.so.5 - #31 0x0000f96f72b2c4b8 in luaD_rawrunprotected () from /usr/pkg/lib/liblua5.2.so.5 - #32 0x0000f96f72b2d19c in luaD_pcall () from /usr/pkg/lib/liblua5.2.so.5 - #33 0x0000f96f72b28f14 in lua_pcallk () from /usr/pkg/lib/liblua5.2.so.5 - #34 0x000000020017b020 in run_lua (L=0xf96f6e103400) at ../player/lua.c:354 - #35 0x0000f96f72b2cb80 in luaD_precall () from /usr/pkg/lib/liblua5.2.so.5 - #36 0x0000f96f72b2cef8 in luaD_call () from /usr/pkg/lib/liblua5.2.so.5 - #37 0x0000f96f72b2c4b8 in luaD_rawrunprotected () from /usr/pkg/lib/liblua5.2.so.5 - #38 0x0000f96f72b2d19c in luaD_pcall () from /usr/pkg/lib/liblua5.2.so.5 - #39 0x0000f96f72b28f14 in lua_pcallk () from /usr/pkg/lib/liblua5.2.so.5 - #40 0x000000020017b4c8 in mp_cpcall (func=0x20017abd0 , ud=0xf96f6e1010c0, L=0xf96f6e103400) at ../player/lua.c:99 - #41 load_lua (client=, fname=0xf96f6f503420 "@stats.lua") at ../player/lua.c:387 - #42 0x00000002001815c0 in script_thread (p=0xf96f6f5050c0) at ../player/scripting.c:95 - #43 0x0000f96f743ec588 in pthread__create_tramp (cookie=0xf96f6f515000) at /usr/src/lib/libpthread/pthread.c:593 - #44 0x0000f96f727385ec in _lwp_makecontext (u=0x0, start=0x0, arg=0x0, private=0xff00000014, - stack_base=0x1 , stack_size=8589934592) at /usr/src/lib/libc/arch/aarch64/gen/_lwp.c:47 - #45 0x0000f96f743df000 in ?? () - #46 0x544a8f02d40034c1 in ?? () - Backtrace stopped: previous frame identical to this frame (corrupt stack?) + [...] +This happens because `strnlen(s, (size_t)-1)`, always returns -1, e.g.: + + % cat strnlen_size_max.c + #include + #include + + + int + main(int argc, char *argv[]) + { + int i; + for (i = 1; i < argc; i++) { + printf("strnlen(\"%s\", (size_t)-1) -> %ld\n", + argv[i], strnlen(argv[i], ~(size_t)0)); + } + + return 0; + } + % gcc -Wall strnlen_size_max.c + % ./a.out foo + strnlen("foo", (size_t)-1) -> -1 + +(This should returns 3, not -1!) + +The following patch workaround the mpv problem by avoiding all +`strnlen(s, (size_t)-1)` calls (and just using strlen() instead): + + $NetBSD: aarch64_problems.mdwn,v 1.11 2018/07/31 22:22:28 leot Exp $ + + Avoid to directly call: + + strnlen(s, (size_t)-1) + + because on aarch64 ATM it (incorrectly) always returns -1 (also + when s is a string with less than SIZE_MAX characters). + + Add a kludge in order to use strlen() in these cases. + + --- ta/ta_utils.c.orig 2018-07-31 21:45:47.492269366 +0000 + +++ ta/ta_utils.c + @@ -98,7 +98,11 @@ static bool strndup_append_at(char **str + if (!*str && !append) + return true; // stays NULL, but not an OOM condition + + - size_t real_len = append ? strnlen(append, append_len) : 0; + + size_t real_len = append ? + + append_len == (size_t)-1 ? + + strlen(append) : + + strnlen(append, append_len) : + + 0; + if (append_len > real_len) + append_len = real_len; + ## Python `import requests` SIGILLs + +**UPDATE**: A kludge was added since py-cffi-1.11.5nb1 to avoid that. Doing a (please note that also `python36` is affected): $ python2.7 -c 'import requests' @@ -225,23 +235,8 @@ Doing a (please note that also `python36 #define _cffi_save_errno \ ((void(*)(void))_cffi_exports[14]) -The following patch workaround the issue: - - $NetBSD: aarch64_problems.mdwn,v 1.8 2018/07/24 00:09:53 wiki Exp $ - - Kludge for NetBSD/aarch64 SIGILL. - - --- setup.py.orig 2018-02-27 18:15:41.000000000 +0000 - +++ setup.py - @@ -70,7 +70,7 @@ def ask_supports_thread(): - ok = (sys.platform != 'win32' and - config.try_compile('__thread int some_threadlocal_variable_42;')) - if ok: - - define_macros.append(('USE__THREAD', None)) - + pass - else: - ok1 = config.try_compile('int some_regular_variable_42;') - if not ok1: +Since py-cffi-1.11.5nb1 a kludge to workaround the issue is present (by +disabling __thread). ## polkitd crashes