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