Index: boot/genarch/src/efi.c
===================================================================
--- boot/genarch/src/efi.c	(revision 09ab0a9afc9379f1604c0fd75cac2d9287ba022c)
+++ boot/genarch/src/efi.c	(revision 8c5586cbcee875245cbcc8e57bf16d08c4f811b9)
@@ -42,2 +42,30 @@
 	return NULL;
 }
+
+efi_status_t efi_get_memory_map(efi_system_table_t *st,
+    sysarg_t *memory_map_size, efi_v1_memdesc_t **memory_map, sysarg_t *map_key,
+    sysarg_t *descriptor_size, uint32_t *descriptor_version)
+{
+	efi_status_t status;
+
+	*memory_map_size = 8 * sizeof(**memory_map);
+
+	do {
+		/* Allocate space for the memory map. */
+		status = st->boot_services->allocate_pool(EFI_LOADER_DATA,
+		    *memory_map_size, (void **) memory_map);
+		if (status != EFI_SUCCESS)
+			return status;
+
+		/* Try to obtain the map. */
+		status = st->boot_services->get_memory_map(memory_map_size,
+		    *memory_map, map_key, descriptor_size, descriptor_version);
+		if (status == EFI_SUCCESS)
+			return status;
+
+		/* An error occurred, release the allocated memory. */
+		st->boot_services->free_pool(*memory_map);
+	} while (status == EFI_BUFFER_TOO_SMALL);
+
+	return status;
+}
