
When INT_TYPE_SIZE < BITS_PER_WORD gcc emits a call to an external ffs() implementation instead of a call to "__builtin_ffs()" – see function init_optabs() in <SRCROOT>/gcc/optabs-libfuncs.cc. External ffs() (which is usually the one from newlib) in turn calls __builtin_ffs() what causes infinite recursion and stack overflow. This patch overrides default gcc bahaviour for H8/300H (and newer) and provides a generic ffs() implementation for HImode. PR target/114222 gcc/ChangeLog: * config/h8300/h8300.cc (h8300_init_libfuncs): For HImode override calls to external ffs() (from newlib) with calls to __ffshi2() from libgcc. The implementation of ffs() in newlib calls __builtin_ffs() what causes infinite recursion and finally a stack overflow. libgcc/ChangeLog: * config/h8300/t-h8300: Add __ffshi2(). * config/h8300/ffshi2.c: New file.
14 lines
443 B
Text
14 lines
443 B
Text
LIB1ASMSRC = h8300/lib1funcs.S
|
|
LIB1ASMFUNCS = _cmpsi2 _ucmpsi2 _divhi3 _divsi3 _mulhi3 _mulsi3 \
|
|
_fixunssfsi_asm
|
|
|
|
LIB2ADD = \
|
|
$(srcdir)/config/h8300/clzhi2.c \
|
|
$(srcdir)/config/h8300/ctzhi2.c \
|
|
$(srcdir)/config/h8300/ffshi2.c \
|
|
$(srcdir)/config/h8300/parityhi2.c \
|
|
$(srcdir)/config/h8300/popcounthi2.c \
|
|
$(srcdir)/config/h8300/fixunssfsi.c
|
|
|
|
# We do not have DF type, so fake out the libgcc2 compilation.
|
|
HOST_LIBGCC2_CFLAGS += -DDF=SF
|