mirror of
https://github.com/EnderIce2/Fennix.git
synced 2025-07-16 17:51:42 +00:00
refactor: Fix build on i386
Some checks failed
CodeQL Advanced / Analyze (${{ matrix.language }}) (manual, c-cpp) (push) Has been cancelled
Deploy Documentation / Deploy Documentation to GitHub Pages (push) Has been cancelled
Build OS / Build Cross-Compiler & Toolchain (push) Has been cancelled
Build OS / Build amd64 (push) Has been cancelled
Build OS / Build i386 (push) Has been cancelled
Build OS / Build aarch64 (push) Has been cancelled
Some checks failed
CodeQL Advanced / Analyze (${{ matrix.language }}) (manual, c-cpp) (push) Has been cancelled
Deploy Documentation / Deploy Documentation to GitHub Pages (push) Has been cancelled
Build OS / Build Cross-Compiler & Toolchain (push) Has been cancelled
Build OS / Build amd64 (push) Has been cancelled
Build OS / Build i386 (push) Has been cancelled
Build OS / Build aarch64 (push) Has been cancelled
Signed-off-by: EnderIce2 <enderice2@protonmail.com>
This commit is contained in:
@@ -14,7 +14,7 @@ OBJ = ${S_SOURCES:.S=.o} ${C_SOURCES:.c=.o} ${CXX_SOURCES:.cpp=.o}
|
||||
CFLAGS := -fvisibility=hidden -fPIC -I$(WORKSPACE_DIR)/out/include -DLIBC_GIT_COMMIT='"$(shell git rev-parse HEAD)"'
|
||||
|
||||
ifeq ($(DEBUG), 1)
|
||||
CFLAGS += -DDEBUG -ggdb3 -O0 -fdiagnostics-color=always -fverbose-asm
|
||||
CFLAGS += -DDEBUG -ggdb3 -O0 -fdiagnostics-color=always
|
||||
endif
|
||||
|
||||
build: $(OBJECT_NAME)
|
||||
|
@@ -124,6 +124,7 @@ ElfInfo *SearchLib(char *Path)
|
||||
|
||||
__attribute__((naked, used, no_stack_protector)) void _dl_runtime_resolve()
|
||||
{
|
||||
#if defined(__amd64__)
|
||||
__asm__(
|
||||
"pop %r11\n" /* Pop lazy resolve arguments */
|
||||
"pop %r10\n"
|
||||
@@ -148,6 +149,11 @@ __attribute__((naked, used, no_stack_protector)) void _dl_runtime_resolve()
|
||||
"pop %rdi\n"
|
||||
|
||||
"jmp *%r11\n"); /* Jump to the return value */
|
||||
#elif defined(__i386__)
|
||||
#warning "i386 _dl_runtime_resolve not implemented"
|
||||
#else
|
||||
#error "Unsupported architecture"
|
||||
#endif
|
||||
}
|
||||
|
||||
int RelocateHelper(ElfInfo *Info, Elf_Rela *Rela, short IsRel, void **Relocated);
|
||||
@@ -561,7 +567,7 @@ int CheckElfEhdr(Elf_Ehdr *ehdr, char *Path)
|
||||
if (ehdr->e_ident[EI_CLASS] != elfClass)
|
||||
{
|
||||
printf("dl: %s is not a %s-bit ELF file\n",
|
||||
Path, __LP64__ ? "64" : "32");
|
||||
Path, elfClass == ELFCLASS64 ? "64" : "32");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -804,6 +810,7 @@ int RelocateHelper(ElfInfo *Info, Elf_Rela *Rela, short IsRel, void **Relocated)
|
||||
addAddend = 1;
|
||||
break;
|
||||
}
|
||||
#if __LP64__
|
||||
case R_DTPMOD64:
|
||||
{
|
||||
printf("dl: i don't know what to do with DTPMOD64\n");
|
||||
@@ -822,6 +829,7 @@ int RelocateHelper(ElfInfo *Info, Elf_Rela *Rela, short IsRel, void **Relocated)
|
||||
reloc = symAddress + Rela->r_addend;
|
||||
break;
|
||||
}
|
||||
#endif // __LP64__
|
||||
default:
|
||||
{
|
||||
printf("dl: Unsupported relocation type %d\n", relType);
|
||||
|
@@ -99,6 +99,7 @@ void __fini_print_buffer();
|
||||
|
||||
__attribute__((naked, used, no_stack_protector)) void _start()
|
||||
{
|
||||
#if defined(__amd64__)
|
||||
__asm__(
|
||||
"xorq %rbp, %rbp\n" /* Clear rbp */
|
||||
|
||||
@@ -125,14 +126,21 @@ __attribute__((naked, used, no_stack_protector)) void _start()
|
||||
"call main\n" /* Call _dl_main */
|
||||
"movl %eax, %edi\n" /* Move return value to edi */
|
||||
"call _exit\n"); /* Call _exit */
|
||||
#elif defined(__i386__)
|
||||
#warning "i386 _start not implemented"
|
||||
#else
|
||||
#error "Unsupported architecture"
|
||||
#endif
|
||||
}
|
||||
|
||||
__attribute__((no_stack_protector)) _Noreturn void _exit(int status)
|
||||
{
|
||||
__fini_print_buffer();
|
||||
call_exit(status);
|
||||
/* At this point, the program *SHOULD* have exited. */
|
||||
/* At this point, the program *SHOULD* have exited. */
|
||||
#if defined(__amd64__) || defined(__i386__)
|
||||
__asm__("ud2\n");
|
||||
#endif
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user