Re: ports head -r484652: lang/ruby24 fails to amd64 -> armv7 cross build: qemu: uncaught target signal 11 (2 of them) [armv7 native build worked]
Top post about bad comparison: The comparison to x11/pixman turns out to be a misnomer. More testing by Jan B. showed that -O2 vs -O was not sufficient to control the behavior for x11/pixman's builds. pixman's issue traces back to use of .object_arch armv4 in four .S files and them causing R_ARM_V4BX relocation record use, which lld only had support-for checked in to llvm's truck today (2018-Nov-16). Despite that, the build environment's use of -O2 instead of -O is real for poudriere/qemu-arm-static/nxb/. . . use. ruby's problem is not tied to R_ARM_V4BX use: different problem. (No updated text below. The above did not fit there well.) On 2018-Nov-15, at 11:46, Mark Millard wrote: > [While the poudriere-devel/qemu-arm-static/nxb-bin/ amd64 -> armv7 > cross build failed, a native armv7 build worked. It turns out the > difference that matters is likely -O2 use vs -O use. More later > below.] > > On 2018-Nov-10, at 23:29, Mark Millard wrote: > >> Poudriere-devel reported: >> >> [00:18:32] [07] [00:02:56] Saved lang/ruby24 | ruby-2.4.5,1 wrkdir to: >> /usr/local/poudriere/data/wrkdirs/FBSDFSSDjailArmV7-default/default/ruby-2.4.5,1.tbz >> [00:18:32] [07] [00:02:56] Finished lang/ruby24 | ruby-2.4.5,1: Failed: build >> >> The log showed: >> >> --- miniruby --- >> linking miniruby >> --- .rbconfig.time --- >> --- encdb.h --- >> generating encdb.h >> --- .rbconfig.time --- >> qemu: uncaught target signal 11 (Segmentation fault) - core dumped >> Segmentation fault >> *** [.rbconfig.time] Error code 139 >> >> make[1]: stopped in /wrkdirs/usr/ports/lang/ruby24/work/ruby-2.4.5 >> --- encdb.h --- >> qemu: uncaught target signal 11 (Segmentation fault) - core dumped >> Segmentation fault >> *** [encdb.h] Error code 139 >> >> make[1]: stopped in /wrkdirs/usr/ports/lang/ruby24/work/ruby-2.4.5 >> 2 errors >> >> >> Despite how the above looks, I find only one .core file in the >> tar archive produced for the failure: >> >> # find /wrkdirs/usr/ports/lang/ruby/ -name "*.core" -print >> /wrkdirs/usr/ports/lang/ruby/work/ruby-2.4.5/qemu_miniruby.core >> >> Apparently qemu does not allow for separate files for distinct >> processes. >> >> For that .core file I find (libexec/gdb): >> >> # chroot /usr/obj/DESTDIRs/clang-armv7-installworld-poud >> # cd /wrkdirs/usr/ports/lang/ruby/work/ruby-2.4.5/ >> # /usr/libexec/gdb miniruby qemu_miniruby.core >> . . . >> (gdb) bt >> #0 0x00113f84 in rb_gc_writebarrier_unprotect (obj=4104601600) at gc.c:1119 >> 1119 return RVALUE_WB_UNPROTECTED_BITMAP(obj) != 0; >> [New Thread f4b5d000 (LWP 100638/)] >> [New LWP 61684] >> Current language: auto; currently minimal >> (gdb) bt >> #0 0x00113f84 in rb_gc_writebarrier_unprotect (obj=4104601600) at gc.c:1119 >> #1 0x000c3fc8 in rb_include_class_new (module=4104569400, super=> optimized out>) at ruby.h:1456 >> #2 0x000c4424 in include_modules_at (klass=4104602160, c=4104602160, >> module=4104569400, search_super=) at class.c:913 >> #3 0x000c41f0 in rb_include_module (klass=4104602160, module=4104569400) at >> class.c:870 >> #4 0x001f6dec in Init_String () at string.c:10021 >> #5 0x00129398 in rb_call_inits () at inits.c:28 >> #6 0x00103bac in ruby_setup () at eval.c:60 >> #7 0x00103be8 in ruby_init () at eval.c:76 >> #8 0x000a3300 in main (argc=11, argv=0x9fffe41c) at main.c:35 >> (gdb) up >> #1 0x000c3fc8 in rb_include_class_new (module=4104569400, super=> optimized out>) at ruby.h:1456 >> 1456 rb_gc_writebarrier_unprotect(x); >> (gdb) up >> #2 0x000c4424 in include_modules_at (klass=4104602160, c=4104602160, >> module=4104569400, search_super=) at class.c:913 >> 913 iclass = rb_include_class_new(module, RCLASS_SUPER(c)); >> (gdb) up >> #3 0x000c41f0 in rb_include_module (klass=4104602160, module=4104569400) at >> class.c:870 >> 870 changed = include_modules_at(klass, RCLASS_ORIGIN(klass), module, >> TRUE); >> (gdb) up >> #4 0x001f6dec in Init_String () at string.c:10021 >> 10021rb_include_module(rb_cString, rb_mComparable); >> (gdb) up >> #5 0x00129398 in rb_call_inits () at inits.c:28 >> 28 CALL(String); >> (gdb) up >> #6 0x00103bac in ruby_setup () at eval.c:60 >> 60 rb_call_inits(); >> (gdb) up >> #7 0x00103be8 in ruby_init () at eval.c:76 >> 76 int state = ruby_setup(); >> (gdb) up >> #8 0x000a3300 in main (argc=11, argv=0x9fffe41c) at main.c:35 >> 35 ruby_init(); >> >> (I'm not familiar with what details libexec/gdb gets >> right vs. wrong. But the call chain seems coherent.) >> >> Host environment: >> >> # uname -apKU >> FreeBSD FBSDFSSD 13.0-CURRENT FreeBSD 13.0-CURRENT #0 r340287M: Fri Nov 9 >> 08:37:01 PST 2018 >> markmi@FBSDFSSD:/usr/obj/amd64_clang/amd64.amd64/usr/src/amd64.amd64/sys/GENERIC-NODBG >> amd64 amd64 133 133 > > A prior example that fails for native armv7 builds > but works for poudriere-devel/qemu-arm-static/nxb-bin/ > (native cross tools based) amd64 -> armv7 cross builds > is x11/pixman. > >
Re: ports head -r484652: lang/ruby24 fails to amd64 -> armv7 cross build: qemu: uncaught target signal 11 (2 of them) [armv7 native build worked]
[While the poudriere-devel/qemu-arm-static/nxb-bin/ amd64 -> armv7 cross build failed, a native armv7 build worked. It turns out the difference that matters is likely -O2 use vs -O use. More later below.] On 2018-Nov-10, at 23:29, Mark Millard wrote: > Poudriere-devel reported: > > [00:18:32] [07] [00:02:56] Saved lang/ruby24 | ruby-2.4.5,1 wrkdir to: > /usr/local/poudriere/data/wrkdirs/FBSDFSSDjailArmV7-default/default/ruby-2.4.5,1.tbz > [00:18:32] [07] [00:02:56] Finished lang/ruby24 | ruby-2.4.5,1: Failed: build > > The log showed: > > --- miniruby --- > linking miniruby > --- .rbconfig.time --- > --- encdb.h --- > generating encdb.h > --- .rbconfig.time --- > qemu: uncaught target signal 11 (Segmentation fault) - core dumped > Segmentation fault > *** [.rbconfig.time] Error code 139 > > make[1]: stopped in /wrkdirs/usr/ports/lang/ruby24/work/ruby-2.4.5 > --- encdb.h --- > qemu: uncaught target signal 11 (Segmentation fault) - core dumped > Segmentation fault > *** [encdb.h] Error code 139 > > make[1]: stopped in /wrkdirs/usr/ports/lang/ruby24/work/ruby-2.4.5 > 2 errors > > > Despite how the above looks, I find only one .core file in the > tar archive produced for the failure: > > # find /wrkdirs/usr/ports/lang/ruby/ -name "*.core" -print > /wrkdirs/usr/ports/lang/ruby/work/ruby-2.4.5/qemu_miniruby.core > > Apparently qemu does not allow for separate files for distinct > processes. > > For that .core file I find (libexec/gdb): > > # chroot /usr/obj/DESTDIRs/clang-armv7-installworld-poud > # cd /wrkdirs/usr/ports/lang/ruby/work/ruby-2.4.5/ > # /usr/libexec/gdb miniruby qemu_miniruby.core > . . . > (gdb) bt > #0 0x00113f84 in rb_gc_writebarrier_unprotect (obj=4104601600) at gc.c:1119 > 1119 return RVALUE_WB_UNPROTECTED_BITMAP(obj) != 0; > [New Thread f4b5d000 (LWP 100638/)] > [New LWP 61684] > Current language: auto; currently minimal > (gdb) bt > #0 0x00113f84 in rb_gc_writebarrier_unprotect (obj=4104601600) at gc.c:1119 > #1 0x000c3fc8 in rb_include_class_new (module=4104569400, super= optimized out>) at ruby.h:1456 > #2 0x000c4424 in include_modules_at (klass=4104602160, c=4104602160, > module=4104569400, search_super=) at class.c:913 > #3 0x000c41f0 in rb_include_module (klass=4104602160, module=4104569400) at > class.c:870 > #4 0x001f6dec in Init_String () at string.c:10021 > #5 0x00129398 in rb_call_inits () at inits.c:28 > #6 0x00103bac in ruby_setup () at eval.c:60 > #7 0x00103be8 in ruby_init () at eval.c:76 > #8 0x000a3300 in main (argc=11, argv=0x9fffe41c) at main.c:35 > (gdb) up > #1 0x000c3fc8 in rb_include_class_new (module=4104569400, super= optimized out>) at ruby.h:1456 > 1456 rb_gc_writebarrier_unprotect(x); > (gdb) up > #2 0x000c4424 in include_modules_at (klass=4104602160, c=4104602160, > module=4104569400, search_super=) at class.c:913 > 913 iclass = rb_include_class_new(module, RCLASS_SUPER(c)); > (gdb) up > #3 0x000c41f0 in rb_include_module (klass=4104602160, module=4104569400) at > class.c:870 > 870 changed = include_modules_at(klass, RCLASS_ORIGIN(klass), module, > TRUE); > (gdb) up > #4 0x001f6dec in Init_String () at string.c:10021 > 10021 rb_include_module(rb_cString, rb_mComparable); > (gdb) up > #5 0x00129398 in rb_call_inits () at inits.c:28 > 28CALL(String); > (gdb) up > #6 0x00103bac in ruby_setup () at eval.c:60 > 60rb_call_inits(); > (gdb) up > #7 0x00103be8 in ruby_init () at eval.c:76 > 76int state = ruby_setup(); > (gdb) up > #8 0x000a3300 in main (argc=11, argv=0x9fffe41c) at main.c:35 > 35ruby_init(); > > (I'm not familiar with what details libexec/gdb gets > right vs. wrong. But the call chain seems coherent.) > > Host environment: > > # uname -apKU > FreeBSD FBSDFSSD 13.0-CURRENT FreeBSD 13.0-CURRENT #0 r340287M: Fri Nov 9 > 08:37:01 PST 2018 > markmi@FBSDFSSD:/usr/obj/amd64_clang/amd64.amd64/usr/src/amd64.amd64/sys/GENERIC-NODBG > amd64 amd64 133 133 A prior example that fails for native armv7 builds but works for poudriere-devel/qemu-arm-static/nxb-bin/ (native cross tools based) amd64 -> armv7 cross builds is x11/pixman. Previously I discovered that x11/pixman builds fine in poudriere-devel/qemu-arm-static/nxb-bin/ amd64 -> armv7 cross builds but a link fails during native armv7 builds. It turned out that with the host-native cross tools involved -O2 was being used where native -O was being used: the code in share/mk/sys.mk that is designed to use -O for arm fails to do so and uses -O2 instead. (MACHINE_ARCH temporarily looks to be amd64, which gets a -O2 put in CFLAGS instead of -O .) ruby seems to go the other direction: with -O2 involved something builds that fails to run during the build. With -O involved instead ruby builds fine and produces a ruby that works. (I've not done any analysis to see if the -O2 based build failure is because of code making assumption that are not guaranteed vs. if the compiler/linker is
ports head -r484652: lang/ruby24 fails to amd64 -> armv7 cross build: qemu: uncaught target signal 11 (2 of them)
Poudriere-devel reported: [00:18:32] [07] [00:02:56] Saved lang/ruby24 | ruby-2.4.5,1 wrkdir to: /usr/local/poudriere/data/wrkdirs/FBSDFSSDjailArmV7-default/default/ruby-2.4.5,1.tbz [00:18:32] [07] [00:02:56] Finished lang/ruby24 | ruby-2.4.5,1: Failed: build The log showed: --- miniruby --- linking miniruby --- .rbconfig.time --- --- encdb.h --- generating encdb.h --- .rbconfig.time --- qemu: uncaught target signal 11 (Segmentation fault) - core dumped Segmentation fault *** [.rbconfig.time] Error code 139 make[1]: stopped in /wrkdirs/usr/ports/lang/ruby24/work/ruby-2.4.5 --- encdb.h --- qemu: uncaught target signal 11 (Segmentation fault) - core dumped Segmentation fault *** [encdb.h] Error code 139 make[1]: stopped in /wrkdirs/usr/ports/lang/ruby24/work/ruby-2.4.5 2 errors Despite how the above looks, I find only one .core file in the tar archive produced for the failure: # find /wrkdirs/usr/ports/lang/ruby/ -name "*.core" -print /wrkdirs/usr/ports/lang/ruby/work/ruby-2.4.5/qemu_miniruby.core Apparently qemu does not allow for separate files for distinct processes. For that .core file I find (libexec/gdb): # chroot /usr/obj/DESTDIRs/clang-armv7-installworld-poud # cd /wrkdirs/usr/ports/lang/ruby/work/ruby-2.4.5/ # /usr/libexec/gdb miniruby qemu_miniruby.core . . . (gdb) bt #0 0x00113f84 in rb_gc_writebarrier_unprotect (obj=4104601600) at gc.c:1119 1119return RVALUE_WB_UNPROTECTED_BITMAP(obj) != 0; [New Thread f4b5d000 (LWP 100638/)] [New LWP 61684] Current language: auto; currently minimal (gdb) bt #0 0x00113f84 in rb_gc_writebarrier_unprotect (obj=4104601600) at gc.c:1119 #1 0x000c3fc8 in rb_include_class_new (module=4104569400, super=) at ruby.h:1456 #2 0x000c4424 in include_modules_at (klass=4104602160, c=4104602160, module=4104569400, search_super=) at class.c:913 #3 0x000c41f0 in rb_include_module (klass=4104602160, module=4104569400) at class.c:870 #4 0x001f6dec in Init_String () at string.c:10021 #5 0x00129398 in rb_call_inits () at inits.c:28 #6 0x00103bac in ruby_setup () at eval.c:60 #7 0x00103be8 in ruby_init () at eval.c:76 #8 0x000a3300 in main (argc=11, argv=0x9fffe41c) at main.c:35 (gdb) up #1 0x000c3fc8 in rb_include_class_new (module=4104569400, super=) at ruby.h:1456 1456rb_gc_writebarrier_unprotect(x); (gdb) up #2 0x000c4424 in include_modules_at (klass=4104602160, c=4104602160, module=4104569400, search_super=) at class.c:913 913 iclass = rb_include_class_new(module, RCLASS_SUPER(c)); (gdb) up #3 0x000c41f0 in rb_include_module (klass=4104602160, module=4104569400) at class.c:870 870 changed = include_modules_at(klass, RCLASS_ORIGIN(klass), module, TRUE); (gdb) up #4 0x001f6dec in Init_String () at string.c:10021 10021 rb_include_module(rb_cString, rb_mComparable); (gdb) up #5 0x00129398 in rb_call_inits () at inits.c:28 28 CALL(String); (gdb) up #6 0x00103bac in ruby_setup () at eval.c:60 60 rb_call_inits(); (gdb) up #7 0x00103be8 in ruby_init () at eval.c:76 76 int state = ruby_setup(); (gdb) up #8 0x000a3300 in main (argc=11, argv=0x9fffe41c) at main.c:35 35 ruby_init(); (I'm not familiar with what details libexec/gdb gets right vs. wrong. But the call chain seems coherent.) Host environment: # uname -apKU FreeBSD FBSDFSSD 13.0-CURRENT FreeBSD 13.0-CURRENT #0 r340287M: Fri Nov 9 08:37:01 PST 2018 markmi@FBSDFSSD:/usr/obj/amd64_clang/amd64.amd64/usr/src/amd64.amd64/sys/GENERIC-NODBG amd64 amd64 133 133 === Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar) ___ freebsd-ports@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-ports To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"