1 /* 2 * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25 #ifndef SHARE_VM_UTILITIES_MACROS_HPP 26 #define SHARE_VM_UTILITIES_MACROS_HPP 27 28 // Use this to mark code that needs to be cleaned up (for development only) 29 #define NEEDS_CLEANUP 30 31 // Makes a string of the argument (which is not macro-expanded) 32 #define STR(a) #a 33 34 // Makes a string of the macro expansion of a 35 #define XSTR(a) STR(a) 36 37 // -DINCLUDE_<something>=0 | 1 can be specified on the command line to include 38 // or exclude functionality. 39 40 #ifndef INCLUDE_JVMTI 41 #define INCLUDE_JVMTI 1 42 #endif // INCLUDE_JVMTI 43 44 #if INCLUDE_JVMTI 45 #define JVMTI_ONLY(x) x 46 #define NOT_JVMTI(x) 47 #define NOT_JVMTI_RETURN 48 #define NOT_JVMTI_RETURN_(code) /* next token must be ; */ 49 #else 50 #define JVMTI_ONLY(x) 51 #define NOT_JVMTI(x) x 52 #define NOT_JVMTI_RETURN { return; } 53 #define NOT_JVMTI_RETURN_(code) { return code; } 54 #endif // INCLUDE_JVMTI 55 56 #ifndef INCLUDE_FPROF 57 #define INCLUDE_FPROF 1 58 #endif 59 60 #if INCLUDE_FPROF 61 #define NOT_FPROF_RETURN /* next token must be ; */ 62 #define NOT_FPROF_RETURN_(code) /* next token must be ; */ 63 #else 64 #define NOT_FPROF_RETURN {} 65 #define NOT_FPROF_RETURN_(code) { return code; } 66 #endif // INCLUDE_FPROF 67 68 #ifndef INCLUDE_VM_STRUCTS 69 #define INCLUDE_VM_STRUCTS 1 70 #endif 71 72 #if INCLUDE_VM_STRUCTS 73 #define NOT_VM_STRUCTS_RETURN /* next token must be ; */ 74 #define NOT_VM_STRUCTS_RETURN_(code) /* next token must be ; */ 75 #else 76 #define NOT_VM_STRUCTS_RETURN {} 77 #define NOT_VM_STRUCTS_RETURN_(code) { return code; } 78 #endif // INCLUDE_VM_STRUCTS 79 80 #ifndef INCLUDE_JNI_CHECK 81 #define INCLUDE_JNI_CHECK 1 82 #endif 83 84 #if INCLUDE_JNI_CHECK 85 #define NOT_JNI_CHECK_RETURN /* next token must be ; */ 86 #define NOT_JNI_CHECK_RETURN_(code) /* next token must be ; */ 87 #else 88 #define NOT_JNI_CHECK_RETURN {} 89 #define NOT_JNI_CHECK_RETURN_(code) { return code; } 90 #endif // INCLUDE_JNI_CHECK 91 92 #ifndef INCLUDE_SERVICES 93 #define INCLUDE_SERVICES 1 94 #endif 95 96 #if INCLUDE_SERVICES 97 #define NOT_SERVICES_RETURN /* next token must be ; */ 98 #define NOT_SERVICES_RETURN_(code) /* next token must be ; */ 99 #else 100 #define NOT_SERVICES_RETURN {} 101 #define NOT_SERVICES_RETURN_(code) { return code; } 102 #endif // INCLUDE_SERVICES 103 104 #ifndef INCLUDE_CDS 105 #define INCLUDE_CDS 1 106 #endif 107 108 #if INCLUDE_CDS 109 #define CDS_ONLY(x) x 110 #define NOT_CDS(x) 111 #define NOT_CDS_RETURN /* next token must be ; */ 112 #define NOT_CDS_RETURN_(code) /* next token must be ; */ 113 #else 114 #define CDS_ONLY(x) 115 #define NOT_CDS(x) x 116 #define NOT_CDS_RETURN {} 117 #define NOT_CDS_RETURN_(code) { return code; } 118 #endif // INCLUDE_CDS 119 120 #ifndef INCLUDE_MANAGEMENT 121 #define INCLUDE_MANAGEMENT 1 122 #endif // INCLUDE_MANAGEMENT 123 124 #if INCLUDE_MANAGEMENT 125 #define NOT_MANAGEMENT_RETURN /* next token must be ; */ 126 #define NOT_MANAGEMENT_RETURN_(code) /* next token must be ; */ 127 #else 128 #define NOT_MANAGEMENT_RETURN {} 129 #define NOT_MANAGEMENT_RETURN_(code) { return code; } 130 #endif // INCLUDE_MANAGEMENT 131 132 /* 133 * When INCLUDE_ALL_GCS is false the only garbage collectors 134 * included in the JVM are defaultNewGeneration and markCompact. 135 * 136 * When INCLUDE_ALL_GCS is true all garbage collectors are 137 * included in the JVM. 138 */ 139 #ifndef INCLUDE_ALL_GCS 140 #define INCLUDE_ALL_GCS 1 141 #endif // INCLUDE_ALL_GCS 142 143 #if INCLUDE_ALL_GCS 144 #define NOT_ALL_GCS_RETURN /* next token must be ; */ 145 #define NOT_ALL_GCS_RETURN_(code) /* next token must be ; */ 146 #else 147 #define NOT_ALL_GCS_RETURN {} 148 #define NOT_ALL_GCS_RETURN_(code) { return code; } 149 #endif // INCLUDE_ALL_GCS 150 151 #ifndef INCLUDE_NMT 152 #define INCLUDE_NMT 1 153 #endif // INCLUDE_NMT 154 155 #if INCLUDE_NMT 156 #define NOT_NMT_RETURN /* next token must be ; */ 157 #define NOT_NMT_RETURN_(code) /* next token must be ; */ 158 #else 159 #define NOT_NMT_RETURN {} 160 #define NOT_NMT_RETURN_(code) { return code; } 161 #endif // INCLUDE_NMT 162 163 #ifndef INCLUDE_JFR 164 #define INCLUDE_JFR 1 165 #endif 166 167 #if INCLUDE_JFR 168 #define JFR_ONLY(code) code 169 #else 170 #define JFR_ONLY(code) 171 #endif 172 173 // COMPILER1 variant 174 #ifdef COMPILER1 175 #ifdef COMPILER2 176 #define TIERED 177 #endif 178 #define COMPILER1_PRESENT(code) code 179 #define NOT_COMPILER1(code) 180 #else // COMPILER1 181 #define COMPILER1_PRESENT(code) 182 #define NOT_COMPILER1(code) code 183 #endif // COMPILER1 184 185 // COMPILER2 variant 186 #ifdef COMPILER2 187 #define COMPILER2_PRESENT(code) code 188 #define NOT_COMPILER2(code) 189 #else // COMPILER2 190 #define COMPILER2_PRESENT(code) 191 #define NOT_COMPILER2(code) code 192 #endif // COMPILER2 193 194 #ifdef TIERED 195 #define TIERED_ONLY(code) code 196 #define NOT_TIERED(code) 197 #else 198 #define TIERED_ONLY(code) 199 #define NOT_TIERED(code) code 200 #endif // TIERED 201 202 203 // PRODUCT variant 204 #ifdef PRODUCT 205 #define PRODUCT_ONLY(code) code 206 #define NOT_PRODUCT(code) 207 #define NOT_PRODUCT_ARG(arg) 208 #define PRODUCT_RETURN {} 209 #define PRODUCT_RETURN0 { return 0; } 210 #define PRODUCT_RETURN_(code) { code } 211 #else // PRODUCT 212 #define PRODUCT_ONLY(code) 213 #define NOT_PRODUCT(code) code 214 #define NOT_PRODUCT_ARG(arg) arg, 215 #define PRODUCT_RETURN /*next token must be ;*/ 216 #define PRODUCT_RETURN0 /*next token must be ;*/ 217 #define PRODUCT_RETURN_(code) /*next token must be ;*/ 218 #endif // PRODUCT 219 220 #ifdef CHECK_UNHANDLED_OOPS 221 #define CHECK_UNHANDLED_OOPS_ONLY(code) code 222 #define NOT_CHECK_UNHANDLED_OOPS(code) 223 #else 224 #define CHECK_UNHANDLED_OOPS_ONLY(code) 225 #define NOT_CHECK_UNHANDLED_OOPS(code) code 226 #endif // CHECK_UNHANDLED_OOPS 227 228 #ifdef CC_INTERP 229 #define CC_INTERP_ONLY(code) code 230 #define NOT_CC_INTERP(code) 231 #else 232 #define CC_INTERP_ONLY(code) 233 #define NOT_CC_INTERP(code) code 234 #endif // CC_INTERP 235 236 #ifdef ASSERT 237 #define DEBUG_ONLY(code) code 238 #define NOT_DEBUG(code) 239 #define NOT_DEBUG_RETURN /*next token must be ;*/ 240 // Historical. 241 #define debug_only(code) code 242 #else // ASSERT 243 #define DEBUG_ONLY(code) 244 #define NOT_DEBUG(code) code 245 #define NOT_DEBUG_RETURN {} 246 #define debug_only(code) 247 #endif // ASSERT 248 249 #ifdef _LP64 250 #define LP64_ONLY(code) code 251 #define NOT_LP64(code) 252 #else // !_LP64 253 #define LP64_ONLY(code) 254 #define NOT_LP64(code) code 255 #endif // _LP64 256 257 #ifdef LINUX 258 #define LINUX_ONLY(code) code 259 #define NOT_LINUX(code) 260 #else 261 #define LINUX_ONLY(code) 262 #define NOT_LINUX(code) code 263 #endif 264 265 #ifdef AIX 266 #define AIX_ONLY(code) code 267 #define NOT_AIX(code) 268 #else 269 #define AIX_ONLY(code) 270 #define NOT_AIX(code) code 271 #endif 272 273 #ifdef SOLARIS 274 #define SOLARIS_ONLY(code) code 275 #define NOT_SOLARIS(code) 276 #else 277 #define SOLARIS_ONLY(code) 278 #define NOT_SOLARIS(code) code 279 #endif 280 281 #ifdef _WINDOWS 282 #define WINDOWS_ONLY(code) code 283 #define NOT_WINDOWS(code) 284 #else 285 #define WINDOWS_ONLY(code) 286 #define NOT_WINDOWS(code) code 287 #endif 288 289 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) 290 #define BSD_ONLY(code) code 291 #define NOT_BSD(code) 292 #else 293 #define BSD_ONLY(code) 294 #define NOT_BSD(code) code 295 #endif 296 297 #ifdef _WIN64 298 #define WIN64_ONLY(code) code 299 #define NOT_WIN64(code) 300 #else 301 #define WIN64_ONLY(code) 302 #define NOT_WIN64(code) code 303 #endif 304 305 #if defined(ZERO) 306 #define ZERO_ONLY(code) code 307 #define NOT_ZERO(code) 308 #else 309 #define ZERO_ONLY(code) 310 #define NOT_ZERO(code) code 311 #endif 312 313 #if defined(SHARK) 314 #define SHARK_ONLY(code) code 315 #define NOT_SHARK(code) 316 #else 317 #define SHARK_ONLY(code) 318 #define NOT_SHARK(code) code 319 #endif 320 321 #if defined(IA32) || defined(AMD64) 322 #define X86 323 #define X86_ONLY(code) code 324 #define NOT_X86(code) 325 #else 326 #undef X86 327 #define X86_ONLY(code) 328 #define NOT_X86(code) code 329 #endif 330 331 #ifdef IA32 332 #define IA32_ONLY(code) code 333 #define NOT_IA32(code) 334 #else 335 #define IA32_ONLY(code) 336 #define NOT_IA32(code) code 337 #endif 338 339 // This is a REALLY BIG HACK, but on AIX <sys/systemcfg.h> unconditionally defines IA64. 340 // At least on AIX 7.1 this is a real problem because 'systemcfg.h' is indirectly included 341 // by 'pthread.h' and other common system headers. 342 343 #if defined(IA64) && !defined(AIX) 344 #define IA64_ONLY(code) code 345 #define NOT_IA64(code) 346 #else 347 #define IA64_ONLY(code) 348 #define NOT_IA64(code) code 349 #endif 350 351 #ifdef AMD64 352 #define AMD64_ONLY(code) code 353 #define NOT_AMD64(code) 354 #else 355 #define AMD64_ONLY(code) 356 #define NOT_AMD64(code) code 357 #endif 358 359 #ifdef AARCH64 360 #define AARCH64_ONLY(code) code 361 #define NOT_AARCH64(code) 362 #else 363 #define AARCH64_ONLY(code) 364 #define NOT_AARCH64(code) code 365 #endif 366 367 #ifdef SPARC 368 #define SPARC_ONLY(code) code 369 #define NOT_SPARC(code) 370 #else 371 #define SPARC_ONLY(code) 372 #define NOT_SPARC(code) code 373 #endif 374 375 #if defined(PPC32) || defined(PPC64) 376 #ifndef PPC 377 #define PPC 378 #endif 379 #define PPC_ONLY(code) code 380 #define NOT_PPC(code) 381 #else 382 #undef PPC 383 #define PPC_ONLY(code) 384 #define NOT_PPC(code) code 385 #endif 386 387 #ifdef PPC32 388 #define PPC32_ONLY(code) code 389 #define NOT_PPC32(code) 390 #else 391 #define PPC32_ONLY(code) 392 #define NOT_PPC32(code) code 393 #endif 394 395 #ifdef PPC64 396 #define PPC64_ONLY(code) code 397 #define NOT_PPC64(code) 398 #else 399 #define PPC64_ONLY(code) 400 #define NOT_PPC64(code) code 401 #endif 402 403 #ifdef E500V2 404 #define E500V2_ONLY(code) code 405 #define NOT_E500V2(code) 406 #else 407 #define E500V2_ONLY(code) 408 #define NOT_E500V2(code) code 409 #endif 410 411 #ifdef ARM 412 #define ARM_ONLY(code) code 413 #define NOT_ARM(code) 414 #else 415 #define ARM_ONLY(code) 416 #define NOT_ARM(code) code 417 #endif 418 419 #ifdef ARM32 420 #define ARM32_ONLY(code) code 421 #define NOT_ARM32(code) 422 #else 423 #define ARM32_ONLY(code) 424 #define NOT_ARM32(code) code 425 #endif 426 427 #ifdef JAVASE_EMBEDDED 428 #define EMBEDDED_ONLY(code) code 429 #define NOT_EMBEDDED(code) 430 #else 431 #define EMBEDDED_ONLY(code) 432 #define NOT_EMBEDDED(code) code 433 #endif 434 435 #ifdef VM_LITTLE_ENDIAN 436 #define LITTLE_ENDIAN_ONLY(code) code 437 #define BIG_ENDIAN_ONLY(code) 438 #else 439 #define LITTLE_ENDIAN_ONLY(code) 440 #define BIG_ENDIAN_ONLY(code) code 441 #endif 442 443 #define define_pd_global(type, name, value) const type pd_##name = value; 444 445 #endif // SHARE_VM_UTILITIES_MACROS_HPP