Fix funceval of a function returning 16 byte value type. (dotnet/coreclr#6997)
authorMike McLaughlin <mikem@microsoft.com>
Wed, 31 Aug 2016 19:27:12 +0000 (12:27 -0700)
committerGitHub <noreply@github.com>
Wed, 31 Aug 2016 19:27:12 +0000 (12:27 -0700)
commit8f33d58c3f381dc7327924eb4f8033a7e2e97365
treefcaf5b4b6a26a3bc6a6ea14975161daf15537ace
parent55c6aa100259b7c48ff8501d6ab5c83b25345d30
Fix funceval of a function returning 16 byte value type. (dotnet/coreclr#6997)

On Linux and OS X, structs less or equal to 16 bytes (instead of 8 bytes
on Windows) are enregistered. Only 8 bytes is being passed back to
debugger during a funceval of a property or method that returns a 16
byte value type.

To fix this, the 16 byte return value (which is only used for enregistered
structures of that size on xplat) needed to be plumbed from CallTargetWorker
through the MethodDescCallSite macros to the func eval code.

The func eval code needed to also deal with 16 byte results.

NUMBER_RETURNVALUE_SLOTS is the number of ARG_SLOTs that will contain the
maximum enregistered return value.

CordbEval:m_result is now ARG_SLOT[NUMBER_RETURNVALUE_SLOTS].

CallTargetWorker is now passed a pointer and the count of bytes to/of the
return value buffer.

Minor fix to SOS SymbolReader function.

Commit migrated from https://github.com/dotnet/coreclr/commit/97448547841a58e3b74459d35a48c2b7978d97bc
src/coreclr/src/ToolBox/SOS/NETCore/SymbolReader.cs
src/coreclr/src/debug/ee/debugger.cpp
src/coreclr/src/debug/ee/debugger.h
src/coreclr/src/debug/ee/funceval.cpp
src/coreclr/src/vm/callhelpers.cpp
src/coreclr/src/vm/callhelpers.h
src/coreclr/src/vm/interpreter.cpp
src/coreclr/src/vm/mngstdinterfaces.cpp