Re: The argument for reinstating --as-needed
От | Bruce Momjian |
---|---|
Тема | Re: The argument for reinstating --as-needed |
Дата | |
Msg-id | 200510291847.j9TIlHK00555@candle.pha.pa.us обсуждение исходный текст |
Ответ на | The argument for reinstating --as-needed (Martijn van Oosterhout <kleptog@svana.org>) |
Ответы |
Re: The argument for reinstating --as-needed
(Martijn van Oosterhout <kleptog@svana.org>)
Re: The argument for reinstating --as-needed (Tom Lane <tgl@sss.pgh.pa.us>) |
Список | pgsql-hackers |
At this stage, I am thinking this is best left for 8.2. It is impossible for us to test it enough. --------------------------------------------------------------------------- Martijn van Oosterhout wrote: -- Start of PGP signed section. > As some of you may remember, a patch for adding --as-needed to the GNU > linker command line was added [1] and subsequently removed [2] under > the mistaken assumption that it was a linker bug [3]. It isn't. > > The bug is actually in readline, in that it doesn't declare its > dependancy on termcap/ncurses. Note: this bug was fixed back in 2002 in > Debian (so no Debian systems are affected by this problem) but is still > present in the latest Redhat release and probably many other places. > > I propose we add a workaround for readline and add the flag back again. > The benefits are obvious, from 228 to 87 DT_NEEDED records across a > normal PostgreSQL installation, and the server will no longer depend on > readline (always an odd point). The patch is attached: it basically > adds a reference to termcap/ncurses directly so the psql binary links > to it. psql is the only binary that uses readline so this solves the > problem. > > Just a quick note as to why it's not a bug in the linker. The > --as-needed flag includes DT_NEEDED records only for libraries > referenced by the objects. The issue is that ld removed termcap, needed > by readline but not by psql directly. > > To see why this is not a bug, think about what the -l options are for. > They are for resolving symbols not found in the objects you are > linking. The linker *does not* look for the symbols needed by the > shared libraries given. Static libraries (being sets of objects) yes, > shared libraries no. Shared libraries have their own DT_NEEDED records > to say what they depend on, they don't need to be checked again. > > On my Debian system where readline is configured correctly, ncurses is > not mentioned on the link line and the linker doesn't look for it > either. It is used at runtime though. > > Other issues: > > (a) won't this happen again with some other library? Well, unlikely. > Obviously this can only affect libraries we list on our link line. > Note, a library having this problem would fail autoconf tests also, so > we'd know about it. We already have a hack in the autoconf stuff for > readline already, I just don't think people expected it to apply to > Redhat. > > (b) it wastes 4 bytes. Well yes, but I think the benefits outweigh the > costs. I added it to input.c but it could be a seperate file. > > (c) an autoconf test to test for this condition. Well, I thought about > it but the cost and effort of maintaining such a test is far higher > than just forcing the reference. > > Have a nice day, > > [1] http://archives.postgresql.org/pgsql-committers/2005-05/msg00042.php > [2] http://archives.postgresql.org/pgsql-hackers/2005-05/msg00488.php > [3] https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=157126 > -- > Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > > Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a > > tool for doing 5% of the work and then sitting around waiting for someone > > else to do the other 95% so you can sue them. [ Attachment, skipping... ] -- End of PGP section, PGP failed! -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001+ If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania19073
В списке pgsql-hackers по дате отправления: