ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Alexey Tourbin <at@altlinux.ru>
To: ALT Linux Team development discussions <devel@lists.altlinux.org>
Subject: Re: [devel] symbols into dependencies
Date: Mon, 16 Nov 2009 03:44:38 +0300
Message-ID: <20091116004438.GU10659@altlinux.org> (raw)
In-Reply-To: <20091116000546.GA32432@wo.int.altlinux.org>

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

On Mon, Nov 16, 2009 at 03:05:46AM +0300, Dmitry V. Levin wrote:
> On Mon, Nov 16, 2009 at 12:14:43AM +0300, Alexey Tourbin wrote:
> [...]
> > Есть идея формировать зависимости на сонеймы с учетом символов.
> > Это может выглядеть так:
> > 
> > 	%package -n libfoo
> > 	Provides(auto): libfoo.so.1 = set:0123abcd...(очень длинная строка)
> > 
> > 	%package -n foo
> > 	Requires(auto): libfoo.so.1 >= set:abcd0123...(умеренно длинная строка)
> > 
> > То есть реализовать зависимости специального вида, которые представляют
> > собой "множество строк" (символов).  Вместо обычного сравнения версий
> > для таких зависимостей будет выполняться проверка, что requires set
> > является подмножеством provides set.
> 
> Please do not over-optimize here.
> For example, have a look at /bin/ls ELF executable:
> 
> $ readelf -d /bin/ls |awk '/NEEDED/{print $5}'
> [librt.so.1]
> [libcap.so.2]
> [libtinfo.so.5]
> [libacl.so.1]
> [libc.so.6]
> $ readelf -s /bin/ls |grep tgetent
>     36: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND tgetent
> 
> Where does the "tgetent" symbol come from?  Dynamic linker will be
> sufficed if at least one of abovementioned libraries will provide it.

According to System V Application Binary Interface (gabi41.pdf),
tgetent comes from libcurses (p.125).  This gives strong evidence
for associating symbols with libraries they come from.

> Here is a more artificial example written to demonstrate ld.so behaviour:
> $ echo 'int a(){return 1;}' >liba.c &&
> gcc -fpic -shared liba.c -o liba.so &&
> echo 'int b(){return 2;}' >libb.c &&
> gcc -fpic -shared libb.c -o libb.so &&
> echo 'int main(){return a()+b();}' >exe.c &&
> gcc exe.c -L. -la -lb -o exe &&
> LD_LIBRARY_PATH=. ./exe; echo $?;
> echo 'int b(){return 10;}' >liba.c &&
> gcc -fpic -shared liba.c -o liba.so &&
> echo 'int a(){return 20;}' >libb.c &&
> gcc -fpic -shared libb.c -o libb.so &&
> LD_LIBRARY_PATH=. ./exe; echo $?
> 3
> 30
> 
> That is, a needed ELF symbol may jump from one library to another.
> And it had happened once with the "tgetent" symbol.

When a symbol is moved to another library, some programs might need
relinking, while some might still work.

Let's see what happens if a symbol is moved from libA to libB.  The
programs that use the symbol and linked only to libA go broke, right?
But programs which are linked to both libA and libB are fine.
Do you mean it is possible to handle these cases differently?

To sum up, when a function is moved to another library, the ABI is
changed, and the programs should be relinked.  It is only by chance
that some programs might still work.

> P.S. This issue is not an ALT Linux specific, so if we succeed to
> work out a solution, it could be used by others.

