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,
|
void x86_context_switch(struct arch_thread* oldState,
|
||||||
struct arch_thread* newState);
|
struct arch_thread* newState);
|
||||||
|
|
||||||
void x86_fnsave(void* fpuState);
|
|
||||||
void x86_frstor(const void* fpuState);
|
|
||||||
|
|
||||||
void x86_fxsave(void* fpuState);
|
void x86_fxsave(void* fpuState);
|
||||||
void x86_fxrstor(const void* fpuState);
|
void x86_fxrstor(const void* fpuState);
|
||||||
|
|
||||||
@@ -592,6 +589,14 @@ void x86_fxsave_swap(void* oldFpuState, const void* newFpuState);
|
|||||||
#endif
|
#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
|
static inline void
|
||||||
arch_cpu_idle(void)
|
arch_cpu_idle(void)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -82,6 +82,11 @@ extern "C" {
|
|||||||
extern status_t elf_resolve_symbol(struct elf_image_info* image,
|
extern status_t elf_resolve_symbol(struct elf_image_info* image,
|
||||||
elf_sym* symbol, struct elf_image_info* sharedImage,
|
elf_sym* symbol, struct elf_image_info* sharedImage,
|
||||||
elf_addr* _symbolAddress);
|
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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,12 @@ AddResources kernel_$(TARGET_ARCH) : kernel.rdef ;
|
|||||||
SetVersionScript kernel_$(TARGET_ARCH) : kernel_versions ;
|
SetVersionScript kernel_$(TARGET_ARCH) : kernel_versions ;
|
||||||
SetVersionScript kernel.so : 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 :
|
KernelMergeObject kernel_core.o :
|
||||||
boot_item.cpp
|
boot_item.cpp
|
||||||
boot_splash.cpp
|
boot_splash.cpp
|
||||||
@@ -72,6 +78,8 @@ KernelMergeObject kernel_core.o :
|
|||||||
scheduler_tracing.cpp
|
scheduler_tracing.cpp
|
||||||
scheduling_analysis.cpp
|
scheduling_analysis.cpp
|
||||||
|
|
||||||
|
# compatibility
|
||||||
|
$(compatSources)
|
||||||
: $(TARGET_KERNEL_PIC_CCFLAGS)
|
: $(TARGET_KERNEL_PIC_CCFLAGS)
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
@@ -119,3 +119,25 @@ FUNCTION_END(_stac)
|
|||||||
FUNCTION(_clac):
|
FUNCTION(_clac):
|
||||||
clac
|
clac
|
||||||
FUNCTION_END(_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 ;
|
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 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 ;
|
||||||
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) paging ] ;
|
||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) timers ] ;
|
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 ;
|
local archSpecificSources ;
|
||||||
if $(TARGET_ARCH) = x86_64 {
|
if $(TARGET_ARCH) = x86_64 {
|
||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) 64 ] ;
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) 64 ] ;
|
||||||
@@ -28,6 +29,7 @@ if $(TARGET_ARCH) = x86_64 {
|
|||||||
signals.cpp
|
signals.cpp
|
||||||
signals_asm.S
|
signals_asm.S
|
||||||
syscalls.cpp
|
syscalls.cpp
|
||||||
|
syscalls_asm.S
|
||||||
thread.cpp
|
thread.cpp
|
||||||
|
|
||||||
# paging
|
# paging
|
||||||
@@ -38,6 +40,17 @@ if $(TARGET_ARCH) = x86_64 {
|
|||||||
X86PagingStructures64Bit.cpp
|
X86PagingStructures64Bit.cpp
|
||||||
X86VMTranslationMap64Bit.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 {
|
} else {
|
||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) 32 ] ;
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) 32 ] ;
|
||||||
SEARCH_SOURCE += [ FDirName $(SUBDIR) paging 32bit ] ;
|
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 ;
|
: <syscalls!$(TARGET_PACKAGING_ARCH)>syscall_numbers.h ;
|
||||||
Includes [ FGristFiles interrupts.S ]
|
Includes [ FGristFiles interrupts.S ]
|
||||||
: <syscalls!$(TARGET_PACKAGING_ARCH)>syscall_table.h ;
|
: <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 ] ;
|
UseHeaders [ FDirName $(SUBDIR) $(DOTDOT) device_manager ] ;
|
||||||
|
|
||||||
|
if $(HAIKU_KERNEL_COMPAT_MODE) = 1 {
|
||||||
|
UsePrivateHeaders [ FDirName kernel compat ] ;
|
||||||
|
}
|
||||||
|
|
||||||
KernelMergeObject kernel_fs.o :
|
KernelMergeObject kernel_fs.o :
|
||||||
EntryCache.cpp
|
EntryCache.cpp
|
||||||
fd.cpp
|
fd.cpp
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ UsePrivateHeaders shared ;
|
|||||||
UseHeaders [ FDirName $(SUBDIR) $(DOTDOT) device_manager ] ;
|
UseHeaders [ FDirName $(SUBDIR) $(DOTDOT) device_manager ] ;
|
||||||
UsePrivateHeaders [ FDirName kernel disk_device_manager ] ;
|
UsePrivateHeaders [ FDirName kernel disk_device_manager ] ;
|
||||||
UsePrivateHeaders [ FDirName kernel util ] ;
|
UsePrivateHeaders [ FDirName kernel util ] ;
|
||||||
|
if $(HAIKU_KERNEL_COMPAT_MODE) = 1 {
|
||||||
|
UsePrivateHeaders [ FDirName kernel compat ] ;
|
||||||
|
}
|
||||||
|
|
||||||
KernelMergeObject kernel_vm.o :
|
KernelMergeObject kernel_vm.o :
|
||||||
PageCacheLocker.cpp
|
PageCacheLocker.cpp
|
||||||
|
|||||||
Reference in New Issue
Block a user