nixpkgs/pkgs/applications/networking/browsers/firefox/lto-dependentlibs-generation-ffx83.patch
S. Nordin Abouzahra 7415d0589d firefox: overhaul LTO
Enable LTO support on Linux by default again.

Add patch to fix dependentlibs.list generation under LTO. This is
necessary for fixing firefox-wayland crashing when built with LTO.

Add makeFlags which set ar, ranlib, and nm to be llvm-ar, llvm-ranlib
and llvm-nm when building with llvm-based LTO. (bmo#1480005)
2021-01-13 08:06:48 -05:00

46 lines
1.8 KiB
Diff

--- a/toolkit/library/build/dependentlibs.py
+++ b/toolkit/library/build/dependentlibs.py
@@ -36,26 +36,17 @@ def dependentlibs_win32_objdump(lib):
proc.wait()
return deps
-def dependentlibs_readelf(lib):
+def dependentlibs_elf_objdump(lib):
'''Returns the list of dependencies declared in the given ELF .so'''
- proc = subprocess.Popen([substs.get('TOOLCHAIN_PREFIX', '') + 'readelf', '-d', lib], stdout = subprocess.PIPE,
+ proc = subprocess.Popen([substs['LLVM_OBJDUMP'], '--private-headers', lib], stdout = subprocess.PIPE,
universal_newlines=True)
deps = []
for line in proc.stdout:
- # Each line has the following format:
- # tag (TYPE) value
- # or with BSD readelf:
- # tag TYPE value
- # Looking for NEEDED type entries
- tmp = line.split(' ', 3)
- if len(tmp) > 3 and 'NEEDED' in tmp[2]:
- # NEEDED lines look like:
- # 0x00000001 (NEEDED) Shared library: [libname]
- # or with BSD readelf:
- # 0x00000001 NEEDED Shared library: [libname]
- match = re.search('\[(.*)\]', tmp[3])
- if match:
- deps.append(match.group(1))
+ # We are looking for lines with the format:
+ # NEEDED libname
+ tmp = line.split()
+ if len(tmp) == 2 and tmp[0] == 'NEEDED':
+ deps.append(tmp[1])
proc.wait()
return deps
@@ -110,7 +101,7 @@ def gen_list(output, lib):
libpaths = [os.path.join(substs['DIST'], 'bin')]
binary_type = get_type(lib)
if binary_type == ELF:
- func = dependentlibs_readelf
+ func = dependentlibs_elf_objdump
elif binary_type == MACHO:
func = dependentlibs_mac_objdump
else: