Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Oct 2018 21:10:03 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r339210 - in stable/11/stand/efi/loader: . arch/i386
Message-ID:  <201810052110.w95LA3cR009114@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhb
Date: Fri Oct  5 21:10:03 2018
New Revision: 339210
URL: https://svnweb.freebsd.org/changeset/base/339210

Log:
  MFC 338022: 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.

Modified:
  stable/11/stand/efi/loader/arch/i386/efimd.c
  stable/11/stand/efi/loader/bootinfo.c
  stable/11/stand/efi/loader/copy.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/stand/efi/loader/arch/i386/efimd.c
==============================================================================
--- stable/11/stand/efi/loader/arch/i386/efimd.c	Fri Oct  5 20:49:54 2018	(r339209)
+++ stable/11/stand/efi/loader/arch/i386/efimd.c	Fri Oct  5 21:10:03 2018	(r339210)
@@ -70,14 +70,14 @@ ldr_bootinfo(struct bootinfo *bi, uint64_t *bi_addr)
 	UINTN mmsz, pages, sz;
 	UINT32 mmver;
 
-	bi->bi_systab = (uint64_t)ST;
-	bi->bi_hcdp = (uint64_t)efi_get_table(&hcdp_guid);
+	bi->bi_systab = (uintptr_t)ST;
+	bi->bi_hcdp = (uintptr_t)efi_get_table(&hcdp_guid);
 
 	sz = sizeof(EFI_HANDLE);
 	status = BS->LocateHandle(ByProtocol, &fpswa_guid, 0, &sz, &handle);
 	if (status == 0)
 		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;
 
@@ -109,7 +109,7 @@ ldr_bootinfo(struct bootinfo *bi, uint64_t *bi_addr)
 	 * aligned).
 	 */
 	*bi_addr = addr;
-	mm = (void *)(addr + bisz);
+	mm = (void *)(uintptr_t)(addr + bisz);
 	sz = (EFI_PAGE_SIZE * pages) - bisz;
 	status = BS->GetMemoryMap(&sz, mm, &mapkey, &mmsz, &mmver);
 	if (EFI_ERROR(status)) {
@@ -117,12 +117,12 @@ ldr_bootinfo(struct bootinfo *bi, uint64_t *bi_addr)
 		    (long)status);
 		return (EINVAL);
 	}
-	bi->bi_memmap = (uint64_t)mm;
+	bi->bi_memmap = (uintptr_t)mm;
 	bi->bi_memmap_size = sz;
 	bi->bi_memdesc_size = mmsz;
 	bi->bi_memdesc_version = mmver;
 
-	bcopy(bi, (void *)(*bi_addr), sizeof(*bi));
+	bcopy(bi, (void *)(uintptr_t)(*bi_addr), sizeof(*bi));
 	return (0);
 }
 

Modified: stable/11/stand/efi/loader/bootinfo.c
==============================================================================
--- stable/11/stand/efi/loader/bootinfo.c	Fri Oct  5 20:49:54 2018	(r339209)
+++ stable/11/stand/efi/loader/bootinfo.c	Fri Oct  5 21:10:03 2018	(r339210)
@@ -338,7 +338,7 @@ bi_load_efi_data(struct preloaded_file *kfp)
 		 * memory map on a 16-byte boundary (the bootinfo block is page
 		 * aligned).
 		 */
-		efihdr = (struct efi_map_header *)addr;
+		efihdr = (struct efi_map_header *)(uintptr_t)addr;
 		mm = (void *)((uint8_t *)efihdr + efisz);
 		sz = (EFI_PAGE_SIZE * pages) - efisz;
 

Modified: stable/11/stand/efi/loader/copy.c
==============================================================================
--- stable/11/stand/efi/loader/copy.c	Fri Oct  5 20:49:54 2018	(r339209)
+++ stable/11/stand/efi/loader/copy.c	Fri Oct  5 21:10:03 2018	(r339210)
@@ -278,9 +278,9 @@ efi_copy_finish(void)
 {
 	uint64_t	*src, *dst, *last;
 
-	src = (uint64_t *)staging;
-	dst = (uint64_t *)(staging - stage_offset);
-	last = (uint64_t *)staging_end;
+	src = (uint64_t *)(uintptr_t)staging;
+	dst = (uint64_t *)(uintptr_t)(staging - stage_offset);
+	last = (uint64_t *)(uintptr_t)staging_end;
 
 	while (src < last)
 		*dst++ = *src++;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201810052110.w95LA3cR009114>