[Resend including freebsd-arm.] On Dec 28, 2025, at 08:48, Mark Millard <[email protected]> wrote:
[email protected] <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
