mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-22 16:43:03 +01:00
Add platform support for Linux/m68k (#51)
* Add generic platform support for Linux/m68k * Include sem_t when determining values for FB_ALIGNMENT and FB_DOUBLE_ALIGN On m68k, 'long long' is 16-bit aligned while 'sem_t' is 32-bit aligned and we must therefore include 'sem_t' when determining the values for FB_ALIGNMENT and FB_DOUBLE_ALIGN. Otherwise, the futex system call will fail on these systems. * Don't try to include headers for __cpuid on non-x86 targets * Make sure that the version scripts include _IO_stdin_used on Linux The GNU C library supports two ABIs for libio, one is the pre-2.1 ABI and the other is the current one. In order to determine which ABI is to be used, the C library checks whether the _IO_stdin_used symbol is exported by the executable. In case the symbol is present, the new ABI is assumed, if the symbol is missing, the old ABI is assumed. Thus, if an application is linked against a modern version of glibc, it must export the _IO_stdin_used symbol as otherwise the executable can crash or provoke other unexpected behavior on some architectures like PowerPC or MIPS because the C library is using the old ABI in this case.
This commit is contained in:
parent
83899abaac
commit
7ba46163c7
@ -57,6 +57,7 @@ platform_linux() {
|
||||
echo "${TAB}$i;"
|
||||
done
|
||||
|
||||
echo "${TAB}_IO_stdin_used;"
|
||||
echo 'local:'
|
||||
echo "${TAB}*;"
|
||||
echo '};'
|
||||
|
16
configure.ac
16
configure.ac
@ -363,6 +363,17 @@ dnl CPU_TYPE=ppc64
|
||||
SHRLIB_EXT=so
|
||||
;;
|
||||
|
||||
m68k*-*-linux*)
|
||||
MAKEFILE_PREFIX=linux_generic
|
||||
INSTALL_PREFIX=linux
|
||||
PLATFORM=LINUX
|
||||
AC_DEFINE(LINUX, 1, [Define this if OS is Linux])
|
||||
AC_DEFINE(M68K, 1, [Define this if CPU is M68k])
|
||||
LOCK_MANAGER_FLG=Y
|
||||
EDITLINE_FLG=Y
|
||||
SHRLIB_EXT=so
|
||||
;;
|
||||
|
||||
*-*-linux* | *-*-gnu*)
|
||||
MAKEFILE_PREFIX=linux_generic
|
||||
INSTALL_PREFIX=linux
|
||||
@ -1027,10 +1038,11 @@ AC_CHECK_MEMBER([struct dirent.d_type],
|
||||
dnl EKU: try to determine the alignment of long and double
|
||||
dnl replaces FB_ALIGNMENT and FB_DOUBLE_ALIGN in src/jrd/common.h
|
||||
AC_MSG_CHECKING(alignment of long)
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[main () {
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <semaphore.h>
|
||||
main () {
|
||||
struct s {
|
||||
char a;
|
||||
long long b;
|
||||
union { long long x; sem_t y; } b;
|
||||
};
|
||||
exit((int)&((struct s*)0)->b);
|
||||
}]])],[ac_cv_c_alignment=$ac_status],[ac_cv_c_alignment=$ac_status],[])
|
||||
|
@ -48,6 +48,7 @@ static const UCHAR CpuHppa = 13;
|
||||
static const UCHAR CpuAlpha = 14;
|
||||
static const UCHAR CpuArm64 = 15;
|
||||
static const UCHAR CpuPowerPc64el = 16;
|
||||
static const UCHAR CpuM68k = 17;
|
||||
|
||||
static const UCHAR OsWindows = 0;
|
||||
static const UCHAR OsLinux = 1;
|
||||
@ -87,7 +88,8 @@ const char* hardware[] = {
|
||||
"HPPA",
|
||||
"Alpha",
|
||||
"ARM64",
|
||||
"PowerPC64el"
|
||||
"PowerPC64el",
|
||||
"M68k"
|
||||
};
|
||||
|
||||
const char* operatingSystem[] = {
|
||||
@ -128,8 +130,8 @@ const UCHAR backwardTable[FB_NELEM(hardware) * FB_NELEM(operatingSystem)] =
|
||||
|
||||
const UCHAR backEndianess[FB_NELEM(hardware)] =
|
||||
{
|
||||
// Intel AMD Sparc PPC PPC64 MIPSEL MIPS ARM IA64 s390 s390x SH SHEB HPPA Alpha ARM64 PowerPC64el
|
||||
0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0
|
||||
// Intel AMD Sparc PPC PPC64 MIPSEL MIPS ARM IA64 s390 s390x SH SHEB HPPA Alpha ARM64 PowerPC64el M68k
|
||||
0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1
|
||||
};
|
||||
|
||||
} // anonymous namespace
|
||||
|
@ -23,11 +23,13 @@
|
||||
#include "firebird.h"
|
||||
#include "../common/classes/Hash.h"
|
||||
|
||||
#if defined(_M_IX86) || defined(_M_X64) || defined(__x86_64__) || defined(__i386__)
|
||||
#ifdef _MSC_VER
|
||||
#include <intrin.h>
|
||||
#else
|
||||
#include <cpuid.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
using namespace Firebird;
|
||||
|
||||
|
@ -199,6 +199,10 @@
|
||||
#define FB_CPU CpuPowerPc64
|
||||
#endif /* PPC64 */
|
||||
|
||||
#ifdef M68K
|
||||
#define FB_CPU CpuM68k
|
||||
#endif /* M68K */
|
||||
|
||||
#endif /* LINUX */
|
||||
|
||||
|
||||
|
@ -241,6 +241,7 @@ enum info_db_implementations
|
||||
isc_info_db_impl_linux_arm64 = 84,
|
||||
isc_info_db_impl_linux_ppc64el = 85,
|
||||
isc_info_db_impl_linux_ppc64 = 86,
|
||||
isc_info_db_impl_linux_m68k = 87,
|
||||
|
||||
|
||||
isc_info_db_impl_last_value // Leave this LAST!
|
||||
|
Loading…
Reference in New Issue
Block a user