Path: blob/master/CodeGen/include/Luau/UnwindBuilderDwarf2.h
2727 views
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details1#pragma once23#include "Luau/RegisterX64.h"4#include "UnwindBuilder.h"56#include <vector>78namespace Luau9{10namespace CodeGen11{1213struct UnwindFunctionDwarf214{15uint32_t beginOffset;16uint32_t endOffset;17uint32_t fdeEntryStartPos;18};1920class UnwindBuilderDwarf2 : public UnwindBuilder21{22public:23void setBeginOffset(size_t beginOffset) override;24size_t getBeginOffset() const override;2526void startInfo(Arch arch) override;27void startFunction() override;28void finishFunction(uint32_t beginOffset, uint32_t endOffset) override;29void finishInfo() override;3031void prologueA64(uint32_t prologueSize, uint32_t stackSize, std::initializer_list<A64::RegisterA64> regs) override;32void prologueX64(33uint32_t prologueSize,34uint32_t stackSize,35bool setupFrame,36std::initializer_list<X64::RegisterX64> gpr,37const std::vector<X64::RegisterX64>& simd38) override;3940size_t getUnwindInfoSize(size_t blockSize = 0) const override;4142size_t finalize(char* target, size_t offset, void* funcAddress, size_t blockSize) const override;4344private:45size_t beginOffset = 0;4647std::vector<UnwindFunctionDwarf2> unwindFunctions;4849static const unsigned kRawDataLimit = 1024;50uint8_t rawData[kRawDataLimit];51uint8_t* pos = rawData;5253// We will remember the FDE location to write some of the fields like entry length, function start and size later54uint8_t* fdeEntryStart = nullptr;55};5657} // namespace CodeGen58} // namespace Luau596061