[llvm-bugs] [Bug 41997] New: Windows on Arm: x8 corrupted by virtual thunk

via llvm-bugs llvm-bugs at lists.llvm.org
Thu May 23 12:43:47 PDT 2019


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

            Bug ID: 41997
           Summary: Windows on Arm: x8 corrupted by virtual thunk
           Product: clang
           Version: unspecified
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: normal
          Priority: P
         Component: LLVM Codegen
          Assignee: unassignedclangbugs at nondot.org
          Reporter: Richard.Townsend at arm.com
                CC: llvm-bugs at lists.llvm.org, neeilans at live.com,
                    richard-llvm at metafoo.co.uk

Created attachment 21994
  --> https://bugs.llvm.org/attachment.cgi?id=21994&action=edit
Reproducer

When compiling the attached reproducer, Clang emits a vtable thunk (called from
the GetStats method) which looks like this:

A::`vcall'{0}':
00007FF7124C10FC  sub         sp,sp,#0x40  
00007FF7124C1100  stp         x1,x2,[sp,#8]  
00007FF7124C1104  stp         x3,x4,[sp,#0x18]  
00007FF7124C1108  stp         x5,x6,[sp,#0x28]  
00007FF7124C110C  str         x7,[sp,#0x38]  
00007FF7124C1110  ldr         x8,[x0]  
00007FF7124C1114  ldr         x8,[x8]  
00007FF7124C1118  add         sp,sp,#0x40  
00007FF7124C111C  br          x8  

This doesn't work when the function expects to return something via x8.
Attempting to do so will result in a crash.

For contrast, this is what MSVC produces:
00007FF6C59F1080  ldr         xip0,[x0]  
00007FF6C59F1084  ldr         xip0,[xip0]  
00007FF6C59F1088  br          xip0  

Full arguments are:
 "clang-cl.exe" "-cc1" "-triple" "aarch64-pc-windows-msvc19.16.27030"
"-emit-obj" "-mincremental-linker-compatible" "-disable-free" "-main-file-name"
"Clang-Reproducer-x8.cpp" "-mrelocation-model" "static" "-mthread-model"
"posix" "-relaxed-aliasing" "-fmath-errno" "-masm-verbose"
"-mconstructor-aliases" "-munwind-tables" "-target-cpu" "generic"
"-target-feature" "+neon" "-target-abi" "aapcs"
"-fallow-half-arguments-and-returns" "-D_MT" "-flto-visibility-public-std"
"--dependent-lib=libcmt" "--dependent-lib=oldnames" "-stack-protector" "2"
"-fdiagnostics-format" "msvc" "-gcodeview" "-debug-info-kind=limited"
"-momit-leaf-frame-pointer" "-ffunction-sections" "-O2" "-fdeprecated-macro"
"-ferror-limit" "19" "-fmessage-length" "120" "-fno-use-cxa-atexit"
"-fms-extensions" "-fms-compatibility" "-fms-compatibility-version=19.16.27030"
"-std=c++14" "-fdelayed-template-parsing" "-fobjc-runtime=gcc"
"-fdiagnostics-show-option" "-fcolor-diagnostics" "-vectorize-loops"
"-vectorize-slp" "-x" "c++" "Clang-Reproducer-x8.cpp" "-faddrsig"

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20190523/ae588ad2/attachment.html>


More information about the llvm-bugs mailing list