On Sun, 2022-02-13 at 20:05 +0100, Zbigniew Jędrzejewski-Szmek wrote: > On Fri, Feb 11, 2022 at 08:01:45PM +0100, Zbigniew Jędrzejewski-Szmek > wrote: > > Hi! > > > > I did some quick'n'dirty statistics of how many ELF files > > successfully gained > > a .package.note section. > > > > packages: 28742, see [1] for the list (*) > > ELF files: 72464, see [2] > > ELF files with .package.note: 47939, see [3] > > ELF files without: 24525, see [4] > > > > It turns out that many of those are special files. I filtered > > out > > '\.(mod|o|h|cmxs|go|syso|c32|fas|wcx|wdx|dsx|wlx|wfx|out|dyn.*none) > > $' (**). > > Most of those seem irrelevant, in particular .o hasn't been linked, > > so it can't have the notes section… > > > > ELF files after filtering: 15723, see [5] > > packages for those filtered files: 4659, see [6] > > > > I did some quick analysis, and the reasons why the notes section is > > missing differ: > > - 460 packages don't have the .fc36 tag, so they weren't rebuilt > > - some packages I checked were built before the mass rebuild and > > got the .fc36 disttag, but failed in the subsequent mass rebuild > > - opt-outs: > > 895 ghc packages > > 210+ ocaml packages > > 197 R packages > > 30 ruby packages > > 61 python packages > > > > That still leaves quite a lot of packages without the notes, but I > > think > > more manual analysis would be necessary to figure out the reasons. > > Some other common failure modes: > - rust binaries (not rust-*-devel): it seems to be a general issue > with the cargo > build process. > > Manually inserting "-Clink-args=-Wl,-dT,…/.package_note-….ld" into > a rustc command > seems to work. So maybe it's just a matter of find the right flags > for cargo. > > - go binaries: same. > > E.g. for 3mux I see: > > + go build -buildmode pie -compiler gc '-tags=rpm_crashtraceback ' > -ldflags ' -X github.com/aaronjanse/3mux/version=1.0.1 -B > 0x383b831c21c2e07438685900d5a662a268d4e0ec -compressdwarf=false - > extldflags '\''-Wl,-z,relro -Wl,--as-needed -Wl,-z,now - > specs=/usr/lib/rpm/redhat/redhat-hardened-ld - > specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 - > Wl,-dT,/builddir/build/BUILD/3mux-1.0.1/.package_note-3mux-1.0.1- > 4.fc36.x86_64.ld '\''' -a -v -x -o /builddir/build/BUILD/3mux- > 1.0.1/_build/bin/3mux github.com/aaronjanse/3mux > > but 'readelf -n -W /usr/bin/3mux only' shows > .note.gnu.build-id and .note.go.buildid. > > I actually think it'd be useful to fix the note additions for rust > and > go. Both rust and go binaries are fairly portable between different > systems, and the notes would help identify such binaries. > > I'll see if I can figure out rust… I don't know anything about go, so > any help would welcome. > > Zbyszek
Hi,
For golang, a solution that works (but I am not a golang expert, so I
do not know whether it is the right solution in general) is to add the
'-linkmode=external' flag to the go linking step. As far as I
understand, this forces to use the default distro linker instead of the
internal one.
With this change to the rpm script:
--- a/macros.go-compilers-golang
+++ b/macros.go-compilers-golang
@@ -29,7 +29,7 @@
#
# %make GOBUILDFLAGS="%gobuildflags"
#
-%gobuildflags() %{expand:%{gocompilerflags} -tags="rpm_crashtraceback
${BUILDTAGS:-}" -ldflags "${LDFLAGS:-} %{?currentgoldflags} -B 0x$(head -c20
/dev/urandom|od -An -tx1|tr -d ' \\n') -compressdwarf=false -extldflags
'%__global_ldflags %{?__golang_extldflags}'" -a -v -x}
+%gobuildflags() %{expand:%{gocompilerflags} -tags="rpm_crashtraceback
${BUILDTAGS:-}" -ldflags "${LDFLAGS:-} %{?currentgoldflags} -B 0x$(head -c20
/dev/urandom|od -An -tx1|tr -d ' \\n') -compressdwarf=false -linkmode=external
-extldflags '%__global_ldflags %{?__golang_extldflags}'" -a -v -x}
# Turn off Go modules
%gomodulesmode GO111MODULE=off
A local rebuild of the 3mux package you cited shows the note:
$ readelf --notes -W rpmbuild/BUILDROOT/3mux-1.0.1-4.fc36.x86_64/usr/bin/3mux
Displaying notes found in: .note.gnu.property
Owner Data size Description
GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
Properties: x86 ISA needed: x86-64-baseline
Displaying notes found in: .note.gnu.build-id
Owner Data size Description
GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID
bitstring) Build ID: d95f4a446c52232a5f50d7cae20630fc358b5baf
Displaying notes found in: .note.package
Owner Data size Description
FDO 0x00000078 FDO_PACKAGING_METADATA Packaging
Metadata:
{"type":"rpm","name":"3mux","version":"1.0.1-4.fc36","architecture":"x86_64","osCpe":"cpe:/o:fedoraproject:fedora:36"}
Displaying notes found in: .note.ABI-tag
Owner Data size Description
GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag)
OS: Linux, ABI: 3.2.0
Displaying notes found in: .note.go.buildid
Owner Data size Description
Go 0x00000053 GO BUILDID description data: 62
56 61 67 68 7a 68 5f 53 6e 72 77 70 51 48 49 73 6f 36 41 2f 4a 35 53 4b 51 55
4b 46 59 4c 43 48 41 52 71 61 7a 6d 6c 73 2f 30 73 49 6b 69 77 39 62 6b 32 31
4f 75 7a 39 69 50 77 56 4d 2f 5f 39 74 55 41 36 31 6c 36 37 75 42 57 67 74 6a
2d 48 66 38
Displaying notes found in: .gnu.build.attributes
Owner Data size Description
GA$<version>3a1 0x00000010 OPEN Applies to region
from 0x4f000 to 0x4f396
GA$<version>3a1 0x00000010 OPEN Applies to region
from 0x4f3a0 to 0x1ceb21
--
Kind regards,
Luca Boccassi
signature.asc
Description: This is a digitally signed message part
_______________________________________________ devel mailing list -- [email protected] To unsubscribe send an email to [email protected] Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedoraproject.org/archives/list/[email protected] Do not reply to spam on the list, report it: https://pagure.io/fedora-infrastructure
