[llvm-dev] lld: sigbus error handling

Rafael Avila de Espindola via llvm-dev
2017-10-30T21:03:28Z

Rui Ueyama via llvm-dev <llvm-dev at lists.llvm.org> writes:

> If your system does not support fallocate(2), we use ftruncate(2) to create
> an output file. fallocate(2) succeeds even if your disk have less space
> than the requested size, because it creates a sparse file. If you mmap such
> sparse file, you'll receive a SIGBUS when the disk actually becomes
full.
>
> So, lld can die suddenly with SIGBUS when your disk becomes full, and
> currently we are not doing anything about it. It's sometimes hard to
notice
> that that was caused by the lack of disk space.
>
> I wonder if we should print out a hint (e.g. "Bus error -- disk
full?")
> when we receive a SIGBUS. Any opinions?

I think we should change the llvm implementation of resize_file to fail
if it cannot allocate the space. That is, it should only use ftruncate
on OS X where apparently HFS allocates space with it.

If resize_file fails than lld can fail gracefully or use annonymous
memory and a plain write instead of mmap for producing the output.

Cheers,
Rafael