[MC] Don't crash on division by zero.
[oota-llvm.git] / lib / MC / MCLinkerOptimizationHint.cpp
index 628a6156fd8c61cfdadecc6e44dde3e8dd500a90..5f6a57980ad45ac3b4212b949c4002b9549ededa 100644 (file)
@@ -9,22 +9,25 @@
 
 #include "llvm/MC/MCLinkerOptimizationHint.h"
 #include "llvm/MC/MCAsmLayout.h"
+#include "llvm/MC/MCAssembler.h"
 #include "llvm/Support/LEB128.h"
-#include "llvm/MC/MCStreamer.h"
 
 using namespace llvm;
 
-namespace llvm {
-template<>
-void MCLOHDirective::Emit_impl(raw_ostream &OutStream,
+// Each LOH is composed by, in this order (each field is encoded using ULEB128):
+// - Its kind.
+// - Its number of arguments (let say N).
+// - Its arg1.
+// - ...
+// - Its argN.
+// <arg1> to <argN> are absolute addresses in the object file, i.e.,
+// relative addresses from the beginning of the object file.
+void MCLOHDirective::emit_impl(raw_ostream &OutStream,
                                const MachObjectWriter &ObjWriter,
                                const MCAsmLayout &Layout) const {
-  const MCAssembler &Asm = Layout.getAssembler();
   encodeULEB128(Kind, OutStream);
   encodeULEB128(Args.size(), OutStream);
   for (LOHArgs::const_iterator It = Args.begin(), EndIt = Args.end();
        It != EndIt; ++It)
-    encodeULEB128(ObjWriter.getSymbolAddress(&Asm.getSymbolData(**It), Layout),
-                  OutStream);
+    encodeULEB128(ObjWriter.getSymbolAddress(**It, Layout), OutStream);
 }
-} // end namespace llvm