[Bug 2002076] Re: stripping lto flags doesn't work as expected
Shengjing Zhu
2002076 at bugs.launchpad.net
Fri Jan 6 08:34:45 UTC 2023
$bf->strip first split its input (here is `-ffat-lto-objects
-flto=auto`), then use for loop to strip every flag.
```
my ($self, $flag, $value, $src, $maint) = @_;
foreach my $tostrip (split(/\s+/, $value)) {
next unless length $tostrip;
$self->{flags}->{$flag} =~ s/(^|\s+)\Q$tostrip\E(\s+|$)/ /g;
}
```
It does use `g` flag in regex, (maybe want to strip all duplicated
flag?)
In first loop, for `-ffat-lto-objects`, it does strip two `-ffat-lto-
objects`. Then the flag becomes `-flto=auto -flto=auto`.
Then in second loop, it stops working. Because there's only one space
between two `-flto=auto`. However the regex expects space before and
after one token. So it only strips one `-flto=auto`.
See https://regex101.com/r/AgDMzv/1 for regex debug.
** Also affects: dpkg (Ubuntu)
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to dh-golang in Ubuntu.
https://bugs.launchpad.net/bugs/2002076
Title:
stripping lto flags doesn't work as expected
Status in dh-golang package in Ubuntu:
New
Status in dpkg package in Ubuntu:
New
Bug 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=[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.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/dh-golang/+bug/2002076/+subscriptions
More information about the foundations-bugs
mailing list