1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 03:28:20 +02:00

Fixed issues with global var addresses in const arrays

This commit is contained in:
Brian Fiete 2020-07-13 08:51:02 -07:00
parent 52af512b4f
commit b30a72719c
13 changed files with 376 additions and 36 deletions

View file

@ -271,6 +271,20 @@ class BeDbgLoc;
class BeMDNode;
class BeGlobalVariable;
class BeConstant;
struct BeConstData
{
struct ConstantEntry
{
int mIdx;
BeConstant* mConstant;
};
Array<uint8> mData;
Array<ConstantEntry> mConsts;
};
class BeConstant : public BeValue
{
public:
@ -304,7 +318,7 @@ public:
}
virtual BeType* GetType();
virtual void GetData(Array<uint8>& data);
virtual void GetData(BeConstData& data);
virtual void HashContent(BeHashContext& hashCtx) override;
};
@ -319,6 +333,11 @@ public:
mType->HashReference(hashCtx);
mTarget->HashReference(hashCtx);
}
virtual void GetData(BeConstData& data) override
{
mTarget->GetData(data);
}
};
class BeGEPConstant : public BeConstant
@ -339,6 +358,22 @@ public:
}
};
class BeExtractValueConstant : public BeConstant
{
public:
BE_VALUE_TYPE(BeExtractValueConstant, BeConstant);
int mIdx0;
virtual BeType* GetType();
virtual void HashContent(BeHashContext& hashCtx) override
{
hashCtx.Mixin(TypeId);
mTarget->HashReference(hashCtx);
hashCtx.Mixin(mIdx0);
}
};
class BeStructConstant : public BeConstant
{
public:
@ -346,7 +381,7 @@ public:
SizedArray<BeConstant*, 4> mMemberValues;
virtual void GetData(Array<uint8>& data) override;
virtual void GetData(BeConstData& data) override;
virtual void HashContent(BeHashContext& hashCtx) override
{
@ -399,6 +434,12 @@ public:
hashCtx.Mixin(mAlign);
hashCtx.Mixin(mUnnamedAddr);
}
virtual void GetData(BeConstData& data) override
{
data.mConsts.Add({ (int)data.mData.size(), this });
data.mData.Insert(data.mData.size(), (uint8)0, 8);
}
};
class BeFunctionParam
@ -679,7 +720,7 @@ public:
hashCtx.Mixin(TypeId);
mValue->HashReference(hashCtx);
mToType->HashReference(hashCtx);
}
}
};
class BeNegInst : public BeInst