Loading...
  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
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
#
# Mach Operating System
# Copyright (c) 1986 Carnegie-Mellon University
# All rights reserved.  The CMU software License Agreement specifies
# the terms and conditions for use and redistribution.
#

export MakeInc_cmd=${SRCROOT}/makedefs/MakeInc.cmd
export MakeInc_def=${SRCROOT}/makedefs/MakeInc.def
export MakeInc_rule=${SRCROOT}/makedefs/MakeInc.rule
export MakeInc_dir=${SRCROOT}/makedefs/MakeInc.dir

include $(MakeInc_cmd)
include $(MakeInc_def)

#
# XXX: CFLAGS
#
CFLAGS+= -include meta_features.h -DMACH_KERNEL_PRIVATE -DMACH_KERNEL
SFLAGS+= -include meta_features.h

ifeq ($(KSANCOV),1)
# Don't instrument functions called by the ksancov runtime. SanitizeCoverage does
# not support denylists, so exclude the whole file.
machine_routines.o_CFLAGS_RM = $(KCOV_CFLAGS)
machine_routines_common.o_CFLAGS_RM = $(KCOV_CFLAGS)
pcb_native.o_CFLAGS_RM = $(KCOV_CFLAGS)
endif

#
# XXX: INCFLAGS to include libsa prototypes
#
INCFLAGS_MAKEFILE= -I$(SOURCE)libsa

#
# Directories for generated files
#
COMP_SUBDIRS = \
	atm \
	default_pager \
	device \
	kern \
	mach \
	UserNotification \
	gssd \
	kextd \
	lockd

#
#  Make sure we don't remove this by accident if interrupted at the wrong
#  time.
#
.PRECIOUS: Makefile

#
#  Theses macros are filled in by the config program depending on the
#  current configuration.  The MACHDEP macro is replaced by the
#  contents of the machine dependent makefile template and the others
#  are replaced by the corresponding symbol definitions for the
#  configuration.
#

%OBJS

%LIBOBJS

%CFILES

%CXXFILES

%SFILES

%MACHDEP

# Ease debuggability of VM test code as much as possible.
vm_tests.o_CFLAGS_ADD += -g

#
# vm_sanitize/vm_sanitize_error_compat use the UBSan verifier to detect
# potential undefined behavior at compile time. The verifier inspects the
# compiled object files to detect calls to the UBSan minimal runtime.
#
# False positives are possible if checks are generated where UB is not actually
# possible. If possible, code should be re-architected to allow the compiler
# to optimize out the checks; if not __attribute__((nosanitize)) can be used.
#
# As of the time of writing, we enable all checks except the following:
#   `alignment` since it generates checks for calls to os_xyz_overflow()
#   `bool` since it generates checks most times bools are used
#   `function` since it generates checks for any non-trivial usage of function
#		pointers, and there is no way to do runtime type checking to eliminate
# 		these checks.
#   `null` since it generates NULL checks on typically non-null arguments.
#   	Marking these arguments using __attribute__(nonnull) may have an
#		undesired effect of optimizing out explicitly written NULL checks.
#   `unreachable` since it generates a check after each panic()
#   `obj-cast`,`return`,`vptr` since they are not relevant to C code
#
VM_UBSAN_CHECKS = bounds, builtin, enum, float-cast-overflow, \
	float-divide-by-zero, implicit-signed-integer-truncation, \
	implicit-unsigned-integer-truncation, integer-divide-by-zero, \
	nonnull-attribute, nullability-arg, nullability-assign, nullability-return, \
	object-size, pointer-overflow, returns-nonnull-attribute, shift, \
	signed-integer-overflow, unsigned-integer-overflow, unsigned-shift-base, \
	vla-bound
VM_UBSAN_FLAGS = -fsanitize=$(subst ${} ${},,${VM_UBSAN_CHECKS})

