[PATCH 0/3] lib: Add software mul/div helpers and use them from nios2
From: Simon Schuster
Date: Fri Oct 30 2026 - 11:54:27 EST
Recently, there have been linking failures on nios2 regarding libgcc
symbols that we reexport to modules (in particular __mulsi3 [0], and
__divsi3_table [1]).
In the resulting discussion, Arnd suggested [2] dropping the libgcc
dependency altogether, as -- while specific functions might be fine --
libgcc does not expect to run in a kernel-like freestanding environment.
To this end, Dinh Nguyen was kind enough to locate and extract
GPLv2-compliant versions of the software mul/div/mod and __gcc_bcmp
functions required by nios2 gcc and integrate them into the kernel.
As Arnd also suggested [3] that these might be helpful to other smaller
architectures (such as arc or openrisc), I've further extracted them to
lib/ with corresponding CONFIG_GENERIC_LIB_* options that allow
selectively enabling and exporting these as required.
The patch series compiles mostly^4 fine in a nios2 allyesconfig
without modpost errors; a quick boot test on a regular build also
completed successfully.
One aspect I'm not fully sure of is whether adding declarations for the
new lib/ functions to include/linux/libgcc.h unconditionally in the last
patch of this series is completely clean; but it matches how other
"optional vendored" functions in libgcc.h seem to be handled.
Best regards,
Simon
0: https://lore.kernel.org/lkml/20261019-nios2-mulsi3-v1-1-4fd75b1bacef@xxxxxxxxxxxxx/
1: https://lore.kernel.org/lkml/20261026234452.1086974-1-sashal@xxxxxxxxxx/
2: https://lore.kernel.org/lkml/686f4ca2-0fb6-4a73-9cdb-0edcccafdd62@xxxxxxxxxxxxxxxx/
3: https://lore.kernel.org/lkml/426c73b7-b4dc-4b68-9aa5-6145a13280bc@xxxxxxxxxxxxxxxx/
4: There seems to be an unrelated issue in linux-next regarding
CONFIG_PNFS_BLOCK, furthermore -Wno-attribute-alias
-Wno-missing-prototypes -Wno-missing-declarations and
-Wno-unused-function were required due to unrelated Werror-related
compilation issues; but as this series concerns compiler intrinsics
that are never explictly referenced in code and it links fine this
seems acceptable to me.
Signed-off-by: Simon Schuster <schuster.simon@xxxxxxxxxxxxxxxxxx>
---
Dinh Nguyen (1):
nios2: remove usage of libgcc
Simon Schuster (2):
nios2: export __divsi3_table
lib: extract 32bit mul/div helpers from nios2 into GENERIC_LIB
arch/nios2/Kconfig | 11 +++++
arch/nios2/Makefile | 4 +-
arch/nios2/kernel/nios2_ksyms.c | 22 ----------
arch/nios2/lib/Makefile | 1 +
arch/nios2/lib/math.c | 26 ++++++++++++
include/linux/libgcc.h | 12 ++++++
lib/Kconfig | 18 ++++++++
lib/Makefile | 11 +++++
lib/divmod.c | 94 +++++++++++++++++++++++++++++++++++++++++
lib/gccbcmp.c | 13 ++++++
lib/mulsi3.c | 24 +++++++++++
11 files changed, 211 insertions(+), 25 deletions(-)
---
base-commit: a39c950806213f6861d00f90729acaaa21f2d95a
change-id: 20261030-nios2-remove-usage-of-libgcc-63d9d0faad62
Best regards,
--
Simon Schuster <schuster.simon@xxxxxxxxxxxxxxxxxx>