-flto fails on arm64
Hi, if built with -flto (being the default in Ubuntu and getting more widely used in general these days) the build on arm64 fails.
...
Note: Writing zerk.1
gcc -o gpsd-3.22/gpsd/dbusexport.o -c -pthread -Wall -Wcast-align -Wextra -Wimplicit-fallthrough -Wmissing-declarations -Wmissing-prototypes -Wno-missing-field-initializers -Wno-uninitialized -Wpointer-arith -Wreturn-type -Wstrict-prototypes -Wvla -Wdate-time -g -ffile-prefix-map=/root/gpsd-3.22=. -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -flto=auto -O2 -pthread -D_FORTIFY_SOURCE=2 -I/usr/include/dbus-1.0 -I/usr/lib/aarch64-linux-gnu/dbus-1.0/include -I/usr/include/libusb-1.0 gpsd-3.22/gpsd/dbusexport.c
gcc -o gpsd-3.22/gpsd/gpsd.o -c -pthread -Wall -Wcast-align -Wextra -Wimplicit-fallthrough -Wmissing-declarations -Wmissing-prototypes -Wno-missing-field-initializers -Wno-uninitialized -Wpointer-arith -Wreturn-type -Wstrict-prototypes -Wvla -Wdate-time -g -ffile-prefix-map=/root/gpsd-3.22=. -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -flto=auto -O2 -pthread -D_FORTIFY_SOURCE=2 -I/usr/include/dbus-1.0 -I/usr/lib/aarch64-linux-gnu/dbus-1.0/include -I/usr/include/libusb-1.0 gpsd-3.22/gpsd/gpsd.c
gcc -o gpsd-3.22/gpsd/shmexport.o -c -pthread -Wall -Wcast-align -Wextra -Wimplicit-fallthrough -Wmissing-declarations -Wmissing-prototypes -Wno-missing-field-initializers -Wno-uninitialized -Wpointer-arith -Wreturn-type -Wstrict-prototypes -Wvla -Wdate-time -g -ffile-prefix-map=/root/gpsd-3.22=. -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -flto=auto -O2 -pthread -D_FORTIFY_SOURCE=2 -I/usr/include/dbus-1.0 -I/usr/lib/aarch64-linux-gnu/dbus-1.0/include -I/usr/include/libusb-1.0 gpsd-3.22/gpsd/shmexport.c
gcc -o gpsd-3.22/gpsd/timehint.o -c -pthread -Wall -Wcast-align -Wextra -Wimplicit-fallthrough -Wmissing-declarations -Wmissing-prototypes -Wno-missing-field-initializers -Wno-uninitialized -Wpointer-arith -Wreturn-type -Wstrict-prototypes -Wvla -Wdate-time -g -ffile-prefix-map=/root/gpsd-3.22=. -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -flto=auto -O2 -pthread -D_FORTIFY_SOURCE=2 -I/usr/include/dbus-1.0 -I/usr/lib/aarch64-linux-gnu/dbus-1.0/include -I/usr/include/libusb-1.0 gpsd-3.22/gpsd/timehint.c
gcc -o gpsd-3.22/gpsd/sd_socket.o -c -pthread -Wall -Wcast-align -Wextra -Wimplicit-fallthrough -Wmissing-declarations -Wmissing-prototypes -Wno-missing-field-initializers -Wno-uninitialized -Wpointer-arith -Wreturn-type -Wstrict-prototypes -Wvla -Wdate-time -g -ffile-prefix-map=/root/gpsd-3.22=. -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -flto=auto -O2 -pthread -D_FORTIFY_SOURCE=2 -I/usr/include/dbus-1.0 -I/usr/lib/aarch64-linux-gnu/dbus-1.0/include -I/usr/include/libusb-1.0 gpsd-3.22/gpsd/sd_socket.c
gcc -o gpsd-3.22/gpsd/gpsd -Wl,-Bsymbolic-functions -Wl,-z,relro -pthread gpsd-3.22/gpsd/dbusexport.o gpsd-3.22/gpsd/gpsd.o gpsd-3.22/gpsd/shmexport.o gpsd-3.22/gpsd/timehint.o gpsd-3.22/gpsd/sd_socket.o -Lgpsd-3.22 gpsd-3.22/libgpsd.a gpsd-3.22/libgps/libais_json.a -lusb-1.0 -ludev -lbluetooth -lm -lrt -lnsl -ldbus-1 -lsystemd
/tmp/ccLhoNaG.ltrans7.ltrans.o: in function `ntpshm_context_init.constprop.0':
/root/gpsd-3.22/gpsd-3.22/gpsd/timehint.c:152:(.text+0x99e4): relocation truncated to fit: R_AARCH64_ADR_PREL_PG_HI21 against symbol `context.lto_priv.0' defined in .bss section in /tmp/ccLhoNaG.ltrans0.ltrans.o
collect2: error: ld returned 1 exit status
I did not see the same happen on non-arm64. The issue seems 100% reproducible if you build gpsd 3.22 or later on Ubuntu 22.04.