Closed Bug 331898 Opened 18 years ago Closed 18 years ago

Prebinding not working on Universal Binary Builds?

Categories

(Firefox Build System :: General, defect)

2.0 Branch
x86
macOS
defect
Not set
normal

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)

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.
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
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.
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?
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?
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.
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
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.
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 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+
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
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?
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.
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
Flags: blocking1.8.0.3?
Flags: blocking1.8.0.3+
Flags: blocking1.8.0.2?
Flags: blocking1.8.0.2-
Attachment #216604 - Flags: approval1.8.0.3?
Attachment #216604 - Flags: approval-branch-1.8.1+
Landed on MOZILLA_1_8_BRANCH and CAMINO_1_0_1_MINIBRANCH.  We should also get this for 1.8.0.3.
Keywords: qawantedfixed1.8.1
Whiteboard: [camino-1.0.1]
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+
Checked in, 1_8_0 for 1.8.0.3
Keywords: fixed1.8.0.3
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.

Attachment

General

Creator:
Created:
Updated:
Size: