From f15e6a105b1cf589476042e62b8d0bb64a938e38 Mon Sep 17 00:00:00 2001 From: Edward O'Callaghan Date: Fri, 19 May 2023 17:32:40 +1000 Subject: [PATCH] programmer: Use correct type for flashbase The flashbase is a machine-sized integer representation of address space and so use the appropriate type that is correctly sized to encode such data. The flashbase is assigned to 'base' in 'map_flash()' and the type correctly changed to uintptr_t in commit 4e32ec19b124a7 therefore makes for a consistent type usage whenever stored. While `sizeof(unsigned long)` and `sizeof(uintptr_t)` are both `8` under most circumstances on a 64bit platform and thus have enough bits to represent all addresses on the platform, the C standard does not guarantee this. Only `uintptr_t` and `void *` has a guaranteed isomorphism as `uintptr_t` is defined by the platforms toolchain support whereas the conversion from `void *` to an integer is implementation defined and that the memory address value may contain additional bits describing the validation data or provenance of the address. Therefore a integer is insufficient to contain all the necessary information for that specific platform so this may not always work out for all platforms and toolchain combinations. Spotted-by: Martin Roth Change-Id: Ib9057e438731b9cccde0e24d5c8f758c3af1d47f Signed-off-by: Edward O'Callaghan Reviewed-on: https://review.coreboot.org/c/flashrom/+/75328 Tested-by: build bot (Jenkins) Reviewed-by: Anastasia Klimchuk Reviewed-by: Martin Roth --- flashrom.c | 3 ++- include/programmer.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/flashrom.c b/flashrom.c index 19afb5446..b6e5cf85a 100644 --- a/flashrom.c +++ b/flashrom.c @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -48,7 +49,7 @@ static const struct programmer_entry *programmer = NULL; struct decode_sizes max_rom_decode; /* If nonzero, used as the start address of bottom-aligned flash. */ -unsigned long flashbase; +uintptr_t flashbase; /* Is writing allowed with this programmer? */ bool programmer_may_write; diff --git a/include/programmer.h b/include/programmer.h index 5b304f55c..562f58ad2 100644 --- a/include/programmer.h +++ b/include/programmer.h @@ -292,7 +292,7 @@ struct decode_sizes { // FIXME: These need to be local, not global extern struct decode_sizes max_rom_decode; extern bool programmer_may_write; -extern unsigned long flashbase; +extern uintptr_t flashbase; /* used in programmer_enable.c */ char *extract_programmer_param_str(const struct programmer_cfg *cfg, const char *param_name); /* spi.c */