[llvm-dev] compiler-rt, v4.0: arm\udivsi3.S broken for division by zero
Renato Golin via llvm-dev
llvm-dev at lists.llvm.org
Wed Apr 5 03:50:23 PDT 2017
On 21 March 2017 at 18:32, Peter Jakubek via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> I think the current implementation for the call "bl __aeabi_idiv0" in
> builtins\arm\udivsi3.S is broken.
> At least for the case that __aeabi_idiv0 returns. (the provided
> implementation does)
>
> Since LR is not preserved, the following JMP(lr) results in an endless loop.
>
> Or is this an intentional change of the behavior?
Hi Peter,
That is most certainly a bug. Weiming's patch was supposed to only
introduce Thumb1 code, not transform div0 into a busy loop. :)
> The file contains another implementation enabled by __ARM_ARCH_EXT_IDIV__.
> This uses "b" instead of "bl".
> (This works as in previous versions)
The comment on the patch makes that clear:
bl __aeabi_idiv0 // due to relocation limit, can't use b.
I'm not sure why the bottom one is fine and the top one isn't, wrt.
range, but we may have to add a trampoline here.
Weiming, Saleem, comments?
cheers,
--renato
More information about the llvm-dev
mailing list