Commit Graph

248 Commits

Author SHA1 Message Date
Sylvestre Ledru
a3ea006705 Bug 1519636 - Reformat recent changes to the Google coding style r=emilio,necko-reviewers,geckoview-reviewers,application-update-reviewers,media-playback-reviewers,devtools-reviewers,anti-tracking-reviewers,profiler-reviewers,win-reviewers,migration-reviewers,padenot,mconley,nchevobbe,kershaw,gstoll,mstange,bytesized,m_kato
This new version of clang 17 also slightly changed the formatting.

# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D215914
2024-07-17 11:15:31 +00:00
Mike Hommey
5184c03681 Bug 1903021 - Avoid use after vector resize. r=sergesanspaille
Differential Revision: https://phabricator.services.mozilla.com/D214330
2024-06-20 20:15:15 +00:00
Pier Angelo Vendrame
18e5b74828 Bug 1903254 - Explicitly include <array> in relrhack.cpp r=glandium
Differential Revision: https://phabricator.services.mozilla.com/D214097
2024-06-19 09:31:33 +00:00
Mike Hommey
befb6adf61 Bug 1898109 - Allow the Android system linker to handle RELR relocations itself. r=sergesanspaille
Differential Revision: https://phabricator.services.mozilla.com/D211122
2024-05-22 20:22:59 +00:00
Mike Hommey
1c25310cfc Bug 1892493 - Support reading a response file when that's the only thing on the command line. r=sergesanspaille
Differential Revision: https://phabricator.services.mozilla.com/D208284
2024-04-29 20:58:36 +00:00
Mike Hommey
6aa78a25db Bug 1867459 - Replace CPU_ARCH with TARGET_CPU. r=firefox-build-system-reviewers,sergesanspaille
Differential Revision: https://phabricator.services.mozilla.com/D195157
2023-12-08 10:43:59 +00:00
serge-sans-paille
51413c3b2b Bug 1864318 - Faster elfhack core loop r=glandium
This is 5% faster on my setup, mostly thanks to unrolling being
possible.

We also skip the early loop exit. Most of the bits of `bits` are generally set, so it's ok to do a
few more extra operations if we do them faster.

Differential Revision: https://phabricator.services.mozilla.com/D193366
2023-12-07 14:50:17 +00:00
Natalia Csoregi
142147334c Backed out changeset 08e37313483d (bug 1864318) as requested. CLOSED TREE 2023-12-04 23:47:32 +02:00
serge-sans-paille
723bf5da4e Bug 1864318 - Faster elfhack core loop r=glandium
This is 20% faster on my setup, and according to llvm-mca, the IPC for
the false branch (which is the hottest one) goes from 3 to 5.7, thanks
to unrolling and conditional moves.

Only activated on non-Android target though, as it breaks at runtime.

Basically, most of the bits of `bits` are generally set, so it's ok to do a
few more extra operations as we do them faster.

Differential Revision: https://phabricator.services.mozilla.com/D193366
2023-12-04 21:12:36 +00:00
Cristian Tuns
972f4da72a Backed out changeset 47c58e2355e9 (bug 1864318) for causing reftest failures in RemoteProcessMonitor CLOSED TREE 2023-11-19 06:59:14 -05:00
serge-sans-paille
5538fbd4e3 Bug 1864318 - Faster elfhack core loop r=glandium
This is 20% faster on my setup, and according to llvm-mca, the IPC for
the false branch (which is the hottest one) goes from 3 to 5.7, thanks
to unrolling and conditional moves.

Basically, most of the bits of `bits` are generally set, so it's ok to do a
few more extra operations as we do them faster.

Differential Revision: https://phabricator.services.mozilla.com/D193366
2023-11-19 10:23:20 +00:00
Natalia Csoregi
cf70430a28 Backed out changeset 10b80b0c808d (bug 1864318) for causing multiple Android 13.0 failures. CLOSED TREE 2023-11-17 19:04:14 +02:00
serge-sans-paille
c281b91095 Bug 1864318 - Faster elfhack core loop r=glandium
This is 20% faster on my setup, and according to llvm-mca, the IPC for
the false branch (which is the hottest one) goes from 3 to 5.7, thanks
to unrolling and conditional moves.

Basically, most of the bits of `bits` are generally set, so it's ok to do a
few more extra operations as we do them faster.

Differential Revision: https://phabricator.services.mozilla.com/D193366
2023-11-17 13:52:38 +00:00
Norisz Fay
8c484f4144 Backed out changeset a0950bb0cfcb (bug 1864318) for causing failures on Android 13 Pixel5 CLOSED TREE 2023-11-16 14:55:37 +02:00
serge-sans-paille
5ec9fb6bbb Bug 1864318 - Faster elfhack core loop r=glandium
This is 20% faster on my setup, and according to llvm-mca, the IPC for
the false branch (which is the hottest one) goes from 3 to 5.7, thanks
to unrolling and conditional moves.

