| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
| |
When I tested this, it compiled, but either I wasn't using the same
compiler or the problem happens during linking: we can't use .quad
(64-bit) with a relocation on x32. So instead, let's use .long (32-bit).
Task-number: QTBUG-52658
Change-Id: Ifea6e497f11a461db432ffff14468d1a16f49c67
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The qversiontagging.h inline assembly expands to:
.long qt_version_tag@GOTPCREL
Which, with GCC, Clang >= 3.7 and with the option -no-integrated-as in
previous versions, produces the proper relocation (a R_X86_64_GOTPCREL).
With Clang < 3.7, it instead produces a R_X86_64_32, which is unsuitable
for use in shared libraries: 32-bit displacement is insufficiently wide
and would produce linker errors like
obj/qftp.o: requires dynamic R_X86_64_32 reloc against 'qt_version_tag' which may overflow at runtime; recompile with -fPIC
Instead, force a 64-bit relocation (an R_X86_64_GOT64), which like the
32-bit version is simply an offset into the GOT of where the address of
the symbol is stored.
Task-number: QTBUG-50749
Change-Id: I7a9e11d7b64a4cc78e24ffff142e039c172b802c
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
|
|
|
|
|
|
|
|
|
|
|
| |
The ABI says that PC-relative displacements should be on 32-bit fields,
even on 64-bit builds. For -mcmodel=large, it should use R_X86_64_GOT64
relocations, like 32-bit.
Task-number: QTBUG-50537
Change-Id: I1041122c530b4f5bbaabffff142ade5b3cbfc4c5
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Commit d020e0781cf8647d87f7088350e40adf4f0cf8fe added a workaround to
the QtCore build due to a qmake bug in handling the extra target on a
Windows host. The workaround removed the tagging symbols from QtCore.
This commit removes the using of those symbols from everywhere else.
Task-number: QTBUG-49208
Change-Id: Idba8c29717f34c70a58fffff14133399f9f0b7f2
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
|
|
See the comment in the header for an explanation of what it does.
This trick is enabled for every single .o that is compiled, unless
QT_NO_VERSION_TAGGING is defined. The assembly expands to a COMDAT
section, which is mergeable by the linker, so only one copy of the
output is present in the ELF module.
This is enabled only for Linux and x86 / x86-64 / x32 due to the
requirement of writing assembly and relocations, so it needs to be
tested on each platform, which I have not done. It might work on
Solaris/x86, but again it requires testing. Support for other
architectures requires different assembly output and relocations and can
be added as needed, but they are not as important since this trick is
has most value on desktop systems.
Change-Id: I049a653beeb5454c9539ffff13e3ff5782a8cb86
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Rex Dieter <rdieter@gmail.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
|