mirror of
https://github.com/darlinghq/cctools-port.git
synced 2024-11-26 21:50:26 +00:00
* linux ppc/ppc64 & arm/arm64/aarch64 port
(compiles now - everything else is *untested*) other changes: * rename 'machochecker' to 'machocheck' * get rid of duplicate $CFLAGS * fix a typo in the ios toolchain README * package.sh: remove the autom4te.cache directory
This commit is contained in:
parent
0c32be78e9
commit
42109667d4
20
README.md
20
README.md
@ -5,14 +5,18 @@ Originally ported by [cjacker](http://ios-toolchain-based-on-clang-for-linux.goo
|
||||
|
||||
## SUPPORTED HOSTS ##
|
||||
|
||||
Linux
|
||||
FreeBSD
|
||||
NetBSD
|
||||
OpenBSD
|
||||
DragonFlyBSD
|
||||
Windows (Cygwin)
|
||||
Mac OS X
|
||||
iOS
|
||||
** SUPPORTED OPERATING SYSTEMS: **
|
||||
|
||||
Linux, FreeBSD, NetBSD, OpenBSD, DragonFlyBSD,
|
||||
Windows (Cygwin), Mac OS X and iOS
|
||||
|
||||
** SUPPORTED HOST ARCHITECTURES: **
|
||||
|
||||
x86, x86_64
|
||||
|
||||
Untested, but compiles:
|
||||
|
||||
arm, aarch64, ppc, ppc64
|
||||
|
||||
## SUPPORTED TARGETS ##
|
||||
|
||||
|
@ -3,7 +3,7 @@ libexec_PROGRAMS = i386-as
|
||||
i386_as_LDADD = \
|
||||
$(top_srcdir)/libstuff/libstuff.la
|
||||
|
||||
i386_as_CFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/foreign -I$(top_srcdir)/libstuff -I$(top_srcdir)/as $(WARNINGS) $(LTO_DEF) -DNeXT_MOD -DASLIBEXECDIR="\"$(ASLIBEXECDIR)/\"" -D__DARWIN_UNIX03 -DI386 -Di486 -Di586 -Di686 $(ENDIAN_FLAG)
|
||||
i386_as_CFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/foreign -I$(top_srcdir)/libstuff -I$(top_srcdir)/as $(WARNINGS) $(LTO_DEF) -DNeXT_MOD -DASLIBEXECDIR="\"$(ASLIBEXECDIR)/\"" -D__DARWIN_UNIX03 -DI386 -Di486 -Di586 -Di686 -UPPC $(ENDIAN_FLAG)
|
||||
|
||||
i386_as_SOURCES = ../app.c ../as.c ../atof-generic.c ../atof-ieee.c ../expr.c ../fixes.c ../flonum-const.c \
|
||||
../flonum-copy.c ../flonum-mult.c ../frags.c ../hash.c ../hex-value.c ../input-file.c \
|
||||
|
@ -75,11 +75,17 @@
|
||||
#define RELOC_PAIR SPARC_RELOC_PAIR
|
||||
#endif
|
||||
#if defined(M68K) || defined(I386)
|
||||
#undef RELOC_SECTDIFF /* cctools-port: need to undef these to avoid warnings */
|
||||
#undef RELOC_LOCAL_SECTDIFF
|
||||
#undef RELOC_PAIR
|
||||
#define RELOC_SECTDIFF GENERIC_RELOC_SECTDIFF
|
||||
#define RELOC_LOCAL_SECTDIFF GENERIC_RELOC_LOCAL_SECTDIFF
|
||||
#define RELOC_PAIR GENERIC_RELOC_PAIR
|
||||
#endif
|
||||
#ifdef ARM
|
||||
#undef RELOC_SECTDIFF /* cctools-port: need to undef these to avoid warnings */
|
||||
#undef RELOC_LOCAL_SECTDIFF
|
||||
#undef RELOC_PAIR
|
||||
#define RELOC_SECTDIFF ARM_RELOC_SECTDIFF
|
||||
#define RELOC_LOCAL_SECTDIFF ARM_RELOC_SECTDIFF
|
||||
#define RELOC_PAIR ARM_RELOC_PAIR
|
||||
|
@ -93,7 +93,7 @@ case "`$CC --version`" in
|
||||
WARNINGS="$WARNINGS -Wno-unused-but-set-variable -Wno-deprecated -Wno-deprecated-declarations"
|
||||
WARNINGS="$WARNINGS -Wno-char-subscripts -Wno-strict-aliasing"
|
||||
OBJCWARNINGS="-Wall"
|
||||
CFLAGS="$CFLAGS -std=gnu99 $CFLAGS -D__private_extern__= "
|
||||
CFLAGS="$CFLAGS -std=gnu99 -D__private_extern__="
|
||||
CXXFLAGS="$CXXFLAGS -D__private_extern__="
|
||||
;;
|
||||
esac
|
||||
@ -112,6 +112,21 @@ case "`$CXX --version`" in
|
||||
;;
|
||||
esac
|
||||
|
||||
case $target_cpu in
|
||||
powerpc)
|
||||
EXTRAFLAGS="$EXTRAFLAGS -D__ppc__"
|
||||
;;
|
||||
powerpc64*)
|
||||
EXTRAFLAGS="$EXTRAFLAGS -D__ppc__ -D__ppc64__"
|
||||
;;
|
||||
arm64*|aarch64)
|
||||
EXTRAFLAGS="$EXTRAFLAGS -D__arm64__"
|
||||
;;
|
||||
arm*)
|
||||
EXTRAFLAGS="$EXTRAFLAGS -D__arm__"
|
||||
;;
|
||||
esac
|
||||
|
||||
if test "x$EXTRAFLAGS" != "x"; then
|
||||
CFLAGS="$CFLAGS $EXTRAFLAGS"
|
||||
OBJCFLAGS="$OBJCFLAGS $EXTRAFLAGS"
|
||||
@ -162,13 +177,14 @@ fi
|
||||
|
||||
AC_CHECK_HEADERS([uuid/uuid.h], [], [AC_MSG_ERROR([*** uuid.h not found, please install uuid dev packages according to your system])])
|
||||
|
||||
|
||||
#for libstuff emulated.c
|
||||
case $target_cpu in
|
||||
powerpc)
|
||||
AC_DEFINE(EMULATED_HOST_CPU_TYPE, 18, [Emulated CPU type])
|
||||
AC_DEFINE(EMULATED_HOST_CPU_SUBTYPE, 100, [Emulated CPU subtype])
|
||||
;;
|
||||
powerpc64)
|
||||
powerpc64*)
|
||||
AC_DEFINE(EMULATED_HOST_CPU_TYPE, 16777234, [Emulated CPU type])
|
||||
AC_DEFINE(EMULATED_HOST_CPU_SUBTYPE, 0, [Emulated CPU subtype])
|
||||
;;
|
||||
@ -180,7 +196,7 @@ case $target_cpu in
|
||||
AC_DEFINE(EMULATED_HOST_CPU_TYPE, 16777223, [Emulated CPU type])
|
||||
AC_DEFINE(EMULATED_HOST_CPU_SUBTYPE, 3, [Emulated CPU subtype])
|
||||
;;
|
||||
arm64*)
|
||||
arm64*|aarch64)
|
||||
AC_DEFINE(EMULATED_HOST_CPU_TYPE, 16777228, [Emulated CPU type])
|
||||
AC_DEFINE(EMULATED_HOST_CPU_SUBTYPE, 0, [Emulated CPU subtype])
|
||||
;;
|
||||
@ -203,7 +219,7 @@ AC_SUBST([ASLIBEXECDIR], ['${libexecdir}/as'])
|
||||
|
||||
# set PROGRAM PREFIX
|
||||
if test "$target_alias"; then
|
||||
AC_SUBST([PROGRAM_PREFIX], ['${target_alias}-'])
|
||||
AC_SUBST([PROGRAM_PREFIX], ['${target_alias}-'])
|
||||
fi
|
||||
|
||||
AC_CHECK_LIB([dl],[dlopen],[DL_LIB=-ldl])
|
||||
@ -213,8 +229,8 @@ AC_CHECK_LIB([pthread],[pthread_create],[PTHREAD_FLAGS=-pthread])
|
||||
AC_SUBST(PTHREAD_FLAGS)
|
||||
|
||||
if test "x$isdarwin" = "xno"; then
|
||||
AC_CHECK_LIB([uuid],[uuid_generate_random],[UUID_LIB=-luuid],[exit 1])
|
||||
AC_SUBST(UUID_LIB)
|
||||
AC_CHECK_LIB([uuid],[uuid_generate_random],[UUID_LIB=-luuid],[exit 1])
|
||||
AC_SUBST(UUID_LIB)
|
||||
fi
|
||||
|
||||
AC_CHECK_LIB([execinfo],[backtrace],[DL_LIB=-lexecinfo])
|
||||
@ -238,7 +254,7 @@ AC_SUBST(CXXABI_LIB)
|
||||
|
||||
ORIGLDFLAGS=$LDFLAGS
|
||||
LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/local/lib,--enable-new-dtags"
|
||||
AC_MSG_CHECKING([if -Wl,-rpath,<path>,--enable-new-dtags is supported])
|
||||
AC_MSG_CHECKING([if -Wl,-rptah,<path>,--enable-new-dtags is supported])
|
||||
AC_LINK_IFELSE(
|
||||
[AC_LANG_SOURCE([[int main(){}]])],
|
||||
[rpathlink=yes
|
||||
|
1
cctools/include/foreign/arm
Symbolic link
1
cctools/include/foreign/arm
Symbolic link
@ -0,0 +1 @@
|
||||
i386/
|
@ -82,7 +82,8 @@ __inline static
|
||||
int32_t OSAtomicDecrement32Barrier( volatile int32_t *__theValue )
|
||||
{ return OSAtomicAdd32Barrier( -1, __theValue); }
|
||||
|
||||
#if defined(__ppc64__) || defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__arm64__)
|
||||
/* cctools-port: added defined(__ppc__) || */
|
||||
#if defined(__ppc__) || defined(__ppc64__) || defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__arm64__)
|
||||
|
||||
int64_t OSAtomicAdd64( int64_t __theAmount, volatile int64_t *__theValue );
|
||||
int64_t OSAtomicAdd64Barrier( int64_t __theAmount, volatile int64_t *__theValue );
|
||||
@ -101,7 +102,7 @@ __inline static
|
||||
int64_t OSAtomicDecrement64Barrier( volatile int64_t *__theValue )
|
||||
{ return OSAtomicAdd64Barrier( -1, __theValue); }
|
||||
|
||||
#endif /* defined(__ppc64__) || defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__arm64__) */
|
||||
#endif /* defined(__ppc__) || defined(__ppc64__) || defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__arm64__) */
|
||||
|
||||
|
||||
/* Boolean functions (and, or, xor.) These come in four versions for each operation:
|
||||
|
130
cctools/include/foreign/libkern/arm/OSByteOrder.h
Normal file
130
cctools/include/foreign/libkern/arm/OSByteOrder.h
Normal file
@ -0,0 +1,130 @@
|
||||
#ifndef _OS_OSBYTEORDERARM_H
|
||||
#define _OS_OSBYTEORDERARM_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifndef OS_INLINE
|
||||
#define OS_INLINE static __inline__
|
||||
#endif
|
||||
|
||||
OS_INLINE
|
||||
uint16_t _OSSwapInt16(uint16_t data)
|
||||
{
|
||||
return __builtin_bswap16(data);
|
||||
}
|
||||
|
||||
OS_INLINE
|
||||
uint32_t _OSSwapInt32(uint32_t data)
|
||||
{
|
||||
return __builtin_bswap32(data);
|
||||
}
|
||||
|
||||
OS_INLINE
|
||||
uint64_t _OSSwapInt64(uint64_t data)
|
||||
{
|
||||
return __builtin_bswap64(data);
|
||||
}
|
||||
|
||||
/*
|
||||
* Copyright (c) 1999-2006 Apple Computer, Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. The rights granted to you under the License
|
||||
* may not be used to create, or enable the creation or redistribution of,
|
||||
* unlawful or unlicensed copies of an Apple operating system, or to
|
||||
* circumvent, violate, or enable the circumvention or violation of, any
|
||||
* terms of an Apple operating system software license agreement.
|
||||
*
|
||||
* Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
|
||||
*/
|
||||
|
||||
OS_INLINE
|
||||
uint16_t
|
||||
OSReadSwapInt16(
|
||||
const volatile void * base,
|
||||
uintptr_t byteOffset
|
||||
)
|
||||
{
|
||||
uint16_t result;
|
||||
|
||||
result = *(volatile uint16_t *)((uintptr_t)base + byteOffset);
|
||||
return _OSSwapInt16(result);
|
||||
}
|
||||
|
||||
OS_INLINE
|
||||
uint32_t
|
||||
OSReadSwapInt32(
|
||||
const volatile void * base,
|
||||
uintptr_t byteOffset
|
||||
)
|
||||
{
|
||||
uint32_t result;
|
||||
|
||||
result = *(volatile uint32_t *)((uintptr_t)base + byteOffset);
|
||||
return _OSSwapInt32(result);
|
||||
}
|
||||
|
||||
OS_INLINE
|
||||
uint64_t
|
||||
OSReadSwapInt64(
|
||||
const volatile void * base,
|
||||
uintptr_t byteOffset
|
||||
)
|
||||
{
|
||||
uint64_t result;
|
||||
|
||||
result = *(volatile uint64_t *)((uintptr_t)base + byteOffset);
|
||||
return _OSSwapInt64(result);
|
||||
}
|
||||
|
||||
/* Functions for byte reversed stores. */
|
||||
|
||||
OS_INLINE
|
||||
void
|
||||
OSWriteSwapInt16(
|
||||
volatile void * base,
|
||||
uintptr_t byteOffset,
|
||||
uint16_t data
|
||||
)
|
||||
{
|
||||
*(volatile uint16_t *)((uintptr_t)base + byteOffset) = _OSSwapInt16(data);
|
||||
}
|
||||
|
||||
OS_INLINE
|
||||
void
|
||||
OSWriteSwapInt32(
|
||||
volatile void * base,
|
||||
uintptr_t byteOffset,
|
||||
uint32_t data
|
||||
)
|
||||
{
|
||||
*(volatile uint32_t *)((uintptr_t)base + byteOffset) = _OSSwapInt32(data);
|
||||
}
|
||||
|
||||
OS_INLINE
|
||||
void
|
||||
OSWriteSwapInt64(
|
||||
volatile void * base,
|
||||
uintptr_t byteOffset,
|
||||
uint64_t data
|
||||
)
|
||||
{
|
||||
*(volatile uint64_t *)((uintptr_t)base + byteOffset) = _OSSwapInt64(data);
|
||||
}
|
||||
|
||||
#endif /* ! _OS_OSBYTEORDERARM_H */
|
91
cctools/include/foreign/libkern/arm/_OSByteOrder.h
Normal file
91
cctools/include/foreign/libkern/arm/_OSByteOrder.h
Normal file
@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Copyright (c) 2006 Apple Computer, Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. The rights granted to you under the License
|
||||
* may not be used to create, or enable the creation or redistribution of,
|
||||
* unlawful or unlicensed copies of an Apple operating system, or to
|
||||
* circumvent, violate, or enable the circumvention or violation of, any
|
||||
* terms of an Apple operating system software license agreement.
|
||||
*
|
||||
* Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
|
||||
*/
|
||||
|
||||
#ifndef _OS__OSBYTEORDER_H
|
||||
#define _OS__OSBYTEORDER_H
|
||||
|
||||
/*
|
||||
* This header is normally included from <libkern/OSByteOrder.h>. However,
|
||||
* <sys/_endian.h> also includes this in the case of little-endian
|
||||
* architectures, so that we can map OSByteOrder routines to the hton* and ntoh*
|
||||
* macros. This results in the asymmetry below; we only include
|
||||
* <libkern/arch/_OSByteOrder.h> for little-endian architectures.
|
||||
*/
|
||||
|
||||
#include <sys/_types.h>
|
||||
|
||||
/* Macros for swapping constant values in the preprocessing stage. */
|
||||
#define __DARWIN_OSSwapConstInt16(x) \
|
||||
((__uint16_t)((((__uint16_t)(x) & 0xff00) >> 8) | \
|
||||
(((__uint16_t)(x) & 0x00ff) << 8)))
|
||||
|
||||
#define __DARWIN_OSSwapConstInt32(x) \
|
||||
((__uint32_t)((((__uint32_t)(x) & 0xff000000) >> 24) | \
|
||||
(((__uint32_t)(x) & 0x00ff0000) >> 8) | \
|
||||
(((__uint32_t)(x) & 0x0000ff00) << 8) | \
|
||||
(((__uint32_t)(x) & 0x000000ff) << 24)))
|
||||
|
||||
#define __DARWIN_OSSwapConstInt64(x) \
|
||||
((__uint64_t)((((__uint64_t)(x) & 0xff00000000000000ULL) >> 56) | \
|
||||
(((__uint64_t)(x) & 0x00ff000000000000ULL) >> 40) | \
|
||||
(((__uint64_t)(x) & 0x0000ff0000000000ULL) >> 24) | \
|
||||
(((__uint64_t)(x) & 0x000000ff00000000ULL) >> 8) | \
|
||||
(((__uint64_t)(x) & 0x00000000ff000000ULL) << 8) | \
|
||||
(((__uint64_t)(x) & 0x0000000000ff0000ULL) << 24) | \
|
||||
(((__uint64_t)(x) & 0x000000000000ff00ULL) << 40) | \
|
||||
(((__uint64_t)(x) & 0x00000000000000ffULL) << 56)))
|
||||
|
||||
#if defined(__GNUC__)
|
||||
|
||||
|
||||
#if defined (__arm__) || defined(__arm64__)
|
||||
#include <libkern/arm/OSByteOrder.h>
|
||||
#endif
|
||||
|
||||
|
||||
#define __DARWIN_OSSwapInt16(x) \
|
||||
((__uint16_t)(__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt16(x) : _OSSwapInt16(x)))
|
||||
|
||||
#define __DARWIN_OSSwapInt32(x) \
|
||||
(__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt32(x) : _OSSwapInt32(x))
|
||||
|
||||
#define __DARWIN_OSSwapInt64(x) \
|
||||
(__builtin_constant_p(x) ? __DARWIN_OSSwapConstInt64(x) : _OSSwapInt64(x))
|
||||
|
||||
#else /* ! __GNUC__ */
|
||||
|
||||
|
||||
#define __DARWIN_OSSwapInt16(x) _OSSwapInt16(x)
|
||||
|
||||
#define __DARWIN_OSSwapInt32(x) _OSSwapInt32(x)
|
||||
|
||||
#define __DARWIN_OSSwapInt64(x) _OSSwapInt64(x)
|
||||
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
#endif /* ! _OS__OSBYTEORDER_H */
|
1
cctools/include/foreign/mach/arm
Symbolic link
1
cctools/include/foreign/mach/arm
Symbolic link
@ -0,0 +1 @@
|
||||
i386/
|
@ -93,7 +93,14 @@
|
||||
typedef __darwin_natural_t natural_t;
|
||||
typedef int integer_t;
|
||||
|
||||
#if defined(__ppc__)
|
||||
/*
|
||||
* cctools-port: Added !defined(__ppc64__) because of:
|
||||
* $ clang -target powerpc64le-linux-gnu -dM -E - < /dev/null | grep ppc
|
||||
* #define __ppc64__ 1
|
||||
* #define __ppc__ 1
|
||||
*/
|
||||
|
||||
#if defined(__ppc__) && !defined(__ppc64__)
|
||||
|
||||
/*
|
||||
* For 32-bit PowerPC ABIs, the scalable types were
|
||||
|
@ -43,8 +43,19 @@ typedef short __int16_t;
|
||||
typedef unsigned short __uint16_t;
|
||||
typedef int __int32_t;
|
||||
typedef unsigned int __uint32_t;
|
||||
typedef long long __int64_t;
|
||||
typedef unsigned long long __uint64_t;
|
||||
|
||||
#ifdef __INT64_TYPE__
|
||||
typedef __INT64_TYPE__ __int64_t;
|
||||
typedef unsigned __INT64_TYPE__ __uint64_t;
|
||||
#else
|
||||
#if __SIZEOF_POINTER__ == 8 && !defined(__CYGWIN__)
|
||||
typedef long int __int64_t;
|
||||
typedef unsigned long int __uint64_t;
|
||||
#else
|
||||
typedef long long int __int64_t;
|
||||
typedef unsigned long long int __uint64_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef long __darwin_intptr_t;
|
||||
typedef unsigned int __darwin_natural_t;
|
||||
@ -73,12 +84,14 @@ typedef int __darwin_ct_rune_t; /* ct_rune_t */
|
||||
* mbstate_t is an opaque object to keep conversion state, during multibyte
|
||||
* stream conversions. The content must not be referenced by user programs.
|
||||
*/
|
||||
#if defined(__APPLE__)
|
||||
typedef union {
|
||||
char __mbstate8[128];
|
||||
long long _mbstateL; /* for alignment */
|
||||
} __mbstate_t;
|
||||
|
||||
typedef __mbstate_t __darwin_mbstate_t; /* mbstate_t */
|
||||
#endif
|
||||
|
||||
#if defined(__GNUC__) && defined(__PTRDIFF_TYPE__)
|
||||
typedef __PTRDIFF_TYPE__ __darwin_ptrdiff_t; /* ptr1 - ptr2 */
|
||||
|
@ -112,13 +112,21 @@
|
||||
|
||||
#if defined(KERNEL) || (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE))
|
||||
|
||||
// cctools-port
|
||||
#undef LITTLE_ENDIAN
|
||||
#undef BIG_ENDIAN
|
||||
#undef PDP_ENDIAN
|
||||
#undef BYTE_ORDER
|
||||
|
||||
#define LITTLE_ENDIAN __DARWIN_LITTLE_ENDIAN
|
||||
#define BIG_ENDIAN __DARWIN_BIG_ENDIAN
|
||||
#define PDP_ENDIAN __DARWIN_PDP_ENDIAN
|
||||
|
||||
#define BYTE_ORDER __DARWIN_BYTE_ORDER
|
||||
|
||||
#if defined(__has_include) && __has_include(<sys/_endian.h>) /* cctools-port */
|
||||
#include <sys/_endian.h>
|
||||
#endif
|
||||
|
||||
#endif /* defined(KERNEL) || (!defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)) */
|
||||
#endif /* !_PPC_ENDIAN_H_ */
|
||||
|
@ -50,6 +50,11 @@
|
||||
#include <mach/i386/thread_status.h>
|
||||
#include <mach/hppa/thread_status.h>
|
||||
#include <mach/sparc/thread_status.h>
|
||||
/* cctools-port: need to undef these to avoid warnings */
|
||||
#undef MACHINE_THREAD_STATE
|
||||
#undef MACHINE_THREAD_STATE_COUNT
|
||||
#undef THREAD_STATE_NONE
|
||||
#undef VALID_THREAD_STATE_FLAVOR
|
||||
#include <mach/arm/thread_status.h>
|
||||
#include <mach-o/nlist.h>
|
||||
#include <mach-o/reloc.h>
|
||||
|
@ -38,28 +38,28 @@ void __assert_rtn(const char *func, const char *file, int line, const char *msg)
|
||||
int _NSGetExecutablePath(char *path, unsigned int *size)
|
||||
{
|
||||
#ifdef __FreeBSD__
|
||||
int mib[4];
|
||||
mib[0] = CTL_KERN;
|
||||
mib[1] = KERN_PROC;
|
||||
mib[2] = KERN_PROC_PATHNAME;
|
||||
mib[3] = -1;
|
||||
size_t cb = *size;
|
||||
if (sysctl(mib, 4, path, &cb, NULL, 0) != 0)
|
||||
return -1;
|
||||
*size = cb;
|
||||
return 0;
|
||||
#else
|
||||
int bufsize = *size;
|
||||
int ret_size;
|
||||
ret_size = readlink("/proc/self/exe", path, bufsize-1);
|
||||
if (ret_size != -1)
|
||||
{
|
||||
int mib[4];
|
||||
mib[0] = CTL_KERN;
|
||||
mib[1] = KERN_PROC;
|
||||
mib[2] = KERN_PROC_PATHNAME;
|
||||
mib[3] = -1;
|
||||
size_t cb = *size;
|
||||
if (sysctl(mib, 4, path, &cb, NULL, 0) != 0)
|
||||
return -1;
|
||||
*size = cb;
|
||||
return 0;
|
||||
#else
|
||||
int bufsize = *size;
|
||||
int ret_size;
|
||||
ret_size = readlink("/proc/self/exe", path, bufsize-1);
|
||||
if (ret_size != -1)
|
||||
{
|
||||
*size = ret_size;
|
||||
path[ret_size]=0;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -70,36 +70,71 @@ int _dyld_find_unwind_sections(void* i, struct dyld_unwind_sections* sec)
|
||||
|
||||
mach_port_t mach_host_self(void)
|
||||
{
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
kern_return_t host_statistics ( host_t host_priv, host_flavor_t flavor, host_info_t host_info_out, mach_msg_type_number_t *host_info_outCnt)
|
||||
{
|
||||
return ENOTSUP;
|
||||
return ENOTSUP;
|
||||
}
|
||||
|
||||
uint64_t mach_absolute_time(void) {
|
||||
uint64_t t = 0;
|
||||
struct timeval tv;
|
||||
if (gettimeofday(&tv,NULL)) return t;
|
||||
t = ((uint64_t)tv.tv_sec << 32) | tv.tv_usec;
|
||||
return t;
|
||||
}
|
||||
|
||||
kern_return_t mach_timebase_info( mach_timebase_info_t info) {
|
||||
info->numer = 1;
|
||||
info->denom = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t OSAtomicAdd32( int32_t theAmount, volatile int32_t *theValue )
|
||||
uint64_t mach_absolute_time(void)
|
||||
{
|
||||
__sync_fetch_and_add(theValue, theAmount);
|
||||
return *theValue;
|
||||
uint64_t t = 0;
|
||||
struct timeval tv;
|
||||
if (gettimeofday(&tv,NULL)) return t;
|
||||
t = ((uint64_t)tv.tv_sec << 32) | tv.tv_usec;
|
||||
return t;
|
||||
}
|
||||
int64_t OSAtomicAdd64(int64_t theAmount, volatile int64_t *theValue) {
|
||||
__sync_fetch_and_add(theValue, theAmount);
|
||||
return *theValue;
|
||||
|
||||
kern_return_t mach_timebase_info( mach_timebase_info_t info)
|
||||
{
|
||||
info->numer = 1;
|
||||
info->denom = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(__ppc__) && !defined(__ppc64__)
|
||||
|
||||
/*
|
||||
* __sync_fetch_and_add_8 is missing on ppc 32-bit for some reason.
|
||||
*/
|
||||
|
||||
#include <pthread.h>
|
||||
static pthread_mutex_t lock;
|
||||
|
||||
__attribute__((constructor (101)))
|
||||
static void init_mutex() { pthread_mutex_init(&lock, NULL); }
|
||||
|
||||
int64_t __clang_does_not_like_redeclaring_sync_fetch_and_add_8(
|
||||
volatile int64_t *ptr, int64_t value, ...)
|
||||
{
|
||||
pthread_mutex_lock(&lock);
|
||||
*ptr = value;
|
||||
pthread_mutex_unlock(&lock);
|
||||
return *ptr;
|
||||
}
|
||||
|
||||
asm
|
||||
(
|
||||
".global __sync_fetch_and_add_8\n"
|
||||
".weak __sync_fetch_and_add_8\n"
|
||||
".type __sync_fetch_and_add_8, @function\n"
|
||||
"__sync_fetch_and_add_8:\n"
|
||||
"b __clang_does_not_like_redeclaring_sync_fetch_and_add_8\n"
|
||||
".size __sync_fetch_and_add_8, .-__sync_fetch_and_add_8"
|
||||
);
|
||||
|
||||
#endif /* __ppc__ && !__ppc64__ */
|
||||
|
||||
int32_t OSAtomicAdd32(int32_t __theAmount, volatile int32_t *__theValue)
|
||||
{
|
||||
return __sync_fetch_and_add(__theValue, __theAmount);
|
||||
}
|
||||
|
||||
int64_t OSAtomicAdd64(int64_t __theAmount, volatile int64_t *__theValue)
|
||||
{
|
||||
return __sync_fetch_and_add(__theValue, __theAmount);
|
||||
}
|
||||
|
||||
#endif /* __APPLE__ */
|
||||
|
@ -813,9 +813,13 @@ void InputFiles::inferArchitecture(Options& opts, const char** archName)
|
||||
opts.setArchitecture(CPU_TYPE_I386, CPU_SUBTYPE_X86_ALL);
|
||||
#elif __x86_64__
|
||||
opts.setArchitecture(CPU_TYPE_X86_64, CPU_SUBTYPE_X86_64_ALL);
|
||||
#elif __ppc__ // ld64-port
|
||||
opts.setArchitecture(CPU_TYPE_POWERPC, CPU_SUBTYPE_POWERPC_ALL);
|
||||
#elif __ppc64__ // ld64-port
|
||||
opts.setArchitecture(CPU_TYPE_POWERPC64, CPU_SUBTYPE_POWERPC_ALL);
|
||||
#elif __arm__
|
||||
opts.setArchitecture(CPU_TYPE_ARM, CPU_SUBTYPE_ARM_V6);
|
||||
#elif __arm64__
|
||||
#elif __arm64__ // ld64-port
|
||||
opts.setArchitecture(CPU_TYPE_ARM, CPU_SUBTYPE_ARM64_ALL);
|
||||
#else
|
||||
#error unknown default architecture
|
||||
|
@ -2,7 +2,7 @@ bin_PROGRAMS = \
|
||||
dyldinfo \
|
||||
ObjectDump \
|
||||
unwinddump \
|
||||
machochecker
|
||||
machocheck
|
||||
|
||||
AM_CXXFLAGS = \
|
||||
-D__DARWIN_UNIX03 \
|
||||
@ -34,7 +34,7 @@ AM_CFLAGS = \
|
||||
-I$(top_srcdir)/ld64/src/ld/passes
|
||||
|
||||
unwinddump_SOURCES = unwinddump.cpp
|
||||
machochecker_SOURCES = machochecker.cpp
|
||||
machocheck_SOURCES = machochecker.cpp
|
||||
ObjectDump_SOURCES = \
|
||||
ObjectDump.cpp \
|
||||
$(top_srcdir)/ld64/src/ld/debugline.c
|
||||
|
@ -200,6 +200,11 @@
|
||||
#include <mach/i386/thread_status.h>
|
||||
#include <mach/hppa/thread_status.h>
|
||||
#include <mach/sparc/thread_status.h>
|
||||
/* cctools-port: need to undef these to avoid warnings */
|
||||
#undef MACHINE_THREAD_STATE
|
||||
#undef MACHINE_THREAD_STATE_COUNT
|
||||
#undef THREAD_STATE_NONE
|
||||
#undef VALID_THREAD_STATE_FLAVOR
|
||||
#include <mach/arm/thread_status.h>
|
||||
#include <mach-o/nlist.h>
|
||||
#include <mach-o/reloc.h>
|
||||
|
@ -112,11 +112,15 @@ use_default:
|
||||
/*
|
||||
* The default value is the version of the running OS.
|
||||
*/
|
||||
#ifdef __APPLE__
|
||||
osversion_name[0] = CTL_KERN;
|
||||
osversion_name[1] = KERN_OSRELEASE;
|
||||
osversion_len = sizeof(osversion) - 1;
|
||||
if(sysctl(osversion_name, 2, osversion, &osversion_len, NULL, 0) == -1)
|
||||
system_error("sysctl for kern.osversion failed");
|
||||
#else
|
||||
memcpy(osversion, "10.5", 5); /* cctools-port: claim we are on 10.5 */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Now parse this out. It is expected to be of the form "x.y.z" where
|
||||
|
@ -60,6 +60,11 @@
|
||||
#include <mach/i860/thread_status.h>
|
||||
#include <mach/i386/thread_status.h>
|
||||
#include <mach/sparc/thread_status.h>
|
||||
/* cctools-port: need to undef these to avoid warnings */
|
||||
#undef MACHINE_THREAD_STATE
|
||||
#undef MACHINE_THREAD_STATE_COUNT
|
||||
#undef THREAD_STATE_NONE
|
||||
#undef VALID_THREAD_STATE_FLAVOR
|
||||
#include <mach/arm/thread_status.h>
|
||||
#include <mach-o/nlist.h>
|
||||
#include <mach-o/reloc.h>
|
||||
|
@ -40,6 +40,11 @@
|
||||
#include <mach/i386/thread_status.h>
|
||||
#include <mach/hppa/thread_status.h>
|
||||
#include <mach/sparc/thread_status.h>
|
||||
/* cctools-port: need to undef these to avoid warnings */
|
||||
#undef MACHINE_THREAD_STATE
|
||||
#undef MACHINE_THREAD_STATE_COUNT
|
||||
#undef THREAD_STATE_NONE
|
||||
#undef VALID_THREAD_STATE_FLAVOR
|
||||
#include <mach/arm/thread_status.h>
|
||||
#include "stuff/bool.h"
|
||||
#include "stuff/bytesex.h"
|
||||
|
@ -24,6 +24,7 @@ rm -f package.sh
|
||||
rm -f .gitignore
|
||||
pushd cctools &>/dev/null
|
||||
./autogen.sh
|
||||
rm -rf autom4te.cache
|
||||
popd &>/dev/null
|
||||
popd &>/dev/null
|
||||
|
||||
|
@ -6,7 +6,7 @@ USAGE:
|
||||
|
||||
./build.sh /path/to/sdk.tar.* <target cpu>
|
||||
|
||||
Target CPU should be one of arm6, armv7, armv7s and arm64.
|
||||
Target CPU should be one of armv6, armv7, armv7s and arm64.
|
||||
|
||||
This will build an iOS toolchain prefixed with
|
||||
arm-apple-darwin11-*
|
||||
|
Loading…
Reference in New Issue
Block a user