Gentoo Archives: gentoo-commits

From: "Michael Haubenwallner (haubi)" <haubi@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo-alt r1605 - trunk/toolchain-prefix-wrapper/ld
Date: Wed, 06 Feb 2008 14:55:44
Message-Id: E1JMlgb-0006h3-AV@stork.gentoo.org
1 Author: haubi
2 Date: 2008-02-06 14:55:40 +0000 (Wed, 06 Feb 2008)
3 New Revision: 1605
4
5 Modified:
6 trunk/toolchain-prefix-wrapper/ld/aixplugin.c
7 Log:
8 fixed aix plugin to behave more like aix system ld regarding options
9 -bsvr4, -R<runpath>, -blibpath:<runpath>, -bnolibpath. But still
10 keep extension to understand "-R<runpath>" even without "-bsvr4".
11
12
13 Modified: trunk/toolchain-prefix-wrapper/ld/aixplugin.c
14 ===================================================================
15 --- trunk/toolchain-prefix-wrapper/ld/aixplugin.c 2008-02-06 14:52:55 UTC (rev 1604)
16 +++ trunk/toolchain-prefix-wrapper/ld/aixplugin.c 2008-02-06 14:55:40 UTC (rev 1605)
17 @@ -25,8 +25,11 @@
18 int err;
19 StringList *defaultRunpathList = NULL;
20 StringList *runpathList = NULL;
21 + StringList *aixRunpathList = NULL;
22 String const *argString;
23 String *newString = NULL;
24 + char libpath2runpath = 1; /* whether to record -L as runpath */
25 + char svr4mode = 0; /* whether we are in -bsvr4 mode */
26 char const *argBuffer;
27 int argBufferLength;
28
29 @@ -41,20 +44,62 @@
30 if (runpathList == NULL)
31 break;
32
33 - /* always pass "-brtl" */
34 - if (StringListAppendConcat(data->out->argList, "-brtl", 5, NULL) < 0)
35 + aixRunpathList = StringListCreate(NULL, 0, 0);
36 + if (aixRunpathList == NULL
37 + || StringListAppendConcat(aixRunpathList, "/usr/lib", strlen("/usr/lib"), NULL) < 0
38 + || StringListAppendConcat(aixRunpathList, "/lib", strlen("/lib"), NULL) < 0
39 + ) break;
40 +
41 + /* always use runtime linking (-brtl) */
42 + if (StringListAppendConcat(data->out->argList, "-brtl", strlen("-brtl"), NULL) < 0)
43 break;
44
45 + /* detect if we are in svr4 mode (-bsvr4).
46 + * "-R runpath" is only accepted in svr4 mode,
47 + * but we add "-R runpath" as extension in normal mode to add default runpath.
48 + */
49 for(argc = 1; argc < StringListGetSize(data->in->argList); argc++) {
50 argString = StringListGetString(data->in->argList, argc);
51 argBuffer = StringGetBuffer(argString);
52 + if (strcmp(argBuffer, "-bsvr4") == 0) {
53 + svr4mode = 1;
54 + }
55 + }
56 +
57 + for(argc = 1; argc < StringListGetSize(data->in->argList); argc++) {
58 + argString = StringListGetString(data->in->argList, argc);
59 + argBuffer = StringGetBuffer(argString);
60 argBufferLength = StringGetLength(argString);
61
62 - if (strncmp(argBuffer, "-blibpath:", 10) == 0) {
63 + if (strcmp(argBuffer, "-bnolibpath") == 0) {
64 + /* explicitly specified:
65 + * do not record -L path as runpath, specified explicitly.
66 + */
67 + libpath2runpath = 0;
68 + /* This also removes each runpath specified before. */
69 + StringListClear(runpathList);
70 + if (svr4mode) {
71 + /* if not in svr4-mode, we accept -R as extension */
72 + StringListClear(defaultRunpathList);
73 + }
74 + continue;
75 + } else
76 + if (strncmp(argBuffer, "-blibpath:", strlen("-blibpath:")) == 0) {
77 char const *curr, *next;
78
79 - argBuffer += 10;
80 + argBuffer += strlen("-blibpath:");
81
82 + /* do not record -L path as runpath, we have explicit -blibpath: */
83 + libpath2runpath = 0;
84 +
85 + /* '-blibpath:' kills previous '-blibpath:' */
86 + StringListClear(runpathList);
87 +
88 + if (svr4mode) {
89 + /* it also kills previous '-Rrunpathlist' in svr4mode */
90 + StringListClear(defaultRunpathList);
91 + }
92 +
93 for(curr = next = argBuffer; *next != '\0'; curr = next+1) {
94 for(next = curr; *next != '\0' && *next != ':'; next++);
95
96 @@ -63,12 +108,11 @@
97 continue;
98 }
99
100 - /* search default path list */
101 - if (StringListContains(data->in->sysLibpath, curr, next - curr))
102 - continue;
103 -
104 /* unique out runpath */
105 - if (StringListContains(runpathList, curr, next - curr))
106 + if (StringListContains(runpathList, curr, next - curr)
107 + || StringListContains(data->in->sysLibpath, curr, next - curr)
108 + || StringListContains(aixRunpathList, curr, next - curr)
109 + )
110 continue;
111
112 /* record this path into runpath list */
113 @@ -79,13 +123,19 @@
114 /* end "-blibpath:" handling */
115 continue;
116 } else
117 - if (strncmp(argBuffer, "-R", 2) == 0) {
118 + if (strncmp(argBuffer, "-R", strlen("-R")) == 0) {
119 /* extension:
120 * collect additional default runpath from "-R runpath"
121 */
122
123 - argBuffer += 2;
124 - argBufferLength -= 2;
125 + if (svr4mode) {
126 + /* in svr4 mode, '-R' kills previous '-blibpath:' arguments.
127 + * in normal mode, we implement -R as an extension.
128 + */
129 + StringListClear(runpathList);
130 + }
131 + argBuffer += strlen("-R");
132 + argBufferLength -= strlen("-R");
133
134 if (*argBuffer == 0 && argc < StringListGetSize(data->in->argList)) {
135 argc++;
136 @@ -93,7 +143,10 @@
137 argBuffer = StringGetBuffer(argString);
138 argBufferLength = StringGetLength(argString);
139 }
140 - if (StringListContains(data->in->sysLibpath, argBuffer, argBufferLength))
141 + if (StringListContains(defaultRunpathList, argBuffer, argBufferLength)
142 + || StringListContains(data->in->sysLibpath, argBuffer, argBufferLength)
143 + || StringListContains(aixRunpathList, argBuffer, argBufferLength)
144 + )
145 continue;
146
147 if (StringListAppendConcat(defaultRunpathList, argBuffer, argBufferLength, NULL) < 0)
148 @@ -118,14 +171,16 @@
149 if (StringListAppendList(runpathList, data->in->sysRunpath, 0, -1) < 0)
150 break;
151
152 - /* need to add /usr/lib:/lib to explicit runpath if any */
153 - if (StringListAppendConcat(runpathList, "/usr/lib", 8, NULL) < 0)
154 + /* need to add /usr/lib:/lib myself */
155 + if (StringListAppendList(runpathList, aixRunpathList, 0, -1) < 0)
156 break;
157 - if (StringListAppendConcat(runpathList, "/lib", 4, NULL) < 0)
158 - break;
159
160 /* create runpath string: "-blibpath:libpath1:libpathN" */
161 - newString = StringListJoin(runpathList, "-blibpath:", strlen("-blibpath:"), ":", strlen(":"), NULL, 0);
162 + newString = StringListJoin(runpathList
163 + , "-blibpath:", strlen("-blibpath:") /* start */
164 + , ":", strlen(":") /* separator */
165 + , NULL, 0 /* end */
166 + );
167 if (newString == NULL)
168 break;
169
170 @@ -140,9 +195,10 @@
171 err = 0;
172 } while(0); /* end dummy loop */
173
174 - if (newString != NULL) newString = StringDestroy(newString);
175 - if (runpathList != NULL) runpathList = StringListDestroy(runpathList);
176 - if (defaultRunpathList != NULL) defaultRunpathList = StringListDestroy(defaultRunpathList);
177 + newString = StringDestroy(newString);
178 + runpathList = StringListDestroy(runpathList);
179 + defaultRunpathList = StringListDestroy(defaultRunpathList);
180 + aixRunpathList = StringListDestroy(aixRunpathList);
181
182 return err;
183 }
184
185 --
186 gentoo-commits@l.g.o mailing list