* Andrew Dinn: >> + // TODO - remove the following defines >> + // for testing we need to define the extra MAP_XXX flags used for >> + // persistent memory. they will eventually get defined by the >> + // system and included via sys/mman.h >> >> Do you really want to change implementation behavior based on which >> glibc headers (or kernel headers) were used to build the JDK? It's >> likely more appropriate to define the constants yourself if they are >> not available. There is some architecture variance for the MAP_* >> constants, but in case of MAP_SHARED_VALIDATE, even HPPA has the same >> definition. > > No, I guess I don't really want to change implementation behaviour based > on which glibc headers (or kernel headers) were used to build the JDK. > So, I think I need to modify this so the constants are always defined by > FileChannelImpl.c > > I have followed the Intel libpmem code in defining the values for these > constants. Can you provide details of the 'architecture variance' you > refer to above?
Just a quick note on that: Some of the constants in <sys/mman.h> vary between the Linux architectures for historic reasons. However, for MAP_SHARED_VALIDATE, the constant is consistent across all architectures supported by glibc and in the mainline kernel. You could add something like this to be on the safe side: #ifdef MAP_SHARED_VALIDATE #if MAP_SHARED_VALIDATE != 3 #error Unexpected value for MAP_SHARED_VALIDATE #endif #else /* !MAP_SHARED_VALIDATE */ #define MAP_SHARED_VALIDATE 3 #endif But I doubt that this is required for this constant.