|
|
Created:
4 years, 1 month ago by Nico Modified:
4 years, 1 month ago Reviewers:
Reid Kleckner CC:
chromium-reviews Target Ref:
refs/pending/heads/master Project:
chromium Visibility:
Public. |
Descriptionchrome/android/intel/clang: Use --icf=safe instead of --icf=all.
gold has a bug where it ignores section alignment when merging functions.
This means that member functions and regular functions with the same
contents can be merged even if the regular function has an odd address.
In the Itanium ABI, member function pointers with an odd address denote
virtual member function points, so if a non-virtual member function
gets folded into an identical non-member function that happens to be
at an odd address, the generated code will conclude at runtime that
the call is meant to be virtual, leading to a crash.
This only happens with -Os, at -O2 and -O0 functions are always
aligned at 16-byte boundaries. This only happens with clang because
we currently never pass --icf to gold in android builds with gcc.
The gold bug is fixed upstream and is in the progress of being merged
into the NDK's gold, but it's not there yet. Until it is, disable
full ICF on android (where we use -Os).
BUG=663886
Committed: https://crrev.com/aaa006d4a8d979e96d2ac248306240a60590b0bc
Cr-Commit-Position: refs/heads/master@{#433797}
Patch Set 1 #Patch Set 2 : rebase #Messages
Total messages: 21 (13 generated)
The CQ bit was checked by thakis@chromium.org to run a CQ dry run
thakis@chromium.org changed reviewers: + rnk@chromium.org
With this, the clang-built libchrome.so is 3MB larger than the gcc-built one on x64 :-(
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was checked by thakis@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
Description was changed from ========== chrome/android/intel/clang: Use --icf=safe instead of --icf=all. gold has a bug where it ignores section alignment when merging functions. This means that member functions and regular functions with the same contents can be merged even if the regular function has an odd address. In the Itanium ABI, member function pointers with an odd address denote virtual member function points, so if a non-virtual member function gets folded into an identical non-member function that happens to be at an odd address, the generated code will conclude at runtime that the call is meant to be virtual, leading to a crash. This only happens with -Os, at -O2 and -O0 functions are always aligned at 16-byte boundaries. The gold bug is fixed upstream and is in the progress of being merged into the NDK's gold, but it's not there yet. Until it is, disable full ICF on android (where we use -Os). BUG=663886 ========== to ========== chrome/android/intel/clang: Use --icf=safe instead of --icf=all. gold has a bug where it ignores section alignment when merging functions. This means that member functions and regular functions with the same contents can be merged even if the regular function has an odd address. In the Itanium ABI, member function pointers with an odd address denote virtual member function points, so if a non-virtual member function gets folded into an identical non-member function that happens to be at an odd address, the generated code will conclude at runtime that the call is meant to be virtual, leading to a crash. This only happens with -Os, at -O2 and -O0 functions are always aligned at 16-byte boundaries. This only happens with clang because we currently never pass --icf to gold in android builds with gcc. The gold bug is fixed upstream and is in the progress of being merged into the NDK's gold, but it's not there yet. Until it is, disable full ICF on android (where we use -Os). BUG=663886 ==========
Bummer, lgtm. Good to know Sri fixed the gold bug, though. He sits one cube away, I'll thank him. :)
From my reading of the bug, Gergely Nagy fixed the bug and Sri merged the fix. But yeah, I'll go say hello the next time I'm in MTV :-)
The CQ bit was unchecked by thakis@chromium.org
The CQ bit was checked by thakis@chromium.org
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
The CQ bit was unchecked by commit-bot@chromium.org
Try jobs failed on following builders: linux_chromium_asan_rel_ng on master.tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_...)
The CQ bit was checked by thakis@chromium.org
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.or...
CQ is committing da patch. Bot data: {"patchset_id": 20001, "attempt_start_ts": 1479789687958770, "parent_rev": "1c0e9c09682403eb59439b9eab28ceae53219aa5", "commit_rev": "e0ae7aa6e7a054ee274a4102f9df2d64dfb62b20"}
Message was sent while issue was closed.
Description was changed from ========== chrome/android/intel/clang: Use --icf=safe instead of --icf=all. gold has a bug where it ignores section alignment when merging functions. This means that member functions and regular functions with the same contents can be merged even if the regular function has an odd address. In the Itanium ABI, member function pointers with an odd address denote virtual member function points, so if a non-virtual member function gets folded into an identical non-member function that happens to be at an odd address, the generated code will conclude at runtime that the call is meant to be virtual, leading to a crash. This only happens with -Os, at -O2 and -O0 functions are always aligned at 16-byte boundaries. This only happens with clang because we currently never pass --icf to gold in android builds with gcc. The gold bug is fixed upstream and is in the progress of being merged into the NDK's gold, but it's not there yet. Until it is, disable full ICF on android (where we use -Os). BUG=663886 ========== to ========== chrome/android/intel/clang: Use --icf=safe instead of --icf=all. gold has a bug where it ignores section alignment when merging functions. This means that member functions and regular functions with the same contents can be merged even if the regular function has an odd address. In the Itanium ABI, member function pointers with an odd address denote virtual member function points, so if a non-virtual member function gets folded into an identical non-member function that happens to be at an odd address, the generated code will conclude at runtime that the call is meant to be virtual, leading to a crash. This only happens with -Os, at -O2 and -O0 functions are always aligned at 16-byte boundaries. This only happens with clang because we currently never pass --icf to gold in android builds with gcc. The gold bug is fixed upstream and is in the progress of being merged into the NDK's gold, but it's not there yet. Until it is, disable full ICF on android (where we use -Os). BUG=663886 ==========
Message was sent while issue was closed.
Committed patchset #2 (id:20001)
Message was sent while issue was closed.
Description was changed from ========== chrome/android/intel/clang: Use --icf=safe instead of --icf=all. gold has a bug where it ignores section alignment when merging functions. This means that member functions and regular functions with the same contents can be merged even if the regular function has an odd address. In the Itanium ABI, member function pointers with an odd address denote virtual member function points, so if a non-virtual member function gets folded into an identical non-member function that happens to be at an odd address, the generated code will conclude at runtime that the call is meant to be virtual, leading to a crash. This only happens with -Os, at -O2 and -O0 functions are always aligned at 16-byte boundaries. This only happens with clang because we currently never pass --icf to gold in android builds with gcc. The gold bug is fixed upstream and is in the progress of being merged into the NDK's gold, but it's not there yet. Until it is, disable full ICF on android (where we use -Os). BUG=663886 ========== to ========== chrome/android/intel/clang: Use --icf=safe instead of --icf=all. gold has a bug where it ignores section alignment when merging functions. This means that member functions and regular functions with the same contents can be merged even if the regular function has an odd address. In the Itanium ABI, member function pointers with an odd address denote virtual member function points, so if a non-virtual member function gets folded into an identical non-member function that happens to be at an odd address, the generated code will conclude at runtime that the call is meant to be virtual, leading to a crash. This only happens with -Os, at -O2 and -O0 functions are always aligned at 16-byte boundaries. This only happens with clang because we currently never pass --icf to gold in android builds with gcc. The gold bug is fixed upstream and is in the progress of being merged into the NDK's gold, but it's not there yet. Until it is, disable full ICF on android (where we use -Os). BUG=663886 Committed: https://crrev.com/aaa006d4a8d979e96d2ac248306240a60590b0bc Cr-Commit-Position: refs/heads/master@{#433797} ==========
Message was sent while issue was closed.
Patchset 2 (id:??) landed as https://crrev.com/aaa006d4a8d979e96d2ac248306240a60590b0bc Cr-Commit-Position: refs/heads/master@{#433797} |