diff options
Diffstat (limited to 'usr/src')
26 files changed, 354 insertions, 62 deletions
diff --git a/usr/src/cmd/sgs/dump/common/dump.c b/usr/src/cmd/sgs/dump/common/dump.c index 48f2138125..fe3fa1f244 100644 --- a/usr/src/cmd/sgs/dump/common/dump.c +++ b/usr/src/cmd/sgs/dump/common/dump.c @@ -1209,6 +1209,7 @@ dump_dynamic(Elf *elf_file, SCNTAB *p_scns, int num_scns, char *filename) case DT_SUNW_SORTENT: case DT_SUNW_SYMSORTSZ: case DT_SUNW_TLSSORTSZ: + case DT_SUNW_STRPAD: (void) printf(pdyn_Fmtptr, EC_XWORD(p_dyn.d_un.d_val)); break; diff --git a/usr/src/cmd/sgs/elfdump/common/elfdump.c b/usr/src/cmd/sgs/elfdump/common/elfdump.c index b5ae49fec1..d5b024acf4 100644 --- a/usr/src/cmd/sgs/elfdump/common/elfdump.c +++ b/usr/src/cmd/sgs/elfdump/common/elfdump.c @@ -1668,7 +1668,7 @@ dynamic(Cache *cache, Word shnum, Ehdr *ehdr, const char *file) for (cnt = 1; cnt < shnum; cnt++) { Dyn *dyn; ulong_t numdyn; - int ndx; + int ndx, end_ndx; Cache *_cache = &cache[cnt], *strsec; Shdr *shdr = _cache->c_shdr; @@ -1704,32 +1704,61 @@ dynamic(Cache *cache, Word shnum, Ehdr *ehdr, const char *file) * Print the information numerically, and if possible * as a string. */ - if ((dyn->d_tag == DT_NEEDED) || - (dyn->d_tag == DT_SONAME) || - (dyn->d_tag == DT_FILTER) || - (dyn->d_tag == DT_AUXILIARY) || - (dyn->d_tag == DT_CONFIG) || - (dyn->d_tag == DT_RPATH) || - (dyn->d_tag == DT_RUNPATH) || - (dyn->d_tag == DT_USED) || - (dyn->d_tag == DT_DEPAUDIT) || - (dyn->d_tag == DT_AUDIT) || - (dyn->d_tag == DT_SUNW_AUXILIARY) || - (dyn->d_tag == DT_SUNW_FILTER)) + switch (dyn->d_tag) { + case DT_NULL: + /* + * Special case: DT_NULLs can come in groups + * that we prefer to reduce to a single line. + */ + end_ndx = ndx; + while ((end_ndx < (numdyn - 1)) && + ((dyn + 1)->d_tag == DT_NULL)) { + dyn++; + end_ndx++; + } + Elf_dyn_null_entry(0, dyn, ndx, end_ndx); + ndx = end_ndx; + continue; + + /* + * Print the information numerically, and if possible + * as a string. + */ + case DT_NEEDED: + case DT_SONAME: + case DT_FILTER: + case DT_AUXILIARY: + case DT_CONFIG: + case DT_RPATH: + case DT_RUNPATH: + case DT_USED: + case DT_DEPAUDIT: + case DT_AUDIT: + case DT_SUNW_AUXILIARY: + case DT_SUNW_FILTER: name = string(_cache, ndx, strsec, file, dyn->d_un.d_ptr); - else if (dyn->d_tag == DT_FLAGS) + break; + + case DT_FLAGS: name = conv_dyn_flag(dyn->d_un.d_val, 0); - else if (dyn->d_tag == DT_FLAGS_1) + break; + case DT_FLAGS_1: name = conv_dyn_flag1(dyn->d_un.d_val); - else if (dyn->d_tag == DT_POSFLAG_1) + break; + case DT_POSFLAG_1: name = conv_dyn_posflag1(dyn->d_un.d_val, 0); - else if (dyn->d_tag == DT_FEATURE_1) + break; + case DT_FEATURE_1: name = conv_dyn_feature1(dyn->d_un.d_val, 0); - else if (dyn->d_tag == DT_DEPRECATED_SPARC_REGISTER) + break; + case DT_DEPRECATED_SPARC_REGISTER: name = MSG_INTL(MSG_STR_DEPRECATED); - else + break; + default: name = MSG_ORIG(MSG_STR_EMPTY); + break; + } Elf_dyn_entry(0, dyn, ndx, name, ehdr->e_machine); } diff --git a/usr/src/cmd/sgs/include/conv.h b/usr/src/cmd/sgs/include/conv.h index 45b0885a9a..531852ad78 100644 --- a/usr/src/cmd/sgs/include/conv.h +++ b/usr/src/cmd/sgs/include/conv.h @@ -193,6 +193,7 @@ extern const char *conv_ver_flags(Half); #define conv_ehdr_data conv64_ehdr_data #define conv_ehdr_flags conv64_ehdr_flags #define conv_ehdr_mach conv64_ehdr_mach +#define conv_ehdr_osabi conv64_ehdr_osabi #define conv_ehdr_type conv64_ehdr_type #define conv_ehdr_vers conv64_ehdr_vers #define conv_expn_field conv64_expn_field @@ -229,6 +230,7 @@ extern const char *conv_ver_flags(Half); #define conv_ehdr_data conv32_ehdr_data #define conv_ehdr_flags conv32_ehdr_flags #define conv_ehdr_mach conv32_ehdr_mach +#define conv_ehdr_osabi conv32_ehdr_osabi #define conv_ehdr_type conv32_ehdr_type #define conv_ehdr_vers conv32_ehdr_vers #define conv_expn_field conv32_expn_field @@ -266,6 +268,7 @@ extern const char *conv_ehdr_class(uchar_t, int); extern const char *conv_ehdr_data(uchar_t, int); extern const char *conv_ehdr_flags(Half, Word); extern const char *conv_ehdr_mach(Half, int); +extern const char *conv_ehdr_osabi(uchar_t, int); extern const char *conv_ehdr_type(Half, int); extern const char *conv_ehdr_vers(Word, int); extern int conv_expn_field(CONV_EXPN_FIELD_ARG *); diff --git a/usr/src/cmd/sgs/include/debug.h b/usr/src/cmd/sgs/include/debug.h index d82b0b0bba..05a7e33a8d 100644 --- a/usr/src/cmd/sgs/include/debug.h +++ b/usr/src/cmd/sgs/include/debug.h @@ -849,6 +849,7 @@ extern void Elf_syminfo_title(Lm_list *); #define Elf_demangle_name Elf64_demangle_name #define Elf_dyn_entry Elf64_dyn_entry +#define Elf_dyn_null_entry Elf64_dyn_null_entry #define Elf_dyn_title Elf64_dyn_title #define Elf_ehdr Elf64_ehdr @@ -884,6 +885,7 @@ extern void Elf_syminfo_title(Lm_list *); #define Elf_demangle_name Elf32_demangle_name #define Elf_dyn_entry Elf32_dyn_entry +#define Elf_dyn_null_entry Elf32_dyn_null_entry #define Elf_dyn_title Elf32_dyn_title #define Elf_ehdr Elf32_ehdr @@ -920,6 +922,7 @@ extern void Elf_cap_title(Lm_list *); extern const char \ *Elf_demangle_name(const char *); extern void Elf_dyn_entry(Lm_list *, Dyn *, int, const char *, Half); +extern void Elf_dyn_null_entry(Lm_list *, Dyn *, int, int); extern void Elf_dyn_title(Lm_list *); extern void Elf_ehdr(Lm_list *, Ehdr *, Shdr *); @@ -955,6 +958,17 @@ extern void Elf_ver_line_4(Lm_list *, const char *); extern void Elf_ver_line_5(Lm_list *, const char *, const char *); extern void Elf_ver_need_title(Lm_list *); + +/* + * Establish GElf_*() interfaces. These are wrappers around the + * Elf64*() versions of the above functions, callable from either + * 32 or 64-bit code. Note that they omit the Lm_list argument. + * It is not needed, since GElf is never used within the runtime loader + * itself, only in ELF applications. + */ +extern void GElf_dyn_entry(GElf_Dyn *, int, const char *, GElf_Half); + + #ifdef __cplusplus } #endif diff --git a/usr/src/cmd/sgs/libconv/common/dynamic.c b/usr/src/cmd/sgs/libconv/common/dynamic.c index 4a8d5879ff..46f9b90b48 100644 --- a/usr/src/cmd/sgs/libconv/common/dynamic.c +++ b/usr/src/cmd/sgs/libconv/common/dynamic.c @@ -160,12 +160,13 @@ conv_dyn_flag1(Xword flags) { DF_1_NODUMP, MSG_ORIG(MSG_DF1_NODUMP) }, { DF_1_CONFALT, MSG_ORIG(MSG_DF1_CONFALT) }, { DF_1_ENDFILTEE, MSG_ORIG(MSG_DF1_ENDFILTEE) }, - { DF_1_DISPRELPND, MSG_ORIG(MSG_DF1_DISPRELPND) }, { DF_1_DISPRELDNE, MSG_ORIG(MSG_DF1_DISPRELDNE) }, + { DF_1_DISPRELPND, MSG_ORIG(MSG_DF1_DISPRELPND) }, { DF_1_NODIRECT, MSG_ORIG(MSG_DF1_NODIRECT) }, { DF_1_IGNMULDEF, MSG_ORIG(MSG_DF1_IGNMULDEF) }, { DF_1_NOKSYMS, MSG_ORIG(MSG_DF1_NOKSYMS) }, { DF_1_NOHDR, MSG_ORIG(MSG_DF1_NOHDR) }, + { DF_1_EDITED, MSG_ORIG(MSG_DF1_EDITED) }, { DF_1_NORELOC, MSG_ORIG(MSG_DF1_NORELOC) }, { DF_1_SYMINTPOSE, MSG_ORIG(MSG_DF1_SYMINTPOSE) }, { 0, 0 } @@ -287,7 +288,8 @@ conv_dyn_tag(Xword tag, Half mach, int fmt_flags) }; /* - * SUNW: DT_LOOS -> DT_HIOS range. + * SUNW: DT_LOOS -> DT_HIOS range. Note hole between DT_SUNW_TLSSORTSZ + * and DT_SUNW_STRPAD. We handle DT_SUNW_STRPAD as a single value below. */ static const Msg tags_sunw_auxiliary[] = { MSG_DYN_SUNW_AUXILIARY, MSG_DYN_SUNW_RTLDINF, @@ -345,6 +347,8 @@ conv_dyn_tag(Xword tag, Half mach, int fmt_flags) tags_null_alt, NULL)); DYN_RANGE(DT_PREINIT_ARRAY, tags_preinit_array); DYN_RANGE(DT_SUNW_AUXILIARY, tags_sunw_auxiliary); + if (tag == DT_SUNW_STRPAD) + return (MSG_ORIG(MSG_DYN_SUNW_STRPAD)); DYN_RANGE(DT_CHECKSUM, tags_checksum); DYN_RANGE(DT_CONFIG, tags_config); if (tag == DT_VERSYM) diff --git a/usr/src/cmd/sgs/libconv/common/dynamic.msg b/usr/src/cmd/sgs/libconv/common/dynamic.msg index 997ac48c39..1871d033a9 100644 --- a/usr/src/cmd/sgs/libconv/common/dynamic.msg +++ b/usr/src/cmd/sgs/libconv/common/dynamic.msg @@ -100,6 +100,7 @@ @ MSG_DYN_SUNW_SYMSORTSZ "SUNW_SYMSORTSZ" @ MSG_DYN_SUNW_TLSSORT "SUNW_TLSSORT" @ MSG_DYN_SUNW_TLSSORTSZ "SUNW_TLSSORTSZ" +@ MSG_DYN_SUNW_STRPAD "SUNW_STRPAD" @ MSG_DF_ORIGIN "ORIGIN" @ MSG_DF_SYMBOLIC "SYMBOLIC" @@ -128,6 +129,7 @@ @ MSG_DF1_IGNMULDEF "IGNMULDEF" @ MSG_DF1_NOKSYMS "NOKSYMS" @ MSG_DF1_NOHDR "NOHDR" +@ MSG_DF1_EDITED "EDITED" @ MSG_DF1_NORELOC "NORELOC" @ MSG_DF1_SYMINTPOSE "SYMBOL-INTERPOSE" diff --git a/usr/src/cmd/sgs/libconv/common/elf.c b/usr/src/cmd/sgs/libconv/common/elf.c index 9af5bfbaa9..ddd04d9c7d 100644 --- a/usr/src/cmd/sgs/libconv/common/elf.c +++ b/usr/src/cmd/sgs/libconv/common/elf.c @@ -20,7 +20,7 @@ */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #pragma ident "%Z%%M% %I% %E% SMI" @@ -87,7 +87,7 @@ static const Msg machines[EM_NUM] = { MSG_EM_UNKNOWN27, MSG_EM_UNKNOWN28, MSG_EM_UNKNOWN29, MSG_EM_UNKNOWN30, MSG_EM_UNKNOWN31, MSG_EM_UNKNOWN32, MSG_EM_UNKNOWN33, MSG_EM_UNKNOWN34, MSG_EM_UNKNOWN35, - MSG_EM_Y800, MSG_EM_FR20, MSG_EM_RH32, + MSG_EM_V800, MSG_EM_FR20, MSG_EM_RH32, MSG_EM_RCE, MSG_EM_ARM, MSG_EM_ALPHA, MSG_EM_SH, MSG_EM_SPARCV9, MSG_EM_TRICORE, MSG_EM_ARC, MSG_EM_H8_300, MSG_EM_H8_300H, @@ -121,7 +121,7 @@ static const Msg machines_alt[EM_NUM] = { MSG_EM_UNKNOWN27, MSG_EM_UNKNOWN28, MSG_EM_UNKNOWN29, MSG_EM_UNKNOWN30, MSG_EM_UNKNOWN31, MSG_EM_UNKNOWN32, MSG_EM_UNKNOWN33, MSG_EM_UNKNOWN34, MSG_EM_UNKNOWN35, - MSG_EM_Y800, MSG_EM_FR20, MSG_EM_RH32, + MSG_EM_V800, MSG_EM_FR20, MSG_EM_RH32, MSG_EM_RCE, MSG_EM_ARM_ALT, MSG_EM_ALPHA_ALT, MSG_EM_SH, MSG_EM_SPARCV9_ALT, MSG_EM_TRICORE, MSG_EM_ARC, MSG_EM_H8_300, MSG_EM_H8_300H, @@ -251,6 +251,58 @@ conv_ehdr_flags(Half mach, Word flags) } /* + * Make a string representation of the e_ident[EI_OSABI] field. + */ +const char * +conv_ehdr_osabi(uchar_t osabi, int fmt_flags) +{ + static Conv_inv_buf_t string; + static const Msg osabi_arr[] = { + MSG_OSABI_NONE, MSG_OSABI_HPUX, + MSG_OSABI_NETBSD, MSG_OSABI_LINUX, + MSG_OSABI_UNKNOWN4, MSG_OSABI_UNKNOWN5, + MSG_OSABI_SOLARIS, MSG_OSABI_AIX, + MSG_OSABI_IRIX, MSG_OSABI_FREEBSD, + MSG_OSABI_TRU64, MSG_OSABI_MODESTO, + MSG_OSABI_OPENBSD, MSG_OSABI_OPENVMS, + MSG_OSABI_NSK, MSG_OSABI_AROS + }; + static const Msg osabi_arr_alt[] = { + MSG_OSABI_NONE_ALT, MSG_OSABI_HPUX_ALT, + MSG_OSABI_NETBSD_ALT, MSG_OSABI_LINUX_ALT, + MSG_OSABI_UNKNOWN4, MSG_OSABI_UNKNOWN5, + MSG_OSABI_SOLARIS_ALT, MSG_OSABI_AIX_ALT, + MSG_OSABI_IRIX_ALT, MSG_OSABI_FREEBSD_ALT, + MSG_OSABI_TRU64_ALT, MSG_OSABI_MODESTO_ALT, + MSG_OSABI_OPENBSD_ALT, MSG_OSABI_OPENVMS_ALT, + MSG_OSABI_NSK_ALT, MSG_OSABI_AROS_ALT + }; + + const char *str; + + switch (osabi) { + case ELFOSABI_ARM: + str = (fmt_flags & CONV_FMTALTMASK) ? + MSG_ORIG(MSG_OSABI_ARM_ALT) : MSG_ORIG(MSG_OSABI_ARM); + break; + + case ELFOSABI_STANDALONE: + str = (fmt_flags & CONV_FMTALTMASK) ? + MSG_ORIG(MSG_OSABI_STANDALONE_ALT) : + MSG_ORIG(MSG_OSABI_STANDALONE); + break; + + default: + str = conv_map2str(string, sizeof (string), osabi, fmt_flags, + ARRAY_NELTS(osabi_arr), osabi_arr, + osabi_arr_alt, osabi_arr_alt); + break; + } + + return (str); +} + +/* * A generic means of returning additional information for a rejected file in * terms of a string. */ diff --git a/usr/src/cmd/sgs/libconv/common/elf.msg b/usr/src/cmd/sgs/libconv/common/elf.msg index be63dc4fa4..37c9e879f8 100644 --- a/usr/src/cmd/sgs/libconv/common/elf.msg +++ b/usr/src/cmd/sgs/libconv/common/elf.msg @@ -20,7 +20,7 @@ # # -# Copyright 2006 Sun Microsystems, Inc. All rights reserved. +# Copyright 2007 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # ident "%Z%%M% %I% %E% SMI" @@ -95,7 +95,7 @@ @ MSG_EM_UNKNOWN33 "EM_UNKNOWN33" #33 @ MSG_EM_UNKNOWN34 "EM_UNKNOWN34" #34 @ MSG_EM_UNKNOWN35 "EM_UNKNOWN35" #35 -@ MSG_EM_Y800 "EM_Y800" #36 +@ MSG_EM_V800 "EM_V800" #36 @ MSG_EM_FR20 "EM_FR20" #37 @ MSG_EM_RH32 "EM_RH32" #38 @ MSG_EM_RCE "EM_RCE" #39 @@ -188,6 +188,41 @@ @ MSG_EF_SPARCV9_PSO "EF_SPARCV9_PSO" @ MSG_EF_SPARCV9_RMO "EF_SPARCV9_RMO" +@ MSG_OSABI_NONE "ELFOSABI_NONE" #0 +@ MSG_OSABI_NONE_ALT "Generic SYSV" +@ MSG_OSABI_HPUX "ELFOSABI_HPUX" #1 +@ MSG_OSABI_HPUX_ALT "HP-UX" +@ MSG_OSABI_NETBSD "ELFOSABI_NETBSD" #2 +@ MSG_OSABI_NETBSD_ALT "NetBSD" +@ MSG_OSABI_LINUX "ELFOSABI_LINUX" #3 +@ MSG_OSABI_LINUX_ALT "Linux" +@ MSG_OSABI_UNKNOWN4 "ELFOSABI_UNKNOWN4" #4 +@ MSG_OSABI_UNKNOWN5 "ELFOSABI_UNKNOWN5" #5 +@ MSG_OSABI_SOLARIS "ELFOSABI_SOLARIS" #6 +@ MSG_OSABI_SOLARIS_ALT "Solaris" +@ MSG_OSABI_AIX "ELFOSABI_AIX" #7 +@ MSG_OSABI_AIX_ALT "AIX" +@ MSG_OSABI_IRIX "ELFOSABI_IRIX" #8 +@ MSG_OSABI_IRIX_ALT "IRIX" +@ MSG_OSABI_FREEBSD "ELFOSABI_FREEBSD" #9 +@ MSG_OSABI_FREEBSD_ALT "FreeBSD" +@ MSG_OSABI_TRU64 "ELFOSABI_TRU64" #10 +@ MSG_OSABI_TRU64_ALT "Tru64" +@ MSG_OSABI_MODESTO "ELFOSABI_MODESTO" #11 +@ MSG_OSABI_MODESTO_ALT "Modesto" +@ MSG_OSABI_OPENBSD "ELFOSABI_OPENBSD" #12 +@ MSG_OSABI_OPENBSD_ALT "OpenBSD" +@ MSG_OSABI_OPENVMS "ELFOSABI_OPENVMS" #13 +@ MSG_OSABI_OPENVMS_ALT "OpenVMS" +@ MSG_OSABI_NSK "ELFOSABI_NSK" #14 +@ MSG_OSABI_NSK_ALT "NSK" +@ MSG_OSABI_AROS "ELFOSABI_AROS" #15 +@ MSG_OSABI_AROS_ALT "Amiga Research OS" +@ MSG_OSABI_ARM "ELFOSABI_ARM" #97 +@ MSG_OSABI_ARM_ALT "ARM" +@ MSG_OSABI_STANDALONE "ELFOSABI_STANDALONE" #255 +@ MSG_OSABI_STANDALONE_ALT "Standalone" + @ MSG_GBL_ZERO "0" @ MSG_STR_EMPTY "" diff --git a/usr/src/cmd/sgs/libld/common/_libld.h b/usr/src/cmd/sgs/libld/common/_libld.h index b2662a04a6..1c6db677ab 100644 --- a/usr/src/cmd/sgs/libld/common/_libld.h +++ b/usr/src/cmd/sgs/libld/common/_libld.h @@ -173,6 +173,15 @@ typedef enum { #endif /* + * We pad the end of the .dynstr section with a block of DYNSTR_EXTRA_PAD + * bytes, and we insert DYNAMIC_EXTRA_ELTS unused items into the + * .dynamic section (with value DT_NULL). This provides the resources needed + * to add and/or alter string items in the .dynamic section, such as runpath. + */ +#define DYNSTR_EXTRA_PAD 512 +#define DYNAMIC_EXTRA_ELTS 10 + +/* * Relocation buckets are sized based on the number of input relocations and * the following constants. */ diff --git a/usr/src/cmd/sgs/libld/common/sections.c b/usr/src/cmd/sgs/libld/common/sections.c index d1a9a141a5..bdabb790d4 100644 --- a/usr/src/cmd/sgs/libld/common/sections.c +++ b/usr/src/cmd/sgs/libld/common/sections.c @@ -1037,8 +1037,12 @@ make_dynamic(Ofl_desc *ofl) */ ld_mach_make_dynamic(ofl, &cnt); - cnt += 3; /* DT_FLAGS, DT_FLAGS_1, */ - /* and DT_NULL */ + /* + * DT_FLAGS, DT_FLAGS_1, DT_SUNW_STRPAD, and DT_NULL. Also, + * allow room for the unused extra DT_NULLs. These are included + * to allow an ELF editor room to add items later. + */ + cnt += 4 + DYNAMIC_EXTRA_ELTS; /* * Determine the size of the section from the number of entries. @@ -1698,7 +1702,8 @@ make_dynstr(Ofl_desc *ofl) shdr->sh_flags |= SHF_ALLOC; /* Set the size of the data area */ - data->d_size = size; + data->d_size = size + DYNSTR_EXTRA_PAD; + shdr->sh_size = (Xword)size; ofl->ofl_osdynstr = ld_place_section(ofl, isec, M_ID_DYNSTR, 0); diff --git a/usr/src/cmd/sgs/libld/common/update.c b/usr/src/cmd/sgs/libld/common/update.c index d3126e69b6..6bafcb9868 100644 --- a/usr/src/cmd/sgs/libld/common/update.c +++ b/usr/src/cmd/sgs/libld/common/update.c @@ -1957,6 +1957,7 @@ update_odynamic(Ofl_desc *ofl) Str_tbl *dynstr; uint_t stoff; Word flags = ofl->ofl_flags; + Word cnt; dynstr = ofl->ofl_dynstrtab; ofl->ofl_osdynamic->os_shdr->sh_link = @@ -2361,10 +2362,16 @@ update_odynamic(Ofl_desc *ofl) dyn->d_un.d_val = ofl->ofl_dtflags_1; dyn++; + dyn->d_tag = DT_SUNW_STRPAD; + dyn->d_un.d_val = DYNSTR_EXTRA_PAD; + dyn++; + ld_mach_update_odynamic(ofl, &dyn); - dyn->d_tag = DT_NULL; - dyn->d_un.d_val = 0; + for (cnt = 1 + DYNAMIC_EXTRA_ELTS; cnt--; dyn++) { + dyn->d_tag = DT_NULL; + dyn->d_un.d_val = 0; + } /* * Ensure that we wrote the right number of entries. If not, @@ -2373,7 +2380,7 @@ update_odynamic(Ofl_desc *ofl) */ assert((ofl->ofl_osdynamic->os_shdr->sh_size / ofl->ofl_osdynamic->os_shdr->sh_entsize) == - ((uintptr_t)(dyn + 1) - (uintptr_t)_dyn) / sizeof (*dyn)); + ((uintptr_t)dyn - (uintptr_t)_dyn) / sizeof (*dyn)); return (1); } @@ -3035,15 +3042,20 @@ update_ogroup(Ofl_desc * ofl) } static void -update_ostrtab(Os_desc *osp, Str_tbl *stp) +update_ostrtab(Os_desc *osp, Str_tbl *stp, uint_t extra) { Elf_Data *data; + if (osp == 0) return; data = osp->os_outdata; - assert(data->d_size == st_getstrtab_sz(stp)); - (void) st_setstrbuf(stp, data->d_buf, (uint_t)data->d_size); + assert(data->d_size == (st_getstrtab_sz(stp) + extra)); + (void) st_setstrbuf(stp, data->d_buf, (uint_t)data->d_size - extra); + /* If leaving an extra hole at the end, zero it */ + if (extra > 0) + (void) memset((char *)data->d_buf + data->d_size - extra, + 0x0, extra); } /* @@ -3590,9 +3602,9 @@ ld_update_outfile(Ofl_desc *ofl) /* * Update the .shstrtab, .strtab and .dynstr sections. */ - update_ostrtab(ofl->ofl_osshstrtab, ofl->ofl_shdrsttab); - update_ostrtab(ofl->ofl_osstrtab, ofl->ofl_strtab); - update_ostrtab(ofl->ofl_osdynstr, ofl->ofl_dynstrtab); + update_ostrtab(ofl->ofl_osshstrtab, ofl->ofl_shdrsttab, 0); + update_ostrtab(ofl->ofl_osstrtab, ofl->ofl_strtab, 0); + update_ostrtab(ofl->ofl_osdynstr, ofl->ofl_dynstrtab, DYNSTR_EXTRA_PAD); /* * Build any output symbol tables, the symbols information is copied diff --git a/usr/src/cmd/sgs/liblddbg/common/dynamic.c b/usr/src/cmd/sgs/liblddbg/common/dynamic.c index 7bc05b3a6f..aadb44cc41 100644 --- a/usr/src/cmd/sgs/liblddbg/common/dynamic.c +++ b/usr/src/cmd/sgs/liblddbg/common/dynamic.c @@ -20,7 +20,7 @@ */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #pragma ident "%Z%%M% %I% %E% SMI" @@ -46,7 +46,36 @@ Elf_dyn_entry(Lm_list *lml, Dyn *dyn, int ndx, const char *name, Half mach) { char index[INDEX_STR_SIZE]; - (void) snprintf(index, INDEX_STR_SIZE, MSG_ORIG(MSG_FMT_INDEX), ndx); + (void) snprintf(index, sizeof (index), MSG_ORIG(MSG_FMT_INDEX), ndx); dbg_print(lml, MSG_INTL(MSG_DYN_ENTRY), index, conv_dyn_tag(dyn->d_tag, mach, 0), EC_XWORD(dyn->d_un.d_val), name); } + +#ifdef _ELF64 +void +GElf_dyn_entry(GElf_Dyn *dyn, int ndx, const char *name, GElf_Half mach) +{ + Elf_dyn_entry(NULL, dyn, ndx, name, mach); +} +#endif + +/* + * Variant of Elf_dyn_entry() specifically for DT_NULL. Handles the + * case of multiple adjacent DT_NULL entries by displaying them on + * a single line using an index range instead of a single index. + */ +void +Elf_dyn_null_entry(Lm_list *lml, Dyn *dyn, int start_ndx, int end_ndx) +{ + char index[2 * INDEX_STR_SIZE]; + + if (start_ndx == end_ndx) { + Elf_dyn_entry(lml, dyn, start_ndx, MSG_ORIG(MSG_STR_EMPTY), 0); + } else { + (void) snprintf(index, sizeof (index), + MSG_ORIG(MSG_FMT_INDEX_RANGE), start_ndx, end_ndx); + dbg_print(lml, MSG_INTL(MSG_DYN_ENTRY), index, + conv_dyn_tag(DT_NULL, 0, 0), EC_XWORD(dyn->d_un.d_val), + MSG_ORIG(MSG_STR_EMPTY)); + } +} diff --git a/usr/src/cmd/sgs/liblddbg/common/liblddbg.msg b/usr/src/cmd/sgs/liblddbg/common/liblddbg.msg index 59c773cda3..2850574cde 100644 --- a/usr/src/cmd/sgs/liblddbg/common/liblddbg.msg +++ b/usr/src/cmd/sgs/liblddbg/common/liblddbg.msg @@ -1110,6 +1110,7 @@ @ MSG_UTL_SCC_ENTRY " [%d] %s" @ MSG_FMT_INDEX " [%d]" +@ MSG_FMT_INDEX_RANGE " [%d-%d]" @ MSG_FMT_STR "%s" @ MSG_FMT_PATH "%s/%s" diff --git a/usr/src/cmd/sgs/liblddbg/common/llib-llddbg b/usr/src/cmd/sgs/liblddbg/common/llib-llddbg index c07566cd31..e67ec72b75 100644 --- a/usr/src/cmd/sgs/liblddbg/common/llib-llddbg +++ b/usr/src/cmd/sgs/liblddbg/common/llib-llddbg @@ -451,6 +451,8 @@ void Elf32_cap_title(Lm_list *); void Elf64_dyn_entry(Lm_list *, Elf64_Dyn *, int, const char *, Elf64_Half); void Elf32_dyn_entry(Lm_list *, Elf32_Dyn *, int, const char *, Elf32_Half); +void Elf64_dyn_null_entry(Lm_list *, Elf64_Dyn *, int, int); +void Elf32_dyn_null_entry(Lm_list *, Elf32_Dyn *, int, int); void Elf64_dyn_title(Lm_list *); void Elf32_dyn_title(Lm_list *); diff --git a/usr/src/cmd/sgs/liblddbg/common/mapfile-vers b/usr/src/cmd/sgs/liblddbg/common/mapfile-vers index 9eea9743aa..74abbc947f 100644 --- a/usr/src/cmd/sgs/liblddbg/common/mapfile-vers +++ b/usr/src/cmd/sgs/liblddbg/common/mapfile-vers @@ -427,7 +427,7 @@ SUNWprivate_4.58 { Dbg32_ver_symbol; Dbg64_ver_symbol; -} SUNWprivate_3.20; +} SUNWprivate_3.21; # The following interfaces are used by various parts of the link-editors and @@ -436,7 +436,7 @@ SUNWprivate_4.58 { # this interface, and thus by separating in from the ever changing Dbg_* # interfaces we can provide a stable verioning environment for this utility. -SUNWprivate_3.20 { +SUNWprivate_3.21 { global: Elf_syminfo_entry; Elf_syminfo_title; @@ -450,6 +450,9 @@ SUNWprivate_3.20 { Elf64_demangle_name; Elf32_dyn_entry; Elf64_dyn_entry; + GElf_dyn_entry; + Elf32_dyn_null_entry; + Elf64_dyn_null_entry; Elf32_dyn_title; Elf64_dyn_title; diff --git a/usr/src/cmd/sgs/messages/sgs.ident b/usr/src/cmd/sgs/messages/sgs.ident index 7893cd6209..2b7a23580a 100644 --- a/usr/src/cmd/sgs/messages/sgs.ident +++ b/usr/src/cmd/sgs/messages/sgs.ident @@ -1,13 +1,12 @@ # -# Copyright 2005 Sun Microsystems, Inc. All rights reserved. +# Copyright 2007 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # CDDL HEADER START # # The contents of this file are subject to the terms of the -# Common Development and Distribution License, Version 1.0 only -# (the "License"). You may not use this file except in compliance -# with the License. +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. @@ -51,3 +50,4 @@ MSG_ID_PVS 22 SUNW_OST_SGS /* sgs/pvs */ MSG_ID_CRLE 23 SUNW_OST_SGS /* sgs/crle */ MSG_ID_ELFDUMP 24 SUNW_OST_SGS /* sgs/elfdump */ MSG_ID_MOE 25 SUNW_OST_SGS /* sgs/moe */ +MSG_ID_MISC 26 SUNW_OST_SGS diff --git a/usr/src/cmd/sgs/packages/Makefile b/usr/src/cmd/sgs/packages/Makefile index b809fb1f56..f03a20e3ab 100644 --- a/usr/src/cmd/sgs/packages/Makefile +++ b/usr/src/cmd/sgs/packages/Makefile @@ -20,7 +20,7 @@ # # -# Copyright 2006 Sun Microsystems, Inc. All rights reserved. +# Copyright 2007 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # ident "%Z%%M% %I% %E% SMI" @@ -29,6 +29,10 @@ include $(SRC)/Makefile.master include $(SRC)/cmd/sgs/Makefile.var +EXTBUILD:sh= if [ ! -h ../ext -a ! -d ../ext ]; \ + then /bin/sh setup_pkg_ext .. ; \ + fi + BUILDLOG= package_build.$(MACH).log MACHS:sh= if [ "$MACH" = "sparc" ]; \ @@ -65,6 +69,11 @@ SUBDIRS2 = ../rtld \ ../tools \ $(RDBDIRS) + +PKGDIRS_EXT:sh= if [ -f ../ext/packages/pkgdirs ]; \ + then cat ../ext/packages/pkgdirs; \ + fi + # # Package dirs are directories which specifically # have a 'package' target. This target is used to key @@ -83,7 +92,7 @@ PKGDIRS= ../libcrle \ ../nm \ ../mcs \ ../moe \ - ../pvs + ../pvs $(PKGDIRS_EXT) $(SUBDIRS1) $(SUBDIRS2) := TARGET = install $(PKGDIRS) := TARGET = package diff --git a/usr/src/cmd/sgs/packages/Makefile.com b/usr/src/cmd/sgs/packages/Makefile.com index ce7f5a9bd9..ea5dcc85d0 100644 --- a/usr/src/cmd/sgs/packages/Makefile.com +++ b/usr/src/cmd/sgs/packages/Makefile.com @@ -2,9 +2,8 @@ # CDDL HEADER START # # The contents of this file are subject to the terms of the -# Common Development and Distribution License, Version 1.0 only -# (the "License"). You may not use this file except in compliance -# with the License. +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. @@ -20,7 +19,7 @@ # CDDL HEADER END # # -# Copyright 2003 Sun Microsystems, Inc. All rights reserved. +# Copyright 2007 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # #ident "%Z%%M% %I% %E% SMI" @@ -33,8 +32,10 @@ LINTLOG= ../lint.$(MACH).log PKGARCHIVE= . DATAFILES= copyright prototype_com prototype_$(MACH) postinstall \ preremove depend checkinstall +DATAFILES_EXT= prototype_com_ext_usr_bin prototype_com_ext_usr_lib \ + prototype_$(MACH)_ext_usr_bin prototype_$(MACH)_ext_usr_lib README= SUNWonld-README -FILES= $(DATAFILES) pkginfo +FILES= $(DATAFILES) $(DATAFILES_EXT) pkginfo PACKAGE= SUNWonld ROOTONLD= $(ROOT)/opt/SUNWonld ROOTREADME= $(README:%=$(ROOTONLD)/%) diff --git a/usr/src/cmd/sgs/packages/Makefile.lint b/usr/src/cmd/sgs/packages/Makefile.lint index 3fd899ea57..3929a0869b 100644 --- a/usr/src/cmd/sgs/packages/Makefile.lint +++ b/usr/src/cmd/sgs/packages/Makefile.lint @@ -20,7 +20,7 @@ # # -# Copyright 2006 Sun Microsystems, Inc. All rights reserved. +# Copyright 2007 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # ident "%Z%%M% %I% %E% SMI" @@ -55,6 +55,10 @@ LSUBDIRS2 = ../rtld \ ../libldmake \ ../rtld/mdbmod +LINTLDIRS_EXT:sh= if [ -f ../ext/packages/lintldirs ]; \ + then cat ../ext/packages/lintldirs; \ + fi + LINTLDIRS= ../libld \ ../sgsdemangler \ ../elfdump \ @@ -65,7 +69,7 @@ LINTLDIRS= ../libld \ ../nm \ ../mcs \ ../moe \ - ../pvs + ../pvs $(LINTLDIRS_EXT) $(LSUBDIRS1) $(LSUBDIRS2) := TARGET = lint $(LINTLDIRS) := TARGET = lint diff --git a/usr/src/cmd/sgs/packages/Makefile.targ b/usr/src/cmd/sgs/packages/Makefile.targ index c2ad6b90ca..c82a27e131 100644 --- a/usr/src/cmd/sgs/packages/Makefile.targ +++ b/usr/src/cmd/sgs/packages/Makefile.targ @@ -2,9 +2,8 @@ # CDDL HEADER START # # The contents of this file are subject to the terms of the -# Common Development and Distribution License, Version 1.0 only -# (the "License"). You may not use this file except in compliance -# with the License. +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. @@ -22,7 +21,7 @@ # # ident "%Z%%M% %I% %E% SMI" # -# Copyright 1993-2003 Sun Microsystems, Inc. All rights reserved. +# Copyright 2007 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. pkginfo: ../common/pkginfo.tmpl awk_pkginfo @@ -39,6 +38,9 @@ pkg: FRC $(DATAFILES): ../common/$$@ $(RM) $@; cp ../common/$@ $@ +$(DATAFILES_EXT): ../../ext/packages/common/$$@ + $(RM) $@; cp ../../ext/packages/common/$@ $@ + awk_pkginfo: ../bld_awk_pkginfo ../common/$(README) ../bld_awk_pkginfo -R ../common/$(README) $(VERDEBUG) \ -m $(MACH) -r "$(RELEASE)" -o $@ diff --git a/usr/src/cmd/sgs/packages/common/SUNWonld-README b/usr/src/cmd/sgs/packages/common/SUNWonld-README index 644fac8f3f..4102e93902 100644 --- a/usr/src/cmd/sgs/packages/common/SUNWonld-README +++ b/usr/src/cmd/sgs/packages/common/SUNWonld-README @@ -1201,3 +1201,5 @@ Bugid Risk Synopsis addresses of 0 6533587 ld.so.1: init/fini processing needs to compensate for interposer expectations +6516118 Reserved space needed in ELF dynamic section and string table (D) + PSARC/2007/127 Reserved space for editing ELF dynamic sections diff --git a/usr/src/cmd/sgs/packages/common/prototype_com b/usr/src/cmd/sgs/packages/common/prototype_com index 45545eceee..1e54b683a2 100644 --- a/usr/src/cmd/sgs/packages/common/prototype_com +++ b/usr/src/cmd/sgs/packages/common/prototype_com @@ -20,7 +20,7 @@ # # -# Copyright 2006 Sun Microsystems, Inc. All rights reserved. +# Copyright 2007 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # ident "%Z%%M% %I% %E% SMI" @@ -63,6 +63,7 @@ s none $SGSDIR/lib/librtld_db.so=librtld_db.so.1 f none $SGSDIR/lib/librtld_db.so.1=lib/librtld_db.so.1 755 root bin d none $SGSDIR/usr/bin 755 root bin f none $SGSDIR/usr/bin/crle=usr/bin/crle 555 root bin +!include prototype_com_ext_usr_bin f none $SGSDIR/usr/bin/ldd=usr/bin/ldd 555 root bin f none $SGSDIR/usr/bin/moe=usr/bin/moe 555 root bin f none $SGSDIR/usr/bin/pvs=usr/bin/pvs 555 root bin @@ -98,6 +99,7 @@ f none $SGSDIR/usr/lib/0@0.so.1=usr/lib/0@0.so.1 755 root bin f none $SGSDIR/usr/lib/lddstub=usr/lib/lddstub 555 root bin f none $SGSDIR/usr/lib/libcrle.so.1=usr/lib/libcrle.so.1 755 root bin f none $SGSDIR/usr/lib/libldstab.so.1=usr/lib/libldstab.so.1 755 root bin +!include prototype_com_ext_usr_lib d none $SGSDIR/usr/lib/link_audit 755 root bin s none $SGSDIR/usr/lib/link_audit/32=. f none $SGSDIR/usr/lib/link_audit/ldprof.so.1=usr/lib/link_audit/ldprof.so.1 755 root bin diff --git a/usr/src/cmd/sgs/packages/common/prototype_i386 b/usr/src/cmd/sgs/packages/common/prototype_i386 index b14ac48aaf..b0c191514a 100644 --- a/usr/src/cmd/sgs/packages/common/prototype_i386 +++ b/usr/src/cmd/sgs/packages/common/prototype_i386 @@ -20,7 +20,7 @@ # # -# Copyright 2006 Sun Microsystems, Inc. All rights reserved. +# Copyright 2007 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # ident "%Z%%M% %I% %E% SMI" @@ -51,6 +51,7 @@ f none $SGSDIR/lib/amd64/librtld_db.so.1=lib/amd64/librtld_db.so.1 755 root bin s none $SGSDIR/lib/amd64/librtld_db.so=librtld_db.so.1 d none $SGSDIR/usr/bin/amd64 755 root bin f none $SGSDIR/usr/bin/amd64/crle=usr/bin/amd64/crle 555 root bin +!include prototype_i386_ext_usr_bin f none $SGSDIR/usr/bin/amd64/moe=usr/bin/amd64/moe 555 root bin f none $SGSDIR/usr/bin/amd64/pvs=usr/bin/amd64/pvs 555 root bin d none $SGSDIR/usr/ccs/bin/amd64 755 root bin @@ -60,6 +61,7 @@ f none $SGSDIR/usr/ccs/bin/amd64/ld=usr/ccs/bin/amd64/ld 755 root bin f none $SGSDIR/usr/ccs/bin/amd64/nm=usr/ccs/bin/amd64/nm 0555 root bin f none $SGSDIR/usr/ccs/bin/amd64/mcs=usr/ccs/bin/amd64/mcs 0555 root bin l none $SGSDIR/usr/ccs/bin/amd64/strip=../../../../usr/ccs/bin/amd64/mcs +!include prototype_i386_ext_usr_lib d none $SGSDIR/usr/lib/link_audit/amd64 755 root bin s none $SGSDIR/usr/lib/link_audit/64=amd64 f none $SGSDIR/usr/lib/link_audit/amd64/ldprof.so.1=usr/lib/link_audit/amd64/ldprof.so.1 755 root bin diff --git a/usr/src/cmd/sgs/packages/common/prototype_sparc b/usr/src/cmd/sgs/packages/common/prototype_sparc index 31c158cd11..92d45bafc3 100644 --- a/usr/src/cmd/sgs/packages/common/prototype_sparc +++ b/usr/src/cmd/sgs/packages/common/prototype_sparc @@ -20,7 +20,7 @@ # # -# Copyright 2006 Sun Microsystems, Inc. All rights reserved. +# Copyright 2007 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # ident "%Z%%M% %I% %E% SMI" @@ -51,6 +51,7 @@ f none $SGSDIR/lib/sparcv9/librtld_db.so.1=lib/sparcv9/librtld_db.so.1 755 root s none $SGSDIR/lib/sparcv9/librtld_db.so=librtld_db.so.1 d none $SGSDIR/usr/bin/sparcv9 755 root bin f none $SGSDIR/usr/bin/sparcv9/crle=usr/bin/sparcv9/crle 555 root bin +!include prototype_sparc_ext_usr_bin f none $SGSDIR/usr/bin/sparcv9/moe=usr/bin/sparcv9/moe 555 root bin f none $SGSDIR/usr/bin/sparcv9/pvs=usr/bin/sparcv9/pvs 555 root bin d none $SGSDIR/usr/ccs/bin/sparcv9 755 root bin @@ -61,6 +62,7 @@ f none $SGSDIR/usr/ccs/bin/sparcv9/nm=usr/ccs/bin/sparcv9/nm 0555 root bin f none $SGSDIR/usr/ccs/bin/sparcv9/mcs=usr/ccs/bin/sparcv9/mcs 0555 root bin l none $SGSDIR/usr/ccs/bin/sparcv9/strip=../../../../usr/ccs/bin/sparcv9/mcs f none $SGSDIR/usr/lib/ld.so=usr/lib/ld.so 755 root bin +!include prototype_sparc_ext_usr_lib d none $SGSDIR/usr/lib/link_audit/sparcv9 755 root bin s none $SGSDIR/usr/lib/link_audit/64=sparcv9 f none $SGSDIR/usr/lib/link_audit/sparcv9/ldprof.so.1=usr/lib/link_audit/sparcv9/ldprof.so.1 755 root bin diff --git a/usr/src/cmd/sgs/packages/setup_pkg_ext b/usr/src/cmd/sgs/packages/setup_pkg_ext new file mode 100644 index 0000000000..f21a6d8fc5 --- /dev/null +++ b/usr/src/cmd/sgs/packages/setup_pkg_ext @@ -0,0 +1,62 @@ +#!/bin/sh +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# +# +# Copyright 2007 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# +# ident "%Z%%M% %I% %E% SMI" +# + +# +# Populate the sgs/ext directory. If one is not available, generate +# a null one so that a stock package build will build correctly. +# +# % setup_pkg_ext sgsdir +# + +SGSDIR=$1 +EXTPKGDIR=$SGSDIR/ext/packages/common + +if [ ! -d "$SGSDIR" ]; then + exit 1; +fi + +if [ -h $SGSDIR/ext -o -d $SGSDIR/ext ]; then + exit 0; +fi + +TEST_EXT=/net/linkers.eng/linkers/ws/ld_tests/bin/setup_ext +if [ -f $TEST_EXT ]; then + /bin/sh $TEST_EXT $SGSDIR + exit $? +fi + +# If no test harness, establish an empty ext directory so that +# package will build normally. +mkdir -p $EXTPKGDIR; +touch $EXTPKGDIR/prototype_com_ext_usr_bin; +touch $EXTPKGDIR/prototype_com_ext_usr_lib; +touch $EXTPKGDIR/prototype_i386_ext_usr_bin; +touch $EXTPKGDIR/prototype_i386_ext_usr_lib; +touch $EXTPKGDIR/prototype_sparc_ext_usr_bin; +touch $EXTPKGDIR/prototype_sparc_ext_usr_lib; +exit 0 diff --git a/usr/src/uts/common/sys/link.h b/usr/src/uts/common/sys/link.h index fbdda3b822..5f80daa316 100644 --- a/usr/src/uts/common/sys/link.h +++ b/usr/src/uts/common/sys/link.h @@ -153,6 +153,9 @@ typedef struct { #define DT_SUNW_TLSSORT 0x60000016 /* tls sym ndx sort by offset */ #define DT_SUNW_TLSSORTSZ 0x60000017 /* size of SUNW_TLSSORT */ +#define DT_SUNW_STRPAD 0x60000019 /* # of unused bytes at the */ + /* end of dynstr */ + /* * DT_* encoding rules do not apply between DT_HIOS and DT_LOPROC */ @@ -269,6 +272,8 @@ typedef struct { /* symbols via /dev/ksyms */ #define DF_1_NOHDR 0x00100000 /* mapfile ?N:1st segment mapping */ /* omits ELF & program headers */ +#define DF_1_EDITED 0x00200000 /* object has been modified since */ + /* being built by 'ld' */ #define DF_1_NORELOC 0x00400000 /* internal: unrelocated object */ #define DF_1_SYMINTPOSE 0x00800000 /* individual symbol interposers */ /* exist */ |