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

Reid Spencer
Wed, 23 Nov 2005 23:17:10 -0000

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.