mirror of
https://review.coreboot.org/flashrom.git
synced 2025-07-01 14:11:15 +02:00
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 4e32ec19b1
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>
This commit is contained in:

committed by
Anastasia Klimchuk

parent
2e81c05ad3
commit
f15e6a105b
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@ -48,7 +49,7 @@ static const struct programmer_entry *programmer = NULL;
|
|||||||
struct decode_sizes max_rom_decode;
|
struct decode_sizes max_rom_decode;
|
||||||
|
|
||||||
/* If nonzero, used as the start address of bottom-aligned flash. */
|
/* If nonzero, used as the start address of bottom-aligned flash. */
|
||||||
unsigned long flashbase;
|
uintptr_t flashbase;
|
||||||
|
|
||||||
/* Is writing allowed with this programmer? */
|
/* Is writing allowed with this programmer? */
|
||||||
bool programmer_may_write;
|
bool programmer_may_write;
|
||||||
|
@ -292,7 +292,7 @@ struct decode_sizes {
|
|||||||
// FIXME: These need to be local, not global
|
// FIXME: These need to be local, not global
|
||||||
extern struct decode_sizes max_rom_decode;
|
extern struct decode_sizes max_rom_decode;
|
||||||
extern bool programmer_may_write;
|
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);
|
char *extract_programmer_param_str(const struct programmer_cfg *cfg, const char *param_name);
|
||||||
|
|
||||||
/* spi.c */
|
/* spi.c */
|
||||||
|
Reference in New Issue
Block a user