winegcc: Add a @loader_path to help the macOS loader find ntdll.so.

On macOS unixlibs that link to ntdll.so currently fail to load.
It appears the macOS loader needs to be able to locate the file
even if the library is already loaded.

This patch changes the LC_ID_DYLIB name of ntdll.so to
"@loader_path/ntdll.so" so that when other unixlibs link against this
they will insert that name into their LC_LOAD_DYLIB entry for
ntdll.so.

While changing only ntdll.so is necessary, for simplicity this patch
changes all unixlibs.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51632
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Huw Davies 2021-08-23 07:30:10 +01:00 committed by Alexandre Julliard
parent 05fe57f58a
commit 9af226c826
1 changed files with 5 additions and 0 deletions

View File

@ -492,6 +492,11 @@ static strarray *get_link_args( struct options *opts, const char *output_name )
strarray_add( flags, opts->image_base ); strarray_add( flags, opts->image_base );
} }
if (opts->strip) strarray_add( flags, "-Wl,-x" ); if (opts->strip) strarray_add( flags, "-Wl,-x" );
if (opts->unix_lib)
{
strarray_add( flags, "-install_name" );
strarray_add( flags, strmake( "@loader_path/%s.so", output_name ) );
}
strarray_addall( link_args, flags ); strarray_addall( link_args, flags );
return link_args; return link_args;