Hi Christophe,

we’ve been looking at some cases where Darwin tests fail or pass unexpectedly 
depending on
options.  It came as a surprise to see it failing a test for shared support 
(since it’s always
supported shared libs).

-----

It’s a long time ago, but in r216117 you added this to target-supports.

# Return 1 if -shared is supported, as in no warnings or errors
# emitted, 0 otherwise.

proc check_effective_target_shared { } {
 # Note that M68K has a multilib that supports -fpic but not
 # -fPIC, so we need to check both.  We test with a program that
 # requires GOT references.
 return [check_no_compiler_messages shared executable {
   extern int foo (void); extern int bar;
  int baz (void) { return foo () + bar; }
 } "-shared -fpic”
}

====

The thing is that this is testing two things:

1) if the target consumes -shared -fpic without warning

2) assuming that those cause a shared lib to be made it also tests that
the target will allow a link of that to complete with undefined symbols.

So Darwin *does* support  “-shared -fpic” and is very happy to make
shared libraries.  However, it doesn’t (by default) allow  undefined symbols
in the link.

So my question is really about the intent of the test:

  if the intent is to see if the target supports shared libs, then we should
  arrange for Darwin to pass - either by hardwiring it (since all Darwin
  versions do support shared) or by adding suitable options to suppress
  the error.

  if the intent is to check that the target supports linking a shared lib with
 undefined external symbols, then perhaps we need a different test for the
 “just supports shared libs”

===

(note, also the comment doesn’t match what’s actually done, but that’s prob
 a cut & pasto).

thanks
Iain




Reply via email to