map.c revision 92a0208178405fef708b0283ffcaa02fbc3468ff
080575042aba2197b425ebfd52061dea061a9aa1xy * CDDL HEADER START
080575042aba2197b425ebfd52061dea061a9aa1xy * The contents of this file are subject to the terms of the
080575042aba2197b425ebfd52061dea061a9aa1xy * Common Development and Distribution License (the "License").
080575042aba2197b425ebfd52061dea061a9aa1xy * You may not use this file except in compliance with the License.
080575042aba2197b425ebfd52061dea061a9aa1xy * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d5c3073dbbd835e1e9b7dca0c6c770cf3cc20afachenlu chen - Sun Microsystems - Beijing China * or http://www.opensolaris.org/os/licensing.
080575042aba2197b425ebfd52061dea061a9aa1xy * See the License for the specific language governing permissions
080575042aba2197b425ebfd52061dea061a9aa1xy * and limitations under the License.
080575042aba2197b425ebfd52061dea061a9aa1xy * When distributing Covered Code, include this CDDL HEADER in each
080575042aba2197b425ebfd52061dea061a9aa1xy * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
080575042aba2197b425ebfd52061dea061a9aa1xy * If applicable, add the following below this CDDL HEADER, with the
080575042aba2197b425ebfd52061dea061a9aa1xy * fields enclosed by brackets "[]" replaced with your own identifying
080575042aba2197b425ebfd52061dea061a9aa1xy * information: Portions Copyright [yyyy] [name of copyright owner]
080575042aba2197b425ebfd52061dea061a9aa1xy * CDDL HEADER END
193974072f41a843678abf5f61979c748687e66bSherry Moore * Copyright (c) 1988 AT&T
080575042aba2197b425ebfd52061dea061a9aa1xy * All Rights Reserved
080575042aba2197b425ebfd52061dea061a9aa1xy * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
080575042aba2197b425ebfd52061dea061a9aa1xy * Use is subject to license terms.
080575042aba2197b425ebfd52061dea061a9aa1xy * Map file parsing.
080575042aba2197b425ebfd52061dea061a9aa1xy#if defined(_ELF64)
080575042aba2197b425ebfd52061dea061a9aa1xy#else /* Elf32 */
080575042aba2197b425ebfd52061dea061a9aa1xy#endif /* _ELF64 */
080575042aba2197b425ebfd52061dea061a9aa1xy/* Possible return values from gettoken */
080575042aba2197b425ebfd52061dea061a9aa1xytypedef enum {
c7770590c6dc06be2588a5c21427e2d823baa989mxstatic char *Mapspace; /* Malloc space holding map file. */
080575042aba2197b425ebfd52061dea061a9aa1xystatic ulong_t Line_num; /* Current map file line number. */
080575042aba2197b425ebfd52061dea061a9aa1xystatic char *Start_tok; /* First character of current token. */
9b6541b318d01d0d83bfb98699a7f09e35f37951glstatic char *nextchr; /* Next char in mapfile to examine. */
9b6541b318d01d0d83bfb98699a7f09e35f37951gl * Convert a string to lowercase.
080575042aba2197b425ebfd52061dea061a9aa1xystatic void
d5c3073dbbd835e1e9b7dca0c6c770cf3cc20afachenlu chen - Sun Microsystems - Beijing Chinalowercase(char *str)
d5c3073dbbd835e1e9b7dca0c6c770cf3cc20afachenlu chen - Sun Microsystems - Beijing China while (*str = tolower(*str))
080575042aba2197b425ebfd52061dea061a9aa1xy * Get a token from the mapfile.
080575042aba2197b425ebfd52061dea061a9aa1xy * ofl - Output file descriptor
0c56b8d9d1c30af2e78d0a6fd8a6a70aa5310099changqing li - Sun Microsystems - Beijing China * mapfile - Name of mapfile
080575042aba2197b425ebfd52061dea061a9aa1xy * eof_ok - If False, end of file causes a premature EOF error to be
c7770590c6dc06be2588a5c21427e2d823baa989mx * issued. If True, TK_EOF is returned quietly.
4d7379630d53d9992780329b674af8c85935e858xiangtao you - Sun Microsystems - Beijing Chinagettoken(Ofl_desc *ofl, const char *mapfile, int eof_ok)
c7770590c6dc06be2588a5c21427e2d823baa989mx static char oldchr = '\0'; /* Char at end of current token. */
4d7379630d53d9992780329b674af8c85935e858xiangtao you - Sun Microsystems - Beijing China char *end; /* End of the current token. */
080575042aba2197b425ebfd52061dea061a9aa1xy /* Cycle through the characters looking for tokens. */
080575042aba2197b425ebfd52061dea061a9aa1xy for (;;) {
25f2d433de915875c8393f0b0dc14aa155997ad0xy switch (*nextchr) {
0c56b8d9d1c30af2e78d0a6fd8a6a70aa5310099changqing li - Sun Microsystems - Beijing China case ' ': /* White space. */
25f2d433de915875c8393f0b0dc14aa155997ad0xy case '\t':
0c56b8d9d1c30af2e78d0a6fd8a6a70aa5310099changqing li - Sun Microsystems - Beijing China return (TK_COLON);
1bc1c72171ee0c5d77203ddffb90219d991bd6e8guoqing zhu - Sun Microsystems - Beijing China return (TK_EQUAL);
1bc1c72171ee0c5d77203ddffb90219d991bd6e8guoqing zhu - Sun Microsystems - Beijing China return (TK_ATSIGN);
c7770590c6dc06be2588a5c21427e2d823baa989mx default: /* string. */
3d15c084da89e6f689f1804f3e2e600e5376c4e1chenlu chen - Sun Microsystems - Beijing China return (TK_STRING);
54e0d7a5e8285a3f01a0db8db1246ac7cac94d81Miles Xu, Sun Microsystems * Process a hardware/software capabilities segment declaration definition.
080575042aba2197b425ebfd52061dea061a9aa1xy * hwcap_1 = val,... [ OVERRIDE ]
080575042aba2197b425ebfd52061dea061a9aa1xy * sfcap_1 = val,... [ OVERRIDE ]
080575042aba2197b425ebfd52061dea061a9aa1xy * The values can be defined as a list of machine specify tokens, or numerics.
080575042aba2197b425ebfd52061dea061a9aa1xy * Tokens are representations of the sys/auxv_$MACH.h capabilities, for example:
080575042aba2197b425ebfd52061dea061a9aa1xy * #define AV_386_FPU 0x0001 is represented as FPU
080575042aba2197b425ebfd52061dea061a9aa1xy * #define AV_386_TSC 0x0002 " " " " TSC
080575042aba2197b425ebfd52061dea061a9aa1xy * Or, the above two capabilities could be represented as V0x3. Note, the
080575042aba2197b425ebfd52061dea061a9aa1xy * OVERRIDE flag is used to insure that only those values provided via this
080575042aba2197b425ebfd52061dea061a9aa1xy * mapfile entry are recorded in the final image, ie. this overrides any
080575042aba2197b425ebfd52061dea061a9aa1xy * hardware capabilities that may be defined in the objects read as part of this
080575042aba2197b425ebfd52061dea061a9aa1xy * link-edit. Specifying:
080575042aba2197b425ebfd52061dea061a9aa1xy * V0x0 OVERRIDE
54e0d7a5e8285a3f01a0db8db1246ac7cac94d81Miles Xu, Sun Microsystems * effectively removes any capabilities information from the final image.
ae6aa22afeb444ae208c287e7227a4a7c877f17aVenugopal Iyermap_cap(const char *mapfile, Word type, Ofl_desc *ofl)
080575042aba2197b425ebfd52061dea061a9aa1xy while ((tok = gettoken(ofl, mapfile, 0)) != TK_SEMICOLON) {
080575042aba2197b425ebfd52061dea061a9aa1xy * First, determine if the token represents the reserved
080575042aba2197b425ebfd52061dea061a9aa1xy * OVERRIDE keyword.
25f2d433de915875c8393f0b0dc14aa155997ad0xy * Next, determine if the token represents a machine specific
4045d94132614e1de2073685a6cdd4fbd86bec33sowmini * hardware capability, or a generic software capability.
080575042aba2197b425ebfd52061dea061a9aa1xy * Next, determine if the token represents a numeric value.
caf05df5c10c960028f122b1b02a3f7d8f892c31Miles Xu, Sun Microsystems mapfile, EC_XWORD(Line_num), Start_tok,
080575042aba2197b425ebfd52061dea061a9aa1xy * We have an unknown token.
080575042aba2197b425ebfd52061dea061a9aa1xy eprintf(ofl->ofl_lml, ERR_FATAL, MSG_INTL(MSG_MAP_UNKCAPATTR),
ea6b684a18957883cb91b3d22a9d989f986e5a32yy * Catch any empty declarations, and indicate any software capabilities
ea6b684a18957883cb91b3d22a9d989f986e5a32yy * have been initialized if necessary.
080575042aba2197b425ebfd52061dea061a9aa1xy if (used == 0) {
c7770590c6dc06be2588a5c21427e2d823baa989mx eprintf(ofl->ofl_lml, ERR_WARNING, MSG_INTL(MSG_MAP_EMPTYCAP),
46ebaa55cce1df60528a191312d12199d38a4493Miles Xu, Sun Microsystems * Note, hardware capabilities, beyond the tokens that are
46ebaa55cce1df60528a191312d12199d38a4493Miles Xu, Sun Microsystems * presently known, can be accepted using the V0xXXX notation,
46ebaa55cce1df60528a191312d12199d38a4493Miles Xu, Sun Microsystems * and as these simply get or'd into the output image, we allow
080575042aba2197b425ebfd52061dea061a9aa1xy * any values to be supplied. Software capability tokens
080575042aba2197b425ebfd52061dea061a9aa1xy * however, have an algorithm of acceptance and update (see
080575042aba2197b425ebfd52061dea061a9aa1xy * sf1_cap() in files.c). Therefore only allow software
080575042aba2197b425ebfd52061dea061a9aa1xy * capabilities that are known.
080575042aba2197b425ebfd52061dea061a9aa1xy if ((badsf1 = (ofl->ofl_sfcap_1 & ~SF1_SUNW_MASK)) != 0) {
080575042aba2197b425ebfd52061dea061a9aa1xy return (1);
080575042aba2197b425ebfd52061dea061a9aa1xy * Common segment error checking.
080575042aba2197b425ebfd52061dea061a9aa1xyseg_check(const char *mapfile, Sg_desc *sgp, Ofl_desc *ofl, Boolean b_type,
080575042aba2197b425ebfd52061dea061a9aa1xy eprintf(ofl->ofl_lml, ERR_FATAL, MSG_INTL(MSG_MAP_MOREONCE),
080575042aba2197b425ebfd52061dea061a9aa1xy if ((sgp->sg_flags & FLG_SG_TYPE) && (sgp->sg_phdr.p_type != p_type)) {
080575042aba2197b425ebfd52061dea061a9aa1xy eprintf(ofl->ofl_lml, ERR_WARNING, MSG_INTL(MSG_MAP_REDEFATT),
080575042aba2197b425ebfd52061dea061a9aa1xy * Process a mapfile segment declaration definition.
080575042aba2197b425ebfd52061dea061a9aa1xy * segment_name = segment_attribute;
080575042aba2197b425ebfd52061dea061a9aa1xy * segment_attribute : segment_type segment_flags virtual_addr
080575042aba2197b425ebfd52061dea061a9aa1xy * physical_addr length alignment
080575042aba2197b425ebfd52061dea061a9aa1xymap_equal(const char *mapfile, Sg_desc *sgp, Ofl_desc *ofl)
080575042aba2197b425ebfd52061dea061a9aa1xy Boolean b_round = FALSE; /* True if seg rounding found. */
080575042aba2197b425ebfd52061dea061a9aa1xy Boolean b_vaddr = FALSE; /* True if seg virtual addr found. */
080575042aba2197b425ebfd52061dea061a9aa1xy Boolean b_paddr = FALSE; /* True if seg physical addr found. */
080575042aba2197b425ebfd52061dea061a9aa1xy Boolean b_align = FALSE; /* True if seg alignment found. */
080575042aba2197b425ebfd52061dea061a9aa1xy while ((tok = gettoken(ofl, mapfile, 0)) != TK_SEMICOLON) {
080575042aba2197b425ebfd52061dea061a9aa1xy * Segment type. Users are permitted to define PT_LOAD,
080575042aba2197b425ebfd52061dea061a9aa1xy * PT_NOTE, PT_STACK and PT_NULL segments. Other segment types
080575042aba2197b425ebfd52061dea061a9aa1xy * are only defined in seg_desc[].
080575042aba2197b425ebfd52061dea061a9aa1xy } else if (strcmp(Start_tok, MSG_ORIG(MSG_MAP_STACK)) == 0) {
080575042aba2197b425ebfd52061dea061a9aa1xy } else if (strcmp(Start_tok, MSG_ORIG(MSG_MAP_NULL)) == 0) {
080575042aba2197b425ebfd52061dea061a9aa1xy } else if (strcmp(Start_tok, MSG_ORIG(MSG_MAP_NOTE)) == 0) {
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng /* Segment Flags. */
080575042aba2197b425ebfd52061dea061a9aa1xy * If ? has nothing following leave the flags cleared,
080575042aba2197b425ebfd52061dea061a9aa1xy * otherwise or in any flags specified.
080575042aba2197b425ebfd52061dea061a9aa1xy switch (*flag_tok) {
080575042aba2197b425ebfd52061dea061a9aa1xy * Warn when changing flags except when we're
080575042aba2197b425ebfd52061dea061a9aa1xy * adding or removing "X" from a RW PT_LOAD
080575042aba2197b425ebfd52061dea061a9aa1xy * segment.
54e0d7a5e8285a3f01a0db8db1246ac7cac94d81Miles Xu, Sun Microsystems MSG_INTL(MSG_MAP_SEGFLAG), sgp->sg_name);
080575042aba2197b425ebfd52061dea061a9aa1xy /* Segment address, length, alignment or rounding number. */
080575042aba2197b425ebfd52061dea061a9aa1xy else if ((Start_tok[0] == 'l') || (Start_tok[0] == 'v') ||
080575042aba2197b425ebfd52061dea061a9aa1xy switch (*Start_tok) {
54e0d7a5e8285a3f01a0db8db1246ac7cac94d81Miles Xu, Sun Microsystems eprintf(ofl->ofl_lml, ERR_WARNING,
080575042aba2197b425ebfd52061dea061a9aa1xy /* LINTED */
080575042aba2197b425ebfd52061dea061a9aa1xy /* LINTED */
080575042aba2197b425ebfd52061dea061a9aa1xy /* LINTED */
080575042aba2197b425ebfd52061dea061a9aa1xy * Empty segments can be used to define PT_LOAD segment reservations, or
25f2d433de915875c8393f0b0dc14aa155997ad0xy * to reserve PT_NULL program headers.
080575042aba2197b425ebfd52061dea061a9aa1xy * PT_LOAD reservations are only allowed within executables, as the
080575042aba2197b425ebfd52061dea061a9aa1xy * reservation must be established through exec() as part of initial
080575042aba2197b425ebfd52061dea061a9aa1xy * process loading. In addition, PT_LOAD reservations must have an
25f2d433de915875c8393f0b0dc14aa155997ad0xy * associated address and size.
25f2d433de915875c8393f0b0dc14aa155997ad0xy * PT_NULL program headers are established for later use by applications
25f2d433de915875c8393f0b0dc14aa155997ad0xy * such as the post-optimizer. PT_NULL headers should have no other
080575042aba2197b425ebfd52061dea061a9aa1xy * attributes assigned.
080575042aba2197b425ebfd52061dea061a9aa1xy * Any style of empty segment should have no permissions.
080575042aba2197b425ebfd52061dea061a9aa1xy * All segment attributes have now been scanned. Certain flags do not
080575042aba2197b425ebfd52061dea061a9aa1xy * make sense if this is not a loadable segment, fix if necessary.
47b7744cbea59975a6b583125b7ed1ff2ac45313yy * Note, if the segment is of type PT_NULL it must be new, and any
080575042aba2197b425ebfd52061dea061a9aa1xy * defaults will be applied back in ld_map_parse().
080575042aba2197b425ebfd52061dea061a9aa1xy * When clearing an attribute leave the flag set as an indicator for
080575042aba2197b425ebfd52061dea061a9aa1xy * later entries re-specifying the same segment.
080575042aba2197b425ebfd52061dea061a9aa1xy const char *fmt;
25f2d433de915875c8393f0b0dc14aa155997ad0xy return (1);
25f2d433de915875c8393f0b0dc14aa155997ad0xy * Process a mapfile mapping directives definition.
25f2d433de915875c8393f0b0dc14aa155997ad0xy * segment_name : section_attribute [ : file_name ]
25f2d433de915875c8393f0b0dc14aa155997ad0xy * segment_attribute : section_name section_type section_flags;
25f2d433de915875c8393f0b0dc14aa155997ad0xymap_colon(Ofl_desc *ofl, const char *mapfile, Ent_desc *enp)
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng while (((tok = gettoken(ofl, mapfile, 0)) != TK_COLON) &&
080575042aba2197b425ebfd52061dea061a9aa1xy /* Segment type. */
54e0d7a5e8285a3f01a0db8db1246ac7cac94d81Miles Xu, Sun Microsystems if (strcmp(Start_tok, MSG_ORIG(MSG_STR_PROGBITS)) == 0)
54e0d7a5e8285a3f01a0db8db1246ac7cac94d81Miles Xu, Sun Microsystems (strcmp(Start_tok, MSG_ORIG(MSG_STR_RELA)) == 0))
54e0d7a5e8285a3f01a0db8db1246ac7cac94d81Miles Xu, Sun Microsystems enp->ec_type = ld_targ.t_m.m_rel_sht_type;
54e0d7a5e8285a3f01a0db8db1246ac7cac94d81Miles Xu, Sun Microsystems else if (strcmp(Start_tok, MSG_ORIG(MSG_STR_HASH)) == 0)
54e0d7a5e8285a3f01a0db8db1246ac7cac94d81Miles Xu, Sun Microsystems else if (strcmp(Start_tok, MSG_ORIG(MSG_STR_LIB)) == 0)
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng else if (strcmp(Start_tok, MSG_ORIG(MSG_STR_NOTE)) == 0)
46ebaa55cce1df60528a191312d12199d38a4493Miles Xu, Sun Microsystems MSG_INTL(MSG_MAP_UNKSECTYP), mapfile,
080575042aba2197b425ebfd52061dea061a9aa1xy * Segment flags.
080575042aba2197b425ebfd52061dea061a9aa1xy * If a segment flag is specified then the appropriate bit is
080575042aba2197b425ebfd52061dea061a9aa1xy * set in the ec_attrmask, the ec_attrbits fields determine
080575042aba2197b425ebfd52061dea061a9aa1xy * whether the attrmask fields must be tested true or false
080575042aba2197b425ebfd52061dea061a9aa1xy * ie. for ?A the attrmask is set and the attrbit is set,
080575042aba2197b425ebfd52061dea061a9aa1xy * for ?!A the attrmask is set and the attrbit is clear.
54e0d7a5e8285a3f01a0db8db1246ac7cac94d81Miles Xu, Sun Microsystems MSG_INTL(MSG_MAP_MOREONCE), mapfile,
d5c3073dbbd835e1e9b7dca0c6c770cf3cc20afachenlu chen - Sun Microsystems - Beijing China b_bang = FALSE;
a2e9a8308e6b9832ce4d7b848660483fc31d1dc7cc switch (*Start_tok) {
ede5269ebe7fa3787cc9b58c3781b639c578f93dchenlu chen - Sun Microsystems - Beijing China MSG_INTL(MSG_MAP_BADFLAG),
1bc1c72171ee0c5d77203ddffb90219d991bd6e8guoqing zhu - Sun Microsystems - Beijing China if (enp->ec_attrmask & SHF_EXECINSTR) {
1bc1c72171ee0c5d77203ddffb90219d991bd6e8guoqing zhu - Sun Microsystems - Beijing China eprintf(ofl->ofl_lml, ERR_FATAL,
1bc1c72171ee0c5d77203ddffb90219d991bd6e8guoqing zhu - Sun Microsystems - Beijing China MSG_INTL(MSG_MAP_BADFLAG),
1bc1c72171ee0c5d77203ddffb90219d991bd6e8guoqing zhu - Sun Microsystems - Beijing China mapfile, EC_XWORD(Line_num),
47b7744cbea59975a6b583125b7ed1ff2ac45313yy * Section name.
25f2d433de915875c8393f0b0dc14aa155997ad0xy * get the index for text reordering
080575042aba2197b425ebfd52061dea061a9aa1xy /* LINTED */
080575042aba2197b425ebfd52061dea061a9aa1xy * File names.
080575042aba2197b425ebfd52061dea061a9aa1xy while ((tok = gettoken(ofl, mapfile, 0)) != TK_SEMICOLON) {
0c56b8d9d1c30af2e78d0a6fd8a6a70aa5310099changqing li - Sun Microsystems - Beijing China eprintf(ofl->ofl_lml, ERR_FATAL,
0c56b8d9d1c30af2e78d0a6fd8a6a70aa5310099changqing li - Sun Microsystems - Beijing China MSG_INTL(MSG_MAP_MALFORM), mapfile,
0c56b8d9d1c30af2e78d0a6fd8a6a70aa5310099changqing li - Sun Microsystems - Beijing China EC_XWORD(Line_num));
080575042aba2197b425ebfd52061dea061a9aa1xy * Obtain a pseudo input file descriptor to assign to a mapfile. This is
080575042aba2197b425ebfd52061dea061a9aa1xy * required any time a symbol is generated. First traverse the input file
080575042aba2197b425ebfd52061dea061a9aa1xy * descriptors looking for a match. As all mapfile processing occurs before
080575042aba2197b425ebfd52061dea061a9aa1xy * any real input file processing this list is going to be small and we don't
25f2d433de915875c8393f0b0dc14aa155997ad0xy * need to do any filename clash checking.
4914a7d0d1ee59f8cc21b19bfd7979cb65681eacyy ifl->ifl_flags = (FLG_IF_MAPFILE | FLG_IF_NEEDED | FLG_IF_FILEREF);
9b6541b318d01d0d83bfb98699a7f09e35f37951gl if ((ifl->ifl_ehdr = libld_calloc(sizeof (Ehdr), 1)) == 0)
4045d94132614e1de2073685a6cdd4fbd86bec33sowmini * Process a mapfile size symbol definition.
4045d94132614e1de2073685a6cdd4fbd86bec33sowmini * segment_name @ symbol_name;
4045d94132614e1de2073685a6cdd4fbd86bec33sowminimap_atsign(const char *mapfile, Sg_desc *sgp, Ofl_desc *ofl)
4045d94132614e1de2073685a6cdd4fbd86bec33sowmini if ((tok = gettoken(ofl, mapfile, 0)) != TK_STRING) {
4045d94132614e1de2073685a6cdd4fbd86bec33sowmini eprintf(ofl->ofl_lml, ERR_FATAL, MSG_INTL(MSG_MAP_SEGSIZE),
4045d94132614e1de2073685a6cdd4fbd86bec33sowmini * Make sure we have a pseudo file descriptor to associate to the
4045d94132614e1de2073685a6cdd4fbd86bec33sowmini if ((ifl = map_ifl(mapfile, ofl)) == (Ifl_desc *)S_ERROR)
080575042aba2197b425ebfd52061dea061a9aa1xy * Make sure the symbol doesn't already exist. It is possible that the
080575042aba2197b425ebfd52061dea061a9aa1xy * symbol has been scoped or versioned, in which case it does exist
080575042aba2197b425ebfd52061dea061a9aa1xy * but we can freely update it here.
080575042aba2197b425ebfd52061dea061a9aa1xy if ((sdp = ld_sym_find(Start_tok, SYM_NOHASH, &where, ofl)) == NULL) {
080575042aba2197b425ebfd52061dea061a9aa1xy if ((sdp = ld_sym_enter(name, sym, hval, ifl, ofl, 0, SHN_ABS,
080575042aba2197b425ebfd52061dea061a9aa1xy * Assign the symbol to the segment.
return (S_ERROR);
static uintptr_t
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
static uintptr_t
char *version;
MD_NONE = 0,
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
switch (dolkey) {
case MD_NEEDED:
return (S_ERROR);
case MD_SPECVERS:
case MD_ADDVERS:
return (S_ERROR);
FLG_SDF_ADDVER)) {
return (S_ERROR);
if ((version =
return (S_ERROR);
return (S_ERROR);
case MD_NONE:
return (S_ERROR);
return (S_ERROR);
Start_tok++;
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
static uintptr_t
return (S_ERROR);
return (S_ERROR);
if (name) {
return (S_ERROR);
const char *conflict;
return (S_ERROR);
errcnt++;
return (S_ERROR);
errcnt++;
switch (tok) {
case TK_COLON:
_name) == 0) ||
_name) == 0) ||
_name) == 0) {
_name) == 0) {
_name) == 0) {
errcnt++;
case TK_EQUAL:
TK_SEMICOLON) {
return (S_ERROR);
if (filter) {
if (filtee) {
_name);
errcnt++;
return (S_ERROR);
filter = 0;
char *end_tok;
XWORD_MAX) {
errcnt++;
if (end_tok !=
errcnt++;
switch (*Start_tok) {
if (value) {
errcnt++;
novalue = 0;
if (size) {
errcnt++;
errcnt++;
errcnt++;
case TK_SEMICOLON:
scope));
return (S_ERROR);
if (sym_flags &
errcnt++;
return (S_ERROR);
* used to flag undefined/misspelled entries.
conflict =
conflict =
conflict =
VER_NDX_GLOBAL) &&
conflict =
if (conflict) {
errcnt++;
size)) ==
return (S_ERROR);
size)) ==
return (S_ERROR);
if (conflict) {
conflict);
errcnt++;
errcnt++;
if (filtee) {
dftp)) {
return (S_ERROR);
return (S_ERROR);
errcnt++;
if (errcnt)
return (S_ERROR);
char *_name;
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
sgp1) == 0)
return (S_ERROR);
return (S_ERROR);
sgp1) == 0)
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
char *name;
int err;
return (S_ERROR);
return (S_ERROR);
mapfile);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
ndx++;
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
enp)) == 0)
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
return (S_ERROR);
if (new_segment) {
case PT_LOAD:
case PT_NULL:
case PT_SUNWSTACK:
case PT_NOTE:
return (S_ERROR);
ndx++;
case PT_PHDR:
dst_type = 0;
case PT_INTERP:
case PT_SUNWCAP:
case PT_LOAD:
case PT_DYNAMIC:
case PT_SUNWDTRACE:
case PT_SHLIB:
case PT_SUNWSTACK:
case PT_NOTE:
case PT_SUNWBSS:
case PT_TLS:
case PT_NULL:
return (S_ERROR);
if (list_prependc(
return (S_ERROR);
return (S_ERROR);