summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorNitin A Kamble <nitin.a.kamble@intel.com>2010-06-24 05:16:24 -0700
committerJoshua Lock <josh@linux.intel.com>2010-07-07 17:14:03 +0100
commit2e04ea87541479fee6dcbdd5a587f98a86428de6 (patch)
treeeffeba991fcd26913685cf6e16005692aa30ccbe /meta
parent7fa2815605c7a6cf2cc3e6ba0629ed42b904e61b (diff)
downloadpoky-2e04ea87541479fee6dcbdd5a587f98a86428de6.tar.gz
prelink: upgrade from 20061027 to 20100106
This need change to elfutils. elfutils changes are added in separate commit. Removed the patch arm_eabi.patch, as it is included in the new sources Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
Diffstat (limited to 'meta')
-rw-r--r--meta/packages/prelink/prelink-20061027/arm_eabi.patch300
-rw-r--r--meta/packages/prelink/prelink/prelink.conf (renamed from meta/packages/prelink/prelink-20061027/prelink.conf)0
-rw-r--r--meta/packages/prelink/prelink/prelink.cron.daily (renamed from meta/packages/prelink/prelink-20061027/prelink.cron.daily)0
-rw-r--r--meta/packages/prelink/prelink/prelink.default (renamed from meta/packages/prelink/prelink-20061027/prelink.default)0
-rw-r--r--meta/packages/prelink/prelink_20100106.bb (renamed from meta/packages/prelink/prelink_20061027.bb)7
5 files changed, 3 insertions, 304 deletions
diff --git a/meta/packages/prelink/prelink-20061027/arm_eabi.patch b/meta/packages/prelink/prelink-20061027/arm_eabi.patch
deleted file mode 100644
index 768d82e74c..0000000000
--- a/meta/packages/prelink/prelink-20061027/arm_eabi.patch
+++ /dev/null
@@ -1,300 +0,0 @@
1---
2 src/arch-arm.c | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
3 1 file changed, 172 insertions(+), 5 deletions(-)
4
5Index: prelink-0.0.20061027/src/arch-arm.c
6===================================================================
7--- prelink-0.0.20061027.orig/src/arch-arm.c 2006-08-13 16:18:17.000000000 +0100
8+++ prelink-0.0.20061027/src/arch-arm.c 2008-06-12 10:46:12.000000000 +0100
9@@ -145,6 +145,27 @@
10 error (0, 0, "%s: R_ARM_PC24 relocs with non-zero addend should not be present in prelinked REL sections",
11 dso->filename);
12 return 1;
13+ /* DTPMOD32 is impossible to predict unless prelink sets the rules.
14+ DTPOFF32/TPOFF32 are converted REL->RELA. */
15+ case R_ARM_TLS_DTPOFF32:
16+ error (0, 0, "%s: R_ARM_TLS_DTPOFF32 relocs should not be present in prelinked REL section",
17+ dso->filename);
18+ return 1;
19+ case R_ARM_TLS_DTPMOD32:
20+ if (dso->ehdr.e_type == ET_EXEC)
21+ {
22+ error (0, 0, "%s: R_ARM_TLS_DTPMOD32 reloc in executable?",
23+ dso->filename);
24+ return 1;
25+ }
26+ break;
27+ case R_ARM_TLS_TPOFF32:
28+ if (dso->ehdr.e_type == ET_EXEC) {
29+ error (0, 0, "%s: R_ARM_TLS_TPOFF32 relocs should not be present in prelinked ET_EXEC REL sections",
30+ dso->filename);
31+ return 1;
32+ }
33+ break;
34 case R_ARM_COPY:
35 if (dso->ehdr.e_type == ET_EXEC)
36 /* COPY relocs are handled specially in generic code. */
37@@ -195,6 +216,24 @@
38 write_le32 (dso, rela->r_offset,
39 (read_ule32 (dso, rela->r_offset) & 0xff000000) | val);
40 break;
41+ case R_ARM_TLS_DTPOFF32:
42+ write_le32 (dso, rela->r_offset, value + rela->r_addend);
43+ break;
44+ /* DTPMOD32 and TPOFF32 are impossible to predict unless prelink
45+ sets the rules. */
46+ case R_ARM_TLS_DTPMOD32:
47+ if (dso->ehdr.e_type == ET_EXEC)
48+ {
49+ error (0, 0, "%s: R_ARM_TLS_DTPMOD32 reloc in executable?",
50+ dso->filename);
51+ return 1;
52+ }
53+ break;
54+ case R_ARM_TLS_TPOFF32:
55+ if (dso->ehdr.e_type == ET_EXEC && info->resolvetls)
56+ write_le32 (dso, rela->r_offset,
57+ value + rela->r_addend + info->resolvetls->offset);
58+ break;
59 case R_ARM_COPY:
60 if (dso->ehdr.e_type == ET_EXEC)
61 /* COPY relocs are handled specially in generic code. */
62@@ -315,6 +354,7 @@
63 {
64 GElf_Addr value;
65 struct prelink_conflict *conflict;
66+ struct prelink_tls *tls;
67 GElf_Rela *ret;
68
69 if (GELF_R_TYPE (rel->r_info) == R_ARM_RELATIVE
70@@ -324,8 +364,32 @@
71 conflict = prelink_conflict (info, GELF_R_SYM (rel->r_info),
72 GELF_R_TYPE (rel->r_info));
73 if (conflict == NULL)
74- return 0;
75- value = conflict_lookup_value (conflict);
76+ {
77+ if (info->curtls == NULL)
78+ return 0;
79+ switch (GELF_R_TYPE (rel->r_info))
80+ {
81+ /* Even local DTPMOD and {D,}TPOFF relocs need conflicts. */
82+ case R_ARM_TLS_DTPMOD32:
83+ case R_ARM_TLS_DTPOFF32:
84+ case R_ARM_TLS_TPOFF32:
85+ break;
86+ default:
87+ return 0;
88+ }
89+ value = 0;
90+ }
91+ else
92+ {
93+ /* DTPOFF32 wants to see only real conflicts, not lookups
94+ with reloc_class RTYPE_CLASS_TLS. */
95+ if (GELF_R_TYPE (rel->r_info) == R_ARM_TLS_DTPOFF32
96+ && conflict->lookup.tls == conflict->conflict.tls
97+ && conflict->lookupval == conflict->conflictval)
98+ return 0;
99+
100+ value = conflict_lookup_value (conflict);
101+ }
102 ret = prelink_conflict_add_rela (info);
103 if (ret == NULL)
104 return 1;
105@@ -342,6 +406,33 @@
106 error (0, 0, "%s: R_ARM_%s relocs should not be present in prelinked REL sections",
107 dso->filename, GELF_R_TYPE (rel->r_info) == R_ARM_ABS32 ? "ABS32" : "PC24");
108 return 1;
109+ case R_ARM_TLS_DTPMOD32:
110+ case R_ARM_TLS_DTPOFF32:
111+ case R_ARM_TLS_TPOFF32:
112+ if (conflict != NULL
113+ && (conflict->reloc_class != RTYPE_CLASS_TLS
114+ || conflict->lookup.tls == NULL))
115+ {
116+ error (0, 0, "%s: R_ARM_TLS not resolving to STT_TLS symbol",
117+ dso->filename);
118+ return 1;
119+ }
120+ tls = conflict ? conflict->lookup.tls : info->curtls;
121+ ret->r_info = GELF_R_INFO (0, R_ARM_ABS32);
122+ switch (GELF_R_TYPE (rel->r_info))
123+ {
124+ case R_ARM_TLS_DTPMOD32:
125+ ret->r_addend = tls->modid;
126+ break;
127+ case R_ARM_TLS_DTPOFF32:
128+ ret->r_addend = value + read_ule32 (dso, rel->r_offset);
129+ break;
130+ case R_ARM_TLS_TPOFF32:
131+ ret->r_addend = value + read_ule32 (dso, rel->r_offset)
132+ + tls->offset;
133+ break;
134+ }
135+ break;
136 case R_ARM_COPY:
137 error (0, 0, "R_ARM_COPY should not be present in shared libraries");
138 return 1;
139@@ -359,6 +450,7 @@
140 {
141 GElf_Addr value;
142 struct prelink_conflict *conflict;
143+ struct prelink_tls *tls;
144 GElf_Rela *ret;
145 Elf32_Sword val;
146
147@@ -369,8 +461,32 @@
148 conflict = prelink_conflict (info, GELF_R_SYM (rela->r_info),
149 GELF_R_TYPE (rela->r_info));
150 if (conflict == NULL)
151- return 0;
152- value = conflict_lookup_value (conflict);
153+ {
154+ if (info->curtls == NULL)
155+ return 0;
156+ switch (GELF_R_TYPE (rela->r_info))
157+ {
158+ /* Even local DTPMOD and {D,}TPOFF relocs need conflicts. */
159+ case R_ARM_TLS_DTPMOD32:
160+ case R_ARM_TLS_DTPOFF32:
161+ case R_ARM_TLS_TPOFF32:
162+ break;
163+ default:
164+ return 0;
165+ }
166+ value = 0;
167+ }
168+ else
169+ {
170+ /* DTPOFF32 wants to see only real conflicts, not lookups
171+ with reloc_class RTYPE_CLASS_TLS. */
172+ if (GELF_R_TYPE (rela->r_info) == R_ARM_TLS_DTPOFF32
173+ && conflict->lookup.tls == conflict->conflict.tls
174+ && conflict->lookupval == conflict->conflictval)
175+ return 0;
176+
177+ value = conflict_lookup_value (conflict);
178+ }
179 ret = prelink_conflict_add_rela (info);
180 if (ret == NULL)
181 return 1;
182@@ -398,6 +514,32 @@
183 case R_ARM_COPY:
184 error (0, 0, "R_ARM_COPY should not be present in shared libraries");
185 return 1;
186+ case R_ARM_TLS_DTPMOD32:
187+ case R_ARM_TLS_DTPOFF32:
188+ case R_ARM_TLS_TPOFF32:
189+ if (conflict != NULL
190+ && (conflict->reloc_class != RTYPE_CLASS_TLS
191+ || conflict->lookup.tls == NULL))
192+ {
193+ error (0, 0, "%s: R_ARM_TLS not resolving to STT_TLS symbol",
194+ dso->filename);
195+ return 1;
196+ }
197+ tls = conflict ? conflict->lookup.tls : info->curtls;
198+ ret->r_info = GELF_R_INFO (0, R_ARM_ABS32);
199+ switch (GELF_R_TYPE (rela->r_info))
200+ {
201+ case R_ARM_TLS_DTPMOD32:
202+ ret->r_addend = tls->modid;
203+ break;
204+ case R_ARM_TLS_DTPOFF32:
205+ ret->r_addend = value + rela->r_addend;
206+ break;
207+ case R_ARM_TLS_TPOFF32:
208+ ret->r_addend = value + rela->r_addend + tls->offset;
209+ break;
210+ }
211+ break;
212 default:
213 error (0, 0, "%s: Unknown arm relocation type %d", dso->filename,
214 (int) GELF_R_TYPE (rela->r_info));
215@@ -418,6 +560,8 @@
216 abort ();
217 case R_ARM_RELATIVE:
218 case R_ARM_ABS32:
219+ case R_ARM_TLS_TPOFF32:
220+ case R_ARM_TLS_DTPOFF32:
221 rela->r_addend = (Elf32_Sword) read_ule32 (dso, rel->r_offset);
222 break;
223 case R_ARM_PC24:
224@@ -426,6 +570,7 @@
225 break;
226 case R_ARM_COPY:
227 case R_ARM_GLOB_DAT:
228+ case R_ARM_TLS_DTPMOD32:
229 rela->r_addend = 0;
230 break;
231 }
232@@ -445,6 +590,8 @@
233 abort ();
234 case R_ARM_RELATIVE:
235 case R_ARM_ABS32:
236+ case R_ARM_TLS_TPOFF32:
237+ case R_ARM_TLS_DTPOFF32:
238 write_le32 (dso, rela->r_offset, rela->r_addend);
239 break;
240 case R_ARM_PC24:
241@@ -453,6 +600,7 @@
242 | ((rela->r_addend >> 2) & 0xffffff));
243 break;
244 case R_ARM_GLOB_DAT:
245+ case R_ARM_TLS_DTPMOD32:
246 write_le32 (dso, rela->r_offset, 0);
247 break;
248 }
249@@ -488,6 +636,18 @@
250 /* FALLTHROUGH */
251 case R_ARM_PC24:
252 return 1;
253+ case R_ARM_TLS_DTPOFF32:
254+ /* We can prelink these fields, and the addend is relative
255+ to the symbol value. A RELA entry is needed. */
256+ return 1;
257+ case R_ARM_TLS_TPOFF32:
258+ /* In shared libraries TPOFF32 is changed always into
259+ conflicts, for executables we need to preserve
260+ original addend. */
261+ if (dso->ehdr.e_type == ET_EXEC) {
262+ return 1;
263+ }
264+ break;
265 }
266 }
267 }
268@@ -612,6 +772,12 @@
269 return 0;
270 error (0, 0, "%s: R_ARM_COPY reloc in shared library?", dso->filename);
271 return 1;
272+ case R_ARM_TLS_DTPMOD32:
273+ write_le32 (dso, rel->r_offset, 0);
274+ break;
275+ case R_ARM_TLS_DTPOFF32:
276+ case R_ARM_TLS_TPOFF32:
277+ break;
278 default:
279 error (0, 0, "%s: Unknown arm relocation type %d", dso->filename,
280 (int) GELF_R_TYPE (rel->r_info));
281@@ -634,6 +800,10 @@
282 {
283 case R_ARM_COPY: return RTYPE_CLASS_COPY;
284 case R_ARM_JUMP_SLOT: return RTYPE_CLASS_PLT;
285+ case R_ARM_TLS_DTPMOD32:
286+ case R_ARM_TLS_DTPOFF32:
287+ case R_ARM_TLS_TPOFF32:
288+ return RTYPE_CLASS_TLS;
289 default: return RTYPE_CLASS_VALID;
290 }
291 }
292@@ -646,7 +816,7 @@
293 .R_JMP_SLOT = R_ARM_JUMP_SLOT,
294 .R_COPY = R_ARM_COPY,
295 .R_RELATIVE = R_ARM_RELATIVE,
296- .dynamic_linker = "/lib/ld-linux.so.2",
297+ .dynamic_linker = "/lib/ld-linux.so.3",
298 .adjust_dyn = arm_adjust_dyn,
299 .adjust_rel = arm_adjust_rel,
300 .adjust_rela = arm_adjust_rela,
diff --git a/meta/packages/prelink/prelink-20061027/prelink.conf b/meta/packages/prelink/prelink/prelink.conf
index c5a4f4adc3..c5a4f4adc3 100644
--- a/meta/packages/prelink/prelink-20061027/prelink.conf
+++ b/meta/packages/prelink/prelink/prelink.conf
diff --git a/meta/packages/prelink/prelink-20061027/prelink.cron.daily b/meta/packages/prelink/prelink/prelink.cron.daily
index 0b3c07322c..0b3c07322c 100644
--- a/meta/packages/prelink/prelink-20061027/prelink.cron.daily
+++ b/meta/packages/prelink/prelink/prelink.cron.daily
diff --git a/meta/packages/prelink/prelink-20061027/prelink.default b/meta/packages/prelink/prelink/prelink.default
index 901258ed2a..901258ed2a 100644
--- a/meta/packages/prelink/prelink-20061027/prelink.default
+++ b/meta/packages/prelink/prelink/prelink.default
diff --git a/meta/packages/prelink/prelink_20061027.bb b/meta/packages/prelink/prelink_20100106.bb
index 21c538d5c2..a84aaa267a 100644
--- a/meta/packages/prelink/prelink_20061027.bb
+++ b/meta/packages/prelink/prelink_20100106.bb
@@ -4,18 +4,17 @@ DESCRIPTION = " The prelink package contains a utility which modifies ELF shared
4and executables, so that far fewer relocations need to be resolved at \ 4and executables, so that far fewer relocations need to be resolved at \
5runtime and thus programs come up faster." 5runtime and thus programs come up faster."
6LICENSE = "GPL" 6LICENSE = "GPL"
7PR = "r9" 7PR = "r0"
8 8
9SRC_URI = "${DEBIAN_MIRROR}/main/p/prelink/prelink_0.0.${PV}.orig.tar.gz \ 9SRC_URI = "http://people.redhat.com/jakub/prelink/prelink-${PV}.tar.bz2 \
10 file://prelink.conf \ 10 file://prelink.conf \
11 file://prelink.cron.daily \ 11 file://prelink.cron.daily \
12 file://prelink.default" 12 file://prelink.default"
13 13
14TARGET_OS_ORIG := "${TARGET_OS}" 14TARGET_OS_ORIG := "${TARGET_OS}"
15OVERRIDES_append = ":${TARGET_OS_ORIG}" 15OVERRIDES_append = ":${TARGET_OS_ORIG}"
16SRC_URI_append_linux-gnueabi = " file://arm_eabi.patch;patch=1"
17 16
18S = "${WORKDIR}/prelink-0.0.${PV}" 17S = "${WORKDIR}/prelink"
19 18
20EXTRA_OECONF = "--disable-64bit" 19EXTRA_OECONF = "--disable-64bit"
21 20