[PATCH 06/13] ACPICA: Improve typechecking, both compile-time and runtime

2015-10-14 Thread Lv Zheng
From: Bob Moore 

ACPICA commit 8d0f96e2a11a4ceabb2cae4b41e0ce1f4d3786b9

Adds much stricter typechecking in the iASL compiler, and
also adds some additional checking in the interpreter.

Link: https://github.com/acpica/acpica/commit/8d0f96e2
Signed-off-by: Bob Moore 
Signed-off-by: Lv Zheng 
---
 drivers/acpi/acpica/aclocal.h  |8 ++-
 drivers/acpi/acpica/acopcode.h |4 +-
 drivers/acpi/acpica/amlcode.h  |   11 ++--
 drivers/acpi/acpica/exconvrt.c |1 +
 drivers/acpi/acpica/exresolv.c |1 -
 drivers/acpi/acpica/exresop.c  |2 +
 drivers/acpi/acpica/exstore.c  |  120 ++--
 drivers/acpi/acpica/exstoren.c |5 +-
 drivers/acpi/acpica/nspredef.c |2 +-
 drivers/acpi/acpica/utdecode.c |   19 ++-
 include/acpi/acexcep.h |7 ++-
 11 files changed, 134 insertions(+), 46 deletions(-)

diff --git a/drivers/acpi/acpica/aclocal.h b/drivers/acpi/acpica/aclocal.h
index 918f70d..4e41b43 100644
--- a/drivers/acpi/acpica/aclocal.h
+++ b/drivers/acpi/acpica/aclocal.h
@@ -285,13 +285,17 @@ acpi_status(*acpi_internal_method) (struct 
acpi_walk_state * walk_state);
 #define ACPI_BTYPE_BUFFER_FIELD 0x2000
 #define ACPI_BTYPE_DDB_HANDLE   0x4000
 #define ACPI_BTYPE_DEBUG_OBJECT 0x8000
-#define ACPI_BTYPE_REFERENCE0x0001
+#define ACPI_BTYPE_REFERENCE_OBJECT 0x0001 /* From Index(), 
ref_of(), etc (type6_opcodes) */
 #define ACPI_BTYPE_RESOURCE 0x0002
+#define ACPI_BTYPE_NAMED_REFERENCE  0x0004 /* Generic unresolved 
Name or Namepath */
 
 #define ACPI_BTYPE_COMPUTE_DATA (ACPI_BTYPE_INTEGER | 
ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER)
 
 #define ACPI_BTYPE_DATA (ACPI_BTYPE_COMPUTE_DATA  | 
ACPI_BTYPE_PACKAGE)
-#define ACPI_BTYPE_DATA_REFERENCE   (ACPI_BTYPE_DATA | 
ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE)
+
+   /* Used by Copy, de_ref_of, Store, Printf, Fprintf */
+
+#define ACPI_BTYPE_DATA_REFERENCE   (ACPI_BTYPE_DATA | 
ACPI_BTYPE_REFERENCE_OBJECT | ACPI_BTYPE_DDB_HANDLE)
 #define ACPI_BTYPE_DEVICE_OBJECTS   (ACPI_BTYPE_DEVICE | 
ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR)
 #define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001 /* ARG or LOCAL */
 #define ACPI_BTYPE_ALL_OBJECTS  0x
diff --git a/drivers/acpi/acpica/acopcode.h b/drivers/acpi/acpica/acopcode.h
index fd85ad0..f9acf92 100644
--- a/drivers/acpi/acpica/acopcode.h
+++ b/drivers/acpi/acpica/acopcode.h
@@ -211,7 +211,7 @@
 #define ARGI_ARG4   ARG_NONE
 #define ARGI_ARG5   ARG_NONE
 #define ARGI_ARG6   ARG_NONE
-#define ARGI_BANK_FIELD_OP  ARGI_INVALID_OPCODE
+#define ARGI_BANK_FIELD_OP  ARGI_LIST1 (ARGI_INTEGER)
 #define ARGI_BIT_AND_OP ARGI_LIST3 (ARGI_INTEGER,
ARGI_INTEGER,   ARGI_TARGETREF)
 #define ARGI_BIT_NAND_OPARGI_LIST3 (ARGI_INTEGER,
ARGI_INTEGER,   ARGI_TARGETREF)
 #define ARGI_BIT_NOR_OP ARGI_LIST3 (ARGI_INTEGER,
ARGI_INTEGER,   ARGI_TARGETREF)
@@ -307,7 +307,7 @@
 #define ARGI_SLEEP_OP   ARGI_LIST1 (ARGI_INTEGER)
 #define ARGI_STALL_OP   ARGI_LIST1 (ARGI_INTEGER)
 #define ARGI_STATICSTRING_OPARGI_INVALID_OPCODE
