Re: [HACKERS] Should libedit be preferred to libreadline? - Mailing list pgsql-patches
From | Andrew Dunstan |
---|---|
Subject | Re: [HACKERS] Should libedit be preferred to libreadline? |
Date | |
Msg-id | 43826B68.7020803@dunslane.net Whole thread Raw |
In response to | Should libedit be preferred to libreadline? (Seneca Cunningham <scunning@ca.afilias.info>) |
Responses |
Re: [HACKERS] Should libedit be preferred to libreadline?
Re: [HACKERS] Should libedit be preferred to libreadline? |
List | pgsql-patches |
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]
pgsql-patches by date: