| @@ -1,198 +1,198 @@ | | | @@ -1,198 +1,198 @@ |
1 | # $NetBSD: Makefile,v 1.145 2023/07/30 09:19:10 riastradh Exp $ | | 1 | # $NetBSD: Makefile,v 1.146 2023/07/30 09:19:19 riastradh Exp $ |
2 | # | | 2 | # |
3 | # NOTE: when changing ld.so, ensure that ldd still compiles. | | 3 | # NOTE: when changing ld.so, ensure that ldd still compiles. |
4 | # | | 4 | # |
5 | NOLIBCSANITIZER=# defined | | 5 | NOLIBCSANITIZER=# defined |
6 | NOSANITIZER= # defined | | 6 | NOSANITIZER= # defined |
7 | WARNS?=4 | | 7 | WARNS?=4 |
8 | | | 8 | |
9 | LDELFSO_MACHINE_ARCH?= ${MACHINE_ARCH} | | 9 | LDELFSO_MACHINE_ARCH?= ${MACHINE_ARCH} |
10 | | | 10 | |
11 | # This needs to be before bsd.init.mk | | 11 | # This needs to be before bsd.init.mk |
12 | .if defined(BSD_MK_COMPAT_FILE) | | 12 | .if defined(BSD_MK_COMPAT_FILE) |
13 | .include <${BSD_MK_COMPAT_FILE}> | | 13 | .include <${BSD_MK_COMPAT_FILE}> |
14 | .endif | | 14 | .endif |
15 | | | 15 | |
16 | # We are not building this with PIE | | 16 | # We are not building this with PIE |
17 | PIE_CFLAGS= | | 17 | PIE_CFLAGS= |
18 | PIE_LDFLAGS= | | 18 | PIE_LDFLAGS= |
19 | .include <bsd.init.mk> # for MKPIC definition | | 19 | .include <bsd.init.mk> # for MKPIC definition |
20 | .include <bsd.shlib.mk> # for SHLINKINSTALLDIR definition | | 20 | .include <bsd.shlib.mk> # for SHLINKINSTALLDIR definition |
21 | | | 21 | |
22 | .if defined(LDELFSO_MACHINE_CPU) && !empty(LDELFSO_MACHINE_CPU) && \ | | 22 | .if defined(LDELFSO_MACHINE_CPU) && !empty(LDELFSO_MACHINE_CPU) && \ |
23 | exists(${.CURDIR}/arch/${LDELFSO_MACHINE_CPU}) | | 23 | exists(${.CURDIR}/arch/${LDELFSO_MACHINE_CPU}) |
24 | ARCHSUBDIR= ${LDELFSO_MACHINE_CPU} | | 24 | ARCHSUBDIR= ${LDELFSO_MACHINE_CPU} |
25 | .else | | 25 | .else |
26 | ARCHSUBDIR= ${MACHINE_CPU} | | 26 | ARCHSUBDIR= ${MACHINE_CPU} |
27 | .endif | | 27 | .endif |
28 | M= ${.CURDIR}/arch/${ARCHSUBDIR} | | 28 | M= ${.CURDIR}/arch/${ARCHSUBDIR} |
29 | | | 29 | |
30 | .if ((${MACHINE_CPU} == "aarch64") || \ | | 30 | .if ((${MACHINE_CPU} == "aarch64") || \ |
31 | (${LDELFSO_MACHINE_ARCH} == "alpha") || \ | | 31 | (${LDELFSO_MACHINE_ARCH} == "alpha") || \ |
32 | (${MACHINE_CPU} == "arm") || \ | | 32 | (${MACHINE_CPU} == "arm") || \ |
33 | (${LDELFSO_MACHINE_ARCH} == "coldfire") || \ | | 33 | (${LDELFSO_MACHINE_ARCH} == "coldfire") || \ |
34 | (${LDELFSO_MACHINE_ARCH} == "hppa") || \ | | 34 | (${LDELFSO_MACHINE_ARCH} == "hppa") || \ |
35 | (${LDELFSO_MACHINE_ARCH} == "i386") || \ | | 35 | (${LDELFSO_MACHINE_ARCH} == "i386") || \ |
36 | (${LDELFSO_MACHINE_ARCH} == "m68k") || \ | | 36 | (${LDELFSO_MACHINE_ARCH} == "m68k") || \ |
37 | (${MACHINE_CPU} == "mips") || \ | | 37 | (${MACHINE_CPU} == "mips") || \ |
38 | (${MACHINE_CPU} == "or1k") || \ | | 38 | (${MACHINE_CPU} == "or1k") || \ |
39 | (${MACHINE_CPU} == "powerpc") || \ | | 39 | (${MACHINE_CPU} == "powerpc") || \ |
40 | (${MACHINE_CPU} == "riscv") || \ | | 40 | (${MACHINE_CPU} == "riscv") || \ |
41 | (${MACHINE_CPU} == "sh3") || \ | | 41 | (${MACHINE_CPU} == "sh3") || \ |
42 | (${LDELFSO_MACHINE_ARCH} == "sparc") || \ | | 42 | (${LDELFSO_MACHINE_ARCH} == "sparc") || \ |
43 | (${LDELFSO_MACHINE_ARCH} == "sparc64") || \ | | 43 | (${LDELFSO_MACHINE_ARCH} == "sparc64") || \ |
44 | (${LDELFSO_MACHINE_ARCH} == "x86_64") || \ | | 44 | (${LDELFSO_MACHINE_ARCH} == "x86_64") || \ |
45 | (${LDELFSO_MACHINE_ARCH} == "vax")) && \ | | 45 | (${LDELFSO_MACHINE_ARCH} == "vax")) && \ |
46 | ${MKPIC} != "no" | | 46 | ${MKPIC} != "no" |
47 | | | 47 | |
48 | LDFLAGS+= ${${ACTIVE_CC} == "clang":? -Wl,-Bsymbolic : -symbolic} \ | | 48 | LDFLAGS+= ${${ACTIVE_CC} == "clang":? -Wl,-Bsymbolic : -symbolic} \ |
49 | -shared -nostartfiles -nodefaultlibs | | 49 | -shared -nostartfiles -nodefaultlibs |
50 | LDFLAGS+= -Wl,-static | | 50 | LDFLAGS+= -Wl,-static |
51 | LDFLAGS+= -Wl,--warn-shared-textrel | | 51 | LDFLAGS+= -Wl,--warn-shared-textrel |
52 | LDFLAGS+= -Wl,--no-undefined | | 52 | LDFLAGS+= -Wl,--no-undefined |
53 | LDFLAGS+= -Wl,-Map=${.TARGET}.map | | 53 | LDFLAGS+= -Wl,-Map=${.TARGET}.map |
54 | | | 54 | |
55 | COPTS+= -fvisibility=hidden | | 55 | COPTS+= -fvisibility=hidden |
56 | | | 56 | |
57 | # Adds SRCS, CPPFLAGS, LDFLAGS, etc. Must go first so MD startup source | | 57 | # Adds SRCS, CPPFLAGS, LDFLAGS, etc. Must go first so MD startup source |
58 | # is first. | | 58 | # is first. |
59 | .if exists($M/Makefile.inc) | | 59 | .if exists($M/Makefile.inc) |
60 | .include "$M/Makefile.inc" | | 60 | .include "$M/Makefile.inc" |
61 | .endif | | 61 | .endif |
62 | | | 62 | |
63 | # Support compat ld.elf_so. | | 63 | # Support compat ld.elf_so. |
64 | .if defined(MLIBDIR) | | 64 | .if defined(MLIBDIR) |
65 | PROG= ld.elf_so-${MLIBDIR} | | 65 | PROG= ld.elf_so-${MLIBDIR} |
66 | CPPFLAGS+= -DRTLD_ARCH_SUBDIR=\"${MLIBDIR}\" | | 66 | CPPFLAGS+= -DRTLD_ARCH_SUBDIR=\"${MLIBDIR}\" |
67 | . if ${MLIBDIR} == "o32" | | 67 | . if ${MLIBDIR} == "o32" |
68 | . endif | | 68 | . endif |
69 | .else | | 69 | .else |
70 | PROG= ld.elf_so | | 70 | PROG= ld.elf_so |
71 | .endif | | 71 | .endif |
72 | | | 72 | |
73 | CLIBOBJ!= cd ${NETBSDSRCDIR}/lib/libc && ${PRINTOBJDIR} | | 73 | CLIBOBJ!= cd ${NETBSDSRCDIR}/lib/libc && ${PRINTOBJDIR} |
74 | | | 74 | |
75 | SRCS+= rtld.c | | 75 | SRCS+= compat.c |
76 | SRCS+= reloc.c | | | |
77 | SRCS+= symbol.c | | | |
78 | SRCS+= xmalloc.c | | | |
79 | SRCS+= xprintf.c | | | |
80 | SRCS+= debug.c | | 76 | SRCS+= debug.c |
81 | SRCS+= map_object.c | | 77 | SRCS+= diagassert.c |
82 | SRCS+= load.c | | 78 | SRCS+= expand.c |
83 | SRCS+= search.c | | | |
84 | SRCS+= headers.c | | 79 | SRCS+= headers.c |
| | | 80 | SRCS+= load.c |
| | | 81 | SRCS+= map_object.c |
85 | SRCS+= paths.c | | 82 | SRCS+= paths.c |
86 | SRCS+= expand.c | | 83 | SRCS+= reloc.c |
87 | SRCS+= tls.c | | 84 | SRCS+= rtld.c |
| | | 85 | SRCS+= search.c |
| | | 86 | SRCS+= symbol.c |
88 | SRCS+= symver.c | | 87 | SRCS+= symver.c |
89 | SRCS+= diagassert.c | | 88 | SRCS+= tls.c |
90 | SRCS+= compat.c | | 89 | SRCS+= xmalloc.c |
| | | 90 | SRCS+= xprintf.c |
91 | | | 91 | |
92 | .if ${USE_FORT} == "yes" | | 92 | .if ${USE_FORT} == "yes" |
93 | .PATH.c: ${NETBSDSRCDIR}/lib/libc/misc | | 93 | .PATH.c: ${NETBSDSRCDIR}/lib/libc/misc |
94 | SRCS+= stack_protector.c | | 94 | SRCS+= stack_protector.c |
95 | .endif | | 95 | .endif |
96 | | | 96 | |
97 | .PATH.c: ${NETBSDSRCDIR}/lib/libc/stdlib | | 97 | .PATH.c: ${NETBSDSRCDIR}/lib/libc/stdlib |
98 | SRCS+= exit.c | | 98 | SRCS+= exit.c |
99 | | | 99 | |
100 | errlist_concat.h: ${NETBSDSRCDIR}/lib/libc/gen/errlist.awk ${NETBSDSRCDIR}/sys/sys/errno.h | | 100 | errlist_concat.h: ${NETBSDSRCDIR}/lib/libc/gen/errlist.awk ${NETBSDSRCDIR}/sys/sys/errno.h |
101 | ${TOOL_AWK} -v concat=1 -f ${.ALLSRC} > ${.TARGET}.tmp && \ | | 101 | ${TOOL_AWK} -v concat=1 -f ${.ALLSRC} > ${.TARGET}.tmp && \ |
102 | mv -f ${.TARGET}.tmp ${.TARGET} | | 102 | mv -f ${.TARGET}.tmp ${.TARGET} |
103 | | | 103 | |
104 | xprintf.c: errlist_concat.h | | 104 | xprintf.c: errlist_concat.h |
105 | | | 105 | |
106 | CLEANFILES+= errlist_concat.h ${PROG}.map | | 106 | CLEANFILES+= errlist_concat.h ${PROG}.map |
107 | | | 107 | |
108 | BINDIR= ${SHLINKINSTALLDIR} | | 108 | BINDIR= ${SHLINKINSTALLDIR} |
109 | | | 109 | |
110 | CPPFLAGS.tls.c+= -std=gnu11 | | 110 | CPPFLAGS.tls.c+= -std=gnu11 |
111 | CPPFLAGS+= -DLIBDIR=\"${LIBDIR}\" -D_PATH_RTLD=\"${BINDIR}/${PROG}\" | | 111 | CPPFLAGS+= -DLIBDIR=\"${LIBDIR}\" -D_PATH_RTLD=\"${BINDIR}/${PROG}\" |
112 | CPPFLAGS+= -I${.CURDIR} -I. -D_KERNTYPES | | 112 | CPPFLAGS+= -I${.CURDIR} -I. -D_KERNTYPES |
113 | CPPFLAGS+= -DRTLD_LOADER | | 113 | CPPFLAGS+= -DRTLD_LOADER |
114 | CPPFLAGS+= -DGNU_RELRO | | 114 | CPPFLAGS+= -DGNU_RELRO |
115 | CPPFLAGS+= -D_RTLD_SOURCE | | 115 | CPPFLAGS+= -D_RTLD_SOURCE |
116 | CPPFLAGS+= -DHAVE_INITFINI_ARRAY | | 116 | CPPFLAGS+= -DHAVE_INITFINI_ARRAY |
117 | #CPPFLAGS+= -DDEBUG | | 117 | #CPPFLAGS+= -DDEBUG |
118 | #CPPFLAGS+= -DRTLD_DEBUG | | 118 | #CPPFLAGS+= -DRTLD_DEBUG |
119 | #CPPFLAGS+= -DRTLD_DEBUG_RELOC | | 119 | #CPPFLAGS+= -DRTLD_DEBUG_RELOC |
120 | .if !empty(LDELFSO_MACHINE_ARCH:Mearm*) | | 120 | .if !empty(LDELFSO_MACHINE_ARCH:Mearm*) |
121 | CPPFLAGS+= -I${NETBSDSRCDIR}/lib/libexecinfo | | 121 | CPPFLAGS+= -I${NETBSDSRCDIR}/lib/libexecinfo |
122 | .endif | | 122 | .endif |
123 | #DBG= -g | | 123 | #DBG= -g |
124 | COPTS+= -O3 | | 124 | COPTS+= -O3 |
125 | | | 125 | |
126 | .if ${MACHINE_CPU} != "m68k" && ${MACHINE_CPU} != "sh3" && ${MACHINE_ARCH} != "vax" | | 126 | .if ${MACHINE_CPU} != "m68k" && ${MACHINE_CPU} != "sh3" && ${MACHINE_ARCH} != "vax" |
127 | COPTS+= -fomit-frame-pointer | | 127 | COPTS+= -fomit-frame-pointer |
128 | .endif | | 128 | .endif |
129 | | | 129 | |
130 | .if ${LDELFSO_MACHINE_ARCH} == "i386" || ${LDELFSO_MACHINE_ARCH} == "x86_64" | | 130 | .if ${LDELFSO_MACHINE_ARCH} == "i386" || ${LDELFSO_MACHINE_ARCH} == "x86_64" |
131 | COPTS+= -mno-3dnow -mno-mmx -mno-sse -mno-sse2 -mno-sse3 | | 131 | COPTS+= -mno-3dnow -mno-mmx -mno-sse -mno-sse2 -mno-sse3 |
132 | .endif | | 132 | .endif |
133 | | | 133 | |
134 | | | 134 | |
135 | .if ${SHLIBDIR} != ${LIBDIR} | | 135 | .if ${SHLIBDIR} != ${LIBDIR} |
136 | CPPFLAGS+= -DRTLD_DEFAULT_LIBRARY_PATH=\"${SHLIBDIR}:${LIBDIR}\" | | 136 | CPPFLAGS+= -DRTLD_DEFAULT_LIBRARY_PATH=\"${SHLIBDIR}:${LIBDIR}\" |
137 | .endif | | 137 | .endif |
138 | | | 138 | |
139 | # rtld.c and symbol.c use alloca, so disable SSP warnings. | | 139 | # rtld.c and symbol.c use alloca, so disable SSP warnings. |
140 | COPTS.rtld.c+= -Wno-stack-protector | | 140 | COPTS.rtld.c+= -Wno-stack-protector |
141 | COPTS.symbol.c+=-Wno-stack-protector | | 141 | COPTS.symbol.c+=-Wno-stack-protector |
142 | | | 142 | |
143 | .if ${MACHINE_CPU} == "vax" | | 143 | .if ${MACHINE_CPU} == "vax" |
144 | COPTS.rtld.c+= -O0 | | 144 | COPTS.rtld.c+= -O0 |
145 | .endif | | 145 | .endif |
146 | | | 146 | |
147 | LDADD+= -Wl,--version-script=${.CURDIR}/symbols.map | | 147 | LDADD+= -Wl,--version-script=${.CURDIR}/symbols.map |
148 | LDADD+= -L${CLIBOBJ} -L${DESTDIR}${LIBDIR} | | 148 | LDADD+= -L${CLIBOBJ} -L${DESTDIR}${LIBDIR} |
149 | .if ${MKPICLIB} != "no" | | 149 | .if ${MKPICLIB} != "no" |
150 | LDADD+= -lc_pic | | 150 | LDADD+= -lc_pic |
151 | .if ${MKPICINSTALL} != "no" | | 151 | .if ${MKPICINSTALL} != "no" |
152 | DPADD+= ${LIBC_PIC} | | 152 | DPADD+= ${LIBC_PIC} |
153 | .endif | | 153 | .endif |
154 | DPADD+= ${CLIBOBJ}/libc_pic.a | | 154 | DPADD+= ${CLIBOBJ}/libc_pic.a |
155 | .else | | 155 | .else |
156 | LDADD+= -lc | | 156 | LDADD+= -lc |
157 | DPADD+= ${CLIBOBJ}/libc.a | | 157 | DPADD+= ${CLIBOBJ}/libc.a |
158 | .endif | | 158 | .endif |
159 | | | 159 | |
160 | .if ${MACHINE_CPU} == "hppa" || ${MACHINE_CPU} == "sh3" | | 160 | .if ${MACHINE_CPU} == "hppa" || ${MACHINE_CPU} == "sh3" |
161 | # for $$divU, $$remU etc. (millicode) | | 161 | # for $$divU, $$remU etc. (millicode) |
162 | LDADD+= -lgcc | | 162 | LDADD+= -lgcc |
163 | DPADD+= ${LIBGCC} | | 163 | DPADD+= ${LIBGCC} |
164 | .endif | | 164 | .endif |
165 | | | 165 | |
166 | STRIPFLAG= | | 166 | STRIPFLAG= |
167 | | | 167 | |
168 | .PATH: $M | | 168 | .PATH: $M |
169 | | | 169 | |
170 | | | 170 | |
171 | ${PROG}: ${OBJS} ${DPADD} | | 171 | ${PROG}: ${OBJS} ${DPADD} |
172 | ${_MKMSG_LINK} ${PROG} | | 172 | ${_MKMSG_LINK} ${PROG} |
173 | ${CC} ${LDFLAGS} -o ${PROG} ${OBJS} ${LDADD} | | 173 | ${CC} ${LDFLAGS} -o ${PROG} ${OBJS} ${LDADD} |
174 | .if ${MKDEBUG} != "no" | | 174 | .if ${MKDEBUG} != "no" |
175 | ( ${OBJCOPY} --only-keep-debug ${.TARGET} ${.TARGET}.debug \ | | 175 | ( ${OBJCOPY} --only-keep-debug ${.TARGET} ${.TARGET}.debug \ |
176 | && ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \ | | 176 | && ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \ |
177 | --add-gnu-debuglink=${.TARGET}.debug ${.TARGET} \ | | 177 | --add-gnu-debuglink=${.TARGET}.debug ${.TARGET} \ |
178 | ) || (rm -f ${.TARGET}.debug; false) | | 178 | ) || (rm -f ${.TARGET}.debug; false) |
179 | | | 179 | |
180 | _PROGDEBUG.${PROG} := ${PROG}.debug | | 180 | _PROGDEBUG.${PROG} := ${PROG}.debug |
181 | .endif | | 181 | .endif |
182 | | | 182 | |
183 | | | 183 | |
184 | .if ${SHLINKINSTALLDIR} != "/usr/libexec" | | 184 | .if ${SHLINKINSTALLDIR} != "/usr/libexec" |
185 | SYMLINKS+= ${SHLINKINSTALLDIR}/${PROG} /usr/libexec/${PROG} | | 185 | SYMLINKS+= ${SHLINKINSTALLDIR}/${PROG} /usr/libexec/${PROG} |
186 | .if ${MKDEBUG} != "no" | | 186 | .if ${MKDEBUG} != "no" |
187 | SYMLINKS+= ${DEBUGDIR}${BINDIR}/${PROG}.debug \ | | 187 | SYMLINKS+= ${DEBUGDIR}${BINDIR}/${PROG}.debug \ |
188 | ${DEBUGDIR}/usr${BINDIR}/${PROG}.debug | | 188 | ${DEBUGDIR}/usr${BINDIR}/${PROG}.debug |
189 | .endif | | 189 | .endif |
190 | .endif | | 190 | .endif |
191 | | | 191 | |
192 | .include <bsd.prog.mk> | | 192 | .include <bsd.prog.mk> |
193 | .else | | 193 | .else |
194 | | | 194 | |
195 | MAN= ld.elf_so.1 | | 195 | MAN= ld.elf_so.1 |
196 | | | 196 | |
197 | .include <bsd.man.mk> | | 197 | .include <bsd.man.mk> |
198 | .endif | | 198 | .endif |