-#define ARGI_STORE_OP   ARGI_LIST2 (ARGI_DATAREFOBJ, 
ARGI_TARGETREF)
+#define ARGI_STORE_OP   ARGI_LIST2 (ARGI_DATAREFOBJ, 
ARGI_STORE_TARGET)
 #define ARGI_STRING_OP  ARGI_INVALID_OPCODE
 #define ARGI_SUBTRACT_OPARGI_LIST3 (ARGI_INTEGER,
ARGI_INTEGER,   ARGI_TARGETREF)
 #define ARGI_THERMAL_ZONE_OPARGI_INVALID_OPCODE
diff --git a/drivers/acpi/acpica/amlcode.h b/drivers/acpi/acpica/amlcode.h
index be9fd00..883f20c 100644
--- a/drivers/acpi/acpica/amlcode.h
+++ b/drivers/acpi/acpica/amlcode.h
@@ -277,14 +277,15 @@
 #define ARGI_TARGETREF  0x0F   /* Target, subject to implicit 
conversion */
 #define ARGI_FIXED_TARGET   0x10   /* Target, no implicit 
conversion */
 #define ARGI_SIMPLE_TARGET  0x11   /* Name, Local, Arg -- no 
implicit conversion */
+#define ARGI_STORE_TARGET   0x12   /* Target for store is 
TARGETREF + package objects */
 
 /* Multiple/complex types */
 
-#define ARGI_DATAOBJECT 0x12   /* Buffer, String, package or 
reference to a node - Used only by size_of operator */
-#define ARGI_COMPLEXOBJ 0x13   /* Buffer, String, or package 
(Used by INDEX op only) */
-#define ARGI_REF_OR_STRING  0x14   /* Reference or String (Used by 
DEREFOF op only) */
-#define ARGI_REGION_OR_BUFFER   0x15   /* Used by LOAD op only */
-#define ARGI_DATAREFOBJ 0x16
+#define ARGI_DATAOBJECT 0x13   /* Buffer, String, package or 
reference to a node - Used only by size_of operator */
+#define ARGI_COMPLEXOBJ 0x14   /* 

[PATCH 06/13] ACPICA: Improve typechecking, both compile-time and runtime

2015-10-14 Thread Lv Zheng
From: Bob Moore 

ACPICA commit 8d0f96e2a11a4ceabb2cae4b41e0ce1f4d3786b9

Adds much stricter typechecking in the iASL compiler, and
also adds some additional checking in the interpreter.

Link: https://github.com/acpica/acpica/commit/8d0f96e2
Signed-off-by: Bob Moore 
Signed-off-by: Lv Zheng 
---
 drivers/acpi/acpica/aclocal.h  |8 ++-
 drivers/acpi/acpica/acopcode.h |4 +-
 drivers/acpi/acpica/amlcode.h  |   11 ++--
 drivers/acpi/acpica/exconvrt.c |1 +
 drivers/acpi/acpica/exresolv.c |1 -
 drivers/acpi/acpica/exresop.c  |2 +
 drivers/acpi/acpica/exstore.c  |  120 ++--
 drivers/acpi/acpica/exstoren.c |5 +-
 drivers/acpi/acpica/nspredef.c |2 +-
 drivers/acpi/acpica/utdecode.c |   19 ++-
 include/acpi/acexcep.h |7 ++-
 11 files changed, 134 insertions(+), 46 deletions(-)

diff --git a/drivers/acpi/acpica/aclocal.h b/drivers/acpi/acpica/aclocal.h
index 918f70d..4e41b43 100644
--- a/drivers/acpi/acpica/aclocal.h
+++ b/drivers/acpi/acpica/aclocal.h
@@ -285,13 +285,17 @@ acpi_status(*acpi_internal_method) (struct 
acpi_walk_state * walk_state);
 #define ACPI_BTYPE_BUFFER_FIELD 0x2000
 #define ACPI_BTYPE_DDB_HANDLE   0x4000
 #define ACPI_BTYPE_DEBUG_OBJECT 0x8000
-#define ACPI_BTYPE_REFERENCE0x0001
+#define ACPI_BTYPE_REFERENCE_OBJECT 0x0001 /* From Index(), 
ref_of(), etc (type6_opcodes) */
 #define ACPI_BTYPE_RESOURCE 0x0002
