MCDwarf.cpp (263508) | MCDwarf.cpp (266715) |
---|---|
1//===- lib/MC/MCDwarf.cpp - MCDwarf implementation ------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 825 unchanged lines hidden (view full) --- 834 case dwarf::DW_EH_PE_sdata4: 835 return 4; 836 case dwarf::DW_EH_PE_udata8: 837 case dwarf::DW_EH_PE_sdata8: 838 return 8; 839 } 840} 841 | 1//===- lib/MC/MCDwarf.cpp - MCDwarf implementation ------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 825 unchanged lines hidden (view full) --- 834 case dwarf::DW_EH_PE_sdata4: 835 return 4; 836 case dwarf::DW_EH_PE_udata8: 837 case dwarf::DW_EH_PE_sdata8: 838 return 8; 839 } 840} 841 |
842static void EmitSymbol(MCStreamer &streamer, const MCSymbol &symbol, 843 unsigned symbolEncoding, const char *comment = 0) { | 842static void EmitFDESymbol(MCStreamer &streamer, const MCSymbol &symbol, 843 unsigned symbolEncoding, bool isEH, 844 const char *comment = 0) { |
844 MCContext &context = streamer.getContext(); 845 const MCAsmInfo *asmInfo = context.getAsmInfo(); 846 const MCExpr *v = asmInfo->getExprForFDESymbol(&symbol, 847 symbolEncoding, 848 streamer); 849 unsigned size = getSizeForEncoding(streamer, symbolEncoding); 850 if (streamer.isVerboseAsm() && comment) streamer.AddComment(comment); | 845 MCContext &context = streamer.getContext(); 846 const MCAsmInfo *asmInfo = context.getAsmInfo(); 847 const MCExpr *v = asmInfo->getExprForFDESymbol(&symbol, 848 symbolEncoding, 849 streamer); 850 unsigned size = getSizeForEncoding(streamer, symbolEncoding); 851 if (streamer.isVerboseAsm() && comment) streamer.AddComment(comment); |
851 streamer.EmitAbsValue(v, size); | 852 if (asmInfo->doDwarfFDESymbolsUseAbsDiff() && isEH) 853 streamer.EmitAbsValue(v, size); 854 else 855 streamer.EmitValue(v, size); |
852} 853 854static void EmitPersonality(MCStreamer &streamer, const MCSymbol &symbol, 855 unsigned symbolEncoding) { 856 MCContext &context = streamer.getContext(); 857 const MCAsmInfo *asmInfo = context.getAsmInfo(); 858 const MCExpr *v = asmInfo->getExprForPersonalitySymbol(&symbol, 859 symbolEncoding, --- 482 unchanged lines hidden (view full) --- 1342 } else { 1343 streamer.EmitSymbolValue(&cieStart, 4); 1344 } 1345 1346 // PC Begin 1347 unsigned PCEncoding = IsEH ? MOFI->getFDEEncoding(UsingCFI) 1348 : (unsigned)dwarf::DW_EH_PE_absptr; 1349 unsigned PCSize = getSizeForEncoding(streamer, PCEncoding); | 856} 857 858static void EmitPersonality(MCStreamer &streamer, const MCSymbol &symbol, 859 unsigned symbolEncoding) { 860 MCContext &context = streamer.getContext(); 861 const MCAsmInfo *asmInfo = context.getAsmInfo(); 862 const MCExpr *v = asmInfo->getExprForPersonalitySymbol(&symbol, 863 symbolEncoding, --- 482 unchanged lines hidden (view full) --- 1346 } else { 1347 streamer.EmitSymbolValue(&cieStart, 4); 1348 } 1349 1350 // PC Begin 1351 unsigned PCEncoding = IsEH ? MOFI->getFDEEncoding(UsingCFI) 1352 : (unsigned)dwarf::DW_EH_PE_absptr; 1353 unsigned PCSize = getSizeForEncoding(streamer, PCEncoding); |
1350 EmitSymbol(streamer, *frame.Begin, PCEncoding, "FDE initial location"); | 1354 EmitFDESymbol(streamer, *frame.Begin, PCEncoding, IsEH, "FDE initial location"); |
1351 1352 // PC Range 1353 const MCExpr *Range = MakeStartMinusEndExpr(streamer, *frame.Begin, 1354 *frame.End, 0); 1355 if (verboseAsm) streamer.AddComment("FDE address range"); 1356 streamer.EmitAbsValue(Range, PCSize); 1357 1358 if (IsEH) { 1359 // Augmentation Data Length 1360 unsigned augmentationLength = 0; 1361 1362 if (frame.Lsda) 1363 augmentationLength += getSizeForEncoding(streamer, frame.LsdaEncoding); 1364 1365 if (verboseAsm) streamer.AddComment("Augmentation size"); 1366 streamer.EmitULEB128IntValue(augmentationLength); 1367 1368 // Augmentation Data 1369 if (frame.Lsda) | 1355 1356 // PC Range 1357 const MCExpr *Range = MakeStartMinusEndExpr(streamer, *frame.Begin, 1358 *frame.End, 0); 1359 if (verboseAsm) streamer.AddComment("FDE address range"); 1360 streamer.EmitAbsValue(Range, PCSize); 1361 1362 if (IsEH) { 1363 // Augmentation Data Length 1364 unsigned augmentationLength = 0; 1365 1366 if (frame.Lsda) 1367 augmentationLength += getSizeForEncoding(streamer, frame.LsdaEncoding); 1368 1369 if (verboseAsm) streamer.AddComment("Augmentation size"); 1370 streamer.EmitULEB128IntValue(augmentationLength); 1371 1372 // Augmentation Data 1373 if (frame.Lsda) |
1370 EmitSymbol(streamer, *frame.Lsda, frame.LsdaEncoding, 1371 "Language Specific Data Area"); | 1374 EmitFDESymbol(streamer, *frame.Lsda, frame.LsdaEncoding, true, 1375 "Language Specific Data Area"); |
1372 } 1373 1374 // Call Frame Instructions 1375 EmitCFIInstructions(streamer, frame.Instructions, frame.Begin); 1376 1377 // Padding 1378 streamer.EmitValueToAlignment(PCSize); 1379 --- 141 unchanged lines hidden --- | 1376 } 1377 1378 // Call Frame Instructions 1379 EmitCFIInstructions(streamer, frame.Instructions, frame.Begin); 1380 1381 // Padding 1382 streamer.EmitValueToAlignment(PCSize); 1383 --- 141 unchanged lines hidden --- |