On Thu, 11 Nov 2021 23:06:44 +1100 =?UTF-8?B?4oCN5bCP5aSq?=
<nos...@kota.moe> wrote:
> So either the change needs to be backported to v94, or we'll just have to wait
> until v95 (or compile the browser ourselves)
I was a bit adventurous and tried doing a binary patch on the current debian
version (94.0-1), and got it working.
If you open /usr/lib/firefox/libxul.so in a hex editor and go to file offset
0x46a4703, you can perform a find and replace with the below hex strings:
find: 498B5C2408904889DFFF157FBD9703EBF5
replace: 4D8B6C2408904C89EFFF157FBD9703EBDA
This effectively performs the following changes to the binary:
--- libxul.so.S.before 2021-11-12 03:15:52.985702747 +1100
+++ libxul.so.S.after 2021-11-12 04:13:27.364102267 +1100
@@ -18661992,15 +18661992,15 @@
4e956f2: 41 ff d5 call *%r13
4e956f5: 48 8d 0d cc 87 96 03 lea 0x39687cc(%rip),%rcx
# 87fdec8 <_ZZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEclEcE5__nul@@xul94+0xaed18>
4e956fc: 48 8d 15 cd 87 96 03 lea 0x39687cd(%rip),%rdx
# 87fded0 <_ZZNKSt8__detail11_AnyMatcherINSt7__cxx1112regex_traitsIcEELb0ELb0ELb0EEclEcE5__nul@@xul94+0xaed20>
4e95703: 48 83 7b 40 00 cmpq $0x0,0x40(%rbx)
4e95708: 74 11 je 4e9571b
<atp_promote_thread_to_real_time@@xul94+0xd18bb>
- 4e9570a: 49 8b 5c 24 08 mov 0x8(%r12),%rbx
+ 4e9570a: 4d 8b 6c 24 08 mov 0x8(%r12),%r13
4e9570f: 90 nop
- 4e95710: 48 89 df mov %rbx,%rdi
+ 4e95710: 4c 89 ef mov %r13,%rdi
4e95713: ff 15 7f bd 97 03 call *0x397bd7f(%rip)
# 8811498 <nspr_use_zone_allocator@@xul94+0x5258>
- 4e95719: eb f5 jmp 4e95710
<atp_promote_thread_to_real_time@@xul94+0xd18b0>
+ 4e95719: eb da jmp 4e956f5
<atp_promote_thread_to_real_time@@xul94+0xd1895>
4e9571b: 8b 02 mov (%rdx),%eax
4e9571d: 83 c0 ff add $0xffffffff,%eax
4e95720: 83 f8 01 cmp $0x1,%eax
4e95723: 0f 87 13 02 00 00 ja 4e9593c
<atp_promote_thread_to_real_time@@xul94+0xd1adc>
4e95729: 4c 8b 29 mov (%rcx),%r13
This basically changes the binary such that it no longer infinite loops in the
PulseStream::stop() function, and actually checks self.drain_timer every loop as
it's supposed to