From c1053d6a5a6ff0c23fa9cda5b6bd2d6feb9d82b6 Mon Sep 17 00:00:00 2001 From: yasuoka Date: Sun, 7 Mar 2021 22:53:46 +0000 Subject: [PATCH] Fix aml_store() to work properly when the lvalue is a reference of LocalX. In that case, resolving the reference must be done before resetting the LocalX variable. test daniel ok kettenis --- sys/dev/acpi/dsdt.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sys/dev/acpi/dsdt.c b/sys/dev/acpi/dsdt.c index 461c810a878..0cbeeb43d08 100644 --- a/sys/dev/acpi/dsdt.c +++ b/sys/dev/acpi/dsdt.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dsdt.c,v 1.257 2020/12/17 17:57:19 kettenis Exp $ */ +/* $OpenBSD: dsdt.c,v 1.258 2021/03/07 22:53:46 yasuoka Exp $ */ /* * Copyright (c) 2005 Jordan Hargrave * @@ -2961,11 +2961,12 @@ aml_store(struct aml_scope *scope, struct aml_value *lhs , int64_t ival, aml_rwfield(rhs, 0, rhs->v_field.bitlen, &tmp, ACPI_IOREAD); rhs = &tmp; } + + lhs = aml_gettgt(lhs, AMLOP_STORE); + /* Store to LocalX: free value */ if (lhs->stack >= AMLOP_LOCAL0 && lhs->stack <= AMLOP_LOCAL7) aml_freevalue(lhs); - - lhs = aml_gettgt(lhs, AMLOP_STORE); switch (lhs->type) { case AML_OBJTYPE_UNINITIALIZED: aml_copyvalue(lhs, rhs); -- 2.20.1