Skip to content

Commit

Permalink
No -fno-common for Darwin
Browse files Browse the repository at this point in the history
When object files with common block symbols are added to static
libraries on Darwin, those symbols are invisible to the linker that
tries to use them.  Our solution was to use -fno-common when compiling
C source.

Unfortunately, there is assembler code that defines OPENSSL_ia32cap_P
as a common block symbol, unconditionally, and in some cases, there is
no other definition.  -fno-common doesn't help in this case.

However, 'ranlib -c' adds common block symbols to the index of the
static library, which makes them visible to the linker using it, and
that solves the problem we've seen.

The common conclusion is, either use -fno-common or ranlib -c on
Darwin.  Since we have common block symbols unconditionally, choosing
the method for our source is easy.

Reviewed-by: Kurt Roeckx <kurt@openssl.org>
  • Loading branch information
levitte committed Mar 5, 2016
1 parent a2ed050 commit 0c87341
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion Configurations/10-main.conf
Original file line number Diff line number Diff line change
Expand Up @@ -1422,8 +1422,9 @@ sub combine {
thread_scheme => "pthreads",
perlasm_scheme => "osx32",
dso_scheme => "dlfcn",
ranlib => "ranlib -c",
shared_target => "darwin-shared",
shared_cflag => "-fPIC -fno-common",
shared_cflag => "-fPIC",
shared_ldflag => "-dynamiclib",
shared_extension => ".\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
},
Expand Down

0 comments on commit 0c87341

Please sign in to comment.