ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] IA: eliminating TEXTRELocations
@ 2003-11-08 15:57 Dmitry V. Levin
  2003-11-08 17:29 ` [devel] " Michael Shigorin
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Dmitry V. Levin @ 2003-11-08 15:57 UTC (permalink / raw)
  To: ALT Devel discussion list

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

Greetings!

Оказывается, к сожалению, большинство программистов, создающих разделяемые
библиотеки (DSO), относится к этой работе слишком легкомысленно и не
учитывает рекомендации специалистов.

Об одной такой проблеме т.н. "text relocations" я расскажу подробнее.

Начну с вольного перевода нескольких фрагментов из статьи
"How To Write Shared Libraries" (Ulrich Drepper,
http://people.redhat.com/drepper/dsohowto.pdf, 2003, версия 1.2).

"Самое главное - всегда использовать параметры -fpic либо -fPIC при
порождении кода, который в конечном итоге попадёт в DSO.  Эта
рекомендация применима в равной степени как к коду, так и к данным. Код,
который не был скомпилирован таким образом, будет содержать text
relocations.  Этому нет оправдания.  Text relocations требуют от
динамического компоновщика (dynamic linker) дополнительной работы.
Аргументы, базирующиеся на утверждении, что код не является разделяемым
потому, что другие процессы не используют этот DSO, не верны.  В таком
случае вообще нет смысла использовать DSO; соответствующий код следует
просто собирать в составе приложения."

"Результат любого перемещения (relocation) будет сохранен в виде ссылки
где-то в DSO.  В нормальной ситуации это место будет расположено в
сегменте данных.  В случае некорректно порождённого пользователем,
компилятором или компоновщиком кода перемещения могут затрагивать сегменты
кода и read-only данных.  Динамический компоновщик в состоянии обработать
корректно эту ситуацию только в случае, если DSO, в соответствие со
спецификацией формата ELF, содержит пометку DT_TEXTREL в его динамической
секции (dynamic section).  В результате, к сожалению, изменённая страница
памяти больше не будет разделяемой, т.е. не сможет быть использована
другими процессами.  Сам процесс text relocation также довольно длительный
ввиду того, что ядро производит дополнительные изменения в структурах
хранения информации по управлению памятью.  И, наконец, код и данные,
которые могли бы быть размещены в read-only памяти, оказываются в обычной
памяти, доступной для случайного изменения вследствие сбоя в программе."

Проверить, содержит ли данный конкретный DSO text relocations (т.е.
помечен ли он как содержащий text relocations), легко:
"readelf -d binary |fgrep TEXTREL" или "objdump -p binary |fgrep TEXTREL"
- выбирайте любой способ.

Вот список пакетов в Сизифе, которые в принципе собираются (точнее говоря,
процесс сборки которых доходит как минимум до завершения секции %install),
но при этом содержат text relocations:

AfterStep-2.0-alt1.cvs20031017
Mesa-5.0.1-alt7
SDL-1.2.6-alt1
TORCS-1.2.1-alt1
XFree86-4.3.0-alt6
a52dec-0.7.4-alt2
allegro-4.0.3-alt1
alsa-patch-bay-0.5.1-alt0.7
arj-3.10b-alt2
avifile-0.737-alt0.7
beep-1.0.0-alt0.1pre4
compat-libstdc++-egcs-alt1
cups-1.1.18-alt8.3
doomlegacy-1:1.41-alt1
em8300-0.13.0.cvs-alt3
ffmpeg-0.4.8-alt1
fglrx_glx-3.2.8-alt1
flac-1.1.0-alt3
gammu-0.88-alt1
gnokii-0.5.5-alt1
gnu-ghostscript-7.07-alt0.1
goblin-2.5-alt1
gstreamer-plugins-0.6.4-alt1
gthumb-2.1.8-alt1
hermes-1.3.3-alt1
imlib2-1.0.6-alt4
j2se1.3-sun-1.3.1_03-alt1
j2se1.4-blackdown-1.4.1_01-alt2
j2se1.4-sun-1.4.2_01-alt2
kdemultimedia-3.1.4-alt2
kudzu-1.1.13-alt4
lablGL-1.00-alt1
ladspa-guitar-preamp-1.0-alt1
ladspa-guitar-super-60-1.0-alt1
ladspa-guitar-unmatched-1.0-alt1
ladspa-moogvcf-plugins-1.1-alt0.5
lame-3.93.1-alt2
libalsa-0.9.8-alt1
libassuan-0.6.0-alt1
libdv-0.99-alt1
libfame-0.9.0-alt2
liblcms-1.09-alt1
libmpeg3-1.5.0-alt1
libnet1-1.0.2a-ipl4mdk
libopenh323-1.11.2-alt2
libquicktime-0.9.2-alt1.1
lockdev-1.0.1-alt1
mjpegtools-1.6.1.90-alt2
mnogosearch-ruby-1.0.3-alt1
mpeg2dec-0.3.1-alt1.5cvs20030408
mpeg_lib-1.3.1-ipl11mdk
mpfc-1.0-alt1
muse-0.6.1-alt0.5
nvidia_glx_src_1.0.4363-1.0.4363-alt5
nvidia_glx_src_1.0.4496-1.0.4496-alt6
ocaml-mysql-1.0.1-alt1
ocaml-postgres-20010808-alt11s
ocamlgsl-0.2.2-alt3
ocamlnet-0.96-alt4s
openoffice-1:1.0.2-alt5
opensc-0.7.0-alt1
openssl-0.9.6k-alt1
pcre-ocaml-4.28.3-alt5s
ppp-2.4.1.20030923-alt1
pxp-1.1.94-alt3s
python21-2.1.3-alt5.1
reiserfs-utils-1:3.6.4-alt2
rte-0.5.1-alt2
ruby-gdchart-0.0.9-alt3
tcl-cost-2.2-alt4.p1
transcode-0.6.10-alt2
transconnect-1.3-alt1
tuxvsclippy-0.2.3-alt1
valgrind-2.0-alt0.20030725
valgrind-calltree-0.9.4-alt2
veejay-0.5.1-alt0.5
wine-20030911-alt1
xine-1.0.0-alt2.rc2
xmms-defx-0.9.9-alt1
xmms-kjofol-0.95-alt4
xmms-kjofol-skins-1.2.0-alt3
xmms-musepack-0.98-alt1
xmp-2.0.5-alt0.6pre3
xvid-0.9.2-alt1
zinf-2.2.4-alt1

Я внедрил проверку на TEXTREL в verify_elf очередной версии rpm-build.
По умолчанию она будет включена.

Теперь verify_elf будет содержать 2 проверки: RPATH и TEXTREL.

Чтобы ослабить проверку RPATH, можно использовать либо прежнее выражение
%set_verify_elf_method relaxed
либо новую форму выражения
%set_verify_elf_method rpath=relaxed

Чтобы ослабить проверку на TEXTREL, можно использовать новую форму
выражения
%set_verify_elf_method textrel=relaxed

Чтобы ослабить проверку обоих параметров, можно использовать новую форму
выражения
%set_verify_elf_method rpath=relaxed,textrel=relaxed

Разумеется, ослаблять проверки, включённые по умолчанию, не
рекомендуется.

Если вы собираете пакет, содержащий лишь разделяемые библиотеки, то для
решения проблемы TEXTREL, как правило, достаточно применить выражение
%add_optflags %optflags_shared

Если в пакете присутствуют как DSO, так и обычные исполняемые приложения,
то проблему TEXTREL, как правило, можно решить путём корректировки CFLAGS
в makefile'ах.

Ситуация значительно осложняется в случае, если проблема TEXTREL вызвана
наличием не-PIC кода, написанного на ассемблере.


--
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [devel] Re: IA: eliminating TEXTRELocations
  2003-11-08 15:57 [devel] IA: eliminating TEXTRELocations Dmitry V. Levin
@ 2003-11-08 17:29 ` Michael Shigorin
  2003-11-10 12:21 ` [devel] " Dmitry V. Levin
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 12+ messages in thread
From: Michael Shigorin @ 2003-11-08 17:29 UTC (permalink / raw)
  To: ALT Devel discussion list; +Cc: docs

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

On Sat, Nov 08, 2003 at 06:57:31PM +0300, Dmitry V. Levin wrote:
> Если вы собираете пакет, содержащий лишь разделяемые
> библиотеки, то для решения проблемы TEXTREL, как правило,
> достаточно применить выражение %add_optflags %optflags_shared

Вожможно ли этот постиг сохранить в виде ссылаемой статьи,
желательно на docs.altlinux.ru как "DSO policy"?

-- 
 ---- WBR, Michael Shigorin <mike@altlinux.ru>
  ------ Linux.Kiev http://www.linux.kiev.ua/

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] IA: eliminating TEXTRELocations
  2003-11-08 15:57 [devel] IA: eliminating TEXTRELocations Dmitry V. Levin
  2003-11-08 17:29 ` [devel] " Michael Shigorin
