Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Feb 1999 19:40:02 -0800 (PST)
From:      John Polstra <jdp@polstra.com>
To:        Archie Cobbs <archie@whistle.com>
Cc:        hackers@FreeBSD.ORG, (Terry Lambert) <terry@whistle.com>
Subject:   Re: Interesting ld.so bug
Message-ID:  <XFMail.990222194002.jdp@polstra.com>
In-Reply-To: <199902221912.LAA76945@bubba.whistle.com>

next in thread | previous in thread | raw e-mail | index | archive | help

Archie Cobbs wrote:
> Terry Lambert writes:
>> There appears to be a bug with ld.so.  The following steps illustrate
>> the bug:
> 
> After some further playing around, it seems like it may be a linker
> problem, or a least a problem in the way we're using it.
> 
> Here's my test case that reproduces the problem:
> 
> We compile a shared library "libfoo" containing these source files:
> 
>   bar.c       - Containing functions bar1() and bar2(), which are
>               both exported. Function bar1() calls function bar2().
> 
>   java_jni.c  - Java JNI method to interface to function bar1(),
>               call it Java_bar1().
> 
>   db.c              - Other exported routines. The C code in this file
>               uses GDBM routines. NOTE: GDBM routines live in
>               a static library, /usr/local/lib/libgdbm.a.
> 
> Now when we run a java class that uses the java_jni.c native method,
> the call to Java_bar1() succeeds, and the call from there to bar1()
> succeeds, but when bar1() tries to call bar2(), it jumps to a very
> low address and segfaults. It seems that the bar2() trampoline is
> using an uninitialized base address or whatever.
> 
> NOW, if we remove "db.c" from the compilation of "libfoo.so",
> then everything works!

Was the code in the static libgdbm.a library compiled with -fpic?
I bet it wasn't, and that's probably the problem.  All code that's
included in a shared library should be PIC code.

John
---
  John Polstra                                               jdp@polstra.com
  John D. Polstra & Co., Inc.                        Seattle, Washington USA
  "Nobody ever went broke underestimating the taste of the American public."
                                                            -- H. L. Mencken


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.990222194002.jdp>