[omniORB] Using NJAMD with Omniorb

Sai-Lai Lo S.Lo@uk.research.att.com
19 Jul 2000 12:31:17 +0100


Mike,

omnithread is just a small C++ wrapper class that is implemented on top of
pthread. I can reproduce your segv. 

I've done some investigation. The segv can be avoided by reordering the
libraries when they are linked. Specifically, if one links -ltcpwrapGK
before -lomnithread and -lpthread, the program runs fine with libnjamd.so
preloaded.

In other words, do something like this instead with your example:


cat > bad.cpp << EOF
#include <iostream.h>
#include <omniORB3/CORBA.h>

int main(int argc, char *argv[])
{
    CORBA::ORB_ptr orb;
    
    orb = CORBA::ORB_init(argc, argv, "omniORB3");

    return 0;
}
EOF

g++ bad.cpp -o bad -D__x86__ -D__linux__ -D__OSVERSION__=2 -D_REENTRANT \
  -g  -I/usr/src/omni/include \
  -L/usr/src/omni/lib/i586_linux_2.0_glibc2.1 
  -lomniORB3 -lomniDynamic3 -ltcpwrapGK -lomnithread -lpthread



Sai-Lai


>>>>> Mike Perry writes:

> Hi, I'm the author of a malloc debugger (http://fscked.org/proj/njamd.shtml),
> and it was recently brought to my attention that when used with omniorb v3,
> my debugger crashes in its init function.

> I investigated this, and its actually crashing in glibc (2.1.3 on RH6.2),
> during a READ of errno (one of the save_errno assignments). This crash happens
> for just about any call that uses errno. Now, I'm guessing that since this
> happens REALLY early, the memory address errno resides in isn't mapped yet.
> (OmniORB calls malloc from one of its global constructors during its thread 
> init function). My init function is called from this malloc, and then uses a 
> number of system calls.

> Doing a mmap on &errno stops the crash, but screws up things when debugging 
> programs that don't have this behavior (because I remap errno and probably 
> some important info in the page adjacent to it).

> Ok, so I know the problem. My question now is: Is there anything that can
> be done about it? Can you guys map errno in earlier in the thread init
> proccess?  Do you even handle this? I'm surprised this doesn't happen in
> the init function without my debugger. NJAMD works fine with pthreads, is
> there any way to tell omniorb to use pthreads instead of omnithreads?

> Any help you could give would be much appreciated by both me and at least one
> of your users :)



-- 
Sai-Lai Lo                                   S.Lo@uk.research.att.com
AT&T Laboratories Cambridge           WWW:   http://www.uk.research.att.com 
24a Trumpington Street                Tel:   +44 1223 343000
Cambridge CB2 1QA                     Fax:   +44 1223 313542
ENGLAND