xref: /illumos-gate/usr/src/cmd/mdb/tools/scripts/map2linktest.sh (revision 8b80e8cb6855118d46f605e91b5ed4ce83417395)
1#!/bin/ksh
2#
3# CDDL HEADER START
4#
5# The contents of this file are subject to the terms of the
6# Common Development and Distribution License (the "License").
7# You may not use this file except in compliance with the License.
8#
9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10# or http://www.opensolaris.org/os/licensing.
11# See the License for the specific language governing permissions
12# and limitations under the License.
13#
14# When distributing Covered Code, include this CDDL HEADER in each
15# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16# If applicable, add the following below this CDDL HEADER, with the
17# fields enclosed by brackets "[]" replaced with your own identifying
18# information: Portions Copyright [yyyy] [name of copyright owner]
19#
20# CDDL HEADER END
21#
22#
23# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24# Use is subject to license terms.
25#
26#ident	"%Z%%M%	%I%	%E% SMI"
27#
28
29#
30# Create dummy functions for each of the functions in the module API.  We can
31# then link a module against an object file created from the output of this
32# script to determine whether or not that module restricts itself to the API.
33# If the module uses functions outside of the module API, then it cannot be
34# used as a kmdb module.
35#
36nawk '
37	/^[ 	]*global:[ 	]*$/ {
38		printing = 1;
39		next;
40	}
41
42	/^[	]*local:[ 	]*$/ {
43		printing = 0;
44		next;
45	}
46
47	# Skip blank lines and comments
48	/^$/ { next; }
49	/^[ 	]*#/ { next;}
50
51	# Print globals only
52	printing == 0 { next; }
53
54	# Symbols beginning with "kmdb_" are not in the module API - they are
55	# private to kmdb.
56	$1 ~ /^kmdb_/ { next; }
57
58	# Symbols which have the token "variable" are seen as an int
59	$3 ~ /variable/ {
60		if (seen[$1]) {
61			next;
62		}
63
64		seen[$1] = 1;
65
66		printf("int %s = 0;\n", substr($1, 1, length($1) - 1));
67		next;
68	}
69
70	$1 !~ /;$/ { next; }
71
72	# Print everything else that we have not already seen as a function
73	# definition so we can create our filter.
74	{
75		if (seen[$1]) {
76			next;
77		}
78
79		seen[$1] = 1;
80
81		printf("void %s(void) {}\n", substr($1, 1, length($1) - 1));
82	}
83'
84
85#
86# kmdb modules cannot have their own _init, _fini, or _info routines.  By
87# creating dummies for them here, a link against an object file created from
88# the output of this script will fail if the module defines one of them.
89#
90echo "void _init(void) {}"
91echo "void _info(void) {}"
92echo "void _fini(void) {}"
93#
94# The SunStudio compiler may generate calls to _memcpy and so we
95# need to make sure that the correct symbol exists for these calls.
96#
97echo "void _memcpy(void) {}"
98