]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/valgrind/src/valgrind-3.6.0-svn/Makefile.tool.am
786abbe49419455790a26f747adfcde2d5428610
[l4.git] / l4 / pkg / valgrind / src / valgrind-3.6.0-svn / Makefile.tool.am
1
2 SUBDIRS = . tests
3
4 include $(top_srcdir)/Makefile.all.am
5
6 #----------------------------------------------------------------------------
7 # <tool>-<platform> stuff
8 #----------------------------------------------------------------------------
9
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
17 endif
18
19
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)
26 endif
27
28
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
38
39 TOOL_LDFLAGS_X86_LINUX = \
40         $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@ \
41         -Wl,-T,$(top_builddir)/valt_load_address_x86_linux.lds
42
43 TOOL_LDFLAGS_AMD64_LINUX = \
44         $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@ \
45         -Wl,-T,$(top_builddir)/valt_load_address_amd64_linux.lds
46
47 TOOL_LDFLAGS_PPC32_LINUX = \
48         $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@ \
49         -Wl,-T,$(top_builddir)/valt_load_address_ppc32_linux.lds
50
51 TOOL_LDFLAGS_PPC64_LINUX = \
52         $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@ \
53         -Wl,-T,$(top_builddir)/valt_load_address_ppc64_linux.lds
54
55 TOOL_LDFLAGS_ARM_LINUX = \
56         $(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@ \
57         -Wl,-T,$(top_builddir)/valt_load_address_arm_linux.lds
58
59 TOOL_LDFLAGS_PPC32_AIX5 = \
60         $(TOOL_LDFLAGS_COMMON_AIX5) @FLAG_MAIX32@
61
62 TOOL_LDFLAGS_PPC64_AIX5 = \
63         $(TOOL_LDFLAGS_COMMON_AIX5) @FLAG_MAIX64@ -Wl,-bbigtoc
64
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
70
71 TOOL_LDADD_X86_L4RE =   \
72         $(TOOL_DEPENDENCIES_@VGCONF_PLATFORM_PRI_CAPS@) \
73         $(L4_LDFLAGS) $(L4_CRTN) $(TOOL_LDADD_COMMON)
74
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
78
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
86
87
88 BUILT_SOURCES =
89 CLEANFILES =
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
93 endif
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
97 endif
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
101 endif
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
105 endif
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
109 endif
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.
114 endif
115 if VGCONF_PLATFORMS_INCLUDE_PPC64_AIX5
116 # Ditto
117 endif
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
121 endif
122 if VGCONF_OS_IS_DARWIN
123 # GrP untested, possibly hopeless
124 endif
125
126
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).
133 #
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
136 # and bottom.
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:
139 #
140 #   . = 0x08048000 + SIZEOF_HEADERS;
141 #
142 # or
143 #   PROVIDE (__executable_start = 0x08048000); . = 0x08048000 + SIZEOF_HEADERS;
144 #
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' > $@ \
152         || rm -f $@
153
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' > $@ \
159         || rm -f $@
160
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' > $@ \
166         || rm -f $@
167
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' > $@ \
173         || rm -f $@
174
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' > $@ \
180         || rm -f $@
181
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
184
185 #----------------------------------------------------------------------------
186 # vgpreload_<tool>-<platform>.a stuff
187 #----------------------------------------------------------------------------
188
189 LIBREPLACEMALLOC_X86_LINUX = \
190         $(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-linux.a
191
192 LIBREPLACEMALLOC_AMD64_LINUX = \
193         $(top_builddir)/coregrind/libreplacemalloc_toolpreload-amd64-linux.a
194
195 LIBREPLACEMALLOC_PPC32_LINUX = \
196         $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc32-linux.a
197
198 LIBREPLACEMALLOC_PPC64_LINUX = \
199         $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc64-linux.a
200
201 LIBREPLACEMALLOC_ARM_LINUX = \
202         $(top_builddir)/coregrind/libreplacemalloc_toolpreload-arm-linux.a
203
204 LIBREPLACEMALLOC_PPC32_AIX5 = \
205         $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc32-aix5.a
206
207 LIBREPLACEMALLOC_PPC64_AIX5 = \
208         $(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc64-aix5.a
209
210 LIBREPLACEMALLOC_X86_DARWIN = \
211         $(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-darwin.a
212
213 LIBREPLACEMALLOC_AMD64_DARWIN = \
214         $(top_builddir)/coregrind/libreplacemalloc_toolpreload-amd64-darwin.a
215
216 LIBREPLACEMALLOC_X86_L4RE = \
217         $(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-l4re.a
218
219
220 LIBREPLACEMALLOC_LDFLAGS_X86_LINUX = \
221         -Wl,--whole-archive \
222         $(LIBREPLACEMALLOC_X86_LINUX) \
223         -Wl,--no-whole-archive
224
225 LIBREPLACEMALLOC_LDFLAGS_AMD64_LINUX = \
226         -Wl,--whole-archive \
227         $(LIBREPLACEMALLOC_AMD64_LINUX) \
228         -Wl,--no-whole-archive
229
230 LIBREPLACEMALLOC_LDFLAGS_PPC32_LINUX = \
231         -Wl,--whole-archive \
232         $(LIBREPLACEMALLOC_PPC32_LINUX) \
233         -Wl,--no-whole-archive
234
235 LIBREPLACEMALLOC_LDFLAGS_PPC64_LINUX = \
236         -Wl,--whole-archive \
237         $(LIBREPLACEMALLOC_PPC64_LINUX) \
238         -Wl,--no-whole-archive
239
240 LIBREPLACEMALLOC_LDFLAGS_ARM_LINUX = \
241         -Wl,--whole-archive \
242         $(LIBREPLACEMALLOC_ARM_LINUX) \
243         -Wl,--no-whole-archive
244
245 LIBREPLACEMALLOC_LDFLAGS_PPC32_AIX5 = \
246         $(LIBREPLACEMALLOC_PPC32_AIX5)
247
248 LIBREPLACEMALLOC_LDFLAGS_PPC64_AIX5 = \
249         $(LIBREPLACEMALLOC_PPC64_AIX5)
250
251 LIBREPLACEMALLOC_LDFLAGS_X86_DARWIN = \
252         $(LIBREPLACEMALLOC_X86_DARWIN)
253
254 LIBREPLACEMALLOC_LDFLAGS_AMD64_DARWIN = \
255         $(LIBREPLACEMALLOC_AMD64_DARWIN)
256
257 LIBREPLACEMALLOC_LDFLAGS_X86_L4RE = \
258         -Wl,--whole-archive \
259         $(LIBREPLACEMALLOC_X86_L4RE) \
260         -Wl,--no-whole-archive
261
262
263 #----------------------------------------------------------------------------
264 # General stuff
265 #----------------------------------------------------------------------------
266
267 all-local: inplace-noinst_PROGRAMS inplace-noinst_DSYMS
268
269 clean-local: clean-noinst_DSYMS
270
271 install-exec-local: install-noinst_PROGRAMS install-noinst_DSYMS
272