summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/cmd/sgs/dump/common/dump.c1
-rw-r--r--usr/src/cmd/sgs/elfdump/common/elfdump.c67
-rw-r--r--usr/src/cmd/sgs/include/conv.h3
-rw-r--r--usr/src/cmd/sgs/include/debug.h14
-rw-r--r--usr/src/cmd/sgs/libconv/common/dynamic.c8
-rw-r--r--usr/src/cmd/sgs/libconv/common/dynamic.msg2
-rw-r--r--usr/src/cmd/sgs/libconv/common/elf.c58
-rw-r--r--usr/src/cmd/sgs/libconv/common/elf.msg39
-rw-r--r--usr/src/cmd/sgs/libld/common/_libld.h9
-rw-r--r--usr/src/cmd/sgs/libld/common/sections.c11
-rw-r--r--usr/src/cmd/sgs/libld/common/update.c30
-rw-r--r--usr/src/cmd/sgs/liblddbg/common/dynamic.c33
-rw-r--r--usr/src/cmd/sgs/liblddbg/common/liblddbg.msg1
-rw-r--r--usr/src/cmd/sgs/liblddbg/common/llib-llddbg2
-rw-r--r--usr/src/cmd/sgs/liblddbg/common/mapfile-vers7
-rw-r--r--usr/src/cmd/sgs/messages/sgs.ident8
-rw-r--r--usr/src/cmd/sgs/packages/Makefile13
-rw-r--r--usr/src/cmd/sgs/packages/Makefile.com11
-rw-r--r--usr/src/cmd/sgs/packages/Makefile.lint8
-rw-r--r--usr/src/cmd/sgs/packages/Makefile.targ10
-rw-r--r--usr/src/cmd/sgs/packages/common/SUNWonld-README2
-rw-r--r--usr/src/cmd/sgs/packages/common/prototype_com4
-rw-r--r--usr/src/cmd/sgs/packages/common/prototype_i3864
-rw-r--r--usr/src/cmd/sgs/packages/common/prototype_sparc4
-rw-r--r--usr/src/cmd/sgs/packages/setup_pkg_ext62
-rw-r--r--usr/src/uts/common/sys/link.h5
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 */