efi_loader: Always use EFIAPI instead of asmlinkage
authorAlexander Graf <agraf@suse.de>
Tue, 23 Jan 2018 23:18:08 +0000 (00:18 +0100)
committerAlexander Graf <agraf@suse.de>
Sun, 28 Jan 2018 20:37:13 +0000 (21:37 +0100)
EFI calls are usually defined as asmlinkage. That means we pass all parameters
to functions via the stack x86_32.

On x86_64 however, we need to also stick to the MS ABI calling conventions,
which the EFIAPI define conveniently handles for us. Most EFI functions were
also marked with EFIAPI, except for the entry call.

So this patch adjusts all entry calls to use EFIAPI instead of the manual
asmlinkage attribute.

While at it, we also change the prototype of the entry point to return
efi_status_t instead of ulong, as this is the correct prototype definition.

Signed-off-by: Alexander Graf <agraf@suse.de>
---

v1 -> v2:

  - Use efi_status_t in all occurences

cmd/bootefi.c
lib/efi_loader/efi_boottime.c

index 51213c0293c307b843b4a1da819d9141632b9d20..545cfecc12b0e52ad8e2fd0852e6d01e3806e64a 100644 (file)
@@ -126,8 +126,9 @@ static void *copy_fdt(void *fdt)
 
 static efi_status_t efi_do_enter(
                        efi_handle_t image_handle, struct efi_system_table *st,
-                       asmlinkage ulong (*entry)(efi_handle_t image_handle,
-                                                 struct efi_system_table *st))
+                       EFIAPI efi_status_t (*entry)(
+                               efi_handle_t image_handle,
+                               struct efi_system_table *st))
 {
        efi_status_t ret = EFI_LOAD_ERROR;
 
@@ -138,7 +139,7 @@ static efi_status_t efi_do_enter(
 }
 
 #ifdef CONFIG_ARM64
-static efi_status_t efi_run_in_el2(asmlinkage ulong (*entry)(
+static efi_status_t efi_run_in_el2(EFIAPI efi_status_t (*entry)(
                        efi_handle_t image_handle, struct efi_system_table *st),
                        efi_handle_t image_handle, struct efi_system_table *st)
 {
@@ -162,8 +163,8 @@ static efi_status_t do_bootefi_exec(void *efi, void *fdt,
        struct efi_device_path *memdp = NULL;
        ulong ret;
 
-       ulong (*entry)(efi_handle_t image_handle, struct efi_system_table *st)
-               asmlinkage;
+       EFIAPI efi_status_t (*entry)(efi_handle_t image_handle,
+                                    struct efi_system_table *st);
        ulong fdt_pages, fdt_size, fdt_start, fdt_end;
        const efi_guid_t fdt_guid = EFI_FDT_GUID;
        bootm_headers_t img = { 0 };
index 39d8511fe383bb1f06523a6f52b98c05d31782c9..27c94e4474f1c9e988f5c0d4e27a0fb41e7ac10d 100644 (file)
@@ -1534,8 +1534,8 @@ static efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
                                           unsigned long *exit_data_size,
                                           s16 **exit_data)
 {
-       asmlinkage ulong (*entry)(efi_handle_t image_handle,
-                                 struct efi_system_table *st);
+       EFIAPI efi_status_t (*entry)(efi_handle_t image_handle,
+                                    struct efi_system_table *st);
        struct efi_loaded_image *info = image_handle;
        efi_status_t ret;