VMS need to build DSO with name shortening, because of provider code

We have pretty long symbol names, so they need to be shortened to fit
in the linker's 31 character limit on symbols.

Symbol name shortening with the VMS C compiler works in such a way
that a symbol name that's longer than 31 characters is mangled into
its first original 22 characters, followed by a dollar sign and the
32-bit CRC of the original symbol name in hexadecimal.

Reviewed-by: Tim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15317)
This commit is contained in:
Richard Levitte 2021-05-17 23:40:32 +02:00
parent 8ba3a15816
commit 31be74d3ca

View File

@ -1837,10 +1837,12 @@ my %targets = (
# and binaries instead.
bin_cflags => add("/NAMES=(AS_IS,SHORTENED)/EXTERN_MODEL=STRICT_REFDEF"),
lib_cflags => add("/NAMES=(AS_IS,SHORTENED)/EXTERN_MODEL=STRICT_REFDEF"),
# For modules specifically, we assume that they only use public
# OpenSSL symbols, and therefore don't need to mangle names on
# their own.
dso_cflags => "",
# Strictly speaking, DSOs should not need to have name shortening,
# as all their exported symbols should be short enough to fit the
# linker's 31 character per symbol name limit. However, providers
# may be composed of more than one object file, and internal symbols
# may and do surpass the 31 character limit.
dso_cflags => add("/NAMES=(SHORTENED)"),
ex_libs => add(sub { return vms_info()->{zlib} || (); }),
shared_target => "vms-shared",
# def_flag made to empty string so a .opt file gets generated