Chromium Code Reviews| Index: src/IceFixups.h |
| diff --git a/src/IceFixups.h b/src/IceFixups.h |
| index 7144aa8d093355e5b9d3c7cc942112d4ba5d4db3..cfea3cdd116261d1e49fa3d1987de387d943c57b 100644 |
| --- a/src/IceFixups.h |
| +++ b/src/IceFixups.h |
| @@ -14,19 +14,41 @@ |
| #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, |
| +class ConstantRelocatable; |
|
Jim Stichnoth
2015/01/12 21:39:32
Is this forward declaration needed?
jvoung (off chromium)
2015/01/12 22:41:28
Oops no -- done.
|
| - // Target specific relocation types follow this. |
| - FK_FirstTargetSpecific = 1 << 4 |
| +// 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; |
| + |
| +// 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 |