From: Chris Metcalf <[email protected]> Date: Tue, 22 Dec 2015 12:41:24 -0500
> The clz table (__clz_tab) in lib/clz_tab.c is also provided as part > of libgcc.a, and many architectures link against libgcc. To allow > the linker to avoid a multiple-definition link failure, clz_tab.o > has to be in lib/lib.a rather than lib/builtin.o. The specific > issue is that libgcc.a comes before lib/builtin.o on vmlinux.o's > link command line, so its _clz.o is pulled to satisfy __clz_tab, > and then when the remainder of lib/builtin.o is pulled in to satisfy > all the other dependencies, the __clz_tab symbols conflict. By > putting clz_tab.o in lib.a, the linker can simply avoid pulling > it into vmlinux.o when this situation arises. > > The definitions of __clz_tab are the same in libgcc.a and in the > kernel; arguably we could also simply rename the kernel version, > but it's unlikely the libgcc version will ever change to become > incompatible, so just using it seems reasonably safe. > > Signed-off-by: Chris Metcalf <[email protected]> No objections from me: Acked-by: David S. Miller <[email protected]> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

