Package: libnewlib-arm-none-eabi
Version: 3.3.0-1
Severity: normal

Dear Maintainer,

newlib is supposed to be built with `-f{data,function}-sections`, and
newlib-nano is supposed to be built with also `-Os -fshort-wchar`:

=== cut debian/rules ===
CFLAGS := CFLAGS="-g -O2 -ffunction-sections -fdata-sections"
CFLAGS_NANO := CFLAGS="-g -Os -ffunction-sections -fdata-sections -fshort-wchar"
=== cut ===

Unfortunately, this is cross-compilation, and those flags are used to compile 
only
*build host* objects, and not for *target* objects. So, all target libraries 
are built
with wrong cflags.

This is especially bad for newlib-nano, as `-fshort-wchar` is alters ABI
(and lack of `-f*-sections` prevents removing unused data/functions on link
time, which is important for ram/flash limited targets).

(actually, I'm not sure if `-fshort-wchar` was that much good idea: you either 
don't
use `wchar_t` at all, or you want "proper" 32-bit one; and given that 
`-fshort-wchar`
is not automatically passed by `-specs=nano.specs`, this requires non-trivial 
and flaky
auto-configuration from library users, e.g. 
https://github.com/RIOT-OS/RIOT/pull/5627 ).

Fix:
CFLAGS += CFLAGS_FOR_TARGET="-g -O2 -ffunction-sections -fdata-sections"
CFLAGS_NANO += CFLAGS_FOR_TARGET="-g -Os -ffunction-sections -fdata-sections 
-fshort-wchar"

Disclaimer: noticed while building local backport; verified with buildd's logs
  
https://buildd.debian.org/status/fetch.php?pkg=newlib&arch=all&ver=3.3.0-1&stamp=1583408649&raw=1
and inspecting lib*.a from "official" packages from sid/bullseye, buster, 
stretch
(confirmed all was built without -f{funciton,data}-section). Bugreport metadata
altered to match sid version.

-- System Information:
Debian Release: 9.13
  APT prefers oldstable-updates
  APT policy: (500, 'oldstable-updates'), (500, 'oldstable-debug'), (500, 
'oldstable')
Architecture: i386 (x86_64)
Foreign Architectures: amd64

Kernel: Linux 4.9.0-14-amd64 (SMP w/2 CPU cores)
Locale: LANG=ru_RU.KOI8-R, LC_CTYPE=ru_RU.KOI8-R (charmap=KOI8-R), 
LANGUAGE=ru_RU.KOI8-R (charmap=KOI8-R)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages libnewlib-arm-none-eabi depends on:
ii  libnewlib-dev  3.3.0-1

Versions of packages libnewlib-arm-none-eabi recommends:
ii  gcc-arm-none-eabi           15:8-2019-q3-1
ii  libstdc++-arm-none-eabi-ne  15:8-2019-q3-1

Versions of packages libnewlib-arm-none-eabi suggests:
pn  libnewlib-doc  <none>

-- no debconf information

Reply via email to