Fix crash in llvm_gcda_emit_arcs()


I’ve been seeing a crash in llvm_gcda_emit_arcs() on x86_64. The crash occurs executing a movdqa instruction with an unaligned src address. The attached patch to the compiler-rt project fixes the problem by using memcpy() to read data from the write_buffer in GCDAProfiling.c.

This is my first patch submission to llvm so please let me know if I’ve missed any steps. I’m not on the mailing list so please include me on any replies.

I haven’t run the tests on this change but would be happy to do so if someone could point me to documentation on how to do so. I couldn’t find testing instructions linked from I have built the change and run it with the programs I was testing originally. With this change the crash no longer occurs.

Joseph Kain

memcpy-to-writebuffer.patch (578 Bytes)

Bill, could you take a look at this? I don't have a checkout of compiler-rt that builds.

It seems obviously-correct to me, but I wish it did a compare against cur_buffer_size to make sure it's in range.


Joseph Kain wrote:

Hi Nick,

Thanks for looking over my patch. I’d be happy to add the compare against cur_buffer_size. I’ll try to write up such a change today and then send a new patch to the list.

Joseph Kain

Hi Nick and Bill,

Attached is a new version of the patch that checks against cur_buffer_size. This works with the cases I’ve been using but again I haven’t run the official tests on this change.

Joseph Kain

memcpy-to-writebuffer-2.patch (921 Bytes)

Hi Joseph and Nick,

I'll take a look at this soon. :slight_smile: