src/share/tools/hsdis/Makefile

Wed, 29 Aug 2018 16:59:32 +0800

author
zhaixiang
date
Wed, 29 Aug 2018 16:59:32 +0800
changeset 9225
58828a330030
parent 6877
25e95bb91f45
child 9226
80768a44078a
permissions
-rw-r--r--

#7406 [C1] Fix fatal error: Thread holding lock at safepoint that vm can block on: tty_lock issue
Summary: Currently the MIPS FPU emulator uses eXecute Out of Line (XOL) on the stack to
handle instructions in the delay slots of FPU branches. Because of this MIPS
cannot have a non-executable stack. So just linking with -Wl,-z,noexecstack flag
Reviewed-by: aoqi

aoqi@0 1 #
aoqi@0 2 # Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
aoqi@0 3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
aoqi@0 4 #
aoqi@0 5 # This code is free software; you can redistribute it and/or modify it
aoqi@0 6 # under the terms of the GNU General Public License version 2 only, as
aoqi@0 7 # published by the Free Software Foundation.
aoqi@0 8 #
aoqi@0 9 # This code is distributed in the hope that it will be useful, but WITHOUT
aoqi@0 10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aoqi@0 11 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aoqi@0 12 # version 2 for more details (a copy is included in the LICENSE file that
aoqi@0 13 # accompanied this code).
aoqi@0 14 #
aoqi@0 15 # You should have received a copy of the GNU General Public License version
aoqi@0 16 # 2 along with this work; if not, write to the Free Software Foundation,
aoqi@0 17 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
aoqi@0 18 #
aoqi@0 19 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
aoqi@0 20 # or visit www.oracle.com if you need additional information or have any
aoqi@0 21 # questions.
aoqi@0 22 #
aoqi@0 23 #
aoqi@0 24
aoqi@0 25 # Single gnu makefile for solaris, linux and windows (windows requires cygwin and mingw)
aoqi@0 26
aoqi@0 27 # Default arch; it is changed below as needed.
aoqi@0 28 ARCH = i386
aoqi@0 29 OS = $(shell uname)
aoqi@0 30 AR = ar
aoqi@0 31
aoqi@0 32 ## OS = SunOS ##
aoqi@0 33 ifeq ($(OS),SunOS)
aoqi@0 34 CPU = $(shell uname -p)
aoqi@0 35 ARCH1=$(CPU:i586=i386)
aoqi@0 36 ARCH=$(ARCH1:i686=i386)
aoqi@0 37 OS = solaris
aoqi@0 38 CC = cc
aoqi@0 39 CFLAGS += -KPIC
aoqi@0 40 ifdef LP64
aoqi@0 41 ifeq ($(ARCH),sparc)
aoqi@0 42 ARCH = sparcv9
aoqi@0 43 endif
aoqi@0 44 ifeq ($(ARCH),i386)
aoqi@0 45 ARCH = amd64
aoqi@0 46 endif
aoqi@0 47 endif
aoqi@0 48 CFLAGS/sparcv9 += -xarch=v9
aoqi@0 49 CFLAGS/amd64 += -m64
aoqi@0 50 CFLAGS += $(CFLAGS/$(ARCH))
aoqi@0 51 DLDFLAGS += -G
aoqi@0 52 LDFLAGS += -ldl
aoqi@0 53 OUTFLAGS += -o $@
aoqi@0 54 LIB_EXT = .so
aoqi@0 55 else
aoqi@0 56 ## OS = Linux ##
aoqi@0 57 ifeq ($(OS),Linux)
aoqi@0 58 ifneq ($(MINGW),)
aoqi@0 59 LIB_EXT = .dll
aoqi@0 60 CPPFLAGS += -I$(TARGET_DIR)/include
aoqi@0 61 LDFLAGS += -L$(TARGET_DIR)/lib
aoqi@0 62 OS=windows
aoqi@0 63 ifneq ($(findstring x86_64-,$(MINGW)),)
aoqi@0 64 ARCH=amd64
aoqi@0 65 else
aoqi@0 66 ARCH=i386
aoqi@0 67 endif
aoqi@0 68 CC = $(MINGW)-gcc
aoqi@0 69 CONFIGURE_ARGS= --host=$(MINGW) --target=$(MINGW)
aoqi@0 70 else #linux
aoqi@0 71 CPU = $(shell uname -m)
aoqi@0 72 ARCH1=$(CPU:x86_64=amd64)
aoqi@0 73 ARCH=$(ARCH1:i686=i386)
aoqi@0 74 ifdef LP64
aoqi@0 75 CFLAGS/sparcv9 += -m64
aoqi@0 76 CFLAGS/amd64 += -m64
aoqi@0 77 CFLAGS/ppc64 += -m64
aoqi@0 78 else
aoqi@0 79 ARCH=$(ARCH1:amd64=i386)
aoqi@0 80 CFLAGS/i386 += -m32
aoqi@0 81 CFLAGS/sparc += -m32
aoqi@0 82 endif
aoqi@0 83 CFLAGS += $(CFLAGS/$(ARCH))
aoqi@0 84 CFLAGS += -fPIC
aoqi@432 85 ifeq ($(ARCH), mips64)
aoqi@432 86 CPUINFO = $(shell cat /proc/cpuinfo)
aoqi@432 87 ifneq ($(findstring Loongson,$(CPUINFO)),)
aoqi@432 88 CFLAGS += -DLOONGSON
aoqi@432 89 endif
aoqi@432 90 endif
aoqi@0 91 OS = linux
aoqi@0 92 LIB_EXT = .so
aoqi@0 93 CC = gcc
aoqi@0 94 endif
aoqi@0 95 CFLAGS += -O
aoqi@0 96 DLDFLAGS += -shared
zhaixiang@9225 97 DLDFLAGS += -Wl,-z,noexecstack
aoqi@0 98 LDFLAGS += -ldl
aoqi@0 99 OUTFLAGS += -o $@
aoqi@0 100 else
aoqi@0 101 ## OS = AIX ##
aoqi@0 102 ifeq ($(OS),AIX)
aoqi@0 103 OS = aix
aoqi@0 104 ARCH = ppc64
aoqi@0 105 CC = xlc_r
aoqi@0 106 CFLAGS += -DAIX -g -qpic=large -q64
aoqi@0 107 CFLAGS/ppc64 += -q64
aoqi@0 108 AR = ar -X64
aoqi@0 109 DLDFLAGS += -qmkshrobj -lz
aoqi@0 110 OUTFLAGS += -o $@
aoqi@0 111 LIB_EXT = .so
aoqi@0 112 else
aoqi@0 113 ## OS = Darwin ##
aoqi@0 114 ifeq ($(OS),Darwin)
aoqi@0 115 CPU = $(shell uname -m)
aoqi@0 116 ARCH1=$(CPU:x86_64=amd64)
aoqi@0 117 ARCH=$(ARCH1:i686=i386)
aoqi@0 118 ifdef LP64
aoqi@0 119 CFLAGS/sparcv9 += -m64
aoqi@0 120 CFLAGS/amd64 += -m64
aoqi@0 121 else
aoqi@0 122 ARCH=$(ARCH1:amd64=i386)
aoqi@0 123 CFLAGS/i386 += -m32
aoqi@0 124 CFLAGS/sparc += -m32
aoqi@0 125 endif # LP64
aoqi@0 126 CFLAGS += $(CFLAGS/$(ARCH))
aoqi@0 127 CFLAGS += -fPIC
aoqi@0 128 OS = macosx
aoqi@0 129 LIB_EXT = .dylib
aoqi@0 130 CC = gcc
aoqi@0 131 CFLAGS += -O
aoqi@0 132 # CFLAGS += -DZ_PREFIX
aoqi@0 133 DLDFLAGS += -shared
aoqi@0 134 DLDFLAGS += -lz
aoqi@0 135 LDFLAGS += -ldl
aoqi@0 136 OUTFLAGS += -o $@
aoqi@0 137 else
aoqi@0 138 ## OS = Windows ##
aoqi@0 139 OS = windows
aoqi@0 140 CC = gcc
aoqi@0 141 CFLAGS += /nologo /MD /W3 /WX /O2 /Fo$(@:.dll=.obj) /Gi-
aoqi@0 142 CFLAGS += LIBARCH=\"$(LIBARCH)\"
aoqi@0 143 DLDFLAGS += /dll /subsystem:windows /incremental:no \
aoqi@0 144 /export:decode_instruction
aoqi@0 145 OUTFLAGS += /link /out:$@
aoqi@0 146 LIB_EXT = .dll
aoqi@0 147 endif # Darwin
aoqi@0 148 endif # AIX
aoqi@0 149 endif # Linux
aoqi@0 150 endif # SunOS
aoqi@0 151
aoqi@0 152 LIBARCH = $(ARCH)
aoqi@0 153 ifdef LP64
aoqi@0 154 LIBARCH64/sparc = sparcv9
aoqi@0 155 LIBARCH64/i386 = amd64
aoqi@0 156 LIBARCH64 = $(LIBARCH64/$(ARCH))
aoqi@0 157 ifneq ($(LIBARCH64),)
aoqi@0 158 LIBARCH = $(LIBARCH64)
aoqi@0 159 endif # LIBARCH64/$(ARCH)
aoqi@0 160 endif # LP64
aoqi@0 161
aoqi@0 162 JDKARCH=$(LIBARCH:i386=i586)
aoqi@0 163
aoqi@0 164 ifeq ($(BINUTILS),)
aoqi@0 165 # Pop all the way out of the workspace to look for binutils.
aoqi@0 166 # ...You probably want to override this setting.
aoqi@0 167 BINUTILSDIR = $(shell cd build/binutils;pwd)
aoqi@0 168 else
aoqi@0 169 BINUTILSDIR = $(shell cd $(BINUTILS);pwd)
aoqi@0 170 endif
aoqi@0 171
aoqi@0 172 CPPFLAGS += -I$(BINUTILSDIR)/include -I$(BINUTILSDIR)/bfd -I$(TARGET_DIR)/bfd
aoqi@0 173 CPPFLAGS += -DLIBARCH_$(LIBARCH) -DLIBARCH=\"$(LIBARCH)\" -DLIB_EXT=\"$(LIB_EXT)\"
aoqi@0 174
aoqi@0 175 TARGET_DIR = build/$(OS)-$(JDKARCH)
aoqi@0 176 TARGET = $(TARGET_DIR)/hsdis-$(LIBARCH)$(LIB_EXT)
aoqi@0 177
aoqi@0 178 SOURCE = hsdis.c
aoqi@0 179
aoqi@0 180 LIBRARIES = $(TARGET_DIR)/bfd/libbfd.a \
aoqi@0 181 $(TARGET_DIR)/opcodes/libopcodes.a \
aoqi@0 182 $(TARGET_DIR)/libiberty/libiberty.a
aoqi@0 183
aoqi@0 184 DEMO_TARGET = $(TARGET_DIR)/hsdis-demo
aoqi@0 185 DEMO_SOURCE = hsdis-demo.c
aoqi@0 186
aoqi@0 187 .PHONY: all clean demo both
aoqi@0 188
aoqi@0 189 all: $(TARGET)
aoqi@0 190
aoqi@0 191 both: all all64
aoqi@0 192
aoqi@0 193 %64:
aoqi@0 194 $(MAKE) LP64=1 ${@:%64=%}
aoqi@0 195
aoqi@0 196 demo: $(TARGET) $(DEMO_TARGET)
aoqi@0 197
aoqi@0 198 $(LIBRARIES): $(TARGET_DIR) $(TARGET_DIR)/Makefile
aoqi@0 199 if [ ! -f $@ ]; then cd $(TARGET_DIR); make all-opcodes; fi
aoqi@0 200
aoqi@0 201 $(TARGET_DIR)/Makefile:
aoqi@0 202 (cd $(TARGET_DIR); CC=$(CC) CFLAGS="$(CFLAGS)" AR="$(AR)" $(BINUTILSDIR)/configure --disable-nls $(CONFIGURE_ARGS))
aoqi@0 203
aoqi@0 204 $(TARGET): $(SOURCE) $(LIBS) $(LIBRARIES) $(TARGET_DIR)
aoqi@0 205 $(CC) $(OUTFLAGS) $(CPPFLAGS) $(CFLAGS) $(SOURCE) $(DLDFLAGS) $(LIBRARIES)
aoqi@0 206
aoqi@0 207 $(DEMO_TARGET): $(DEMO_SOURCE) $(TARGET) $(TARGET_DIR)
aoqi@0 208 $(CC) $(OUTFLAGS) -DTARGET_DIR=\"$(TARGET_DIR)\" $(CPPFLAGS) -g $(CFLAGS/$(ARCH)) $(DEMO_SOURCE) $(LDFLAGS)
aoqi@0 209
aoqi@0 210 $(TARGET_DIR):
aoqi@0 211 [ -d $@ ] || mkdir -p $@
aoqi@0 212
aoqi@0 213 clean:
aoqi@0 214 rm -rf $(TARGET_DIR)

mercurial