ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Ivan Zakharyaschev <imz@altlinux.org>
To: ALT Linux Team development discussions <devel@lists.altlinux.org>
Subject: Re: [devel] [PATCH] verify-elf: honor RUNPATH, too ; was: Re:  Проблема при сборке newmon 27.0
Date: Tue, 29 Nov 2016 15:00:14 +0300 (MSK)
Message-ID: <alpine.LFD.2.20.1611291438000.13365@imap.altlinux.org> (raw)
In-Reply-To: <alpine.LFD.2.20.1611271406170.13365@imap.altlinux.org>

[-- Attachment #1: Type: text/plain, Size: 6490 bytes --]


On Sun, 27 Nov 2016, Ivan Zakharyaschev wrote:

>>  Вот действительно, проблема в том, что verify-elf не учитывает RUNPATH
>>  (как Вы и предположили). В отличие от lib.req, например.
>
> Предлагаю патч для rpm. (Руслан, можете попробовать собрать, добавив в

Думаю, всё в порядке с этим измененем (с учётом улучшения, которое я 
привожу ниже). Теперь, например, при сборке tracker будет меньше 
предупреждений (там RUNPATH; но для чистоты от предупреждений можно будет 
ещё улучшить и ужесточить .spec). (Ещё при поиске примеров попался RUNPATH 
в elfutils, но он без пользы там.)

Проверил пересобираемость пары пакетов. coreutils и meshlab (там вообще-то 
тоже много предупреждений про плагины, которые можно было бы почистить с 
LD_PRELOAD для verify-elf, как например, в boost; ещё у меня давно был 
пример таких пакетов с плагинами -- запишу тут, чтобы можно было вернуться 
к проблеме: что-то вроде stk/lmms, но там получилось, что при сборке 
исполняемого файла как PIE ошибки verify-elf превращались в 
предупреждения, что является нежелательным поведением verify-elf вообще).

Решил улучшить это изменение -- ужесточить так, как на самом деле:

>From c8832527c5828c0d8532d9c44b52588e5c7b51aa Mon Sep 17 00:00:00 2001
From: Ivan Zakharyaschev <imz@altlinux.org>
Date: Tue, 29 Nov 2016 13:32:18 +0300
Subject: [PATCH] verify-elf: RUNPATH overrides RPATH for verify_unresolved

>From ld.so's documentation about the search order:

Using the directories specified in the DT_RPATH dynamic section
attribute of the binary if present and DT_RUNPATH attribute does not
exist. Use of DT_RPATH is deprecated.
---
  scripts/verify-elf.in | 9 ++++++---
  1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/scripts/verify-elf.in b/scripts/verify-elf.in
index 51ed9ce..412a30d 100755
--- a/scripts/verify-elf.in
+++ b/scripts/verify-elf.in
@@ -327,7 +327,7 @@ run_eu()

  VerifyELF()
  {
-	local f preload t objdump_info fname lint_info textrel
+	local f preload t objdump_info fname lint_info textrel rpath
  	f="$1"; shift
  	preload="$1"; shift
  	elf_segments=
@@ -376,8 +376,11 @@ VerifyELF()
  	fi

  	if [ -z "${t##*ELF* executable*dynamically linked*}" -o -z "${t##*ELF* shared object*}" ]; then
-		verify_unresolved "$f" "$preload" "$fname" \
-			"$(printf %s "$objdump_info" |awk '{if ($1=="RPATH"||$1=="RUNPATH") print $2}' |tr -s : ' ' |sed -e "s|\$ORIGIN|${fname%/*}|g")"
+        	rpath="$(printf %s "$objdump_info" |awk '{if ($1=="RUNPATH") print $2}' |tr -s : ' ' |sed -e "s|\$ORIGIN|${fname%/*}|g")"
+        	if [ -z "$rpath" ]; then
+        		rpath="$(printf %s "$objdump_info" |awk '{if ($1=="RPATH") print $2}' |tr -s : ' ' |sed -e "s|\$ORIGIN|${fname%/*}|g")"
+        	fi
+		verify_unresolved "$f" "$preload" "$fname" "$rpath"
  		if [ -z "${t##*ELF 32-bit*}" ]; then
  			verify_lfs "$f"
  		fi
-- 
2.7.4


> началао заданиясборку того же тега rpm, что в задании 173509.)
>
> Subject: [PATCH] verify-elf: honor RUNPATH, too (like in lib.req.in:95 and 
> debuginfo.req.in:76)
>
> in addition to RPATH
> ---
>  scripts/verify-elf.in | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/scripts/verify-elf.in b/scripts/verify-elf.in
> index 316117f..6c30448 100755
> --- a/scripts/verify-elf.in
> +++ b/scripts/verify-elf.in
> @@ -362,7 +362,7 @@ VerifyELF()
> 	 	error_normal LINT "$f" 'eu-elflint failed'
> 	 fi
>
> -	verify_rpath "$f" "$(printf %s "$objdump_info" |awk '{if 
> ($1=="RPATH") print $2}')"
> +	verify_rpath "$f" "$(printf %s "$objdump_info" |awk '{if 
> ($1=="RPATH"||$1=="RUNPATH") print $2}')"
>
> 	 if [ -z "${t##*ELF* executable*}" -o -z "${t##*ELF* shared object*}"
> 	 ]; then
> 		verify_stack "$f"
> @@ -376,7 +376,7 @@ VerifyELF()
>
> 	 if [ -z "${t##*ELF* executable*dynamically linked*}" -o -z
> 	 "${t##*ELF* shared object*}" ]; then
> 		verify_unresolved "$f" "$preload" "$fname" \
> -			"$(printf %s "$objdump_info" |awk '{if ($1=="RPATH") 
> print $2}' |tr -s : ' ' |sed -e "s|\$ORIGIN|${fname%/*}|g")"
> +			"$(printf %s "$objdump_info" |awk '{if 
> ($1=="RPATH"||$1=="RUNPATH") print $2}' |tr -s : ' ' |sed -e 
> "s|\$ORIGIN|${fname%/*}|g")"
> 		 if [ -z "${t##*ELF 32-bit*}" ]; then
> 		 	verify_lfs "$f"
> 		fi
> -- 
>
>
>> http:  //git.altlinux.org/gears/r/rpm.git?p=rpm.git;a=blob;f=scripts/verify-elf.in;h=316117f05428961b85fa4428f86f4e6f9f0a7968;hb=HEAD#l378
>>
>>     verify_unresolved "$f" "$preload" "$fname" \
>>      "$(printf %s "$objdump_info" |awk '{if ($1=="RPATH")
>>      print $2}' |tr -s : ' ' |sed -e
>>      "s|\$ORIGIN|${fname%/*}|g")"
>>
>>  lib.req.in:95:		 awk '($1=="RPATH"||$1=="RUNPATH"){print $2}'
>>  |
>>
>>  Спасибо за предоставленный более полный материал (хотя бы в виде
>>  бинарника) к этому, получается, багрепорту.
>> 
>> >   У Вас есть под рукой бинарник plugin-container, который должен был бы
>> >   работать, но verify-elf не проходит? (verify-elf и т.п. можно запускать
>> >   отдельной командой, не во время сборки.) Без всяких дополнительных
>> >   редактирований. Просто нам остальным не так просто его получить -- 
>> >   процесс
>> >   сборки тяжёлый -- чтобы потом поизучать. Напишите побольше подробностей
>> >   про один конкретный бинарник (verify-elf, objdump для начала), чтобы
>> >   ситуация была яснее.
>> > 
>> >   --
>> >   Best regards,
>> >   Ivan
>> > 
>> 
>

  reply	other threads:[~2016-11-29 12:00 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-13  8:23 [devel] " Hihin Ruslan
2016-11-13 12:11 ` Alexey Tourbin
2016-11-13 12:29   ` Hihin Ruslan
2016-11-14 22:22   ` Hihin Ruslan
2016-11-15 13:34     ` Ruslan Hihin
2016-11-25 18:02     ` Ivan Zakharyaschev
2016-11-26  9:05       ` Hihin Ruslan
2016-11-27 10:32       ` Ivan Zakharyaschev
2016-11-27 11:11         ` Hihin Ruslan
2016-11-27 11:54           ` Ivan Zakharyaschev
2016-12-02 12:20           ` Ivan Zakharyaschev
2016-12-02 12:34             ` Ivan Zakharyaschev
2016-12-02 13:09             ` Ivan Zakharyaschev
2016-12-03 14:56             ` Hihin Ruslan
2016-12-03 21:19               ` Ivan Zakharyaschev
2016-12-03 23:53               ` Ivan Zakharyaschev
2016-12-04  9:40                 ` Hihin Ruslan
2016-12-04 10:11                   ` Ivan Zakharyaschev
2016-11-27 11:12         ` [devel] [PATCH] verify-elf: honor RUNPATH, too ; was: " Ivan Zakharyaschev
2016-11-29 12:00           ` Ivan Zakharyaschev [this message]
2016-11-19  4:11   ` [devel] Что такое runpath ? Hihin Ruslan
2016-11-19  4:20     ` Hihin Ruslan
2016-11-19  4:39     ` Hihin Ruslan
2016-11-25 18:07     ` Ivan Zakharyaschev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.LFD.2.20.1611291438000.13365@imap.altlinux.org \
    --to=imz@altlinux.org \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git