I have submitted:

https://bugs.llvm.org//show_bug.cgi?id=41050

for the clang 8 code generation problem of
no code for setting r2 appropriately before
the:

bl . . . <00000018.plt_call.__cxa_begin_catch@@CXXABI_1.3>

in unoptimized code ( no -O ). For the -O2 code:

ld r2,40(r1)

is present but is being skipped by the libunwind return
to the code: it returns to the just-following bl
instruction (like above) instead.

In both cases:

(gdb) x/32i  0x100007c0
  0x100007c0 <00000018.plt_call.__cxa_begin_catch@@CXXABI_1.3>: std     
r2,40(r1)
  0x100007c4 <00000018.plt_call.__cxa_begin_catch@@CXXABI_1.3+4>:       ld      
r12,-32608(r2)
  0x100007c8 <00000018.plt_call.__cxa_begin_catch@@CXXABI_1.3+8>:       mtctr   
r12
  0x100007cc <00000018.plt_call.__cxa_begin_catch@@CXXABI_1.3+12>:      ld      
r11,-32592(r2)
  0x100007d0 <00000018.plt_call.__cxa_begin_catch@@CXXABI_1.3+16>:      ld      
r2,-32600(r2)
  0x100007d4 <00000018.plt_call.__cxa_begin_catch@@CXXABI_1.3+20>:      bctr
  0x100007d8 <00000018.plt_call.__cxa_begin_catch@@CXXABI_1.3+24>:      .long 
0x0
  0x100007dc <00000018.plt_call.__cxa_begin_catch@@CXXABI_1.3+28>:      .long 
0x0
. . .

with an inappropriate r2 value leads to jumping to
inappropriate places.

The example source code was:

#include <exception>

int main(void)
{
   try { throw std::exception(); }
   catch (std::exception& e) {}
   return 0;
}



Note:

This is from investigations of head -r345044 using
WITH_LLVM_LIBUNWIND= on powerpc64.


===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)

_______________________________________________
freebsd-toolchain@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"

Reply via email to