PEPPLER.ORG
Michael Peppler
Sybase Consulting
Menu
Home
Sybase on Linux
Install Guide for Sybase on Linux
General Sybase Resources
General Perl Resources
Freeware
Sybperl
Sybase::Simple
DBD::Sybase
BCP Tool
Bug Tracker
Mailing List Archive
Downloads Directory
FAQs
Sybase on Linux FAQ
Sybperl FAQ
Personal
Michael Peppler's resume

sybperl-l Archive

Up    Prev    Next    

From: Michael Peppler <mpeppler at Mbay dot net>
Subject: RE: Linking ctlib-linux-elf-dynamic on RedHat 5.1
Date: Aug 24 1998 11:04PM

No.

I think you'd  have to write a glue function called sigaction(), or
maybe patch the libraries to call something else than sigaction() (eg
sybaction()) and then write sybaction to actually call sigaction with
the correct struct offsets.

Not impossible, but a little kludgy... (of course, those of you who
used perl4/sybperl 1.x will know of the savestr() collision between
perl and Sybase DBlibrary, and how that was fixed...).

Michael

Stepan, Jamison writes:
 > Would disassembling the libraries to machine code and re-assembling under a
 > glibc system do the trick?
 > 
 > Jamison
 > 
 > > -----Original Message-----
 > > From:	Michael Peppler [SMTP:mpeppler@mbay.net]
 > > Sent:	Monday, August 24, 1998 9:09 AM
 > > To:	SybPerl Discussion List
 > > Cc:	sybperl-l@listproc.net; mpeppler@mbay.net
 > > Subject:	Linking ctlib-linux-elf-dynamic on RedHat 5.1
 > > 
 > > Ted Law writes:
 > >  > After hours of machine level debugging, I finally figured out what's
 > >  > going on.  The symtom was that DBD::Sybase and Sybperl will work when
 > >  > running from bash but not from zsh, whether it was linked dynamically
 > > or
 > >  > statically.  It turned out to be just a smoke screen.  The real problem
 > >  > is that ctlib-linux-elf-dynamic was compiled with a definition of
 > > struct
 > >  > sigaction that is different from the one compiled into glibc 6 used in
 > >  > RedHat 5.1.
 > >  > 
 > >  > The offsets for sa_mask, sa_flags, and sa_restorer were 4, 132, 136,
 > >  > respectively in glibc.  But ctlib-linux-elf-dynamic assumed 4, 8, 12.
 > >  > So when sigaction is called with a non-null value for old_act, glibc
 > >  > actually overwrites part of the stack.  Then, when the overwritten part
 > >  > is used as an address to write to,  a SEG fault occurs.  The reason why
 > >  > it would work when running from bash was that the incorrect address
 > >  > happens to fall into the unprotected gap between two shared libraries.
 > >  > 
 > >  > A workaround would be to write a wrapper for all struct sigaction
 > >  > related routines to bridge the two sides.  But I don't know how to do
 > >  > that.  Would some one please take this on?
 > > 
 > > Wow!
 > > 
 > > Thanks for spending the time to find the problems!
 > > 
 > > Now to find a way to actually solve the problems....
 > > 
 > > Michael
 > > -- 
 > > Michael Peppler         -||-  Data Migrations Inc.
 > > mpeppler@mbay.net       -||-  http://www.mbay.net/~mpeppler
 > > Int. Sybase User Group  -||-  http://www.isug.com
 > 
 > 

-- 
Michael Peppler         -||-  Data Migrations Inc.
mpeppler@mbay.net       -||-  http://www.mbay.net/~mpeppler
Int. Sybase User Group  -||-  http://www.isug.com