Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ef42e53f authored by Bob Moore's avatar Bob Moore Committed by Rafael J. Wysocki
Browse files

ACPICA: Interpreter: Add warning if 64-bit constant appears in 32-bit table.



Some ASL compilers allow 64-bit constants within a 32-bit table
(DSDT version == 1). When encountered, emit a warning that the
constant will be truncated to 32 bits. This is potentially a
serious problem in the ACPI table(s).

Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarLv Zheng <lv.zheng@intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 3e5621a7
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -458,7 +458,7 @@ void acpi_ex_reacquire_interpreter(void);


void acpi_ex_relinquish_interpreter(void);
void acpi_ex_relinquish_interpreter(void);


void acpi_ex_truncate_for32bit_table(union acpi_operand_object *obj_desc);
u8 acpi_ex_truncate_for32bit_table(union acpi_operand_object *obj_desc);


void acpi_ex_acquire_global_lock(u32 rule);
void acpi_ex_acquire_global_lock(u32 rule);


+12 −2
Original line number Original line Diff line number Diff line
@@ -703,7 +703,7 @@ acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state,
				/* Truncate value if we are executing from a 32-bit ACPI table */
				/* Truncate value if we are executing from a 32-bit ACPI table */


#ifndef ACPI_NO_METHOD_EXECUTION
#ifndef ACPI_NO_METHOD_EXECUTION
				acpi_ex_truncate_for32bit_table(obj_desc);
				(void)acpi_ex_truncate_for32bit_table(obj_desc);
#endif
#endif
				break;
				break;


@@ -725,8 +725,18 @@ acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state,
		case AML_TYPE_LITERAL:
		case AML_TYPE_LITERAL:


			obj_desc->integer.value = op->common.value.integer;
			obj_desc->integer.value = op->common.value.integer;

#ifndef ACPI_NO_METHOD_EXECUTION
#ifndef ACPI_NO_METHOD_EXECUTION
			acpi_ex_truncate_for32bit_table(obj_desc);
			if (acpi_ex_truncate_for32bit_table(obj_desc)) {

				/* Warn if we found a 64-bit constant in a 32-bit table */

				ACPI_WARNING((AE_INFO,
					      "Truncated 64-bit constant found in 32-bit table: %8.8X%8.8X => %8.8X",
					      ACPI_FORMAT_UINT64(op->common.
								 value.integer),
					      (u32)obj_desc->integer.value));
			}
#endif
#endif
			break;
			break;


+2 −2
Original line number Original line Diff line number Diff line
@@ -149,7 +149,7 @@ acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state,


	/* Truncate the predicate to 32-bits if necessary */
	/* Truncate the predicate to 32-bits if necessary */


	acpi_ex_truncate_for32bit_table(local_obj_desc);
	(void)acpi_ex_truncate_for32bit_table(local_obj_desc);


	/*
	/*
	 * Save the result of the predicate evaluation on
	 * Save the result of the predicate evaluation on
@@ -706,7 +706,7 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)
	 * ACPI 2.0 support for 64-bit integers: Truncate numeric
	 * ACPI 2.0 support for 64-bit integers: Truncate numeric
	 * result value if we are executing from a 32-bit ACPI table
	 * result value if we are executing from a 32-bit ACPI table
	 */
	 */
	acpi_ex_truncate_for32bit_table(walk_state->result_obj);
	(void)acpi_ex_truncate_for32bit_table(walk_state->result_obj);


	/*
	/*
	 * Check if we just completed the evaluation of a
	 * Check if we just completed the evaluation of a
+1 −1
Original line number Original line Diff line number Diff line
@@ -176,7 +176,7 @@ acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc,


	/* Save the Result */
	/* Save the Result */


	acpi_ex_truncate_for32bit_table(return_desc);
	(void)acpi_ex_truncate_for32bit_table(return_desc);
	*result_desc = return_desc;
	*result_desc = return_desc;
	return_ACPI_STATUS(AE_OK);
	return_ACPI_STATUS(AE_OK);
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -253,7 +253,7 @@ acpi_ex_store_object_to_object(union acpi_operand_object *source_desc,


		/* Truncate value if we are executing from a 32-bit ACPI table */
		/* Truncate value if we are executing from a 32-bit ACPI table */


		acpi_ex_truncate_for32bit_table(dest_desc);
		(void)acpi_ex_truncate_for32bit_table(dest_desc);
		break;
		break;


	case ACPI_TYPE_STRING:
	case ACPI_TYPE_STRING:
Loading