@ 2003-11-10 12:21 ` Dmitry V. Levin
  2003-11-10 18:09   ` [devel] " Michael Shigorin
  2003-11-12  9:14   ` Mikhail Zabaluev
  2003-11-10 12:27 ` Alexey Tourbin
  2003-11-12 15:50 ` [devel] " Vitaly Lugovsky
  3 siblings, 2 replies; 12+ messages in thread
From: Dmitry V. Levin @ 2003-11-10 12:21 UTC (permalink / raw)
  To: ALT Devel discussion list

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

On Sat, Nov 08, 2003 at 06:57:31PM +0300, Dmitry V. Levin wrote:
> Вот список пакетов в Сизифе, которые в принципе собираются (точнее говоря,
> процесс сборки которых доходит как минимум до завершения секции %install),
> но при этом содержат text relocations:

Вот более точный список:

AfterStep-2.0-alt1.cvs20031017
Mesa-5.0.1-alt7
R-base-1.8.0-alt1
SDL-1.2.6-alt1
TORCS-1.2.1-alt1
XFree86-4.3.0-alt6
a52dec-0.7.4-alt2
allegro-4.0.3-alt1
alsa-patch-bay-0.5.1-alt0.7
arj-3.10b-alt2
avifile-0.737-alt0.7
beep-1.0.0-alt0.1pre4
camlimages-2.11-alt4s
compat-libstdc++-egcs-alt1
cups-1.1.18-alt8.3
doomlegacy-1:1.41-alt1
em8300-0.13.0.cvs-alt3
ffmpeg-0.4.8-alt1
fglrx_glx-3.2.8-alt1
flac-1.1.0-alt3
gammu-0.88-alt1
gnokii-0.5.5-alt1
gnu-ghostscript-7.07-alt0.1
goblin-2.5-alt1
gstreamer-plugins-0.6.4-alt1
gthumb-2.1.8-alt1
hermes-1.3.3-alt1
imlib2-1.0.6-alt4
j2se1.3-sun-1.3.1_03-alt1
j2se1.4-blackdown-1.4.1_01-alt2
j2se1.4-sun-1.4.2_01-alt2
kdemultimedia-3.1.4-alt2
kudzu-1.1.13-alt4
lablGL-1.00-alt1
lablgtk-1.2.6-alt2
lablgtk2-2.2.0-alt1
ladspa-guitar-preamp-1.0-alt1
ladspa-guitar-super-60-1.0-alt1
ladspa-guitar-unmatched-1.0-alt1
ladspa-moogvcf-plugins-1.1-alt0.5
lame-3.93.1-alt2
libalsa-0.9.8-alt1
libassuan-0.6.0-alt1
libdv-0.99-alt1
libfame-0.9.0-alt2
liblcms-1.09-alt1
libmpeg3-1.5.0-alt1
libnet1-1.0.2a-ipl4mdk
libopenh323-1.11.2-alt2
libquicktime-0.9.2-alt1.1
lockdev-1.0.1-alt1
mjpegtools-1.6.1.90-alt2
mnogosearch-ruby-1.0.3-alt1
mpeg2dec-0.3.1-alt1.5cvs20030408
mpeg_lib-1.3.1-ipl11mdk
mpfc-1.0-alt1
muse-0.6.1-alt0.5
nvidia_glx_src_1.0.4363-1.0.4363-alt5
nvidia_glx_src_1.0.4496-1.0.4496-alt6
ocaml-3.07-alt2
ocaml-mysql-1.0.1-alt1
ocaml-postgres-20010808-alt11s
ocamlgsl-0.2.2-alt3
ocamlnet-0.96-alt4s
openoffice-1:1.0.2-alt5
opensc-0.7.0-alt1
openssl-0.9.6k-alt1
pcre-ocaml-4.28.3-alt5s
ppp-2.4.1.20030923-alt1
pxp-1.1.94-alt3s
python21-2.1.3-alt5.1
reiserfs-utils-1:3.6.4-alt2
rte-0.5.1-alt2
ruby-gdchart-0.0.9-alt3
tcl-cost-2.2-alt4.p1
transcode-0.6.10-alt2
transconnect-1.3-alt1
tuxvsclippy-0.2.3-alt1
valgrind-2.0-alt0.20030725
valgrind-calltree-0.9.4-alt2
veejay-0.5.1-alt0.5
wine-20030911-alt1
xine-1.0.0-alt2.rc2
xmms-defx-0.9.9-alt1
xmms-kjofol-0.95-alt4
xmms-kjofol-skins-1.2.0-alt3
xmms-musepack-0.98-alt1
xmp-2.0.5-alt0.6pre3
xvid-0.9.2-alt1
zinf-2.2.4-alt1


-- 
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [devel] Re: IA: eliminating TEXTRELocations
  2003-11-08 15:57 [devel] IA: eliminating TEXTRELocations Dmitry V. Levin
  2003-11-08 17:29 ` [devel] " Michael Shigorin
  2003-11-10 12:21 ` [devel] " Dmitry V. Levin
@ 2003-11-10 12:27 ` Alexey Tourbin
  2003-11-12 15:50 ` [devel] " Vitaly Lugovsky
  3 siblings, 0 replies; 12+ messages in thread
From: Alexey Tourbin @ 2003-11-10 12:27 UTC (permalink / raw)
  To: ALT Devel discussion list

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

On Sat, Nov 08, 2003 at 06:57:31PM +0300, Dmitry V. Levin wrote:
> "Самое главное - всегда использовать параметры -fpic либо -fPIC при
> порождении кода, который в конечном итоге попадёт в DSO.  Эта

Кроме того, рекомендуется использовать именно -fpic, если архитектура не
накладывает специальных ограничений на размер (тогда в некоторых случаях
придется использовать -fPIC).  Впрочем, как я понял из статьи, на
архитектурах %ix86 -fpic и -fPIC -- это одно и то же.

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [devel] Re: IA: eliminating TEXTRELocations
  2003-11-10 12:21 ` [devel] " Dmitry V. Levin
