Sorry for the long delay here, but I finally found time to work on this
now and managed to reproduce it with some debug patch applied to our
compiler-rt.
So far, the only information I have is by changing the output here:
> @@ -530,12 +531,23 @@ bool SymbolizerProcess::ReadFromSymbolizer(char
> *buffer, uptr max_length) {
> if (ReachedEndOfOutput(buffer, read_len))
> break;
> if (read_len + 1 == max_length) {
> - Report("WARNING: Symbolizer buffer too small\n");
> + Report("WARNING: Symbolizer buffer too small (%zu, %zu,
> %zu)\n", read_len, max_length, just_read);
> read_len = 0;
> break;
> }
> }
With that, I see that the WARNINGs look like this:
[task 2020-07-16T19:57:55.124Z] 19:57:55 INFO - GECKO(1266) |
==1385==WARNING: Symbolizer buffer too small (16383, 16384, 4095)
[task 2020-07-16T19:57:55.125Z] 19:57:55 INFO - GECKO(1266) |
==1385==WARNING: Symbolizer buffer too small (16383, 16384, 4094)
[task 2020-07-16T19:57:55.126Z] 19:57:55 INFO - GECKO(1266) |
==1385==WARNING: Symbolizer buffer too small (16383, 16384, 16383)
[task 2020-07-16T19:57:55.127Z] 19:57:55 INFO - GECKO(1266) |
ThreadSanitizer:DEADLYSIGNAL
[task 2020-07-16T19:57:55.127Z] 19:57:55 INFO - GECKO(1266) |
ThreadSanitizer: nested bug in the same thread, aborting.
We have the first warning, where `just_read` is something around
4094/4095 quite often.
However, when the "nested bug" appears, it it *always* 16383 (max_length
- 1).
I've been trying to output the buffer, but I am having difficulties in
doing so (not sure if this is a problem in our CI or a problem in my
patch, I will keep trying).
If you have any idea what might be happening around this particular edge
case, that would be great.
I also tried locally what you suggested and tested sanitizer symbolizing
with huge templates, but I was not able to reproduce the bug at all.
Cheers,
Chris