--- Begin Message ---
- To: Debian Bug Tracking System <submit@bugs.debian.org>
- Subject: newlib: __ieee754_lgamma_r writes signgam outside struct _reent when using nano.specs
- From: Damien Nicolet <zardam@gmail.com>
- Date: Wed, 29 Jan 2020 23:39:43 +0100
- Message-id: <158033758378.2696983.14338873230644711370.reportbug@damien-pc>
Source: newlib
Severity: normal
Tags: patch
Dear Maintainer,
When using nano.specs, newlib declares a small struct _reent (96 bytes), but libm is still compiled against the full struct _reent (more than 1000 bytes). Gamma calculation writes signgam outside the small struct _reent.
libm.a compiled against the small struct _reent should be used with nano.specs.
Here is a patch correcting the problem by keeping a libm_nano.a in the package, and doing the replacement in nano.specs as the others "nano" libraries.
-- System Information:
Debian Release: bullseye/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 5.4.0-3-amd64 (SMP w/4 CPU cores)
Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8), LANGUAGE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
diff -Nru newlib-3.1.0.20181231/debian/changelog newlib-3.1.0.20181231/debian/changelog
--- newlib-3.1.0.20181231/debian/changelog 2019-02-11 07:19:52.000000000 +0100
+++ newlib-3.1.0.20181231/debian/changelog 2020-01-29 18:53:47.000000000 +0100
@@ -1,3 +1,10 @@
+newlib (3.1.0.20181231-1.1) UNRELEASED; urgency=medium
+
+ * Non-maintainer upload.
+ * Include libm_nano.a in package
+
+ -- Damien Nicolet <zardam@gmail.com> Wed, 29 Jan 2020 18:53:47 +0100
+
newlib (3.1.0.20181231-1) unstable; urgency=medium
* New upstream version 3.1.0.20181231
diff -Nru newlib-3.1.0.20181231/debian/patches/fix-use-libm-nano-specs.patch newlib-3.1.0.20181231/debian/patches/fix-use-libm-nano-specs.patch
--- newlib-3.1.0.20181231/debian/patches/fix-use-libm-nano-specs.patch 1970-01-01 01:00:00.000000000 +0100
+++ newlib-3.1.0.20181231/debian/patches/fix-use-libm-nano-specs.patch 2020-01-29 18:53:47.000000000 +0100
@@ -0,0 +1,13 @@
+Index: newlib-3.1.0.20181231/libgloss/arm/elf-nano.specs
+===================================================================
+--- newlib-3.1.0.20181231.orig/libgloss/arm/elf-nano.specs
++++ newlib-3.1.0.20181231/libgloss/arm/elf-nano.specs
+@@ -15,7 +15,7 @@
+ %(nano_link_gcc_c_sequence) --start-group %G %(nano_libc) %(nano_libgloss) --end-group
+
+ *link:
+-%(nano_link) %:replace-outfile(-lc -lc_nano) %:replace-outfile(-lg -lg_nano) %:replace-outfile(-lrdimon -lrdimon_nano) %:replace-outfile(-lstdc++ -lstdc++_nano) %:replace-outfile(-lsupc++ -lsupc++_nano)
++%(nano_link) %:replace-outfile(-lc -lc_nano) %:replace-outfile(-lg -lg_nano) %:replace-outfile(-lm -lm_nano) %:replace-outfile(-lrdimon -lrdimon_nano) %:replace-outfile(-lstdc++ -lstdc++_nano) %:replace-outfile(-lsupc++ -lsupc++_nano)
+
+ *lib:
+ %{!shared:%{g*:-lg_nano} %{!p:%{!pg:-lc_nano}}%{p:-lc_p}%{pg:-lc_p}}
diff -Nru newlib-3.1.0.20181231/debian/patches/series newlib-3.1.0.20181231/debian/patches/series
--- newlib-3.1.0.20181231/debian/patches/series 2019-02-11 07:19:52.000000000 +0100
+++ newlib-3.1.0.20181231/debian/patches/series 2020-01-29 18:53:47.000000000 +0100
@@ -1,2 +1,3 @@
reproducible-builds-locale.patch
fix-include-paths-nano-specs.patch
+fix-use-libm-nano-specs.patch
diff -Nru newlib-3.1.0.20181231/debian/rules newlib-3.1.0.20181231/debian/rules
--- newlib-3.1.0.20181231/debian/rules 2019-02-11 07:19:52.000000000 +0100
+++ newlib-3.1.0.20181231/debian/rules 2020-01-29 18:53:47.000000000 +0100
@@ -87,7 +87,7 @@
dh_auto_install -B$(BUILD_NANO_DIR) --destdir debian/tmp_nano --max-parallel=1
#
# Rename nano lib* files to lib*_nano
- find $(TMP_NANO_DIR) -regex ".*/lib\(c\|g\|rdimon\)\.a" \
+ find $(TMP_NANO_DIR) -regex ".*/lib\(c\|g\|m\|rdimon\)\.a" \
-exec rename 's@$(TMP_NANO_DIR)/(.*).a@$(TMP_DIR)/$$1_nano.a@' \{\} \+
#
# Move nano's version of newlib.h to nano/newlib.h
--- End Message ---