@ 2003-11-10 18:09   ` Michael Shigorin
  2003-11-10 18:39     ` Dmitry V. Levin
  2003-11-12  9:14   ` Mikhail Zabaluev
  1 sibling, 1 reply; 12+ messages in thread
From: Michael Shigorin @ 2003-11-10 18:09 UTC (permalink / raw)
  To: ALT Devel discussion list


[-- Attachment #1.1: Type: text/plain, Size: 899 bytes --]

On Mon, Nov 10, 2003 at 03:21:05PM +0300, Dmitry V. Levin wrote:
> libalsa-0.9.8-alt1

Вот пробую собирать alt2 с приложенным спеком.

---
Verifying and fixing files in /usr/src/RPM/tmp/libalsa-buildroot (binconfig,pkgconfig,libtool)
/usr/lib/pkgconfig/alsa.pc: Libs: '-L${libdir} -lasound -lm -ldl -lpthread' --> '-lasound -lm -ldl -lpthread'
/usr/lib/libasound.la: dependency_libs: ' -lm -ldl -lpthread' --> '-lm -ldl -lpthread'
Compressing files in /usr/src/RPM/tmp/libalsa-buildroot (auto)
Verifying ELF objects in /usr/src/RPM/tmp/libalsa-buildroot (rpath=normal,textrel=normal)
verify-elf: ./usr/lib/libasound.so.2.0.0: TEXTREL entry found: 0x0
error: Bad exit status from /usr/src/RPM/tmp/rpm-tmp.75541 (%install)
---

%optflags_shared в наличии.  Что дальше? (точнее: кто-то может
поправить?)

-- 
 ---- WBR, Michael Shigorin <mike@altlinux.ru>
  ------ Linux.Kiev http://www.linux.kiev.ua/

[-- Attachment #1.2: libalsa.spec --]
[-- Type: text/plain, Size: 4069 bytes --]

Name: libalsa
Version: 0.9.8
Release: alt1

Summary: Advanced Linux Sound Architecture (ALSA) library
License: GPL
Group: System/Libraries

%define srcname alsa-lib

Url: http://www.alsa-project.org
Source: ftp://ftp.alsa-project.org/pub/lib/%srcname-%version.tar.bz2

Obsoletes: libalsa2 < 0.9.4
Provides: libalsa2 = %version
BuildPreReq: alsa-driver-headers >= %version

# Automatically added by buildreq on Wed Oct 22 2003
BuildRequires: glibc-devel-static mawk

%add_optflags %optflags_shared

%package -n aserver
Summary: Sound server for alsa
License: GPL
Group: Sound
Requires: %name = %version-%release

%package devel
Summary: Development environment for Advanced Linux Sound Architecture (ALSA)
License: GPL
Group: Development/C

Requires: %name = %version-%release
Provides: libalsa2-devel = %version
Obsoletes: libalsa2-devel

%package devel-static
Summary: Static libraries for Advanced Linux Sound Architecture (ALSA)
License: GPL
Group: Development/C
Requires: %name-devel = %version-%release

%description -n aserver
Sound server for alsa

%description
Advanced Linux Sound Architecture (ALSA) libs. Modularized architecture with
support for a large range of ISA and PCI cards. Fully compatible with OSS/Lite
(kernel sound drivers), but contains many enhanced features.

%description devel
Advanced Linux Sound Architecture (ALSA) libs. Modularized architecture with
support for a large range of ISA and PCI cards. Fully compatible with OSS/Lite
(kernel sound drivers), but contains many enhanced features.

This is the development environment to compile ALSA applications.

%description devel-static
Advanced Linux Sound Architecture (ALSA) libs. Modularized architecture with
support for a large range of ISA and PCI cards. Fully compatible with OSS/Lite
(kernel sound drivers), but contains many enhanced features.

This package contains static library to build statically linked ALSA applications.

%prep
%setup -q -n %srcname-%version

%build
%configure --enable-static
%make_build

%install
%__mkdir_p %buildroot{%_libdir,%_includedir/sys}
%makeinstall

%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig

%files
%_libdir/*.so.*
%dir %_datadir/alsa/
%_datadir/alsa/*

%files devel
%_libdir/*.so
%_libdir/*.la
%_libdir/pkgconfig/alsa.pc
%_includedir/sys/*
%dir %_includedir/alsa
%_includedir/alsa/*
%_datadir/aclocal/*

%files devel-static
%_libdir/*.a

%files -n aserver
%_bindir/aserver

%changelog
* Sat Nov 08 2003 Michael Shigorin <mike@altlinux.ru> 0.9.8-alt1
- added %optflags_shared

* Wed Oct 22 2003 Michael Shigorin <mike@altlinux.ru> 0.9.8-alt1
- 0.9.8

* Fri Sep 26 2003 Michael Shigorin <mike@altlinux.ru> 0.9.7-alt1
- 0.9.7

* Wed Jul 30 2003 Michael Shigorin <mike@altlinux.ru> 0.9.6-alt1
- 0.9.6

* Tue Jul 15 2003 Michael Shigorin <mike@altlinux.ru> 0.9.5-alt1
- 0.9.5

* Tue Jul 08 2003 Michael Shigorin <mike@altlinux.ru> 0.9.4-alt2
- fixed forcibly broken BuildRequires as kernel-source-alsa-std got fixed
  (alsa-driver-headers >= %%version)

* Mon Jun 23 2003 Michael Shigorin <mike@altlinux.ru> 0.9.4-alt1
- 0.9.4
- renamed to libalsa

* Wed Apr 02 2003 Michael Shigorin <mike@altlinux.ru> 0.9.2-alt0.1
- 0.9.2 (unofficial build)

* Tue Feb 04 2003 Rider <rider@altlinux.ru> 0.9.0rc7-alt1
- 0.9.0rc7

* Tue Nov 26 2002 Konstantin Volckov <goldhead@altlinux.ru> 0.9.0rc6-alt1
- 0.9.0rc6
- REbuilt in new environment

* Mon Jun 10 2002 Konstantin Volckov <goldhead@altlinux.ru> 0.9.0rc1-alt2
- Removed requires to virtual kernel alsa

* Fri Jun 07 2002 Konstantin Volckov <goldhead@altlinux.ru> 0.9.0rc1-alt1
- 0.9.0rc1

* Thu Feb 28 2002 Konstantin Volckov <goldhead@altlinux.ru> 0.9.0beta12-alt1
- 0.9.0beta12

* Wed Dec 26 2001 Konstantin Volckov <goldhead@altlinux.ru> 0.9.0beta10a-alt1
- 0.9.0beta10a

* Tue Nov 20 2001 Konstantin Volckov <goldhead@altlinux.ru> 0.9.0beta9-alt1
- 0.9.0beta9

* Fri Oct 12 2001 Konstantin Volckov <goldhead@altlinux.ru> 0.9.0beta8a-alt1
- 0.9.0beta8a
- Fixed requires
- Fixed filelists

* Fri Sep 21 2001 Konstantin Volckov <goldhead@altlinux.ru> 0.9.0beta7-alt1
- First build for Sisyphus

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] Re: IA: eliminating TEXTRELocations
  2003-11-10 18:09   ` [devel] " Michael Shigorin
