https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118537

--- Comment #18 from Julian Andres Klode <j...@jak-linux.org> ---
(In reply to Sam James from comment #17)
> (In reply to Julian Andres Klode from comment #16)
> 
> I built apt and couldn't reproduce it using this yet with tip of 14 release
> branch and trunk too.

I need to try building gcc-14 branch itself and see for myself, also if I can
still reproduce it on AWS, then I can bisect it to the commit introducing the
issue.

Meanwhile, my initial attempt at cvise on the full .ii was not fruitful as I
mocked that up using if (Encoding != Closes) exit(42) and cvise helpfully
trimmed it down to Encoding != Closes; exit(42) - that is, it always failed.

I started a second attempt where I split out the offending
BaseHttpMethod::Loop() into its own source file and then cvised that and that
reduced it to:
void BaseHttpMethod::Loop() {
  while (1) {
    Run();
    Server = CreateServerState(URI(Queue->Uri));
    Server->Open();
    RequestState Req(this, Server.get());
    switch (Server->RunHeaders(Req, Queue->Uri));
  }
}


When downloading over https (i.e. Server->Open() makes OpenSSL calls), I get
the error, without OpenSSL calls, I do not get the error, so it sounds like
something messes up (register?) state there.

This boils down to:

        isb
// 0 "" 2
// basehttp-loop.cc:12:     time(&Date);
#NO_APP
        ldr     x0, [sp, 16]    //, %sfp
// basehttp-loop.cc:11:       : Server() {
        str     d15, [sp, 48]   // tmp332, MEM <vector(2) unsigned int> [(void
*)&Req]
// basehttp-loop.cc:12:     time(&Date);
        bl      time            //
// basehttp-loop.cc:13:     assert(Encoding == Closes);
        ldr     w0, [sp, 48]    //, Req.Encoding
        cmp     w0, 1   // Req.Encoding,
        bne     .L56            //,
// /usr/include/aarch64-linux-gnu/bits/stdio2.h:118:   return __printf_chk
(__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
        adrp    x1, .LC3        // tmp267,
        mov     w0, 2   //,
        add     x1, x1, :lo12:.LC3      //, tmp267,
        bl      __printf_chk            //
.LEHE3:
// basehttp-loop.cc:41:     __asm__("isb");
#APP
// 41 "basehttp-loop.cc" 1
        isb

Now per ARM, `D part of V8-V15 need to be saved`, but the only other mention of
`d15` is 

ldr     d15, [x0, #:lo12:.LC4]  // tmp332,

earlier in the function way before we call any of the other functions.

The question I'm not sure is D part of V15 caller-saved or callee-saved?

Reply via email to