[LLVMdev] [Compiler-RT] [ARM] Where __aeabi_[il]div0 builtins should be implemented?

Sergey Dmitrouk
Sat, 06 Sep 2014 08:31:30 -0000

Jon,

Thanks, I have similar stubs to be able to run programs.

Absence of these functions actually surprised me.  It's not very
friendly as dynamically linked applications just crash at startup (might
depend on dynamic linker though).

It'd be nice to have this documented somewhere, grepping current
compiler-rt repository gives me nothing except uses of idiv0.

Cheers,
Sergey

On Fri, Sep 05, 2014 at 11:32:30AM -0700, Jonathan Roelofs
wrote:
> Sergey,
>
> Not that it'll save you much hassle, but here's an implementation
of
> __aeabi_idiv0 and __aeabi_ldiv0 that I've been sitting on for a while.
>
> I vaguely remember compnerd suggesting that I don't commit them to
compiler_rt,
> but I don't remember why.
>
>
> Cheers,
>
> Jon
>
> On 9/5/14, 12:10 PM, Sergey Dmitrouk wrote:
> > Hi,
> >
> > There are several places in compiler-rt which refer to __aeabi_idiv0.
> > For example, in lib/builtins/arm/udivsi3.S:
> >
> > #ifdef __ARM_EABI__
> >      b __aeabi_idiv0
> > #else
> >      JMP(lr)
> > #endif
> >
> > At the same time there is no definition of it.  It looks as if it was
> > done intentionally so that third-party could provide custom handler
for
> > division by zero.
> >
> > IMHO It's not very consistent and looks odd as all other __aebi_*
> > functions are provided by compiler-rt.
> >
> > Did I get it all right or maybe I'm missing something?
> >
> > libgcc provides both __aeabi_idiv0 and __aeabi_ldiv0 as weak symbols,
> > any reasons not to do the same in compiler-rt?  Or, to put it
> > differently, why force external implementation of these functions?
> >
> > Thanks,
> > Sergey
> > _______________________________________________
> > LLVM Developers mailing list
> > LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> >
>
> --
> Jon Roelofs
> jonathan at codesourcery.com
> CodeSourcery / Mentor Embedded