}
DEFINE_EFI_MAIN_FUNCTION(run, "systemd-boot", /*wait_for_debugger=*/false);
+
+/* Fedora has a heavily patched gnu-efi that supports elf constructors. It calls into _entry instead. */
+EFI_STATUS _entry(EFI_HANDLE image, EFI_SYSTEM_TABLE *system_table) {
+ return efi_main(image, system_table);
+}
return 0;
}
-_used_ _weak_ void *memcpy(void * restrict dest, const void * restrict src, size_t n) {
+_used_ void *memcpy(void * restrict dest, const void * restrict src, size_t n) {
if (!dest || !src || n == 0)
return dest;
return dest;
}
-_used_ _weak_ void *memset(void *p, int c, size_t n) {
+_used_ void *memset(void *p, int c, size_t n) {
if (!p || n == 0)
return p;
efi_ldflags += ['-Wl,--no-wchar-size-warning']
endif
-if run_command('grep', '-q', '__CTOR_LIST__', efi_lds, check: false).returncode() == 0
- # fedora has a patched gnu-efi that adds support for ELF constructors.
- # If ld is called by gcc something about these symbols breaks, resulting
- # in sd-boot freezing when gnu-efi runs the constructors. Force defining
- # them seems to work around this.
- efi_ldflags += [
- '-Wl,--defsym=_init_array=0',
- '-Wl,--defsym=_init_array_end=0',
- '-Wl,--defsym=_fini_array=0',
- '-Wl,--defsym=_fini_array_end=0',
- '-Wl,--defsym=__CTOR_LIST__=0',
- '-Wl,--defsym=__CTOR_END__=0',
- '-Wl,--defsym=__DTOR_LIST__=0',
- '-Wl,--defsym=__DTOR_END__=0',
- ]
-endif
-
if cc.get_id() == 'clang' and cc.version().split('.')[0].to_int() <= 10
# clang <= 10 doesn't pass -T to the linker and then even complains about it being unused
efi_ldflags += ['-Wl,-T,' + efi_lds, '-Wno-unused-command-line-argument']
efi_cflags,
efi_ldflags,
'@INPUT@',
- '-lefi',
'-lgnuefi',
'-lgcc'],
install : tuple[2],
out_deallocate:
for (size_t i = 0; i < ELEMENTSOF(sb_vars); i++)
- FreePool(sb_vars[i].buffer);
+ free(sb_vars[i].buffer);
return err;
}
}
DEFINE_EFI_MAIN_FUNCTION(run, "systemd-stub", /*wait_for_debugger=*/false);
+
+/* See comment in boot.c. */
+EFI_STATUS _entry(EFI_HANDLE image, EFI_SYSTEM_TABLE *system_table) {
+ return efi_main(image, system_table);
+}
#endif
#define DEFINE_EFI_MAIN_FUNCTION(func, identity, wait_for_debugger) \
+ EFI_SYSTEM_TABLE *ST; \
+ EFI_BOOT_SERVICES *BS; \
+ EFI_RUNTIME_SERVICES *RT; \
EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *system_table) { \
- InitializeLib(image, system_table); \
+ ST = system_table; \
+ BS = system_table->BootServices; \
+ RT = system_table->RuntimeServices; \
notify_debugger((identity), (wait_for_debugger)); \
EFI_STATUS err = func(image); \
log_wait(); \