@ 2003-11-10 18:39     ` Dmitry V. Levin
  0 siblings, 0 replies; 12+ messages in thread
From: Dmitry V. Levin @ 2003-11-10 18:39 UTC (permalink / raw)
  To: ALT Devel discussion list

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

On Mon, Nov 10, 2003 at 08:09:45PM +0200, Michael Shigorin wrote:
> On Mon, Nov 10, 2003 at 03:21:05PM +0300, Dmitry V. Levin wrote:
> > libalsa-0.9.8-alt1
> 
> Вот пробую собирать alt2 с приложенным спеком.
> 
> ---
> Verifying and fixing files in /usr/src/RPM/tmp/libalsa-buildroot (binconfig,pkgconfig,libtool)
> /usr/lib/pkgconfig/alsa.pc: Libs: '-L${libdir} -lasound -lm -ldl -lpthread' --> '-lasound -lm -ldl -lpthread'
> /usr/lib/libasound.la: dependency_libs: ' -lm -ldl -lpthread' --> '-lm -ldl -lpthread'
> Compressing files in /usr/src/RPM/tmp/libalsa-buildroot (auto)
> Verifying ELF objects in /usr/src/RPM/tmp/libalsa-buildroot (rpath=normal,textrel=normal)
> verify-elf: ./usr/lib/libasound.so.2.0.0: TEXTREL entry found: 0x0
> error: Bad exit status from /usr/src/RPM/tmp/rpm-tmp.75541 (%install)
> ---
> 
> %optflags_shared в наличии.  Что дальше? (точнее: кто-то может
> поправить?)

Проблема в самом libalsa; %optflags_shared здесь не нужен, ибо (по
результатам вчерашней пересборки)

$ fgrep -e -march=i586 error/libalsa-0.9.8-alt1 |fgrep -e -fPIC |wc -l
     78
$ fgrep -e -march=i586 error/libalsa-0.9.8-alt1 |fgrep -ve -fPIC |wc -l
    175

Если добавить %optflags_shared, то получается вот что:
$ fgrep -e -march=i586 error/libalsa-0.9.8-alt1 |fgrep -ve -fPIC |wc -l
      1
$ fgrep -e -march=i586 error/libalsa-0.9.8-alt1 |fgrep -ve -fPIC
i586-alt-linux-gcc -shared .libs/libasound.la-10.o -Wl,--whole-archive control/.libs/libcontrol.a mixer/.libs/libmixer.a ordinary_mixer/.libs/libordinarymixer.a pcm/.libs/libpcm.a ordinary_pcm/.libs/libordinarypcm.a rawmidi/.libs/librawmidi.a timer/.libs/libtimer.a hwdep/.libs/libhwdep.a seq/.libs/libseq.a instr/.libs/libinstr.a compat/.libs/libcompat.a alisp/.libs/libalisp.a -Wl,--no-whole-archive  -lm -ldl -lpthread  -march=i586 -mcpu=i686 -Wl,--version-script=Versions -Wl,-soname -Wl,libasound.so.2 -o .libs/libasound.so.2.0.0

Проблема очевидна, не правда ли?


-- 
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [devel] Re: IA: eliminating TEXTRELocations
  2003-11-10 12:21 ` [devel] " Dmitry V. Levin
  2003-11-10 18:09   ` [devel] " Michael Shigorin
@ 2003-11-12  9:14   ` Mikhail Zabaluev
  1 sibling, 0 replies; 12+ messages in thread
