Commit 3142255c62f3e69a1fa75427426a3e64b6349fbd
1 parent
6083f933
Sparc host update (Ben Taylor, Martin Bochnig)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2689 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
76 additions
and
27 deletions
Makefile
@@ -8,10 +8,9 @@ include config-host.mak | @@ -8,10 +8,9 @@ include config-host.mak | ||
8 | BASE_CFLAGS= | 8 | BASE_CFLAGS= |
9 | BASE_LDFLAGS= | 9 | BASE_LDFLAGS= |
10 | 10 | ||
11 | -BASE_CFLAGS += $(OS_CFLAGS) | ||
12 | -ifeq ($(ARCH),sparc) | ||
13 | -BASE_CFLAGS += -mcpu=ultrasparc | ||
14 | -endif | 11 | +BASE_CFLAGS += $(OS_CFLAGS) $(ARCH_CFLAGS) |
12 | +BASE_LDFLAGS += $(OS_LDFLAGS) $(ARCH_LDFLAGS) | ||
13 | + | ||
15 | CPPFLAGS += -I. -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE | 14 | CPPFLAGS += -I. -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE |
16 | LIBS= | 15 | LIBS= |
17 | TOOLS=qemu-img$(EXESUF) | 16 | TOOLS=qemu-img$(EXESUF) |
Makefile.target
@@ -132,25 +132,25 @@ BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld | @@ -132,25 +132,25 @@ BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld | ||
132 | endif | 132 | endif |
133 | 133 | ||
134 | ifeq ($(ARCH),sparc) | 134 | ifeq ($(ARCH),sparc) |
135 | -ifeq ($(CONFIG_SOLARIS),yes) | ||
136 | -BASE_CFLAGS+=-mcpu=ultrasparc -m32 -ffixed-g2 -ffixed-g3 | ||
137 | -BASE_LDFLAGS+=-m32 | ||
138 | -OP_CFLAGS+=-fno-delayed-branch -fno-omit-frame-pointer -ffixed-i0 | ||
139 | -else | ||
140 | -BASE_CFLAGS+=-mcpu=ultrasparc -m32 -ffixed-g1 -ffixed-g2 -ffixed-g3 -ffixed-g6 | ||
141 | -BASE_LDFLAGS+=-m32 | ||
142 | -OP_CFLAGS+=-fno-delayed-branch -ffixed-i0 | ||
143 | -HELPER_CFLAGS=$(CFLAGS) -ffixed-i0 -mflat | ||
144 | -# -static is used to avoid g1/g3 usage by the dynamic linker | ||
145 | -BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld -static | ||
146 | -endif | 135 | + BASE_CFLAGS+=-ffixed-g2 -ffixed-g3 |
136 | + OP_CFLAGS+=-fno-delayed-branch -ffixed-i0 | ||
137 | + ifeq ($(CONFIG_SOLARIS),yes) | ||
138 | + OP_CFLAGS+=-fno-omit-frame-pointer | ||
139 | + else | ||
140 | + BASE_CFLAGS+=-ffixed-g1 -ffixed-g6 | ||
141 | + HELPER_CFLAGS=$(CFLAGS) -ffixed-i0 -mflat | ||
142 | + # -static is used to avoid g1/g3 usage by the dynamic linker | ||
143 | + BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld -static | ||
144 | + endif | ||
147 | endif | 145 | endif |
148 | 146 | ||
149 | ifeq ($(ARCH),sparc64) | 147 | ifeq ($(ARCH),sparc64) |
150 | -BASE_CFLAGS+=-mcpu=ultrasparc -m64 -ffixed-g1 -ffixed-g4 -ffixed-g5 -ffixed-g7 | ||
151 | -BASE_LDFLAGS+=-m64 | ||
152 | -BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld | ||
153 | -OP_CFLAGS+=-mcpu=ultrasparc -m64 -ffixed-g1 -ffixed-g4 -ffixed-g5 -ffixed-g7 -fno-delayed-branch -ffixed-i0 | 148 | + BASE_CFLAGS+=-ffixed-g1 -ffixed-g4 -ffixed-g5 -ffixed-g7 |
149 | + OP_CFLAGS+=-mcpu=ultrasparc -m64 -fno-delayed-branch -ffixed-i0 | ||
150 | + ifneq ($(CONFIG_SOLARIS),yes) | ||
151 | + BASE_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld | ||
152 | + OP_CFLAGS+=-ffixed-g1 -ffixed-g4 -ffixed-g5 -ffixed-g7 | ||
153 | + endif | ||
154 | endif | 154 | endif |
155 | 155 | ||
156 | ifeq ($(ARCH),alpha) | 156 | ifeq ($(ARCH),alpha) |
@@ -202,8 +202,10 @@ ifdef CONFIG_DARWIN_USER | @@ -202,8 +202,10 @@ ifdef CONFIG_DARWIN_USER | ||
202 | BASE_LDFLAGS+=-Wl,-segaddr,__STD_PROG_ZONE,0x1000 -image_base 0x0e000000 | 202 | BASE_LDFLAGS+=-Wl,-segaddr,__STD_PROG_ZONE,0x1000 -image_base 0x0e000000 |
203 | endif | 203 | endif |
204 | 204 | ||
205 | -BASE_CFLAGS+=$(OS_CFLAGS) | ||
206 | -OP_CFLAGS+=$(OS_CFLAGS) | 205 | +BASE_CFLAGS+=$(OS_CFLAGS) $(ARCH_CFLAGS) |
206 | +BASE_LDFLAGS+=$(OS_LDFLAGS) $(ARCH_LDFLAGS) | ||
207 | +OP_CFLAGS+=$(OS_CFLAGS) $(ARCH_CFLAGS) | ||
208 | +OP_LDFLAGS+=$(OS_LDFLAGS) $(ARCH_LDFLAGS) | ||
207 | 209 | ||
208 | ######################################################### | 210 | ######################################################### |
209 | 211 | ||
@@ -500,8 +502,10 @@ VL_LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld | @@ -500,8 +502,10 @@ VL_LDFLAGS+=-Wl,-G0 -Wl,-T,$(SRC_PATH)/ia64.ld | ||
500 | endif | 502 | endif |
501 | 503 | ||
502 | ifeq ($(ARCH),sparc64) | 504 | ifeq ($(ARCH),sparc64) |
503 | -VL_LDFLAGS+=-m64 | ||
504 | -VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/sparc64.ld | 505 | + VL_LDFLAGS+=-m64 |
506 | + ifneq ($(CONFIG_SOLARIS),yes) | ||
507 | + VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld | ||
508 | + endif | ||
505 | endif | 509 | endif |
506 | 510 | ||
507 | ifdef CONFIG_WIN32 | 511 | ifdef CONFIG_WIN32 |
configure
@@ -56,7 +56,7 @@ case "$cpu" in | @@ -56,7 +56,7 @@ case "$cpu" in | ||
56 | s390) | 56 | s390) |
57 | cpu="s390" | 57 | cpu="s390" |
58 | ;; | 58 | ;; |
59 | - sparc|sun4[muv]) | 59 | + sparc|sun4[cdmuv]) |
60 | cpu="sparc" | 60 | cpu="sparc" |
61 | ;; | 61 | ;; |
62 | sparc64) | 62 | sparc64) |
@@ -266,6 +266,18 @@ for opt do | @@ -266,6 +266,18 @@ for opt do | ||
266 | ;; | 266 | ;; |
267 | --enable-uname-release=*) uname_release="$optarg" | 267 | --enable-uname-release=*) uname_release="$optarg" |
268 | ;; | 268 | ;; |
269 | + --sparc_cpu=*) | ||
270 | + sparc_cpu="$optarg" | ||
271 | + case $sparc_cpu in | ||
272 | + v7|v8) SP_CFLAGS="-m32 -mcpu=${sparc_cpu} -D__sparc_${sparc_cpu}__"; SP_LDFLAGS="-m32" | ||
273 | + target_cpu="sparc"; cpu="sparc" ;; | ||
274 | + v8plus|v8plusa) SP_CFLAGS="-m32 -mcpu=ultrasparc -D__sparc_${sparc_cpu}__"; SP_LDFLAGS="-m32" | ||
275 | + target_cpu="sparc"; cpu="sparc" ;; | ||
276 | + v9) SP_CFLAGS="-m64 -mcpu=ultrasparc -D__sparc_${sparc_cpu}__"; SP_LDFLAGS="-m64" | ||
277 | + target_cpu="sparc64"; cpu="sparc64" ;; | ||
278 | + *) echo "undefined SPARC architecture. Exiting";exit 1;; | ||
279 | + esac | ||
280 | + ;; | ||
269 | esac | 281 | esac |
270 | done | 282 | done |
271 | 283 | ||
@@ -279,6 +291,29 @@ fi | @@ -279,6 +291,29 @@ fi | ||
279 | CFLAGS="$CFLAGS -Wall -O2 -g -fno-strict-aliasing" | 291 | CFLAGS="$CFLAGS -Wall -O2 -g -fno-strict-aliasing" |
280 | LDFLAGS="$LDFLAGS -g" | 292 | LDFLAGS="$LDFLAGS -g" |
281 | 293 | ||
294 | +# | ||
295 | +# If cpu ~= sparc and sparc_cpu hasn't been defined, plug in the right | ||
296 | +# ARCH_CFLAGS/ARCH_LDFLAGS (assume sparc_v8plus for 32-bit and sparc_v9 for 64-bit) | ||
297 | +# | ||
298 | +case $cpu in | ||
299 | + sparc) if test -z "$sparc_cpu" ; then | ||
300 | + ARCH_CFLAGS="-m32 -mcpu=ultrasparc -D__sparc_v8plus__" | ||
301 | + ARCH_LDFLAGS="-m32" | ||
302 | + else | ||
303 | + ARCH_CFLAGS="${SP_CFLAGS}" | ||
304 | + ARCH_LDFLAGS="${SP_LDFLAGS}" | ||
305 | + fi | ||
306 | + ;; | ||
307 | + sparc64) if test -z "$sparc_cpu" ; then | ||
308 | + ARCH_CFLAGS="-m64 -mcpu=ultrasparc -D__sparc_v9__" | ||
309 | + ARCH_LDFLAGS="-m64" | ||
310 | + else | ||
311 | + ARCH_CFLAGS="${SP_CFLAGS}" | ||
312 | + ARCH_LDFLAGS="${SP_LDFLAGS}" | ||
313 | + fi | ||
314 | + ;; | ||
315 | +esac | ||
316 | + | ||
282 | if test x"$show_help" = x"yes" ; then | 317 | if test x"$show_help" = x"yes" ; then |
283 | cat << EOF | 318 | cat << EOF |
284 | 319 | ||
@@ -320,6 +355,7 @@ echo " --disable-darwin-user disable all darwin usermode emulation targets" | @@ -320,6 +355,7 @@ echo " --disable-darwin-user disable all darwin usermode emulation targets" | ||
320 | echo " --fmod-lib path to FMOD library" | 355 | echo " --fmod-lib path to FMOD library" |
321 | echo " --fmod-inc path to FMOD includes" | 356 | echo " --fmod-inc path to FMOD includes" |
322 | echo " --enable-uname-release=R Return R for uname -r in usermode emulation" | 357 | echo " --enable-uname-release=R Return R for uname -r in usermode emulation" |
358 | +echo " --sparc_cpu=V Build qemu for Sparc architecture v7, v8, v8plus, v8plusa, v9" | ||
323 | echo "" | 359 | echo "" |
324 | echo "NOTE: The object files are built at the place where configure is launched" | 360 | echo "NOTE: The object files are built at the place where configure is launched" |
325 | exit 1 | 361 | exit 1 |
@@ -635,6 +671,9 @@ else | @@ -635,6 +671,9 @@ else | ||
635 | fmod_support="" | 671 | fmod_support="" |
636 | fi | 672 | fi |
637 | echo "FMOD support $fmod $fmod_support" | 673 | echo "FMOD support $fmod $fmod_support" |
674 | +if test -n "$sparc_cpu"; then | ||
675 | + echo "Target Sparc Arch $sparc_cpu" | ||
676 | +fi | ||
638 | echo "kqemu support $kqemu" | 677 | echo "kqemu support $kqemu" |
639 | echo "Documentation $build_docs" | 678 | echo "Documentation $build_docs" |
640 | [ ! -z "$uname_release" ] && \ | 679 | [ ! -z "$uname_release" ] && \ |
@@ -668,6 +707,9 @@ echo "HOST_CC=$host_cc" >> $config_mak | @@ -668,6 +707,9 @@ echo "HOST_CC=$host_cc" >> $config_mak | ||
668 | echo "AR=$ar" >> $config_mak | 707 | echo "AR=$ar" >> $config_mak |
669 | echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak | 708 | echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak |
670 | echo "OS_CFLAGS=$OS_CFLAGS" >> $config_mak | 709 | echo "OS_CFLAGS=$OS_CFLAGS" >> $config_mak |
710 | +echo "OS_LDFLAGS=$OS_LDFLAGS" >> $config_mak | ||
711 | +echo "ARCH_CFLAGS=$ARCH_CFLAGS" >> $config_mak | ||
712 | +echo "ARCH_LDFLAGS=$ARCH_LDFLAGS" >> $config_mak | ||
671 | echo "CFLAGS=$CFLAGS" >> $config_mak | 713 | echo "CFLAGS=$CFLAGS" >> $config_mak |
672 | echo "LDFLAGS=$LDFLAGS" >> $config_mak | 714 | echo "LDFLAGS=$LDFLAGS" >> $config_mak |
673 | echo "EXESUF=$EXESUF" >> $config_mak | 715 | echo "EXESUF=$EXESUF" >> $config_mak |
@@ -712,7 +754,7 @@ elif test "$cpu" = "m68k" ; then | @@ -712,7 +754,7 @@ elif test "$cpu" = "m68k" ; then | ||
712 | echo "ARCH=m68k" >> $config_mak | 754 | echo "ARCH=m68k" >> $config_mak |
713 | echo "#define HOST_M68K 1" >> $config_h | 755 | echo "#define HOST_M68K 1" >> $config_h |
714 | else | 756 | else |
715 | - echo "Unsupported CPU" | 757 | + echo "Unsupported CPU = $cpu" |
716 | exit 1 | 758 | exit 1 |
717 | fi | 759 | fi |
718 | if test "$bigendian" = "yes" ; then | 760 | if test "$bigendian" = "yes" ; then |
@@ -744,6 +786,10 @@ if test "$solaris" = "yes" ; then | @@ -744,6 +786,10 @@ if test "$solaris" = "yes" ; then | ||
744 | echo "#define NEEDS_LIBSUNMATH 1" >> $config_h | 786 | echo "#define NEEDS_LIBSUNMATH 1" >> $config_h |
745 | fi | 787 | fi |
746 | fi | 788 | fi |
789 | +if test -n "$sparc_cpu"; then | ||
790 | + echo "CONFIG__sparc_${sparc_cpu}__=yes" >> $config_mak | ||
791 | + echo "#define __sparc_${sparc_cpu}__ 1" >> $config_h | ||
792 | +fi | ||
747 | if test "$gdbstub" = "yes" ; then | 793 | if test "$gdbstub" = "yes" ; then |
748 | echo "CONFIG_GDBSTUB=yes" >> $config_mak | 794 | echo "CONFIG_GDBSTUB=yes" >> $config_mak |
749 | echo "#define CONFIG_GDBSTUB 1" >> $config_h | 795 | echo "#define CONFIG_GDBSTUB 1" >> $config_h |
cpu-all.h
@@ -1000,7 +1000,7 @@ static inline int64_t cpu_get_real_ticks(void) | @@ -1000,7 +1000,7 @@ static inline int64_t cpu_get_real_ticks(void) | ||
1000 | return val; | 1000 | return val; |
1001 | } | 1001 | } |
1002 | 1002 | ||
1003 | -#elif defined(__sparc_v9__) | 1003 | +#elif defined(__sparc_v8plus__) || defined(__sparc_v8plusa__) || defined(__sparc_v9__) |
1004 | 1004 | ||
1005 | static inline int64_t cpu_get_real_ticks (void) | 1005 | static inline int64_t cpu_get_real_ticks (void) |
1006 | { | 1006 | { |