summaryrefslogtreecommitdiff
path: root/sys/dev/acpi
diff options
context:
space:
mode:
authorYASUOKA Masahiko <yasuoka@cvs.openbsd.org>2021-03-07 22:53:47 +0000
committerYASUOKA Masahiko <yasuoka@cvs.openbsd.org>2021-03-07 22:53:47 +0000
commitc8b5238b8ee05cbc99fb42022a7fc0529de2678e (patch)
tree06a5fb045403b7fc92ff5f7b4bbaf361cc98929e /sys/dev/acpi
parent20d2551b0eefe063c627f168fbf40e3b16b585ed (diff)
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
Diffstat (limited to 'sys/dev/acpi')
-rw-r--r--sys/dev/acpi/dsdt.c7
1 files 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 <jordan@openbsd.org>
*
@@ -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);