Re: armv7 main's gpart [show]: signal 11 core dump during boot, before login; xo_format_string_direct; official pkgbase distribution (kernel and world)
- Reply: Mark Millard : "Re: armv7 main's gpart [show]: signal 11 core dump during boot, before login; xo_format_string_direct; official pkgbase distribution (kernel and world)"
- In reply to: Mark Millard : "Re: armv7 main's gpart [show]: signal 11 core dump during boot, before login; xo_format_string_direct; official pkgbase distribution (kernel and world)"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 28 Dec 2025 16:54:40 UTC
[Resend including freebsd-arm.]
On Dec 28, 2025, at 08:48, Mark Millard <marklmi@yahoo.com> wrote:
js@freebsd.org <js_at_FreeBSD.org> wrote on
Date: Sun, 28 Dec 2025 11:01:59 UTC :
> I'll take a look at it and try to setup a reproducer, unfortunately my
> time is a bit limited during the holidays so I can't promise any quick
> fixes right now.
>
> Could you share the output of
>
> gpart --libxo:JP show
>
> with me? If possible.
On the Orange Pi Plus 2e (Cortex-A7, not aarch64,
just armv7):
# gpart --libxo:JP show
Segmentation fault (core dumped)
I'll note that the 0x6e480000 in r0 that is shown
later below is the same failing address reported
in my original list submittal about the issue.
For reference:
(gdb) bt
#0 strlen () at /usr/src/lib/libc/arm/string/strlen.S:46
#1 0x20151020 in xo_format_string (xop=0x2009b120, xbp=0x2009b150, flags=4096, xfp=0xbfbfd1f8) at /usr/src/contrib/libxo/libxo/libxo.c:2966
#2 xo_do_format_field (xop=<optimized out>, xop@entry=0x2009b120, xbp=0x2009b150, fmt=fmt@entry=0xbfbfd268 "%s", flen=<optimized out>, flags=4096) at /usr/src/contrib/libxo/libxo/libxo.c:3503
#3 0x2014d0a8 in xo_simple_field (xop=0x2009b120, encode_only=0, value=0x0, vlen=0, fmt=0xbfbfd268 "%s", flen=2, flags=4096) at /usr/src/contrib/libxo/libxo/libxo.c:3817
#4 xo_format_value (xop=<optimized out>, xop@entry=0x2009b120, name=name@entry=0x204bf931 "state}\n", nlen=nlen@entry=5, value=0x0, vlen=0, fmt=0xbfbfd268 "%s", flen=2, encoding=0x0, elen=0,
flags=4096) at /usr/src/contrib/libxo/libxo/libxo.c:4535
#5 0x20148710 in xo_do_emit_fields (xop=<optimized out>, xop@entry=0x2009b120, fields=<optimized out>, fields@entry=0xbfbfd768, max_fields=max_fields@entry=17, fmt=<optimized out>)
at /usr/src/contrib/libxo/libxo/libxo.c:6372
#6 0x201476a0 in xo_do_emit (xop=xop@entry=0x2009b120, flags=<optimized out>, fmt=fmt@entry=0x204bf8e3 "=>{t:start/%*jd} {t:sectors/%*jd} {t:name/%*s} {:scheme} ({h:size/%ld}){t:state}\n")
at /usr/src/contrib/libxo/libxo/libxo.c:6551
#7 0x20147840 in xo_emit (fmt=0x204bf8e3 "=>{t:start/%*jd} {t:sectors/%*jd} {t:name/%*s} {:scheme} ({h:size/%ld}){t:state}\n") at /usr/src/contrib/libxo/libxo/libxo.c:6622
#8 0x204d1fd4 in gpart_show_geom (gp=gp@entry=0x20089168, element=element@entry=0x204bfe51 "type", show_providers=show_providers@entry=0) at /usr/src/lib/geom/part/geom_part.c:654
#9 0x204d1048 in gpart_show (req=0x20089000, fl=<optimized out>) at /usr/src/lib/geom/part/geom_part.c:793
#10 0x000230dc in run_command (argc=0, argv=<optimized out>) at /usr/src/sbin/geom/core/geom.c:497
#11 0x00022308 in main (argc=1, argv=0xbfbfed10) at /usr/src/sbin/geom/core/geom.c:861
(gdb) list
41 /* So that the N bit is set. */
42 cmp r3, #0
43 b .Ldo_2
44
45 .Loop:
46 ldr r2, [r0]
47 add r0, r0, #4
48 ands r3, r2, #0x000000ff
49 it ne
50 addne r1, r1, #1
#1 0x20151020 in xo_format_string (xop=0x2009b120, xbp=0x2009b150, flags=4096, xfp=0xbfbfd1f8) at /usr/src/contrib/libxo/libxo/libxo.c:2966
warning: Source file is more recent than executable.
2966 len = strlen(cp);
(gdb) list
2961 && xfp->xf_width[XF_WIDTH_MIN] < 0
2962 && xfp->xf_width[XF_WIDTH_SIZE] < 0
2963 && xfp->xf_width[XF_WIDTH_MAX] < 0
2964 && !(XOIF_ISSET(xop, XOIF_ANCHOR)
2965 || XOF_ISSET(xop, XOF_COLUMNS))) {
2966 len = strlen(cp);
2967 xo_buf_escape(xop, xbp, cp, len, flags);
2968
2969 /*
2970 * Our caller expects xb_curp left untouched, so we have
(gdb) up
#2 xo_do_format_field (xop=<optimized out>, xop@entry=0x2009b120, xbp=0x2009b150, fmt=fmt@entry=0xbfbfd268 "%s", flen=<optimized out>, flags=4096) at /usr/src/contrib/libxo/libxo/libxo.c:3503
3503 rc = xo_format_string(xop, xbp, flags, &xf);
(gdb) list
3498
3499 xf.xf_enc = (xf.xf_fc == 'm') ? XF_ENC_UTF8
3500 : (xf.xf_lflag || (xf.xf_fc == 'S')) ? XF_ENC_WIDE
3501 : xf.xf_hflag ? XF_ENC_LOCALE : XF_ENC_UTF8;
3502
3503 rc = xo_format_string(xop, xbp, flags, &xf);
3504
3505 if ((flags & XFF_TRIM_WS) && xo_style_is_encoding(xop))
3506 rc = xo_trim_ws(xbp, rc);
3507
(gdb) up
#3 0x2014d0a8 in xo_simple_field (xop=0x2009b120, encode_only=0, value=0x0, vlen=0, fmt=0xbfbfd268 "%s", flen=2, flags=4096) at /usr/src/contrib/libxo/libxo/libxo.c:3817
3817 xo_do_format_field(xop, NULL, fmt, flen, flags);
(gdb) list
3812 {
3813 if (encode_only)
3814 flags |= XFF_NO_OUTPUT;
3815
3816 if (vlen == 0)
3817 xo_do_format_field(xop, NULL, fmt, flen, flags);
3818 else if (!encode_only)
3819 xo_data_append_content(xop, value, vlen, flags);
3820 }
3821
(gdb) up
#4 xo_format_value (xop=<optimized out>, xop@entry=0x2009b120, name=name@entry=0x204bf931 "state}\n", nlen=nlen@entry=5, value=0x0, vlen=0, fmt=0xbfbfd268 "%s", flen=2, encoding=0x0, elen=0,
flags=4096) at /usr/src/contrib/libxo/libxo/libxo.c:4535
4535 xo_simple_field(xop, FALSE, value, vlen, fmt, flen, flags);
(gdb) list
4530 }
4531
4532 if (quote)
4533 xo_data_append(xop, "\"", 1);
4534
4535 xo_simple_field(xop, FALSE, value, vlen, fmt, flen, flags);
4536
4537 if (quote)
4538 xo_data_append(xop, "\"", 1);
4539 break;
(gdb) up
#5 0x20148710 in xo_do_emit_fields (xop=<optimized out>, xop@entry=0x2009b120, fields=<optimized out>, fields@entry=0xbfbfd768, max_fields=max_fields@entry=17, fmt=<optimized out>)
at /usr/src/contrib/libxo/libxo/libxo.c:6372
6372 xo_format_value(xop, content, clen, NULL, 0,
(gdb) list
6367 flags &= ~XFF_WS; /* Prevent later handling of this flag */
6368 }
6369 }
6370
6371 if (ftype == 'V')
6372 xo_format_value(xop, content, clen, NULL, 0,
6373 xfip->xfi_format, xfip->xfi_flen,
6374 xfip->xfi_encoding, xfip->xfi_elen, flags);
6375 else if (ftype == '[')
6376 xo_anchor_start(xop, xfip, content, clen);
(gdb) up
#6 0x201476a0 in xo_do_emit (xop=xop@entry=0x2009b120, flags=<optimized out>, fmt=fmt@entry=0x204bf8e3 "=>{t:start/%*jd} {t:sectors/%*jd} {t:name/%*s} {:scheme} ({h:size/%ld}){t:state}\n")
at /usr/src/contrib/libxo/libxo/libxo.c:6551
6551 return xo_do_emit_fields(xop, fields, max_fields, fmt);
(gdb) list
6546 /* Retain the info */
6547 xo_retain_add(fmt, fields, max_fields);
6548 }
6549 }
6550
6551 return xo_do_emit_fields(xop, fields, max_fields, fmt);
6552 }
6553
6554 /*
6555 * Rebuild a format string in a gettext-friendly format. This function
. . .
(gdb) up
#7 0x20147840 in xo_emit (fmt=0x204bf8e3 "=>{t:start/%*jd} {t:sectors/%*jd} {t:name/%*s} {:scheme} ({h:size/%ld}){t:state}\n") at /usr/src/contrib/libxo/libxo/libxo.c:6622
6622 rc = xo_do_emit(xop, 0, fmt);
(gdb) list
6617 {
6618 xo_handle_t *xop = xo_default(NULL);
6619 ssize_t rc;
6620
6621 va_start(xop->xo_vap, fmt);
6622 rc = xo_do_emit(xop, 0, fmt);
6623 va_end(xop->xo_vap);
6624 bzero(&xop->xo_vap, sizeof(xop->xo_vap));
6625
6626 return rc;
(gdb) up
#8 0x204d1fd4 in gpart_show_geom (gp=gp@entry=0x20089168, element=element@entry=0x204bfe51 "type", show_providers=show_providers@entry=0) at /usr/src/lib/geom/part/geom_part.c:654
warning: Source file is more recent than executable.
654 xo_emit("=>{t:start/%*jd} {t:sectors/%*jd} {t:name/%*s} {:scheme} ({h:size/%ld}){t:state}\n",
(gdb) list
649 }
650 wname = wmax;
651 pp = LIST_FIRST(&gp->lg_consumer)->lg_provider;
652 secsz = pp->lg_sectorsize;
653 xo_open_instance("part");
654 xo_emit("=>{t:start/%*jd} {t:sectors/%*jd} {t:name/%*s} {:scheme} ({h:size/%ld}){t:state}\n",
655 wblocks, (intmax_t)first, wblocks, (intmax_t)(last - first + 1),
656 wname, gp->lg_name,
657 scheme, pp->lg_mediasize,
658 s ? " [CORRUPT]": "");
(gdb) up
#9 0x204d1048 in gpart_show (req=0x20089000, fl=<optimized out>) at /usr/src/lib/geom/part/geom_part.c:793
793 gpart_show_geom(gp, element, show_providers);
(gdb) list
788 else
789 errx(EXIT_FAILURE, "No such geom: %s.", name);
790 }
791 } else {
792 LIST_FOREACH(gp, &classp->lg_geom, lg_geom) {
793 gpart_show_geom(gp, element, show_providers);
794 }
795 }
796 xo_close_list(name);
797 geom_deletetree(&mesh);
(gdb) up
#10 0x000230dc in run_command (argc=0, argv=<optimized out>) at /usr/src/sbin/geom/core/geom.c:497
warning: Source file is more recent than executable.
497 cmd->gc_func(req, flags);
(gdb) list
492 buf[0] = '\0';
493 if (cmd->gc_func != NULL) {
494 unsigned flags;
495
496 flags = set_flags(cmd);
497 cmd->gc_func(req, flags);
498 errstr = req->error;
499 } else {
500 gctl_add_param(req, "output", sizeof(buf), buf,
501 GCTL_PARAM_WR | GCTL_PARAM_ASCII);
(gdb) up
#11 0x00022308 in main (argc=1, argv=0xbfbfed10) at /usr/src/sbin/geom/core/geom.c:861
861 run_command(argc, argv);
(gdb) list
856 show_tree();
857 return (0);
858 }
859
860 get_class(&argc, &argv);
861 run_command(argc, argv);
862 /* NOTREACHED */
863
864 exit(EXIT_FAILURE);
865 }
(gdb) frame 0
#0 strlen () at /usr/src/lib/libc/arm/string/strlen.S:46
46 ldr r2, [r0]
(gdb) info registers
r0 0x6e480000 1850212352
r1 0x0 0
r2 0x80 128
r3 0x0 0
r4 0xffffffff 4294967295
r5 0x6e480000 1850212352
r6 0x0 0
r7 0x2 2
r8 0x2009b120 537506080
r9 0x1000 4096
r10 0xbfbfd269 3217019497
r11 0xbfbfd258 3217019480
r12 0x201777b0 538408880
sp 0xbfbfd190 0xbfbfd190
lr 0x20151020 538251296
pc 0x202f58c4 0x202f58c4 <strlen+44>
cpsr 0x60000010 1610612752
fpscr 0x2000000 33554432
tpidruro 0x2009b010 0x2009b010
===
Mark Millard
marklmi at yahoo.com
===
Mark Millard
marklmi at yahoo.com