From: Mikhail Zabaluev @ 2003-11-12  9:14 UTC (permalink / raw)
  To: ALT Devel discussion list

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

Hello Dmitry,

On Mon, Nov 10, 2003 at 03:21:05PM +0300, Dmitry V. Levin wrote:
>
> On Sat, Nov 08, 2003 at 06:57:31PM +0300, Dmitry V. Levin wrote:
> > Вот список пакетов в Сизифе, которые в принципе собираются (точнее говоря,
> > процесс сборки которых доходит как минимум до завершения секции %install),
> > но при этом содержат text relocations:
> 
> Вот более точный список:

...

> j2se1.3-sun-1.3.1_03-alt1
> j2se1.4-blackdown-1.4.1_01-alt2
> j2se1.4-sun-1.4.2_01-alt2

На эти, к сожалению, никак повлиять нельзя, поэтому
придётся обходить проверку с verify_elf_skiplist.

-- 
Stay tuned,
  MhZ                                     JID: mhz@altlinux.org
___________
Advertisements contain the only truths to be relied on in a newspaper.
		-- Thomas Jefferson

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] IA: eliminating TEXTRELocations
  2003-11-12 15:50 ` [devel] " Vitaly Lugovsky
@ 2003-11-12 15:07   ` Dmitry V. Levin
  2003-11-12 16:18     ` Vitaly Lugovsky
  0 siblings, 1 reply; 12+ messages in thread
From: Dmitry V. Levin @ 2003-11-12 15:07 UTC (permalink / raw)
  To: ALT Devel discussion list

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

On Wed, Nov 12, 2003 at 06:50:56PM +0300, Vitaly Lugovsky wrote:
> On Sat, 8 Nov 2003, Dmitry V. Levin wrote:
> 
> > Greetings!
> >
> > Оказывается, к сожалению, большинство программистов, создающих
> > разделяемые библиотеки (DSO), относится к этой работе слишком
> > легкомысленно и не учитывает рекомендации специалистов.
> 
>  Надо бы помнить, что шаренные объекты разное назначение имеют.
> Это и именно *разделяемая* библиотека, тогда всё сказанное
> справедливо, и ПЛАГИН, и просто *динамически подгружаемая*
> библиотека.

Оно же всё равно разделяемое, т.е. может быть использовано одновременно
несколькими процессами.  Разница только в способе загрузки.

> > "Самое главное - всегда использовать параметры -fpic либо
> > -fPIC при
> > порождении кода, который в конечном итоге попадёт в DSO.
> 
>  Если компилятор вообще знает про PIC-код, если платформа не
> предусматривает НЕПРОСТИТЕЛЬНЫЙ оверхед на PIC-код, и т.п.

Это всё общие слова.

> >  Эта
> > рекомендация применима в равной степени как к коду, так и к
> > данным. Код,
> > который не был скомпилирован таким образом, будет содержать
> > text
> > relocations.  Этому нет оправдания.
> 
>  Есть. На дебильных x86 это дикий оверхед. Один регистр общего
> назначения - коту под хвост. При том, что их на этом
> калькуляторе-переростке и так не богато.

Поскольку мы всё равно не можем исправить эту платформу (x86), то
критиковать её сейчас не имеет смысла.

Компилятор (например, gcc) умеет оптимизировать использование этого самого
регистра.

> > Аргументы, базирующиеся на утверждении, что код не является
> > разделяемым
> > потому, что другие процессы не используют этот DSO, не верны.
> 
>  Чушь религиозная.

Тем не менее это так.

> > В таком случае вообще нет смысла использовать DSO; соответствующий код
> > следует просто собирать в составе приложения."
> 
>  Дабы таскать бинарники по 5метров? Нюню. А ведь ещё и плагины
> бывают.

Тогда их надо собирать правильно.

> > lablGL-1.00-alt1
> > ocaml-mysql-1.0.1-alt1
> > ocaml-postgres-20010808-alt11s
> > ocamlgsl-0.2.2-alt3
> > ocamlnet-0.96-alt4s
> > pcre-ocaml-4.28.3-alt5s
> > pxp-1.1.94-alt3s
> ..
> 
> > Я внедрил проверку на TEXTREL в verify_elf очередной версии
> > rpm-build.
> > По умолчанию она будет включена.
> 
>  НЕ НАДО! Пусть по умолчанию relaxed выключает обе проверки.
>  А то всё ocaml-хозяйство опять пересобирать...

Я могу сделать так, чтобы relaxed отключал обе проверки.

> > Чтобы ослабить проверку обоих параметров, можно использовать
> > новую форму
> > выражения
> > %set_verify_elf_method rpath=relaxed,textrel=relaxed
> >
> > Разумеется, ослаблять проверки, включённые по умолчанию, не
> > рекомендуется.
> 
> Кю...

Huh?


-- 
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] IA: eliminating TEXTRELocations
  2003-11-12 16:18     ` Vitaly Lugovsky
