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
>> >
>>
>
next prev parent 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