On Fri, Oct 16, 2015 at 10:21:50AM -0500, Michael Cronenworth wrote:
Prelink was used to rewrite binares and set their text segment, but modern linkers support setting the value at link time. Prelink is being retired by upstream.
Signed-off-by: Michael Cronenworth mike@cchtml.com
Can confirm it works on SUSE too.
Signed-Off-By: Marcus Meissner marcus@jet.franken.de
configure.ac | 11 ++++++++--- tools/winegcc/winegcc.c | 11 +++++++++-- 2 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/configure.ac b/configure.ac index de8cde5..f283802 100644 --- a/configure.ac +++ b/configure.ac @@ -988,10 +988,15 @@ wine-installed: main.o *) LDEXECFLAGS="$LDEXECFLAGS -Wl,--section-start,.interp=0x7bf00400" ;; esac ])
AC_PATH_PROG(PRELINK, prelink, false, [/sbin /usr/sbin $PATH])
if test "x$PRELINK" = xfalse
WINE_TRY_CFLAGS([-Wl,-Ttext-segment=0x7bc00000],
[HAVE_TTEXT_SEGMENT="yes"])
if test "x$HAVE_TTEXT_SEGMENT" != "xyes" then
WINE_WARNING([prelink not found, base address of core dlls won't be set correctly.])
AC_PATH_PROG(PRELINK, prelink, false, [/sbin /usr/sbin $PATH])
if test "x$PRELINK" = xfalse
then
WINE_WARNING([prelink not found and linker does not support relocation, base address of core dlls won't be set correctly.])
fi fi ;; esac
diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c index 3b2794e..4acd12d 100644 --- a/tools/winegcc/winegcc.c +++ b/tools/winegcc/winegcc.c @@ -1134,6 +1134,12 @@ static void build(struct options* opts) } break; default:
/* Try option first, modern linkers support this */
if (opts->image_base &&
!try_link(opts->prefix, link_args, strmake("-Wl,-Ttext-segment=%s", opts->image_base)))
{
strarray_add(link_args, strmake("-Wl,-Ttext-segment=%s", opts->image_base));
}} break;
@@ -1167,8 +1173,9 @@ static void build(struct options* opts) spawn(opts->prefix, link_args, 0); strarray_free (link_args);
- /* set the base address */
- if (opts->image_base && !opts->target)
- /* set the base address with prelink if linker support is not present */
- if (opts->image_base && !opts->target &&
{ const char *prelink = PRELINK; if (prelink[0] && strcmp(prelink,"false"))try_link(opts->prefix, link_args, strmake("-Wl,-Ttext-segment=%s", opts->image_base)))
-- 2.4.3