changeset 13996:df716869fcba

3638 ld confuses files with group sections and files that should lazy load Reviewed by: Dan McDonald <danmcd@nexenta.com> Reviewed by: Garrett D'Amore <garrett@damore.org> Reviewed by: Robert Mustacchi <rm@joyent.com> Approved by: Dan McDonald <danmcd@nexenta.com>
author Richard Lowe <richlowe@richlowe.net>
date Fri, 22 Mar 2013 15:27:11 -0400
parents e0554f834eb0
children c5f371428359
files usr/src/cmd/sgs/include/libld.h usr/src/cmd/sgs/libld/common/files.c
diffstat 2 files changed, 4 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/sgs/include/libld.h	Tue Apr 02 15:17:12 2013 -0400
+++ b/usr/src/cmd/sgs/include/libld.h	Fri Mar 22 15:27:11 2013 -0400
@@ -891,6 +891,7 @@
 					/*	symbol capabilities */
 #define	FLG_IF_DEFERRED	0x00080000	/* dependency is deferred */
 #define	FLG_IF_RTLDINF	0x00100000	/* dependency has DT_SUNW_RTLTINF set */
+#define	FLG_IF_GROUPS	0x00200000	/* input file has groups to process */
 
 /*
  * Symbol states that require the generation of a DT_POSFLAG_1 .dynamic entry.
@@ -934,7 +935,7 @@
 #define	FLG_IS_EXTERNAL	0x0040		/* isp from a user file */
 #define	FLG_IS_INSTRMRG	0x0080		/* Usable SHF_MERGE|SHF_STRINGS sec */
 #define	FLG_IS_GNSTRMRG	0x0100		/* Generated mergeable string section */
-#define	FLG_IS_GROUPS	0x0200		/* section has groups to process */
+
 #define	FLG_IS_PLACE	0x0400		/* section requires to be placed */
 #define	FLG_IS_COMDAT	0x0800		/* section is COMDAT */
 #define	FLG_IS_EHFRAME	0x1000		/* section is .eh_frame */
--- a/usr/src/cmd/sgs/libld/common/files.c	Tue Apr 02 15:17:12 2013 -0400
+++ b/usr/src/cmd/sgs/libld/common/files.c	Fri Mar 22 15:27:11 2013 -0400
@@ -2343,7 +2343,7 @@
 	 * Indicate that this input file has groups to process.  Groups are
 	 * processed after all input sections have been processed.
 	 */
-	ifl->ifl_flags |= FLG_IS_GROUPS;
+	ifl->ifl_flags |= FLG_IF_GROUPS;
 
 	return (1);
 }
@@ -2807,7 +2807,7 @@
 	 * of placement.  In addition, COMDAT names may require transformation
 	 * to indicate different output section placement.
 	 */
-	if (ifl->ifl_flags & FLG_IS_GROUPS) {
+	if (ifl->ifl_flags & FLG_IF_GROUPS) {
 		for (ndx = 1; ndx < ifl->ifl_shnum; ndx++) {
 			Is_desc	*isp;