FYI on powerpc64: an apparent ctfmerge unbounded recursion error on kernel.full built by system clang (7) and devel/powerpc64-binutils ?

Mark Millard marklmi at yahoo.com
Tue Mar 5 21:12:17 UTC 2019


The context here is head -r344018 based that was built via
devel/powerpc64-xtoolchain-gcc facilities (that included
building system clang 7). I attempted to have a
system-clang based buildworld buildkernel that used
/usr/local/powerpc64-unknown-freebsd13.0/bin/ld and such.

Until I can synchronize and test a more modern head
(including an updated clang) and ports, the below is
probably just informational in case someone else runs into
something similar.

The:

ctfmerge -L VERSION -g -o kernel.full locore.o cam.o cam_compat.o cam_iosched.o

got a segmentation fault but gdb shows over 13,000
levels of subroutine calls and a stack-access related
failure:


# gdb /usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.powerpc64/usr/src/powerpc.powerpc64/tmp/usr/bin/ctfmerge /usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.powerpc64/usr/src/powerpc.powerpc64/sys/GENERIC64vtsc-NODBG/ctfmerge.57350.core
. . .
Core was generated by `ctfmerge -L VERSION -g -o kernel.full locore.o cam.o cam_compat.o cam_iosched.o'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0000000010006588 in .hash_find_first_cb ()
[Current thread is 1 (LWP 100604)]
(gdb) info reg r1
r1             0x3fffffffdf9fc000  4611686017884209152
(gdb) disass
Dump of assembler code for function .hash_find_first_cb:
   0x0000000010006584 <+0>:	mflr    r0
=> 0x0000000010006588 <+4>:	std     r31,-8(r1)
   0x000000001000658c <+8>:	std     r0,16(r1)
. . .
(gdb) info threads
  Id   Target Id         Frame 
* 1    LWP 100604        0x0000000010006588 in .hash_find_first_cb ()
  2    LWP 100220        0x0000000010045f88 in .__sys.umtx_op ()
  3    LWP 100602        0x0000000010045f84 in .__sys.umtx_op ()
  4    LWP 100603        0x0000000010045f84 in .__sys.umtx_op ()
  5    LWP 100605        0x0000000010045f84 in .__sys.umtx_op ()
  6    LWP 100606        0x0000000010045f84 in .__sys.umtx_op ()(gdb) bt
#0  0x0000000010006588 in hash_find_first_cb (node=0x81cfc28b0, arg=0x3fffffffdf9fc128) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/hash.c:187
#1  0x0000000010008250 in list_iter (list=0x81cfc28b0, func=<optimized out>, private=0x3fffffffdf9fc128) at /usr/src/cddl/contrib/opensolaris/tools/ctf/common/list.c:127
#2  0x0000000010006538 in hash_match (hash=0x81711dc40, key=<optimized out>, fun=@0x100f5360: 0x10006584 <hash_find_first_cb>, private=0x81711dc40)
    at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/hash.c:149
#3  hash_find (hash=<optimized out>, key=<optimized out>, value=<optimized out>) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/hash.c:207
#4  0x0000000010000cb8 in alist_find (alist=<optimized out>, name=<optimized out>, value=0x3fffffffdf9fc280) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/alist.c:130
#5  0x000000001000a290 in get_mapping (ta=<optimized out>, srcid=<optimized out>) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:195
#6  equiv_node (ctdp=0x81c109180, mtdp=0x81df6dfc0, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:365
#7  0x0000000010009290 in equiv_su (stdp=<optimized out>, ttdp=<optimized out>, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:291
#8  0x000000001000a34c in equiv_node (ctdp=0x81c10b740, mtdp=0x81df7a1c0, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:384
#9  0x0000000010009290 in equiv_su (stdp=<optimized out>, ttdp=<optimized out>, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:291
#10 0x000000001000a34c in equiv_node (ctdp=0x81c1091c0, mtdp=0x81df7a000, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:384
#11 0x000000001000a34c in equiv_node (ctdp=0x81c109180, mtdp=0x81df6dfc0, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:384
#12 0x0000000010009290 in equiv_su (stdp=<optimized out>, ttdp=<optimized out>, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:291
#13 0x000000001000a34c in equiv_node (ctdp=0x81c10b740, mtdp=0x81df7a1c0, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:384
#14 0x0000000010009290 in equiv_su (stdp=<optimized out>, ttdp=<optimized out>, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:291
#15 0x000000001000a34c in equiv_node (ctdp=0x81c1091c0, mtdp=0x81df7a000, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:384
#16 0x000000001000a34c in equiv_node (ctdp=0x81c109180, mtdp=0x81df6dfc0, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:384
#17 0x0000000010009290 in equiv_su (stdp=<optimized out>, ttdp=<optimized out>, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:291
#18 0x000000001000a34c in equiv_node (ctdp=0x81c10b740, mtdp=0x81df7a1c0, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:384
#19 0x0000000010009290 in equiv_su (stdp=<optimized out>, ttdp=<optimized out>, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:291
#20 0x000000001000a34c in equiv_node (ctdp=0x81c1091c0, mtdp=0x81df7a000, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:384
#21 0x000000001000a34c in equiv_node (ctdp=0x81c109180, mtdp=0x81df6dfc0, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:384
#22 0x0000000010009290 in equiv_su (stdp=<optimized out>, ttdp=<optimized out>, ed=0x3fffffffdfbfa1f8) at /usr/src/cddl/contrib/opensolaris/tools/ctf/cvt/merge.c:291
. . .

Going the other way:
. . .
#13082 0x0000000000000000 in ?? ()
(gdb) down
#13081 0x0000000010035010 in .thread_start ()
(gdb) 
#13080 0x0000000010005864 in .worker_thread ()
(gdb) 
#13079 0x0000000010008900 in .merge_into_master ()
(gdb) 
#13078 0x00000000100060c8 in .hash_iter ()
(gdb) 
#13077 0x0000000010008250 in .list_iter ()
(gdb) 
#13076 0x0000000010009794 in .merge_type_cb ()
(gdb) 
#13075 0x000000001000d500 in .iitraverse ()
(gdb) 
#13074 0x000000001000d320 in .tdtraverse ()
(gdb) 
#13073 0x000000001000d654 in .tdtrav_plain ()
(gdb) 
#13072 0x000000001000d320 in .tdtraverse ()
(gdb) 
#13071 0x000000001000d654 in .tdtrav_plain ()
(gdb) 
#13070 0x000000001000d320 in .tdtraverse ()
(gdb) 
#13069 0x000000001000d764 in .tdtrav_func ()
(gdb) 
#13068 0x000000001000d320 in .tdtraverse ()
(gdb) 
#13067 0x000000001000d654 in .tdtrav_plain ()
(gdb) 
#13066 0x000000001000d320 in .tdtraverse ()
(gdb) 
#13065 0x000000001000d7f8 in .tdtrav_su ()
(gdb) 
#13064 0x000000001000d320 in .tdtraverse ()
(gdb) 
#13063 0x000000001000d654 in .tdtrav_plain ()
(gdb) 
#13062 0x000000001000d320 in .tdtraverse ()
(gdb) 
#13061 0x000000001000d7f8 in .tdtrav_su ()
(gdb) 
#13060 0x000000001000d368 in .tdtraverse ()
(gdb) 
#13059 0x000000001000a468 in .map_td_tree_post ()
(gdb) 
#13058 0x00000000100063dc in .hash_find_iter ()
(gdb) 
#13057 0x0000000010008250 in .list_iter ()
(gdb) 
#13056 0x0000000010006494 in .hash_find_list_cb ()
(gdb) 
#13055 0x000000001000a0dc in .equiv_cb ()
(gdb) 
#13054 0x000000001000a34c in .equiv_node ()
(gdb) 
#13053 0x000000001000a34c in .equiv_node ()
(gdb) 
#13052 0x0000000010009290 in .equiv_su ()
(gdb) 
#13051 0x000000001000a34c in .equiv_node ()
(gdb) 
#13050 0x0000000010009290 in .equiv_su ()
(gdb) 
#13049 0x000000001000a34c in .equiv_node ()
(gdb) 
#13048 0x000000001000a34c in .equiv_node ()
(gdb) 
#13047 0x0000000010009290 in .equiv_su ()
(gdb) 
#13046 0x000000001000a34c in .equiv_node ()
. . .


===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)



More information about the freebsd-ppc mailing list