Index: src/IceFixups.h |
diff --git a/src/IceFixups.h b/src/IceFixups.h |
index 7144aa8d093355e5b9d3c7cc942112d4ba5d4db3..b52572fbd20eafc7e65350f7e99eb15c58c38a24 100644 |
--- a/src/IceFixups.h |
+++ b/src/IceFixups.h |
@@ -14,19 +14,39 @@ |
#ifndef SUBZERO_SRC_ICEFIXUPS_H |
#define SUBZERO_SRC_ICEFIXUPS_H |
-#include "IceTypes.def" |
+#include "IceDefs.h" |
namespace Ice { |
-enum FixupKind { |
- // Specify some of the most common relocation types. |
- FK_Abs_4 = 0, |
- FK_PcRel_4 = 1, |
+// Each target and container format has a different namespace of relocations. |
+// This holds the specific target+container format's relocation number. |
+typedef uint32_t FixupKind; |
- // Target specific relocation types follow this. |
- FK_FirstTargetSpecific = 1 << 4 |
+// Assembler fixups are positions in generated code/data that hold relocation |
+// information that needs to be processed before finalizing the code/data. |
+struct AssemblerFixup { |
+public: |
+ intptr_t position() const { return position_; } |
+ void set_position(intptr_t Position) { position_ = Position; } |
+ |
+ FixupKind kind() const { return kind_; } |
+ void set_kind(FixupKind Kind) { kind_ = Kind; } |
+ |
+ RelocOffsetT offset() const; |
+ IceString symbol(const GlobalContext *Ctx) const; |
+ void set_value(const Constant *Value) { value_ = Value; } |
+ |
+ void emit(GlobalContext *Ctx) const; |
+ |
+private: |
+ intptr_t position_; |
+ FixupKind kind_; |
+ const Constant *value_; |
}; |
+typedef std::vector<AssemblerFixup> FixupList; |
+typedef std::vector<AssemblerFixup *> FixupRefList; |
+ |
} // end of namespace Ice |
#endif // SUBZERO_SRC_ICEFIXUPS_H |