X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FStackMaps.rst;h=bd0fb946f9a50ea1bd5f4674aabe498ef24d7999;hb=75277b9f70a086b0dcdf5c71cdca6d58e9d29941;hp=0dac62b595d02c488d0f55baa5492dbf6e9eda23;hpb=e97b13228a46d1ae76cb77d8749f9867f817ebeb;p=oota-llvm.git diff --git a/docs/StackMaps.rst b/docs/StackMaps.rst index 0dac62b595d..bd0fb946f9a 100644 --- a/docs/StackMaps.rst +++ b/docs/StackMaps.rst @@ -313,12 +313,21 @@ format of this section follows: .. code-block:: none - uint32 : Reserved (header) + Header { + uint8 : Stack Map Version (current version is 1) + uint8 : Reserved (expected to be 0) + uint16 : Reserved (expected to be 0) + } + uint32 : NumFunctions uint32 : NumConstants + uint32 : NumRecords + StkSizeRecord[NumFunctions] { + uint64 : Function Address + uint64 : Stack Size + } Constants[NumConstants] { uint64 : LargeConstant } - uint32 : NumRecords StkMapRecord[NumRecords] { uint64 : PatchPoint ID uint32 : Instruction Offset @@ -330,12 +339,14 @@ format of this section follows: uint16 : Dwarf RegNum int32 : Offset or SmallConstant } + uint16 : Padding uint16 : NumLiveOuts LiveOuts[NumLiveOuts] uint16 : Dwarf RegNum uint8 : Reserved uint8 : Size in Bytes } + uint32 : Padding (only if required to align to 8 byte) } The first byte of each location encodes a type that indicates how to @@ -389,6 +400,10 @@ immediately after compiling a module and encode the information in its own format. Since the runtime controls the allocation of sections, it can reuse the same stack map space for multiple modules. +Stackmap support is currently only implemented for 64-bit +platforms. However, a 32-bit implementation should be able to use the +same format with an insignificant amount of wasted space. + .. _stackmap-section: Stack Map Section @@ -443,10 +458,11 @@ program could crash before the runtime could take back control. To enforce these semantics, stackmap and patchpoint intrinsics are considered to potentially read and write all memory. This may limit -optimization more than some clients desire. To address this problem -meta-data could be added to the intrinsic call to express aliasing, -thereby allowing optimizations to hoist certain loads above stack -maps. +optimization more than some clients desire. This limitation may be +avoided by marking the call site as "readonly". In the future we may +also allow meta-data to be added to the intrinsic call to express +aliasing, thereby allowing optimizations to hoist certain loads above +stack maps. Direct Stack Map Entries ^^^^^^^^^^^^^^^^^^^^^^^^