blob: c35ffc7b8da1bedad91e526ab1b6bb35c46b5634 [file] [log] [blame]
nethercote4388a402004-09-01 23:20:49 +00001
njn7375de32009-08-05 08:08:18 +00002SUBDIRS = . tests
nethercote4388a402004-09-01 23:20:49 +00003
nethercoteb35a8b92004-09-11 16:45:27 +00004include $(top_srcdir)/Makefile.all.am
njn717cde52005-05-10 02:47:21 +00005
njn8b68b642009-06-24 00:37:09 +00006#----------------------------------------------------------------------------
7# <tool>-<platform> stuff
8#----------------------------------------------------------------------------
9
10TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@ = \
11 $(top_builddir)/coregrind/libcoregrind-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a \
12 $(top_builddir)/VEX/libvex-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a
13if VGCONF_HAVE_PLATFORM_SEC
14TOOL_DEPENDENCIES_@VGCONF_PLATFORM_SEC_CAPS@ = \
15 $(top_builddir)/coregrind/libcoregrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a \
16 $(top_builddir)/VEX/libvex-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a
17endif
18
19
20TOOL_LDADD_COMMON = -lgcc
21TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@ = \
22 $(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) $(TOOL_LDADD_COMMON)
23if VGCONF_HAVE_PLATFORM_SEC
24TOOL_LDADD_@VGCONF_PLATFORM_SEC_CAPS@ = \
25 $(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_SEC_CAPS@) $(TOOL_LDADD_COMMON)
26endif
27
28
29TOOL_LDFLAGS_COMMON_LINUX = -static \
30 -Wl,-defsym,valt_load_address=@VALT_LOAD_ADDRESS@ \
31 -nodefaultlibs -nostartfiles -u _start
32TOOL_LDFLAGS_COMMON_AIX5 = -static -Wl,-e_start_valgrind
33TOOL_LDFLAGS_COMMON_DARWIN = -nodefaultlibs -nostartfiles \
34 -Wl,-u,__start -Wl,-e,__start -Wl,-bind_at_load /usr/lib/dyld
35
36TOOL_LDFLAGS_X86_LINUX = \
37 $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@ \
38 -Wl,-T,$(top_builddir)/valt_load_address_x86_linux.lds
39
40TOOL_LDFLAGS_AMD64_LINUX = \
41 $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@ \
42 -Wl,-T,$(top_builddir)/valt_load_address_amd64_linux.lds
43
44TOOL_LDFLAGS_PPC32_LINUX = \
45 $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@ \
46 -Wl,-T,$(top_builddir)/valt_load_address_ppc32_linux.lds
47
48TOOL_LDFLAGS_PPC64_LINUX = \
49 $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@ \
50 -Wl,-T,$(top_builddir)/valt_load_address_ppc64_linux.lds
51
52TOOL_LDFLAGS_PPC32_AIX5 = \
53 $(TOOL_LDFLAGS_COMMON_AIX5) @FLAG_MAIX32@
54
55TOOL_LDFLAGS_PPC64_AIX5 = \
56 $(TOOL_LDFLAGS_COMMON_AIX5) @FLAG_MAIX64@ -Wl,-bbigtoc
57
58TOOL_LDFLAGS_X86_DARWIN = \
59 $(TOOL_LDFLAGS_COMMON_DARWIN) -arch i386 \
60 -Wl,-seg1addr,0xf0080000 \
61 -Wl,-stack_addr,0xf0080000 -Wl,-stack_size,0x80000 \
62 -Wl,-pagezero_size,0xf0000000
63
64# pagezero can't be unmapped and remapped. Use stack instead.
65# GrP fixme no stack guard
66TOOL_LDFLAGS_AMD64_DARWIN = \
67 $(TOOL_LDFLAGS_COMMON_DARWIN) -arch x86_64 \
68 -Wl,-seg1addr,0x7fff55000000 \
69 -Wl,-stack_addr,0x7fff50080000 -Wl,-stack_size,0x7ffe50080000 \
70 -Wl,-pagezero_size,0x100000000
71
72
73BUILT_SOURCES =
74CLEANFILES =
75if VGCONF_PLATFORMS_INCLUDE_X86_LINUX
76BUILT_SOURCES += $(top_builddir)/valt_load_address_x86_linux.lds
77CLEANFILES += $(top_builddir)/valt_load_address_x86_linux.lds
78endif
79if VGCONF_PLATFORMS_INCLUDE_AMD64_LINUX
80BUILT_SOURCES += $(top_builddir)/valt_load_address_amd64_linux.lds
81CLEANFILES += $(top_builddir)/valt_load_address_amd64_linux.lds
82endif
83if VGCONF_PLATFORMS_INCLUDE_PPC32_LINUX
84BUILT_SOURCES += $(top_builddir)/valt_load_address_ppc32_linux.lds
85CLEANFILES += $(top_builddir)/valt_load_address_ppc32_linux.lds
86endif
87if VGCONF_PLATFORMS_INCLUDE_PPC64_LINUX
88BUILT_SOURCES += $(top_builddir)/valt_load_address_ppc64_linux.lds
89CLEANFILES += $(top_builddir)/valt_load_address_ppc64_linux.lds
90endif
91if VGCONF_PLATFORMS_INCLUDE_PPC32_AIX5
92# No need to generate $(top_builddir)/valt_load_address*.lds; the final
93# executables can be linked to be at any address. They will be relocated by
94# AIX kernel when they are loaded.
95endif
96if VGCONF_PLATFORMS_INCLUDE_PPC64_AIX5
97# Ditto
98endif
99if VGCONF_OS_IS_DARWIN
100# GrP untested, possibly hopeless
101endif
102
103
104# Generate a linker script for linking the binaries. This is the
105# standard gcc linker script, except hacked so that an alternative
106# load address can be specified by (1) asking gcc to use this script
107# (-Wl,-T,valt_load_address.lds) and (2) setting the symbol
108# valt_load_address to the required value
109# (-Wl,-defsym,valt_load_address=0x70000000).
110#
111# Extract ld's default linker script and hack it to our needs.
112# First we cut everything above and below the "=====..." lines at the top
113# and bottom.
114# Then we have to replace the load address with "valt_load_address".
115# The line to replace in has one of the following two forms:
116#
117# . = 0x08048000 + SIZEOF_HEADERS;
118#
119# or
120# PROVIDE (__executable_start = 0x08048000); . = 0x08048000 + SIZEOF_HEADERS;
121#
122# So we search for the line with a hex value "+ SIZEOF_HEADERS", and replace
123# all the hex values in that line with "valt_load_address".
124$(top_builddir)/valt_load_address_x86_linux.lds: Makefile
125 $(CC) @FLAG_M32@ -Wl,--verbose -nostdlib 2>&1 | sed \
126 -e '1,/^=====\+$$/d' \
127 -e '/^=====\+$$/,/.\*/d' \
128 -e '/\. = \(0x[0-9A-Fa-f]\+\|SEGMENT_START("[^"]\+", 0x[0-9A-Fa-f]\+)\) + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
129 || rm -f $@
130
131$(top_builddir)/valt_load_address_amd64_linux.lds: Makefile
132 $(CC) -m64 -Wl,--verbose -nostdlib 2>&1 | sed \
133 -e '1,/^=====\+$$/d' \
134 -e '/^=====\+$$/,/.\*/d' \
135 -e '/\. = \(0x[0-9A-Fa-f]\+\|SEGMENT_START("[^"]\+", 0x[0-9A-Fa-f]\+)\) + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
136 || rm -f $@
137
138$(top_builddir)/valt_load_address_ppc32_linux.lds: Makefile
139 $(CC) @FLAG_M32@ -Wl,--verbose -nostdlib 2>&1 | sed \
140 -e '1,/^=====\+$$/d' \
141 -e '/^=====\+$$/,/.\*/d' \
142 -e '/\. = \(0x[0-9A-Fa-f]\+\|SEGMENT_START("[^"]\+", 0x[0-9A-Fa-f]\+)\) + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
143 || rm -f $@
144
145$(top_builddir)/valt_load_address_ppc64_linux.lds: Makefile
146 $(CC) -m64 -Wl,--verbose -nostdlib 2>&1 | sed \
147 -e '1,/^=====\+$$/d' \
148 -e '/^=====\+$$/,/.\*/d' \
149 -e '/\. = \(0x[0-9A-Fa-f]\+\|SEGMENT_START("[^"]\+", 0x[0-9A-Fa-f]\+)\) + SIZEOF_HEADERS/s/0x[0-9A-Fa-f]\+/valt_load_address/g' > $@ \
150 || rm -f $@
151
152#----------------------------------------------------------------------------
153# vgpreload_<tool>-<platform>.a stuff
154#----------------------------------------------------------------------------
njnb7fda4c2009-02-06 04:05:43 +0000155
tomfb7bcde2005-11-07 15:24:38 +0000156LIBREPLACEMALLOC_X86_LINUX = \
sewardj4d3f7a42009-02-22 23:40:31 +0000157 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-linux.a
sewardj45f4e7c2005-09-27 19:20:21 +0000158
tomfb7bcde2005-11-07 15:24:38 +0000159LIBREPLACEMALLOC_AMD64_LINUX = \
sewardj4d3f7a42009-02-22 23:40:31 +0000160 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-amd64-linux.a
tomfb7bcde2005-11-07 15:24:38 +0000161
162LIBREPLACEMALLOC_PPC32_LINUX = \
sewardj4d3f7a42009-02-22 23:40:31 +0000163 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc32-linux.a
tomfb7bcde2005-11-07 15:24:38 +0000164
sewardj2c48c7b2005-11-29 13:05:56 +0000165LIBREPLACEMALLOC_PPC64_LINUX = \
sewardj4d3f7a42009-02-22 23:40:31 +0000166 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc64-linux.a
sewardj2c48c7b2005-11-29 13:05:56 +0000167
sewardj1eff82b2006-10-17 00:56:43 +0000168LIBREPLACEMALLOC_PPC32_AIX5 = \
sewardj4d3f7a42009-02-22 23:40:31 +0000169 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc32-aix5.a
sewardj1eff82b2006-10-17 00:56:43 +0000170
171LIBREPLACEMALLOC_PPC64_AIX5 = \
sewardj4d3f7a42009-02-22 23:40:31 +0000172 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc64-aix5.a
sewardj1eff82b2006-10-17 00:56:43 +0000173
njnf76d27a2009-05-28 01:53:07 +0000174LIBREPLACEMALLOC_X86_DARWIN = \
175 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-darwin.a
176
177LIBREPLACEMALLOC_AMD64_DARWIN = \
178 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-amd64-darwin.a
179
njnb7fda4c2009-02-06 04:05:43 +0000180
tomfb7bcde2005-11-07 15:24:38 +0000181LIBREPLACEMALLOC_LDFLAGS_X86_LINUX = \
182 -Wl,--whole-archive \
183 $(LIBREPLACEMALLOC_X86_LINUX) \
184 -Wl,--no-whole-archive
njnb7fda4c2009-02-06 04:05:43 +0000185
tomfb7bcde2005-11-07 15:24:38 +0000186LIBREPLACEMALLOC_LDFLAGS_AMD64_LINUX = \
187 -Wl,--whole-archive \
188 $(LIBREPLACEMALLOC_AMD64_LINUX) \
189 -Wl,--no-whole-archive
njnb7fda4c2009-02-06 04:05:43 +0000190
tomfb7bcde2005-11-07 15:24:38 +0000191LIBREPLACEMALLOC_LDFLAGS_PPC32_LINUX = \
192 -Wl,--whole-archive \
193 $(LIBREPLACEMALLOC_PPC32_LINUX) \
194 -Wl,--no-whole-archive
njnb7fda4c2009-02-06 04:05:43 +0000195
sewardj2c48c7b2005-11-29 13:05:56 +0000196LIBREPLACEMALLOC_LDFLAGS_PPC64_LINUX = \
197 -Wl,--whole-archive \
198 $(LIBREPLACEMALLOC_PPC64_LINUX) \
199 -Wl,--no-whole-archive
njnb7fda4c2009-02-06 04:05:43 +0000200
sewardj1eff82b2006-10-17 00:56:43 +0000201LIBREPLACEMALLOC_LDFLAGS_PPC32_AIX5 = \
202 $(LIBREPLACEMALLOC_PPC32_AIX5)
njnb7fda4c2009-02-06 04:05:43 +0000203
sewardj1eff82b2006-10-17 00:56:43 +0000204LIBREPLACEMALLOC_LDFLAGS_PPC64_AIX5 = \
205 $(LIBREPLACEMALLOC_PPC64_AIX5)
njn3e653402009-02-06 07:12:57 +0000206
njnf76d27a2009-05-28 01:53:07 +0000207LIBREPLACEMALLOC_LDFLAGS_X86_DARWIN = \
208 $(LIBREPLACEMALLOC_X86_DARWIN)
njn3e653402009-02-06 07:12:57 +0000209
njnf76d27a2009-05-28 01:53:07 +0000210LIBREPLACEMALLOC_LDFLAGS_AMD64_DARWIN = \
211 $(LIBREPLACEMALLOC_AMD64_DARWIN)
njnac31b052009-02-12 00:30:02 +0000212
njn8b68b642009-06-24 00:37:09 +0000213#----------------------------------------------------------------------------
214# General stuff
215#----------------------------------------------------------------------------
njnf76d27a2009-05-28 01:53:07 +0000216
217all-local: inplace-noinst_PROGRAMS inplace-noinst_DSYMS
218
219clean-local: clean-noinst_DSYMS
220
221install-exec-local: install-noinst_PROGRAMS install-noinst_DSYMS
njnac31b052009-02-12 00:30:02 +0000222