Revert "sys/util.h: helper macro to perform pointer difference"
This reverts commit 755cc644cc
.
This approach is problematic in several ways. First, `intptr_t` could
cause undefined behavior in the subtraction when the pointer converts to
a negative value. Except in weird cases where the sign of the pointer
identifies a memory domain (like kernel vs userspace) I'm unaware of any
valid use of `intptr_t`.
Second, this macro was created to address a special need that cannot
rely on defined behavior: i.e. to ensure that data definitions are
placed in contiguous space and access is provided through linker-defined
symbols, for which the language required alignment and continuity is not
guaranteed.
A macro that calculates the span between linker symbols has very
different semantics than one that calculates the difference between
pointers. Replace the global PTR_DIFF with a documented local macro
that tests what's necessary without risking integer overflow.
Signed-off-by: Peter A. Bigot <pab@pabigot.com>
This commit is contained in:
parent
caa47e6c97
commit
765c06376c
2 changed files with 13 additions and 11 deletions
|
@ -26,9 +26,6 @@
|
|||
#define POINTER_TO_INT(x) ((intptr_t) (x))
|
||||
#define INT_TO_POINTER(x) ((void *) (intptr_t) (x))
|
||||
|
||||
/* Helper to get the difference between two pointers as an int */
|
||||
#define PTR_DIFF(y, x) ((int)((intptr_t)(y) - (intptr_t)(x)))
|
||||
|
||||
#if !(defined (__CHAR_BIT__) && defined (__SIZEOF_LONG__))
|
||||
# error Missing required predefined macros for BITS_PER_LONG calculation
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue