Skip to content

Commit bb8a618

Browse files
Linux: add a note to the ELF binary what minimum Linux is needed
Change-Id: Ia53158e207a94bf49489fffd14c8d2a1f173ff97 Reviewed-by: Lars Knoll <[email protected]> Reviewed-by: Marc Mutz <[email protected]> Reviewed-by: Thiago Macieira <[email protected]>
1 parent 919b12d commit bb8a618

File tree

2 files changed

+108
-0
lines changed

2 files changed

+108
-0
lines changed

src/corelib/global/global.pri

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,22 @@ if(linux*|hurd*):!cross_compile:!static:!*-armcc* {
5959
DEFINES += ELF_INTERPRETER=\\\"$$system(LC_ALL=C readelf -l /bin/ls | perl -n -e \'$$prog\')\\\"
6060
}
6161

62+
linux:!static {
63+
precompile_header {
64+
# we'll get an error if we just use SOURCES +=
65+
no_pch_assembler.commands = $$QMAKE_CC -c $(CFLAGS) $(INCPATH) ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
66+
no_pch_assembler.dependency_type = TYPE_C
67+
no_pch_assembler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_OBJ)}
68+
no_pch_assembler.input = NO_PCH_ASM
69+
no_pch_assembler.name = compiling[no_pch] ${QMAKE_FILE_IN}
70+
silent: no_pch_assembler.commands = @echo compiling[no_pch] ${QMAKE_FILE_IN} && $$no_pch_assembler.commands
71+
QMAKE_EXTRA_COMPILERS += no_pch_assembler
72+
NO_PCH_ASM += global/minimum-linux.S
73+
} else {
74+
SOURCES += global/minimum-linux.S
75+
}
76+
}
77+
6278
qtConfig(slog2): \
6379
LIBS_PRIVATE += -lslog2
6480

src/corelib/global/minimum-linux.S

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/****************************************************************************
2+
**
3+
** Copyright (C) 2017 Intel Corporation.
4+
** Contact: https://www.qt.io/licensing/
5+
**
6+
** This file is part of the QtCore module of the Qt Toolkit.
7+
**
8+
** $QT_BEGIN_LICENSE:LGPL$
9+
** Commercial License Usage
10+
** Licensees holding valid commercial Qt licenses may use this file in
11+
** accordance with the commercial license agreement provided with the
12+
** Software or, alternatively, in accordance with the terms contained in
13+
** a written agreement between you and The Qt Company. For licensing terms
14+
** and conditions see https://www.qt.io/terms-conditions. For further
15+
** information use the contact form at https://www.qt.io/contact-us.
16+
**
17+
** GNU Lesser General Public License Usage
18+
** Alternatively, this file may be used under the terms of the GNU Lesser
19+
** General Public License version 3 as published by the Free Software
20+
** Foundation and appearing in the file LICENSE.LGPL3 included in the
21+
** packaging of this file. Please review the following information to
22+
** ensure the GNU Lesser General Public License version 3 requirements
23+
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24+
**
25+
** GNU General Public License Usage
26+
** Alternatively, this file may be used under the terms of the GNU
27+
** General Public License version 2.0 or (at your option) the GNU General
28+
** Public license version 3 or any later version approved by the KDE Free
29+
** Qt Foundation. The licenses are as published by the Free Software
30+
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31+
** included in the packaging of this file. Please review the following
32+
** information to ensure the GNU General Public License requirements will
33+
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34+
** https://www.gnu.org/licenses/gpl-3.0.html.
35+
**
36+
** $QT_END_LICENSE$
37+
**
38+
****************************************************************************/
39+
40+
/* Copied from #include <elf.h>:
41+
*/
42+
#define ELF_NOTE_GNU "GNU"
43+
#define NT_GNU_ABI_TAG 1
44+
#define ELF_NOTE_OS_LINUX 0
45+
46+
#ifdef __arm__
47+
# define progbits %progbits
48+
# define note %note
49+
#else
50+
# define progbits @progbits
51+
# define note @note
52+
#endif
53+
54+
/* Add information for the ELF dynamic linker what the minimum Linux version
55+
* required for Qt is.
56+
*
57+
* The .note.ABI-tag note section is defined at
58+
* https://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/noteabitag.html
59+
*/
60+
61+
.section ".note.GNU-stack", "", progbits
62+
.section ".note.ABI-tag", "a", note
63+
.align 4 /* we have 32-bit data */
64+
65+
/* * For the format of the note section's contents, see Elf32_Nhdr / Elf64_Nhdr */
66+
.long .Lnameend-.Lname /* n_namesz */
67+
.long 16 /* n_descsz(16 bytes, normative) */
68+
.long NT_GNU_ABI_TAG /* n_type */
69+
70+
.Lname:
71+
.asciz ELF_NOTE_GNU
72+
.Lnameend:
73+
74+
/* Operating systems: */
75+
.long ELF_NOTE_OS_LINUX
76+
77+
/* Minimum Linux kernel version:
78+
* We require the following features in Qt (unconditional, no fallback):
79+
* Feature Added in version
80+
* - inotify_init1 before 2.6.12-rc12
81+
* - futex(2) before 2.6.12-rc12
82+
* - FUTEX_PRIVATE_FLAG 2.6.22
83+
* - O_CLOEXEC 2.6.23
84+
* - eventfd 2.6.23
85+
* - pipe2 & dup3 2.6.27
86+
* - accept4 2.6.28
87+
*/
88+
89+
.long 2
90+
.long 6
91+
.long 28
92+

0 commit comments

Comments
 (0)