[PATCH] gprofng: Fix cross-compilation binary name.

Zheng Junjie zhengjunjie@iscas.ac.cn
Sat Feb 15 13:23:38 GMT 2025


Vladimir Mezentsev <vladimir.mezentsev@oracle.com> writes:

> On 2/10/25 01:18, Zheng Junjie wrote:
>> hello, when i use binutils 2.44 to cross-compilation, I found that
>> install-exec-local in gprofng/src/Makefile.am had the wrong binary name
>> when cross-compiled, so the symlink created was invalid link.
>>
>> The following patch should be able to fix it.
>>
>>  From b499f0c797779a6d7ff01445aebd2fcc47aac357 Mon Sep 17 00:00:00 2001
>> From: Zheng Junjie<zhengjunjie@iscas.ac.cn>
>> Date: Mon, 10 Feb 2025 17:04:55 +0800
>> Subject: [PATCH] gprofng: Fix cross-compilation binary name.
>>
>> commit d25ba4596e85da6d8af78c88b5917e14763afbe1 create symbolic link
>> no care cross-compilation prefix.
>>
>> gprofng/ChangeLog
>> 2025-02-10  Zheng Junjie<zhengjunjie@iscas.ac.cn>
>> 	* src/Makefile.am: create symbolic link respect cross-compilation.
>> 	* src/Makefile.in: Rebuild.
>> ---
>>   gprofng/src/Makefile.am | 12 +++++-------
>>   gprofng/src/Makefile.in | 12 +++++-------
>>   2 files changed, 10 insertions(+), 14 deletions(-)
>>
>> diff --git a/gprofng/src/Makefile.am b/gprofng/src/Makefile.am
>> index a132a9ddb05..0465cdb06e3 100644
>> --- a/gprofng/src/Makefile.am
>> +++ b/gprofng/src/Makefile.am
>> @@ -179,10 +179,8 @@ $(srcdir)/DbeSession.cc: QLParser.tab.hh
>>   .PHONY: install-exec-local
>>   install-exec-local:
>>   	$(mkinstalldirs) $(DESTDIR)$(bindir)
>> -	rm -f $(DESTDIR)$(bindir)/gp-{archive,collect-app,display-html,display-src,display-text}
>> -	ln -s gprofng-archive $(DESTDIR)$(bindir)/gp-archive
>> -	ln -s gprofng-collect-app $(DESTDIR)$(bindir)/gp-collect-app
>> -	ln -s gprofng-display-html $(DESTDIR)$(bindir)/gp-display-html
>> -	ln -s gprofng-display-src $(DESTDIR)$(bindir)/gp-display-src
>> -	ln -s gprofng-display-text $(DESTDIR)$(bindir)/gp-display-text
>> -
>
> We renamed gp-* to gprofng-* in 2.44.
> If the user uses the gprofng driver (e.g. gprofng collect app .., or
> gprofng display text ..),
> we don't need gp-* links.
>
> However, "advanced" users may have used gp-collect-app or
> gp-display-text directly in scripts.
> For these users, we decided to create gp-* links in 2.44.
> I hope we remove gp-* links in next release.
> We removed all gp-* links from our documentation.

I agent, but just "ln -s" ignore cross-compilation case, when
when use configure --build=x86_64-unknown-linux-gnu
--target=riscv64-linux-gnu ..., gnu-gprofng-display-text install as
riscv64-linux-gnu-gprofng-display-text, gp-display-text ->
gprofng-display-text is a invalid link, On some distribution packaging
when validation fails, such as https://0x0.st/8NOt.44.log

I think there is still some time before the next release, and maybe
they'll see this patch when they run into this problem.

>
>
>> +	for i in gp-{archive,collect-app,display-html,display-src,display-text}; do \
>> +		oldname=`echo $$i | sed '$(transform)'`; \
>
>  What is '$(transform) in your case ? If $(oldname) and $(i) are
> different this link is not needed. The old scripts don't use
> $(oldname). New scripts have to use gprofng driver. -Vladimir
>
In my case, $(transform) is "s&^&riscv64-linux-gnu-&"

without my patch:

