Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
Thread:
Lists: pgsql-hackerspgsql-patchespgsql-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

pgsql-ports by date

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

pgsql-hackers by date

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

pgsql-patches by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group