kern/176216: [patch] Allow loading ELF libraries at their preferred base address (needed for Wine)
>Number: 176216 >Category: kern >Synopsis: [patch] Allow loading ELF libraries at their preferred base >address (needed for Wine) >Confidential: no >Severity: non-critical >Priority: low >Responsible:freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Sun Feb 17 21:00:00 UTC 2013 >Closed-Date: >Last-Modified: >Originator: Damjan Jovanovic >Release:9.1 >Organization: >Environment: Any >Description: FreeBSD's dynamic linker (/libexec/ld-elf.so.1) currently loads libraries by calling mmap() with 0 as the first parameter, causing them to be loaded at whatever address the kernel chooses. But for maximum compatibility with Windows applications, Wine needs some of its DLLs to be loaded at particular memory addresses (see the comments on https://wiki.freebsd.org/Wine). With this patch, first mmap() is called with the base address of the library and MAP_FIXED, giving the library a chance to load at the base address it specified, and if this fails then mmap() is called without MAP_FIXED so the library can at least load somewhere else since its preferred memory region is unavailable. >How-To-Repeat: >Fix: Patch attached with submission follows: Index: libexec/rtld-elf/map_object.c === --- libexec/rtld-elf/map_object.c (revision 246877) +++ libexec/rtld-elf/map_object.c (working copy) @@ -175,11 +175,22 @@ base_vaddr = trunc_page(segs[0]->p_vaddr); base_vlimit = round_page(segs[nsegs]->p_vaddr + segs[nsegs]->p_memsz); mapsize = base_vlimit - base_vaddr; -base_addr = hdr->e_type == ET_EXEC ? (caddr_t) base_vaddr : NULL; +base_addr = (caddr_t) base_vaddr; -mapbase = mmap(base_addr, mapsize, PROT_NONE, MAP_ANON | MAP_PRIVATE | - MAP_NOCORE, -1, 0); +/* + * Executables, and libraries whose base_addr isn't 0, + * should ideally be loaded at that base_addr. + */ +mapbase = (caddr_t) -1; +if (base_addr != 0) { +mapbase = mmap(base_addr, mapsize, PROT_NONE, MAP_ANON | MAP_PRIVATE | + MAP_NOCORE | MAP_FIXED, -1, 0); +} if (mapbase == (caddr_t) -1) { +mapbase = mmap(base_addr, mapsize, PROT_NONE, MAP_ANON | MAP_PRIVATE | + MAP_NOCORE, -1, 0); +} +if (mapbase == (caddr_t) -1) { _rtld_error("%s: mmap of entire address space failed: %s", path, rtld_strerror(errno)); goto error; >Release-Note: >Audit-Trail: >Unformatted: ___ freebsd-bugs@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"
Re: kern/170356: [hyper-v] Installing freebsd on Hyper-V server 2008 R2
Synopsis: [hyper-v] Installing freebsd on Hyper-V server 2008 R2 Responsible-Changed-From-To: freebsd-i386->freebsd-bugs Responsible-Changed-By: linimon Responsible-Changed-When: Sun Feb 17 22:40:26 UTC 2013 Responsible-Changed-Why: reclassify. http://www.freebsd.org/cgi/query-pr.cgi?pr=170356 ___ freebsd-bugs@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"
Re: kern/176201: [net80211] [patch] 11n station includes unrelated ht params into ASSOC_REQ packet
Old Synopsis: 11n station includes unrelated ht params into ASSOC_REQ packet New Synopsis: [net80211] [patch] 11n station includes unrelated ht params into ASSOC_REQ packet Responsible-Changed-From-To: freebsd-bugs->freebsd-wireless Responsible-Changed-By: linimon Responsible-Changed-When: Mon Feb 18 02:46:29 UTC 2013 Responsible-Changed-Why: Over to maintainer(s). http://www.freebsd.org/cgi/query-pr.cgi?pr=176201 ___ freebsd-bugs@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"
Re: bin/175339: ldd(1) runs linux binaries instead of printing shared library dependencies
Synopsis: ldd(1) runs linux binaries instead of printing shared library dependencies State-Changed-From-To: open->analyzed State-Changed-By: markj State-Changed-When: Mon Feb 18 05:03:50 UTC 2013 State-Changed-Why: I'll take it. Responsible-Changed-From-To: freebsd-bugs->markj Responsible-Changed-By: markj Responsible-Changed-When: Mon Feb 18 05:03:50 UTC 2013 Responsible-Changed-Why: I'll take it. http://www.freebsd.org/cgi/query-pr.cgi?pr=175339 ___ freebsd-bugs@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"
Re: bin/175491: [libelf] [patch] elf_getdata may return NULL without setting error-message
Synopsis: [libelf] [patch] elf_getdata may return NULL without setting error-message State-Changed-From-To: open->analyzed State-Changed-By: markj State-Changed-When: Mon Feb 18 05:04:08 UTC 2013 State-Changed-Why: I'll take it. Responsible-Changed-From-To: freebsd-bugs->markj Responsible-Changed-By: markj Responsible-Changed-When: Mon Feb 18 05:04:08 UTC 2013 Responsible-Changed-Why: I'll take it. http://www.freebsd.org/cgi/query-pr.cgi?pr=175491 ___ freebsd-bugs@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"
Re: bin/176136: [patch] cp(1) fails to overwrite a symlink pointing to a directory
Synopsis: [patch] cp(1) fails to overwrite a symlink pointing to a directory State-Changed-From-To: open->analyzed State-Changed-By: markj State-Changed-When: Mon Feb 18 05:04:24 UTC 2013 State-Changed-Why: I'll take it. Responsible-Changed-From-To: freebsd-bugs->markj Responsible-Changed-By: markj Responsible-Changed-When: Mon Feb 18 05:04:24 UTC 2013 Responsible-Changed-Why: I'll take it. http://www.freebsd.org/cgi/query-pr.cgi?pr=176136 ___ freebsd-bugs@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"
Re: kern/176216: [libexec] [patch] Allow loading ELF libraries at their preferred base address (needed for Wine)
The following reply was made to PR kern/176216; it has been noted by GNATS. From: Damjan Jovanovic To: bug-follo...@freebsd.org Cc: Subject: Re: kern/176216: [libexec] [patch] Allow loading ELF libraries at their preferred base address (needed for Wine) Date: Mon, 18 Feb 2013 07:31:39 +0200 --bcaec4485b6f6804d5f90b7c Content-Type: text/plain; charset=ISO-8859-1 This is a newer version of the patch that doesn't fail when a library can't be loaded at its desired address. --bcaec4485b6f6804d5f90b7c Content-Type: application/octet-stream; name="ld-elf-base-2.patch" Content-Disposition: attachment; filename="ld-elf-base-2.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hdb6qx7v0 SW5kZXg6IGxpYmV4ZWMvcnRsZC1lbGYvbWFwX29iamVjdC5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpYmV4 ZWMvcnRsZC1lbGYvbWFwX29iamVjdC5jCShyZXZpc2lvbiAyNDY4NzcpCisrKyBsaWJleGVjL3J0 bGQtZWxmL21hcF9vYmplY3QuYwkod29ya2luZyBjb3B5KQpAQCAtMTc1LDIwICsxNzUsMzAgQEAK ICAgICBiYXNlX3ZhZGRyID0gdHJ1bmNfcGFnZShzZWdzWzBdLT5wX3ZhZGRyKTsKICAgICBiYXNl X3ZsaW1pdCA9IHJvdW5kX3BhZ2Uoc2Vnc1tuc2Vnc10tPnBfdmFkZHIgKyBzZWdzW25zZWdzXS0+ cF9tZW1zeik7CiAgICAgbWFwc2l6ZSA9IGJhc2VfdmxpbWl0IC0gYmFzZV92YWRkcjsKLSAgICBi YXNlX2FkZHIgPSBoZHItPmVfdHlwZSA9PSBFVF9FWEVDID8gKGNhZGRyX3QpIGJhc2VfdmFkZHIg OiBOVUxMOworICAgIGJhc2VfYWRkciA9IChjYWRkcl90KSBiYXNlX3ZhZGRyOwogCi0gICAgbWFw YmFzZSA9IG1tYXAoYmFzZV9hZGRyLCBtYXBzaXplLCBQUk9UX05PTkUsIE1BUF9BTk9OIHwgTUFQ X1BSSVZBVEUgfAotICAgICAgTUFQX05PQ09SRSwgLTEsIDApOworICAgIC8qIEZpcnN0IHRyeSBs b2FkIGl0IGF0IGl0cyBkZXNpcmVkIGFkZHJlc3MgKi8KKyAgICBtYXBiYXNlID0gKGNhZGRyX3Qp IC0xOworICAgIGlmIChiYXNlX2FkZHIgIT0gMCkgeworICAgICAgICBtYXBiYXNlID0gbW1hcChi YXNlX2FkZHIsIG1hcHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT04gfCBNQVBfUFJJVkFURSB8Cisg ICAgICAgICAgTUFQX05PQ09SRSB8IE1BUF9GSVhFRCwgLTEsIDApOworICAgIH0KICAgICBpZiAo bWFwYmFzZSA9PSAoY2FkZHJfdCkgLTEpIHsKKwlpZiAoaGRyLT5lX3R5cGUgPT0gRVRfRVhFQykg eworCSAgICBfcnRsZF9lcnJvcigiJXM6IGxvYWRpbmcgYXQgYWRkcmVzcyAlcCBmYWlsZWQiLAor CQlwYXRoLCBiYXNlX2FkZHIpOworCSAgICBnb3RvIGVycm9yOworCX0gZWxzZSB7CisJICAgIC8q IGxpYnJhcmllcyBjYW4gZ28gYW55d2hlcmUgZWxzZSAqLworCSAgICBtYXBiYXNlID0gbW1hcChi YXNlX2FkZHIsIG1hcHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT04gfCBNQVBfUFJJVkFURSB8CisJ CU1BUF9OT0NPUkUsIC0xLCAwKTsKKwl9CisgICAgfQorICAgIGlmIChtYXBiYXNlID09IChjYWRk cl90KSAtMSkgewogCV9ydGxkX2Vycm9yKCIlczogbW1hcCBvZiBlbnRpcmUgYWRkcmVzcyBzcGFj ZSBmYWlsZWQ6ICVzIiwKIAkgIHBhdGgsIHJ0bGRfc3RyZXJyb3IoZXJybm8pKTsKIAlnb3RvIGVy cm9yOwogICAgIH0KLSAgICBpZiAoYmFzZV9hZGRyICE9IE5VTEwgJiYgbWFwYmFzZSAhPSBiYXNl X2FkZHIpIHsKLQlfcnRsZF9lcnJvcigiJXM6IG1tYXAgcmV0dXJuZWQgd3JvbmcgYWRkcmVzczog d2FudGVkICVwLCBnb3QgJXAiLAotCSAgcGF0aCwgYmFzZV9hZGRyLCBtYXBiYXNlKTsKLQlnb3Rv IGVycm9yMTsKLSAgICB9CiAKICAgICBmb3IgKGkgPSAwOyBpIDw9IG5zZWdzOyBpKyspIHsKIAkv KiBPdmVybGF5IHRoZSBzZWdtZW50IG9udG8gdGhlIHByb3BlciByZWdpb24uICovCg== --bcaec4485b6f6804d5f90b7c-- ___ freebsd-bugs@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"