[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