RFR(XL): 8181449: Fix debug.hpp / globalDefinitions.hpp dependency inversion
Stefan Karlsson
stefan.karlsson at oracle.com
Thu Jun 22 06:49:05 UTC 2017
Hi Kim,
On 2017-06-22 02:29, Kim Barrett wrote:
>> On Jun 20, 2017, at 5:49 AM, Stefan Karlsson <stefan.karlsson at oracle.com> wrote:
>>
>> Hi Kim,
>
> Thanks for such a careful review of this largish and mostly very
> boring to read change. Responses inline.
>
> New webrevs:
> full: http://cr.openjdk.java.net/~kbarrett/8181449/hotspot.01/
> incr: http://cr.openjdk.java.net/~kbarrett/8181449/hotspot.01.inc/
Looks good. Just a couple of minor nits that would be nice to squash.
>
>
>> On 2017-06-17 02:33, Kim Barrett wrote:
>>> (2) http://cr.openjdk.java.net/~kbarrett/8181449/move_format_buffer/
>>> a. Moved FormatBuffer and related stuff from debug.[ch]pp to new
>>> formatBuffer.[ch]pp, and updated users to #include the new files.
>>> This includes moving the #include of jvm.h, which is no longer needed
>>> by debug.hpp.
>>> b. Made the #include of debug.hpp explicit when already otherwise
>>> modifying a file that uses assert-like macros, rather than depending
>>> on indirect inclusion of that file.
>>
>> The following has now been moved to formatBuffer.hpp:
>>
>> 116 // Used to format messages.
>> 117 typedef FormatBuffer<> err_msg;
>>
>> but formatBuffer.hpp is not explicitly included in all files using err_msg.
>
> It seems to be available everywhere needed via indirect includes,
> since there weren't any build failures.
>
> There are 25 files referring to err_msg, of which 18 lack a direct
> #include of the the new formatBuffer.hpp.
>
> Some uses look like they would be better eliminated by changing
> surrounding code. For example, callers of os::commit_memory_or_exit
> pay the cost of building the error message in an err_msg, even in the
> normal no-error case. Addressing that should be done in its own RFE.
> https://bugs.openjdk.java.net/browse/JDK-8182679
>
> Since I think existing uses of err_msg ought to be examined and some
> eliminated, and there isn't presently a build problem, I'd prefer to
> not address these missing includes at this time. But I could have my
> arm twisted...
Fine.
>
>>> (3) http://cr.openjdk.java.net/~kbarrett/8181449/move_pns/
>>> a. Moved print_native_stack to VMError class.
>>> b. Removed unused and undefined pd_obfuscate_location.
>>> c. Simplified #ifdef PRODUCT guard in ps().
>>
>> You removed the call to p->trace_stack(). Was that intentional?
>>
>> if (p->has_last_Java_frame()) {
>> // If the last_Java_fp is set we are in C land and
>> // can call the standard stack_trace function.
>> -#ifdef PRODUCT
>> p->print_stack();
>> } else {
>> +#ifdef PRODUCT
>> tty->print_cr("Cannot find the last Java frame, printing stack disabled.");
>> #else // !PRODUCT
>> - p->trace_stack();
>> - } else {
>
> I kept getting confused by this code while trying to figure out what
> to do with pd_ps, which is why I changed it. Seems I was even more
> confused than I thought, since I failed to see the difference between
> p->print_stack() and p->trace_stack(). Well spotted. I've reverted
> this change.
OK. I wonder if this code would have been easier to read with to #ifdef
PRODUCT sections.
>
>>> (4) http://cr.openjdk.java.net/~kbarrett/8181449/target_macros/
>>> a. Moved / combined definitions of BREAKPOINT macro from
>>> globalDefinitions_*.hpp to new breakpoint.hpp.
>>> b. Deleted all definitions of unused DEBUG_EXCEPTION macro.
>>> c. Moved gcc-specific ATTRIBUTE_PRINTF, pragma macros, and friends
>>> from globalDefinitions_gcc.hpp to new compilerWarnings.hpp. Also
>>> moved the default definitions for those macros from
>>> globalDefinitions.hpp to compilerWarnings.hpp.
>>> d. Added TARGET_COMPILER_HEADER[_INLINE] macros, similar to the
>>> CPU/OS/OS_CPU/_HEADER[_INLINE] macros, for including files based on
>>> new INCLUDE_SUFFIX_TARGET_COMPILER macro provided by the build system.
>>
>> ======================================================================
>> http://cr.openjdk.java.net/~kbarrett/8181449/target_macros/src/share/vm/utilities/globalDefinitions.hpp.frames.html
>>
>> sort order?:
>> 28 #include "utilities/macros.hpp"
>> 29 #include "utilities/compilerWarnings.hpp"
>>
>> or is this intentional? I see that compilerWarnings.hpp has the comment:
>> 64 // Defaults when not defined for the TARGET_COMPILER_xxx.
>>
>> which seems to suggest that macros.hpp need to be included before compilerWarnings.hpp.
>>
>> This used to work when globalDefinitions.hpp dispatched to globalDefinitions_<compiler>.hpp, but now this seems fragile.
>>
>> debug.hpp even includes compilerWarnings.hpp before macros.hpp, so it seems like the following attribute is not used when debug.hpp is included!:
>>
>> -#ifndef ATTRIBUTE_PRINTF
>> -#define ATTRIBUTE_PRINTF(fmt,vargs) __attribute__((format(printf, fmt, vargs)))
>> -#endif
>>
>> That seems like a bug to me.
>
> The mis-ordering was not intentional.
>
> TARGET_COMPILER_xxx is defined by the build system, not by macros.hpp.
>
> If compilerWarnings.hpp were changed to use the new
> TARGET_COMPILER_HEADER() dispatch (defined in macros.hpp), then the
> include would need to be added to compilerWarnings.hpp.
>
> So I don't think there's a bug here, but I'll fix the mis-ordered
> includes.
I agree that this isn't a bug.
>
>> ======================================================================
>> http://cr.openjdk.java.net/~kbarrett/8181449/target_macros/src/share/vm/utilities/globalDefinitions_gcc.hpp.udiff.html
>>
>> Maybe also get rid of the following line:
>> //----------------------------------------------------------------------------------------------------
>> -// Debugging
>
> Gone now.
I wasn't particularly clear on this request, and you cut out the
following part of my mail:
"or get rid of the following stray new line so that the code in the
different globalDefinitions files are more consistent."
With your last change the layout is still inconsistent:
globalDefinitions_gcc.hpp
195
196 // checking for nanness
globalDefinitions_sparcWorks.hpp
213
//----------------------------------------------------------------------------------------------------
214
215 // checking for nanness
globalDefinitions_visCPP.hpp
128
//----------------------------------------------------------------------------------------------------
129 // Checking for nanness
110
//----------------------------------------------------------------------------------------------------
globalDefinitions_xlc.hpp
111
112 // checking for nanness
Could you make all these files consistent in this regard before pushing
this?
>
>> http://cr.openjdk.java.net/~kbarrett/8181449/target_macros/src/share/vm/utilities/macros.hpp.frames.html
>>
>> 490 #define CPU_HEADER_STEM(basename) PASTE_TOKENS(basename, INCLUDE_SUFFIX_CPU)
>> 491 #define OS_HEADER_STEM(basename) PASTE_TOKENS(basename, INCLUDE_SUFFIX_OS)
>> 492 #define OS_CPU_HEADER_STEM(basename) PASTE_TOKENS(basename, PASTE_TOKENS(INCLUDE_SUFFIX_OS, INCLUDE_SUFFIX_CPU))
>> 493 #define TARGET_COMPILER_HEADER_STEM(basename) PASTE_TOKENS(basename, INCLUDE_SUFFIX_TARGET_COMPILER)
>>
>> We used to use the TARGET prefix for cpu/arch and os, for example:
>> […]
>> but changed it to:
>> +#include "utilities/macros.hpp"
>> +
>> +#include CPU_HEADER(c1_globals)
>> +#include OS_HEADER(c1_globals)
>>
>> with this patch:
>> http://hg.openjdk.java.net/jdk9/jdk9/hotspot/rev/8a5735c11a84
>>
>> Do we want to name the macro COMPILER_HEADER instead of TARGET_COMPILER_HEADER?
>
> I'd forgotten about the TARGET_ prefix in the old usage. Yes, dropping
> it for the new COMPILER_xxx macros would be consistent, and I mostly
> like it now that you've pointed it out. My only concern is that we've
> also got COMPILER1 and COMPILER2 based macros, and the visual
> distinction is a little subtle. But I'll go ahead and make the change.
OK
>
>> http://cr.openjdk.java.net/~kbarrett/8181449/flip_depend/src/share/vm/utilities/debug.hpp.frames.html
>>
>> Same comment as in (4) above.
>
> See reply above.
>
>>> b. Changed globals.hpp to #include globalDefinitions.hpp rather than
>>> debug.hpp, since it actually needs to former and not the latter.
>>> c. Changed jvmci_globals.cpp to #include jvm.h, since it's no longer
>>> being indirectly included via an indirect include of debug.hpp that
>>> was including globalDefinitions.hpp.
>>
>> I don't see that change.
>
> That change got moved to the earlier jvm_h patch, and I forgot to
> update this patch description.
OK
http://cr.openjdk.java.net/~kbarrett/8181449/hotspot.01.inc/src/share/vm/utilities/globalDefinitions.hpp.udiff.html
28 #include "utilities/macros.hpp"
29 #include "utilities/compilerWarnings.hpp"
30 #include "utilities/debug.hpp"
31
32 #include TARGET_COMPILER_HEADER(utilities/globalDefinitions)
33 // Defaults for macros that might be defined per compiler.
34 #ifndef NOINLINE
35 #define NOINLINE
36 #endif
Would you mind adding a newline between 32 and 32 before pushing?
Thanks,
StefanK
>
>
>
More information about the hotspot-dev
mailing list