xref: /titanic_44/usr/src/cmd/sgs/libld/common/_map.h (revision 6a634c9dca3093f3922e4b7ab826d7bdf17bf78e)
169112eddSAli Bahrami /*
269112eddSAli Bahrami  * CDDL HEADER START
369112eddSAli Bahrami  *
469112eddSAli Bahrami  * The contents of this file are subject to the terms of the
569112eddSAli Bahrami  * Common Development and Distribution License (the "License").
669112eddSAli Bahrami  * You may not use this file except in compliance with the License.
769112eddSAli Bahrami  *
869112eddSAli Bahrami  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
969112eddSAli Bahrami  * or http://www.opensolaris.org/os/licensing.
1069112eddSAli Bahrami  * See the License for the specific language governing permissions
1169112eddSAli Bahrami  * and limitations under the License.
1269112eddSAli Bahrami  *
1369112eddSAli Bahrami  * When distributing Covered Code, include this CDDL HEADER in each
1469112eddSAli Bahrami  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1569112eddSAli Bahrami  * If applicable, add the following below this CDDL HEADER, with the
1669112eddSAli Bahrami  * fields enclosed by brackets "[]" replaced with your own identifying
1769112eddSAli Bahrami  * information: Portions Copyright [yyyy] [name of copyright owner]
1869112eddSAli Bahrami  *
1969112eddSAli Bahrami  * CDDL HEADER END
2069112eddSAli Bahrami  */
2169112eddSAli Bahrami 
2269112eddSAli Bahrami /*
23*1007fd6fSAli Bahrami  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
2469112eddSAli Bahrami  */
2569112eddSAli Bahrami 
2669112eddSAli Bahrami /*
2769112eddSAli Bahrami  * Local include file for libld mapfile subsystem.
2869112eddSAli Bahrami  */
2969112eddSAli Bahrami 
3069112eddSAli Bahrami #ifndef	_MAP_DOT_H
3169112eddSAli Bahrami #define	_MAP_DOT_H
3269112eddSAli Bahrami 
3369112eddSAli Bahrami #ifdef	__cplusplus
3469112eddSAli Bahrami extern "C" {
3569112eddSAli Bahrami #endif
3669112eddSAli Bahrami 
3769112eddSAli Bahrami /*
3869112eddSAli Bahrami  * Macro used to size name buffer corresponding to a NULL terminated array
3969112eddSAli Bahrami  * of structures each of which contains a name string. Macro is used per-name.
4069112eddSAli Bahrami  * 2 extra characters are allowed per item to allow for a ', ' delimiter
4169112eddSAli Bahrami  * or NULL termination.
4269112eddSAli Bahrami  */
4369112eddSAli Bahrami #define	KW_NAME_SIZE(_size) (_size##_SIZE + 2)
4469112eddSAli Bahrami 
4569112eddSAli Bahrami /*
4669112eddSAli Bahrami  * Variant of isspace() that excludes newline characters. Requires <ctype.h>.
4769112eddSAli Bahrami  */
4869112eddSAli Bahrami #define	isspace_nonl(_s) (isspace(_s) && ((_s) != '\n'))
4969112eddSAli Bahrami 
5069112eddSAli Bahrami /*
5169112eddSAli Bahrami  * Type used to insert NULL characters in the mapfile text and later
5269112eddSAli Bahrami  * back them out and restore the original character. The mapfile text
5369112eddSAli Bahrami  * is held in a single string, so when we want to access sub-strings,
5469112eddSAli Bahrami  * it is necessary to temporarily insert NULLs to prevent the entire
5569112eddSAli Bahrami  * mapfile from that point forward being output.
5669112eddSAli Bahrami  */
5769112eddSAli Bahrami typedef struct {
5869112eddSAli Bahrami 	char	*np_ptr;	/* Address patched with NULL character */
5969112eddSAli Bahrami 	char	np_ch;		/* Character originally found at *np_ptr */
6069112eddSAli Bahrami } ld_map_npatch_t;
6169112eddSAli Bahrami 
6269112eddSAli Bahrami /*
6369112eddSAli Bahrami  * ld_map_gettoken() uses a table of 128 bytes to determine how to
6469112eddSAli Bahrami  * process a token starting with any 7-bit ASCII value. The table is
6569112eddSAli Bahrami  * indexed by the character code, and returns one of the TK_* token values.
6669112eddSAli Bahrami  */
6769112eddSAli Bahrami typedef const char mf_tokdisp_t[128];
6869112eddSAli Bahrami 
6969112eddSAli Bahrami /*
7069112eddSAli Bahrami  * The definition of an unquoted identifier differs based on the mapfile
7169112eddSAli Bahrami  * version. Rather than write a separate function to locate identifiers
7269112eddSAli Bahrami  * for each version, we use a single function that relies on a per-character
7369112eddSAli Bahrami  * table that encodes which characters can start an identifier, and which
7469112eddSAli Bahrami  * can continue one, for each supported mapfile version.
7569112eddSAli Bahrami  *
7669112eddSAli Bahrami  * Two bits are used for each version, one for the start attribute, and the
7769112eddSAli Bahrami  * other for continuation. The first two bits are not used (version 0), the
7869112eddSAli Bahrami  * next 2 are used for version 1, the following 2 for version 2, and so on.
7969112eddSAli Bahrami  */
8069112eddSAli Bahrami #define	TKID_ATTR_B_START	1
8169112eddSAli Bahrami #define	TKID_ATTR_B_CONT	2
8269112eddSAli Bahrami 
8369112eddSAli Bahrami #define	TKID_ATTR_START(_ver)	(TKID_ATTR_B_START << (_ver * 2))
8469112eddSAli Bahrami #define	TKID_ATTR_CONT(_ver)	(TKID_ATTR_B_CONT << (_ver * 2))
8569112eddSAli Bahrami 
8669112eddSAli Bahrami /* Convenience macros for chars that both start and continue an identifier */
8769112eddSAli Bahrami #define	TKID_ATTR(_ver) ((TKID_ATTR_B_START | TKID_ATTR_B_CONT) << (_ver * 2))
8869112eddSAli Bahrami 
8969112eddSAli Bahrami /*
9069112eddSAli Bahrami  * State for a mapfile held in memory.
9169112eddSAli Bahrami  */
9269112eddSAli Bahrami typedef struct {
9369112eddSAli Bahrami 	Ofl_desc	*mf_ofl;	/* Output descriptor being processed */
9469112eddSAli Bahrami 	char		*mf_name;	/* Mapfile name */
9569112eddSAli Bahrami 	Ifl_desc	*mf_ifl;	/* NULL, or pseudo input file */
9669112eddSAli Bahrami 					/*	descriptor from ld_map_ifl() */
9769112eddSAli Bahrami 	char		*mf_text;	/* Text of mapfile */
9869112eddSAli Bahrami 	char		*mf_next;	/* Next char in mapfile to examine */
9969112eddSAli Bahrami 	const char	*mf_tokdisp;	/* mf_tokdisp_t dispatch table to use */
10069112eddSAli Bahrami 	Lineno		mf_lineno;	/* Line # within mf_text */
10169112eddSAli Bahrami 	int		mf_version;	/* Mapfile syntax version */
10269112eddSAli Bahrami 	int		mf_tkid_start;	/* TKID bitvalue for characters that */
10369112eddSAli Bahrami 					/*	start an unquoted identifier */
10469112eddSAli Bahrami 	int		mf_tkid_cont;	/* TKID bitvalue for characters that */
10569112eddSAli Bahrami 					/*	continue an unquoted ident. */
10669112eddSAli Bahrami 	int		mf_next_ch;	/* 0, or character read from *mf_next */
10769112eddSAli Bahrami 					/*	prior to inserting NULL */
10869112eddSAli Bahrami 	Aliste		mf_ec_insndx;	/* Insert index for entrance criteria */
10969112eddSAli Bahrami 					/*	Each mapfile starts at the */
11069112eddSAli Bahrami 					/*	top, inserting each ec in the */
11169112eddSAli Bahrami 					/*	file in the order seen. */
11269112eddSAli Bahrami } Mapfile;
11369112eddSAli Bahrami 
11469112eddSAli Bahrami /*
11569112eddSAli Bahrami  * A very large percentage of mapfile errors start with the
11669112eddSAli Bahrami  * calling sequence:
117*1007fd6fSAli Bahrami  *	ld_eprintf(ofl, ERR_XXX, format, mf->mf_name, mf->mf_lineno...)
11869112eddSAli Bahrami  * The mf_fatal() and mf_warn() varadic macros are used to supply all
11969112eddSAli Bahrami  * of boilerplate, resulting in visually simpler code.
12069112eddSAli Bahrami  *
12169112eddSAli Bahrami  * mf_fatal0()/mf_warn0() are used when the format does not require any
12269112eddSAli Bahrami  * additional arguments and the varargs list is empty. The GNU cpp has a
12369112eddSAli Bahrami  * syntax for eliminating the extra comma (, ##__VA_ARGS__), but this isn't
12469112eddSAli Bahrami  * supported by the Sun compilers yet.
12569112eddSAli Bahrami  */
12669112eddSAli Bahrami #define	mf_fatal0(_mf, _fmt) \
127*1007fd6fSAli Bahrami 	ld_eprintf((_mf)->mf_ofl, ERR_FATAL, _fmt, (_mf)->mf_name, \
12869112eddSAli Bahrami 	    EC_LINENO((_mf)->mf_lineno))
12969112eddSAli Bahrami #define	mf_fatal(_mf, _fmt, ...) \
130*1007fd6fSAli Bahrami 	ld_eprintf((_mf)->mf_ofl, ERR_FATAL, _fmt, (_mf)->mf_name, \
13169112eddSAli Bahrami 	    EC_LINENO((_mf)->mf_lineno), __VA_ARGS__)
13269112eddSAli Bahrami 
13369112eddSAli Bahrami #define	mf_warn0(_mf, _fmt) \
134*1007fd6fSAli Bahrami 	ld_eprintf((_mf)->mf_ofl, ERR_WARNING, _fmt, (_mf)->mf_name, \
13569112eddSAli Bahrami 	    EC_LINENO((_mf)->mf_lineno))
13669112eddSAli Bahrami #define	mf_warn(_mf, _fmt, ...) \
137*1007fd6fSAli Bahrami 	ld_eprintf((_mf)->mf_ofl, ERR_WARNING, _fmt, (_mf)->mf_name, \
13869112eddSAli Bahrami 	    EC_LINENO((_mf)->mf_lineno), __VA_ARGS__)
13969112eddSAli Bahrami 
14069112eddSAli Bahrami /* Possible return values from ld_map_gettoken */
14169112eddSAli Bahrami typedef enum {
14269112eddSAli Bahrami 	TK_ERROR =	-1,	/* Error in lexical analysis */
14369112eddSAli Bahrami 	TK_EOF =	0,	/* End of file: Requires TK_F_EOFOK to be set */
14469112eddSAli Bahrami 				/*	or EOF results in TK_ERROR */
14569112eddSAli Bahrami 	TK_STRING =	1,	/* String literal */
14669112eddSAli Bahrami 	TK_COLON =	2,	/* : */
14769112eddSAli Bahrami 	TK_SEMICOLON =	3,	/* ; */
14869112eddSAli Bahrami 	TK_EQUAL =	4,	/* = */
14969112eddSAli Bahrami 	TK_PLUSEQ =	5,	/* += */
15069112eddSAli Bahrami 	TK_MINUSEQ =	6,	/* -= */
15169112eddSAli Bahrami 	TK_ATSIGN =	7,	/* @ */
15269112eddSAli Bahrami 	TK_DASH =	8,	/* - */
15369112eddSAli Bahrami 	TK_LEFTBKT =	9,	/* { */
15469112eddSAli Bahrami 	TK_RIGHTBKT =	10,	/* } */
15569112eddSAli Bahrami 	TK_PIPE =	11,	/* | */
15669112eddSAli Bahrami 	TK_INT =	12,	/* Integer value: Unsigned machine word */
15769112eddSAli Bahrami 	TK_STAR =	13,	/* * */
15869112eddSAli Bahrami 	TK_BANG =	14,	/* ! */
15969112eddSAli Bahrami 
16069112eddSAli Bahrami 	/*
16169112eddSAli Bahrami 	 * Items below this point are for the use of ld_map_gettoken().
16269112eddSAli Bahrami 	 * They indicate a character that requires the lexical analyzer
16369112eddSAli Bahrami 	 * to carry out some additional computation (OPeration), resulting
16469112eddSAli Bahrami 	 * in one of the simple token types above, which is returned to
16569112eddSAli Bahrami 	 * the caller. The TK_OP_ tokens are implementation details that are
16669112eddSAli Bahrami 	 * never returned to a caller of ld_map_gettoken().
16769112eddSAli Bahrami 	 */
16869112eddSAli Bahrami 	TK_OP_EOF,		/* end of file */
16969112eddSAli Bahrami 	TK_OP_ILLCHR,		/* unprintable illegal character */
17069112eddSAli Bahrami 	TK_OP_BADCHR,		/* printable but unexpected character */
17169112eddSAli Bahrami 	TK_OP_WS,		/* whitespace */
17269112eddSAli Bahrami 	TK_OP_NL,		/* newline */
17369112eddSAli Bahrami 	TK_OP_SIMQUOTE,		/* simple quoting */
17469112eddSAli Bahrami 	TK_OP_CQUOTE,		/* quoting with C string literal escapes */
17569112eddSAli Bahrami 	TK_OP_CMT,		/* Comment */
17669112eddSAli Bahrami 	TK_OP_CDIR,		/* Control directive */
17769112eddSAli Bahrami 	TK_OP_NUM,		/* Decimial, hex, or octal value */
17869112eddSAli Bahrami 	TK_OP_ID,		/* unquoted identifier using syntax rules */
17969112eddSAli Bahrami 				/*	appropriate for mapfile version */
18069112eddSAli Bahrami 	TK_OP_CEQUAL,		/* One of += or -= */
18169112eddSAli Bahrami } Token;
18269112eddSAli Bahrami 
18369112eddSAli Bahrami /*
18469112eddSAli Bahrami  * Type used by ld_map_gettoken() to return values for token types that
18569112eddSAli Bahrami  * have them.
18669112eddSAli Bahrami  */
18769112eddSAli Bahrami typedef union {
18869112eddSAli Bahrami 	char	*tkv_str;		/* TK_STRING */
18969112eddSAli Bahrami 	struct {			/* TK_INT */
19069112eddSAli Bahrami 		char	*tkvi_str;	/* String making up integer */
19169112eddSAli Bahrami 		size_t	tkvi_cnt;	/* # characters in tkvi_str */
19269112eddSAli Bahrami 		Xword	tkvi_value;	/* Resulting value */
19369112eddSAli Bahrami 	} tkv_int;
19469112eddSAli Bahrami } ld_map_tkval_t;
19569112eddSAli Bahrami 
19669112eddSAli Bahrami /*
19769112eddSAli Bahrami  * Values for gettoken() flags argument. These flags are used to
19869112eddSAli Bahrami  * alter gettoken() default behavior under certain conditions.
19969112eddSAli Bahrami  */
20069112eddSAli Bahrami #define	TK_F_EOFOK	1	/* Quietly return TK_EOF instead of normal */
20169112eddSAli Bahrami 				/* 	TK_ERROR "premature EOF" error */
20269112eddSAli Bahrami #define	TK_F_STRLC	2	/* TK_STRING: Convert string to lowercase */
20369112eddSAli Bahrami #define	TK_F_KEYWORD	4	/* For directives and attributes: Disallow */
20469112eddSAli Bahrami 				/*	quoted TK_STRING tokens */
20569112eddSAli Bahrami 
20669112eddSAli Bahrami /*
20769112eddSAli Bahrami  * Possible return values from ld_map_strtoxword()
20869112eddSAli Bahrami  */
20969112eddSAli Bahrami typedef enum {
21069112eddSAli Bahrami 	STRTOXWORD_OK,		/* Operation successful */
21169112eddSAli Bahrami 	STRTOXWORD_TOOBIG,	/* Otherwise valid value is too large */
21269112eddSAli Bahrami 	STRTOXWORD_BAD		/* String not recognized as an integer */
21369112eddSAli Bahrami } ld_map_strtoxword_t;
21469112eddSAli Bahrami 
21569112eddSAli Bahrami /*
21669112eddSAli Bahrami  * Possible return values from ld_map_seg_insert()
21769112eddSAli Bahrami  */
21869112eddSAli Bahrami typedef enum {
21969112eddSAli Bahrami 	SEG_INS_OK = 0,		/* Segment was inserted */
22069112eddSAli Bahrami 	SEG_INS_FAIL = 1,	/* Segment not inserted --- fatal */
22169112eddSAli Bahrami 	SEG_INS_SKIP = 2	/* Segment not inserted --- ignore */
22269112eddSAli Bahrami } ld_map_seg_ins_t;
22369112eddSAli Bahrami 
22469112eddSAli Bahrami /*
22569112eddSAli Bahrami  * Enumeration of different symbol scope possible in a mapfile
22669112eddSAli Bahrami  */
22769112eddSAli Bahrami typedef enum {
22869112eddSAli Bahrami 	FLG_SCOPE_HIDD,		/* symbol defined hidden/local */
22969112eddSAli Bahrami 	FLG_SCOPE_DFLT,		/* symbol defined default/global */
23069112eddSAli Bahrami 	FLG_SCOPE_PROT,		/* symbol defined protected/symbolic */
23169112eddSAli Bahrami 	FLG_SCOPE_EXPT,		/* symbol defined exported */
23269112eddSAli Bahrami 	FLG_SCOPE_SNGL,		/* symbol defined singleton */
23369112eddSAli Bahrami 	FLG_SCOPE_ELIM		/* symbol defined eliminate */
23469112eddSAli Bahrami } ld_map_scope_t;
23569112eddSAli Bahrami 
23669112eddSAli Bahrami /* State of a mapfile symbol version */
23769112eddSAli Bahrami typedef struct {
23869112eddSAli Bahrami 	const char	*mv_name;	/* NULL, or version name */
23969112eddSAli Bahrami 	Ver_desc	*mv_vdp;	/* Descriptor for version */
24069112eddSAli Bahrami 	ld_map_scope_t	mv_scope;	/* Current scope type */
24169112eddSAli Bahrami 	size_t		mv_errcnt;	/* Count of errors against version */
24269112eddSAli Bahrami } ld_map_ver_t;
24369112eddSAli Bahrami 
24469112eddSAli Bahrami /* State of a mapfile symbol definition */
24569112eddSAli Bahrami typedef struct {
24669112eddSAli Bahrami 	const char	*ms_name;	/* symbol name */
24769112eddSAli Bahrami 	sd_flag_t	ms_sdflags;	/* 0 / mapfile set flags */
24869112eddSAli Bahrami 	Word		ms_shndx;	/* SHN_UNDEF / mapfile set sec index */
24969112eddSAli Bahrami 	uchar_t 	ms_type;	/* STT_NOTYPE / mapfile set type */
25069112eddSAli Bahrami 	Addr		ms_value;	/* user set value, if ms_value_set */
25169112eddSAli Bahrami 	Addr		ms_size;	/* 0 / mapfile set size */
25269112eddSAli Bahrami 	const char	*ms_filtee;	/* NULL or filtee name */
25369112eddSAli Bahrami 	Boolean		ms_value_set;	/* TRUE if ms_value set, even if to 0 */
25469112eddSAli Bahrami 	Word		ms_dft_flag;	/* 0, or type of filter in ms_filtee */
25569112eddSAli Bahrami } ld_map_sym_t;
25669112eddSAli Bahrami 
25769112eddSAli Bahrami #if	defined(_ELF64)
25869112eddSAli Bahrami 
25969112eddSAli Bahrami #define	ld_map_cap_sanitize	ld64_map_cap_sanitize
26069112eddSAli Bahrami #define	ld_map_cap_set_ovflag	ld64_map_cap_set_ovflag
26169112eddSAli Bahrami #define	ld_map_dv		ld64_map_dv
26269112eddSAli Bahrami #define	ld_map_dv_entry		ld64_map_dv_entry
26369112eddSAli Bahrami #define	ld_map_gettoken		ld64_map_gettoken
26469112eddSAli Bahrami #define	ld_map_ifl		ld64_map_ifl
26569112eddSAli Bahrami #define	ld_map_parse_v1		ld64_map_parse_v1
26669112eddSAli Bahrami #define	ld_map_parse_v2		ld64_map_parse_v2
26769112eddSAli Bahrami #define	ld_map_seg_alloc	ld64_map_seg_alloc
26869112eddSAli Bahrami #define	ld_map_seg_ent_add	ld64_map_seg_ent_add
26969112eddSAli Bahrami #define	ld_map_seg_ent_files	ld64_map_seg_ent_files
27069112eddSAli Bahrami #define	ld_map_seg_index	ld64_map_seg_index
27169112eddSAli Bahrami #define	ld_map_seg_insert	ld64_map_seg_insert
27269112eddSAli Bahrami #define	ld_map_seg_lookup	ld64_map_seg_lookup
27369112eddSAli Bahrami #define	ld_map_seg_os_order_add	ld64_map_seg_os_order_add
27469112eddSAli Bahrami #define	ld_map_seg_size_symbol	ld64_map_seg_size_symbol
27569112eddSAli Bahrami #define	ld_map_seg_stack	ld64_map_seg_stack
27669112eddSAli Bahrami #define	ld_map_strtoxword	ld64_map_strtoxword
27769112eddSAli Bahrami #define	ld_map_sym_enter	ld64_map_sym_enter
27869112eddSAli Bahrami #define	ld_map_sym_filtee	ld64_map_sym_filtee
27969112eddSAli Bahrami #define	ld_map_sym_scope	ld64_map_sym_scope
28069112eddSAli Bahrami #define	ld_map_sym_autoreduce	ld64_map_sym_autoreduce
28169112eddSAli Bahrami #define	ld_map_sym_ver_fini	ld64_map_sym_ver_fini
28269112eddSAli Bahrami #define	ld_map_sym_ver_init	ld64_map_sym_ver_init
28369112eddSAli Bahrami #define	ld_map_tokenstr		ld64_map_tokenstr
28469112eddSAli Bahrami 
28569112eddSAli Bahrami #else
28669112eddSAli Bahrami 
28769112eddSAli Bahrami #define	ld_map_cap_sanitize	ld32_map_cap_sanitize
28869112eddSAli Bahrami #define	ld_map_cap_set_ovflag	ld32_map_cap_set_ovflag
28969112eddSAli Bahrami #define	ld_map_dv		ld32_map_dv
29069112eddSAli Bahrami #define	ld_map_dv_entry		ld32_map_dv_entry
29169112eddSAli Bahrami #define	ld_map_gettoken		ld32_map_gettoken
29269112eddSAli Bahrami #define	ld_map_ifl		ld32_map_ifl
29369112eddSAli Bahrami #define	ld_map_parse_v1		ld32_map_parse_v1
29469112eddSAli Bahrami #define	ld_map_parse_v2		ld32_map_parse_v2
29569112eddSAli Bahrami #define	ld_map_seg_alloc	ld32_map_seg_alloc
29669112eddSAli Bahrami #define	ld_map_seg_ent_add	ld32_map_seg_ent_add
29769112eddSAli Bahrami #define	ld_map_seg_ent_files	ld32_map_seg_ent_files
29869112eddSAli Bahrami #define	ld_map_seg_index	ld32_map_seg_index
29969112eddSAli Bahrami #define	ld_map_seg_insert	ld32_map_seg_insert
30069112eddSAli Bahrami #define	ld_map_seg_lookup	ld32_map_seg_lookup
30169112eddSAli Bahrami #define	ld_map_seg_os_order_add	ld32_map_seg_os_order_add
30269112eddSAli Bahrami #define	ld_map_seg_size_symbol	ld32_map_seg_size_symbol
30369112eddSAli Bahrami #define	ld_map_seg_stack	ld32_map_seg_stack
30469112eddSAli Bahrami #define	ld_map_strtoxword	ld32_map_strtoxword
30569112eddSAli Bahrami #define	ld_map_sym_enter	ld32_map_sym_enter
30669112eddSAli Bahrami #define	ld_map_sym_filtee	ld32_map_sym_filtee
30769112eddSAli Bahrami #define	ld_map_sym_scope	ld32_map_sym_scope
30869112eddSAli Bahrami #define	ld_map_sym_autoreduce	ld32_map_sym_autoreduce
30969112eddSAli Bahrami #define	ld_map_sym_ver_fini	ld32_map_sym_ver_fini
31069112eddSAli Bahrami #define	ld_map_sym_ver_init	ld32_map_sym_ver_init
31169112eddSAli Bahrami #define	ld_map_tokenstr		ld32_map_tokenstr
31269112eddSAli Bahrami 
31369112eddSAli Bahrami #endif
31469112eddSAli Bahrami 
31569112eddSAli Bahrami /*
31669112eddSAli Bahrami  * Core functions used to parse mapfiles
31769112eddSAli Bahrami  */
31869112eddSAli Bahrami extern void		ld_map_lowercase(char *);
31969112eddSAli Bahrami extern Token		ld_map_gettoken(Mapfile *, int, ld_map_tkval_t *);
32069112eddSAli Bahrami extern Boolean		ld_map_parse_v1(Mapfile *);
32169112eddSAli Bahrami extern Boolean		ld_map_parse_v2(Mapfile *);
32269112eddSAli Bahrami extern ld_map_strtoxword_t ld_map_strtoxword(const char *restrict,
32369112eddSAli Bahrami 			    char **restrict, Xword *);
32469112eddSAli Bahrami extern const char	*ld_map_tokenstr(Token, ld_map_tkval_t *,
32569112eddSAli Bahrami 			    Conv_inv_buf_t *);
32669112eddSAli Bahrami 
32769112eddSAli Bahrami /*
32869112eddSAli Bahrami  * Support code shared between the different mapfile parsing code, used to
32969112eddSAli Bahrami  * provide a common implementation manipulating link-editor state.
33069112eddSAli Bahrami  */
33108278a5eSRod Evans extern Boolean		ld_map_cap_sanitize(Mapfile *, Word, Capmask *);
33269112eddSAli Bahrami extern void		ld_map_cap_set_ovflag(Mapfile *, Word);
33369112eddSAli Bahrami extern void		*ld_map_kwfind(const char *, void *, size_t, size_t);
33469112eddSAli Bahrami extern char		*ld_map_kwnames(void *, size_t, size_t, char *, size_t);
33569112eddSAli Bahrami extern Sdf_desc		*ld_map_dv(Mapfile *, const char *);
33669112eddSAli Bahrami extern Boolean		ld_map_dv_entry(Mapfile *, Sdf_desc *, Boolean,
33769112eddSAli Bahrami 			    const char *);
33869112eddSAli Bahrami extern Ifl_desc		*ld_map_ifl(Mapfile *);
33969112eddSAli Bahrami extern Sg_desc		*ld_map_seg_alloc(const char *, Word, sg_flags_t);
34069112eddSAli Bahrami extern Ent_desc		*ld_map_seg_ent_add(Mapfile *, Sg_desc *, const char *);
34169112eddSAli Bahrami extern Boolean		ld_map_seg_ent_files(Mapfile *mf, Ent_desc *,
34269112eddSAli Bahrami 			    Word, const char *);
34369112eddSAli Bahrami extern Xword		ld_map_seg_index(Mapfile *, Sg_desc *);
34469112eddSAli Bahrami extern ld_map_seg_ins_t	ld_map_seg_insert(Mapfile *, dbg_state_t, Sg_desc *,
34569112eddSAli Bahrami 			    avl_index_t where);
34669112eddSAli Bahrami extern Boolean		ld_map_seg_os_order_add(Mapfile *, Sg_desc *,
34769112eddSAli Bahrami 			    const char *);
34869112eddSAli Bahrami extern Boolean		ld_map_seg_size_symbol(Mapfile *, Sg_desc *, Token,
34969112eddSAli Bahrami 			    const char *symname);
35069112eddSAli Bahrami extern Sg_desc		*ld_map_seg_stack(Mapfile *);
35169112eddSAli Bahrami extern Boolean		ld_map_sym_enter(Mapfile *, ld_map_ver_t *,
35269112eddSAli Bahrami 			    ld_map_sym_t *);
35369112eddSAli Bahrami extern void		ld_map_sym_filtee(Mapfile *, ld_map_ver_t *,
35469112eddSAli Bahrami 			    ld_map_sym_t *, Word, const char *);
35569112eddSAli Bahrami extern void		ld_map_sym_scope(Mapfile *, const char *,
35669112eddSAli Bahrami 			    ld_map_ver_t *);
35769112eddSAli Bahrami extern void		ld_map_sym_autoreduce(Mapfile *, ld_map_ver_t *);
35869112eddSAli Bahrami extern Boolean		ld_map_sym_ver_fini(Mapfile *, ld_map_ver_t *);
35969112eddSAli Bahrami extern Boolean		ld_map_sym_ver_init(Mapfile *, char *, ld_map_ver_t *);
36069112eddSAli Bahrami 
36169112eddSAli Bahrami #ifdef	__cplusplus
36269112eddSAli Bahrami }
36369112eddSAli Bahrami #endif
36469112eddSAli Bahrami 
36569112eddSAli Bahrami #endif /* _MAP_DOT_H */
366