1. 28 Oct, 2008 1 commit
    • Paul Mundt's avatar
      sh: Fix FPU tuning on toolchains with mismatched multilib targets. · 8a2fd5f3
      Paul Mundt authored
      Presently there is very little standing in the way of using an SH-4
      toolchain for building an SH-2 kernel, and vice versa. Binutils itself
      has no limitations whatsoever and supports explicit ISA hinting, which
      we already use with varying degrees of success today.
      
      This leaves GCC as the odd one out, due to a rather dubious policy
      decision by the GCC folks to not include all of the CPU family variants
      in the default list of multilib targets in GCC4. Despite best efforts to
      the contrary, libgcc itself already contains awareness of the various CPU
      types and remains generally usable, allowing it to safely be referenced
      even on a mismatched target (and indeed, explicit ISA tuning by binutils
      keeps us honest in terms of ensuring that we do not link incompatible
      objects in).
      
      In order to support this, a couple of changes had to be made. Firstly,
      the introduction of MAYBE_DECLARE_EXPORT(), which provides a __weak
      extern reference for libgcc resident routines when finer-grained
      -m<cpu-family> based tuning is not supported by the toolchain. This
      fixes up the __sdivsi3_i4i and __udivsi3_i4i references when dealing
      with SH-2 kernels linked with an SH-4 libgcc. Secondly, in case where we
      are unable to find a suitable match for CPU family tuning but still
      have a toolchain that defaults to FP instruction generation, a suitable
      nofpu target must be selected. This is accomplished by selecting the
      first nofpu multilib target supported by the toolchain, which is
      also necessary for selecting the proper libgcc to link against.
      Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
      8a2fd5f3
  2. 27 Oct, 2008 39 commits