ACPICA: iASL: Fix printing CDAT table header

When disassembling CDAT AML, the lack of CDAT's common ACPI table header
should be taken into consideration when printing the table's actual
header. As the table header lacks fields like Signature, header
information is mangled and incorrect:

 # $ iasl -d -ds CDAT cdat.aml
 # Input file cdat.aml, Length 0xE4 (228) bytes
 # ACPI: ?    0x0000000000000000 000C01 (v00        ?        00180000 ??   23456789)

Both Signature and Length are printed incorrectly, and the remaining
fields are not applicable for this special table. To fix this, verify
acpi_gbl_CDAT is set (<-ds CDAT> via command line) and Header->Signature
is an invalid nameseg (due to the presence of non-ASCII char(s)), then
print only the explicitly-passed signature (ACPI_SIG_CDAT) and the table
length as cast with a pointer to the struct acpi_table_cdat structure.

Link: https://github.com/acpica/acpica/commit/2b5586b4
Signed-off-by: Ahmed Salem <x0rw3ll@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
Ahmed Salem 2025-09-12 21:56:18 +02:00 committed by Rafael J. Wysocki
parent 12fd607554
commit 4b020eff66

@ -121,6 +121,14 @@ acpi_tb_print_table_header(acpi_physical_address address,
ACPI_CAST_PTR(struct acpi_table_rsdp,
header)->revision,
local_header.oem_id));
} else if (acpi_gbl_CDAT && !acpi_ut_valid_nameseg(header->signature)) {
/* CDAT does not use the common ACPI table header */
ACPI_INFO(("%-4.4s 0x%8.8X%8.8X %06X",
ACPI_SIG_CDAT, ACPI_FORMAT_UINT64(address),
ACPI_CAST_PTR(struct acpi_table_cdat,
header)->length));
} else {
/* Standard ACPI table with full common header */