From 2d0b096a8c2f45370ef2535e1c500a008b949611 Mon Sep 17 00:00:00 2001 From: lemon Date: Sun, 22 Mar 2026 17:22:15 +0100 Subject: eval: fix errata in EGETF addr case The symref given by staticaddrof is in ex2, not sub. This worked by chance (with sub->ssym.off happening to be zero) on linux, but on OpenBSD it would give garbage. Which would result in messed up relocations later leading to miscompilations. --- src/c_eval.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/c_eval.c b/src/c_eval.c index 927ea05..e2033a3 100644 --- a/src/c_eval.c +++ b/src/c_eval.c @@ -201,7 +201,7 @@ unop(Expr *ex, enum evalmode mode) } else { assert(ex2.t == ESSYMREF); ex->t = ESSYMREF; - vlong off = (vlong) sub->ssym.off + ex->fld.off; + vlong off = (vlong) ex2.ssym.off + ex->fld.off; if ((int) off != off) return 0; ex->ssym = ex2.ssym; ex->ssym.off = off; -- cgit v1.2.3