Closed
Bug 331898
Opened 18 years ago
Closed 18 years ago
Prebinding not working on Universal Binary Builds?
Categories
(Firefox Build System :: General, defect)
Tracking
(Not tracked)
RESOLVED
FIXED
People
(Reporter: mscott, Unassigned)
Details
(Keywords: fixed1.8.0.4, fixed1.8.1, regression, Whiteboard: [camino-1.0.1])
Attachments
(1 file)
2.21 KB,
patch
|
bryner
:
review+
mark
:
approval-branch-1.8.1+
dveditz
:
approval1.8.0.4+
|
Details | Diff | Splinter Review |
While poking through the build logs of the universal binary builds, I noticed some warnings in the log which made it look like pre-binding was being disabled. I wonder if we need to update the pre-binding table (config/prebind-address-table) to take into account something with universal binaries? I'll post the pre-binding warnings in a separate comment. I don't see these warnings in a PPC build log from Fireball.
Reporter | ||
Comment 1•18 years ago
|
||
Warnings: ld: warning suggest use of -bind_at_load, as lazy binding may result in errors or different symbols being used ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __TEXT segment (address = 0x6000000 size = 0x85000) of @executable_path/libmozjs.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __DATA segment (address = 0x6085000 size = 0x5000) of @executable_path/libmozjs.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __LINKEDIT segment (address = 0x608a000 size = 0x195000) of @executable_path/libmozjs.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __TEXT segment (address = 0x7000000 size = 0x1000) of @executable_path/libxpcom.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __DATA segment (address = 0x7001000 size = 0x1000) of @executable_path/libxpcom.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __LINKEDIT segment (address = 0x7002000 size = 0x6000) of @executable_path/libxpcom.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __TEXT segment (address = 0x10000000 size = 0x86000) of @executable_path/libxpcom_core.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __DATA segment (address = 0x10086000 size = 0x7000) of @executable_path/libxpcom_core.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __LINKEDIT segment (address = 0x1008d000 size = 0xbac000) of @executable_path/libxpcom_core.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __TEXT segment (address = 0x4000000 size = 0xe000) of @executable_path/libplds4.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __DATA segment (address = 0x400e000 size = 0x1000) of @executable_path/libplds4.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __LINKEDIT segment (address = 0x400f000 size = 0x9000) of @executable_path/libplds4.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __TEXT segment (address = 0x5000000 size = 0xf000) of @executable_path/libplc4.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __DATA segment (address = 0x500f000 size = 0x1000) of @executable_path/libplc4.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __LINKEDIT segment (address = 0x5010000 size = 0xd000) of @executable_path/libplc4.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __TEXT segment (address = 0x3000000 size = 0x33000) of @executable_path/libnspr4.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __DATA segment (address = 0x3033000 size = 0x4000) of @executable_path/libnspr4.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __LINKEDIT segment (address = 0x3037000 size = 0x8c000) of @executable_path/libnspr4.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __TEXT segment (address = 0xa000000 size = 0x1e000) of @executable_path/libsmime3.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __DATA segment (address = 0xa01e000 size = 0x2000) of @executable_path/libsmime3.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __LINKEDIT segment (address = 0xa020000 size = 0xd494) of @executable_path/libsmime3.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __TEXT segment (address = 0x8000000 size = 0x1c000) of @executable_path/libssl3.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __DATA segment (address = 0x801c000 size = 0x2000) of @executable_path/libssl3.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __LINKEDIT segment (address = 0x801e000 size = 0x892c) of @executable_path/libssl3.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __TEXT segment (address = 0x9000000 size = 0x61000) of @executable_path/libnss3.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __DATA segment (address = 0x9061000 size = 0x5000) of @executable_path/libnss3.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __LINKEDIT segment (address = 0x9066000 size = 0x24a98) of @executable_path/libnss3.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __TEXT segment (address = 0xb000000 size = 0x7b000) of @executable_path/libsoftokn3.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __DATA segment (address = 0xb07b000 size = 0x4000) of @executable_path/libsoftokn3.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __LINKEDIT segment (address = 0xb07f000 size = 0x24e74) of @executable_path/libsoftokn3.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __TEXT segment (address = 0xc000000 size = 0x19000) of @executable_path/libxpcom_compat.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __DATA segment (address = 0xc019000 size = 0x2000) of @executable_path/libxpcom_compat.dylib ld: warning prebinding disabled because (__LINKEDIT segment (address = 0xa00000 size = 0x18c3e000) of firefox-bin overlaps with __LINKEDIT segment (address = 0xc01b000 size = 0xf9000) of @executable_path/libxpcom_compat.dylib s
Reporter | ||
Comment 2•18 years ago
|
||
Nominating for 1.8.0.2. This would be a performance regression if pre-binding isn't working for 1.5.0.2. However, it's not clear without some more investigation if pre-binding is just getting disabled for the intel binary or the PPC binary as well. I also don't know if we still care about the performance win we used to get from pre-binding, maybe this is less important now.
Comment 3•18 years ago
|
||
Prebinding should be enabled for the ppc build and disabled for the x86 build. Prebinding is fruitless since 10.3.something. Since the ppc minimum is below that, we still leave it on for that architecture. The ppc and x86 builds are entirely independent. The fact that they're eventually merged to produce a universal binary doesn't have any impact on anything at compile- or link-time. I have seen this before, it seems to occur on the trunk. Which builds are you comparing?
Reporter | ||
Comment 4•18 years ago
|
||
I lost my nomination (although we may end up minusing it). Mark, I was looking at the log for the Fx UB machine for 1.5.0.2: http://tinderbox.mozilla.org/showlog.cgi?log=Mozilla1.8.0/1143460020.19299.gz&fulltext=1 and was comparing it to the fireball build where I didn't see the warnings about prebinding being disabled. http://tinderbox.mozilla.org/showlog.cgi?log=Mozilla1.8.0/1143457980.31783.gz&fulltext=1
Flags: blocking1.8.0.2?
Comment 5•18 years ago
|
||
OK, I see. Note that the errors show up on the ppc-only universal Tb build put out by fireball too. No surprise that we hit the limit on Tb before Fx there, Tb is a little bit weightier. We probably just need to adjust the table, like you said. I'd chalk the difference on the Fx builds up to using a slightly different toolchain by virtue of using Xcode 2 on 10.4 on the new Xserve, compared to fireball, which uses Xcode 1 on 10.3.
Comment 6•18 years ago
|
||
QA should determine if there's a perceptible startup-time regression when running a build with failed prebinding compared to the ppc-only 1.5.0.2 build from fireball.
Keywords: qawanted
Comment 7•18 years ago
|
||
Note to QA: please perform your tests on 10.2.x. Optionally, you can test with 10.3.0 - 10.3.3, but the deployed base of those versions is probably insignificant.
Comment 8•18 years ago
|
||
This moves the preferred addresses for dylibs out of the way of the main executable image, which is huge when building it statically with debugging symbols. libmozcomps.dylib is removed because it's a 1.7-era relic. XUL is added. I don't really care about this for 1.8.0.2 (c'mon, let's go, already!) unless tests show that not being prebound is causing a significant startup time regression on OS X <= 10.3.3. We should take this early in 1.8.0.3, though.
Attachment #216604 -
Flags: review?(bryner)
Comment 9•18 years ago
|
||
Comment on attachment 216604 [details] [diff] [review] New prebinding address table looks good... i thought we didn't actually worry about prebinding at all anymore, but i guess we do.
Attachment #216604 -
Flags: review?(bryner) → review+
Comment 10•18 years ago
|
||
Fixed on trunk, we'll want this for 1.8.1 and 1.8.0.3. Not sure about 1.8.0.2, needs testing to determine whether there's been a Ts regression with prebinding off.
Status: NEW → RESOLVED
Closed: 18 years ago
Resolution: --- → FIXED
Comment 11•18 years ago
|
||
Do we really want this for 1.8.0.2? Mark says it might affect performance and he doesn't care about it for 1.8.0.2. I'd hate to crack open this release *again*. Can we minus it for 1.8.0.2 and "?" it for 1.8.0.3?
Comment 12•18 years ago
|
||
Someone needs to see if having prebinding off causes a startup time regression on 10.2. I'll do it tomorrow if nobody else has by then.
Comment 13•18 years ago
|
||
Without prebinding, there's a 1-second (20%) Ts regression in my tests. 400MHz G3, 384MB, 10.2.8: 1.5.0.1 prebound Ts = 5.0s (range 5.0 - 5.0) 1.5.0.2 not prebound Ts = 6.1s (range 6.0 - 6.1) 1.5.0.1 not prebound Ts = 6.1s (range 6.0 - 6.1) Methodology: two launches of the app to ensure it's filled the buffer cache and has tailored the profile to itself, followed by five Ts tests. The two pre-test processes and five test processes were forcibly killed by a signal, so the cache was dirty and ignored for each run. This approximates the tinderbox tests as best as possible. The 1.5.0.1 not-prebound test is to show that the regression is attributable to the lack of prebinding and not to anything else that changed between 1.5.0.1 and 1.5.0.2. This affects pre-10.3.4 users, so I'm recommending blocking1.8.0.3. The fix is on the trunk. I don't think that this is serious enough to warrant another 1.8.0.2 respin.
Flags: blocking1.8.0.3?
Keywords: regression
Updated•18 years ago
|
Flags: blocking1.8.0.3?
Flags: blocking1.8.0.3+
Flags: blocking1.8.0.2?
Flags: blocking1.8.0.2-
Updated•18 years ago
|
Attachment #216604 -
Flags: approval1.8.0.3?
Attachment #216604 -
Flags: approval-branch-1.8.1+
Comment 14•18 years ago
|
||
Landed on MOZILLA_1_8_BRANCH and CAMINO_1_0_1_MINIBRANCH. We should also get this for 1.8.0.3.
Keywords: qawanted → fixed1.8.1
Whiteboard: [camino-1.0.1]
Comment 15•18 years ago
|
||
Comment on attachment 216604 [details] [diff] [review] New prebinding address table approved for 1.8.0 branch, a=dveditz for drivers
Attachment #216604 -
Flags: approval1.8.0.3? → approval1.8.0.3+
Assignee | ||
Updated•6 years ago
|
Component: Build Config → General
Product: Firefox → Firefox Build System
You need to log in
before you can comment on or make changes to this bug.
Description
•