4 include $(top_srcdir)/Makefile.all.am
6 #----------------------------------------------------------------------------
7 # <tool>-<platform> stuff
8 #----------------------------------------------------------------------------
10 TOOL_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
13 if VGCONF_HAVE_PLATFORM_SEC
14 TOOL_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
20 TOOL_LDADD_COMMON = -lgcc
21 TOOL_LDADD_@VGCONF_PLATFORM_PRI_CAPS@ = \
22 $(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) $(TOOL_LDADD_COMMON)
23 if VGCONF_HAVE_PLATFORM_SEC
24 TOOL_LDADD_@VGCONF_PLATFORM_SEC_CAPS@ = \
25 $(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_SEC_CAPS@) $(TOOL_LDADD_COMMON)
29 TOOL_LDFLAGS_COMMON_LINUX = -static \
30 -Wl,-defsym,valt_load_address=@VALT_LOAD_ADDRESS@ \
31 -nodefaultlibs -nostartfiles -u _start
32 TOOL_LDFLAGS_COMMON_AIX5 = -static -Wl,-e_start_valgrind
33 TOOL_LDFLAGS_COMMON_DARWIN = -nodefaultlibs -nostartfiles \
34 -Wl,-u,__start -Wl,-e,__start -Wl,-bind_at_load /usr/lib/dyld
35 TOOL_LDFLAGS_COMMON_L4RE = -static \
36 -Wl,-defsym,valt_load_address=@VALT_LOAD_ADDRESS@ -Ttext=@VALT_LOAD_ADDRESS@ \
37 -nodefaultlibs -nostartfiles -u _start
39 TOOL_LDFLAGS_X86_LINUX = \
40 $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@ \
41 -Wl,-T,$(top_builddir)/valt_load_address_x86_linux.lds
43 TOOL_LDFLAGS_AMD64_LINUX = \
44 $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@ \
45 -Wl,-T,$(top_builddir)/valt_load_address_amd64_linux.lds
47 TOOL_LDFLAGS_PPC32_LINUX = \
48 $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@ \
49 -Wl,-T,$(top_builddir)/valt_load_address_ppc32_linux.lds
51 TOOL_LDFLAGS_PPC64_LINUX = \
52 $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@ \
53 -Wl,-T,$(top_builddir)/valt_load_address_ppc64_linux.lds
55 TOOL_LDFLAGS_ARM_LINUX = \
56 $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@ \
57 -Wl,-T,$(top_builddir)/valt_load_address_arm_linux.lds
59 TOOL_LDFLAGS_PPC32_AIX5 = \
60 $(TOOL_LDFLAGS_COMMON_AIX5) @FLAG_MAIX32@
62 TOOL_LDFLAGS_PPC64_AIX5 = \
63 $(TOOL_LDFLAGS_COMMON_AIX5) @FLAG_MAIX64@ -Wl,-bbigtoc
65 TOOL_LDFLAGS_X86_DARWIN = \
66 $(TOOL_LDFLAGS_COMMON_DARWIN) -arch i386 \
67 -Wl,-seg1addr,0xf0080000 \
68 -Wl,-stack_addr,0xf0080000 -Wl,-stack_size,0x80000 \
69 -Wl,-pagezero_size,0xf0000000
71 TOOL_LDADD_X86_L4RE = \
72 $(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) \
73 $(L4_LDFLAGS) $(L4_CRTN) $(TOOL_LDADD_COMMON)
75 TOOL_LDFLAGS_X86_L4RE = \
76 -nostdinc -nostdlib $(L4_CRT0) $(TOOL_LDFLAGS_COMMON_L4RE) @FLAG_M32@ \
77 -Wl,-T,$(top_builddir)/valt_load_address_x86_l4re.lds
79 # pagezero can't be unmapped and remapped. Use stack instead.
80 # GrP fixme no stack guard
81 TOOL_LDFLAGS_AMD64_DARWIN = \
82 $(TOOL_LDFLAGS_COMMON_DARWIN) -arch x86_64 \
83 -Wl,-seg1addr,0x7fff55000000 \
84 -Wl,-stack_addr,0x7fff50080000 -Wl,-stack_size,0x7ffe50080000 \
85 -Wl,-pagezero_size,0x100000000
90 if VGCONF_PLATFORMS_INCLUDE_X86_LINUX
91 BUILT_SOURCES += $(top_builddir)/valt_load_address_x86_linux.lds
92 CLEANFILES += $(top_builddir)/valt_load_address_x86_linux.lds
94 if VGCONF_PLATFORMS_INCLUDE_AMD64_LINUX
95 BUILT_SOURCES += $(top_builddir)/valt_load_address_amd64_linux.lds
96 CLEANFILES += $(top_builddir)/valt_load_address_amd64_linux.lds
98 if VGCONF_PLATFORMS_INCLUDE_PPC32_LINUX
99 BUILT_SOURCES += $(top_builddir)/valt_load_address_ppc32_linux.lds
100 CLEANFILES += $(top_builddir)/valt_load_address_ppc32_linux.lds
102 if VGCONF_PLATFORMS_INCLUDE_PPC64_LINUX
103 BUILT_SOURCES += $(top_builddir)/valt_load_address_ppc64_linux.lds
104 CLEANFILES += $(top_builddir)/valt_load_address_ppc64_linux.lds
106 if VGCONF_PLATFORMS_INCLUDE_ARM_LINUX
107 BUILT_SOURCES += $(top_builddir)/valt_load_address_arm_linux.lds
108 CLEANFILES += $(top_builddir)/valt_load_address_arm_linux.lds
110 if VGCONF_PLATFORMS_INCLUDE_PPC32_AIX5
111 # No need to generate $(top_builddir)/valt_load_address*.lds; the final
112 # executables can be linked to be at any address. They will be relocated by
113 # AIX kernel when they are loaded.
115 if VGCONF_PLATFORMS_INCLUDE_PPC64_AIX5
118 if VGCONF_PLATFORMS_INCLUDE_X86_L4RE
119 BUILT_SOURCES += $(top_builddir)/valt_load_address_x86_l4re.lds
120 CLEANFILES += $(top_builddir)/valt_load_address_x86_l4re.lds
122 if VGCONF_OS_IS_DARWIN
123 # GrP untested, possibly hopeless
127 # Generate a linker script for linking the binaries. This is the
128 # standard gcc linker script, except hacked so that an alternative
129 # load address can be specified by (1) asking gcc to use this script
130 # (-Wl,-T,valt_load_address.lds) and (2) setting the symbol
131 # valt_load_address to the required value
132 # (-Wl,-defsym,valt_load_address=0x70000000).
134 # Extract ld's default linker script and hack it to our needs.
135 # First we cut everything above and below the "=====..." lines at the top
137 # Then we have to replace the load address with "valt_load_address".
138 # The line to replace in has one of the following two forms:
140 # . = 0x08048000 + SIZEOF_HEADERS;
143 # PROVIDE (__executable_start = 0x08048000); . = 0x08048000 + SIZEOF_HEADERS;
145 # So we search for the line with a hex value "+ SIZEOF_HEADERS", and replace
146 # all the hex values in that line with "valt_load_address".
147 $(top_builddir)/valt_load_address_x86_linux.lds: Makefile
148 $(CC) @FLAG_M32@ -Wl,--verbose -nostdlib 2>&1 | sed \
149 -e '1,/^=====\+$$/d' \
150 -e '/^=====\+$$/,/.\*/d' \
151 -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' > $@ \
154 $(top_builddir)/valt_load_address_amd64_linux.lds: Makefile
155 $(CC) -m64 -Wl,--verbose -nostdlib 2>&1 | sed \
156 -e '1,/^=====\+$$/d' \
157 -e '/^=====\+$$/,/.\*/d' \
158 -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' > $@ \
161 $(top_builddir)/valt_load_address_ppc32_linux.lds: Makefile
162 $(CC) @FLAG_M32@ -Wl,--verbose -nostdlib 2>&1 | sed \
163 -e '1,/^=====\+$$/d' \
164 -e '/^=====\+$$/,/.\*/d' \
165 -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' > $@ \
168 $(top_builddir)/valt_load_address_ppc64_linux.lds: Makefile
169 $(CC) -m64 -Wl,--verbose -nostdlib 2>&1 | sed \
170 -e '1,/^=====\+$$/d' \
171 -e '/^=====\+$$/,/.\*/d' \
172 -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' > $@ \
175 $(top_builddir)/valt_load_address_arm_linux.lds: Makefile
176 $(CC) @FLAG_M32@ -Wl,--verbose -nostdlib 2>&1 | sed \
177 -e '1,/^=====\+$$/d' \
178 -e '/^=====\+$$/,/.\*/d' \
179 -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' > $@ \
182 $(top_builddir)/valt_load_address_x86_l4re.lds: Makefile $(L4_LDS_stat_bin)
183 cat $(L4_LDS_stat_bin) > $(top_builddir)/valt_load_address_x86_l4re.lds
185 #----------------------------------------------------------------------------
186 # vgpreload_<tool>-<platform>.a stuff
187 #----------------------------------------------------------------------------
189 LIBREPLACEMALLOC_X86_LINUX = \
190 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-linux.a
192 LIBREPLACEMALLOC_AMD64_LINUX = \
193 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-amd64-linux.a
195 LIBREPLACEMALLOC_PPC32_LINUX = \
196 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc32-linux.a
198 LIBREPLACEMALLOC_PPC64_LINUX = \
199 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc64-linux.a
201 LIBREPLACEMALLOC_ARM_LINUX = \
202 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-arm-linux.a
204 LIBREPLACEMALLOC_PPC32_AIX5 = \
205 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc32-aix5.a
207 LIBREPLACEMALLOC_PPC64_AIX5 = \
208 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc64-aix5.a
210 LIBREPLACEMALLOC_X86_DARWIN = \
211 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-darwin.a
213 LIBREPLACEMALLOC_AMD64_DARWIN = \
214 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-amd64-darwin.a
216 LIBREPLACEMALLOC_X86_L4RE = \
217 $(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-l4re.a
220 LIBREPLACEMALLOC_LDFLAGS_X86_LINUX = \
221 -Wl,--whole-archive \
222 $(LIBREPLACEMALLOC_X86_LINUX) \
223 -Wl,--no-whole-archive
225 LIBREPLACEMALLOC_LDFLAGS_AMD64_LINUX = \
226 -Wl,--whole-archive \
227 $(LIBREPLACEMALLOC_AMD64_LINUX) \
228 -Wl,--no-whole-archive
230 LIBREPLACEMALLOC_LDFLAGS_PPC32_LINUX = \
231 -Wl,--whole-archive \
232 $(LIBREPLACEMALLOC_PPC32_LINUX) \
233 -Wl,--no-whole-archive
235 LIBREPLACEMALLOC_LDFLAGS_PPC64_LINUX = \
236 -Wl,--whole-archive \
237 $(LIBREPLACEMALLOC_PPC64_LINUX) \
238 -Wl,--no-whole-archive
240 LIBREPLACEMALLOC_LDFLAGS_ARM_LINUX = \
241 -Wl,--whole-archive \
242 $(LIBREPLACEMALLOC_ARM_LINUX) \
243 -Wl,--no-whole-archive
245 LIBREPLACEMALLOC_LDFLAGS_PPC32_AIX5 = \
246 $(LIBREPLACEMALLOC_PPC32_AIX5)
248 LIBREPLACEMALLOC_LDFLAGS_PPC64_AIX5 = \
249 $(LIBREPLACEMALLOC_PPC64_AIX5)
251 LIBREPLACEMALLOC_LDFLAGS_X86_DARWIN = \
252 $(LIBREPLACEMALLOC_X86_DARWIN)
254 LIBREPLACEMALLOC_LDFLAGS_AMD64_DARWIN = \
255 $(LIBREPLACEMALLOC_AMD64_DARWIN)
257 LIBREPLACEMALLOC_LDFLAGS_X86_L4RE = \
258 -Wl,--whole-archive \
259 $(LIBREPLACEMALLOC_X86_L4RE) \
260 -Wl,--no-whole-archive
263 #----------------------------------------------------------------------------
265 #----------------------------------------------------------------------------
267 all-local: inplace-noinst_PROGRAMS inplace-noinst_DSYMS
269 clean-local: clean-noinst_DSYMS
271 install-exec-local: install-noinst_PROGRAMS install-noinst_DSYMS