+#define ACPI_BTYPE_NAMED_REFERENCE  0x0004 /* Generic unresolved 
Name or Namepath */
 
 #define ACPI_BTYPE_COMPUTE_DATA (ACPI_BTYPE_INTEGER | 
ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER)
 
 #define ACPI_BTYPE_DATA (ACPI_BTYPE_COMPUTE_DATA  | 
ACPI_BTYPE_PACKAGE)
-#define ACPI_BTYPE_DATA_REFERENCE   (ACPI_BTYPE_DATA | 
ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE)
+
+   /* Used by Copy, de_ref_of, Store, Printf, Fprintf */
+
+#define ACPI_BTYPE_DATA_REFERENCE   (ACPI_BTYPE_DATA | 
ACPI_BTYPE_REFERENCE_OBJECT | ACPI_BTYPE_DDB_HANDLE)
 #define ACPI_BTYPE_DEVICE_OBJECTS   (ACPI_BTYPE_DEVICE | 
ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR)
 #define ACPI_BTYPE_OBJECTS_AND_REFS 0x0001 /* ARG or LOCAL */
 #define ACPI_BTYPE_ALL_OBJECTS  0x
diff --git a/drivers/acpi/acpica/acopcode.h b/drivers/acpi/acpica/acopcode.h
index fd85ad0..f9acf92 100644
--- a/drivers/acpi/acpica/acopcode.h
+++ b/drivers/acpi/acpica/acopcode.h
@@ -211,7 +211,7 @@
 #define ARGI_ARG4   ARG_NONE
 #define ARGI_ARG5   ARG_NONE
 #define ARGI_ARG6   ARG_NONE
-#define ARGI_BANK_FIELD_OP  ARGI_INVALID_OPCODE
+#define ARGI_BANK_FIELD_OP  ARGI_LIST1 (ARGI_INTEGER)
 #define ARGI_BIT_AND_OP ARGI_LIST3 (ARGI_INTEGER,
ARGI_INTEGER,   ARGI_TARGETREF)
 #define ARGI_BIT_NAND_OPARGI_LIST3 (ARGI_INTEGER,
ARGI_INTEGER,   ARGI_TARGETREF)
 #define ARGI_BIT_NOR_OP ARGI_LIST3 (ARGI_INTEGER,
ARGI_INTEGER,   ARGI_TARGETREF)
@@ -307,7 +307,7 @@
 #define ARGI_SLEEP_OP   ARGI_LIST1 (ARGI_INTEGER)
 #define ARGI_STALL_OP   ARGI_LIST1 (ARGI_INTEGER)
 #define ARGI_STATICSTRING_OPARGI_INVALID_OPCODE
-#define ARGI_STORE_OP   ARGI_LIST2 (ARGI_DATAREFOBJ, 
ARGI_TARGETREF)
+#define ARGI_STORE_OP   ARGI_LIST2 (ARGI_DATAREFOBJ, 
ARGI_STORE_TARGET)
 #define ARGI_STRING_OP  ARGI_INVALID_OPCODE
 #define ARGI_SUBTRACT_OPARGI_LIST3 (ARGI_INTEGER,
ARGI_INTEGER,   ARGI_TARGETREF)
 #define ARGI_THERMAL_ZONE_OPARGI_INVALID_OPCODE
diff --git a/drivers/acpi/acpica/amlcode.h b/drivers/acpi/acpica/amlcode.h
index be9fd00..883f20c 100644
--- a/drivers/acpi/acpica/amlcode.h
+++ b/drivers/acpi/acpica/amlcode.h
@@ -277,14 +277,15 @@
 #define ARGI_TARGETREF  0x0F   /* Target, subject to implicit 
conversion */
 #define ARGI_FIXED_TARGET   0x10   /* Target, no implicit 
conversion */
 #define ARGI_SIMPLE_TARGET  0x11   /* Name, Local, Arg -- no 
implicit conversion */
+#define ARGI_STORE_TARGET   0x12   /* Target for store is 
TARGETREF + package objects */
 
 /* Multiple/complex types */
 
-#define ARGI_DATAOBJECT 0x12   /* Buffer, String, package or 
reference to a node - Used only by size_of operator */
-#define ARGI_COMPLEXOBJ 0x13   /* Buffer, String, or package 
(Used by INDEX op only) */
-#define ARGI_REF_OR_STRING  0x14   /* Reference or String (Used by 
DEREFOF op only) */
-#define ARGI_REGION_OR_BUFFER   0x15   /* Used by LOAD op only */
-#define ARGI_DATAREFOBJ 0x16
+#define ARGI_DATAOBJECT 0x13   /* Buffer, String, package or 
reference to a node - Used only by size_of