mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-09 12:13:00 -04:00
fs: handle CONFIG_NEEDS_MANUAL_RELOC
Without this, fstypes[].probe points at the wrong place, so calling the function results in undefined behaviour. Signed-off-by: Stephen Warren <swarren@nvidia.com> Tested-by: Andreas Bießmann <andreas.devel@googlemail.com>
This commit is contained in:
parent
ed296d206a
commit
a1b231cef6
13
fs/fs.c
13
fs/fs.c
@ -21,6 +21,8 @@
|
|||||||
#include <fat.h>
|
#include <fat.h>
|
||||||
#include <fs.h>
|
#include <fs.h>
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
static block_dev_desc_t *fs_dev_desc;
|
static block_dev_desc_t *fs_dev_desc;
|
||||||
static disk_partition_t fs_partition;
|
static disk_partition_t fs_partition;
|
||||||
static int fs_type = FS_TYPE_ANY;
|
static int fs_type = FS_TYPE_ANY;
|
||||||
@ -141,7 +143,7 @@ static inline void fs_close_ext(void)
|
|||||||
#define fs_read_ext fs_read_unsupported
|
#define fs_read_ext fs_read_unsupported
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const struct {
|
static struct {
|
||||||
int fstype;
|
int fstype;
|
||||||
int (*probe)(void);
|
int (*probe)(void);
|
||||||
} fstypes[] = {
|
} fstypes[] = {
|
||||||
@ -158,6 +160,15 @@ static const struct {
|
|||||||
int fs_set_blk_dev(const char *ifname, const char *dev_part_str, int fstype)
|
int fs_set_blk_dev(const char *ifname, const char *dev_part_str, int fstype)
|
||||||
{
|
{
|
||||||
int part, i;
|
int part, i;
|
||||||
|
#ifdef CONFIG_NEEDS_MANUAL_RELOC
|
||||||
|
static int relocated;
|
||||||
|
|
||||||
|
if (!relocated) {
|
||||||
|
for (i = 0; i < ARRAY_SIZE(fstypes); i++)
|
||||||
|
fstypes[i].probe += gd->reloc_off;
|
||||||
|
relocated = 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
part = get_device_and_partition(ifname, dev_part_str, &fs_dev_desc,
|
part = get_device_and_partition(ifname, dev_part_str, &fs_dev_desc,
|
||||||
&fs_partition, 1);
|
&fs_partition, 1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user