mirror of
https://review.haiku-os.org/buildtools
synced 2026-02-04 07:53:14 +01:00
Compare commits
5 Commits
btrev14978
...
btrev14997
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
05e88697a9 | ||
|
|
418d835d48 | ||
|
|
57087cfc96 | ||
|
|
1c87b35698 | ||
|
|
bd1970381d |
3
gcc4/configure
vendored
3
gcc4/configure
vendored
@@ -1156,6 +1156,9 @@ esac
|
||||
|
||||
|
||||
case "${target}" in
|
||||
*-*-beos)
|
||||
noconfigdirs="$noconfigdirs target-libiberty"
|
||||
;;
|
||||
*-*-chorusos)
|
||||
noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
|
||||
;;
|
||||
|
||||
@@ -72,9 +72,14 @@ Boston, MA 02111-1307, USA. */
|
||||
builtin_define ("__PIC__"); \
|
||||
builtin_define ("__pic__"); \
|
||||
} \
|
||||
/* BeOS apparently doesn't support merging of symbols across shared \
|
||||
object boundaries. Hence we need to explicitly specify that \
|
||||
type_infos are not merged, so that they get compared by name \
|
||||
instead of by pointer. */ \
|
||||
builtin_define ("__GXX_MERGED_TYPEINFO_NAMES=0"); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
|
||||
/* BeOS uses lots of multichars, so don't warn about them unless the
|
||||
user explicitly asks for the warnings with -Wmultichar. Note that
|
||||
CC1_SPEC is used for both cc1 and cc1plus. */
|
||||
@@ -99,7 +104,7 @@ Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* LIB_SPEC for BeOS */
|
||||
#undef LIB_SPEC
|
||||
#define LIB_SPEC "-lnet -lroot"
|
||||
#define LIB_SPEC "-lroot"
|
||||
|
||||
/* gcc runtime lib is built into libroot.so on BeOS */
|
||||
/* ??? This is gonna be lovely when the next release of gcc has
|
||||
@@ -238,3 +243,6 @@ Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* BeOS uses explicit import from shared libraries. */
|
||||
#define MULTIPLE_SYMBOL_SPACES 1
|
||||
|
||||
#undef EXTRA_SECTIONS
|
||||
#define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_drectve
|
||||
|
||||
2
gcc4/gcc/configure
vendored
2
gcc4/gcc/configure
vendored
@@ -12021,7 +12021,7 @@ case ${enable_threads} in
|
||||
# default
|
||||
target_thread_file='single'
|
||||
;;
|
||||
aix | dce | gnat | irix | posix | posix95 | rtems | \
|
||||
aix | beos | dce | gnat | irix | posix | posix95 | rtems | \
|
||||
single | solaris | vxworks | win32 )
|
||||
target_thread_file=${enable_threads}
|
||||
;;
|
||||
|
||||
@@ -1277,7 +1277,7 @@ case ${enable_threads} in
|
||||
# default
|
||||
target_thread_file='single'
|
||||
;;
|
||||
aix | dce | gnat | irix | posix | posix95 | rtems | \
|
||||
aix | beos | dce | gnat | irix | posix | posix95 | rtems | \
|
||||
single | solaris | vxworks | win32 )
|
||||
target_thread_file=${enable_threads}
|
||||
;;
|
||||
|
||||
@@ -134,7 +134,9 @@ extern void *__deregister_frame_info_bases (const void *)
|
||||
extern void __do_global_ctors_1 (void);
|
||||
|
||||
/* Likewise for _Jv_RegisterClasses. */
|
||||
#ifdef JCR_SECTION_NAME
|
||||
extern void _Jv_RegisterClasses (void *) TARGET_ATTRIBUTE_WEAK;
|
||||
#endif
|
||||
|
||||
#ifdef OBJECT_FORMAT_ELF
|
||||
|
||||
|
||||
@@ -338,9 +338,13 @@ do { fputs (integer_asm_op (POINTER_SIZE / BITS_PER_UNIT, TRUE), FILE); \
|
||||
at program start-up time. */
|
||||
#if defined (TARGET_ASM_NAMED_SECTION) && SUPPORTS_WEAK
|
||||
#ifndef JCR_SECTION_NAME
|
||||
/* Hack to remove _Jv crap on BeOS. i know it should be made somehow through
|
||||
config files, but i don't know how (in which file ;) */
|
||||
#ifndef __BEOS__
|
||||
#define JCR_SECTION_NAME ".jcr"
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* This decision to use a .jcr section can be overridden by defining
|
||||
USE_JCR_SECTION to 0 in target file. This is necessary if target
|
||||
|
||||
155
gcc4/gcc/gthr-beos.h
Normal file
155
gcc4/gcc/gthr-beos.h
Normal file
@@ -0,0 +1,155 @@
|
||||
/* Threads compatibility routines for libgcc2. */
|
||||
/* Compile this one with gcc. */
|
||||
/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC is free software; you can redistribute it and/or modify it under
|
||||
the terms of the GNU General Public License as published by the Free
|
||||
Software Foundation; either version 2, or (at your option) any later
|
||||
version.
|
||||
|
||||
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GCC; see the file COPYING. If not, write to the Free
|
||||
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||
02111-1307, USA. */
|
||||
|
||||
/* As a special exception, if you link this library with other files,
|
||||
some of which are compiled with GCC, to produce an executable,
|
||||
this library does not by itself cause the resulting executable
|
||||
to be covered by the GNU General Public License.
|
||||
This exception does not however invalidate any other reasons why
|
||||
the executable file might be covered by the GNU General Public License. */
|
||||
|
||||
#ifndef GCC_GTHR_BEOS_H
|
||||
#define GCC_GTHR_BEOS_H
|
||||
|
||||
/* If this file is compiled with threads support, it must
|
||||
#define __GTHREADS 1
|
||||
to indicate that threads support is present. Also it has define
|
||||
function
|
||||
int __gthread_active_p ()
|
||||
that returns 1 if thread system is active, 0 if not.
|
||||
|
||||
The threads interface must define the following types:
|
||||
__gthread_key_t
|
||||
__gthread_once_t
|
||||
__gthread_mutex_t
|
||||
|
||||
The threads interface must define the following macros:
|
||||
|
||||
__GTHREAD_ONCE_INIT
|
||||
to initialize __gthread_once_t
|
||||
__GTHREAD_MUTEX_INIT
|
||||
to initialize __gthread_mutex_t to get a fast
|
||||
non-recursive mutex.
|
||||
__GTHREAD_MUTEX_INIT_FUNCTION
|
||||
some systems can't initialize a mutex without a
|
||||
function call. On such systems, define this to a
|
||||
function which looks like this:
|
||||
void __GTHREAD_MUTEX_INIT_FUNCTION (__gthread_mutex_t *)
|
||||
Don't define __GTHREAD_MUTEX_INIT in this case
|
||||
|
||||
The threads interface must define the following static functions:
|
||||
|
||||
int __gthread_once (__gthread_once_t *once, void (*func) ())
|
||||
|
||||
int __gthread_key_create (__gthread_key_t *keyp, void (*dtor) (void *))
|
||||
int __gthread_key_delete (__gthread_key_t key)
|
||||
|
||||
void *__gthread_getspecific (__gthread_key_t key)
|
||||
int __gthread_setspecific (__gthread_key_t key, const void *ptr)
|
||||
|
||||
int __gthread_mutex_lock (__gthread_mutex_t *mutex);
|
||||
int __gthread_mutex_trylock (__gthread_mutex_t *mutex);
|
||||
int __gthread_mutex_unlock (__gthread_mutex_t *mutex);
|
||||
|
||||
All functions returning int should return zero on success or the error
|
||||
number. If the operation is not supported, -1 is returned.
|
||||
|
||||
Currently supported threads packages are
|
||||
POSIX threads with -D_PTHREADS
|
||||
DCE threads with -D_DCE_THREADS
|
||||
Solaris/UI threads with -D_SOLARIS_THREADS
|
||||
BeOS threads with -D_BEOS_THREADS
|
||||
*/
|
||||
|
||||
#include <OS.h>
|
||||
#include <TLS.h>
|
||||
|
||||
#define __GTHREADS 1
|
||||
|
||||
// for now __gthread_key_delete is not used anywhere, so we don't need to "emulate it" using additional arrays or something :)
|
||||
typedef int32 __gthread_key_t;
|
||||
typedef vint32 __gthread_once_t;
|
||||
typedef vint32 __gthread_mutex_t;
|
||||
|
||||
#define __GTHREAD_ONCE_INIT 0
|
||||
#define __GTHREAD_MUTEX_INIT 0
|
||||
|
||||
static inline int __gthread_active_p ()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline int __gthread_once (__gthread_once_t *once, void (*func) ())
|
||||
{
|
||||
if (atomic_or(once, 1) == 0) {
|
||||
func();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int __gthread_key_create (__gthread_key_t *keyp, void (*dtor) (void *))
|
||||
{
|
||||
*keyp = tls_allocate();
|
||||
return 0;
|
||||
}
|
||||
|
||||
// BeOS doesn't offer deleting TLS keys,
|
||||
// luckly delete is not used anywahere in gcc so we don't have to implement it (at least so for now :)
|
||||
// (and do create tricks with structs and arrays for keys, to run dtor for all tls_vars...)
|
||||
static inline int __gthread_key_delete (__gthread_key_t key)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
static inline void *__gthread_getspecific (__gthread_key_t key)
|
||||
{
|
||||
return tls_get(key);
|
||||
}
|
||||
|
||||
static inline int __gthread_setspecific (__gthread_key_t key, const void *ptr)
|
||||
{
|
||||
tls_set(key, (void*)ptr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int __gthread_mutex_lock (__gthread_mutex_t *mutex)
|
||||
{
|
||||
while (atomic_or(mutex, 1) != 0) {
|
||||
snooze(3000);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int __gthread_mutex_trylock (__gthread_mutex_t *mutex)
|
||||
{
|
||||
if (atomic_or(mutex, 1) == 0)
|
||||
return 0;
|
||||
else
|
||||
return EBUSY;
|
||||
}
|
||||
|
||||
static inline int __gthread_mutex_unlock (__gthread_mutex_t *mutex)
|
||||
{
|
||||
atomic_and(mutex, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* ! GCC_GTHR_BEOS_H */
|
||||
@@ -103,6 +103,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||
#include "gthr-dce.h"
|
||||
#elif _SOLARIS_THREADS
|
||||
#include "gthr-solaris.h"
|
||||
#elif __BEOS__
|
||||
#include "gthr-beos.h"
|
||||
|
||||
/* Include GTHREAD_FILE if one is defined. */
|
||||
#elif defined(HAVE_GTHR_DEFAULT)
|
||||
|
||||
Reference in New Issue
Block a user