Michael Peppler
Sybase Consulting
Sybase on Linux
Install Guide for Sybase on Linux
General Sybase Resources
General Perl Resources
BCP Tool
Bug Tracker
Mailing List Archive
Downloads Directory
Sybase on Linux FAQ
Sybperl FAQ
Michael Peppler's resume

sybperl-l Archive

Up    Prev    Next    

From: Ted Law <tedlaw at cibcwg dot com>
Subject: Linking ctlib-linux-elf-dynamic on RedHat 5.1
Date: Aug 23 1998 9:38AM

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?

Ted Law