Fix casts between 64-bit physical addresses and pointers in EFI.
Compiling FreeBSD/i386 with modern GCC triggers warnings for various places that convert 64-bit EFI_ADDRs to pointers and vice versa. - Cast pointers to uintptr_t rather than to uint64_t when assigning to a 64-bit integer. - Cast 64-bit integers to uintptr_t before a cast to a pointer. Reviewed by: kevans MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D16586
This commit is contained in:
parent
5cb9940ce2
commit
0b600ec4ae
@ -70,14 +70,14 @@ ldr_bootinfo(struct bootinfo *bi, uint64_t *bi_addr)
|
|||||||
UINTN mmsz, pages, sz;
|
UINTN mmsz, pages, sz;
|
||||||
UINT32 mmver;
|
UINT32 mmver;
|
||||||
|
|
||||||
bi->bi_systab = (uint64_t)ST;
|
bi->bi_systab = (uintptr_t)ST;
|
||||||
bi->bi_hcdp = (uint64_t)efi_get_table(&hcdp_guid);
|
bi->bi_hcdp = (uintptr_t)efi_get_table(&hcdp_guid);
|
||||||
|
|
||||||
sz = sizeof(EFI_HANDLE);
|
sz = sizeof(EFI_HANDLE);
|
||||||
status = BS->LocateHandle(ByProtocol, &fpswa_guid, 0, &sz, &handle);
|
status = BS->LocateHandle(ByProtocol, &fpswa_guid, 0, &sz, &handle);
|
||||||
if (status == 0)
|
if (status == 0)
|
||||||
status = BS->HandleProtocol(handle, &fpswa_guid, &fpswa);
|
status = BS->HandleProtocol(handle, &fpswa_guid, &fpswa);
|
||||||
bi->bi_fpswa = (status == 0) ? (uint64_t)fpswa : 0;
|
bi->bi_fpswa = (status == 0) ? (uintptr_t)fpswa : 0;
|
||||||
|
|
||||||
bisz = (sizeof(struct bootinfo) + 0x0f) & ~0x0f;
|
bisz = (sizeof(struct bootinfo) + 0x0f) & ~0x0f;
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ ldr_bootinfo(struct bootinfo *bi, uint64_t *bi_addr)
|
|||||||
* aligned).
|
* aligned).
|
||||||
*/
|
*/
|
||||||
*bi_addr = addr;
|
*bi_addr = addr;
|
||||||
mm = (void *)(addr + bisz);
|
mm = (void *)(uintptr_t)(addr + bisz);
|
||||||
sz = (EFI_PAGE_SIZE * pages) - bisz;
|
sz = (EFI_PAGE_SIZE * pages) - bisz;
|
||||||
status = BS->GetMemoryMap(&sz, mm, &mapkey, &mmsz, &mmver);
|
status = BS->GetMemoryMap(&sz, mm, &mapkey, &mmsz, &mmver);
|
||||||
if (EFI_ERROR(status)) {
|
if (EFI_ERROR(status)) {
|
||||||
@ -117,12 +117,12 @@ ldr_bootinfo(struct bootinfo *bi, uint64_t *bi_addr)
|
|||||||
(long)status);
|
(long)status);
|
||||||
return (EINVAL);
|
return (EINVAL);
|
||||||
}
|
}
|
||||||
bi->bi_memmap = (uint64_t)mm;
|
bi->bi_memmap = (uintptr_t)mm;
|
||||||
bi->bi_memmap_size = sz;
|
bi->bi_memmap_size = sz;
|
||||||
bi->bi_memdesc_size = mmsz;
|
bi->bi_memdesc_size = mmsz;
|
||||||
bi->bi_memdesc_version = mmver;
|
bi->bi_memdesc_version = mmver;
|
||||||
|
|
||||||
bcopy(bi, (void *)(*bi_addr), sizeof(*bi));
|
bcopy(bi, (void *)(uintptr_t)(*bi_addr), sizeof(*bi));
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,7 +363,7 @@ bi_load_efi_data(struct preloaded_file *kfp)
|
|||||||
* memory map on a 16-byte boundary (the bootinfo block is page
|
* memory map on a 16-byte boundary (the bootinfo block is page
|
||||||
* aligned).
|
* aligned).
|
||||||
*/
|
*/
|
||||||
efihdr = (struct efi_map_header *)addr;
|
efihdr = (struct efi_map_header *)(uintptr_t)addr;
|
||||||
mm = (void *)((uint8_t *)efihdr + efisz);
|
mm = (void *)((uint8_t *)efihdr + efisz);
|
||||||
sz = (EFI_PAGE_SIZE * pages) - efisz;
|
sz = (EFI_PAGE_SIZE * pages) - efisz;
|
||||||
|
|
||||||
|
@ -278,9 +278,9 @@ efi_copy_finish(void)
|
|||||||
{
|
{
|
||||||
uint64_t *src, *dst, *last;
|
uint64_t *src, *dst, *last;
|
||||||
|
|
||||||
src = (uint64_t *)staging;
|
src = (uint64_t *)(uintptr_t)staging;
|
||||||
dst = (uint64_t *)(staging - stage_offset);
|
dst = (uint64_t *)(uintptr_t)(staging - stage_offset);
|
||||||
last = (uint64_t *)staging_end;
|
last = (uint64_t *)(uintptr_t)staging_end;
|
||||||
|
|
||||||
while (src < last)
|
while (src < last)
|
||||||
*dst++ = *src++;
|
*dst++ = *src++;
|
||||||
|
Loading…
Reference in New Issue
Block a user