kernel/x86_64: add compatibility source files to the build.
* add x86 versions of fnsave frstor. * add missing declaration for elf32_resolve_symbol(). How-to build a x86_64/x86 bootstrap build: mkdir generated_bootstrap; cd generated_bootstrap ../configure --bootstrap /dir/to/haikuporter/haikuporter /dir/to/haikuports.cross \ /dir/to/haikuports --build-cross-tools x86_64 /dir/to/buildtools --build-cross-tools x86 -j8 --use-gcc-pipe jam -q -sHAIKU_PORTER_EXTRA_OPTIONS="-j8 --sourceforge-mirror=freefr --no-source-packages" @bootstrap-raw Change-Id: I6eae3653c42a53683ae307107fae595c4b8ebcfb
This commit is contained in:
@@ -579,9 +579,6 @@ void x86_write_msr(uint32 registerNumber, uint64 value);
|
||||
void x86_context_switch(struct arch_thread* oldState,
|
||||
struct arch_thread* newState);
|
||||
|
||||
void x86_fnsave(void* fpuState);
|
||||
void x86_frstor(const void* fpuState);
|
||||
|
||||
void x86_fxsave(void* fpuState);
|
||||
void x86_fxrstor(const void* fpuState);
|
||||
|
||||
@@ -592,6 +589,14 @@ void x86_fxsave_swap(void* oldFpuState, const void* newFpuState);
|
||||
#endif
|
||||
|
||||
|
||||
#if !defined(__x86_64__) || defined(_COMPAT_MODE)
|
||||
|
||||
void x86_fnsave(void* fpuState);
|
||||
void x86_frstor(const void* fpuState);
|
||||
|
||||
#endif // !defined(__x86_64__) || defined(_COMPAT_MODE)
|
||||
|
||||
|
||||
static inline void
|
||||
arch_cpu_idle(void)
|
||||
{
|
||||
|
||||
@@ -82,6 +82,11 @@ extern "C" {
|
||||
extern status_t elf_resolve_symbol(struct elf_image_info* image,
|
||||
elf_sym* symbol, struct elf_image_info* sharedImage,
|
||||
elf_addr* _symbolAddress);
|
||||
#ifdef _COMPAT_MODE
|
||||
extern status_t elf32_resolve_symbol(struct elf_image_info* image,
|
||||
elf_sym* symbol, struct elf_image_info* sharedImage,
|
||||
elf_addr* _symbolAddress);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -22,6 +22,12 @@ AddResources kernel_$(TARGET_ARCH) : kernel.rdef ;
|
||||
SetVersionScript kernel_$(TARGET_ARCH) : kernel_versions ;
|
||||
SetVersionScript kernel.so : kernel_versions ;
|
||||
|
||||
local compatSources = ;
|
||||
if $(HAIKU_KERNEL_COMPAT_MODE) = 1 {
|
||||
UsePrivateHeaders [ FDirName kernel compat ] ;
|
||||
compatSources = commpage_compat.cpp elf_compat.cpp ;
|
||||
}
|
||||
|
||||
KernelMergeObject kernel_core.o :
|
||||
boot_item.cpp
|
||||
boot_splash.cpp
|
||||
@@ -72,6 +78,8 @@ KernelMergeObject kernel_core.o :
|
||||
scheduler_tracing.cpp
|
||||
scheduling_analysis.cpp
|
||||
|
||||
# compatibility
|
||||
$(compatSources)
|
||||
: $(TARGET_KERNEL_PIC_CCFLAGS)
|
||||
;
|
||||
|
||||
|
||||
@@ -119,3 +119,25 @@ FUNCTION_END(_stac)
|
||||
FUNCTION(_clac):
|
||||
clac
|
||||
FUNCTION_END(_clac)
|
||||
|
||||
|
||||
#ifdef _COMPAT_MODE
|
||||
|
||||
|
||||
/* void x86_fnsave(void *fpu_state); */
|
||||
FUNCTION(x86_fnsave):
|
||||
movq %rdi, %rax
|
||||
fnsave (%rax)
|
||||
ret
|
||||
FUNCTION_END(x86_fnsave)
|
||||
|
||||
/* void x86_frstor(const void *fpu_state); */
|
||||
FUNCTION(x86_frstor):
|
||||
movq %rdi, %rax
|
||||
frstor (%rax)
|
||||
ret
|
||||
FUNCTION_END(x86_frstor)
|
||||
|
||||
|
||||
#endif // _COMPAT_MODE
|
||||
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
SubDir HAIKU_TOP src system kernel arch x86 ;
|
||||
|
||||
SubDirHdrs [ FDirName $(TARGET_COMMON_DEBUG_OBJECT_DIR_$(TARGET_PACKAGING_ARCH))
|
||||
system kernel ] ;
|
||||
# for syscall_numbers.h
|
||||
SubDirHdrs $(HAIKU_TOP) src add-ons kernel bus_managers ps2 ;
|
||||
SubDirHdrs $(HAIKU_TOP) src add-ons kernel bus_managers acpi acpica include ;
|
||||
SubDirHdrs $(HAIKU_TOP) src add-ons kernel bus_managers acpi acpica include
|
||||
@@ -15,6 +12,10 @@ UsePrivateHeaders shared ;
|
||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) paging ] ;
|
||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) timers ] ;
|
||||
|
||||
ObjectHdrs interrupts.S signals.cpp signals_asm.S : [ FDirName
|
||||
$(TARGET_COMMON_DEBUG_OBJECT_DIR_$(TARGET_PACKAGING_ARCH)) system kernel ] ;
|
||||
# for syscall_numbers.h
|
||||
|
||||
local archSpecificSources ;
|
||||
if $(TARGET_ARCH) = x86_64 {
|
||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) 64 ] ;
|
||||
@@ -28,6 +29,7 @@ if $(TARGET_ARCH) = x86_64 {
|
||||
signals.cpp
|
||||
signals_asm.S
|
||||
syscalls.cpp
|
||||
syscalls_asm.S
|
||||
thread.cpp
|
||||
|
||||
# paging
|
||||
@@ -38,6 +40,17 @@ if $(TARGET_ARCH) = x86_64 {
|
||||
X86PagingStructures64Bit.cpp
|
||||
X86VMTranslationMap64Bit.cpp
|
||||
;
|
||||
|
||||
if $(HAIKU_KERNEL_COMPAT_MODE) = 1 {
|
||||
archSpecificSources +=
|
||||
arch_commpage_compat.cpp
|
||||
arch_elf_compat.cpp
|
||||
entry_compat.S
|
||||
syscalls_compat.cpp
|
||||
signals_compat_asm.S
|
||||
signals_compat.cpp
|
||||
;
|
||||
}
|
||||
} else {
|
||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) 32 ] ;
|
||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) paging 32bit ] ;
|
||||
@@ -119,3 +132,16 @@ Includes [ FGristFiles interrupts.S arch.S signals.cpp signals_asm.S ]
|
||||
: <syscalls!$(TARGET_PACKAGING_ARCH)>syscall_numbers.h ;
|
||||
Includes [ FGristFiles interrupts.S ]
|
||||
: <syscalls!$(TARGET_PACKAGING_ARCH)>syscall_table.h ;
|
||||
|
||||
if $(TARGET_ARCH) = x86_64 && $(HAIKU_KERNEL_COMPAT_MODE) = 1 {
|
||||
ObjectHdrs entry_compat.S syscalls_compat.cpp : [ FDirName
|
||||
$(TARGET_COMMON_DEBUG_OBJECT_DIR_x86) system kernel ] ;
|
||||
# for syscall_numbers.h
|
||||
|
||||
# We need to specify the dependency on the generated syscalls file explicitly.
|
||||
Includes [ FGristFiles entry_compat.S ]
|
||||
: <syscalls!x86>syscall_numbers.h ;
|
||||
Includes [ FGristFiles entry_compat.S syscalls_compat.cpp ]
|
||||
: <syscalls!x86>syscall_table.h ;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,10 @@ UsePrivateHeaders net shared storage ;
|
||||
|
||||
UseHeaders [ FDirName $(SUBDIR) $(DOTDOT) device_manager ] ;
|
||||
|
||||
if $(HAIKU_KERNEL_COMPAT_MODE) = 1 {
|
||||
UsePrivateHeaders [ FDirName kernel compat ] ;
|
||||
}
|
||||
|
||||
KernelMergeObject kernel_fs.o :
|
||||
EntryCache.cpp
|
||||
fd.cpp
|
||||
|
||||
@@ -5,6 +5,9 @@ UsePrivateHeaders shared ;
|
||||
UseHeaders [ FDirName $(SUBDIR) $(DOTDOT) device_manager ] ;
|
||||
UsePrivateHeaders [ FDirName kernel disk_device_manager ] ;
|
||||
UsePrivateHeaders [ FDirName kernel util ] ;
|
||||
if $(HAIKU_KERNEL_COMPAT_MODE) = 1 {
|
||||
UsePrivateHeaders [ FDirName kernel compat ] ;
|
||||
}
|
||||
|
||||
KernelMergeObject kernel_vm.o :
|
||||
PageCacheLocker.cpp
|
||||
|
||||
Reference in New Issue
Block a user