diff options
Diffstat (limited to 'emulators/qemu/files/patch-fbsd')
-rw-r--r-- | emulators/qemu/files/patch-fbsd | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/emulators/qemu/files/patch-fbsd b/emulators/qemu/files/patch-fbsd new file mode 100644 index 000000000000..dab1f93fc8a0 --- /dev/null +++ b/emulators/qemu/files/patch-fbsd @@ -0,0 +1,141 @@ +Index: qemu/Makefile +@@ -13,7 +13,7 @@ + endif + DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1 + +-all: dyngen$(EXESUF) $(TOOLS) $(DOCS) ++all: bsd/libmath.a dyngen$(EXESUF) $(TOOLS) $(DOCS) + for d in $(TARGET_DIRS); do \ + $(MAKE) -C $$d $@ || exit 1 ; \ + done +@@ -25,6 +25,9 @@ + endif + endif + ++bsd/libmath.a: ++ ( cd bsd ; $(BSD_MAKE) CC=$(CC) ) ++ + qemu-img$(EXESUF): qemu-img.c block.c block-cow.c block-qcow.c aes.c block-vmdk.c block-cloop.c block-dmg.c block-bochs.c block-vpc.c + $(CC) -DQEMU_TOOL $(CFLAGS) $(LDFLAGS) $(DEFINES) -o $@ $^ -lz $(LIBS) + +@@ -33,6 +36,7 @@ + + clean: + # avoid old build problems by removing potentially incorrect old files ++ ( cd bsd ; $(BSD_MAKE) clean ) + rm -f config.mak config.h op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h + rm -f *.o *.a $(TOOLS) dyngen$(EXESUF) TAGS *.pod *~ */*~ + $(MAKE) -C tests clean +Index: qemu/Makefile.target +@@ -391,8 +391,8 @@ + VL_LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld + endif + +-$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a +- $(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(VL_LIBS) ++$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a ../bsd/libmath.a ++ $(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(COCOA_LIBS) $(VL_LIBS) ../bsd/libmath.a + + cocoa.o: cocoa.m + $(CC) $(CFLAGS) $(DEFINES) -c -o $@ $< +Index: qemu/fpu/softfloat-native.c +@@ -2,11 +2,15 @@ + context is supported */ + #include "softfloat.h" + #include <math.h> ++#if defined(__FreeBSD__) && __FreeBSD_version < 500000 ++#include <ieeefp.h> ++#endif + + void set_float_rounding_mode(int val STATUS_PARAM) + { + STATUS(float_rounding_mode) = val; +-#if defined(_BSD) && !defined(__APPLE__) ++#if defined(_BSD) && !defined(__APPLE__) && \ ++ (defined(__FreeBSD__) && __FreeBSD_version < 500000) + fpsetround(val); + #elif defined(__arm__) + /* nothing to do */ +@@ -22,7 +26,7 @@ + } + #endif + +-#if defined(_BSD) ++#if defined(_BSD) && !defined(__FreeBSD__) + #define lrint(d) ((int32_t)rint(d)) + #define llrint(d) ((int64_t)rint(d)) + #endif +Index: qemu/fpu/softfloat-native.h +@@ -1,7 +1,17 @@ + /* Native implementation of soft float functions */ + #include <math.h> +-#if defined(_BSD) && !defined(__APPLE__) ++#if defined(_BSD) && !defined(__APPLE__) && \ ++ (!defined(__FreeBSD__) || __FreeBSD_version < 500000) + #include <ieeefp.h> ++#if defined(__FreeBSD__) ++#define isgreater(x, y) __builtin_isgreater((x), (y)) ++#define isgreaterequal(x, y) __builtin_isgreaterequal((x), (y)) ++#define isless(x, y) __builtin_isless((x), (y)) ++#define islessequal(x, y) __builtin_islessequal((x), (y)) ++#define islessgreater(x, y) __builtin_islessgreater((x), (y)) ++#define isunordered(x, y) __builtin_isunordered((x), (y)) ++long double fabsl(long double x); ++#endif + #else + #include <fenv.h> + #endif +@@ -33,12 +43,13 @@ + /*---------------------------------------------------------------------------- + | Software IEC/IEEE floating-point rounding mode. + *----------------------------------------------------------------------------*/ +-#if defined(_BSD) && !defined(__APPLE__) ++#if defined(_BSD) && !defined(__APPLE__) && \ ++ (!defined(__FreeBSD__) || __FreeBSD_version < 500000) + enum { + float_round_nearest_even = FP_RN, +- float_round_down = FE_RM, +- float_round_up = FE_RP, +- float_round_to_zero = FE_RZ ++ float_round_down = FP_RM, ++ float_round_up = FP_RP, ++ float_round_to_zero = FP_RZ + }; + #elif defined(__arm__) + enum { +Index: qemu/fpu/softfloat.h +@@ -84,7 +84,8 @@ + #define FLOAT128 + #else + /* native float support */ +-#if (defined(__i386__) || defined(__x86_64__)) && !defined(_BSD) ++#if (defined(__i386__) || defined(__x86_64__)) && \ ++ (!defined(_BSD) || defined(__FreeBSD__)) + #define FLOATX80 + #endif + #endif /* !CONFIG_SOFTFLOAT */ +Index: qemu/target-ppc/op_helper.c +@@ -303,6 +303,13 @@ + FT0 = sqrt(FT0); + } + ++#ifndef isnormal ++#define isnormal(x) \ ++ ((sizeof (x) == sizeof (float)) ? __isnormalf(x) \ ++ : (sizeof (x) == sizeof (double)) ? __isnormal(x) \ ++ : __isnormall(x)) ++#endif ++ + void do_fres (void) + { + union { +Index: qemu/x86_64.ld +@@ -2,7 +2,7 @@ + OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") + OUTPUT_ARCH(i386:x86-64) + ENTRY(_start) +-SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/local/lib64"); ++SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib"); SEARCH_DIR("/usr/local/lib"); + SECTIONS + { + /* Read-only sections, merged into text segment: */ |