Print this page
7029 want per-process exploit mitigation features (secflags)
7030 want basic address space layout randomization (aslr)
7031 noexec_user_stack should be a secflag
7032 want a means to forbid mappings around NULL.
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/uts/common/sys/Makefile
+++ new/usr/src/uts/common/sys/Makefile
1 1 #
2 2 # CDDL HEADER START
3 3 #
4 4 # The contents of this file are subject to the terms of the
5 5 # Common Development and Distribution License (the "License").
6 6 # You may not use this file except in compliance with the License.
7 7 #
8 8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 # or http://www.opensolaris.org/os/licensing.
10 10 # See the License for the specific language governing permissions
11 11 # and limitations under the License.
12 12 #
13 13 # When distributing Covered Code, include this CDDL HEADER in each
14 14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 15 # If applicable, add the following below this CDDL HEADER, with the
16 16 # fields enclosed by brackets "[]" replaced with your own identifying
17 17 # information: Portions Copyright [yyyy] [name of copyright owner]
18 18 #
19 19 # CDDL HEADER END
20 20 #
21 21
22 22 #
23 23 # Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
24 24 # Copyright 2014, Joyent, Inc. All rights reserved.
25 25 # Copyright 2013 Garrett D'Amore <garrett@damore.org>
26 26 # Copyright 2013 Saso Kiselkov. All rights reserved.
27 27 # Copyright 2015 Igor Kozhukhov <ikozhukhov@gmail.com>
28 28 # Copyright 2016 Nexenta Systems, Inc.
29 29 #
30 30
31 31 include $(SRC)/uts/Makefile.uts
32 32
33 33 FILEMODE=644
34 34
35 35 #
36 36 # Note that the following headers are present in the kernel but
37 37 # neither installed or shipped as part of the product:
38 38 # cpuid_drv.h: Private interface for cpuid consumers
39 39 # unix_bb_info.h: Private interface to kcov
40 40 #
41 41
42 42 i386_HDRS= \
43 43 agp/agpamd64gart_io.h \
44 44 agp/agpdefs.h \
45 45 agp/agpgart_impl.h \
46 46 agp/agpmaster_io.h \
47 47 agp/agptarget_io.h \
48 48 agpgart.h \
49 49 asy.h \
50 50 fd_debug.h \
51 51 fdc.h \
52 52 fdmedia.h \
53 53 mouse.h \
54 54 ucode.h
55 55
56 56 sparc_HDRS= \
57 57 mouse.h \
58 58 scsi/targets/ssddef.h \
59 59 $(MDESCHDRS)
60 60
61 61 # Generated headers
62 62 GENHDRS= \
63 63 priv_const.h \
64 64 priv_names.h \
65 65 usb/usbdevs.h
66 66
67 67 CHKHDRS= \
68 68 acpi_drv.h \
69 69 acct.h \
70 70 acctctl.h \
71 71 acl.h \
72 72 acl_impl.h \
73 73 aggr.h \
74 74 aggr_impl.h \
75 75 aio.h \
76 76 aio_impl.h \
77 77 aio_req.h \
78 78 aiocb.h \
79 79 ascii.h \
80 80 asynch.h \
81 81 atomic.h \
82 82 attr.h \
83 83 audio.h \
84 84 audioio.h \
85 85 autoconf.h \
86 86 auxv.h \
87 87 auxv_386.h \
88 88 auxv_SPARC.h \
89 89 avl.h \
90 90 avl_impl.h \
91 91 bitmap.h \
92 92 bitset.h \
93 93 bl.h \
94 94 blkdev.h \
95 95 bofi.h \
96 96 bofi_impl.h \
97 97 bpp_io.h \
98 98 bootstat.h \
99 99 brand.h \
100 100 buf.h \
101 101 bufmod.h \
102 102 bustypes.h \
103 103 byteorder.h \
104 104 callb.h \
105 105 callo.h \
106 106 cap_util.h \
107 107 cpucaps.h \
108 108 cpucaps_impl.h \
109 109 ccompile.h \
110 110 cdio.h \
111 111 cladm.h \
112 112 class.h \
113 113 clconf.h \
114 114 clock_impl.h \
115 115 cmlb.h \
116 116 cmn_err.h \
117 117 compress.h \
118 118 condvar.h \
119 119 condvar_impl.h \
120 120 conf.h \
121 121 consdev.h \
122 122 console.h \
123 123 consplat.h \
124 124 vt.h \
125 125 vtdaemon.h \
126 126 kd.h \
127 127 contract.h \
128 128 contract_impl.h \
129 129 copyops.h \
130 130 core.h \
131 131 corectl.h \
132 132 cpc_impl.h \
133 133 cpc_pcbe.h \
134 134 cpr.h \
135 135 cpupart.h \
136 136 cpuvar.h \
137 137 crc32.h \
138 138 cred.h \
139 139 cred_impl.h \
140 140 crtctl.h \
141 141 cryptmod.h \
142 142 csiioctl.h \
143 143 ctf.h \
144 144 ctfs.h \
145 145 ctfs_impl.h \
146 146 ctf_api.h \
147 147 ctype.h \
148 148 cyclic.h \
149 149 cyclic_impl.h \
150 150 dacf.h \
151 151 dacf_impl.h \
152 152 damap.h \
153 153 damap_impl.h \
154 154 dc_ki.h \
155 155 ddi.h \
156 156 ddifm.h \
157 157 ddifm_impl.h \
158 158 ddi_hp.h \
159 159 ddi_hp_impl.h \
160 160 ddi_intr.h \
161 161 ddi_intr_impl.h \
162 162 ddi_impldefs.h \
163 163 ddi_implfuncs.h \
164 164 ddi_obsolete.h \
165 165 ddi_periodic.h \
166 166 ddidevmap.h \
167 167 ddidmareq.h \
168 168 ddimapreq.h \
169 169 ddipropdefs.h \
170 170 dditypes.h \
171 171 debug.h \
172 172 des.h \
173 173 devctl.h \
174 174 devcache.h \
175 175 devcache_impl.h \
176 176 devfm.h \
177 177 devid_cache.h \
178 178 devinfo_impl.h \
179 179 devops.h \
180 180 devpolicy.h \
181 181 devpoll.h \
182 182 dirent.h \
183 183 disp.h \
184 184 dkbad.h \
185 185 dkio.h \
186 186 dklabel.h \
187 187 dl.h \
188 188 dlpi.h \
189 189 dld.h \
190 190 dld_impl.h \
191 191 dld_ioc.h \
192 192 dls.h \
193 193 dls_mgmt.h \
194 194 dls_impl.h \
195 195 dma_i8237A.h \
196 196 dnlc.h \
197 197 door.h \
198 198 door_data.h \
199 199 door_impl.h \
200 200 dtrace.h \
201 201 dtrace_impl.h \
202 202 dumpadm.h \
203 203 dumphdr.h \
204 204 ecppsys.h \
205 205 ecppio.h \
206 206 ecppreg.h \
207 207 ecppvar.h \
208 208 edonr.h \
209 209 efi_partition.h \
210 210 elf.h \
211 211 elf_386.h \
212 212 elf_SPARC.h \
213 213 elf_notes.h \
214 214 elf_amd64.h \
215 215 elftypes.h \
216 216 emul64.h \
217 217 emul64cmd.h \
218 218 emul64var.h \
219 219 epm.h \
220 220 epoll.h \
221 221 errno.h \
222 222 errorq.h \
223 223 errorq_impl.h \
224 224 esunddi.h \
225 225 ethernet.h \
226 226 euc.h \
227 227 eucioctl.h \
228 228 eventfd.h \
229 229 exacct.h \
230 230 exacct_catalog.h \
231 231 exacct_impl.h \
232 232 exec.h \
233 233 exechdr.h \
234 234 extdirent.h \
235 235 fault.h \
236 236 fasttrap.h \
237 237 fasttrap_impl.h \
238 238 fbio.h \
239 239 fbuf.h \
240 240 fcntl.h \
241 241 fct.h \
242 242 fct_defines.h \
243 243 fctio.h \
244 244 fdbuffer.h \
245 245 fdio.h \
246 246 feature_tests.h \
247 247 fem.h \
248 248 file.h \
249 249 filio.h \
250 250 flock.h \
251 251 flock_impl.h \
252 252 fork.h \
253 253 fss.h \
254 254 fsspriocntl.h \
255 255 fsid.h \
256 256 fssnap.h \
257 257 fssnap_if.h \
258 258 fstyp.h \
259 259 ftrace.h \
260 260 fx.h \
261 261 fxpriocntl.h \
262 262 gfs.h \
263 263 gld.h \
264 264 gldpriv.h \
265 265 group.h \
266 266 hdio.h \
267 267 hook.h \
268 268 hook_event.h \
269 269 hook_impl.h \
270 270 hwconf.h \
271 271 ia.h \
272 272 iapriocntl.h \
273 273 ibpart.h \
274 274 id32.h \
275 275 idmap.h \
276 276 ieeefp.h \
277 277 id_space.h \
278 278 instance.h \
279 279 int_const.h \
280 280 int_fmtio.h \
281 281 int_limits.h \
282 282 int_types.h \
283 283 inttypes.h \
284 284 ioccom.h \
285 285 ioctl.h \
286 286 ipc.h \
287 287 ipc_impl.h \
288 288 ipc_rctl.h \
289 289 ipd.h \
290 290 ipmi.h \
291 291 isa_defs.h \
292 292 iscsi_authclient.h \
293 293 iscsi_authclientglue.h \
294 294 iscsi_protocol.h \
295 295 jioctl.h \
296 296 kbd.h \
297 297 kbdreg.h \
298 298 kbio.h \
299 299 kcpc.h \
300 300 kdi.h \
301 301 kdi_impl.h \
302 302 kiconv.h \
303 303 kiconv_big5_utf8.h \
304 304 kiconv_cck_common.h \
305 305 kiconv_cp950hkscs_utf8.h \
306 306 kiconv_emea1.h \
307 307 kiconv_emea2.h \
308 308 kiconv_euckr_utf8.h \
309 309 kiconv_euctw_utf8.h \
310 310 kiconv_gb18030_utf8.h \
311 311 kiconv_gb2312_utf8.h \
312 312 kiconv_hkscs_utf8.h \
313 313 kiconv_ja.h \
314 314 kiconv_ja_jis_to_unicode.h \
315 315 kiconv_ja_unicode_to_jis.h \
316 316 kiconv_ko.h \
317 317 kiconv_latin1.h \
318 318 kiconv_sc.h \
319 319 kiconv_tc.h \
320 320 kiconv_uhc_utf8.h \
321 321 kiconv_utf8_big5.h \
322 322 kiconv_utf8_cp950hkscs.h \
323 323 kiconv_utf8_euckr.h \
324 324 kiconv_utf8_euctw.h \
325 325 kiconv_utf8_gb18030.h \
326 326 kiconv_utf8_gb2312.h \
327 327 kiconv_utf8_hkscs.h \
328 328 kiconv_utf8_uhc.h \
329 329 kidmap.h \
330 330 klpd.h \
331 331 klwp.h \
332 332 kmdb.h \
333 333 kmem.h \
334 334 kmem_impl.h \
335 335 kobj.h \
336 336 kobj_impl.h \
337 337 ksocket.h \
338 338 kstat.h \
339 339 kstr.h \
340 340 ksyms.h \
341 341 ksynch.h \
342 342 ldterm.h \
343 343 lgrp.h \
344 344 lgrp_user.h \
345 345 libc_kernel.h \
346 346 link.h \
347 347 list.h \
348 348 list_impl.h \
349 349 llc1.h \
350 350 loadavg.h \
351 351 lock.h \
352 352 lockfs.h \
353 353 lockstat.h \
354 354 lofi.h \
355 355 log.h \
356 356 logindmux.h \
357 357 logindmux_impl.h \
358 358 lwp.h \
359 359 lwp_timer_impl.h \
360 360 lwp_upimutex_impl.h \
361 361 lpif.h \
362 362 mac.h \
363 363 mac_client.h \
364 364 mac_client_impl.h \
365 365 mac_ether.h \
366 366 mac_flow.h \
367 367 mac_flow_impl.h \
368 368 mac_impl.h \
369 369 mac_provider.h \
370 370 mac_soft_ring.h \
371 371 mac_stat.h \
372 372 machelf.h \
373 373 map.h \
374 374 md4.h \
375 375 md5.h \
376 376 md5_consts.h \
377 377 mdi_impldefs.h \
378 378 mem.h \
379 379 mem_config.h \
380 380 memlist.h \
381 381 mkdev.h \
382 382 mhd.h \
383 383 mii.h \
384 384 miiregs.h \
385 385 mixer.h \
386 386 mman.h \
387 387 mmapobj.h \
388 388 mntent.h \
389 389 mntio.h \
390 390 mnttab.h \
391 391 modctl.h \
392 392 mode.h \
393 393 model.h \
394 394 modhash.h \
395 395 modhash_impl.h \
396 396 mount.h \
397 397 mouse.h \
398 398 msacct.h \
399 399 msg.h \
400 400 msg_impl.h \
401 401 msio.h \
402 402 msreg.h \
403 403 mtio.h \
404 404 multidata.h \
405 405 multidata_impl.h \
406 406 mutex.h \
407 407 nbmlock.h \
408 408 ndifm.h \
409 409 ndi_impldefs.h \
410 410 net80211.h \
411 411 net80211_crypto.h \
412 412 net80211_ht.h \
413 413 net80211_proto.h \
414 414 netconfig.h \
415 415 neti.h \
416 416 netstack.h \
417 417 nexusdefs.h \
418 418 note.h \
419 419 null.h \
420 420 nvpair.h \
421 421 nvpair_impl.h \
422 422 objfs.h \
423 423 objfs_impl.h \
424 424 ontrap.h \
425 425 open.h \
426 426 openpromio.h \
427 427 panic.h \
428 428 param.h \
429 429 pathconf.h \
430 430 pathname.h \
431 431 pattr.h \
432 432 queue.h \
433 433 serializer.h \
434 434 pbio.h \
435 435 pccard.h \
436 436 pci.h \
437 437 pcie.h \
438 438 pci_impl.h \
439 439 pci_tools.h \
440 440 pcmcia.h \
441 441 pctypes.h \
442 442 pfmod.h \
443 443 pg.h \
444 444 pghw.h \
445 445 physmem.h \
446 446 pkp_hash.h \
447 447 pm.h \
448 448 policy.h \
449 449 poll.h \
450 450 poll_impl.h \
451 451 pool.h \
452 452 pool_impl.h \
453 453 pool_pset.h \
454 454 port.h \
455 455 port_impl.h \
456 456 port_kernel.h \
457 457 portif.h \
458 458 ppmio.h \
459 459 pppt_ic_if.h \
460 460 pppt_ioctl.h \
461 461 priocntl.h \
462 462 priv.h \
463 463 priv_impl.h \
464 464 prnio.h \
465 465 proc.h \
466 466 processor.h \
467 467 procfs.h \
468 468 procset.h \
469 469 project.h \
470 470 protosw.h \
471 471 prsystm.h \
472 472 pset.h \
473 473 pshot.h \
474 474 ptem.h \
475 475 ptms.h \
476 476 ptyvar.h \
477 477 raidioctl.h \
478 478 ramdisk.h \
479 479 random.h \
480 480 rctl.h \
481 481 rctl_impl.h \
482 482 rds.h \
483 483 reboot.h \
484 484 refstr.h \
485 485 refstr_impl.h \
↓ open down ↓ |
485 lines elided |
↑ open up ↑ |
486 486 resource.h \
487 487 rlioctl.h \
488 488 rt.h \
489 489 rtpriocntl.h \
490 490 rwlock.h \
491 491 rwlock_impl.h \
492 492 rwstlock.h \
493 493 sad.h \
494 494 schedctl.h \
495 495 sdt.h \
496 + secflags.h \
496 497 select.h \
497 498 sem.h \
498 499 sem_impl.h \
499 500 sema_impl.h \
500 501 semaphore.h \
501 502 sendfile.h \
502 503 ser_sync.h \
503 504 session.h \
504 505 sha1.h \
505 506 sha1_consts.h \
506 507 sha2.h \
507 508 sha2_consts.h \
508 509 share.h \
509 510 shm.h \
510 511 shm_impl.h \
511 512 sid.h \
512 513 siginfo.h \
513 514 signal.h \
514 515 signalfd.h \
515 516 skein.h \
516 517 sleepq.h \
517 518 smbios.h \
518 519 smbios_impl.h \
519 520 sobject.h \
520 521 socket.h \
521 522 socket_impl.h \
522 523 socket_proto.h \
523 524 socketvar.h \
524 525 sockfilter.h \
525 526 sockio.h \
526 527 soundcard.h \
527 528 squeue.h \
528 529 squeue_impl.h \
529 530 srn.h \
530 531 sservice.h \
531 532 stat.h \
532 533 statfs.h \
533 534 statvfs.h \
534 535 stdbool.h \
535 536 stdint.h \
536 537 stermio.h \
537 538 stmf.h \
538 539 stmf_defines.h \
539 540 stmf_ioctl.h \
540 541 stmf_sbd_ioctl.h \
541 542 stream.h \
542 543 strft.h \
543 544 strlog.h \
544 545 strmdep.h \
545 546 stropts.h \
546 547 strredir.h \
547 548 strstat.h \
548 549 strsubr.h \
549 550 strsun.h \
550 551 strtty.h \
551 552 sunddi.h \
552 553 sunldi.h \
553 554 sunldi_impl.h \
554 555 sunmdi.h \
555 556 sunndi.h \
556 557 sunos_dhcp_class.h \
557 558 sunpm.h \
558 559 suntpi.h \
559 560 suntty.h \
560 561 swap.h \
561 562 synch.h \
562 563 sysdc.h \
563 564 sysdc_impl.h \
564 565 syscall.h \
565 566 sysconf.h \
566 567 sysconfig.h \
567 568 sysevent.h \
568 569 sysevent_impl.h \
569 570 sysinfo.h \
570 571 syslog.h \
571 572 sysmacros.h \
572 573 sysmsg_impl.h \
573 574 systeminfo.h \
574 575 systm.h \
575 576 task.h \
576 577 taskq.h \
577 578 taskq_impl.h \
578 579 t_kuser.h \
579 580 t_lock.h \
580 581 telioctl.h \
581 582 termio.h \
582 583 termios.h \
583 584 termiox.h \
584 585 thread.h \
585 586 ticlts.h \
586 587 ticots.h \
587 588 ticotsord.h \
588 589 tihdr.h \
589 590 time.h \
590 591 time_impl.h \
591 592 time_std_impl.h \
592 593 timeb.h \
593 594 timer.h \
594 595 timerfd.h \
595 596 times.h \
596 597 timex.h \
597 598 timod.h \
598 599 tirdwr.h \
599 600 tiuser.h \
600 601 tl.h \
601 602 tnf.h \
602 603 tnf_com.h \
603 604 tnf_probe.h \
604 605 tnf_writer.h \
605 606 todio.h \
606 607 tpicommon.h \
607 608 ts.h \
608 609 tspriocntl.h \
609 610 ttcompat.h \
610 611 ttold.h \
611 612 tty.h \
612 613 ttychars.h \
613 614 ttydev.h \
614 615 tuneable.h \
615 616 turnstile.h \
616 617 types.h \
617 618 types32.h \
618 619 tzfile.h \
619 620 u8_textprep.h \
620 621 u8_textprep_data.h \
621 622 uadmin.h \
622 623 ucred.h \
623 624 uio.h \
624 625 ulimit.h \
625 626 un.h \
626 627 unistd.h \
627 628 user.h \
628 629 ustat.h \
629 630 utime.h \
630 631 utsname.h \
631 632 utssys.h \
632 633 uuid.h \
633 634 va_impl.h \
634 635 va_list.h \
635 636 var.h \
636 637 varargs.h \
637 638 vfs.h \
638 639 vfs_opreg.h \
639 640 vfstab.h \
640 641 vgareg.h \
641 642 videodev2.h \
642 643 visual_io.h \
643 644 vlan.h \
644 645 vm.h \
645 646 vm_usage.h \
646 647 vmem.h \
647 648 vmem_impl.h \
648 649 vmsystm.h \
649 650 vnic.h \
650 651 vnic_impl.h \
651 652 vnode.h \
652 653 vscan.h \
653 654 vtoc.h \
654 655 vtrace.h \
655 656 vuid_event.h \
656 657 vuid_wheel.h \
657 658 vuid_queue.h \
658 659 vuid_state.h \
659 660 vuid_store.h \
660 661 wait.h \
661 662 waitq.h \
662 663 wanboot_impl.h \
663 664 watchpoint.h \
664 665 winlockio.h \
665 666 zcons.h \
666 667 zone.h \
667 668 xti_inet.h \
668 669 xti_osi.h \
669 670 xti_xtiopt.h \
670 671 zmod.h
671 672
672 673 HDRS= \
673 674 $(GENHDRS) \
674 675 $(CHKHDRS)
675 676
676 677 AUDIOHDRS= \
677 678 ac97.h \
678 679 audio_common.h \
679 680 audio_driver.h \
680 681 audio_oss.h \
681 682 g711.h
682 683
683 684 AVHDRS= \
684 685 iec61883.h
685 686
686 687 BSCHDRS= \
687 688 bscbus.h \
688 689 bscv_impl.h \
689 690 lom_ebuscodes.h \
690 691 lom_io.h \
691 692 lom_priv.h \
692 693 lombus.h
693 694
694 695 MDESCHDRS= \
695 696 mdesc.h \
696 697 mdesc_impl.h
697 698
698 699 CPUDRVHDRS= \
699 700 cpudrv.h
700 701
701 702 CRYPTOHDRS= \
702 703 elfsign.h \
703 704 ioctl.h \
704 705 ioctladmin.h \
705 706 common.h \
706 707 impl.h \
707 708 spi.h \
708 709 api.h \
709 710 ops_impl.h \
710 711 sched_impl.h
711 712
712 713 DCAMHDRS= \
713 714 dcam1394_io.h
714 715
715 716 IBHDRS= \
716 717 ib_types.h \
717 718 ib_pkt_hdrs.h
718 719
719 720 IBTLHDRS= \
720 721 ibtl_types.h \
721 722 ibtl_status.h \
722 723 ibti.h \
723 724 ibti_cm.h \
724 725 ibci.h \
725 726 ibti_common.h \
726 727 ibvti.h \
727 728 ibtl_ci_types.h
728 729
729 730 IBTLIMPLHDRS= \
730 731 ibtl_util.h
731 732
732 733 IBNEXHDRS= \
733 734 ibnex_devctl.h
734 735
735 736 IBMFHDRS= \
736 737 ibmf.h \
737 738 ibmf_msg.h \
738 739 ibmf_saa.h \
739 740 ibmf_utils.h
740 741
741 742 IBMGTHDRS= \
742 743 ib_dm_attr.h \
743 744 ib_mad.h \
744 745 sm_attr.h \
745 746 sa_recs.h
746 747
747 748 IBDHDRS= \
748 749 ibd.h
749 750
750 751 OFHDRS= \
751 752 ofa_solaris.h \
752 753 ofed_kernel.h
753 754
754 755 RDMAHDRS= \
755 756 ib_addr.h \
756 757 ib_user_mad.h \
757 758 ib_user_sa.h \
758 759 ib_user_verbs.h \
759 760 ib_verbs.h \
760 761 rdma_cm.h \
761 762 rdma_user_cm.h
762 763
763 764 SOL_UVERBSHDRS= \
764 765 sol_uverbs.h \
765 766 sol_uverbs2ucma.h \
766 767 sol_uverbs_comp.h \
767 768 sol_uverbs_hca.h \
768 769 sol_uverbs_qp.h \
769 770 sol_uverbs_event.h
770 771
771 772 SOL_UMADHDRS= \
772 773 sol_umad.h
773 774
774 775 SOL_UCMAHDRS= \
775 776 sol_ucma.h \
776 777 sol_rdma_user_cm.h
777 778
778 779 SOL_OFSHDRS= \
779 780 sol_cma.h \
780 781 sol_ib_cma.h \
781 782 sol_ofs_common.h \
782 783 sol_kverb_impl.h
783 784
784 785 TAVORHDRS= \
785 786 tavor_ioctl.h
786 787
787 788 HERMONHDRS= \
788 789 hermon_ioctl.h
789 790
790 791 MLNXHDRS= \
791 792 mlnx_umap.h
792 793
793 794 IDMHDRS= \
794 795 idm.h \
795 796 idm_impl.h \
796 797 idm_so.h \
797 798 idm_text.h \
798 799 idm_transport.h \
799 800 idm_conn_sm.h
800 801
801 802 ISCSITHDRS= \
802 803 radius_packet.h \
803 804 radius_protocol.h \
804 805 chap.h \
805 806 isns_protocol.h \
806 807 iscsi_if.h \
807 808 iscsit_common.h
808 809
809 810 ISOHDRS= \
810 811 signal_iso.h
811 812
812 813 DERIVED_LVMHDRS= \
813 814 md_mdiox.h \
814 815 md_basic.h \
815 816 mdmed.h \
816 817 md_mhdx.h \
817 818 mdmn_commd.h
818 819
819 820 LVMHDRS= \
820 821 md_convert.h \
821 822 md_crc.h \
822 823 md_hotspares.h \
823 824 md_mddb.h \
824 825 md_mirror.h \
825 826 md_mirror_shared.h \
826 827 md_names.h \
827 828 md_notify.h \
828 829 md_raid.h \
829 830 md_rename.h \
830 831 md_sp.h \
831 832 md_stripe.h \
832 833 md_trans.h \
833 834 mdio.h \
834 835 mdvar.h
835 836
836 837 ALL_LVMHDRS= \
837 838 $(LVMHDRS) \
838 839 $(DERIVED_LVMHDRS)
839 840
840 841 FMHDRS= \
841 842 protocol.h \
842 843 util.h
843 844
844 845 FMFSHDRS= \
845 846 zfs.h
846 847
847 848 FMIOHDRS= \
848 849 ddi.h \
849 850 disk.h \
850 851 pci.h \
851 852 scsi.h \
852 853 sun4upci.h \
853 854 opl_mc_fm.h
854 855
855 856 FSHDRS= \
856 857 autofs.h \
857 858 decomp.h \
858 859 dv_node.h \
859 860 sdev_impl.h \
860 861 fifonode.h \
861 862 hsfs_isospec.h \
862 863 hsfs_node.h \
863 864 hsfs_rrip.h \
864 865 hsfs_spec.h \
865 866 hsfs_susp.h \
866 867 lofs_info.h \
867 868 lofs_node.h \
868 869 mntdata.h \
869 870 namenode.h \
870 871 pc_dir.h \
871 872 pc_fs.h \
872 873 pc_label.h \
873 874 pc_node.h \
874 875 pxfs_ki.h \
875 876 snode.h \
876 877 swapnode.h \
877 878 tmp.h \
878 879 tmpnode.h \
879 880 udf_inode.h \
880 881 udf_volume.h \
881 882 ufs_acl.h \
882 883 ufs_bio.h \
883 884 ufs_filio.h \
884 885 ufs_fs.h \
885 886 ufs_fsdir.h \
886 887 ufs_inode.h \
887 888 ufs_lockfs.h \
888 889 ufs_log.h \
889 890 ufs_mount.h \
890 891 ufs_panic.h \
891 892 ufs_prot.h \
892 893 ufs_quota.h \
893 894 ufs_snap.h \
894 895 ufs_trans.h \
895 896 zfs.h \
896 897 zut.h
897 898
898 899 SCSIHDRS= \
899 900 scsi.h \
900 901 scsi_address.h \
901 902 scsi_ctl.h \
902 903 scsi_fm.h \
903 904 scsi_names.h \
904 905 scsi_params.h \
905 906 scsi_pkt.h \
906 907 scsi_resource.h \
907 908 scsi_types.h \
908 909 scsi_watch.h
909 910
910 911 SCSICONFHDRS= \
911 912 autoconf.h \
912 913 device.h
913 914
914 915 SCSIGENHDRS= \
915 916 commands.h \
916 917 dad_mode.h \
917 918 inquiry.h \
918 919 message.h \
919 920 mode.h \
920 921 persist.h \
921 922 sense.h \
922 923 sff_frames.h \
923 924 smp_frames.h \
924 925 status.h
925 926
926 927 SCSIIMPLHDRS= \
927 928 commands.h \
928 929 inquiry.h \
929 930 mode.h \
930 931 scsi_reset_notify.h \
931 932 scsi_sas.h \
932 933 sense.h \
933 934 services.h \
934 935 smp_transport.h \
935 936 spc3_types.h \
936 937 status.h \
937 938 transport.h \
938 939 types.h \
939 940 uscsi.h \
940 941 usmp.h
941 942
942 943 SCSITARGETSHDRS= \
943 944 ses.h \
944 945 sesio.h \
945 946 sgendef.h \
946 947 stdef.h \
947 948 sddef.h \
948 949 smp.h
949 950
950 951 SCSIADHDRS=
951 952
952 953 SCSICADHDRS=
953 954
954 955 SCSIISCSIHDRS= \
955 956 iscsi_door.h \
956 957 iscsi_if.h
957 958
958 959 SCSIVHCIHDRS= \
959 960 scsi_vhci.h \
960 961 mpapi_impl.h \
961 962 mpapi_scsi_vhci.h
962 963
963 964 SDCARDHDRS= \
964 965 sda.h \
965 966 sda_impl.h \
966 967 sda_ioctl.h
967 968
968 969 FC4HDRS= \
969 970 fc_transport.h \
970 971 linkapp.h \
971 972 fc.h \
972 973 fcp.h \
973 974 fcal_transport.h \
974 975 fcal.h \
975 976 fcal_linkapp.h \
976 977 fcio.h
977 978
978 979 FCHDRS= \
979 980 fc.h \
980 981 fcio.h \
981 982 fc_types.h \
982 983 fc_appif.h
983 984
984 985 FCIMPLHDRS= \
985 986 fc_error.h \
986 987 fcph.h
987 988
988 989 FCULPHDRS= \
989 990 fcp_util.h \
990 991 fcsm.h
991 992
992 993 SATAGENHDRS= \
993 994 sata_hba.h \
994 995 sata_defs.h \
995 996 sata_cfgadm.h
996 997
997 998 SYSEVENTHDRS= \
998 999 ap_driver.h \
999 1000 dev.h \
1000 1001 domain.h \
1001 1002 dr.h \
1002 1003 env.h \
1003 1004 eventdefs.h \
1004 1005 ipmp.h \
1005 1006 pwrctl.h \
1006 1007 svm.h \
1007 1008 vrrp.h
1008 1009
1009 1010 CONTRACTHDRS= \
1010 1011 process.h \
1011 1012 process_impl.h \
1012 1013 device.h \
1013 1014 device_impl.h
1014 1015
1015 1016 USBHDRS= \
1016 1017 usba.h \
1017 1018 usbai.h
1018 1019
1019 1020 USBAUDHDRS= \
1020 1021 usb_audio.h
1021 1022
1022 1023 USBHUBDHDRS= \
1023 1024 hub.h \
1024 1025 hubd_impl.h
1025 1026
1026 1027 USBHIDHDRS= \
1027 1028 hid.h
1028 1029
1029 1030 USBMSHDRS= \
1030 1031 usb_bulkonly.h \
1031 1032 usb_cbi.h
1032 1033
1033 1034 USBPRNHDRS= \
1034 1035 usb_printer.h
1035 1036
1036 1037 USBCDCHDRS= \
1037 1038 usb_cdc.h
1038 1039
1039 1040 USBVIDHDRS= \
1040 1041 usbvc.h
1041 1042
1042 1043 USBWCMHDRS= \
1043 1044 usbwcm.h
1044 1045
1045 1046 UGENHDRS= \
1046 1047 usb_ugen.h
1047 1048
1048 1049 HOTPLUGHDRS= \
1049 1050 hpcsvc.h \
1050 1051 hpctrl.h
1051 1052
1052 1053 HOTPLUGPCIHDRS= \
1053 1054 pcicfg.h \
1054 1055 pcihp.h
1055 1056
1056 1057 RSMHDRS= \
1057 1058 rsm.h \
1058 1059 rsm_common.h \
1059 1060 rsmapi_common.h \
1060 1061 rsmpi.h \
1061 1062 rsmpi_driver.h \
1062 1063 rsmka_path_int.h
1063 1064
1064 1065 TSOLHDRS= \
1065 1066 label.h \
1066 1067 label_macro.h \
1067 1068 priv.h \
1068 1069 tndb.h \
1069 1070 tsyscall.h
1070 1071
1071 1072 I1394HDRS= \
1072 1073 cmd1394.h \
1073 1074 id1394.h \
1074 1075 ieee1212.h \
1075 1076 ieee1394.h \
1076 1077 ixl1394.h \
1077 1078 s1394_impl.h \
1078 1079 t1394.h
1079 1080
1080 1081 # "cmdk" headers used on sparc
1081 1082 SDKTPHDRS= \
1082 1083 dadkio.h \
1083 1084 fdisk.h
1084 1085
1085 1086 # "cmdk" headers used on i386
1086 1087 DKTPHDRS= \
1087 1088 altsctr.h \
1088 1089 bbh.h \
1089 1090 cm.h \
1090 1091 cmdev.h \
1091 1092 cmdk.h \
1092 1093 cmpkt.h \
1093 1094 controller.h \
1094 1095 dadev.h \
1095 1096 dadk.h \
1096 1097 dadkio.h \
1097 1098 fctypes.h \
1098 1099 fdisk.h \
1099 1100 flowctrl.h \
1100 1101 gda.h \
1101 1102 quetypes.h \
1102 1103 queue.h \
1103 1104 tgcom.h \
1104 1105 tgdk.h
1105 1106
1106 1107 # "pc" header files used on i386
1107 1108 PCHDRS= \
1108 1109 avintr.h \
1109 1110 dma_engine.h \
1110 1111 i8272A.h \
1111 1112 pcic_reg.h \
1112 1113 pcic_var.h \
1113 1114 pic.h \
1114 1115 pit.h \
1115 1116 rtc.h
1116 1117
1117 1118 NXGEHDRS= \
1118 1119 nxge.h \
1119 1120 nxge_common.h \
1120 1121 nxge_common_impl.h \
1121 1122 nxge_defs.h \
1122 1123 nxge_hw.h \
1123 1124 nxge_impl.h \
1124 1125 nxge_ipp.h \
1125 1126 nxge_ipp_hw.h \
1126 1127 nxge_mac.h \
1127 1128 nxge_mac_hw.h \
1128 1129 nxge_fflp.h \
1129 1130 nxge_fflp_hw.h \
1130 1131 nxge_mii.h \
1131 1132 nxge_rxdma.h \
1132 1133 nxge_rxdma_hw.h \
1133 1134 nxge_txc.h \
1134 1135 nxge_txc_hw.h \
1135 1136 nxge_txdma.h \
1136 1137 nxge_txdma_hw.h \
1137 1138 nxge_virtual.h \
1138 1139 nxge_espc.h
1139 1140
1140 1141 include Makefile.syshdrs
1141 1142
1142 1143 dcam/%.check: dcam/%.h
1143 1144 $(DOT_H_CHECK)
1144 1145
1145 1146 CHECKHDRS= \
1146 1147 $($(MACH)_HDRS:%.h=%.check) \
1147 1148 $(AUDIOHDRS:%.h=audio/%.check) \
1148 1149 $(AVHDRS:%.h=av/%.check) \
1149 1150 $(BSCHDRS:%.h=%.check) \
1150 1151 $(CHKHDRS:%.h=%.check) \
1151 1152 $(CPUDRVHDRS:%.h=%.check) \
1152 1153 $(CRYPTOHDRS:%.h=crypto/%.check) \
1153 1154 $(DCAMHDRS:%.h=dcam/%.check) \
1154 1155 $(FC4HDRS:%.h=fc4/%.check) \
1155 1156 $(FCHDRS:%.h=fibre-channel/%.check) \
1156 1157 $(FCIMPLHDRS:%.h=fibre-channel/impl/%.check) \
1157 1158 $(FCULPHDRS:%.h=fibre-channel/ulp/%.check) \
1158 1159 $(IBHDRS:%.h=ib/%.check) \
1159 1160 $(IBDHDRS:%.h=ib/clients/ibd/%.check) \
1160 1161 $(IBTLHDRS:%.h=ib/ibtl/%.check) \
1161 1162 $(IBTLIMPLHDRS:%.h=ib/ibtl/impl/%.check) \
1162 1163 $(IBNEXHDRS:%.h=ib/ibnex/%.check) \
1163 1164 $(IBMGTHDRS:%.h=ib/mgt/%.check) \
1164 1165 $(IBMFHDRS:%.h=ib/mgt/ibmf/%.check) \
1165 1166 $(OFHDRS:%.h=ib/clients/of/%.check) \
1166 1167 $(RDMAHDRS:%.h=ib/clients/of/rdma/%.check) \
1167 1168 $(SOL_UVERBSHDRS:%.h=ib/clients/of/sol_uverbs/%.check) \
1168 1169 $(SOL_UCMAHDRS:%.h=ib/clients/of/sol_ucma/%.check) \
1169 1170 $(SOL_OFSHDRS:%.h=ib/clients/of/sol_ofs/%.check) \
1170 1171 $(TAVORHDRS:%.h=ib/adapters/tavor/%.check) \
1171 1172 $(HERMONHDRS:%.h=ib/adapters/hermon/%.check) \
1172 1173 $(MLNXHDRS:%.h=ib/adapters/%.check) \
1173 1174 $(IDMHDRS:%.h=idm/%.check) \
1174 1175 $(ISCSIHDRS:%.h=iscsi/%.check) \
1175 1176 $(ISCSITHDRS:%.h=iscsit/%.check) \
1176 1177 $(ISOHDRS:%.h=iso/%.check) \
1177 1178 $(FMHDRS:%.h=fm/%.check) \
1178 1179 $(FMFSHDRS:%.h=fm/fs/%.check) \
1179 1180 $(FMIOHDRS:%.h=fm/io/%.check) \
1180 1181 $(FSHDRS:%.h=fs/%.check) \
1181 1182 $(LVMHDRS:%.h=lvm/%.check) \
1182 1183 $(SCSIHDRS:%.h=scsi/%.check) \
1183 1184 $(SCSIADHDRS:%.h=scsi/adapters/%.check) \
1184 1185 $(SCSICONFHDRS:%.h=scsi/conf/%.check) \
1185 1186 $(SCSIIMPLHDRS:%.h=scsi/impl/%.check) \
1186 1187 $(SCSIISCSIHDRS:%.h=scsi/adapters/%.check) \
1187 1188 $(SCSIGENHDRS:%.h=scsi/generic/%.check) \
1188 1189 $(SCSITARGETSHDRS:%.h=scsi/targets/%.check) \
1189 1190 $(SCSIVHCIHDRS:%.h=scsi/adapters/%.check) \
1190 1191 $(SATAGENHDRS:%.h=sata/%.check) \
1191 1192 $(SDCARDHDRS:%.h=sdcard/%.check) \
1192 1193 $(SYSEVENTHDRS:%.h=sysevent/%.check) \
1193 1194 $(CONTRACTHDRS:%.h=contract/%.check) \
1194 1195 $(USBAUDHDRS:%.h=usb/clients/audio/%.check) \
1195 1196 $(USBHUBDHDRS:%.h=usb/hubd/%.check) \
1196 1197 $(USBHIDHDRS:%.h=usb/clients/hid/%.check) \
1197 1198 $(USBMSHDRS:%.h=usb/clients/mass_storage/%.check) \
1198 1199 $(USBPRNHDRS:%.h=usb/clients/printer/%.check) \
1199 1200 $(USBCDCHDRS:%.h=usb/clients/usbcdc/%.check) \
1200 1201 $(USBVIDHDRS:%.h=usb/clients/video/usbvc/%.check) \
1201 1202 $(USBWCMHDRS:%.h=usb/clients/usbinput/usbwcm/%.check) \
1202 1203 $(UGENHDRS:%.h=usb/clients/ugen/%.check) \
1203 1204 $(USBHDRS:%.h=usb/%.check) \
1204 1205 $(I1394HDRS:%.h=1394/%.check) \
1205 1206 $(RSMHDRS:%.h=rsm/%.check) \
1206 1207 $(TSOLHDRS:%.h=tsol/%.check) \
1207 1208 $(NXGEHDRS:%.h=nxge/%.check)
1208 1209
1209 1210
1210 1211 .KEEP_STATE:
1211 1212
1212 1213 .PARALLEL: \
1213 1214 $(CHECKHDRS) \
1214 1215 $(ROOTHDRS) \
1215 1216 $(ROOTAUDHDRS) \
1216 1217 $(ROOTAVHDRS) \
1217 1218 $(ROOTCRYPTOHDRS) \
1218 1219 $(ROOTDCAMHDRS) \
1219 1220 $(ROOTISOHDRS) \
1220 1221 $(ROOTIDMHDRS) \
1221 1222 $(ROOTISCSIHDRS) \
1222 1223 $(ROOTISCSITHDRS) \
1223 1224 $(ROOTFC4HDRS) \
1224 1225 $(ROOTFCHDRS) \
1225 1226 $(ROOTFCIMPLHDRS) \
1226 1227 $(ROOTFCULPHDRS) \
1227 1228 $(ROOTFMHDRS) \
1228 1229 $(ROOTFMIOHDRS) \
1229 1230 $(ROOTFMFSHDRS) \
1230 1231 $(ROOTFSHDRS) \
1231 1232 $(ROOTIBDHDRS) \
1232 1233 $(ROOTIBHDRS) \
1233 1234 $(ROOTIBTLHDRS) \
1234 1235 $(ROOTIBTLIMPLHDRS) \
1235 1236 $(ROOTIBNEXHDRS) \
1236 1237 $(ROOTIBMGTHDRS) \
1237 1238 $(ROOTIBMFHDRS) \
1238 1239 $(ROOTOFHDRS) \
1239 1240 $(ROOTRDMAHDRS) \
1240 1241 $(ROOTSOL_OFSHDRS) \
1241 1242 $(ROOTSOL_UMADHDRS) \
1242 1243 $(ROOTSOL_UVERBSHDRS) \
1243 1244 $(ROOTSOL_UCMAHDRS) \
1244 1245 $(ROOTTAVORHDRS) \
1245 1246 $(ROOTHERMONHDRS) \
1246 1247 $(ROOTMLNXHDRS) \
1247 1248 $(ROOTLVMHDRS) \
1248 1249 $(ROOTSCSIHDRS) \
1249 1250 $(ROOTSCSIADHDRS) \
1250 1251 $(ROOTSCSICONFHDRS) \
1251 1252 $(ROOTSCSIISCSIHDRS) \
1252 1253 $(ROOTSCSIGENHDRS) \
1253 1254 $(ROOTSCSIIMPLHDRS) \
1254 1255 $(ROOTSCSIVHCIHDRS) \
1255 1256 $(ROOTSDCARDHDRS) \
1256 1257 $(ROOTSYSEVENTHDRS) \
1257 1258 $(ROOTCONTRACTHDRS) \
1258 1259 $(ROOTUSBHDRS) \
1259 1260 $(ROOTUWBHDRS) \
1260 1261 $(ROOTUWBAHDRS) \
1261 1262 $(ROOTUSBAUDHDRS) \
1262 1263 $(ROOTUSBHUBDHDRS) \
1263 1264 $(ROOTUSBHIDHDRS) \
1264 1265 $(ROOTUSBHRCHDRS) \
1265 1266 $(ROOTUSBMSHDRS) \
1266 1267 $(ROOTUSBPRNHDRS) \
1267 1268 $(ROOTUSBCDCHDRS) \
1268 1269 $(ROOTUSBVIDHDRS) \
1269 1270 $(ROOTUSBWCMHDRS) \
1270 1271 $(ROOTUGENHDRS) \
1271 1272 $(ROOT1394HDRS) \
1272 1273 $(ROOTHOTPLUGHDRS) \
1273 1274 $(ROOTHOTPLUGPCIHDRS) \
1274 1275 $(ROOTRSMHDRS) \
1275 1276 $(ROOTTSOLHDRS) \
1276 1277 $($(MACH)_ROOTHDRS)
1277 1278
1278 1279
1279 1280 install_h: \
1280 1281 $(ROOTDIRS) \
1281 1282 LVMDERIVED_H \
1282 1283 .WAIT \
1283 1284 $(ROOTHDRS) \
1284 1285 $(ROOTAUDHDRS) \
1285 1286 $(ROOTAVHDRS) \
1286 1287 $(ROOTCRYPTOHDRS) \
1287 1288 $(ROOTDCAMHDRS) \
1288 1289 $(ROOTISOHDRS) \
1289 1290 $(ROOTIDMHDRS) \
1290 1291 $(ROOTISCSIHDRS) \
1291 1292 $(ROOTISCSITHDRS) \
1292 1293 $(ROOTFC4HDRS) \
1293 1294 $(ROOTFCHDRS) \
1294 1295 $(ROOTFCIMPLHDRS) \
1295 1296 $(ROOTFCULPHDRS) \
1296 1297 $(ROOTFMHDRS) \
1297 1298 $(ROOTFMFSHDRS) \
1298 1299 $(ROOTFMIOHDRS) \
1299 1300 $(ROOTFSHDRS) \
1300 1301 $(ROOTIBDHDRS) \
1301 1302 $(ROOTIBHDRS) \
1302 1303 $(ROOTIBTLHDRS) \
1303 1304 $(ROOTIBTLIMPLHDRS) \
1304 1305 $(ROOTIBNEXHDRS) \
1305 1306 $(ROOTIBMGTHDRS) \
1306 1307 $(ROOTIBMFHDRS) \
1307 1308 $(ROOTOFHDRS) \
1308 1309 $(ROOTRDMAHDRS) \
1309 1310 $(ROOTSOL_OFSHDRS) \
1310 1311 $(ROOTSOL_UMADHDRS) \
1311 1312 $(ROOTSOL_UVERBSHDRS) \
1312 1313 $(ROOTSOL_UCMAHDRS) \
1313 1314 $(ROOTTAVORHDRS) \
1314 1315 $(ROOTHERMONHDRS) \
1315 1316 $(ROOTMLNXHDRS) \
1316 1317 $(ROOTLVMHDRS) \
1317 1318 $(ROOTSCSIHDRS) \
1318 1319 $(ROOTSCSIADHDRS) \
1319 1320 $(ROOTSCSIISCSIHDRS) \
1320 1321 $(ROOTSCSICONFHDRS) \
1321 1322 $(ROOTSCSIGENHDRS) \
1322 1323 $(ROOTSCSIIMPLHDRS) \
1323 1324 $(ROOTSCSIVHCIHDRS) \
1324 1325 $(ROOTSDCARDHDRS) \
1325 1326 $(ROOTSYSEVENTHDRS) \
1326 1327 $(ROOTCONTRACTHDRS) \
1327 1328 $(ROOTUWBHDRS) \
1328 1329 $(ROOTUWBAHDRS) \
1329 1330 $(ROOTUSBHDRS) \
1330 1331 $(ROOTUSBAUDHDRS) \
1331 1332 $(ROOTUSBHUBDHDRS) \
1332 1333 $(ROOTUSBHIDHDRS) \
1333 1334 $(ROOTUSBHRCHDRS) \
1334 1335 $(ROOTUSBMSHDRS) \
1335 1336 $(ROOTUSBPRNHDRS) \
1336 1337 $(ROOTUSBCDCHDRS) \
1337 1338 $(ROOTUSBVIDHDRS) \
1338 1339 $(ROOTUSBWCMHDRS) \
1339 1340 $(ROOTUGENHDRS) \
1340 1341 $(ROOT1394HDRS) \
1341 1342 $(ROOTHOTPLUGHDRS) \
1342 1343 $(ROOTHOTPLUGPCIHDRS) \
1343 1344 $(ROOTRSMHDRS) \
1344 1345 $(ROOTTSOLHDRS) \
1345 1346 $($(MACH)_ROOTHDRS)
1346 1347
1347 1348 all_h: $(GENHDRS)
1348 1349
1349 1350 priv_const.h: $(PRIVS_AWK) $(PRIVS_DEF)
1350 1351 $(AWK) -f $(PRIVS_AWK) < $(PRIVS_DEF) -v privhfile=$@
1351 1352
1352 1353 priv_names.h: $(PRIVS_AWK) $(PRIVS_DEF)
1353 1354 $(AWK) -f $(PRIVS_AWK) < $(PRIVS_DEF) -v pubhfile=$@
1354 1355
1355 1356 usb/usbdevs.h: $(USBDEVS_AWK) $(USBDEVS_DATA)
1356 1357 $(AWK) -f $(USBDEVS_AWK) $(USBDEVS_DATA) -H > $@
1357 1358
1358 1359 LVMDERIVED_H:
1359 1360 cd $(SRC)/uts/common/sys/lvm; pwd; $(MAKE) all_h
1360 1361
1361 1362 clean:
1362 1363 $(RM) $(GENHDRS)
1363 1364
1364 1365 clobber: clean
1365 1366 cd $(SRC)/uts/common/sys/lvm; pwd; $(MAKE) clobber
1366 1367
1367 1368 check: $(CHECKHDRS)
1368 1369
1369 1370 FRC:
↓ open down ↓ |
864 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX