-
Notifications
You must be signed in to change notification settings - Fork 13
/
Makefile.common
75 lines (68 loc) · 3 KB
/
Makefile.common
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# libpulp - User-space Livepatching Library
#
# Copyright (C) 2020-2021 SUSE Software Solutions GmbH
#
# This file is part of libpulp.
#
# libpulp is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# libpulp is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with libpulp. If not, see <http://www.gnu.org/licenses/>.
# ULP tools location.
ULP = $(top_builddir)/tools/ulp
ULP_POST = $(ULP) post
ULP_PACKER = $(ULP) packer
ULP_REVERSE = $(ULP) reverse
ULP_EXTRACT = $(ULP) extract
# Build and link requirements for live-patchable (target) libraries.
TARGET_CFLAGS = \
-fPIC \
-fpatchable-function-entry=$(ULP_NOPS_LEN),$(PRE_NOPS_LEN) \
-fno-inline \
$(AM_CFLAGS)
TARGET_LDFLAGS = \
--build-id \
-Wl,--hash-style=sysv \ # Ubuntu seems to default to gnu, so be clear we ...
$(AM_LDFLAGS) # ... want old style hash sections, else DT_HASH is empty.
# In libtool, convenience libraries are not installed, so they do not
# need -rpath, which causes them to be statically linked. However,
# libpulp can only live patch dynamically linked libraries, so pass
# -rpath to libtool, which causes the linking to become dynamic.
CONVENIENCE_LDFLAGS = -rpath $(libdir) $(AM_LDFLAGS)
# The following custom rules are triggered by <testname>_DEPENDENCIES:
# This rule causes the target library to be post-processed with
# ulp_post, which replaces single-byte with multi-byte nops. Files with
# .post extension track whether the respective libraries have already
# been post-processed.
#
# Since we also support to specify the target library as a dump of the
# relevant informations (name, symbols, build id), we also have extra
# logic to generate such dumps (JSON file).
.libs/lib%.post: lib%.la
$(ULP_POST) .libs/lib$*.so.0
$(ULP_EXTRACT) .libs/lib$*.so.0 -o .libs/lib$*.so.0.json
touch $@
# These rules cause the livepatch metadata to be built. The .ulp and
# .dsc targets depends on check_LTLIBRARIES, because .la targets
# indirectly produce the .so files they need (it is impossible to have
# .ulp and .dsc targets depend directly on .so files, because libtool
# does not create .so targets).
%.dsc: %.in $(check_LTLIBRARIES)
sed -e "s|__ABS_BUILDDIR__|$(abs_builddir)|" $< > $*.tmp
$(top_srcdir)/tests/offsets.py $*.tmp $@
rm -f $*.tmp
# This rule build the .ulp file, which at some point were used to hold
# the compiled metadata description. Today it is directly integrated
# into the .so file which holds the livepatch code, within the .ulp
# and .ulp.rev section.
%.ulp: %.dsc $(check_LTLIBRARIES)
$(ULP_PACKER) $< #-o $@
echo Maintained here for legacy reasons > $@