13.0-RC3 bison causes tputs SIGSEGV
Thomas Dickey
dickey at his.com
Mon Mar 29 23:31:42 UTC 2021
On Mon, Mar 29, 2021 at 12:12:55PM -0700, Henric Jungheim wrote:
>
> I ran into a bit of an odd problem when building the
> sysutils/grub2-bhyve port on 13.0-RC3 (on x64). The bison command
> dumps core when the output is going to a console. Redirecting the
> build output to a file avoids the problem. I'm not sure if this is
> an ncurses issue, a port issue (and which port?), my box, or
> something else (clang?).
It might be a problem with the application's initialization of ncurses.
> This is what the tail end of the port build looks like:
> ...
> grub-mkfont: No (explicitly disabled)
> grub-mount: No (explicitly disabled)
> starfield theme: No (No grub-mkfont)
> With libzfs support: Yes
> *******************************************************
> ===> Building for grub2-bhyve-0.40_8
> gmake[1]: Entering directory '/usr/ports/sysutils/grub2-bhyve/work/grub2-bhyve-0.40'
> bison -d -p grub_script_yy -b grub_script ./grub-core/script/parser.y
> ./grub-core/script/parser.y:94.1-12: warning: deprecated directive: '%pure-parser', use '%define api.pure' [
>
> And here's what lldb has to say:
>
>
> sysutils/grub2-bhyve/work/grub2-bhyve-0.40>lldb -- /usr/local/bin/bison -d -p grub_script_yy -b grub_script ./grub-core/script/parser.y
> (lldb) target create "/usr/local/bin/bison"
> Current executable set to '/usr/local/bin/bison' (x86_64).
> (lldb) settings set -- target.run-args "-d" "-p" "grub_script_yy" "-b" "grub_script" "./grub-core/script/parser.y"
> (lldb) run
> Process 50108 launching
> Process 50108 launched: '/usr/local/bin/bison' (x86_64)
> ./grub-core/script/parser.y:94.1-12: warning: deprecated directive: %pure-parser, use %define api.pure [signal SIGSEGV: invalid address (fault address: 0x0)
> frame #0: 0x0000000000000000
> error: Bad address
> (lldb) bt
> * thread #1, name = 'bison', stop reason = signal SIGSEGV: invalid address (fault address: 0x0)
> * frame #0: 0x0000000000000000
> frame #1: 0x0000000800c1930a libncursesw.so.9`delay_output_sp + 234
> frame #2: 0x0000000800c19b81 libncursesw.so.9`tputs_sp + 1377
> frame #3: 0x0000000800c19cfb libncursesw.so.9`tputs + 123
> frame #4: 0x0000000800702dbc libtextstyle.so.0`___lldb_unnamed_symbol149$$libtextstyle.so.0 + 92
> frame #5: 0x00000008007037ff libtextstyle.so.0`___lldb_unnamed_symbol152$$libtextstyle.so.0 + 943
> frame #6: 0x00000008007030cf libtextstyle.so.0`___lldb_unnamed_symbol151$$libtextstyle.so.0 + 543
> frame #7: 0x0000000800700d00 libtextstyle.so.0`___lldb_unnamed_symbol125$$libtextstyle.so.0 + 32
Either bison has to tell libtextstyle to initialize,
or libtextstyle has to know when to initialize ncurses.
For the latter, term_ostream_create calls setupterm,
which interestingly enough tries to recover from an error
by calling the terminfo functions (which could still fail):
if (setupterm (term, fd, &err) || err == 1)
{
/* Retrieve particular values depending on the terminal type. */
stream->max_colors = tigetnum ("colors");
stream->no_color_video = tigetnum ("ncv");
setupterm could fail for instance if there's no terminal description
corresponding to your $TERM variable. If that happens, then the
SCREEN pointer passed to tputs_sp might be NULL, or cur_term might
be NULL.
In ncurses, the corresponding null-pointer checks are
done with HasTInfoTerminal:
NCURSES_EXPORT(int)
NCURSES_SP_NAME(delay_output) (NCURSES_SP_DCLx int ms)
{
T((T_CALLED("delay_output(%p,%d)"), (void *) SP_PARM, ms));
if (!HasTInfoTerminal(SP_PARM))
returnCode(ERR);
if (no_pad_char) {
NCURSES_SP_NAME(_nc_flush) (NCURSES_SP_ARG);
napms(ms);
} else {
> frame #8: 0x0000000000407295 bison`___lldb_unnamed_symbol160$$bison + 1669
> frame #9: 0x0000000000407d75 bison`___lldb_unnamed_symbol177$$bison + 149
> frame #10: 0x000000000040805d bison`___lldb_unnamed_symbol181$$bison + 109
> frame #11: 0x000000000042803f bison`___lldb_unnamed_symbol403$$bison + 7679
> frame #12: 0x000000000042e9c8 bison`___lldb_unnamed_symbol459$$bison + 56
> frame #13: 0x0000000000403743 bison`___lldb_unnamed_symbol130$$bison + 291
> frame #14: 0x0000000000403be0 bison`___lldb_unnamed_symbol130$$bison + 1472
> (lldb)
>
> _______________________________________________
> freebsd-current at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
--
Thomas E. Dickey <dickey at invisible-island.net>
https://invisible-island.net
ftp://ftp.invisible-island.net
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-current/attachments/20210329/fc63ebef/attachment.sig>
More information about the freebsd-current
mailing list