On 15 feb 2012, at 20:03, Paul Hohensee wrote: > On 2/15/12 1:58 PM, Staffan Larsen wrote: >> On 15 feb 2012, at 19:49, Paul Hohensee wrote: >> >>> Also, >>> >>> You can move the #include of mach.h into globalDefinitions_gcc.hpp, >>> in the #ifdef __APPLE__ section. That way, it won't cause a compile- >>> time error on non-osx platforms that don't have it. >> I dislike adding more stuff to globalDefinitions since that gets pulled in >> all over the place. I'd prefer to have #includes only where they are needed. > > globalDefinitions_gcc.hpp is where these sorts of #includes currently live, > so I'd go with present practice rather than doing something new. If > you want to put the include of mach.h in os_bsd.inline.hpp, then you > should do something similar with all the platform-dependent includes > in globalDefinitions_gcc.hpp.
I'd actually like to have it in osThread_bsd.hpp, but that isn't possible. I'll put in gloabalDefinitions_gcc.hpp. > >> >>> The declaration of _thread_id, thread_id() and set_thread_id() in os_bsd.hpp >>> can be put under a #ifdef __APPLE__, vis., >>> >>> #ifdef _ALLBSD_SOURCE >>> #ifdef __APPLE__ >>> thread_t _thread_id; >>> #else >>> pthread_t _thread_id; >>> #endif >>> #endif >>> >>> The uses of mach_thread_self() in os_bsd.cpp can be similarly conditioned. >>> >>> If there's a thread_t defined by non-osx bsd implementations, then >>> you don't need predication in os_bsd.hpp, though you'd still need it >>> in os_bsd.cpp. I'm assuming there's no mach_thread_self() on non-osx >>> bsd platforms. >> I could do that, but the question is how much work we should put into not >> trying to break something that we can't test anyway. There's no way, even if >> I do this that I can verify that it works. > > Even so, if we ever need to make hotspot work on non-osx bsd platforms, we'll > at least have markers to guide the work. OK - I'll try to fix things up. /Staffan > > Paul > >> >> /Staffan >> >>> Thanks, >>> >>> Paul >>> >>> On 2/15/12 1:33 PM, Paul Hohensee wrote: >>>> Imo we should at least try to make non-osx bsd builds work, since >>>> the original code did work for non-osx builds. This change doesn't >>>> do that. >>>> >>>> In globalDefinitions_gcc.hpp, if you keep the lines >>>> >>>> #undef ELF_AC >>>> #undef EFL_ID >>>> >>>> then you don't have to change vm_version_x86.hpp. >>>> >>>> Paul >>>> >>>> On 2/15/12 10:16 AM, Daniel D. Daugherty wrote: >>>>> The _ALLBSD_SOURCE symbol is defined by the HotSpot Makefile >>>>> infrastructure. >>>>> It is used to identify code specific to the BSD family of OSes. >>>>> The __APPLE__ symbol is defined by the Apple compiler(s) and it is used to >>>>> identify code specific to MacOS X. >>>>> >>>>> Typically you'll see something like: >>>>> >>>>> #ifdef _ALLBSD_SOURCE >>>>> >>>>> <code that works on all BSDs> >>>>> >>>>> #ifdef __APPLE__ >>>>> <code specific to MacOS X> >>>>> #else >>>>> <code for other BSDs> >>>>> #endif // __APPLE__ >>>>> #endif // _ALLBSD_SOURCE >>>>> >>>>> As for building on non-MacOS X BSDs, that would be nice, but we >>>>> don't have the infrastructure to do it. >>>>> >>>>> Dan >>>>> >>>>> On 2/15/12 6:57 AM, Mikael Gerdin wrote: >>>>>> Hi Staffan, >>>>>> >>>>>> It looks like you're adding Mac-specific stuff like thread_t and calls >>>>>> to ::mach_thread_self() inside _ALLBSD_SOURCE #ifdefs, are you sure this >>>>>> won't break BSD builds? >>>>>> Does the OSX compiler define _ALLBSD_SOURCE or is that for >>>>>> (free|net|open)bsd? >>>>>> It's too bad we don't do regular builds on any of the BSDs, otherwise >>>>>> this would have been easier to figure out. >>>>>> >>>>>> /Mikael >>>>>> >>>>>> >>>>>> On 2012-02-15 11:29, Staffan Larsen wrote: >>>>>>> Please review the following change: >>>>>>> >>>>>>> Bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7132070 >>>>>>> >>>>>>> Webrev: http://cr.openjdk.java.net/~sla/7132070/webrev.00/ >>>>>>> >>>>>>> This changes the value returned by OSThread::thread_id() and >>>>>>> os::current_thread_id() on macosx to return the mach thread_t instead of >>>>>>> pthread_t. There is a separate method OSThread:pthread_id() that returns >>>>>>> the pthread_t. >>>>>>> >>>>>>> The reason for this change is both that JFR would like a 4 byte value >>>>>>> for thread id, and that SA requires access to the thread_t. >>>>>>> >>>>>>> Thanks, >>>>>>> /Staffan