2023-01-06 07:35:15 |
Shengjing Zhu |
description |
In dh-golang, we use dpkg's C flags as Go's CGO flags. When dpkg's LTO feature is enabled, the LTO C flags may pass to CGO as well. But Go's linker doesn't support LTO. So in dh-golang, we implemented a workround to strip LTO flag[1].
[1] https://salsa.debian.org/go-team/packages/dh-golang/-/commit/501517bca24c155bdd3ed706ad413a22c625c7a8
```
$bf->strip($flag, "-ffat-lto-objects -flto=auto");
```
This works well in Debian, but it turns out not robust for Ubuntu.
In Ubuntu, we get such C flags:
```
$ dpkg-buildflags --get CFLAGS
-g -O2 -ffile-prefix-map=[retracted]=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security
```
It has two duplicated `-flto=auto -ffat-lto-objects`. So dh-golang's code doesn't handle it robustly. One `-flto=auto -ffat-lto-objects` set is still passed to CGO. This causes link error. |
In dh-golang, we use dpkg's C flags as Go's CGO flags. When dpkg's LTO feature is enabled, the LTO C flags may pass to CGO as well. But Go's linker doesn't support LTO. So in dh-golang, we implemented a workround to strip LTO flag[1].
[1] https://salsa.debian.org/go-team/packages/dh-golang/-/commit/501517bca24c155bdd3ed706ad413a22c625c7a8
```
$bf->strip($flag, "-ffat-lto-objects -flto=auto");
```
This works well in Debian, but it turns out not robust for Ubuntu.
In Ubuntu, we get such C flags:
```
$ dpkg-buildflags --get CFLAGS
-g -O2 -ffile-prefix-map=[redacted]=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security
```
It has two duplicated `-flto=auto -ffat-lto-objects`. So dh-golang's code doesn't handle it robustly. One `-flto=auto -ffat-lto-objects` set is still passed to CGO. This causes link error. |
|