The pointer to the DSDT may be 64-bit as well.  In that case the
32-bit field will be zero and we have to use the 64-bit field.

ok?


Index: acpidump.c
===================================================================
RCS file: /cvs/src/usr.sbin/acpidump/acpidump.c,v
retrieving revision 1.18
diff -u -p -r1.18 acpidump.c
--- acpidump.c  24 Jun 2018 10:39:59 -0000      1.18
+++ acpidump.c  30 Jun 2018 18:41:51 -0000
@@ -532,7 +532,10 @@ acpi_handle_facp(struct FACPbody *facp)
        struct ACPIsdt  *dsdp;
 
        acpi_print_facp(facp);
-       dsdp = (struct ACPIsdt *) acpi_map_sdt(facp->dsdt_ptr);
+       if (facp->dsdt_ptr == 0)
+               dsdp = (struct ACPIsdt *) acpi_map_sdt(facp->x_dsdt);
+       else
+               dsdp = (struct ACPIsdt *) acpi_map_sdt(facp->dsdt_ptr);
        if (acpi_checksum(dsdp, dsdp->len))
                errx(1, "DSDT is corrupt");
        acpi_handle_dsdt(dsdp);

Reply via email to