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
47 lines
1.1 KiB
Python
47 lines
1.1 KiB
Python
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
|
# vim: set filetype=python:
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
DIST_INSTALL = False
|
|
DIRS += ["inject"]
|
|
|
|
if CONFIG["RELRHACK"]:
|
|
HOST_SOURCES += [
|
|
"relrhack.cpp",
|
|
]
|
|
|
|
HostProgram(CONFIG["RELRHACK_LINKER"])
|
|
|
|
HOST_OS_LIBS += CONFIG["RELRHACK_LIBS"]
|
|
|
|
if CONFIG["MOZ_STDCXX_COMPAT"]:
|
|
HOST_DEFINES["MOZ_STDCXX_COMPAT"] = True
|
|
else:
|
|
HOST_SOURCES += [
|
|
"elf.cpp",
|
|
"elfhack.cpp",
|
|
]
|
|
|
|
HostProgram("elfhack")
|
|
|
|
if not CONFIG["CROSS_COMPILE"]:
|
|
SOURCES += [
|
|
"dummy.c",
|
|
]
|
|
SOURCES["dummy.c"].flags += ["-fno-lto"]
|
|
|
|
SOURCES += [
|
|
"test-array.c",
|
|
"test-ctors.c",
|
|
]
|
|
SOURCES["test-array.c"].flags += ["-fno-lto"]
|
|
SOURCES["test-ctors.c"].flags += ["-fno-lto"]
|
|
|
|
NO_PGO = True
|
|
|
|
COMPILE_FLAGS["OS_CXXFLAGS"] = [
|
|
f for f in COMPILE_FLAGS["OS_CXXFLAGS"] if f != "-fno-exceptions"
|
|
] + ["-fexceptions"]
|