Anastasia Klimchuk submitted this change.
1 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.
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 <martin.roth@amd.corp-partner.google.com>
Change-Id: Ib9057e438731b9cccde0e24d5c8f758c3af1d47f
Signed-off-by: Edward O'Callaghan <quasisec@google.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/75328
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
Reviewed-by: Martin Roth <martin.roth@amd.corp-partner.google.com>
---
M flashrom.c
M include/programmer.h
2 files changed, 38 insertions(+), 2 deletions(-)
diff --git a/flashrom.c b/flashrom.c
index 19afb54..b6e5cf8 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -21,6 +21,7 @@
#include <stdbool.h>
#include <stdio.h>
+#include <stdint.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
@@ -48,7 +49,7 @@
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 5b304f5..562f58a 100644
--- a/include/programmer.h
+++ b/include/programmer.h
@@ -292,7 +292,7 @@
// 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 */
To view, visit change 75328. To unsubscribe, or for help writing mail filters, visit settings.