Re: [HACKERS] Should libedit be preferred to libreadline?

From: Andrew Dunstan <andrew(at)dunslane(dot)net>
To: Seneca Cunningham <scunning(at)ca(dot)afilias(dot)info>
Cc: pgsql-hackers(at)postgresql(dot)org, pgsql-ports(at)postgresql(dot)org, pgsql-patches(at)postgresql(dot)org
Subject: Re: [HACKERS] Should libedit be preferred to libreadline?
Date: 2005-11-22 00:50:48
Message-ID: 43826B68.7020803@dunslane.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-patches pgsql-ports


Nice analysis, but we can't hack configure like that. It has to be able
to be fully generated from its sources. I think the other source file
you would need to look at is config/programs.m4. (Not sure about quoting
$ac_popdir - why only that one?)

Also, I suspect we'd want to enable the libedit preference with a switch
rather than just force it, if we want to go this way.

cheers

andrew

Seneca Cunningham wrote:

>It would certainly seem so on AIX.
>
>In tracking down why postgres 8.x would segfault on AIX 5.3, it became
>apparent to me that libreadline.a is a problematic library to link
>against and that libedit.a is preferable (and for reasons other than
>that readline is GPL while postgres is BSD-licensed).
>
>With AIX 5, the easiest way to get a shared object is to pass "-bexpall"
>to the linker. This results in all symbols being exported. The problem
>with this is that the linker will export all of libreadline's and
>libhistory's symbols. In the case of libreadline.so.4 (and .5) on AIX 5
>this includes symbols like strncpy and memmove, but on .4, not memcpy.
>This is likely because libc.a does not export them.
>
>What results from this is that when postgres is linked against readline
>on AIX, it gets these memory functions through readline instead of its
>own code. When readline 4.3 is used (what IBM provides in their "AIX
>Toolbox for Linux"), postgres is known to crash. These segfaults (if
>postgres was compiled with gcc) have occurred on AIX 5.3ML3, AIX 5.3ML1,
>and AIX 5.2ML7. With readline 5.0, postgres merely gets these functions
>through the shared library memory segments instead of the user memory
>segments[6].
>
>While it is possible to build libreadline in a manner that doesn't
>export strncpy, neither of the prebuilt readlines for AIX 5 that I
>checked were both shared and did not export strncpy. IBM's readline[5]
>exports strncpy, UCLA's readline[4] is static. Building a shared
>readline that doesn't export strncpy requires creating export files for
>libreadline and libhistory that only list the symbols that they are
>supposed to export and editing the shared library Makefile to add the
>exports flags to the appropriate linker calls.
>
>Whatever strategy we might take, using readline on AIX requires
>considerable trickery and hacking around with the build environments.
>Simply put, it's ghastly.
>
>On the other hand, the port of NetBSD's editline that I tried[1] works
>without build-hackery to the library and has reasonable exports. The
>only changes to postgres that I needed to make were confined to telling
>the configure script to check for libedit before libreadline and adding
>a test for histedit.h. The attached patch contains my modifications.
>
>It is also possible to use a wrapper like rlwrap[2] instead of linking
>postgres against libreadline or libedit.
>
>[1] port of NetBSD's editline
> http://www.thrysoee.dk/editline/
>[2] rlwrap
> http://utopia.knoware.nl/~hlub/uck/software/
>[3] IBM Redbook "AIX 5L Porting Guide", section 9.2
> http://www.redbooks.ibm.com/abstracts/sg246034.html?Open
> http://www.redbooks.ibm.com/redbooks/pdfs/sg246034.pdf
>[4] UCLA's readline package
> http://aixpdslib.seas.ucla.edu/packages/readline.html
>[5] IBM's readline package
> http://www-03.ibm.com/servers/aix/products/aixos/linux/download.html
>[6] IBM Redbook "Developing and Porting C and C++ Applications on AIX",
> page 110
> http://www.redbooks.ibm.com/abstracts/sg245674.html?Open
> http://www.redbooks.ibm.com/redbooks/pdfs/sg245674.pdf
>
>

[patch snipped]

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Jim C. Nasby 2005-11-22 01:05:07 Re: Bug in predicate indexes?
Previous Message Andrew Dunstan 2005-11-22 00:38:35 Re: Practical error logging for very large COPY statements

Browse pgsql-patches by date

  From Date Subject
Next Message Tom Lane 2005-11-22 01:09:16 Re: [HACKERS] Should libedit be preferred to libreadline?
Previous Message Seneca Cunningham 2005-11-21 22:38:17 Should libedit be preferred to libreadline?

Browse pgsql-ports by date

  From Date Subject
Next Message Tom Lane 2005-11-22 01:09:16 Re: [HACKERS] Should libedit be preferred to libreadline?
Previous Message Seneca Cunningham 2005-11-21 22:38:17 Should libedit be preferred to libreadline?