From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Tue, 29 Nov 2016 15:00:14 +0300 (MSK) From: Ivan Zakharyaschev To: ALT Linux Team development discussions In-Reply-To: Message-ID: References: <201611131123.19050@ruslandh> <201611150122.44073@ruslandh> User-Agent: Alpine 2.20 (LFD 67 2015-01-07) MIME-Version: 1.0 Content-Type: multipart/mixed; BOUNDARY="1807885841-691647854-1480420815=:13365" Subject: Re: [devel] =?koi8-r?b?W1BBVENIXSB2ZXJpZnktZWxmOiBob25vciBSVU5QQVRI?= =?koi8-r?b?LCB0b28gOyB3YXM6IFJlOiAg8NLPwszFzcEg0NLJINPCz9LLxSBu?= =?koi8-r?b?ZXdtb24gMjcuMA==?= X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Nov 2016 12:00:15 -0000 Archived-At: List-Archive: List-Post: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --1807885841-691647854-1480420815=:13365 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8BIT 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 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 >> > >> > --1807885841-691647854-1480420815=:13365--