RFR: 8205199: more Linux clang compile failures

David Holmes david.holmes at oracle.com
Wed Jun 20 11:58:55 UTC 2018


Looks fine Martin!

Thanks,
David

On 20/06/2018 6:07 AM, Martin Buchholz wrote:
> Thomas: Thanks.  Webrev updated.
> 
> 
> 8205199: more Linux clang compile failures
> http://cr.openjdk.java.net/~martin/webrevs/jdk/more-linux-clang-failures/
> https://bugs.openjdk.java.net/browse/JDK-8205199
> 
> 
> On Tue, Jun 19, 2018 at 12:50 PM, Thomas Stüfe <thomas.stuefe at gmail.com 
> <mailto:thomas.stuefe at gmail.com>> wrote:
> 
>     Hi all,
> 
>     debug.cpp: I'm sorry for the bug. That was not my best day, apparently.
> 
>     Please use the following patch, which just converts the context-store
>     function to a void().
> 
>     diff -r 770fcde6a437 src/hotspot/share/utilities/debug.cpp
>     --- a/src/hotspot/share/utilities/debug.cpp     Tue Jun 19 11:08:14
>     2018 +0200
>     +++ b/src/hotspot/share/utilities/debug.cpp     Tue Jun 19 21:46:59
>     2018 +0200
>     @@ -714,16 +714,13 @@
>         }
>       }
> 
>     -static bool store_context(const void* context) {
>     -  if (memcpy(&g_stored_assertion_context, context,
>     sizeof(ucontext_t)) == false) {
>     -    return false;
>     -  }
>     +static void store_context(const void* context) {
>     +  memcpy(&g_stored_assertion_context, context, sizeof(ucontext_t));
>       #if defined(__linux) && defined(PPC64)
>         // on Linux ppc64, ucontext_t contains pointers into itself which
>     have to be patched up
>         //  after copying the context (see comment in sys/ucontext.h):
>         *((void**) &g_stored_assertion_context.uc_mcontext.regs) =
>     &(g_stored_assertion_context.uc_mcontext.gp_regs);
>       #endif
>     -  return true;
>       }
> 
>       bool handle_assert_poison_fault(const void* ucVoid, const void*
>     faulting_address) {
>     @@ -734,9 +731,8 @@
>           if (ucVoid) {
>             const intx my_tid = os::current_thread_id();
>             if (Atomic::cmpxchg(my_tid, &g_asserting_thread, (intx)0) ==
>     0) {
>     -        if (store_context(ucVoid)) {
>     -          g_assertion_context = &g_stored_assertion_context;
>     -        }
>     +        store_context(ucVoid);
>     +        g_assertion_context = &g_stored_assertion_context;
>             }
>           }
>           return true;
> 
> 
>     The store never can go wrong, so returning an error is not needed.
> 
>     As a background, the function is part of a change which provides the
>     abilities to see register values in hs-err files in assert/guarantee
>     situations, see https://bugs.openjdk.java.net/browse/JDK-8191101
>     <https://bugs.openjdk.java.net/browse/JDK-8191101> .
> 
>     Thanks, Thomas
> 
> 
>     On Tue, Jun 19, 2018 at 3:29 PM, Martin Buchholz
>     <martinrb at google.com <mailto:martinrb at google.com>> wrote:
>      > if the check of memcpy's return value goes away, then
>     store_context always
>      > returns true, which seems fishy.   A code owner should decide
>     what should
>      > really happen here.
>      >
>      > On Mon, Jun 18, 2018 at 11:08 PM, David Holmes
>     <david.holmes at oracle.com <mailto:david.holmes at oracle.com>>
>      > wrote:
>      >>
>      >> On 19/06/2018 1:00 PM, Martin Buchholz wrote:
>      >>
>      >> AFAICS the memcpy can't fail and the dest is not NULL so the
>     "if" should
>      >> just disappear - no?
>      >>
>      >> David
>      >>
>      >>
>      >
> 
> 


More information about the hotspot-runtime-dev mailing list