#
# KASAN and coverage configurations have different code generation than customer
# release kernels, and are not frequently built at desk like development kernels.
# Build-time UBSan "violations" that affect only these kernels are likely to be
# false positives and have no real-world security impact regardless.
#
ifeq ($(KASAN),1)
# UBSan build-time validations disabled on KASAN builds
else ifeq ($(BUILD_CODE_COVERAGE),1)
# UBSan build-time validations disabled on code coverage builds
else
	vm_sanitize.o_CFLAGS_ADD += ${VM_UBSAN_FLAGS}
	vm_sanitize.o_VERIFIER = VERIFIER_NO_UBSAN_CHECKS
	vm_sanitize_error_compat.o_CFLAGS_ADD += ${VM_UBSAN_FLAGS}
	vm_sanitize_error_compat.o_VERIFIER = VERIFIER_NO_UBSAN_CHECKS
endif

cccbc.o_INCFLAGS += -I${SRCROOT}/EXTERNAL_HEADERS/corecrypto
ccdrbg.o_INCFLAGS += -I${SRCROOT}/EXTERNAL_HEADERS/corecrypto
ccgcm.o_INCFLAGS += -I${SRCROOT}/EXTERNAL_HEADERS/corecrypto
ccmode_gcm_gf_mult.o_INCFLAGS += -I${SRCROOT}/EXTERNAL_HEADERS/corecrypto
ccmode_gcm_mult_h.o_INCFLAGS += -I${SRCROOT}/EXTERNAL_HEADERS/corecrypto

#
# Enforce semantic types
#