They don't care.  Otherwise they'd come with something more smart. :)

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

  reply	other threads:[~2009-11-16  0:44 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-13  8:36 [devel] SharedLibsPolicy или хорошо что мы не Debian Valery V. Inozemtsev
2009-11-13 10:42 ` Anton Farygin
2009-11-13 11:14   ` Damir Shayhutdinov
2009-11-13 11:17     ` Anton Farygin
2009-11-13 11:26       ` Led
2009-11-13 11:27       ` Damir Shayhutdinov
2009-11-13 11:33         ` Valery V. Inozemtsev
2009-11-13 11:37           ` Damir Shayhutdinov
2009-11-13 11:44             ` Anton Farygin
2009-11-13 11:46             ` Valery V. Inozemtsev
2009-11-13 12:18               ` Damir Shayhutdinov
2009-11-13 11:56   ` Денис Смирнов
2009-11-18 19:17     ` Yury Aliaev
2009-11-19  2:40       ` Денис Смирнов
2009-11-19  7:20         ` Yury Aliaev
2009-11-13 16:07   ` Igor Vlasenko
2009-11-13 16:40     ` Anton Farygin
2009-11-13 17:12       ` Igor Vlasenko
2009-11-13 17:19         ` Anton Farygin
2009-11-18 19:19     ` Yury Aliaev
2009-11-13 12:22 ` Sergey V Turchin
2009-11-13 21:25 ` [devel] SharedLibsPolicy Michael Shigorin
2009-11-13 21:39   ` Led
2009-11-13 22:55     ` Michael Shigorin
2009-11-13 23:17       ` Led
2009-11-14  9:53         ` Michael Shigorin
2009-11-14 20:25     ` Денис Смирнов
2009-11-14 20:45       ` Led
2009-11-14 22:20         ` Денис Смирнов
2009-11-14 22:30           ` Led
2009-11-14 22:55             ` Денис Смирнов
2009-11-14 23:19               ` Led
2009-11-15  0:46                 ` Денис Смирнов
2009-11-15  1:36                   ` Led
2009-11-15  7:06                     ` Денис Смирнов
2009-11-15 20:00                       ` Led
2009-11-15 20:27                         ` Michael Shigorin
2009-11-15 21:01                           ` Led
2009-11-15 21:27                             ` Michael Shigorin
2009-11-15 22:20                               ` Anton Farygin
2009-11-15 21:14                         ` [devel] symbols into dependencies Alexey Tourbin
2009-11-15 22:47                           ` Led
2009-11-15 23:11                             ` Alexey Tourbin
2009-11-15 23:43                               ` Led
2009-11-16  0:16                                 ` Alexey Tourbin
2009-11-16  0:27                                   ` Dmitry V. Levin
2009-11-17  1:10                                     ` Alexey Tourbin
2009-11-16  0:05                           ` Dmitry V. Levin
2009-11-16  0:44                             ` Alexey Tourbin [this message]
2009-11-16  9:46                               ` Sergey Vlasov
2009-11-16 10:48                                 ` Dmitry V. Levin
2009-11-16 11:36                                   ` Alexey Tourbin
2009-11-16 12:01                                     ` Damir Shayhutdinov
2009-11-16 12:17                                       ` Alexey Tourbin
2009-11-16 12:50                                       ` Sergey Vlasov
2009-11-16 13:09                                         ` Alexey Tourbin
2009-11-16  8:16                           ` Stanislav Ievlev
2009-11-15 22:01                         ` [devel] SharedLibsPolicy Sergey Vlasov
2009-11-15 22:54                           ` Led
2009-11-15 12:08               ` Igor Vlasenko
2009-11-15 13:30                 ` Michael Shigorin
2009-11-15 19:11                     ` Michael Shigorin
2009-11-15 19:36                   ` Денис Смирнов
2009-11-15 20:29                     ` Michael Shigorin
2009-11-15 19:36                   ` Konstantin Pavlov
2009-11-15 19:39                 ` Денис Смирнов
2009-11-14 20:31 ` [devel] SharedLibsPolicy или хорошо что мы не Debian Денис Смирнов
2009-11-14 23:14   ` Anton Farygin
2009-11-15 12:24     ` Michael Shigorin

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=20091116004438.GU10659@altlinux.org \
    --to=at@altlinux.ru \
    --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