Re: ports head -r484652: lang/ruby24 fails to amd64 -> armv7 cross build: qemu: uncaught target signal 11 (2 of them) [armv7 native build worked]

2018-11-16 Thread Mark Millard via freebsd-ports
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]

2018-11-15 Thread Mark Millard via freebsd-ports
[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)

2018-11-10 Thread Mark Millard via freebsd-ports
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"