@ 2003-11-12 15:34       ` Dmitry V. Levin
  2003-11-12 16:21       ` [devel] " Alexey Tourbin
  1 sibling, 0 replies; 12+ messages in thread
From: Dmitry V. Levin @ 2003-11-12 15:34 UTC (permalink / raw)
  To: ALT Devel discussion list

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

On Wed, Nov 12, 2003 at 07:18:10PM +0300, Vitaly Lugovsky wrote:
> On Wed, 12 Nov 2003, Dmitry V. Levin wrote:
> 
> > >  Надо бы помнить, что шаренные объекты разное назначение имеют.
> > > Это и именно *разделяемая* библиотека, тогда всё сказанное
> > > справедливо, и ПЛАГИН, и просто *динамически подгружаемая*
> > > библиотека.
> >
> > Оно же всё равно разделяемое, т.е. может быть использовано
> > одновременно несколькими процессами.
> 
>  Вовсе не обязательно.
> 
> >  Разница только в способе загрузки.
> 
>  Не только. Разница именно в назначении. Тот же плагин может
> вообще быть динамически создан и скомпилирован приложением. Никто
> другой его и не увидит.

В данном случае (ocaml) речь идёт о вполне разделяемых DSO.

> > >  Есть. На дебильных x86 это дикий оверхед. Один регистр общего
> > > назначения - коту под хвост. При том, что их на этом
> > > калькуляторе-переростке и так не богато.
> >
> > Поскольку мы всё равно не можем исправить эту платформу (x86),
> > то критиковать её сейчас не имеет смысла.
> 
>  Можно обходить эту особенность архитектуры...
> 
> > Компилятор (например, gcc) умеет оптимизировать использование
> > этого самого регистра.
> 
>  Не умеет... Результат жалок. Особо известный общественности
> пример - Perl.

