Preserve module source information in the ModuleID
authorChris Lattner <sabre@nondot.org>
Tue, 22 Apr 2003 18:02:52 +0000 (18:02 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 22 Apr 2003 18:02:52 +0000 (18:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5836 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Archive/ArchiveReader.cpp
lib/AsmParser/llvmAsmParser.y
lib/Bytecode/Archive/ArchiveReader.cpp
lib/Bytecode/Reader/ArchiveReader.cpp
lib/Bytecode/Reader/Reader.cpp
lib/Bytecode/Reader/ReaderInternals.h

index b6c389523f4b1481a240ee86edd5a631aac9ea3d..afa2c63d0503f51a20c3125990f0f452a51fa693 100644 (file)
@@ -82,7 +82,8 @@ static bool ParseLongFilenameSection(unsigned char *Buffer, unsigned Size,
 }
 
 
-static bool ReadArchiveBuffer(unsigned char *Buffer, unsigned Length,
+static bool ReadArchiveBuffer(const std::string &Filename,
+                              unsigned char *Buffer, unsigned Length,
                               std::vector<Module*> &Objects,
                               std::string *ErrorStr) {
   if (Length < 8 || memcmp(Buffer, "!<arch>\n", 8))
@@ -107,7 +108,8 @@ static bool ReadArchiveBuffer(unsigned char *Buffer, unsigned Length,
         return true;
       break;
     case UserObject: {
-      Module *M = ParseBytecodeBuffer(Buffer+sizeof(ar_hdr), Size, ErrorStr);
+      Module *M = ParseBytecodeBuffer(Buffer+sizeof(ar_hdr), Size,
+                                      Filename+":somefile", ErrorStr);
       if (!M) return true;
       Objects.push_back(M);
       break;
@@ -151,7 +153,7 @@ bool ReadArchiveFile(const std::string &Filename, std::vector<Module*> &Objects,
     return Error(ErrorStr, "Error mmapping file!");
   
   // Parse the archive files we mmap'ped in
-  bool Result = ReadArchiveBuffer(Buffer, Length, Objects, ErrorStr);
+  bool Result = ReadArchiveBuffer(Filename, Buffer, Length, Objects, ErrorStr);
   
   // Unmmap the archive...
   munmap((char*)Buffer, Length);
index b26565180bbc3966300b15670c47e0dcc2e2aabb..dcb53eda58b5e8e80140b512ca07b3d45670fc87 100644 (file)
@@ -591,7 +591,8 @@ Module *RunVMAsmParser(const string &Filename, FILE *F) {
   CurFilename = Filename;
   llvmAsmlineno = 1;      // Reset the current line number...
 
-  CurModule.CurrentModule = new Module();  // Allocate a new module to read
+  // Allocate a new module to read
+  CurModule.CurrentModule = new Module(Filename);
   yyparse();       // Parse the file.
   Module *Result = ParserResult;
   llvmAsmin = stdin;    // F is about to go away, don't use it anymore...
index b6c389523f4b1481a240ee86edd5a631aac9ea3d..afa2c63d0503f51a20c3125990f0f452a51fa693 100644 (file)
@@ -82,7 +82,8 @@ static bool ParseLongFilenameSection(unsigned char *Buffer, unsigned Size,
 }
 
 
-static bool ReadArchiveBuffer(unsigned char *Buffer, unsigned Length,
+static bool ReadArchiveBuffer(const std::string &Filename,
+                              unsigned char *Buffer, unsigned Length,
                               std::vector<Module*> &Objects,
                               std::string *ErrorStr) {
   if (Length < 8 || memcmp(Buffer, "!<arch>\n", 8))
@@ -107,7 +108,8 @@ static bool ReadArchiveBuffer(unsigned char *Buffer, unsigned Length,
         return true;
       break;
     case UserObject: {
-      Module *M = ParseBytecodeBuffer(Buffer+sizeof(ar_hdr), Size, ErrorStr);
+      Module *M = ParseBytecodeBuffer(Buffer+sizeof(ar_hdr), Size,
+                                      Filename+":somefile", ErrorStr);
       if (!M) return true;
       Objects.push_back(M);
       break;
@@ -151,7 +153,7 @@ bool ReadArchiveFile(const std::string &Filename, std::vector<Module*> &Objects,
     return Error(ErrorStr, "Error mmapping file!");
   
   // Parse the archive files we mmap'ped in
-  bool Result = ReadArchiveBuffer(Buffer, Length, Objects, ErrorStr);
+  bool Result = ReadArchiveBuffer(Filename, Buffer, Length, Objects, ErrorStr);
   
   // Unmmap the archive...
   munmap((char*)Buffer, Length);
index b6c389523f4b1481a240ee86edd5a631aac9ea3d..afa2c63d0503f51a20c3125990f0f452a51fa693 100644 (file)
@@ -82,7 +82,8 @@ static bool ParseLongFilenameSection(unsigned char *Buffer, unsigned Size,
 }
 
 
-static bool ReadArchiveBuffer(unsigned char *Buffer, unsigned Length,
+static bool ReadArchiveBuffer(const std::string &Filename,
+                              unsigned char *Buffer, unsigned Length,
                               std::vector<Module*> &Objects,
                               std::string *ErrorStr) {
   if (Length < 8 || memcmp(Buffer, "!<arch>\n", 8))
@@ -107,7 +108,8 @@ static bool ReadArchiveBuffer(unsigned char *Buffer, unsigned Length,
         return true;
       break;
     case UserObject: {
-      Module *M = ParseBytecodeBuffer(Buffer+sizeof(ar_hdr), Size, ErrorStr);
+      Module *M = ParseBytecodeBuffer(Buffer+sizeof(ar_hdr), Size,
+                                      Filename+":somefile", ErrorStr);
       if (!M) return true;
       Objects.push_back(M);
       break;
@@ -151,7 +153,7 @@ bool ReadArchiveFile(const std::string &Filename, std::vector<Module*> &Objects,
     return Error(ErrorStr, "Error mmapping file!");
   
   // Parse the archive files we mmap'ped in
-  bool Result = ReadArchiveBuffer(Buffer, Length, Objects, ErrorStr);
+  bool Result = ReadArchiveBuffer(Filename, Buffer, Length, Objects, ErrorStr);
   
   // Unmmap the archive...
   munmap((char*)Buffer, Length);
index 3e495f486047df3f533de5e3895e6a16e888b53c..5eb3861064e2652706e80ed48e08f79691926807 100644 (file)
@@ -620,14 +620,15 @@ static inline Module *Error(std::string *ErrorStr, const char *Message) {
   return 0;
 }
 
-Module *BytecodeParser::ParseBytecode(const uchar *Buf, const uchar *EndBuf) {
+Module *BytecodeParser::ParseBytecode(const uchar *Buf, const uchar *EndBuf,
+                                      const std::string &ModuleID) {
   unsigned Sig;
   // Read and check signature...
   if (read(Buf, EndBuf, Sig) ||
       Sig != ('l' | ('l' << 8) | ('v' << 16) | 'm' << 24))
     return ::Error(&Error, "Invalid bytecode signature!");
 
-  TheModule = new Module();
+  TheModule = new Module(ModuleID);
   if (ParseModule(Buf, EndBuf)) {
     delete TheModule;
     TheModule = 0;
@@ -637,7 +638,7 @@ Module *BytecodeParser::ParseBytecode(const uchar *Buf, const uchar *EndBuf) {
 
 
 Module *ParseBytecodeBuffer(const unsigned char *Buffer, unsigned Length,
-                            std::string *ErrorStr) {
+                            const std::string &ModuleID, std::string *ErrorStr){
   BytecodeParser Parser;
   unsigned char *PtrToDelete = 0;
   if ((intptr_t)Buffer & 3) {         // If the buffer is not 4 byte aligned...
@@ -648,7 +649,7 @@ Module *ParseBytecodeBuffer(const unsigned char *Buffer, unsigned Length,
     Buffer = PtrToDelete+Offset;
   }
 
-  Module *R = Parser.ParseBytecode(Buffer, Buffer+Length);
+  Module *R = Parser.ParseBytecode(Buffer, Buffer+Length, ModuleID);
   if (ErrorStr) *ErrorStr = Parser.getError();
 
   delete [] PtrToDelete;   // Delete alignment buffer if neccesary
@@ -691,7 +692,7 @@ Module *ParseBytecodeFile(const std::string &Filename, std::string *ErrorStr) {
       return Error(ErrorStr, "Error mmapping file!");
 
     // Parse the bytecode we mmapped in
-    Result = ParseBytecodeBuffer(Buffer, Length, ErrorStr);
+    Result = ParseBytecodeBuffer(Buffer, Length, Filename, ErrorStr);
 
     // Unmmap the bytecode...
     munmap((char*)Buffer, Length);
@@ -721,7 +722,7 @@ Module *ParseBytecodeFile(const std::string &Filename, std::string *ErrorStr) {
     unsigned char *Buf = &FileData[0];
 #endif
 
-    Result = ParseBytecodeBuffer(Buf, FileData.size(), ErrorStr);
+    Result = ParseBytecodeBuffer(Buf, FileData.size(), "<stdin>", ErrorStr);
 
 #if ALIGN_PTRS
     munmap((char*)Buf, FileData.size());   // Free mmap'd data area
index dd2a08fcdbde69cee7a73c6b0df78e2e71faa3a4..a8528e4113adca397582eae9e9d3b62617515d52 100644 (file)
@@ -52,7 +52,8 @@ public:
     freeTable(ModuleValues);
   }
 
-  Module *ParseBytecode(const uchar *Buf, const uchar *EndBuf);
+  Module *ParseBytecode(const uchar *Buf, const uchar *EndBuf,
+                        const std::string &ModuleID);
 
   std::string getError() const { return Error; }