| Index: src/IceAssemblerARM32.cpp
|
| diff --git a/src/IceAssemblerARM32.cpp b/src/IceAssemblerARM32.cpp
|
| index 11175373c63620dc70546d7ee55cb734cf7140fb..613fa7772b78d58ca188bdfdf50a74c32db844c4 100644
|
| --- a/src/IceAssemblerARM32.cpp
|
| +++ b/src/IceAssemblerARM32.cpp
|
| @@ -593,11 +593,16 @@ size_t MoveRelocatableFixup::emit(GlobalContext *Ctx,
|
| IValueT Inst = Asm.load<IValueT>(position());
|
| const bool IsMovw = kind() == llvm::ELF::R_ARM_MOVW_ABS_NC ||
|
| kind() == llvm::ELF::R_ARM_MOVW_PREL_NC;
|
| + const IceString Symbol = symbol();
|
| + const bool NeedsPCRelSuffix =
|
| + (Asm.fixupIsPCRel(kind()) || Symbol == GlobalOffsetTable);
|
| Str << "\t"
|
| "mov" << (IsMovw ? "w" : "t") << "\t"
|
| << RegARM32::getRegName(RegNumT::fixme((Inst >> kRdShift) & 0xF))
|
| - << ", #:" << (IsMovw ? "lower" : "upper") << "16:" << symbol(&Asm)
|
| - << "\t@ .word " << llvm::format_hex_no_prefix(Inst, 8) << "\n";
|
| + << ", #:" << (IsMovw ? "lower" : "upper") << "16:" << Symbol
|
| + << (NeedsPCRelSuffix ? " - ." : "") << "\t@ .word "
|
| + // TODO(jpp): This is broken, it also needs to add a magic constant.
|
| + << llvm::format_hex_no_prefix(Inst, 8) << "\n";
|
| return InstARM32::InstSize;
|
| }
|
|
|
| @@ -650,7 +655,7 @@ size_t BlRelocatableFixup::emit(GlobalContext *Ctx,
|
| Ostream &Str = Ctx->getStrEmit();
|
| IValueT Inst = Asm.load<IValueT>(position());
|
| Str << "\t"
|
| - "bl\t" << symbol(&Asm) << "\t@ .word "
|
| + "bl\t" << symbol() << "\t@ .word "
|
| << llvm::format_hex_no_prefix(Inst, 8) << "\n";
|
| return InstARM32::InstSize;
|
| }
|
|
|