Basically, most of the bits of `bits` are generally set, so it's ok to do a
few more extra operations as we do them faster.

Differential Revision: https://phabricator.services.mozilla.com/D193366
2023-11-16 07:19:23 +00:00
Mike Hommey
d22c04c22e Bug 1863441 - Don't filter out flags for debug info when building relrhack injected code. r=firefox-build-system-reviewers,sergesanspaille
When the injected code is used by elfhack, the debug info is thrown away
because elfhack doesn't know what to do with it, but in the case of
relrhack, the normal linker can handle it, so there's no reason not to
include the debug info anymore.

Differential Revision: https://phabricator.services.mozilla.com/D192904
2023-11-09 00:01:25 +00:00
Mike Hommey
1fc86ced8e Bug 1863485 - Properly update section headers when swapping .rel.plt and .relr.dyn of the same size. r=firefox-build-system-reviewers,sergesanspaille
When .rel.plt and .relr.dyn are the same size, after the section header
for .relr.dyn has been updated, it matches the condition for .rel.plt,
and we ended up undoing the change.

Differential Revision: https://phabricator.services.mozilla.com/D192981
2023-11-08 20:13:13 +00:00
Mike Hommey
e857df21e7 Bug 1856752 - Allow more leniency wrt swapping .relr.dyn and .rel.plt sections. r=sergesanspaille
On ARM, lld places the .ARM.exidx section between .rel.dyn/.relr.dyn and
.rel.plt. This means we can't swap .relr.dyn and .rel.plt (well, we
could, if we also moved and rewrote the .ARM.exidx section, but that's
more work than we ought to do).
But we only need to swap the sections when we want the binary to be
compatible with older versions of glibc, which we don't care about on
desktop ARM Linux (we don't ship such builds), and don't need at all
on ARM Android. Ultimately, this is a bug in lld
(https://github.com/llvm/llvm-project/issues/68178).

Differential Revision: https://phabricator.services.mozilla.com/D190006
2023-10-05 08:40:44 +00:00
Mike Hommey
fb4fdedb2b Bug 1855568 - Ensure that .relr.plt follows and is adjacent to .rel.dyn. r=sergesanspaille
Differential Revision: https://phabricator.services.mozilla.com/D189894
2023-10-03 23:44:51 +00:00
Mike Hommey
6a0e1c5473 Bug 1855568 - Refactor how the PT_DYNAMIC info is collected. r=sergesanspaille
We're soon going to collect a little more, and the current way of doing
so is not super convenient.

Differential Revision: https://phabricator.services.mozilla.com/D189893
2023-10-03 23:44:50 +00:00
Mike Hommey
4306dfa472 Bug 1855568 - Refactor writes in relrhack. r=sergesanspaille
In a manner similar to what's done for reads.

Differential Revision: https://phabricator.services.mozilla.com/D189892
2023-10-03 23:44:50 +00:00
serge-sans-paille
94a04210b2 Bug 1855955 - Remove useless <iostream> includes r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D189648
2023-09-29 14:15:53 +00:00
Mike Hommey
e30f6c697a Bug 1854497 - In elfhack checks, don't look for parens. r=firefox-build-system-reviewers,ahochheiden
Old versions of llvm-readelf didn't have parens in its output for `-d`.
So instead of looking for parens, look for word boundaries.

Differential Revision: https://phabricator.services.mozilla.com/D188897
2023-09-22 02:28:00 +00:00
Mike Hommey
29faf286bb Bug 1854303 - Apply the PT_DYNAMIC tag changes properly. r=firefox-build-system-reviewers,ahochheiden
They are supposed to be applied unconditionally, not only when there is
a GLIBC_ABI_DT_RELR version in the libc.

Differential Revision: https://phabricator.services.mozilla.com/D188894
2023-09-22 02:23:54 +00:00
Mike Hommey
6907834726 Bug 1854052 - Don't build elfhack tests when building with relrhack. r=firefox-build-system-reviewers,andi
They are not useful (and the corresponding Makefile doesn't use them
anyways, so they're built for nothing).

Differential Revision: https://phabricator.services.mozilla.com/D188679
2023-09-20 22:01:37 +00:00
Sandor Molnar
4d1bde4585 Bug 1850867 - Fix android bustages. a=fix 2023-09-19 07:52:45 +03:00
Mike Hommey
36a3881a8d Bug 1850867 - Add relrhack support for Android. r=firefox-build-system-reviewers,andi
Differential Revision: https://phabricator.services.mozilla.com/D188410
2023-09-19 04:32:17 +00:00
Mike Hommey
d4d37780f4 Bug 1839740 - New relrhack tool, a modern replacement to elfhack. r=firefox-build-system-reviewers,sergesanspaille
Elfhack is the main reason we're not using lld on Linux/Android
shippable builds, because the way it works doesn't go well with how lld
lays out ELF binaries. By leveraging the linker itself (BFD and lld both
having recently gained the ability to generate the compact relocation
info themselves), we can achieve a similar result to what elfhack is
doing, while allowing to use lld.

See more in-depth background on https://glandium.org/blog/?p=4297

Differential Revision: https://phabricator.services.mozilla.com/D187089
2023-09-16 19:52:25 +00:00
Mike Hommey
765e1fc6ab Bug 1839740 - Rename the symbol by elfhack to point to the ELF header. r=firefox-build-system-reviewers,andi
Elfhack acts as a linker, and it uses the `elf_header` symbol to point
at the ELF header in the injected code that applies relocations.
Both GNU ld and lld expose a `__ehdr_start` symbol with the same meaning,
so rename the `elf_header` symbol for compatibility. This will allow to
reuse the code in the upcoming replacement for elfhack.

Differential Revision: https://phabricator.services.mozilla.com/D187088
2023-09-16 19:52:25 +00:00
Mike Hommey
e0d3613cf8 Bug 1839741 - Upgrade binutils to 2.41. r=firefox-build-system-reviewers,ahochheiden
Because it bumps the alignment requirement on aarch64, we make the
elfhack test create more relocations to make the .rela.dyn section large
enough for the test to pass.

Differential Revision: https://phabricator.services.mozilla.com/D181684
2023-09-01 01:20:34 +00:00
Mike Hommey
1ef339d8ce Bug 1841212 - Build elfhack injected code without eh_frame. r=firefox-build-system-reviewers,sergesanspaille
Differential Revision: https://phabricator.services.mozilla.com/D182542
2023-06-30 08:11:43 +00:00
Mike Hommey
a928d1217f Bug 1840931 - More properly handle files > 4GB in elfhack. r=gsvelto
I'm pretty sure there are other theoretical problems in the code,
notably when a single section is larger than 4GB, but by the time
we reach that limit, bug 1839740 will have been fixed.

Differential Revision: https://phabricator.services.mozilla.com/D182447
2023-06-29 19:56:20 +00:00
Mike Hommey
544e75e4f5 Bug 1839746 - Make elfhack generate and handle a more standard SHT_RELR section. r=gsvelto
Bug 1747782 changed the format to SHT_RELR, but what's produced is still
different from a real SHT_RELR section, because it uses a terminating
nul entry.

Differential Revision: https://phabricator.services.mozilla.com/D181689
2023-06-22 23:56:47 +00:00
Mike Hommey
16d39ba41c Bug 1838328 - Add a trampoline to call original_init when it's not possible directly, aarch64 edition. r=gsvelto
Differential Revision: https://phabricator.services.mozilla.com/D180901
2023-06-14 08:49:14 +00:00
Mike Hommey
3f1cfa302b Bug 1820947 - Use "new style" sysroot on Android. r=firefox-build-system-reviewers,andi
For a few NDK releases now, the situation has been simplified wrt
headers and libraries, and while we're currently still using things here
and there because we never changed our ways, we can simplify things a
lot by using the new simplified things. This involves:
- Using a --target that contains the Android version, making clang set
  __ANDROID_API__ itself, and makes it look in $sysroot/usr/lib/$target/$ver
  when linking.
- Using the sysroot that is under toolchains/llvm/prebuilt/*.
- Removing the hacks around libstdc++/libc++.

This ends up emptying stlport compiler flags, which allows to remove a
bunch of things.

Differential Revision: https://phabricator.services.mozilla.com/D172039
2023-03-15 20:44:02 +00:00
Norisz Fay
f8852215c0 Backed out 2 changesets (bug 1820947) for causing build bustage CLOSED TREE
Backed out changeset eb6419bb8748 (bug 1820947)
Backed out changeset 9990083e8ea2 (bug 1820947)
2023-03-14 01:20:54 +02:00
Mike Hommey
af673cd45c Bug 1820947 - Use "new style" sysroot on Android. r=firefox-build-system-reviewers,andi
For a few NDK releases now, the situation has been simplified wrt
headers and libraries, and while we're currently still using things here
and there because we never changed our ways, we can simplify things a
lot by using the new simplified things. This involves:
- Using a --target that contains the Android version, making clang set
  __ANDROID_API__ itself, and makes it look in $sysroot/usr/lib/$target/$ver
  when linking.
- Using the sysroot that is under toolchains/llvm/prebuilt/*.
- Removing the hacks around libstdc++/libc++.

This ends up emptying stlport compiler flags, which allows to remove a
bunch of things.

Differential Revision: https://phabricator.services.mozilla.com/D172039
2023-03-13 21:14:47 +00:00
Andi-Bogdan Postelnicu
d016916382 Bug 1519636 - Reformat recent changes to the Google coding style. r=glandium
Updated with clang-format version 15.0.5 (taskcluster-MKK8dHUpQkGfPLA793lizg)
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D168658
2023-02-13 15:02:07 +00:00
Razvan Cojocaru
35023ee0c9 Bug 1142667 - [elfhack] Leak of |relhack| in |do_relocation_section|. r=firefox-build-system-reviewers,glandium
Now using std::unique_ptr<> for relhack, relhackcode and init, so
that nothing can leak on non-success exit paths.

Differential Revision: https://phabricator.services.mozilla.com/D144138
2022-05-20 07:01:54 +00:00
Iulian Moraru
acf1a00d35 Backed out changeset c2a224a0f3b4 (bug 1142667) for causing multiple build bustages on host_elfhack. 2022-05-19 03:25:50 +03:00
Razvan Cojocaru
5502556277 Bug 1142667 - [elfhack] Leak of |relhack| in |do_relocation_section|. r=firefox-build-system-reviewers,glandium
Now using std::unique_ptr<> for relhack, relhackcode and init, so
that nothing can leak on non-success exit paths.

Differential Revision: https://phabricator.services.mozilla.com/D144138
2022-05-18 21:18:32 +00:00
Mike Hommey
b02b96fd8a Bug 1747782 - Use a more compact representation of relocations in elfhack. r=gsvelto
Use the SHT_RELR format which significantly improves the size reduction
from elfhack:

   total size of .rel.* + .elfhack.* sections

                       x86      x86_64   android-arm
   plain             3532904   10739544    3488888
   current-elfhack   1085815    1155994    1042048
   relr-elfhack       130219     193552     113840

Differential Revision: https://phabricator.services.mozilla.com/D134756
2021-12-31 01:32:52 +00:00
Mike Hommey
677e0eef97 Bug 1747783 - Add support for aarch64 to elfhack. r=gsvelto
Differential Revision: https://phabricator.services.mozilla.com/D134764
2021-12-30 20:52:55 +00:00
Mike Hommey
92046ba305 Bug 1747783 - Use unsigned chars for fields that can have values > 127. r=gsvelto
Differential Revision: https://phabricator.services.mozilla.com/D134763
2021-12-30 20:52:55 +00:00
Mike Hommey
dcfd86c464 Bug 1747778 - Test what we can test of elfhack when cross-building. r=firefox-build-system-reviewers,mhentges
While here, switch to use $(READELF).

Differential Revision: https://phabricator.services.mozilla.com/D134746
2021-12-30 00:50:56 +00:00
Mike Hommey
88b2535f65 Bug 1495733 - Use a 64-bits internal representation in elfhack. r=gsvelto
Elfhack currently can't deal with files larger than 4GiB because it
translates all ELF data structures to the 32-bits variant, even for
64-bits ELF files. So if the original file has e.g. sections that start
after the 4GiB boundary, they can't be represented in memory.

Practically speaking, this is not causing problems, but has prevented a
working elfhack for aarch64 because e.g. some relocation types don't fit
in the 32-bits ELF representation.

Differential Revision: https://phabricator.services.mozilla.com/D134745
2021-12-29 01:18:29 +00:00
Mike Hommey
74cbf5097f Bug 1740042 - Use llvm-readelf instead of readelf when available. r=firefox-build-system-reviewers,mhentges
Differential Revision: https://phabricator.services.mozilla.com/D130949
2021-11-23 02:28:18 +00:00
Marian-Vasile Laza
52f9db0734 Backed out changeset 561c776bea20 (bug 1740042) for causing build bustages on llvm-readelf. 2021-11-16 02:51:16 +02:00
Mike Hommey
bbdc97fd13 Bug 1740042 - Use llvm-readelf instead of readelf when available. r=firefox-build-system-reviewers,mhentges
Differential Revision: https://phabricator.services.mozilla.com/D130949
2021-11-15 22:48:34 +00:00
Marian-Vasile Laza
729964e848 Backed out changeset bf55cb5e6b45 (bug 1740042) for causing build bustages. CLOSED TREE 2021-11-15 22:54:31 +02:00