src/share/native/common/check_code.c
Print this page
rev 8725 : 8024854: Basic changes and files to build the class library on AIX
Contributed-by: luchsh@linux.vnet.ibm.com, spoole@linux.vnet.ibm.com, thomas.stuefe@sap.com
Reviewed-by: alanb, prr, sla, chegar, michaelm, mullan
@@ -88,10 +88,45 @@
#include "jni.h"
#include "jvm.h"
#include "classfile_constants.h"
#include "opcodes.in_out"
+/* On AIX malloc(0) and calloc(0, ...) return a NULL pointer, which is legal,
+ * but the code here does not handles it. So we wrap the methods and return non-NULL
+ * pointers even if we allocate 0 bytes.
+ */
+#ifdef _AIX
+static int aix_dummy;
+static void* aix_malloc(size_t len) {
+ if (len == 0) {
+ return &aix_dummy;
+ }
+ return malloc(len);
+}
+
+static void* aix_calloc(size_t n, size_t size) {
+ if (n == 0) {
+ return &aix_dummy;
+ }
+ return calloc(n, size);
+}
+
+static void aix_free(void* p) {
+ if (p == &aix_dummy) {
+ return;
+ }
+ free(p);
+}
+
+#undef malloc
+#undef calloc
+#undef free
+#define malloc aix_malloc
+#define calloc aix_calloc
+#define free aix_free
+#endif
+
#ifdef __APPLE__
/* use setjmp/longjmp versions that do not save/restore the signal mask */
#define setjmp _setjmp
#define longjmp _longjmp
#endif