ld.so slight difference Linux and FreeBSD ports/127946

Maho NAKATA chat95 at mac.com
Sat Jun 13 23:17:23 UTC 2009


Hello Konstantin, and *

We have a longstanding OpenOffice.org porting issue for FreeBSD.
Strange crashes.
So I'd like to ask you about following issue. 
http://www.openoffice.org/issues/show_bug.cgi?id=22253
.
There are some small difference between ld.so implementation
between FreeBSD and Linux. Here is the test program that identify
the difference clearly. (it also applies to NetBSD)

------------------------------------------------
"dlsym() search _on_the_main_program_" i.e. the handle is not the
dlopen()ed shared library itself, but the main program (which you get
back with dlopen(NULL, RTLD_LAZY) )
I've modified your test program a bit:

#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>

int main(int argc, char **argv) {
  void *handle, *handlemain;
  double (*cosine)(double);
  char *error;

  handle = dlopen ("libm.so", RTLD_LAZY|RTLD_GLOBAL);
  if (!handle) {
    fprintf (stderr, "%s\n", dlerror());
    exit(1);
  }

  handlemain = dlopen(NULL, RTLD_LAZY);
  cosine = dlsym(handlemain, "cos");
  if ((error = dlerror()) != NULL)  {
    fprintf (stderr, "%s\n", error);
    exit(1);
  }

  printf ("%f\n", (*cosine)(2.0));
  dlclose(handle);
  return 0;
}

On Linux:
bash-2.05b$ ./a.out 
-0.416147

while on NetBSD:
-bash-2.05b$ ./a.out 
Undefined symbol "cos"
------------------------------------------------

It seems that this is the root cause of some issues.
http://www.openoffice.org/issues/show_bug.cgi?id=22253
http://www.openoffice.org/issues/show_bug.cgi?id=98781
maybe also
http://www.freebsd.org/cgi/query-pr.cgi?pr=128176

It seems ld.so employs same mechanism between Linux and MacOSX.

Could you please help me a bit?
Thanks,
-- Nakata Maho http://accc.riken.jp/maho/ , http://ja.openoffice.org/ 
   Nakata Maho's PGP public keys: http://accc.riken.jp/maho/maho.pgp.txt



More information about the freebsd-openoffice mailing list