Date: Mon, 30 Aug 2021 19:34:57 GMT From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 130a690ae16e - main - Fix acpica macros that subtract null pointers Message-ID: <202108301934.17UJYvdh082751@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by dim: URL: https://cgit.FreeBSD.org/src/commit/?id=130a690ae16e1b845629e586203b508eff699f38 commit 130a690ae16e1b845629e586203b508eff699f38 Author: Dimitry Andric <dim@FreeBSD.org> AuthorDate: 2021-08-29 11:15:23 +0000 Commit: Dimitry Andric <dim@FreeBSD.org> CommitDate: 2021-08-30 19:34:34 +0000 Fix acpica macros that subtract null pointers Clang 13.0.0 produces a new -Werror warning about the ACPI_TO_INTEGER(p) and ACPI_OFFSET(d, f) macros in acpica's actypes.h: sys/contrib/dev/acpica/components/dispatcher/dsopcode.c:708:31: error: performing pointer subtraction with a null pointer has undefined behavior [-Werror,-Wnull-pointer-subtraction] ObjDesc->Region.Address = ACPI_PTR_TO_PHYSADDR (Table); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ sys/contrib/dev/acpica/include/actypes.h:664:41: note: expanded from macro 'ACPI_PTR_TO_PHYSADDR' #define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i) ^~~~~~~~~~~~~~~~~~ sys/contrib/dev/acpica/include/actypes.h:661:41: note: expanded from macro 'ACPI_TO_INTEGER' #define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) 0) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sys/contrib/dev/acpica/include/actypes.h:656:82: note: expanded from macro 'ACPI_PTR_DIFF' #define ACPI_PTR_DIFF(a, b) ((ACPI_SIZE) (ACPI_CAST_PTR (UINT8, (a)) - ACPI_CAST_PTR (UINT8, (b)))) ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated. This problem of undefined behavior was also reported to acpica by @cem in 2018: https://github.com/acpica/acpica/issues/407, but it seems there was never any fix committed for it upstream. Instead fix these locally, for ACPI_TO_INTEGER by simply casting the incoming pointer to ACPI_SIZE (which corresponds roughly to uintptr_t and size_t), and for ACPI_OFFSET by reusing our __offsetof definition from sys/cdefs.h. Reviewed by: emaste, kib, imp MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D31710 --- sys/contrib/dev/acpica/include/actypes.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sys/contrib/dev/acpica/include/actypes.h b/sys/contrib/dev/acpica/include/actypes.h index e98e636a36a8..5069c59ee339 100644 --- a/sys/contrib/dev/acpica/include/actypes.h +++ b/sys/contrib/dev/acpica/include/actypes.h @@ -658,8 +658,13 @@ typedef UINT64 ACPI_INTEGER; /* Pointer/Integer type conversions */ #define ACPI_TO_POINTER(i) ACPI_CAST_PTR (void, (ACPI_SIZE) (i)) +#ifdef __FreeBSD__ +#define ACPI_TO_INTEGER(p) ((ACPI_SIZE) (p)) +#define ACPI_OFFSET(d, f) ((ACPI_SIZE) __offsetof(d, f)) +#else #define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) 0) #define ACPI_OFFSET(d, f) ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) 0) +#endif #define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i) #define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202108301934.17UJYvdh082751>