diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/MC/MCContext.cpp | 26 | ||||
-rw-r--r-- | llvm/lib/MC/MCDwarf.cpp | 8 | ||||
-rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 8 |
3 files changed, 18 insertions, 24 deletions
diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp index 5ec5c35630c..3c8de997124 100644 --- a/llvm/lib/MC/MCContext.cpp +++ b/llvm/lib/MC/MCContext.cpp @@ -338,20 +338,19 @@ const MCSectionCOFF *MCContext::getCOFFSection(StringRef Section) { unsigned MCContext::GetDwarfFile(StringRef Directory, StringRef FileName, unsigned FileNumber, unsigned CUID) { MCDwarfFileTable &Table = MCDwarfFileTablesCUMap[CUID]; - SmallVectorImpl<MCDwarfFile *>& MCDwarfFiles = Table.getMCDwarfFiles(); + SmallVectorImpl<MCDwarfFile>& MCDwarfFiles = Table.getMCDwarfFiles(); SmallVectorImpl<StringRef>& MCDwarfDirs = Table.getMCDwarfDirs(); // Make space for this FileNumber in the MCDwarfFiles vector if needed. if (FileNumber >= MCDwarfFiles.size()) { MCDwarfFiles.resize(FileNumber + 1); - } else { - MCDwarfFile *&ExistingFile = MCDwarfFiles[FileNumber]; - if (ExistingFile) - // It is an error to use see the same number more than once. - return 0; } // Get the new MCDwarfFile slot for this FileNumber. - MCDwarfFile *&File = MCDwarfFiles[FileNumber]; + MCDwarfFile &File = MCDwarfFiles[FileNumber]; + + // It is an error to use see the same number more than once. + if (!File.Name.empty()) + return 0; if (Directory.empty()) { // Separate the directory part from the basename of the FileName. @@ -387,13 +386,8 @@ unsigned MCContext::GetDwarfFile(StringRef Directory, StringRef FileName, DirIndex++; } - // Now make the MCDwarfFile entry and place it in the slot in the MCDwarfFiles - // vector. - char *Buf = static_cast<char *>(Allocate(FileName.size())); - memcpy(Buf, FileName.data(), FileName.size()); - File = new (*this) MCDwarfFile; - File->Name = StringRef(Buf, FileName.size()); - File->DirIndex = DirIndex; + File.Name = FileName; + File.DirIndex = DirIndex; // return the allocated FileNumber. return FileNumber; @@ -402,11 +396,11 @@ unsigned MCContext::GetDwarfFile(StringRef Directory, StringRef FileName, /// isValidDwarfFileNumber - takes a dwarf file number and returns true if it /// currently is assigned and false otherwise. bool MCContext::isValidDwarfFileNumber(unsigned FileNumber, unsigned CUID) { - const SmallVectorImpl<MCDwarfFile *>& MCDwarfFiles = getMCDwarfFiles(CUID); + const SmallVectorImpl<MCDwarfFile>& MCDwarfFiles = getMCDwarfFiles(CUID); if(FileNumber == 0 || FileNumber >= MCDwarfFiles.size()) return false; - return MCDwarfFiles[FileNumber] != 0; + return !MCDwarfFiles[FileNumber].Name.empty(); } void MCContext::FatalError(SMLoc Loc, const Twine &Msg) { diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp index d1e24fd65f0..2c1874f5e91 100644 --- a/llvm/lib/MC/MCDwarf.cpp +++ b/llvm/lib/MC/MCDwarf.cpp @@ -289,10 +289,10 @@ const MCSymbol *MCDwarfFileTable::EmitCU(MCStreamer *MCOS) const { // Second the file table. for (unsigned i = 1; i < MCDwarfFiles.size(); i++) { - MCOS->EmitBytes(MCDwarfFiles[i]->Name); // FileName + MCOS->EmitBytes(MCDwarfFiles[i].Name); // FileName MCOS->EmitBytes(StringRef("\0", 1)); // the null term. of the string // the Directory num - MCOS->EmitULEB128IntValue(MCDwarfFiles[i]->DirIndex); + MCOS->EmitULEB128IntValue(MCDwarfFiles[i].DirIndex); MCOS->EmitIntValue(0, 1); // last modification timestamp (always 0) MCOS->EmitIntValue(0, 1); // filesize (always 0) } @@ -602,9 +602,9 @@ static void EmitGenDwarfInfo(MCStreamer *MCOS, MCOS->EmitBytes(MCDwarfDirs[0]); MCOS->EmitBytes("/"); } - const SmallVectorImpl<MCDwarfFile *> &MCDwarfFiles = + const SmallVectorImpl<MCDwarfFile> &MCDwarfFiles = MCOS->getContext().getMCDwarfFiles(); - MCOS->EmitBytes(MCDwarfFiles[1]->Name); + MCOS->EmitBytes(MCDwarfFiles[1].Name); MCOS->EmitIntValue(0, 1); // NULL byte to terminate the string. // AT_comp_dir, the working directory the assembly was done in. diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index 889fb9dcb34..f3cf8f2d1c7 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -662,10 +662,10 @@ bool AsmParser::Run(bool NoInitialTextSection, bool NoFinalize) { return TokError("unmatched .ifs or .elses"); // Check to see there are no empty DwarfFile slots. - const SmallVectorImpl<MCDwarfFile *> &MCDwarfFiles = + const SmallVectorImpl<MCDwarfFile> &MCDwarfFiles = getContext().getMCDwarfFiles(); for (unsigned i = 1; i < MCDwarfFiles.size(); i++) { - if (!MCDwarfFiles[i]) + if (MCDwarfFiles[i].Name.empty()) TokError("unassigned file number: " + Twine(i) + " for .file directives"); } @@ -1589,10 +1589,10 @@ bool AsmParser::parseStatement(ParseStatementInfo &Info) { // If we previously parsed a cpp hash file line comment then make sure the // current Dwarf File is for the CppHashFilename if not then emit the // Dwarf File table for it and adjust the line number for the .loc. - const SmallVectorImpl<MCDwarfFile *> &MCDwarfFiles = + const SmallVectorImpl<MCDwarfFile> &MCDwarfFiles = getContext().getMCDwarfFiles(); if (CppHashFilename.size() != 0) { - if (MCDwarfFiles[getContext().getGenDwarfFileNumber()]->Name != + if (MCDwarfFiles[getContext().getGenDwarfFileNumber()].Name != CppHashFilename) getStreamer().EmitDwarfFileDirective( getContext().nextGenDwarfFileNumber(), StringRef(), |