svn commit: r323063 - head/sys/boot/efi/boot1

Andrew Turner andrew at fubar.geek.nz
Thu Sep 7 07:04:51 UTC 2017


And we need a constant wchar_t between loader and libstand as ld.bfd checks the attributes across these when linking.

There are a few options, the simplest is probably to make sys/boot and libstand all build with 16bit wchar_t, but it would need someone to check on wchar_t usage in other loader versions.

Andrew

> On 7 Sep 2017, at 07:25, Conrad Meyer <cem at freebsd.org> wrote:
> 
> This seems to break world on ARM due to the size difference CHAR16 vs
> ARM wchat_t (currently 32-bit in loader, apparently).
> 
> Best,
> Conrad
> 
> On Thu, Aug 31, 2017 at 10:32 AM, Warner Losh <imp at freebsd.org> wrote:
>> Author: imp
>> Date: Thu Aug 31 17:32:14 2017
>> New Revision: 323063
>> URL: https://svnweb.freebsd.org/changeset/base/323063
>> 
>> Log:
>>  boot1.efi: print more info about where boot1.efi is loaded from
>> 
>>  Print the device that boot1.efi was loaded from. Print the path as
>>  well (since it isn't included in DeviceHandle). Move block where we do
>>  this earlier so all the block handle code is now together.
>> 
>>  Sponsored by: Netflix
>> 
>> Modified:
>>  head/sys/boot/efi/boot1/boot1.c
>> 
>> Modified: head/sys/boot/efi/boot1/boot1.c
>> ==============================================================================
>> --- head/sys/boot/efi/boot1/boot1.c     Thu Aug 31 17:32:09 2017        (r323062)
>> +++ head/sys/boot/efi/boot1/boot1.c     Thu Aug 31 17:32:14 2017        (r323063)
>> @@ -344,6 +344,7 @@ efi_main(EFI_HANDLE Ximage, EFI_SYSTEM_TABLE *Xsystab)
>>        EFI_CONSOLE_CONTROL_PROTOCOL *ConsoleControl = NULL;
>>        SIMPLE_TEXT_OUTPUT_INTERFACE *conout = NULL;
>>        UINTN i, max_dim, best_mode, cols, rows, hsize, nhandles;
>> +       CHAR16 *text;
>> 
>>        /* Basic initialization*/
>>        ST = Xsystab;
>> @@ -387,6 +388,27 @@ efi_main(EFI_HANDLE Ximage, EFI_SYSTEM_TABLE *Xsystab)
>>        }
>>        putchar('\n');
>> 
>> +       /* Determine the devpath of our image so we can prefer it. */
>> +       status = BS->HandleProtocol(IH, &LoadedImageGUID, (VOID**)&img);
>> +       imgpath = NULL;
>> +       if (status == EFI_SUCCESS) {
>> +               text = efi_devpath_name(img->FilePath);
>> +               printf("   Load Path: %S\n", text);
>> +               efi_free_devpath_name(text);
>> +
>> +               status = BS->HandleProtocol(img->DeviceHandle, &DevicePathGUID,
>> +                   (void **)&imgpath);
>> +               if (status != EFI_SUCCESS) {
>> +                       DPRINTF("Failed to get image DevicePath (%lu)\n",
>> +                           EFI_ERROR_CODE(status));
>> +               } else {
>> +                       text = efi_devpath_name(imgpath);
>> +                       printf("   Load Device: %S\n", text);
>> +                       efi_free_devpath_name(text);
>> +               }
>> +
>> +       }
>> +
>>        /* Get all the device handles */
>>        hsize = (UINTN)NUM_HANDLES_INIT * sizeof(EFI_HANDLE);
>>        if ((status = BS->AllocatePool(EfiLoaderData, hsize, (void **)&handles))
>> @@ -421,24 +443,6 @@ efi_main(EFI_HANDLE Ximage, EFI_SYSTEM_TABLE *Xsystab)
>>        nhandles = hsize / sizeof(*handles);
>>        printf("   Probing %zu block devices...", nhandles);
>>        DPRINTF("\n");
>> -
>> -       /* Determine the devpath of our image so we can prefer it. */
>> -       status = BS->HandleProtocol(IH, &LoadedImageGUID, (VOID**)&img);
>> -       imgpath = NULL;
>> -       if (status == EFI_SUCCESS) {
>> -               status = BS->HandleProtocol(img->DeviceHandle, &DevicePathGUID,
>> -                   (void **)&imgpath);
>> -               if (status != EFI_SUCCESS)
>> -                       DPRINTF("Failed to get image DevicePath (%lu)\n",
>> -                           EFI_ERROR_CODE(status));
>> -#ifdef EFI_DEBUG
>> -               {
>> -                       CHAR16 *text = efi_devpath_name(imgpath);
>> -                       DPRINTF("boot1 imagepath: %S\n", text);
>> -                       efi_free_devpath_name(text);
>> -               }
>> -#endif
>> -       }
>> 
>>        for (i = 0; i < nhandles; i++)
>>                probe_handle_status(handles[i], imgpath);
>> 
> 



More information about the svn-src-head mailing list