diff --git a/goroutine-stack.excalidraw b/goroutine-stack.excalidraw index 3762939..686685c 100644 --- a/goroutine-stack.excalidraw +++ b/goroutine-stack.excalidraw @@ -4,85 +4,87 @@ "source": "https://excalidraw.com", "elements": [ { - "id": "-tilwVFl0bVKjP-ujOovv", "type": "text", + "version": 210, + "versionNonce": 1638567039, + "isDeleted": false, + "id": "-tilwVFl0bVKjP-ujOovv", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, "x": 899.1015625, "y": 309.6796875, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", "width": 193, "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "seed": 1357565986, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [], + "fontSize": 20, + "fontFamily": 1, + "text": "return address (pc)", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "type": "text", + "version": 240, + "versionNonce": 1299300081, + "isDeleted": false, + "id": "OrQSZbLpX0DY32TPfeE1s", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, - "groupIds": [], - "strokeSharpness": "sharp", - "seed": 1357565986, - "version": 129, - "versionNonce": 1798956222, - "isDeleted": false, - "boundElementIds": null, - "text": "return address (pc)", - "fontSize": 20, - "fontFamily": 1, - "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 - }, - { - "id": "OrQSZbLpX0DY32TPfeE1s", - "type": "text", + "angle": 0, "x": 899.05859375, - "y": 351.2578125, + "y": 350.87834821428555, + "strokeColor": "#e67700", + "backgroundColor": "transparent", "width": 131, "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "fillStyle": "hachure", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, + "seed": 2099280866, "groupIds": [], "strokeSharpness": "sharp", - "seed": 2099280866, - "version": 157, - "versionNonce": 1767001634, - "isDeleted": false, - "boundElementIds": null, - "text": "frame pointer", + "boundElementIds": [], "fontSize": 20, "fontFamily": 1, + "text": "frame pointer", + "baseline": 18, "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 + "verticalAlign": "top" }, { - "id": "f1L2s-8bZHGsy3hAVIZMM", "type": "line", - "x": 880.2578125, - "y": 342.58203125, - "width": 290.51953125, - "height": 0, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 149, + "versionNonce": 1254270111, + "isDeleted": false, + "id": "f1L2s-8bZHGsy3hAVIZMM", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 880.2578125, + "y": 342.58203125, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 290.51953125, + "height": 0, + "seed": 891989922, "groupIds": [], "strokeSharpness": "round", - "seed": 891989922, - "version": 79, - "versionNonce": 1180343550, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -94,33 +96,33 @@ ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": null }, { - "id": "VhliGF34bi79EFIeNSpcq", "type": "line", + "version": 166, + "versionNonce": 866040017, + "isDeleted": false, + "id": "VhliGF34bi79EFIeNSpcq", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, "x": 880.11328125, "y": 381.1328125, - "width": 290.6328125, - "height": 0, - "angle": 0, "strokeColor": "#000000", "backgroundColor": "transparent", - "fillStyle": "hachure", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, + "width": 290.6328125, + "height": 0, + "seed": 490236770, "groupIds": [], "strokeSharpness": "round", - "seed": 490236770, - "version": 98, - "versionNonce": 1474836962, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -132,62 +134,62 @@ ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": null }, { - "id": "jvQsJ2lSKwWYlzRfdy3Wh", "type": "text", + "version": 273, + "versionNonce": 1700968639, + "isDeleted": false, + "id": "TCFdOrKUwkyx6I4V7tsLM", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, "x": 897.51953125, - "y": 418.8125, + "y": 460.609375, + "strokeColor": "#364fc7", + "backgroundColor": "transparent", "width": 141, "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "fillStyle": "hachure", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, + "seed": 1629496497, "groupIds": [], "strokeSharpness": "sharp", - "seed": 2073603874, - "version": 140, - "versionNonce": 624577854, - "isDeleted": false, - "boundElementIds": null, - "text": "local variables", + "boundElementIds": [], "fontSize": 20, "fontFamily": 1, + "text": "local variables", + "baseline": 18, "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 + "verticalAlign": "top" }, { - "id": "1tdq4_bIX8CKQ6f05JzPZ", "type": "line", - "x": 879.328125, - "y": 486.81640625, - "width": 289.609375, - "height": 0, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 279, + "versionNonce": 567375537, + "isDeleted": false, + "id": "gcxFv8gLkEs-01nESaC_d", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 879.328125, + "y": 506.35546875, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 289.609375, + "height": 0, + "seed": 729017553, "groupIds": [], "strokeSharpness": "round", - "seed": 1958378210, - "version": 178, - "versionNonce": 624555390, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -199,62 +201,62 @@ ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": null }, { - "id": "t4afkyHqhkgGJgEhjZ_JQ", "type": "text", + "version": 396, + "versionNonce": 925583583, + "isDeleted": false, + "id": "t4afkyHqhkgGJgEhjZ_JQ", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, "x": 900.26953125, - "y": 522.0625, + "y": 531.12890625, + "strokeColor": "#5c940d", + "backgroundColor": "transparent", "width": 97, "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "fillStyle": "hachure", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, + "seed": 1194118818, "groupIds": [], "strokeSharpness": "sharp", - "seed": 1194118818, - "version": 308, - "versionNonce": 1537780066, - "isDeleted": false, - "boundElementIds": null, - "text": "arguments", + "boundElementIds": [], "fontSize": 20, "fontFamily": 1, + "text": "arguments", + "baseline": 18, "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 + "verticalAlign": "top" }, { - "id": "Qd8i6oVI_mlM_YYGCP7BM", "type": "line", - "x": 879.328125, - "y": 583.0546875, - "width": 289.609375, - "height": 0, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 280, + "versionNonce": 447838353, + "isDeleted": false, + "id": "Qd8i6oVI_mlM_YYGCP7BM", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 879.328125, + "y": 580.0546875, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 289.609375, + "height": 0, + "seed": 545474622, "groupIds": [], "strokeSharpness": "round", - "seed": 545474622, - "version": 209, - "versionNonce": 261789118, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -266,62 +268,62 @@ ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": null }, { - "id": "icoxl-K2hGvm26t0AudO_", "type": "text", + "version": 292, + "versionNonce": 1034736895, + "isDeleted": false, + "id": "icoxl-K2hGvm26t0AudO_", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, "x": 897.99609375, "y": 588.1640625, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", "width": 193, "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "fillStyle": "hachure", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, + "seed": 219335458, "groupIds": [], "strokeSharpness": "sharp", - "seed": 219335458, - "version": 214, - "versionNonce": 2002635938, - "isDeleted": false, - "boundElementIds": null, - "text": "return address (pc)", + "boundElementIds": [], "fontSize": 20, "fontFamily": 1, + "text": "return address (pc)", + "baseline": 18, "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 + "verticalAlign": "top" }, { - "id": "OJAhlQXimeySHdfCuTiLj", "type": "line", - "x": 880.11328125, - "y": 621.93359375, - "width": 290.6328125, - "height": 0, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 229, + "versionNonce": 1609973361, + "isDeleted": false, + "id": "OJAhlQXimeySHdfCuTiLj", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 880.11328125, + "y": 621.93359375, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 290.6328125, + "height": 0, + "seed": 150030306, "groupIds": [], "strokeSharpness": "round", - "seed": 150030306, - "version": 161, - "versionNonce": 262948478, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -333,62 +335,62 @@ ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": null }, { - "id": "aGkSceWFkchSvI35bfPS7", "type": "text", + "version": 284, + "versionNonce": 1885855007, + "isDeleted": false, + "id": "aGkSceWFkchSvI35bfPS7", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, "x": 899.05859375, - "y": 630.1953125, + "y": 629.8214285714284, + "strokeColor": "#e67700", + "backgroundColor": "transparent", "width": 131, "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "fillStyle": "hachure", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, + "seed": 1852770750, "groupIds": [], "strokeSharpness": "sharp", - "seed": 1852770750, - "version": 201, - "versionNonce": 1157621858, - "isDeleted": false, - "boundElementIds": null, - "text": "frame pointer", + "boundElementIds": [], "fontSize": 20, "fontFamily": 1, + "text": "frame pointer", + "baseline": 18, "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 + "verticalAlign": "top" }, { - "id": "hx5BRllngdEOcNhzXamJ2", "type": "line", - "x": 879.328125, - "y": 664.52734375, - "width": 289.609375, - "height": 0, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 318, + "versionNonce": 275204177, + "isDeleted": false, + "id": "hx5BRllngdEOcNhzXamJ2", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 879.328125, + "y": 664.52734375, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 289.609375, + "height": 0, + "seed": 1766846370, "groupIds": [], "strokeSharpness": "round", - "seed": 1766846370, - "version": 250, - "versionNonce": 2040186558, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -400,33 +402,33 @@ ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": null }, { - "id": "OmmzCgB8661rxeoBD_m1W", "type": "line", - "x": 878.4075520833333, - "y": 41.99440440900213, - "width": 0, - "height": 751.5995974668178, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 429, + "versionNonce": 46981439, + "isDeleted": false, + "id": "OmmzCgB8661rxeoBD_m1W", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 878.4075520833333, + "y": 42.25221690900213, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 0, + "height": 888.7319158650453, + "seed": 1645430654, "groupIds": [], "strokeSharpness": "round", - "seed": 1645430654, - "version": 333, - "versionNonce": 392727586, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -434,37 +436,37 @@ ], [ 0, - 751.5995974668178 + 888.7319158650453 ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": null }, { - "id": "Tp5z4aXMgu7xrROBPq61m", "type": "line", + "version": 471, + "versionNonce": 98309681, + "isDeleted": false, + "id": "Tp5z4aXMgu7xrROBPq61m", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, "x": 1169.765625, "y": 41.51729490991488, - "width": 0, - "height": 761.4669406505653, - "angle": 0, "strokeColor": "#000000", "backgroundColor": "transparent", - "fillStyle": "hachure", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, + "width": 0, + "height": 886.2316667318429, + "seed": 1473325218, "groupIds": [], "strokeSharpness": "round", - "seed": 1473325218, - "version": 336, - "versionNonce": 1515142910, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -472,66 +474,66 @@ ], [ 0, - 761.4669406505653 + 886.2316667318429 ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": null }, { - "id": "1d9E2v-yaIMJR5f8mm_vu", "type": "text", - "x": 1005.40625, - "y": 759.1480034722222, - "width": 22, - "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 429, + "versionNonce": 1715233119, + "isDeleted": false, + "id": "1d9E2v-yaIMJR5f8mm_vu", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 909.4352678571429, + "y": 832.6692088293648, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 106, + "height": 25, + "seed": 1561384382, "groupIds": [], "strokeSharpness": "sharp", - "seed": 1561384382, - "version": 146, - "versionNonce": 1447735102, - "isDeleted": false, - "boundElementIds": null, - "text": "....", + "boundElementIds": [], "fontSize": 20, "fontFamily": 1, + "text": "free space", + "baseline": 18, "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 + "verticalAlign": "top" }, { - "id": "NPKP8QSAUMl9C8e3ZlID7", "type": "line", - "x": 877.78515625, - "y": 303.35546875, - "width": 292.0625, - "height": 0, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 140, + "versionNonce": 1933322257, + "isDeleted": false, + "id": "NPKP8QSAUMl9C8e3ZlID7", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 877.78515625, + "y": 303.35546875, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 292.0625, + "height": 0, + "seed": 127838818, "groupIds": [], "strokeSharpness": "round", - "seed": 127838818, - "version": 72, - "versionNonce": 208235426, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -543,204 +545,191 @@ ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": null }, { - "id": "syqzluWxmz-NE8mrhudl2", "type": "text", + "version": 487, + "versionNonce": 1024057233, + "isDeleted": false, + "id": "UEQW6As2u2N7Pfi4ZI3K2", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, "x": 880.0065104166667, - "y": -85.25217013888894, + "y": -133.36545138888894, + "strokeColor": "#000000", + "backgroundColor": "transparent", "width": 293, "height": 45, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "fillStyle": "hachure", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, + "seed": 510521823, "groupIds": [], "strokeSharpness": "sharp", - "seed": 692837054, - "version": 316, - "versionNonce": 1508775806, - "isDeleted": false, - "boundElementIds": null, - "text": "Goroutine Stack", + "boundElementIds": [], "fontSize": 36, "fontFamily": 1, + "text": "Goroutine Stack", + "baseline": 32, "textAlign": "left", - "verticalAlign": "top", - "baseline": 32 + "verticalAlign": "top" }, { - "id": "guDEtzKiU6ou4lv92SvTX", "type": "text", + "version": 617, + "versionNonce": 1115618801, + "isDeleted": false, + "id": "guDEtzKiU6ou4lv92SvTX", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, "x": 717.6914930555561, - "y": 50.63923611111119, + "y": -39.09513888888881, + "strokeColor": "#000000", + "backgroundColor": "transparent", "width": 123, "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "seed": 140835710, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [ + "TxE7oNEYJaS8t3rcdLQlt" + ], + "fontSize": 20, + "fontFamily": 1, + "text": "high address", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "type": "text", + "version": 783, + "versionNonce": 1735185823, + "isDeleted": false, + "id": "z5bhp7tVfHca1yjVWHg7q", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, - "groupIds": [], - "strokeSharpness": "sharp", - "seed": 140835710, - "version": 432, - "versionNonce": 688967678, - "isDeleted": false, - "boundElementIds": [ - "TxE7oNEYJaS8t3rcdLQlt" - ], - "text": "high address", - "fontSize": 20, - "fontFamily": 1, - "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 - }, - { - "id": "z5bhp7tVfHca1yjVWHg7q", - "type": "text", + "angle": 0, "x": 722.2730902777784, - "y": 755.1171006944446, + "y": 910.8447792658731, + "strokeColor": "#000000", + "backgroundColor": "transparent", "width": 127, "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "fillStyle": "hachure", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, + "seed": 1285921250, "groupIds": [], "strokeSharpness": "sharp", - "seed": 1285921250, - "version": 547, - "versionNonce": 1227011810, - "isDeleted": false, "boundElementIds": [ "TxE7oNEYJaS8t3rcdLQlt" ], - "text": "low addresss", "fontSize": 20, "fontFamily": 1, + "text": "low addresss", + "baseline": 18, "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 + "verticalAlign": "top" }, { - "id": "T3y__UGff5USKupeLYc6k", "type": "text", - "x": 1289.6263888888898, - "y": 634.075, - "width": 186, - "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 346, + "versionNonce": 850139089, + "isDeleted": false, + "id": "T3y__UGff5USKupeLYc6k", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 1289.6263888888898, + "y": 634.075, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "width": 408, + "height": 50, + "seed": 1584925922, "groupIds": [], "strokeSharpness": "sharp", - "seed": 1584925922, - "version": 141, - "versionNonce": 1529711266, - "isDeleted": false, "boundElementIds": [ "KoNFG6D2UwOnInqP6scyw" ], - "text": "rbp (CPU Register)", "fontSize": 20, "fontFamily": 1, + "text": "rbp (CPU Register)\nStarting point for frame pointer unwinding", + "baseline": 43, "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 + "verticalAlign": "top" }, { - "id": "KoNFG6D2UwOnInqP6scyw", "type": "arrow", - "x": 1276.4449652777787, - "y": 646.4994791666668, - "width": 97.04427083333371, - "height": 0, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 319, + "versionNonce": 798935487, + "isDeleted": false, + "id": "KoNFG6D2UwOnInqP6scyw", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 1276.4449652777787, + "y": 646.4994791666668, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "width": 144.6997763464774, + "height": 1.1794937424173213, + "seed": 395029666, "groupIds": [], "strokeSharpness": "round", - "seed": 395029666, - "version": 188, - "versionNonce": 1411901026, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, 0 ], [ - -97.04427083333371, - 0 + -144.6997763464774, + 1.1794937424173213 ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": "arrow" }, { - "id": "TxE7oNEYJaS8t3rcdLQlt", "type": "arrow", - "x": 776.7348958333336, - "y": 89.64097222222239, - "width": 1.3845998178826449, - "height": 656.3894852307242, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 1382, + "versionNonce": 903542193, + "isDeleted": false, + "id": "TxE7oNEYJaS8t3rcdLQlt", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 776.7207592675044, + "y": -0.0934027777776123, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1.411305899214426, + "height": 901.8515388021526, + "seed": 1279642978, "groupIds": [], "strokeSharpness": "round", - "seed": 1279642978, - "version": 820, - "versionNonce": 1333373118, - "isDeleted": false, - "boundElementIds": null, - "points": [ - [ - 0, - 0 - ], - [ - 1.3845998178826449, - 656.3894852307242 - ] - ], - "lastCommittedPoint": null, + "boundElementIds": [], "startBinding": { "elementId": "guDEtzKiU6ou4lv92SvTX", "focus": 0.04083615781670036, @@ -751,89 +740,102 @@ "focus": -0.11976222857387889, "gap": 9.086643241497995 }, + "points": [ + [ + 0, + 0 + ], + [ + 1.411305899214426, + 901.8515388021526 + ] + ], + "lastCommittedPoint": null, "startArrowhead": null, "endArrowhead": "arrow" }, { - "id": "gMCvQz3kAlikOWFyYp9h1", "type": "text", + "version": 315, + "versionNonce": 1521611985, + "isDeleted": false, + "id": "VQFds_uqQ8b1HVEy9_zKm", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, "x": 899.5876736111111, "y": 49.97916666666665, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", "width": 193, "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "seed": 387033247, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [], + "fontSize": 20, + "fontFamily": 1, + "text": "return address (pc)", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "type": "text", + "version": 349, + "versionNonce": 255006609, + "isDeleted": false, + "id": "nd2aujH4HrB228mGCMGeN", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, - "groupIds": [], - "strokeSharpness": "sharp", - "seed": 1824441662, - "version": 222, - "versionNonce": 742864354, - "isDeleted": false, - "boundElementIds": null, - "text": "return address (pc)", - "fontSize": 20, - "fontFamily": 1, - "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 - }, - { - "id": "nd2aujH4HrB228mGCMGeN", - "type": "text", + "angle": 0, "x": 899.5447048611111, - "y": 91.27083333333337, + "y": 90.89136904761892, + "strokeColor": "#e67700", + "backgroundColor": "transparent", "width": 131, "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "fillStyle": "hachure", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, + "seed": 999678398, "groupIds": [], "strokeSharpness": "sharp", - "seed": 999678398, - "version": 265, - "versionNonce": 123277630, - "isDeleted": false, - "boundElementIds": null, - "text": "frame pointer", + "boundElementIds": [], "fontSize": 20, "fontFamily": 1, + "text": "frame pointer", + "baseline": 18, "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 + "verticalAlign": "top" }, { - "id": "2Ryy3fd72z7APGOqfWytO", "type": "line", - "x": 881.0303819444445, - "y": 82.59505208333337, - "width": 290.51953125, - "height": 0, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 242, + "versionNonce": 47752703, + "isDeleted": false, + "id": "2Ryy3fd72z7APGOqfWytO", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 881.0303819444445, + "y": 82.59505208333337, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 290.51953125, + "height": 0, + "seed": 169295202, "groupIds": [], "strokeSharpness": "round", - "seed": 169295202, - "version": 172, - "versionNonce": 57289122, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -845,33 +847,33 @@ ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": null }, { - "id": "at_dzh07LmADZUxZhWKOR", "type": "line", - "x": 880.5993923611111, - "y": 121.14583333333337, - "width": 290.6328125, - "height": 0, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 258, + "versionNonce": 820772209, + "isDeleted": false, + "id": "at_dzh07LmADZUxZhWKOR", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 880.5993923611111, + "y": 121.14583333333337, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 290.6328125, + "height": 0, + "seed": 1976805566, "groupIds": [], "strokeSharpness": "round", - "seed": 1976805566, - "version": 190, - "versionNonce": 1591753086, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -883,62 +885,62 @@ ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": null }, { - "id": "LXvZCBS51l0CXzmtSYXn0", "type": "text", - "x": 898.7738715277777, - "y": 158.86024305555554, - "width": 99, - "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 694, + "versionNonce": 569478687, + "isDeleted": false, + "id": "LXvZCBS51l0CXzmtSYXn0", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 899.8637152777777, + "y": 198.05946180555554, + "strokeColor": "#364fc7", + "backgroundColor": "transparent", + "width": 141, + "height": 25, + "seed": 756780158, "groupIds": [], "strokeSharpness": "sharp", - "seed": 756780158, - "version": 373, - "versionNonce": 695772514, - "isDeleted": false, - "boundElementIds": null, - "text": "local vars", + "boundElementIds": [], "fontSize": 20, "fontFamily": 1, + "text": "local variables", + "baseline": 18, "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 + "verticalAlign": "top" }, { - "id": "q9ysYPYbMiCcmZtv2vVXJ", "type": "line", - "x": 879.8142361111111, - "y": 226.82942708333337, - "width": 289.609375, - "height": 0, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 379, + "versionNonce": 1515005777, + "isDeleted": false, + "id": "JvMAJHqC_2F4YeyfHgiP8", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 879.8142361111111, + "y": 242.95052083333337, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 289.609375, + "height": 0, + "seed": 1659717585, "groupIds": [], "strokeSharpness": "round", - "seed": 264187966, - "version": 270, - "versionNonce": 1138252222, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -950,62 +952,62 @@ ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": null }, { - "id": "PDkk2Fq9FJJ6bZqt39fW-", "type": "text", + "version": 572, + "versionNonce": 435712575, + "isDeleted": false, + "id": "PDkk2Fq9FJJ6bZqt39fW-", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, "x": 898.3641493055555, - "y": 250.85590277777783, + "y": 257.7777777777778, + "strokeColor": "#5c940d", + "backgroundColor": "transparent", "width": 97, "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "fillStyle": "hachure", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, + "seed": 2130452350, "groupIds": [], "strokeSharpness": "sharp", - "seed": 2130452350, - "version": 459, - "versionNonce": 1203874082, - "isDeleted": false, - "boundElementIds": null, - "text": "arguments", + "boundElementIds": [], "fontSize": 20, "fontFamily": 1, + "text": "arguments", + "baseline": 18, "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 + "verticalAlign": "top" }, { - "id": "1RvWKSXhiL6oJ2hEyuXr-", "type": "line", - "x": 878.2712673611111, - "y": 43.368489583333336, - "width": 292.0625, - "height": 0, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 246, + "versionNonce": 1974342961, + "isDeleted": false, + "id": "vu2xeIjyxgKXL198gWCHV", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 878.2712673611111, + "y": 41.368489583333336, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 292.0625, + "height": 0, + "seed": 1324909649, "groupIds": [], "strokeSharpness": "round", - "seed": 1080551842, - "version": 164, - "versionNonce": 1298297342, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -1017,180 +1019,151 @@ ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": null }, { - "id": "trQEtdmw81i1bPAfCCqbI", "type": "text", - "x": 923.3737847222227, - "y": 820.3076388888892, - "width": 189, - "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "fillStyle": "hachure", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "strokeSharpness": "sharp", - "seed": 940795390, - "version": 172, - "versionNonce": 1155483810, + "version": 890, + "versionNonce": 1910321777, "isDeleted": false, - "boundElementIds": null, - "text": "\"Top\" of the Stack", - "fontSize": 20, - "fontFamily": 1, - "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 - }, - { "id": "qZS-hLMRA9x5fkuuK5-OT", - "type": "text", - "x": 616.4032986111115, - "y": 322.58541666666684, - "width": 141, - "height": 150, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 550.6659939236115, + "y": 322.61471354166684, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 182, + "height": 100, + "seed": 618095742, "groupIds": [], "strokeSharpness": "sharp", - "seed": 618095742, - "version": 729, - "versionNonce": 682621630, - "isDeleted": false, - "boundElementIds": null, - "text": "stacks grow\nfrom high to\nlow memory\naddresses for\nhistorical\nreasons.", + "boundElementIds": [], "fontSize": 20, "fontFamily": 1, + "text": "stacks grow from\nhigh to low memory\naddresses for\nhistorical reasons", + "baseline": 93, "textAlign": "left", - "verticalAlign": "top", - "baseline": 143 + "verticalAlign": "top" }, { - "id": "iSBp6bbfXtVoFELhIM29b", "type": "text", + "version": 538, + "versionNonce": 913721105, + "isDeleted": false, + "id": "iSBp6bbfXtVoFELhIM29b", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, "x": 1184.737065972223, "y": 93.53463541666684, - "width": 399, - "height": 25, - "angle": 0, "strokeColor": "#000000", "backgroundColor": "transparent", - "fillStyle": "hachure", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, + "width": 399, + "height": 25, + "seed": 1587737022, "groupIds": [], "strokeSharpness": "sharp", - "seed": 1587737022, - "version": 440, - "versionNonce": 1353072930, - "isDeleted": false, "boundElementIds": [ "05vm0VOe3NmovqFSN-J6Q" ], - "text": "last frame pointer usually holds value 0", "fontSize": 20, "fontFamily": 1, + "text": "last frame pointer usually holds value 0", + "baseline": 18, "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 + "verticalAlign": "top" }, { - "id": "fITJohz9s2h0xtGVeUIq2", "type": "text", - "x": 914.6194444444449, - "y": -3.8373263888885845, + "version": 363, + "versionNonce": 1212296831, + "isDeleted": false, + "id": "fITJohz9s2h0xtGVeUIq2", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 914.8772569444449, + "y": -64.00529513888858, + "strokeColor": "#000000", + "backgroundColor": "transparent", "width": 225, "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "fillStyle": "hachure", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "strokeSharpness": "sharp", "seed": 1274516322, - "version": 182, - "versionNonce": 757707746, - "isDeleted": false, - "boundElementIds": null, - "text": "\"Bottom\" of the Stack", + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [], "fontSize": 20, "fontFamily": 1, + "text": "\"Bottom\" of the Stack", + "baseline": 18, "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 + "verticalAlign": "top" }, { - "id": "QbrNxfRYs9hN3FePgvFhF", "type": "text", - "x": 909.1514756944443, - "y": 694.828125, - "width": 99, - "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 708, + "versionNonce": 1998404849, + "isDeleted": false, + "id": "QbrNxfRYs9hN3FePgvFhF", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 901.6202256944443, + "y": 721.19921875, + "strokeColor": "#364fc7", + "backgroundColor": "transparent", + "width": 141, + "height": 25, + "seed": 1104286754, "groupIds": [], "strokeSharpness": "sharp", - "seed": 1104286754, - "version": 504, - "versionNonce": 1732961342, - "isDeleted": false, - "boundElementIds": null, - "text": "local vars", + "boundElementIds": [], "fontSize": 20, "fontFamily": 1, + "text": "local variables", + "baseline": 18, "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 + "verticalAlign": "top" }, { - "id": "1GLPfUH8Z7W_t0PC9b3FR", "type": "line", - "x": 877.4618055555557, - "y": 751.9709201388889, + "version": 418, + "versionNonce": 34997919, + "isDeleted": false, + "id": "GmQsMrwper1O3K9gA8tWg", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 876.9383680555557, + "y": 758.0099826388889, + "strokeColor": "#000000", + "backgroundColor": "transparent", "width": 289.609375, "height": 0, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "fillStyle": "hachure", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, + "seed": 269281041, "groupIds": [], "strokeSharpness": "round", - "seed": 121009086, - "version": 327, - "versionNonce": 846399138, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -1202,103 +1175,107 @@ ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": null }, { - "id": "8tbPs-gfFPV1PLBeqJ0OY", "type": "arrow", - "x": 1272.104253472223, - "y": 737.5782126006675, - "width": 90.72482638888914, - "height": 0.13515704511178228, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 450, + "versionNonce": 1887369041, + "isDeleted": false, + "id": "8tbPs-gfFPV1PLBeqJ0OY", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 1275.8423952132944, + "y": 734.1885245739942, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 138.81742915203927, + "height": 3.0283018974593006, + "seed": 1132364734, "groupIds": [], "strokeSharpness": "round", - "seed": 1132364734, - "version": 176, - "versionNonce": 656387198, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": { + "focus": 0.5551220110883551, + "gap": 10.610165550595184, + "elementId": "h6aNxbhfiKFd4t3ptxZb9" + }, + "endBinding": null, "points": [ [ 0, 0 ], [ - -90.72482638888914, - -0.13515704511178228 + -138.81742915203927, + 3.0283018974593006 ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": "arrow" }, { - "id": "ETNZFcmww3iVo3JUw7ZIU", "type": "text", - "x": 1282.2826388888896, - "y": 722.245138888889, - "width": 189, - "height": 25, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 359, + "versionNonce": 1120587185, + "isDeleted": false, + "id": "h6aNxbhfiKFd4t3ptxZb9", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 1282.3070529513896, + "y": 721.917990451389, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 189, + "height": 50, + "seed": 1523613087, "groupIds": [], "strokeSharpness": "sharp", - "seed": 721763710, - "version": 162, - "versionNonce": 1310835170, - "isDeleted": false, "boundElementIds": [ "KoNFG6D2UwOnInqP6scyw", "8tbPs-gfFPV1PLBeqJ0OY" ], - "text": "rsp (CPU Register)", "fontSize": 20, "fontFamily": 1, + "text": "rsp (CPU Register)\n\"Top\" of the Stack", + "baseline": 43, "textAlign": "left", - "verticalAlign": "top", - "baseline": 18 + "verticalAlign": "top" }, { - "id": "si2GNwgDzg7YPe4ANmQ2U", "type": "arrow", - "x": 862.6723958333336, - "y": 642.7546874999996, - "width": 51.22265625, - "height": 271.69921875000006, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 405, + "versionNonce": 422933681, + "isDeleted": false, + "id": "si2GNwgDzg7YPe4ANmQ2U", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 862.2929315476192, + "y": 641.9957589285709, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "width": 51.22265625, + "height": 271.69921875000006, + "seed": 751229502, "groupIds": [], "strokeSharpness": "round", - "seed": 751229502, - "version": 328, - "versionNonce": 1903154494, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -1318,33 +1295,33 @@ ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": "arrow" }, { - "id": "ma97F_WLOzJl2N4GEXiTB", "type": "arrow", - "x": 867.9692708333336, - "y": 358.7351562499996, - "width": 50, - "height": 256.69921875000006, - "angle": 0, - "strokeColor": "#000000", - "backgroundColor": "transparent", + "version": 571, + "versionNonce": 1452157663, + "isDeleted": false, + "id": "ma97F_WLOzJl2N4GEXiTB", "fillStyle": "hachure", "strokeWidth": 1, "strokeStyle": "solid", "roughness": 1, "opacity": 100, + "angle": 0, + "x": 867.9692708333336, + "y": 358.7351562499996, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "width": 50, + "height": 256.69921875000006, + "seed": 464847586, "groupIds": [], "strokeSharpness": "round", - "seed": 464847586, - "version": 495, - "versionNonce": 2115085730, - "isDeleted": false, - "boundElementIds": null, + "boundElementIds": [], + "startBinding": null, + "endBinding": null, "points": [ [ 0, @@ -1364,18 +1341,499 @@ ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, "startArrowhead": null, "endArrowhead": "arrow" }, { - "id": "Z5dHKyxlw7fA3Phl82Uxu", "type": "arrow", - "x": 1177.5317708333337, - "y": 232.43828124999953, - "width": 42.13671875, - "height": 250.21484375, + "version": 1092, + "versionNonce": 1556497649, + "isDeleted": false, + "id": "Z5dHKyxlw7fA3Phl82Uxu", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1178.8136158929847, + "y": 248.83074734704346, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 51.37737548261293, + "height": 252.22296707033004, + "seed": 1326514850, + "groupIds": [], + "strokeSharpness": "round", + "boundElementIds": [], + "startBinding": null, + "endBinding": { + "elementId": "Owca-nOyQKbE8BFlBxKxt", + "focus": -1.0737811656225826, + "gap": 8.449996520126092 + }, + "points": [ + [ + 0, + 0 + ], + [ + 44.98043172606344, + 25.616462474384633 + ], + [ + 37.379008734991885, + 214.08507296545608 + ], + [ + -6.39694375654949, + 252.22296707033004 + ] + ], + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow" + }, + { + "type": "text", + "version": 795, + "versionNonce": 1146116511, + "isDeleted": false, + "id": "V6I1c9v3y8WHm3cF6I_nT", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1239.9829427083337, + "y": 326.37968749999953, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 350, + "height": 100, + "seed": 143546558, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [], + "fontSize": 20, + "fontFamily": 1, + "text": "This is called a \"Stack Frame\"\nand represents a function call\nin a stack trace. There are three\nframes shown in this graphic.", + "baseline": 93, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "type": "text", + "version": 450, + "versionNonce": 1835105951, + "isDeleted": false, + "id": "Owca-nOyQKbE8BFlBxKxt", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1179.1001302083337, + "y": 509.5037109374996, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 358, + "height": 75, + "seed": 1563887778, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [ + "Z5dHKyxlw7fA3Phl82Uxu" + ], + "fontSize": 20, + "fontFamily": 1, + "text": "Unlike C Go passes all arguments\non stack instead of using registers.\nThis will change in the near future.", + "baseline": 68, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "type": "line", + "version": 119, + "versionNonce": 153355857, + "isDeleted": false, + "id": "AbAEdHerw7ER59-GI81k_", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 878.3872395833336, + "y": -32.218395727277255, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 0, + "height": 87.84027072727679, + "seed": 1210487455, + "groupIds": [], + "strokeSharpness": "round", + "boundElementIds": [], + "startBinding": null, + "endBinding": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 87.84027072727679 + ] + ], + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "type": "line", + "version": 132, + "versionNonce": 264438591, + "isDeleted": false, + "id": "C8nso9m9tP98Jt5E1D7Ip", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1170.8911458333337, + "y": -32.89684041202115, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 0, + "height": 86.13980916202068, + "seed": 257281887, + "groupIds": [], + "strokeSharpness": "round", + "boundElementIds": [], + "startBinding": null, + "endBinding": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 86.13980916202068 + ] + ], + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "type": "line", + "version": 565, + "versionNonce": 72422449, + "isDeleted": false, + "id": "_3pPNrK6YuSQjBqGW7wK9", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 880.0245536581103, + "y": -32.94081101190521, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 292.11832828633476, + "height": 0, + "seed": 576100785, + "groupIds": [], + "strokeSharpness": "round", + "boundElementIds": [], + "startBinding": null, + "endBinding": null, + "points": [ + [ + 0, + 0 + ], + [ + 292.11832828633476, + 0 + ] + ], + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "type": "text", + "version": 711, + "versionNonce": 1948140383, + "isDeleted": false, + "id": "JtduhO9FtVXiGthsEME_s", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 901.0834201388894, + "y": -8.540451388889313, + "strokeColor": "#5c940d", + "backgroundColor": "transparent", + "width": 97, + "height": 25, + "seed": 1195234783, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [], + "fontSize": 20, + "fontFamily": 1, + "text": "arguments", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "type": "text", + "version": 762, + "versionNonce": 597138449, + "isDeleted": false, + "id": "aqPp7EtLStYxvRpdzBe_O", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 563.5758556547621, + "y": 777.5459821428567, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 187, + "height": 125, + "seed": 1050129759, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [], + "fontSize": 20, + "fontFamily": 1, + "text": "stacks start with\n2kb and are grown\nby the runtime if\nthey run out of\nfree space", + "baseline": 118, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "type": "text", + "version": 134, + "versionNonce": 123502463, + "isDeleted": false, + "id": "UdDnT20JjG70ay68dsaA1", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 899.0552083333336, + "y": 138.53593749999953, + "strokeColor": "#087f5b", + "backgroundColor": "transparent", + "width": 131, + "height": 25, + "seed": 512097855, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [], + "fontSize": 20, + "fontFamily": 1, + "text": "return values", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "type": "line", + "version": 400, + "versionNonce": 172784625, + "isDeleted": false, + "id": "q9ysYPYbMiCcmZtv2vVXJ", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 879.6775173611111, + "y": 181.52473958333337, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 289.609375, + "height": 0, + "seed": 264187966, + "groupIds": [], + "strokeSharpness": "round", + "boundElementIds": [], + "startBinding": null, + "endBinding": null, + "points": [ + [ + 0, + 0 + ], + [ + 289.609375, + 0 + ] + ], + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "type": "line", + "version": 292, + "versionNonce": 1807628191, + "isDeleted": false, + "id": "1tdq4_bIX8CKQ6f05JzPZ", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 879.84375, + "y": 443.07421875, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 289.609375, + "height": 0, + "seed": 1958378210, + "groupIds": [], + "strokeSharpness": "round", + "boundElementIds": [], + "startBinding": null, + "endBinding": null, + "points": [ + [ + 0, + 0 + ], + [ + 289.609375, + 0 + ] + ], + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "type": "text", + "version": 330, + "versionNonce": 1612305873, + "isDeleted": false, + "id": "RcaqFLGr0xtNDydzRdkBv", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 897.2578125, + "y": 396.73939732142856, + "strokeColor": "#087f5b", + "backgroundColor": "transparent", + "width": 131, + "height": 25, + "seed": 713700241, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [], + "fontSize": 20, + "fontFamily": 1, + "text": "return values", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "type": "line", + "version": 430, + "versionNonce": 661908415, + "isDeleted": false, + "id": "1GLPfUH8Z7W_t0PC9b3FR", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 876.9383680555557, + "y": 707.8029513888889, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 289.609375, + "height": 0, + "seed": 121009086, + "groupIds": [], + "strokeSharpness": "round", + "boundElementIds": [], + "startBinding": null, + "endBinding": null, + "points": [ + [ + 0, + 0 + ], + [ + 289.609375, + 0 + ] + ], + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "type": "text", + "version": 384, + "versionNonce": 719385521, + "isDeleted": false, + "id": "jvQsJ2lSKwWYlzRfdy3Wh", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 900.07421875, + "y": 674.02734375, + "strokeColor": "#087f5b", + "backgroundColor": "transparent", + "width": 131, + "height": 25, + "seed": 2073603874, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [], + "fontSize": 20, + "fontFamily": 1, + "text": "return values", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "id": "5vqIviqFQtSO8-siHpg5p", + "type": "line", + "x": 876.2906994047623, + "y": 929.5794642857138, + "width": 294.2466517857142, + "height": 0, "angle": 0, "strokeColor": "#000000", "backgroundColor": "transparent", @@ -1386,9 +1844,9 @@ "opacity": 100, "groupIds": [], "strokeSharpness": "round", - "seed": 1326514850, - "version": 355, - "versionNonce": 1645092286, + "seed": 409020689, + "version": 79, + "versionNonce": 2102216703, "isDeleted": false, "boundElementIds": null, "points": [ @@ -1397,33 +1855,629 @@ 0 ], [ - 39.66796875, - 35.484375 - ], - [ - 41.23046875, - 219.77734375 - ], - [ - -0.90625, - 250.21484375 + 294.2466517857142, + 0 ] ], "lastCommittedPoint": null, "startBinding": null, "endBinding": null, - "startArrowhead": "arrow", + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "W3fTZpakc-8QjaetG0cN9", + "type": "line", + "x": 1168.818601190476, + "y": -31.423604910714808, + "width": 2.3073997477870307, + "height": 273.4834749635202, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "#fa5252", + "fillStyle": "hachure", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "round", + "seed": 2129132415, + "version": 291, + "versionNonce": 453819121, + "isDeleted": false, + "boundElementIds": null, + "points": [ + [ + 0, + 0 + ], + [ + -2.3073997477870307, + 273.4834749635202 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "GoctOPyDPr0ruQ5p_t4GI", + "type": "line", + "x": 1167.283444940476, + "y": 244.92405133928517, + "width": 1.9819755530261318, + "height": 262.2473628734691, + "angle": 0, + "strokeColor": "#5c940d", + "backgroundColor": "#fa5252", + "fillStyle": "hachure", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "round", + "seed": 302299121, + "version": 415, + "versionNonce": 1969580191, + "isDeleted": false, + "boundElementIds": null, + "points": [ + [ + 0, + 0 + ], + [ + -1.9819755530261318, + 262.2473628734691 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "AnKuTyR-Yn34hlkTlYEAE", + "type": "line", + "x": 1167.974851190476, + "y": 509.83030133928514, + "width": 1.508634120865736, + "height": 247.85109453341795, + "angle": 0, + "strokeColor": "#1864ab", + "backgroundColor": "#fa5252", + "fillStyle": "hachure", + "strokeWidth": 4, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "round", + "seed": 337661279, + "version": 561, + "versionNonce": 209335505, + "isDeleted": false, + "boundElementIds": null, + "points": [ + [ + 0, + 0 + ], + [ + -1.508634120865736, + 247.85109453341795 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "NJrYoV5BmuXYRJefmqEmZ", + "type": "rectangle", + "x": 1941.2896949404767, + "y": -4.237779017857321, + "width": 388.9794921875, + "height": 610.2246093749998, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 709975935, + "version": 398, + "versionNonce": 1754665329, + "isDeleted": false, + "boundElementIds": [ + "Rmo7xoPHvdiRDFNSZPzQW", + "LpvHHYESLtHurjVPI_1lQ", + "4xyOvNcA2LAjouuoLNueU" + ] + }, + { + "id": "pAsvMoI1-2vH10W8Jt4Ev", + "type": "arrow", + "x": 1122.2125465029767, + "y": 59.51222098214279, + "width": 837.8918185763891, + "height": 64.14518542030592, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "round", + "seed": 1683236657, + "version": 1728, + "versionNonce": 1630230687, + "isDeleted": false, + "boundElementIds": null, + "points": [ + [ + 0, + 0 + ], + [ + 126.220703125, + -33.57421875 + ], + [ + 469.1680593881838, + -49.517364239750314 + ], + [ + 722.1002604166667, + -33.535807291666686 + ], + [ + 837.8918185763891, + 14.6278211805556 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": { + "elementId": "tcYhO-m3xZ4XqjKG411wi", + "focus": -0.6155217839845086, + "gap": 5.383572048611654 + }, + "startArrowhead": null, "endArrowhead": "arrow" }, { - "id": "V6I1c9v3y8WHm3cF6I_nT", - "type": "text", - "x": 1238.9966145833337, - "y": 348.70390624999953, - "width": 126, - "height": 50, + "id": "KXS7HCAvDwSXjQdgOFLst", + "type": "arrow", + "x": 1112.1093750000002, + "y": 321.35364084828205, + "width": 839.4863095238097, + "height": 96.06505267863929, "angle": 0, - "strokeColor": "#000000", + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "round", + "seed": 688538143, + "version": 1207, + "versionNonce": 1826387551, + "isDeleted": false, + "boundElementIds": null, + "points": [ + [ + 0, + 0 + ], + [ + 33.488200092362376, + -0.6161196292571276 + ], + [ + 112.44203869047647, + -96.06505267863929 + ], + [ + 839.4863095238097, + -78.09901535225038 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": { + "elementId": "psntamkQi7l_9QvAdhvas", + "focus": -0.09329030983998449, + "gap": 7.798502604167538 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "LpvHHYESLtHurjVPI_1lQ", + "type": "arrow", + "x": 1130.6158668154767, + "y": 602.3979631696427, + "width": 822.9140625000005, + "height": 205.9456380208332, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "round", + "seed": 1613994897, + "version": 1041, + "versionNonce": 1487967921, + "isDeleted": false, + "boundElementIds": null, + "points": [ + [ + 0, + 0 + ], + [ + 449.9609375, + -16.806640625 + ], + [ + 728.8982802824919, + -181.48479056287755 + ], + [ + 822.9140625000005, + -205.9456380208332 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": { + "elementId": "lvBY3AgJbUZW1aRbYEMCK", + "focus": -0.008905709466715364, + "gap": 6.586914062500341 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "type": "text", + "version": 509, + "versionNonce": 980127135, + "isDeleted": false, + "id": "ETNZFcmww3iVo3JUw7ZIU", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1542.4242404513896, + "y": 747.035177951389, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "width": 287, + "height": 75, + "seed": 721763710, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [ + "KoNFG6D2UwOnInqP6scyw", + "8tbPs-gfFPV1PLBeqJ0OY", + "4xyOvNcA2LAjouuoLNueU" + ], + "fontSize": 20, + "fontFamily": 1, + "text": "rip (CPU register)\nHolds the pc of the currently\nexecuting function", + "baseline": 68, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "id": "4xyOvNcA2LAjouuoLNueU", + "type": "arrow", + "x": 1823.1500465029767, + "y": 728.9702287946427, + "width": 130.1406250000009, + "height": 184.17945832647797, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "round", + "seed": 1661160415, + "version": 249, + "versionNonce": 1126822673, + "isDeleted": false, + "boundElementIds": null, + "points": [ + [ + 0, + 0 + ], + [ + 66.42578124999977, + -169.658203125 + ], + [ + 130.1406250000009, + -184.17945832647797 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "ETNZFcmww3iVo3JUw7ZIU", + "focus": 0.5098168028905308, + "gap": 18.064949156746252 + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "type": "text", + "version": 572, + "versionNonce": 103236945, + "isDeleted": false, + "id": "2b7StTM6DFp1hORA0yOEL", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1963.4499782986118, + "y": 9.78873697916665, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "width": 152, + "height": 25, + "seed": 393047793, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [], + "fontSize": 20, + "fontFamily": 1, + "text": "runtime.goexit()", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "type": "text", + "version": 562, + "versionNonce": 860057567, + "isDeleted": false, + "id": "oTtJA7vjSADdG-3dBAJh7", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1957.8103298611113, + "y": 185.13541666666663, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "width": 130, + "height": 25, + "seed": 616240095, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [], + "fontSize": 20, + "fontFamily": 1, + "text": "runtime.main()", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "type": "text", + "version": 756, + "versionNonce": 1020549489, + "isDeleted": false, + "id": "cXAyllJ-hBtzqP5Bd1Y5d", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1962.2927517361115, + "y": 483.0748697916666, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "width": 93, + "height": 25, + "seed": 1710481233, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [], + "fontSize": 20, + "fontFamily": 1, + "text": "main.foo()", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "id": "Rz3tYRAQn9xre0Y8O4WEi", + "type": "line", + "x": 1939.7311011904774, + "y": 172.2726376488095, + "width": 388.7011718750002, + "height": 0, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "round", + "seed": 1280644273, + "version": 100, + "versionNonce": 1893217105, + "isDeleted": false, + "boundElementIds": null, + "points": [ + [ + 0, + 0 + ], + [ + 388.7011718750002, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "O0_CQmfyU20XEzYCAI9Z4", + "type": "line", + "x": 1940.5367652529774, + "y": 323.1613095238095, + "width": 388.9501953125002, + "height": 0, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "round", + "seed": 899060127, + "version": 106, + "versionNonce": 34347985, + "isDeleted": false, + "boundElementIds": null, + "points": [ + [ + 0, + 0 + ], + [ + 388.9501953125002, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "type": "text", + "version": 593, + "versionNonce": 1516706833, + "isDeleted": false, + "id": "BTFfLoqkn8ZmJPArv4ktB", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1958.0544704861115, + "y": 336.81022135416663, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "width": 100, + "height": 25, + "seed": 1652008081, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElementIds": [], + "fontSize": 20, + "fontFamily": 1, + "text": "main.main()", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top" + }, + { + "id": "GXXqHwlUr4iGZ0_gM_XOq", + "type": "line", + "x": 1942.6754371279774, + "y": 460.5685360863095, + "width": 388.9501953125002, + "height": 0, + "angle": 0, + "strokeColor": "#c92a2a", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "round", + "seed": 2016559953, + "version": 166, + "versionNonce": 1374641535, + "isDeleted": false, + "boundElementIds": null, + "points": [ + [ + 0, + 0 + ], + [ + 388.9501953125002, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "CQlyOziza5HixQOp8Fyn4", + "type": "text", + "x": 1985.1266090029774, + "y": -88.4783389136905, + "width": 296, + "height": 45, + "angle": 0, + "strokeColor": "#c92a2a", "backgroundColor": "transparent", "fillStyle": "hachure", "strokeWidth": 1, @@ -1432,25 +2486,25 @@ "opacity": 100, "groupIds": [], "strokeSharpness": "sharp", - "seed": 143546558, - "version": 228, - "versionNonce": 764907582, + "seed": 454698001, + "version": 91, + "versionNonce": 1836845887, "isDeleted": false, "boundElementIds": null, - "text": "Stack Frame\n", - "fontSize": 20, + "text": "Executable Code", + "fontSize": 36, "fontFamily": 1, "textAlign": "left", "verticalAlign": "top", - "baseline": 43 + "baseline": 32 }, { - "id": "viDIbEoL1cjGl9Or1jVQk", + "id": "lvBY3AgJbUZW1aRbYEMCK", "type": "text", - "x": 1182.588628472223, - "y": 51.233854166666845, - "width": 676, - "height": 25, + "x": 1960.1168433779774, + "y": 365.3400204613095, + "width": 142, + "height": 60, "angle": 0, "strokeColor": "#000000", "backgroundColor": "transparent", @@ -1461,28 +2515,27 @@ "opacity": 100, "groupIds": [], "strokeSharpness": "sharp", - "seed": 1625361314, - "version": 570, - "versionNonce": 229460258, + "seed": 1262966335, + "version": 145, + "versionNonce": 1152971167, "isDeleted": false, "boundElementIds": [ - "shedVB8WMbAHN6r_PcXqN", - "eVe0CAodN6w0ejuLaSyw4" + "LpvHHYESLtHurjVPI_1lQ" ], - "text": "last return address points into runtime internals written in assembly", - "fontSize": 20, + "text": "... machine code ...\ncall main.foo()\n... machine code ...", + "fontSize": 16, "fontFamily": 1, "textAlign": "left", "verticalAlign": "top", - "baseline": 18 + "baseline": 54 }, { - "id": "Owca-nOyQKbE8BFlBxKxt", + "id": "psntamkQi7l_9QvAdhvas", "type": "text", - "x": 1183.5044270833337, - "y": 509.6257812499996, - "width": 386, - "height": 50, + "x": 1959.3941871279774, + "y": 212.2394345238095, + "width": 142, + "height": 60, "angle": 0, "strokeColor": "#000000", "backgroundColor": "transparent", @@ -1493,17 +2546,81 @@ "opacity": 100, "groupIds": [], "strokeSharpness": "sharp", - "seed": 1563887778, - "version": 195, - "versionNonce": 1505704226, + "seed": 1593927025, + "version": 182, + "versionNonce": 907272977, "isDeleted": false, - "boundElementIds": null, - "text": "Unlike C/C++ Go passes all arguments\non stack instead of using registers", - "fontSize": 20, + "boundElementIds": [ + "KXS7HCAvDwSXjQdgOFLst" + ], + "text": "... machine code ...\ncall main.main()\n... machine code ...", + "fontSize": 16, "fontFamily": 1, "textAlign": "left", "verticalAlign": "top", - "baseline": 43 + "baseline": 54 + }, + { + "id": "tcYhO-m3xZ4XqjKG411wi", + "type": "text", + "x": 1965.4879371279774, + "y": 45.42791108630951, + "width": 142, + "height": 60, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 267493791, + "version": 278, + "versionNonce": 1443663729, + "isDeleted": false, + "boundElementIds": [ + "pAsvMoI1-2vH10W8Jt4Ev" + ], + "text": "... machine code ...\ncall runtime.main()\n... machine code ...", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 54 + }, + { + "id": "PfGhkziKyrCVztnt3sX1i", + "type": "text", + "x": 1961.1471168154774, + "y": 509.48064546130945, + "width": 142, + "height": 60, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 700408977, + "version": 148, + "versionNonce": 328033887, + "isDeleted": false, + "boundElementIds": [ + "4xyOvNcA2LAjouuoLNueU" + ], + "text": "... machine code ...\n... machine code ...\n... machine code ...", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 54 } ], "appState": { diff --git a/goroutine-stack.png b/goroutine-stack.png index 2c05712..fcbbb8c 100644 Binary files a/goroutine-stack.png and b/goroutine-stack.png differ diff --git a/stack-traces.md b/stack-traces.md index aadd2ee..79b6555 100644 --- a/stack-traces.md +++ b/stack-traces.md @@ -1,6 +1,8 @@ +This document was last updated for `go1.16` but probably still applies to older/newer versions for the most parts. + # Stack Traces in Go -Stack traces play a critical role in Go profiling. So let's try to understand them to see how they might impact the overhead and accuracy of your profiles. +Stack traces play a critical role in Go profiling. So let's try to understand them to see how they might impact the overhead and accuracy of our profiles. ## Introduction @@ -12,49 +14,88 @@ All Go profilers work by collecting samples of stack trace and putting them int | main;foo;bar | 3 | | main;foobar | 4 | -Let's zoom in on the second stack trace in the table above: `main;foo;bar`. A Go developer will usually be more familiar with seeing a stack trace like this as rendered by `panic()` or [`runtime.Stack()`](https://golang.org/pkg/runtime/#Stack) shown below: +Let's zoom in on the first stack trace in the table above: `main;foo`. A Go developer will usually be more familiar with seeing a stack trace like this as rendered by `panic()` or [`runtime.Stack()`](https://golang.org/pkg/runtime/#Stack) as shown below: ``` goroutine 1 [running]: -main.bar(...) - /path/to/go-profiler-notes/examples/stack-trace/main.go:17 main.foo(...) /path/to/go-profiler-notes/examples/stack-trace/main.go:9 main.main() /path/to/go-profiler-notes/examples/stack-trace/main.go:5 +0x3a ``` -This text format has been [described elsewhere](https://www.ardanlabs.com/blog/2015/01/stack-traces-in-go.html) so we won't discuss the details of it here. Instead we'll dive even deeper and ask ourselves where this data is coming from. +This text format has been [described elsewhere](https://www.ardanlabs.com/blog/2015/01/stack-traces-in-go.html) so we won't discuss the details of it here. Instead we'll dive deeper into the source of this data. ## Goroutine Stack -Stack traces +As the name implies, stack traces originate from "the stack". Even so the details vary, most programming languages have a concept of a stack and use it to store things like local variables, arguments and return values and return addresses. Generating a stack trace usually involves navigating the stack in a process known as [Unwinding](#unwinding) that will be described in more detail later on. + +Platforms like `x86-64` define a [stack layout](https://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on-x86-64) and calling convention for C and encourage other programming languages to adopt it for interoperability. Go doesn't follow these conventions, and instead uses its own idiosyncratic [calling convention](https://dr-knz.net/go-calling-convention-x86-64.html). Future versions of Go (1.17?) will adopt another [register-based](https://go.googlesource.com/proposal/+/refs/changes/78/248178/1/design/40724-register-calling.md) convention that will increase performance. However compatibility with platform conventions is not planned as it would negatively impact goroutine scalability. + +Even today, Go's stack layout is slightly different on different platforms. To keep things manageable, we'll assume that we're on `x86-64` for the remainder of this note. + +### Stack Layout + +Now let's take a closer look at the stack. Every goroutine has its own stack that is at least [2 KiB](https://sourcegraph.com/search?q=repo:golang/go+repo:%5Egithub%5C.com/golang/go%24+_StackMin+%3D&patternType=literal) and grows from a high memory address towards lower memory addresses. This can be a bit confusing and is mostly a historical convention from a time where memory was so limited that one had to worry about the stack colliding with other memory regions used by the program. ![](./goroutine-stack.png) -## Stack Unwinding +There is a lot going on in the picture above, but for now let's focus on the things highlighted in red. To get a stack trace, the first thing we need is the current program counter (pc) which identifies the function that is currently being executed. This is found in a CPU register called `rip` (instruction pointer register) that points to another region of memory that holds the executable machine code of our program. If you're not familiar with registers, you can think of them as special CPU variables that are incredibly fast to access. + +The next step is to find the program counters of all the callers of the current function, i.e. all the `return address (pc)` values that are also highlighted in red. There are various techniques for doing, which are described in the [Unwinding](#unwinding) section. The end result is a list of program counters that represent your stack trace. In fact, it's exactly the same list you can get from [`runtime.Callers()`](https://golang.org/pkg/runtime/#Callers) within your program. Last but not least, these `pc` values are usually translated into human readable file/line/function names as described in the [Symbolization](#symbolization) section below. + +### Real Example + +Looking at pretty pictures can be good way to get a high level understanding of the stack, but it has its limits. Sometimes you need to look at the raw bits & bytes in order to get a full understanding. If you're interested in that, keep reading. Otherwise feel free to skip ahead to the next section. + +The best way to look at real Go stacks is to use [delve](https://github.com/go-delve/delve) debugger. It allows you to set breakpoints in any part of your program in order to poke at variables, arguments and even raw memory of your program. + + + +## Unwinding ### Frame Pointers -To write ... +To be written ... ### .gopclntab -To write ... +To be written ... ### DWARF -To write ... +To be written ... ## Symbolization -Woho +To be written ... ## Overhead -To write ... - +To be written ... ## Accuracy -To write ... \ No newline at end of file +To be written ... + +### Frame Pointer Race Condition + +To be written ... + +### Goroutine Stack Truncation + +To be written ... + +### cgo + +To be written ... + +### pprof Labels + +To be written ... + +## Disclaimers + +I'm [felixge](https://github.com/felixge) and work at [Datadog](https://www.datadoghq.com/) on [Continuous Profiling](https://www.datadoghq.com/product/code-profiling/) for Go. You should check it out. We're also [hiring](https://www.datadoghq.com/jobs-engineering/#all&all_locations) : ). + +The information on this page is believed to be correct, but no warranty is provided. Feedback is welcome! \ No newline at end of file