efi_loader: remove NULL entries from runtime detach list

Some entries in the system table are set to NULL in ExitBootServices(). We
had them in the runtime detach list to avoid relocation of NULL. Let's
instead assign the pointers dynamically in efi_initialize_system_table() to
avoid the relocation entry.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
index e62410c..bf2df80 100644
--- a/lib/efi_loader/efi_boottime.c
+++ b/lib/efi_loader/efi_boottime.c
@@ -3620,11 +3620,7 @@
 	},
 	.fw_vendor = firmware_vendor,
 	.fw_revision = FW_VERSION << 16 | FW_PATCHLEVEL << 8,
-	.con_in = &efi_con_in,
-	.con_out = &efi_con_out,
-	.std_err = &efi_con_out,
 	.runtime = &efi_runtime_services,
-	.boottime = &efi_boot_services,
 	.nr_tables = 0,
 	.tables = NULL,
 };
@@ -3644,6 +3640,15 @@
 				sizeof(struct efi_configuration_table),
 				(void **)&systab.tables);
 
+	/*
+	 * These entries will be set to NULL in ExitBootServices(). To avoid
+	 * relocation in SetVirtualAddressMap(), set them dynamically.
+	 */
+	systab.con_in = &efi_con_in;
+	systab.con_out = &efi_con_out;
+	systab.std_err = &efi_con_out;
+	systab.boottime = &efi_boot_services;
+
 	/* Set CRC32 field in table headers */
 	efi_update_table_header_crc32(&systab.hdr);
 	efi_update_table_header_crc32(&efi_runtime_services.hdr);