А что с ним не так?

> > >  Дабы таскать бинарники по 5метров? Нюню. А ведь ещё и плагины
> > > бывают.
> >
> > Тогда их надо собирать правильно.
> 
>  Как правильно?

Без text relocations; Ulrich Drepper утверждает, что ущерб от них
в общем случае больше, чем выигрыш в производительности от не-PIC кода.

> > >  НЕ НАДО! Пусть по умолчанию relaxed выключает обе проверки.
> > >  А то всё ocaml-хозяйство опять пересобирать...
> >
> > Я могу сделать так, чтобы relaxed отключал обе проверки.
> 
>  Дык об этом я и прошу.

Ok


-- 
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] IA: eliminating TEXTRELocations
  2003-11-08 15:57 [devel] IA: eliminating TEXTRELocations Dmitry V. Levin
                   ` (2 preceding siblings ...)
  2003-11-10 12:27 ` Alexey Tourbin
@ 2003-11-12 15:50 ` Vitaly Lugovsky
  2003-11-12 15:07   ` Dmitry V. Levin
  3 siblings, 1 reply; 12+ messages in thread
From: Vitaly Lugovsky @ 2003-11-12 15:50 UTC (permalink / raw)
  To: ALT Devel discussion list


On Sat, 8 Nov 2003, Dmitry V. Levin wrote:

> Greetings!
>
> Оказывается, к сожалению, большинство программистов, создающих
> разделяемые библиотеки (DSO), относится к этой работе слишком
> легкомысленно и не учитывает рекомендации специалистов.

 Надо бы помнить, что шаренные объекты разное назначение имеют.
Это и именно *разделяемая* библиотека, тогда всё сказанное
справедливо, и ПЛАГИН, и просто *динамически подгружаемая*
библиотека.

> "Самое главное - всегда использовать параметры -fpic либо
> -fPIC при
> порождении кода, который в конечном итоге попадёт в DSO.

 Если компилятор вообще знает про PIC-код, если платформа не
предусматривает НЕПРОСТИТЕЛЬНЫЙ оверхед на PIC-код, и т.п.

>  Эта
> рекомендация применима в равной степени как к коду, так и к
> данным. Код,
> который не был скомпилирован таким образом, будет содержать
> text
> relocations.  Этому нет оправдания.

 Есть. На дебильных x86 это дикий оверхед. Один регистр общего
назначения - коту под хвост. При том, что их на этом
калькуляторе-переростке и так не богато.

> Аргументы, базирующиеся на утверждении, что код не является
> разделяемым
> потому, что другие процессы не используют этот DSO, не верны.

 Чушь религиозная.