gp-archive -> gprofng-archive
gp-collect-app -> gprofng-collect-app
gp-display-html -> gprofng-display-html
gp-display-src -> gprofng-display-src
gp-display-text -> gprofng-display-text
riscv64-linux-gnu-addr2line
riscv64-linux-gnu-ar
riscv64-linux-gnu-as
riscv64-linux-gnu-c++filt
riscv64-linux-gnu-elfedit
riscv64-linux-gnu-gdb
riscv64-linux-gnu-gdb-add-index
riscv64-linux-gnu-gprof
riscv64-linux-gnu-gprofng
riscv64-linux-gnu-gprofng-archive
riscv64-linux-gnu-gprofng-collect-app
riscv64-linux-gnu-gprofng-display-html
riscv64-linux-gnu-gprofng-display-src
riscv64-linux-gnu-gprofng-display-text
riscv64-linux-gnu-gstack
riscv64-linux-gnu-ld
riscv64-linux-gnu-ld.bfd
riscv64-linux-gnu-nm
riscv64-linux-gnu-objcopy
riscv64-linux-gnu-objdump
riscv64-linux-gnu-ranlib
riscv64-linux-gnu-readelf
riscv64-linux-gnu-run
riscv64-linux-gnu-size
riscv64-linux-gnu-strings
riscv64-linux-gnu-strip

with my patch:

riscv64-linux-gnu-addr2line
riscv64-linux-gnu-ar
riscv64-linux-gnu-as
riscv64-linux-gnu-c++filt
riscv64-linux-gnu-elfedit
riscv64-linux-gnu-gdb
riscv64-linux-gnu-gdb-add-index
riscv64-linux-gnu-gp-archive -> riscv64-linux-gnu-gprofng-archive
riscv64-linux-gnu-gp-collect-app -> riscv64-linux-gnu-gprofng-collect-app
riscv64-linux-gnu-gp-display-html -> riscv64-linux-gnu-gprofng-display-html
riscv64-linux-gnu-gp-display-src -> riscv64-linux-gnu-gprofng-display-src
riscv64-linux-gnu-gp-display-text -> riscv64-linux-gnu-gprofng-display-text
riscv64-linux-gnu-gprof
riscv64-linux-gnu-gprofng
riscv64-linux-gnu-gprofng-archive
riscv64-linux-gnu-gprofng-collect-app
riscv64-linux-gnu-gprofng-display-html
riscv64-linux-gnu-gprofng-display-src
riscv64-linux-gnu-gprofng-display-text
riscv64-linux-gnu-gstack
riscv64-linux-gnu-ld
riscv64-linux-gnu-ld.bfd
riscv64-linux-gnu-nm
riscv64-linux-gnu-objcopy
riscv64-linux-gnu-objdump
riscv64-linux-gnu-ranlib
riscv64-linux-gnu-readelf
riscv64-linux-gnu-run
riscv64-linux-gnu-size
riscv64-linux-gnu-strings
riscv64-linux-gnu-strip


>> +		rm -f $(DESTDIR)$(bindir)/$$oldname ; \
>> +		ln -s `echo $$oldname | sed 's&gp-&gprofng-&'` $(DESTDIR)$(bindir)/$$oldname; \
>> +	done
>> diff --git a/gprofng/src/Makefile.in b/gprofng/src/Makefile.in
>> index d0dec12e244..d6f1f9438b6 100644
>> --- a/gprofng/src/Makefile.in
>> +++ b/gprofng/src/Makefile.in
>> @@ -1119,13 +1119,11 @@ $(srcdir)/DbeSession.cc: QLParser.tab.hh
>>   .PHONY: install-exec-local
>>   install-exec-local:
>>   	$(mkinstalldirs) $(DESTDIR)$(bindir)
>> -	rm -f $(DESTDIR)$(bindir)/gp-{archive,collect-app,display-html,display-src,display-text}
>> -	ln -s gprofng-archive $(DESTDIR)$(bindir)/gp-archive
>> -	ln -s gprofng-collect-app $(DESTDIR)$(bindir)/gp-collect-app
>> -	ln -s gprofng-display-html $(DESTDIR)$(bindir)/gp-display-html
>> -	ln -s gprofng-display-src $(DESTDIR)$(bindir)/gp-display-src
>> -	ln -s gprofng-display-text $(DESTDIR)$(bindir)/gp-display-text
>> -
>> +	for i in gp-{archive,collect-app,display-html,display-src,display-text}; do \
>> +		oldname=`echo $$i | sed '$(transform)'`; \
>> +		rm -f $(DESTDIR)$(bindir)/$$oldname ; \
>> +		ln -s `echo $$oldname | sed 's&gp-&gprofng-&'` $(DESTDIR)$(bindir)/$$oldname; \
>> +	done
>>   # Tell versions [3.59,3.63) of GNU make to not export all variables.
>>   # Otherwise a system limit (for SysV at least) may be exceeded.
>>   .NOEXPORT:
>> -- 2.47.1
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20250215/f1ee688e/attachment.sig>


More information about the Binutils mailing list