arm: added some missing arch bits and changed asm section for arm compat.
This commit is contained in:
@@ -11,6 +11,8 @@ if $(TARGET_ARCH) = x86 {
|
|||||||
PPC_ONLY = "" ;
|
PPC_ONLY = "" ;
|
||||||
} else if $(TARGET_ARCH) = m68k {
|
} else if $(TARGET_ARCH) = m68k {
|
||||||
M68K_ONLY = "" ;
|
M68K_ONLY = "" ;
|
||||||
|
} else if $(TARGET_ARCH) = arm {
|
||||||
|
ARM_ONLY = "" ;
|
||||||
}
|
}
|
||||||
|
|
||||||
local GPL_ONLY = ;
|
local GPL_ONLY = ;
|
||||||
|
|||||||
@@ -10,7 +10,12 @@
|
|||||||
|
|
||||||
#warning ARM: fix system_time()
|
#warning ARM: fix system_time()
|
||||||
|
|
||||||
|
struct arm_real_time_data {
|
||||||
|
vint64 system_time_offset;
|
||||||
|
};
|
||||||
|
|
||||||
struct arch_real_time_data {
|
struct arch_real_time_data {
|
||||||
|
struct arm_real_time_data data[2];
|
||||||
vint32 system_time_conversion_factor;
|
vint32 system_time_conversion_factor;
|
||||||
vint32 version;
|
vint32 version;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
SubDir HAIKU_TOP src system glue arch arm ;
|
||||||
|
|
||||||
|
KernelObjects
|
||||||
|
crti.S
|
||||||
|
crtn.S
|
||||||
|
;
|
||||||
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2005, Axel Dörfler, axeld@pinc-software.de.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** This file contains the first part of the ".init" and ".fini" sections in
|
||||||
|
* the ELF executable.
|
||||||
|
* The functions defined here will be called during initialization/termination
|
||||||
|
* of the loaded executable/library. The ".init" and ".fini" sections are
|
||||||
|
* stacked together like this:
|
||||||
|
*
|
||||||
|
* crti.S entry point
|
||||||
|
* call to _init_before/_term_before
|
||||||
|
* crtbegin.S GCC specific: constructors/destructors are called, ...
|
||||||
|
* crtend.S
|
||||||
|
* crtn.S call to _init_after/_term_after
|
||||||
|
* exit
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define FUNCTION(x) .global x; .type x,%function; x
|
||||||
|
|
||||||
|
.section .init
|
||||||
|
FUNCTION(_init):
|
||||||
|
bl __haiku_init_before
|
||||||
|
// crtbegin.o stuff comes here
|
||||||
|
|
||||||
|
.section .fini
|
||||||
|
FUNCTION(_fini):
|
||||||
|
bl __haiku_term_before
|
||||||
|
// crtbegin.o stuff comes here
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2005, Axel Dörfler, axeld@pinc-software.de.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** This file contains the final part of the ".init" and ".fini" sections in
|
||||||
|
* the ELF executable. It is tightly connected to crti.S.
|
||||||
|
* Have a look at crti.S to find a description of what happens here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.section .init
|
||||||
|
// the image ID and program args are still on the stack
|
||||||
|
bl __haiku_init_after
|
||||||
|
|
||||||
|
|
||||||
|
.section .fini
|
||||||
|
// the image ID and program args are still on the stack
|
||||||
|
bl __haiku_term_after
|
||||||
|
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
SubDir HAIKU_TOP src system libroot os arch arm ;
|
||||||
|
|
||||||
|
UsePrivateKernelHeaders ;
|
||||||
|
UsePrivateSystemHeaders ;
|
||||||
|
|
||||||
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) $(DOTDOT) generic ] ;
|
||||||
|
|
||||||
|
MergeObject os_arch_$(TARGET_ARCH).o :
|
||||||
|
atomic.S
|
||||||
|
byteorder.S
|
||||||
|
system_time.c
|
||||||
|
thread.c
|
||||||
|
time.c
|
||||||
|
tls.c
|
||||||
|
|
||||||
|
generic_system_time_nsecs.cpp
|
||||||
|
;
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
** Copyright 2001, Travis Geiselbrecht. All rights reserved.
|
||||||
|
** Distributed under the terms of the NewOS License.
|
||||||
|
*/
|
||||||
|
#define SYSCALL0(name, n) \
|
||||||
|
.globl name; \
|
||||||
|
.type name,%function; \
|
||||||
|
.align 4; \
|
||||||
|
name:
|
||||||
|
|
||||||
|
#define SYSCALL1(name, n) \
|
||||||
|
.globl name; \
|
||||||
|
.type name,%function; \
|
||||||
|
.align 4; \
|
||||||
|
name:
|
||||||
|
|
||||||
|
#define SYSCALL2(name, n) \
|
||||||
|
.globl name; \
|
||||||
|
.type name,%function; \
|
||||||
|
.align 4; \
|
||||||
|
name:
|
||||||
|
|
||||||
|
#define SYSCALL3(name, n) \
|
||||||
|
.globl name; \
|
||||||
|
.type name,%function; \
|
||||||
|
.align 4; \
|
||||||
|
name:
|
||||||
|
|
||||||
|
#define SYSCALL4(name, n) \
|
||||||
|
.globl name; \
|
||||||
|
.type name,%function; \
|
||||||
|
.align 4; \
|
||||||
|
name:
|
||||||
|
|
||||||
|
#define SYSCALL5(name, n) \
|
||||||
|
.globl name; \
|
||||||
|
.type name,%function; \
|
||||||
|
.align 4; \
|
||||||
|
name:
|
||||||
|
|
||||||
|
#define SYSCALL6(name, n) \
|
||||||
|
.globl name; \
|
||||||
|
.type name,%function; \
|
||||||
|
.align 4; \
|
||||||
|
name:
|
||||||
|
|
||||||
|
#define SYSCALL7(name, n) \
|
||||||
|
.globl name; \
|
||||||
|
.type name,%function; \
|
||||||
|
.align 4; \
|
||||||
|
name:
|
||||||
|
|
||||||
|
#define SYSCALL8(name, n) \
|
||||||
|
.globl name; \
|
||||||
|
.type name,%function; \
|
||||||
|
.align 4; \
|
||||||
|
name:
|
||||||
|
|
||||||
|
#define SYSCALL9(name, n) \
|
||||||
|
.globl name; \
|
||||||
|
.type name,%function; \
|
||||||
|
.align 4; \
|
||||||
|
name:
|
||||||
|
|
||||||
|
#define SYSCALL10(name, n) \
|
||||||
|
.globl name; \
|
||||||
|
.type name,%function; \
|
||||||
|
.align 4; \
|
||||||
|
name:
|
||||||
|
|
||||||
|
#define SYSCALL11(name, n) \
|
||||||
|
.globl name; \
|
||||||
|
.type name,%function; \
|
||||||
|
.align 4; \
|
||||||
|
name:
|
||||||
|
|
||||||
|
#define SYSCALL12(name, n) \
|
||||||
|
.globl name; \
|
||||||
|
.type name,%function; \
|
||||||
|
.align 4; \
|
||||||
|
name:
|
||||||
|
|
||||||
|
#define SYSCALL13(name, n) \
|
||||||
|
.globl name; \
|
||||||
|
.type name,%function; \
|
||||||
|
.align 4; \
|
||||||
|
name:
|
||||||
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#include <OS.h>
|
||||||
|
#include "syscalls.h"
|
||||||
|
|
||||||
|
|
||||||
|
thread_id
|
||||||
|
find_thread(const char *name)
|
||||||
|
{
|
||||||
|
return _kern_find_thread(name);
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2006, Ingo Weinhold <[email protected]>.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <OS.h>
|
||||||
|
|
||||||
|
#include <arch_cpu.h>
|
||||||
|
#include <libroot_private.h>
|
||||||
|
#include <real_time_data.h>
|
||||||
|
|
||||||
|
|
||||||
|
static struct arch_real_time_data *sRealTimeData;
|
||||||
|
|
||||||
|
void
|
||||||
|
__arch_init_time(struct real_time_data *data, bool setDefaults)
|
||||||
|
{
|
||||||
|
sRealTimeData = &data->arch_data;
|
||||||
|
|
||||||
|
if (setDefaults) {
|
||||||
|
sRealTimeData->data[0].system_time_offset = 0;
|
||||||
|
sRealTimeData->system_time_conversion_factor = 1000000000LL;
|
||||||
|
sRealTimeData->version = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
__arm_setup_system_time(&sRealTimeData->system_time_conversion_factor);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bigtime_t
|
||||||
|
__arch_get_system_time_offset(struct real_time_data *data)
|
||||||
|
{
|
||||||
|
int32 version;
|
||||||
|
bigtime_t offset;
|
||||||
|
do {
|
||||||
|
version = sRealTimeData->version;
|
||||||
|
offset = sRealTimeData->data[version % 2].system_time_offset;
|
||||||
|
} while (version != sRealTimeData->version);
|
||||||
|
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
** Copyright 2003, Axel Dörfler, [email protected]. All rights reserved.
|
||||||
|
** Distributed under the terms of the OpenBeOS License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// ToDo: this is a dummy implementation - I've not yet gained enough knowledge
|
||||||
|
// to decide how this should be done, so it's just broken now (okay for single
|
||||||
|
// threaded apps, though).
|
||||||
|
|
||||||
|
// we don't want to have the inline assembly included here
|
||||||
|
#ifndef _NO_INLINE_ASM
|
||||||
|
# define _NO_INLINE_ASM 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "support/TLS.h"
|
||||||
|
#include "tls.h"
|
||||||
|
|
||||||
|
|
||||||
|
static int32 gNextSlot = TLS_FIRST_FREE_SLOT;
|
||||||
|
static void *gSlots[TLS_MAX_KEYS];
|
||||||
|
|
||||||
|
|
||||||
|
int32
|
||||||
|
tls_allocate(void)
|
||||||
|
{
|
||||||
|
int32 next = atomic_add(&gNextSlot, 1);
|
||||||
|
if (next >= TLS_MAX_KEYS)
|
||||||
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void *
|
||||||
|
tls_get(int32 index)
|
||||||
|
{
|
||||||
|
return gSlots[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void **
|
||||||
|
tls_address(int32 index)
|
||||||
|
{
|
||||||
|
return &gSlots[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
tls_set(int32 index, void *value)
|
||||||
|
{
|
||||||
|
gSlots[index] = value;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -22,6 +22,9 @@
|
|||||||
#ifdef ARCH_ppc
|
#ifdef ARCH_ppc
|
||||||
# include "arch/ppc/syscalls.inc"
|
# include "arch/ppc/syscalls.inc"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef ARCH_arm
|
||||||
|
# include "arch/arm/syscalls.inc"
|
||||||
|
#endif
|
||||||
#ifdef ARCH_m68k
|
#ifdef ARCH_m68k
|
||||||
# include "arch/m68k/syscalls.inc"
|
# include "arch/m68k/syscalls.inc"
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -247,7 +247,7 @@
|
|||||||
__attribute__ ((unused, section (".gnu.warning." #symbol __sec_comment))) \
|
__attribute__ ((unused, section (".gnu.warning." #symbol __sec_comment))) \
|
||||||
= msg;
|
= msg;
|
||||||
# define libc_freeres_ptr(decl) \
|
# define libc_freeres_ptr(decl) \
|
||||||
__make_section_unallocated ("__libc_freeres_ptrs, \"aw\", @nobits") \
|
__make_section_unallocated ("__libc_freeres_ptrs, \"aw\", %nobits") \
|
||||||
decl __attribute__ ((section ("__libc_freeres_ptrs" __sec_comment)))
|
decl __attribute__ ((section ("__libc_freeres_ptrs" __sec_comment)))
|
||||||
# define __libc_freeres_fn_section \
|
# define __libc_freeres_fn_section \
|
||||||
__attribute__ ((section ("__libc_freeres_fn")))
|
__attribute__ ((section ("__libc_freeres_fn")))
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
SubDir HAIKU_TOP src system libroot posix string arch arm ;
|
||||||
|
|
||||||
|
UsePrivateSystemHeaders ;
|
||||||
|
|
||||||
|
SEARCH_SOURCE += [ FDirName $(SUBDIR) $(DOTDOT) generic ] ;
|
||||||
|
|
||||||
|
MergeObject posix_string_arch_$(TARGET_ARCH).o :
|
||||||
|
memcpy.c
|
||||||
|
memset.c
|
||||||
|
;
|
||||||
Reference in New Issue
Block a user