SEMANTIC_TYPES_SRC = $(notdir $(wildcard ${SRCROOT}/osfmk/vm/*.c))
SEMANTIC_TYPES_OBJ = $(SEMANTIC_TYPES_SRC:.c=.o)

define FORCE_UNSAFE_TYPES
$1_CFLAGS_ADD += -DVM_UNSAFE_TYPES
endef

$(foreach file,$(SEMANTIC_TYPES_OBJ),$(eval $(call FORCE_UNSAFE_TYPES, $(file))))

#
# Diagnostic opt-outs.  We need to make this list empty.
#
# DO NOT ADD MORE HERE.
#
# -Wno-format-nonliteral
ktest_emit.o_CWARNFLAGS_ADD += -Wno-format-nonliteral
# -Wno-atomic-implicit-seq-cst
mp.o_CWARNFLAGS_ADD += -Wno-atomic-implicit-seq-cst
pmCPU.o_CWARNFLAGS_ADD += -Wno-atomic-implicit-seq-cst
pmap_pcid.o_CWARNFLAGS_ADD += -Wno-atomic-implicit-seq-cst
xcpm_dvfs.o_CWARNFLAGS_ADD += -Wno-atomic-implicit-seq-cst
xcpm_fi.o_CWARNFLAGS_ADD += -Wno-atomic-implicit-seq-cst
xcpm_idle.o_CWARNFLAGS_ADD += -Wno-atomic-implicit-seq-cst
# -Wno-cast-align
bsd_i386.o_CWARNFLAGS_ADD += -Wno-cast-align
ccdigest_final_64be.o_CWARNFLAGS_ADD += -Wno-cast-align
ccsha512_ltc_compress.o_CWARNFLAGS_ADD += -Wno-cast-align
ccdigest_init.o_CWARNFLAGS_ADD += -Wno-cast-align
ccdigest_update.o_CWARNFLAGS_ADD += -Wno-cast-align
cchmac_final.o_CWARNFLAGS_ADD += -Wno-cast-align
cchmac_init.o_CWARNFLAGS_ADD += -Wno-cast-align
ccmode_gcm_gf_mult.o_CWARNFLAGS_ADD += -Wno-cast-align
ccmode_gcm_mult_h.o_CWARNFLAGS_ADD += -Wno-cast-align
commpage.o_CWARNFLAGS_ADD += -Wno-cast-align
cpu_threads.o_CWARNFLAGS_ADD += -Wno-cast-align
host.o_CWARNFLAGS_ADD += -Wno-cast-align
kdp_machdep.o_CWARNFLAGS_ADD += -Wno-cast-align
kdp_udp.o_CWARNFLAGS_ADD += -Wno-cast-align
kdp_x86_common.o_CWARNFLAGS_ADD += -Wno-cast-align
locks_i386.o_CWARNFLAGS_ADD += -Wno-cast-align
machine_task.o_CWARNFLAGS_ADD += -Wno-cast-align
model_dep.o_CWARNFLAGS_ADD += -Wno-cast-align
mp_desc.o_CWARNFLAGS_ADD += -Wno-cast-align
pcb.o_CWARNFLAGS_ADD += -Wno-cast-align
pcb_native.o_CWARNFLAGS_ADD += -Wno-cast-align
processor.o_CWARNFLAGS_ADD += -Wno-cast-align
status.o_CWARNFLAGS_ADD += -Wno-cast-align
task.o_CWARNFLAGS_ADD += -Wno-cast-align
task_policy.o_CWARNFLAGS_ADD += -Wno-cast-align
video_console.o_CWARNFLAGS_ADD += -Wno-cast-align
# -Wno-implicit-int-conversion
acpi.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
commpage.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
cpu.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
cpu_threads.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
kdebug_trigger.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
kern_stackshot.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
lapic_native.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
loose_ends.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
lz4.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
model_dep.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
mp.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
mp_desc.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
pcb.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
pcb_native.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
pmap_pcid.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
pmap_x86_common.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
sched_clutch.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
trap.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
uat.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
video_console.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
xcpm_dvfs.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
xcpm_ioctl.o_CWARNFLAGS_ADD += -Wno-implicit-int-conversion
# -Wno-shorten-64-to-32
arm_vm_init.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
backtrace.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
btlog.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
caches.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
callstack.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
clock.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
clock_oldops.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
iokit_rpc.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
ipc_kmsg.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
ipc_pset.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
ipc_right.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
kdp_core.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
kdp_vm.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
kern_cdata.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
kern_stackshot.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
loose_ends.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
mach_msg.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
machine_routines.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
mk_timer.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
model_dep.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
pcb.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
pmap.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
processor_core.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
rtclock.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
status.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
telemetry.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
vm_init.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
vm_kern.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
vm_object.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
vm_shared_region_pager.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
vm_dyld_pager.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
vm_swapfile_pager.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
vm_user.o_CWARNFLAGS_ADD += -Wno-shorten-64-to-32
# -Wno-sign-conversion
Diagnostics.o_CWARNFLAGS_ADD += -Wno-sign-conversion
acpi.o_CWARNFLAGS_ADD += -Wno-sign-conversion
action.o_CWARNFLAGS_ADD += -Wno-sign-conversion
affinity.o_CWARNFLAGS_ADD += -Wno-sign-conversion
alternate_debugger.o_CWARNFLAGS_ADD += -Wno-sign-conversion
arcade.o_CWARNFLAGS_ADD += -Wno-sign-conversion
arm_init.o_CWARNFLAGS_ADD += -Wno-sign-conversion
arm_timer.o_CWARNFLAGS_ADD += -Wno-sign-conversion
arm_vm_init.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ast.o_CWARNFLAGS_ADD += -Wno-sign-conversion
backtrace.o_CWARNFLAGS_ADD += -Wno-sign-conversion
bank.o_CWARNFLAGS_ADD += -Wno-sign-conversion
bitmap_test.o_CWARNFLAGS_ADD += -Wno-sign-conversion
bsd_arm64.o_CWARNFLAGS_ADD += -Wno-sign-conversion
bsd_i386.o_CWARNFLAGS_ADD += -Wno-sign-conversion
bsd_i386_native.o_CWARNFLAGS_ADD += -Wno-sign-conversion
bsd_kern.o_CWARNFLAGS_ADD += -Wno-sign-conversion
bsd_vm.o_CWARNFLAGS_ADD += -Wno-sign-conversion
btlog.o_CWARNFLAGS_ADD += -Wno-sign-conversion
caches.o_CWARNFLAGS_ADD += -Wno-sign-conversion
callstack.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ccdrbg_nisthmac.o_CWARNFLAGS_ADD += -Wno-sign-conversion
cchmac.o_CWARNFLAGS_ADD += -Wno-sign-conversion
cchmac_final.o_CWARNFLAGS_ADD += -Wno-sign-conversion
cchmac_init.o_CWARNFLAGS_ADD += -Wno-sign-conversion
clock.o_CWARNFLAGS_ADD += -Wno-sign-conversion
clock_oldops.o_CWARNFLAGS_ADD += -Wno-sign-conversion
coalition.o_CWARNFLAGS_ADD += -Wno-sign-conversion
commpage.o_CWARNFLAGS_ADD += -Wno-sign-conversion
copyio.o_CWARNFLAGS_ADD += -Wno-sign-conversion
corpse.o_CWARNFLAGS_ADD += -Wno-sign-conversion
cpu.o_CWARNFLAGS_ADD += -Wno-sign-conversion
cpu_common.o_CWARNFLAGS_ADD += -Wno-sign-conversion
cpu_threads.o_CWARNFLAGS_ADD += -Wno-sign-conversion
cpu_topology.o_CWARNFLAGS_ADD += -Wno-sign-conversion
cpuid.o_CWARNFLAGS_ADD += -Wno-sign-conversion
dbgwrap.o_CWARNFLAGS_ADD += -Wno-sign-conversion
debug.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ecc_logging.o_CWARNFLAGS_ADD += -Wno-sign-conversion
entropy.o_CWARNFLAGS_ADD += -Wno-sign-conversion
exception.o_CWARNFLAGS_ADD += -Wno-sign-conversion
fpu.o_CWARNFLAGS_ADD += -Wno-sign-conversion
host.o_CWARNFLAGS_ADD += -Wno-sign-conversion
host_notify.o_CWARNFLAGS_ADD += -Wno-sign-conversion
hv.o_CWARNFLAGS_ADD += -Wno-sign-conversion
i386_init.o_CWARNFLAGS_ADD += -Wno-sign-conversion
i386_timer.o_CWARNFLAGS_ADD += -Wno-sign-conversion
i386_vm_init.o_CWARNFLAGS_ADD += -Wno-sign-conversion
iokit_rpc.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ipc_eventlink.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ipc_host.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ipc_importance.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ipc_init.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ipc_kmsg.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ipc_kobject.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ipc_mqueue.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ipc_object.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ipc_port.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ipc_pset.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ipc_right.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ipc_space.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ipc_tt.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ipc_voucher.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kalloc.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kdp.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kdp_core.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kdp_machdep.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kdp_serial.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kdp_vm.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kern_stackshot.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kernel_tests.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kext_alloc.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kpc.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kpc_arm.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kpc_common.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kpc_x86.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kperf.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kperf_kpc.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kperf_mp.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kperf_timer.o_CWARNFLAGS_ADD += -Wno-sign-conversion
kperfbsd.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ktest_emit.o_CWARNFLAGS_ADD += -Wno-sign-conversion
lapic_native.o_CWARNFLAGS_ADD += -Wno-sign-conversion
lazy.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ledger.o_CWARNFLAGS_ADD += -Wno-sign-conversion
lockdown_mode.o_CWARNFLAGS_ADD += -Wno-sign-conversion
locks.o_CWARNFLAGS_ADD += -Wno-sign-conversion
locks_arm.o_CWARNFLAGS_ADD += -Wno-sign-conversion
locks_i386.o_CWARNFLAGS_ADD += -Wno-sign-conversion
locks_i386_opt.o_CWARNFLAGS_ADD += -Wno-sign-conversion
loose_ends.o_CWARNFLAGS_ADD += -Wno-sign-conversion
lowmem_vectors.o_CWARNFLAGS_ADD += -Wno-sign-conversion
lz4.o_CWARNFLAGS_ADD += -Wno-sign-conversion
mach_debug.o_CWARNFLAGS_ADD += -Wno-sign-conversion
mach_kernelrpc.o_CWARNFLAGS_ADD += -Wno-sign-conversion
mach_port.o_CWARNFLAGS_ADD += -Wno-sign-conversion
machdep_call.o_CWARNFLAGS_ADD += -Wno-sign-conversion
machine.o_CWARNFLAGS_ADD += -Wno-sign-conversion
machine_check.o_CWARNFLAGS_ADD += -Wno-sign-conversion
machine_remote_time.o_CWARNFLAGS_ADD += -Wno-sign-conversion
machine_routines.o_CWARNFLAGS_ADD += -Wno-sign-conversion
machine_routines_common.o_CWARNFLAGS_ADD += -Wno-sign-conversion
machine_task.o_CWARNFLAGS_ADD += -Wno-sign-conversion
meminfo.o_CWARNFLAGS_ADD += -Wno-sign-conversion
memory_object.o_CWARNFLAGS_ADD += -Wno-sign-conversion
mk_sp.o_CWARNFLAGS_ADD += -Wno-sign-conversion
mk_timer.o_CWARNFLAGS_ADD += -Wno-sign-conversion
model_dep.o_CWARNFLAGS_ADD += -Wno-sign-conversion
mp.o_CWARNFLAGS_ADD += -Wno-sign-conversion
mp_desc.o_CWARNFLAGS_ADD += -Wno-sign-conversion
mp_native.o_CWARNFLAGS_ADD += -Wno-sign-conversion
mpsc_queue.o_CWARNFLAGS_ADD += -Wno-sign-conversion
mtrr.o_CWARNFLAGS_ADD += -Wno-sign-conversion
pal_routines.o_CWARNFLAGS_ADD += -Wno-sign-conversion
pcb.o_CWARNFLAGS_ADD += -Wno-sign-conversion
pcb_native.o_CWARNFLAGS_ADD += -Wno-sign-conversion
pet.o_CWARNFLAGS_ADD += -Wno-sign-conversion
platform_tests.o_CWARNFLAGS_ADD += -Wno-sign-conversion
pmCPU.o_CWARNFLAGS_ADD += -Wno-sign-conversion
pmap.o_CWARNFLAGS_ADD += -Wno-sign-conversion
pmap_common.o_CWARNFLAGS_ADD += -Wno-sign-conversion
pmap_pcid.o_CWARNFLAGS_ADD += -Wno-sign-conversion
pmap_tests.o_CWARNFLAGS_ADD += -Wno-sign-conversion
pmap_x86_common.o_CWARNFLAGS_ADD += -Wno-sign-conversion
printf.o_CWARNFLAGS_ADD += -Wno-sign-conversion
priority.o_CWARNFLAGS_ADD += -Wno-sign-conversion
prng_random.o_CWARNFLAGS_ADD += -Wno-sign-conversion
processor.o_CWARNFLAGS_ADD += -Wno-sign-conversion
remote_time.o_CWARNFLAGS_ADD += -Wno-sign-conversion
rtclock.o_CWARNFLAGS_ADD += -Wno-sign-conversion
sart.o_CWARNFLAGS_ADD += -Wno-sign-conversion
sched_amp.o_CWARNFLAGS_ADD += -Wno-sign-conversion
sched_amp_common.o_CWARNFLAGS_ADD += -Wno-sign-conversion
sched_average.o_CWARNFLAGS_ADD += -Wno-sign-conversion
sched_clutch.o_CWARNFLAGS_ADD += -Wno-sign-conversion
sched_dualq.o_CWARNFLAGS_ADD += -Wno-sign-conversion
sched_prim.o_CWARNFLAGS_ADD += -Wno-sign-conversion
serial_console.o_CWARNFLAGS_ADD += -Wno-sign-conversion
serial_general.o_CWARNFLAGS_ADD += -Wno-sign-conversion
sfi.o_CWARNFLAGS_ADD += -Wno-sign-conversion
shart.o_CWARNFLAGS_ADD += -Wno-sign-conversion
sleh.o_CWARNFLAGS_ADD += -Wno-sign-conversion
stack.o_CWARNFLAGS_ADD += -Wno-sign-conversion
startup.o_CWARNFLAGS_ADD += -Wno-sign-conversion
status.o_CWARNFLAGS_ADD += -Wno-sign-conversion
status_shared.o_CWARNFLAGS_ADD += -Wno-sign-conversion
subrs.o_CWARNFLAGS_ADD += -Wno-sign-conversion
sync_sema.o_CWARNFLAGS_ADD += -Wno-sign-conversion
syscall_subr.o_CWARNFLAGS_ADD += -Wno-sign-conversion
t8020dart.o_CWARNFLAGS_ADD += -Wno-sign-conversion
task.o_CWARNFLAGS_ADD += -Wno-sign-conversion
task_policy.o_CWARNFLAGS_ADD += -Wno-sign-conversion
telemetry.o_CWARNFLAGS_ADD += -Wno-sign-conversion
test_lock.o_CWARNFLAGS_ADD += -Wno-sign-conversion
test_thread_call.o_CWARNFLAGS_ADD += -Wno-sign-conversion
thread_call.o_CWARNFLAGS_ADD += -Wno-sign-conversion
thread_group.o_CWARNFLAGS_ADD += -Wno-sign-conversion
thread_policy.o_CWARNFLAGS_ADD += -Wno-sign-conversion
timer_call.o_CWARNFLAGS_ADD += -Wno-sign-conversion
trap.o_CWARNFLAGS_ADD += -Wno-sign-conversion
trustcache.o_CWARNFLAGS_ADD += -Wno-sign-conversion
turnstile.o_CWARNFLAGS_ADD += -Wno-sign-conversion
uat.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ucode.o_CWARNFLAGS_ADD += -Wno-sign-conversion
ux_handler.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vfp_state_test.o_CWARNFLAGS_ADD += -Wno-sign-conversion
video_console.o_CWARNFLAGS_ADD += -Wno-sign-conversion
video_scroll.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vm32_user.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vm_compressor.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vm_compressor_algorithms.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vm_compressor_backing_store.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vm_compressor_pager.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vm_fault.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vm_kern.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vm_map.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vm_object.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vm_pageout.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vm_phantom_cache.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vm_purgeable.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vm_resident.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vm_shared_region.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vm_user.o_CWARNFLAGS_ADD += -Wno-sign-conversion
vmx_cpu.o_CWARNFLAGS_ADD += -Wno-sign-conversion
waitq.o_CWARNFLAGS_ADD += -Wno-sign-conversion
work_interval.o_CWARNFLAGS_ADD += -Wno-sign-conversion
xcpm_dvfs.o_CWARNFLAGS_ADD += -Wno-sign-conversion
xcpm_fi.o_CWARNFLAGS_ADD += -Wno-sign-conversion
xcpm_idle.o_CWARNFLAGS_ADD += -Wno-sign-conversion
xcpm_ioctl.o_CWARNFLAGS_ADD += -Wno-sign-conversion
# -Wno-xnu-typed-allocators
kalloc.o_CWARNFLAGS_ADD += -Wno-xnu-typed-allocators
exclaves_conclave_launcher.tightbeam.o_CWARNFLAGS_ADD += -Wno-unused-parameter
# -Wno-vla
exclaves_boot.o_CWARNFLAGS_ADD += -Wno-vla
exclaves_xnuproxy.o_CWARNFLAGS_ADD += -Wno-vla
machine.o_CWARNFLAGS_ADD += -Wno-vla
pmap.o_CWARNFLAGS_ADD += -Wno-vla
ppl_hib.o_CWARNFLAGS_ADD += -Wno-vla
processor_core.o_CWARNFLAGS_ADD += -Wno-vla
sleh.o_CWARNFLAGS_ADD += -Wno-vla
vm_reclaim.o_CWARNFLAGS_ADD += -Wno-vla
# -Wno-enum-compare
exclaves_memory.o_CWARNFLAGS_ADD += -Wno-enum-compare
lock_mtx.o_CWARNFLAGS_ADD += -Wno-enum-compare
pmap.o_CWARNFLAGS_ADD += -Wno-enum-compare

# Rebuild if per-file overrides change
${OBJS}: $(firstword $(MAKEFILE_LIST))

# Rebuild if global compile flags change
$(COBJS): .CFLAGS
.CFLAGS: ALWAYS
	$(_v)$(REPLACECONTENTS) $@ $(KCC) $(CFLAGS) $(INCFLAGS)
$(CXXOBJS): .CXXFLAGS
.CXXFLAGS: ALWAYS
	$(_v)$(REPLACECONTENTS) $@ $(KC++) $(CXXFLAGS) $(INCFLAGS)
$(SOBJS): .SFLAGS
.SFLAGS: ALWAYS
	$(_v)$(REPLACECONTENTS) $@ $(S_KCC) $(SFLAGS) $(INCFLAGS)

$(COMPONENT).filelist: $(OBJS)
	$(_v)for hib_file in ${HIB_FILES};		\
	do	\
                $(SEG_HACK) -n __HIB -o $${hib_file}__ $${hib_file} || exit 1; \
                mv $${hib_file}__ $${hib_file} || exit 1; \
	done
	@$(LOG_LDFILELIST) "$(COMPONENT)"
	$(_v)for obj in ${OBJS}; do	\
		 $(ECHO) $(TARGET)/$(CURRENT_KERNEL_CONFIG)/$${obj}; \
	done > $(COMPONENT).filelist

ifeq ($(XNU_LibAllFiles),1)
LIBOBJS := $(OBJS)
endif

$(COMPONENT).libfilelist: $(LIBOBJS)
	@$(LOG_LDFILELIST) "lib$(COMPONENT)"
	$(_v)for obj in ${LIBOBJS}; do	\
		 $(ECHO) $(TARGET)/$(CURRENT_KERNEL_CONFIG)/$${obj}; \
	done > $(COMPONENT).libfilelist

ifeq ($(RC_ProjectName),xnu_libraries)
do_all: $(COMPONENT).libfilelist
else
do_all: $(COMPONENT).filelist
endif

do_build_all:: do_all

# genassym.o actually is an assembly file,
# we name it genassym.o to help with the automatic
# dependency generation

GENASSYM_LOCATION = $(CURRENT_ARCH_CONFIG_LC)

ifeq ($(CURRENT_ARCH_CONFIG_LC),x86_64)
GENASSYM_LOCATION = i386
else ifeq ($(CURRENT_ARCH_CONFIG_LC),x86_64h)
GENASSYM_LOCATION = i386
endif

-include genassym.d
genassym.o: .CFLAGS $(firstword $(MAKEFILE_LIST))
genassym.o: $(SOURCE_DIR)/$(COMPONENT)/$(GENASSYM_LOCATION)/genassym.c
	@$(LOG_GENASSYM) "$<"
	$(_v)${GENASSYM_KCC} ${CFLAGS} ${CFLAGS_NOLTO_FLAG} -fno-integrated-as -MD -S -o ${@} ${INCFLAGS} $<

assym.s: genassym.o
	$(_v)sed -e '/^[[:space:]]*DEFINITION__define__/!d;{N;s/\n//;}' -e 's/^[[:space:]]*DEFINITION__define__\([^:]*\):.*ascii.*\"[\$$]*\([-0-9\#]*\)\".*$$/#define \1 \2/' -e 'p'  -e 's/#//2' -e 's/^[[:space:]]*#define \([A-Za-z0-9_]*\)[[:space:]]*[\$$#]*\([-0-9]*\).*$$/#define \1_NUM \2/' genassym.o > $@

${SOBJS}: assym.s

%RULES

include $(MakeInc_rule)
include $(MakeInc_dir)