Home | History | Annotate | Download | only in MC

Lines Matching refs:streamer

419 /// Utility function to emit the encoding to a streamer.
946 static int getDataAlignmentFactor(MCStreamer &streamer) {
947 MCContext &context = streamer.getContext();
956 static unsigned getSizeForEncoding(MCStreamer &streamer,
958 MCContext &context = streamer.getContext();
977 static void EmitFDESymbol(MCStreamer &streamer, const MCSymbol &symbol,
980 MCContext &context = streamer.getContext();
984 streamer);
985 unsigned size = getSizeForEncoding(streamer, symbolEncoding);
986 if (streamer.isVerboseAsm() && comment) streamer.AddComment(comment);
988 streamer.EmitAbsValue(v, size);
990 streamer.EmitValue(v, size);
993 static void EmitPersonality(MCStreamer &streamer, const MCSymbol &symbol,
995 MCContext &context = streamer.getContext();
999 streamer);
1000 unsigned size = getSizeForEncoding(streamer, symbolEncoding);
1001 streamer.EmitValue(v, size);
1017 void EmitCompactUnwind(MCStreamer &streamer,
1020 const MCSymbol &EmitCIE(MCObjectStreamer &streamer,
1027 MCSymbol *EmitFDE(MCObjectStreamer &streamer,
1030 void EmitCFIInstructions(MCObjectStreamer &streamer,
1033 void EmitCFIInstruction(MCObjectStreamer &Streamer,
1039 static void EmitEncodingByte(MCStreamer &Streamer, unsigned Encoding,
1041 if (Streamer.isVerboseAsm()) {
1078 Streamer.AddComment(Twine(Prefix) + " = " + EncStr);
1081 Streamer.EmitIntValue(Encoding, 1);
1084 void FrameEmitterImpl::EmitCFIInstruction(MCObjectStreamer &Streamer,
1086 int dataAlignmentFactor = getDataAlignmentFactor(Streamer);
1087 bool VerboseAsm = Streamer.isVerboseAsm();
1094 Streamer.AddComment("DW_CFA_register");
1095 Streamer.AddComment(Twine("Reg1 ") + Twine(Reg1));
1096 Streamer.AddComment(Twine("Reg2 ") + Twine(Reg2));
1098 Streamer.EmitIntValue(dwarf::DW_CFA_register, 1);
1099 Streamer.EmitULEB128IntValue(Reg1);
1100 Streamer.EmitULEB128IntValue(Reg2);
1104 Streamer.EmitIntValue(dwarf::DW_CFA_GNU_window_save, 1);
1110 Streamer.AddComment("DW_CFA_undefined");
1111 Streamer.AddComment(Twine("Reg ") + Twine(Reg));
1113 Streamer.EmitIntValue(dwarf::DW_CFA_undefined, 1);
1114 Streamer.EmitULEB128IntValue(Reg);
1123 Streamer.AddComment("DW_CFA_def_cfa_offset");
1124 Streamer.EmitIntValue(dwarf::DW_CFA_def_cfa_offset, 1);
1132 Streamer.AddComment(Twine("Offset " + Twine(CFAOffset)));
1133 Streamer.EmitULEB128IntValue(CFAOffset);
1139 Streamer.AddComment("DW_CFA_def_cfa");
1140 Streamer.EmitIntValue(dwarf::DW_CFA_def_cfa, 1);
1143 Streamer.AddComment(Twine("Reg ") + Twine(Instr.getRegister()));
1144 Streamer.EmitULEB128IntValue(Instr.getRegister());
1149 Streamer.AddComment(Twine("Offset " + Twine(CFAOffset)));
1150 Streamer.EmitULEB128IntValue(CFAOffset);
1157 Streamer.AddComment("DW_CFA_def_cfa_register");
1158 Streamer.EmitIntValue(dwarf::DW_CFA_def_cfa_register, 1);
1161 Streamer.AddComment(Twine("Reg ") + Twine(Instr.getRegister()));
1162 Streamer.EmitULEB128IntValue(Instr.getRegister());
1179 if (VerboseAsm) Streamer.AddComment("DW_CFA_offset_extended_sf");
1180 Streamer.EmitIntValue(dwarf::DW_CFA_offset_extended_sf, 1);
1181 if (VerboseAsm) Streamer.AddComment(Twine("Reg ") + Twine(Reg));
1182 Streamer.EmitULEB128IntValue(Reg);
1183 if (VerboseAsm) Streamer.AddComment(Twine("Offset ") + Twine(Offset));
1184 Streamer.EmitSLEB128IntValue(Offset);
1186 if (VerboseAsm) Streamer.AddComment(Twine("DW_CFA_offset + Reg(") +
1188 Streamer.EmitIntValue(dwarf::DW_CFA_offset + Reg, 1);
1189 if (VerboseAsm) Streamer.AddComment(Twine("Offset ") + Twine(Offset));
1190 Streamer.EmitULEB128IntValue(Offset);
1192 if (VerboseAsm) Streamer.AddComment("DW_CFA_offset_extended");
1193 Streamer.EmitIntValue(dwarf::DW_CFA_offset_extended, 1);
1194 if (VerboseAsm) Streamer.AddComment(Twine("Reg ") + Twine(Reg));
1195 Streamer.EmitULEB128IntValue(Reg);
1196 if (VerboseAsm) Streamer.AddComment(Twine("Offset ") + Twine(Offset));
1197 Streamer.EmitULEB128IntValue(Offset);
1202 if (VerboseAsm) Streamer.AddComment("DW_CFA_remember_state");
1203 Streamer.EmitIntValue(dwarf::DW_CFA_remember_state, 1);
1206 if (VerboseAsm) Streamer.AddComment("DW_CFA_restore_state");
1207 Streamer.EmitIntValue(dwarf::DW_CFA_restore_state, 1);
1211 if (VerboseAsm) Streamer.AddComment("DW_CFA_same_value");
1212 Streamer.EmitIntValue(dwarf::DW_CFA_same_value, 1);
1213 if (VerboseAsm) Streamer.AddComment(Twine("Reg ") + Twine(Reg));
1214 Streamer.EmitULEB128IntValue(Reg);
1220 Streamer.AddComment("DW_CFA_restore");
1221 Streamer.AddComment(Twine("Reg ") + Twine(Reg));
1223 Streamer.EmitIntValue(dwarf::DW_CFA_restore | Reg, 1);
1227 if (VerboseAsm) Streamer.AddComment("Escape bytes");
1228 Streamer.EmitBytes(Instr.getValues());
1236 void FrameEmitterImpl::EmitCFIInstructions(MCObjectStreamer &streamer,
1249 if (streamer.isVerboseAsm()) streamer.AddComment("DW_CFA_advance_loc4");
1250 streamer.EmitDwarfAdvanceFrameAddr(BaseLabel, ThisSym);
1255 EmitCFIInstruction(streamer, Instr);
1260 void FrameEmitterImpl::EmitCompactUnwind(MCStreamer &Streamer,
1262 MCContext &Context = Streamer.getContext();
1264 bool VerboseAsm = Streamer.isVerboseAsm();
1298 unsigned Size = getSizeForEncoding(Streamer, FDEEncoding);
1299 if (VerboseAsm) Streamer.AddComment("Range Start");
1300 Streamer.EmitSymbolValue(Frame.Begin, Size);
1303 const MCExpr *Range = MakeStartMinusEndExpr(Streamer, *Frame.Begin,
1305 if (VerboseAsm) Streamer.AddComment("Range Length");
1306 Streamer.EmitAbsValue(Range, 4);
1309 Size = getSizeForEncoding(Streamer, dwarf::DW_EH_PE_udata4);
1310 if (VerboseAsm) Streamer.AddComment("Compact Unwind Encoding: 0x" +
1312 Streamer.EmitIntValue(Encoding, Size);
1315 Size = getSizeForEncoding(Streamer, dwarf::DW_EH_PE_absptr);
1316 if (VerboseAsm) Streamer.AddComment("Personality Function");
1318 Streamer.EmitSymbolValue(Frame.Personality, Size);
1320 Streamer
1323 Size = getSizeForEncoding(Streamer, Frame.LsdaEncoding);
1324 if (VerboseAsm) Streamer.AddComment("LSDA");
1326 Streamer.EmitSymbolValue(Frame.Lsda, Size);
1328 Streamer.EmitIntValue(0, Size); // No LSDA
1331 const MCSymbol &FrameEmitterImpl::EmitCIE(MCObjectStreamer &streamer,
1338 MCContext &context = streamer.getContext();
1341 bool verboseAsm = streamer.isVerboseAsm();
1344 streamer.EmitLabel(sectionStart);
1350 const MCExpr *Length = MakeStartMinusEndExpr(streamer, *sectionStart,
1352 if (verboseAsm) streamer.AddComment("CIE Length");
1353 streamer.EmitAbsValue(Length, 4);
1357 if (verboseAsm) streamer.AddComment("CIE ID Tag");
1358 streamer.EmitIntValue(CIE_ID, 4);
1361 if (verboseAsm) streamer.AddComment("DW_CIE_VERSION");
1365 streamer.EmitIntValue(CIEVersion, 1);
1370 if (verboseAsm) streamer.AddComment("CIE Augmentation");
1379 streamer.EmitBytes(Augmentation.str());
1381 streamer.EmitIntValue(0, 1);
1384 if (verboseAsm) streamer.AddComment("CIE Code Alignment Factor");
1385 streamer.EmitULEB128IntValue(context.getAsmInfo()->getMinInstAlignment());
1388 if (verboseAsm) streamer.AddComment("CIE Data Alignment Factor");
1389 streamer.EmitSLEB128IntValue(getDataAlignmentFactor(streamer));
1392 if (verboseAsm) streamer.AddComment("CIE Return Address Column");
1396 streamer.EmitIntValue(MRI->getDwarfRegNum(MRI->getRARegister(), true), 1);
1398 streamer.EmitULEB128IntValue(
1410 augmentationLength += getSizeForEncoding(streamer, personalityEncoding);
1417 if (verboseAsm) streamer.AddComment("Augmentation Size");
1418 streamer.EmitULEB128IntValue(augmentationLength);
1423 EmitEncodingByte(streamer, personalityEncoding,
1426 if (verboseAsm) streamer.AddComment("Personality");
1427 EmitPersonality(streamer, *personality, personalityEncoding);
1431 EmitEncodingByte(streamer, lsdaEncoding, "LSDA Encoding");
1434 EmitEncodingByte(streamer, MOFI->getFDEEncoding(), "FDE Encoding");
1443 EmitCFIInstructions(streamer, Instructions, nullptr);
1447 streamer.EmitValueToAlignment(IsEH ? 4 : MAI->getPointerSize());
1449 streamer.EmitLabel(sectionEnd);
1453 MCSymbol *FrameEmitterImpl::EmitFDE(MCObjectStreamer &streamer,
1456 MCContext &context = streamer.getContext();
1460 bool verboseAsm = streamer.isVerboseAsm();
1463 const MCExpr *Length = MakeStartMinusEndExpr(streamer, *fdeStart, *fdeEnd, 0);
1464 if (verboseAsm) streamer.AddComment("FDE Length");
1465 streamer.EmitAbsValue(Length, 4);
1467 streamer.EmitLabel(fdeStart);
1472 const MCExpr *offset = MakeStartMinusEndExpr(streamer, cieStart, *fdeStart,
1474 if (verboseAsm) streamer.AddComment("FDE CIE Offset");
1475 streamer.EmitAbsValue(offset, 4);
1477 const MCExpr *offset = MakeStartMinusEndExpr(streamer, *SectionStart,
1479 streamer.EmitAbsValue(offset, 4);
1481 streamer.EmitSymbolValue(&cieStart, 4);
1487 unsigned PCSize = getSizeForEncoding(streamer, PCEncoding);
1488 EmitFDESymbol(streamer, *frame.Begin, PCEncoding, IsEH, "FDE initial location");
1491 const MCExpr *Range = MakeStartMinusEndExpr(streamer, *frame.Begin,
1493 if (verboseAsm) streamer.AddComment("FDE address range");
1494 streamer.EmitAbsValue(Range, PCSize);
1501 augmentationLength += getSizeForEncoding(streamer, frame.LsdaEncoding);
1503 if (verboseAsm) streamer.AddComment("Augmentation size");
1504 streamer.EmitULEB128IntValue(augmentationLength);
1508 EmitFDESymbol(streamer, *frame.Lsda, frame.LsdaEncoding, true,
1513 EmitCFIInstructions(streamer, frame.Instructions, frame.Begin);
1516 streamer.EmitValueToAlignment(PCSize);
1570 void MCDwarfFrameEmitter::Emit(MCObjectStreamer &Streamer, MCAsmBackend *MAB,
1572 Streamer.generateCompactUnwindEncodings(MAB);
1574 MCContext &Context = Streamer.getContext();
1577 ArrayRef<MCDwarfFrameInfo> FrameArray = Streamer.getFrameInfos();
1587 Streamer.SwitchSection(MOFI->getCompactUnwindSection());
1588 Streamer.EmitValueToAlignment(Context.getAsmInfo()->getPointerSize());
1594 Emitter.EmitCompactUnwind(Streamer, Frame);
1604 Streamer.SwitchSection(&Section);
1606 Streamer.EmitLabel(SectionStart);
1619 Streamer.EmitLabel(FDEEnd);
1633 CIEStart = &Emitter.EmitCIE(Streamer, Frame.Personality,
1639 FDEEnd = Emitter.EmitFDE(Streamer, *CIEStart, Frame);
1642 Streamer.EmitValueToAlignment(Context.getAsmInfo()->getPointerSize());
1644 Streamer.EmitLabel(FDEEnd);
1647 void MCDwarfFrameEmitter::EmitAdvanceLoc(MCObjectStreamer &Streamer,
1649 MCContext &Context = Streamer.getContext();
1653 Streamer.EmitBytes(OS.str());