Mercurial > illumos > illumos-gate
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;