Mercurial > illumos > git > illumos-omnios
changeset 21506:a72b65cf3a44
10362 Catch kernel module undefined symbols at build time
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
Reviewed by: Gergő Doma <domag02@gmail.com>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Approved by: Garrett D'Amore <garrett@damore.org>
author | Robert Mustacchi <rm@joyent.com> |
---|---|
date | Sat, 09 Feb 2019 16:04:39 +0000 |
parents | e9def9c18743 |
children | 06e7f11d710f |
files | exception_lists/mapfilechk usr/src/uts/Makefile.mapfile usr/src/uts/Makefile.targ usr/src/uts/common/mapfiles/README usr/src/uts/common/mapfiles/ddi.mapfile usr/src/uts/common/mapfiles/dtrace.mapfile.awk usr/src/uts/common/mapfiles/kernel.mapfile usr/src/uts/common/mapfiles/mac.mapfile usr/src/uts/common/mapfiles/random.mapfile usr/src/uts/intel/e1000g/Makefile usr/src/uts/intel/i40e/Makefile usr/src/uts/intel/igb/Makefile usr/src/uts/intel/ixgbe/Makefile |
diffstat | 13 files changed, 484 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/exception_lists/mapfilechk Thu Jun 13 09:41:45 2019 -0700 +++ b/exception_lists/mapfilechk Sat Feb 09 16:04:39 2019 +0000 @@ -33,7 +33,7 @@ # # This file provides an exception mechanism for specifying files # that match this pattern that should be skipped. -# +# syntax: glob exception_lists/mapfilechk @@ -49,3 +49,5 @@ usr/src/cmd/mklocale/* usr/src/tools/onbld/Checks/Mapfile* usr/src/tools/scripts/* +usr/src/uts/common/mapfiles/dtrace.mapfile.awk +usr/src/uts/Makefile.mapfile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usr/src/uts/Makefile.mapfile Sat Feb 09 16:04:39 2019 +0000 @@ -0,0 +1,43 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# Copyright 2016 Joyent, Inc. +# + +# +# This Makefile should be included in individual kernel modules to opt +# into a -z defs world. Note, this should be included after a MAPFILES +# entry is defined. See uts/common/README.mapfiles for more information. +# + +# +# Mapfile base +# +MAPBASE = $(UTSBASE)/common/mapfiles +DTRACE_MAPFILE = $(OBJS_DIR)/dtrace.mapfile + +# +# Always append -z defs to the LD FLAGS and append all mapfiles. +# +LDFLAGS += -z defs $(MAPFILES:%=-M $(MAPBASE)/%.mapfile) -M $(DTRACE_MAPFILE) + +# +# Definitions and rules to assemble the DTrace probe mapfile. There's no +# good way to automatically do this, hence we have a slightly gross +# series of automated tools. This does mean that we have a bit more work +# to do, but also means that probes can be added arbitrarily without +# having to manually edit mapfiles. +# +DTRACE_AWK_FILE = $(MAPBASE)/dtrace.mapfile.awk + +$(OBJS_DIR)/dtrace.mapfile: $(OBJECTS) $(DTRACE_AWK_FILE) + $(NM) -u $(OBJECTS) | $(AWK) -f $(DTRACE_AWK_FILE) > $@
--- a/usr/src/uts/Makefile.targ Thu Jun 13 09:41:45 2019 -0700 +++ b/usr/src/uts/Makefile.targ Sat Feb 09 16:04:39 2019 +0000 @@ -50,7 +50,7 @@ # Partially link .o files to generate the kmod. The fake dependency # on modstubs simplifies things... # -$(BINARY): $(OBJECTS) +$(BINARY): $(OBJECTS) $(DTRACE_MAPFILE) $(LD) -r $(LDFLAGS) -o $@ $(OBJECTS) $(CTFMERGE_UNIQUIFY_AGAINST_GENUNIX) $(POST_PROCESS)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usr/src/uts/common/mapfiles/README Sat Feb 09 16:04:39 2019 +0000 @@ -0,0 +1,68 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# Copyright 2016 Joyent, Inc. +# + +Kernel Module Build Time Symbol Verification +-------------------------------------------- + +Historically, kernel modules have all been built as relocatable objects. +They are not dynamic objects and dependency information is always noted +in individual makefiles. Along with this, there has never been any +verification of the symbols that are being used. This means that it's +possible for a kernel module author to refer to a symbol that doesn't +exist and not find out until they try to install the module. + +To help find these problems at build time, we provide an opt-in system +for modules to use, leveraging the link-editor's '-z defs' option. This +option ensures that there are no unknown definitons at link-edit time. +To supply these definitions we supply a series of mapfiles in this +directory. + +These mapfiles are not the traditional versioning mapfiles like those in +usr/src/lib/README.mapfiles! Please review the following differences +closely: + +* These mapfiles do not declare any versions! +* These mapfiles do not use the 'SYMBOL_VERSION' directive, instead they + use the 'SYMBOL_SCOPE' directive. +* These mapfiles do not hide symbols! Library mapfiles always have + something to catch all local symbols. That should *never* be used + here. These mapfiles should not affect visibility. +* All symbols in these mapfiles should be marked 'EXTERN' to indicate + that they are not provided by the kernel module but by another. +* These mapfiles do not declare what is or isn't a public interface, + though they are often grouped around interfaces, to make it easier for + a driver author to get this right. + +Mapfiles are organized based on kernel module. For example the GLDv3 +device driver interface is provided by the 'mac' module and thus is +found in the file 'mac.mapfile'. The DDI is currently in the 'ddi' +mapfile. Functions that are found in genunix and unix that aren't in +the DDI should not be put in that mapfile. + +Note, the existing files may not be complete. These are intended to only +have the public interfaces provided by modules and thus should not +include every symbol in them. As the need arises, add new symbols or +modules as appropriate. + +To opt a module into this, first declare a series of MAPFILES that they +should check against in the module. This should be a series of one or +more files, for example: + +MAPFILES += ddi mac + +Next, you should add an include of Makefile.mapfile right before you +include Makefile.targ. You can do this with the following line: + +include $(UTSBASE)/Makefile.mapfile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usr/src/uts/common/mapfiles/ddi.mapfile Sat Feb 09 16:04:39 2019 +0000 @@ -0,0 +1,191 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# Copyright 2016 Joyent, Inc. +# + +# +# MAPFILE HEADER START +# +# WARNING: STOP NOW. DO NOT MODIFY THIS FILE. +# Object scoping must comply with the rules detailed in +# +# usr/src/uts/common/README.mapfiles +# +# You should not be making modifications here until you've read the most current +# copy of that file. If you need help, contact a gatekeeper for guidance. +# +# MAPFILE HEADER END +# + +# +# This file contains core functions provided by the DDI and also items +# required as part of the platform's runime ABI (think compiler +# functions). +# + +$mapfile_version 2 + +SYMBOL_SCOPE { + global: + __divdi3 { FLAGS = EXTERN }; + __stack_chk_fail { FLAGS = EXTERN }; + __stack_chk_guard { FLAGS = EXTERN }; + allocb { FLAGS = EXTERN }; + assfail { FLAGS = EXTERN }; + assfail3 { FLAGS = EXTERN }; + atomic_dec_32_nv { FLAGS = EXTERN }; + bcmp { FLAGS = EXTERN }; + bcopy { FLAGS = EXTERN }; + bzero { FLAGS = EXTERN }; + cmn_err { FLAGS = EXTERN }; + cv_broadcast { FLAGS = EXTERN }; + cv_destroy { FLAGS = EXTERN }; + cv_init { FLAGS = EXTERN }; + cv_reltimedwait { FLAGS = EXTERN }; + ddi_cb_register { FLAGS = EXTERN }; + ddi_cb_unregister { FLAGS = EXTERN }; + ddi_dev_regsize { FLAGS = EXTERN }; + ddi_dma_addr_bind_handle { FLAGS = EXTERN }; + ddi_dma_alloc_handle { FLAGS = EXTERN }; + ddi_dma_free_handle { FLAGS = EXTERN }; + ddi_dma_mem_alloc { FLAGS = EXTERN }; + ddi_dma_mem_free { FLAGS = EXTERN }; + ddi_dma_nextcookie { FLAGS = EXTERN }; + ddi_dma_sync { FLAGS = EXTERN }; + ddi_dma_unbind_handle { FLAGS = EXTERN }; + ddi_fls { FLAGS = EXTERN }; + ddi_fm_acc_err_clear { FLAGS = EXTERN }; + ddi_fm_acc_err_get { FLAGS = EXTERN }; + ddi_fm_dma_err_get { FLAGS = EXTERN }; + ddi_fm_ereport_post { FLAGS = EXTERN }; + ddi_fm_fini { FLAGS = EXTERN }; + ddi_fm_handler_register { FLAGS = EXTERN }; + ddi_fm_handler_unregister { FLAGS = EXTERN }; + ddi_fm_init { FLAGS = EXTERN }; + ddi_fm_service_impact { FLAGS = EXTERN }; + ddi_get_driver_private { FLAGS = EXTERN }; + ddi_get_instance { FLAGS = EXTERN }; + ddi_get_lbolt { FLAGS = EXTERN }; + ddi_get_lbolt64 { FLAGS = EXTERN }; + ddi_get_name { FLAGS = EXTERN }; + ddi_get_parent { FLAGS = EXTERN }; + ddi_get16 { FLAGS = EXTERN }; + ddi_get32 { FLAGS = EXTERN }; + ddi_get64 { FLAGS = EXTERN }; + ddi_intr_add_handler { FLAGS = EXTERN }; + ddi_intr_alloc { FLAGS = EXTERN }; + ddi_intr_block_disable { FLAGS = EXTERN }; + ddi_intr_block_enable { FLAGS = EXTERN }; + ddi_intr_disable { FLAGS = EXTERN }; + ddi_intr_enable { FLAGS = EXTERN }; + ddi_intr_free { FLAGS = EXTERN }; + ddi_intr_get_cap { FLAGS = EXTERN }; + ddi_intr_get_navail { FLAGS = EXTERN }; + ddi_intr_get_nintrs { FLAGS = EXTERN }; + ddi_intr_get_pri { FLAGS = EXTERN }; + ddi_intr_get_supported_types { FLAGS = EXTERN }; + ddi_intr_remove_handler { FLAGS = EXTERN }; + ddi_periodic_add { FLAGS = EXTERN }; + ddi_periodic_delete { FLAGS = EXTERN }; + ddi_power { FLAGS = EXTERN }; + ddi_prop_free { FLAGS = EXTERN }; + ddi_prop_get_int { FLAGS = EXTERN }; + ddi_prop_lookup_int_array { FLAGS = EXTERN }; + ddi_prop_op { FLAGS = EXTERN }; + ddi_prop_remove_all { FLAGS = EXTERN }; + ddi_prop_update_int_array { FLAGS = EXTERN }; + ddi_prop_update_string { FLAGS = EXTERN }; + ddi_ptob { FLAGS = EXTERN }; + ddi_put16 { FLAGS = EXTERN }; + ddi_put32 { FLAGS = EXTERN }; + ddi_quiesce_not_supported { FLAGS = EXTERN }; + ddi_regs_map_free { FLAGS = EXTERN }; + ddi_regs_map_setup { FLAGS = EXTERN }; + ddi_set_driver_private { FLAGS = EXTERN }; + ddi_strtol { FLAGS = EXTERN }; + ddi_taskq_create { FLAGS = EXTERN }; + ddi_taskq_destroy { FLAGS = EXTERN }; + ddi_taskq_dispatch { FLAGS = EXTERN }; + delay { FLAGS = EXTERN }; + desballoc { FLAGS = EXTERN }; + dev_err { FLAGS = EXTERN }; + drv_usectohz { FLAGS = EXTERN }; + drv_usecwait { FLAGS = EXTERN }; + fm_ena_generate { FLAGS = EXTERN }; + freeb { FLAGS = EXTERN }; + freemsg { FLAGS = EXTERN }; + freemsgchain { FLAGS = EXTERN }; + gethrtime { FLAGS = EXTERN }; + kmem_alloc { FLAGS = EXTERN }; + kmem_free { FLAGS = EXTERN }; + kmem_zalloc { FLAGS = EXTERN }; + kstat_create { FLAGS = EXTERN }; + kstat_delete { FLAGS = EXTERN }; + kstat_install { FLAGS = EXTERN }; + kstat_named_init { FLAGS = EXTERN }; + list_create { FLAGS = EXTERN }; + list_destroy { FLAGS = EXTERN }; + list_head { FLAGS = EXTERN }; + list_insert_tail { FLAGS = EXTERN }; + list_next { FLAGS = EXTERN }; + list_remove { FLAGS = EXTERN }; + memcpy { FLAGS = EXTERN }; + memset { FLAGS = EXTERN }; + miocack { FLAGS = EXTERN }; + miocnak { FLAGS = EXTERN }; + mod_driverops { FLAGS = EXTERN }; + mod_info { FLAGS = EXTERN }; + mod_install { FLAGS = EXTERN }; + mod_remove { FLAGS = EXTERN }; + msgpullup { FLAGS = EXTERN }; + msgsize { FLAGS = EXTERN }; + mutex_destroy { FLAGS = EXTERN }; + mutex_enter { FLAGS = EXTERN }; + mutex_exit { FLAGS = EXTERN }; + mutex_init { FLAGS = EXTERN }; + mutex_owned { FLAGS = EXTERN }; + mutex_tryenter { FLAGS = EXTERN }; + nochpoll { FLAGS = EXTERN }; + nodev { FLAGS = EXTERN }; + nulldev { FLAGS = EXTERN }; + panic { FLAGS = EXTERN }; + pci_config_get16 { FLAGS = EXTERN }; + pci_config_get32 { FLAGS = EXTERN }; + pci_config_get64 { FLAGS = EXTERN }; + pci_config_get8 { FLAGS = EXTERN }; + pci_config_put16 { FLAGS = EXTERN }; + pci_config_put32 { FLAGS = EXTERN }; + pci_config_put64 { FLAGS = EXTERN }; + pci_config_put8 { FLAGS = EXTERN }; + pci_config_setup { FLAGS = EXTERN }; + pci_config_teardown { FLAGS = EXTERN }; + pci_ereport_post { FLAGS = EXTERN }; + pci_ereport_setup { FLAGS = EXTERN }; + pci_ereport_teardown { FLAGS = EXTERN }; + pci_lcap_locate { FLAGS = EXTERN }; + qreply { FLAGS = EXTERN }; + rw_destroy { FLAGS = EXTERN }; + rw_enter { FLAGS = EXTERN }; + rw_exit { FLAGS = EXTERN }; + rw_init { FLAGS = EXTERN }; + snprintf { FLAGS = EXTERN }; + sprintf { FLAGS = EXTERN }; + strcat { FLAGS = EXTERN }; + strcmp { FLAGS = EXTERN }; + strcpy { FLAGS = EXTERN }; + strlen { FLAGS = EXTERN }; + timeout { FLAGS = EXTERN }; + untimeout { FLAGS = EXTERN }; + vsnprintf { FLAGS = EXTERN }; + vsprintf { FLAGS = EXTERN }; +};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usr/src/uts/common/mapfiles/dtrace.mapfile.awk Sat Feb 09 16:04:39 2019 +0000 @@ -0,0 +1,34 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# Copyright 2016 Joyent, Inc. +# + +# +# This script is designed to assemble a mapfile for DTrace probes. +# +BEGIN { + print "#" + print "# This file is autogenerated by dtrace.mapfile.awk" + print "#" + print "$mapfile_version 2" + print "SYMBOL_SCOPE {" + print " global:" +} + +/__dtrace_probe_/ { + printf "\t%s\t{ FLAGS = EXTERN };\n", $1 +} + +END { + print "};" +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usr/src/uts/common/mapfiles/kernel.mapfile Sat Feb 09 16:04:39 2019 +0000 @@ -0,0 +1,41 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# Copyright 2016 Joyent, Inc. +# + +# +# MAPFILE HEADER START +# +# WARNING: STOP NOW. DO NOT MODIFY THIS FILE. +# Object scoping must comply with the rules detailed in +# +# usr/src/uts/common/README.mapfiles +# +# You should not be making modifications here until you've read the most current +# copy of that file. If you need help, contact a gatekeeper for guidance. +# +# MAPFILE HEADER END +# + +# +# This file contains functions provided by the kernel that various +# modules use. This is a combination of things in both unix and genunix. +# + +$mapfile_version 2 + +SYMBOL_SCOPE { + global: + bt_getlowbit { FLAGS = EXTERN }; + servicing_interrupt { FLAGS = EXTERN }; +};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usr/src/uts/common/mapfiles/mac.mapfile Sat Feb 09 16:04:39 2019 +0000 @@ -0,0 +1,57 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# Copyright (c) 2017, Joyent, Inc. +# + +# +# MAPFILE HEADER START +# +# WARNING: STOP NOW. DO NOT MODIFY THIS FILE. +# Object scoping must comply with the rules detailed in +# +# usr/src/uts/common/README.mapfiles +# +# You should not be making modifications here until you've read the most current +# copy of that file. If you need help, contact a gatekeeper for guidance. +# +# MAPFILE HEADER END +# + +$mapfile_version 2 + +SYMBOL_SCOPE { + global: + mac_alloc { FLAGS = EXTERN }; + mac_fini_ops { FLAGS = EXTERN }; + mac_free { FLAGS = EXTERN }; + mac_hcksum_get { FLAGS = EXTERN }; + mac_hcksum_set { FLAGS = EXTERN }; + mac_init_ops { FLAGS = EXTERN }; + mac_link_update { FLAGS = EXTERN }; + mac_lso_get { FLAGS = EXTERN }; + mac_maxsdu_update { FLAGS = EXTERN }; + mac_prop_info_set_default_link_flowctrl { FLAGS = EXTERN }; + mac_prop_info_set_default_str { FLAGS = EXTERN }; + mac_prop_info_set_default_uint8 { FLAGS = EXTERN }; + mac_prop_info_set_perm { FLAGS = EXTERN }; + mac_prop_info_set_range_uint32 { FLAGS = EXTERN }; + mac_ring_intr_set { FLAGS = EXTERN }; + mac_register { FLAGS = EXTERN }; + mac_rx { FLAGS = EXTERN }; + mac_rx_ring { FLAGS = EXTERN }; + mac_transceiver_info_set_present { FLAGS = EXTERN }; + mac_transceiver_info_set_usable { FLAGS = EXTERN }; + mac_tx_ring_update { FLAGS = EXTERN }; + mac_tx_update { FLAGS = EXTERN }; + mac_unregister { FLAGS = EXTERN }; +};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usr/src/uts/common/mapfiles/random.mapfile Sat Feb 09 16:04:39 2019 +0000 @@ -0,0 +1,37 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# Copyright 2016 Joyent, Inc. +# + +# +# MAPFILE HEADER START +# +# WARNING: STOP NOW. DO NOT MODIFY THIS FILE. +# Object scoping must comply with the rules detailed in +# +# usr/src/uts/common/README.mapfiles +# +# You should not be making modifications here until you've read the most current +# copy of that file. If you need help, contact a gatekeeper for guidance. +# +# MAPFILE HEADER END +# + +$mapfile_version 2 + +SYMBOL_SCOPE { + global: + random_get_bytes { FLAGS = EXTERN }; + random_get_blocking_bytes { FLAGS = EXTERN }; + random_get_pseudo_bytes { FLAGS = EXTERN }; +};
--- a/usr/src/uts/intel/e1000g/Makefile Thu Jun 13 09:41:45 2019 -0700 +++ b/usr/src/uts/intel/e1000g/Makefile Sat Feb 09 16:04:39 2019 +0000 @@ -80,6 +80,7 @@ # Driver depends on MAC # LDFLAGS += -dy -N misc/mac +MAPFILES += ddi mac # # Default build targets. @@ -106,4 +107,5 @@ # # Include common targets. # +include $(UTSBASE)/Makefile.mapfile include $(UTSBASE)/intel/Makefile.targ
--- a/usr/src/uts/intel/i40e/Makefile Thu Jun 13 09:41:45 2019 -0700 +++ b/usr/src/uts/intel/i40e/Makefile Sat Feb 09 16:04:39 2019 +0000 @@ -48,6 +48,8 @@ LDFLAGS += -dy -N misc/mac +MAPFILES += ddi mac random + .KEEP_STATE: def: $(DEF_DEPS) @@ -66,4 +68,5 @@ install: $(INSTALL_DEPS) +include $(UTSBASE)/Makefile.mapfile include $(UTSBASE)/intel/Makefile.targ
--- a/usr/src/uts/intel/igb/Makefile Thu Jun 13 09:41:45 2019 -0700 +++ b/usr/src/uts/intel/igb/Makefile Sat Feb 09 16:04:39 2019 +0000 @@ -69,6 +69,7 @@ # Driver depends on MAC # LDFLAGS += -dy -N misc/mac +MAPFILES += ddi mac random # # Default build targets. @@ -94,4 +95,5 @@ # # Include common targets. # +include $(UTSBASE)/Makefile.mapfile include $(UTSBASE)/intel/Makefile.targ
--- a/usr/src/uts/intel/ixgbe/Makefile Thu Jun 13 09:41:45 2019 -0700 +++ b/usr/src/uts/intel/ixgbe/Makefile Sat Feb 09 16:04:39 2019 +0000 @@ -75,6 +75,7 @@ # Driver depends on MAC # LDFLAGS += -dy -N misc/mac +MAPFILES += ddi mac random kernel # # Default build targets. @@ -100,4 +101,5 @@ # # Include common targets. # +include $(UTSBASE)/Makefile.mapfile include $(UTSBASE)/intel/Makefile.targ