176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <efi.h> 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <efilib.h> 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef EFI_STATUS (*foo_t)(EFI_HANDLE, EFI_GUID *, VOID **); 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct { 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman unsigned long addr; 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman unsigned long gp; 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} fdesc_t; 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1076d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_LOADED_IMAGE my_loaded; 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1276d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanefi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab) 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_LOADED_IMAGE *loaded_image = NULL; 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#if 0 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_DEVICE_PATH *dev_path; 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_STATUS status; 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman InitializeLib(image, systab); 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman status = uefi_call_wrapper(systab->BootServices->HandleProtocol, 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3, 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman image, 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman &LoadedImageProtocol, 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman (void **) &loaded_image); 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (EFI_ERROR(status)) { 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L"handleprotocol: %r\n", status); 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#if 0 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman BS->HandleProtocol(loaded_image->DeviceHandle, &DevicePathProtocol, (void **) &dev_path); 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L"Image device : %s\n", DevicePathToStr(dev_path)); 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L"Image file : %s\n", DevicePathToStr(loaded_image->FilePath)); 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L"Image base : %lx\n", loaded_image->ImageBase); 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L"Image size : %lx\n", loaded_image->ImageSize); 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L"Load options size : %lx\n", loaded_image->LoadOptionsSize); 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Print(L"Load options : %s\n", loaded_image->LoadOptions); 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return EFI_SUCCESS; 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 44