[LLVMdev] llvm-ranlib: Bus Error in regressions + fix

Reid Spencer reid at x10sys.com
Wed Nov 23 15:17:10 PST 2005


Evan Jones wrote:
> On Nov 23, 2005, at 12:08, Reid Spencer wrote:
> 
>>> However, it would be possible to use a stringstream for this.
>>
>> Aggg! No! Those perform horribly with anything more than a small 
>> amount of data. Some Archive files can be huge (e.g. not fit in memory).
> 
> 
> An archive can be too big to fit in memory? That would be a BIG library. 

Yes, but they do exist. I've seen 1GByte archive files.

> In that case, building a temporary in memory is a bad idea, but then so 
> is copying it twice, as is being done now. Maybe it really would be 
> better to scan over everything and build the symbol table, and then scan 
> over everything again and build the final archive. This would avoid 
> writing an extra copy out to disk, and it wouldn't be hard to do this.

Yup, that would work too. It would, however, require significant rework in 
ArchiveWriter.cpp code.

>> Yup. If you use the sys::Path class to do the "unlink" 
>> (removeFromDisk) then the platform differences should be accounted 
>> for. Please don't put the direct unlink call into ArchiveWriter.cpp.
> 
> So this comment means that I should attempt to theoretically support 
> Windows, and close the current archive file before updating it?

If you use sys::Path, it is not "theoretically" supported, it is supported.
To remove a file, use sys::Path::removeFromDisk, not unlink(2).

  > I'll remove the stringstream, but this means that I need to create two
> temporary files. However, this change is less invasive, so I'll rework 
> my patch again.

Sounds good. We can change to the two-pass reading (when building a symbol 
table) some other time. I'm sure you just want to get this little issue done 
and over with :)

Reid.




More information about the llvm-dev mailing list