> В таком случае вообще нет смысла использовать DSO; соответствующий код
> следует просто собирать в составе приложения."

 Дабы таскать бинарники по 5метров? Нюню. А ведь ещё и плагины
бывают.

> lablGL-1.00-alt1
> ocaml-mysql-1.0.1-alt1
> ocaml-postgres-20010808-alt11s
> ocamlgsl-0.2.2-alt3
> ocamlnet-0.96-alt4s
> pcre-ocaml-4.28.3-alt5s
> pxp-1.1.94-alt3s
..

> Я внедрил проверку на TEXTREL в verify_elf очередной версии
> rpm-build.
> По умолчанию она будет включена.

 НЕ НАДО! Пусть по умолчанию relaxed выключает обе проверки.
 А то всё ocaml-хозяйство опять пересобирать...

> Чтобы ослабить проверку обоих параметров, можно использовать
> новую форму
> выражения
> %set_verify_elf_method rpath=relaxed,textrel=relaxed
>
> Разумеется, ослаблять проверки, включённые по умолчанию, не
> рекомендуется.

 Кю...




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [devel] IA: eliminating TEXTRELocations
  2003-11-12 15:07   ` Dmitry V. Levin
@ 2003-11-12 16:18     ` Vitaly Lugovsky
  2003-11-12 15:34       ` Dmitry V. Levin
  2003-11-12 16:21       ` [devel] " Alexey Tourbin
  0 siblings, 2 replies; 12+ messages in thread
From: Vitaly Lugovsky @ 2003-11-12 16:18 UTC (permalink / raw)
  To: ALT Devel discussion list


On Wed, 12 Nov 2003, Dmitry V. Levin wrote:

> >  Надо бы помнить, что шаренные объекты разное назначение имеют.
> > Это и именно *разделяемая* библиотека, тогда всё сказанное
> > справедливо, и ПЛАГИН, и просто *динамически подгружаемая*
> > библиотека.
>
> Оно же всё равно разделяемое, т.е. может быть использовано
> одновременно несколькими процессами.

 Вовсе не обязательно.

>  Разница только в способе загрузки.

 Не только. Разница именно в назначении. Тот же плагин может
вообще быть динамически создан и скомпилирован приложением. Никто
другой его и не увидит.

> >  Если компилятор вообще знает про PIC-код, если платформа не
> > предусматривает НЕПРОСТИТЕЛЬНЫЙ оверхед на PIC-код, и т.п.
>
> Это всё общие слова.

 Это реальность... :(

> >  Есть. На дебильных x86 это дикий оверхед. Один регистр общего
> > назначения - коту под хвост. При том, что их на этом
> > калькуляторе-переростке и так не богато.
>
> Поскольку мы всё равно не можем исправить эту платформу (x86),
> то критиковать её сейчас не имеет смысла.

 Можно обходить эту особенность архитектуры...

> Компилятор (например, gcc) умеет оптимизировать использование
> этого самого регистра.

 Не умеет... Результат жалок. Особо известный общественности
пример - Perl.

> >  Дабы таскать бинарники по 5метров? Нюню. А ведь ещё и плагины
> > бывают.
>
> Тогда их надо собирать правильно.

 Как правильно?

> >  НЕ НАДО! Пусть по умолчанию relaxed выключает обе проверки.
> >  А то всё ocaml-хозяйство опять пересобирать...
>
> Я могу сделать так, чтобы relaxed отключал обе проверки.

 Дык об этом я и прошу.




^ permalink raw reply	[flat|nested] 12+ messages in thread

* [devel] Re: IA: eliminating TEXTRELocations
  2003-11-12 16:18     ` Vitaly Lugovsky
  2003-11-12 15:34       ` Dmitry V. Levin
@ 2003-11-12 16:21       ` Alexey Tourbin
  1 sibling, 0 replies; 12+ messages in thread
From: Alexey Tourbin @ 2003-11-12 16:21 UTC (permalink / raw)
  To: ALT Devel discussion list

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

On Wed, Nov 12, 2003 at 07:18:10PM +0300, Vitaly Lugovsky wrote:
>  Не умеет... Результат жалок. Особо известный общественности
> пример - Perl.

Можно в двух словах?  Я не в курсе.

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2003-11-12 16:21 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-11-08 15:57 [devel] IA: eliminating TEXTRELocations Dmitry V. Levin
2003-11-08 17:29 ` [devel] " Michael Shigorin
2003-11-10 12:21 ` [devel] " Dmitry V. Levin
2003-11-10 18:09   ` [devel] " Michael Shigorin
2003-11-10 18:39     ` Dmitry V. Levin
2003-11-12  9:14   ` Mikhail Zabaluev
2003-11-10 12:27 ` Alexey Tourbin
2003-11-12 15:50 ` [devel] " Vitaly Lugovsky
2003-11-12 15:07   ` Dmitry V. Levin
2003-11-12 16:18     ` Vitaly Lugovsky
2003-11-12 15:34       ` Dmitry V. Levin
2003-11-12 16:21       ` [devel] " Alexey Tourbin

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