Avoid undefined behavior in Guile exception handling
authorTom Tromey <tromey@adacore.com>
Wed, 24 Apr 2019 12:50:01 +0000 (06:50 -0600)
committerTom Tromey <tromey@adacore.com>
Thu, 25 Apr 2019 18:59:35 +0000 (12:59 -0600)
commit680d7fd5fcff860a31021845389d4dfeb7b42e3c
tree0065f8d560b3148a3a3dceb5e3e34ab724cc7cba
parentc6fdd8b2052baa9b7a27d4d34f109c9622b53509
Avoid undefined behavior in Guile exception handling

The Guile code will longjmp (via scm_throw) when an object requiring
destruction is on the stack.  This is undefined behavior.

This changes this code to run any destructors in inner scopes, and to
pass a POD to gdbscm_throw_gdb_exception.

gdb/ChangeLog
2019-04-25  Tom Tromey  <tromey@adacore.com>

* guile/scm-exception.c (gdbscm_scm_from_gdb_exception)
(gdbscm_throw_gdb_exception): Take a gdbscm_gdb_exception.
* guile/scm-block.c, guile/scm-breakpoint.c, guile/scm-cmd.c,
guile/scm-disasm.c, guile/scm-frame.c, guile/scm-lazy-string.c,
guile/scm-math.c, guile/scm-param.c, guile/scm-ports.c,
guile/scm-symbol.c, guile/scm-symtab.c, guile/scm-type.c,
guile/scm-value.c: Use unpack.
* guile/guile-internal.h (gdbscm_scm_from_gdb_exception): Take a
gdbscm_gdb_exception.
(gdbscm_throw_gdb_exception): Likewise.
(struct gdbscm_gdb_exception): New.
(unpack): New function.
(gdbscm_wrap): Use unpack.
16 files changed:
gdb/ChangeLog
gdb/guile/guile-internal.h
gdb/guile/scm-block.c
gdb/guile/scm-breakpoint.c
gdb/guile/scm-cmd.c
gdb/guile/scm-disasm.c
gdb/guile/scm-exception.c
gdb/guile/scm-frame.c
gdb/guile/scm-lazy-string.c
gdb/guile/scm-math.c
gdb/guile/scm-param.c
gdb/guile/scm-ports.c
gdb/guile/scm-symbol.c
gdb/guile/scm-symtab.c
gdb/guile/scm-type.c
gdb/guile/scm-value.c