summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/gcc/gcc-4.5.1/fedora/gcc43-ia64-libunwind.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.5.1/fedora/gcc43-ia64-libunwind.patch')
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.5.1/fedora/gcc43-ia64-libunwind.patch551
1 files changed, 0 insertions, 551 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.5.1/fedora/gcc43-ia64-libunwind.patch b/meta/recipes-devtools/gcc/gcc-4.5.1/fedora/gcc43-ia64-libunwind.patch
deleted file mode 100644
index 0d6fa61d6a..0000000000
--- a/meta/recipes-devtools/gcc/gcc-4.5.1/fedora/gcc43-ia64-libunwind.patch
+++ /dev/null
@@ -1,551 +0,0 @@
1Upstream-Status: Inappropriate [distribution: fedora]
22004-11-27 Jakub Jelinek <jakub@redhat.com>
3
4 * config.gcc (ia64*-*-linux*): If native and libelf is installed,
5 use ia64/t-glibc-no-libunwind instead of the other t-*unwind*
6 fragments.
7 * config/ia64/t-glibc-no-libunwind: New file.
8 * config/ia64/change-symver.c: New file.
9 * config/ia64/unwind-ia64.c: If USE_SYMVER_GLOBAL and SHARED,
10 define _Unwind_* to __symverglobal_Unwind_*.
11 (alias): Undefine.
12 (symverglobal): Define. Use it on _Unwind_*.
13 * config/ia64/mkmap-symver-multi.awk: New file.
14 * config/ia64/libgcc-ia64-no-libunwind.ver: New file.
15
16Index: gcc/config.gcc
17===================================================================
18--- gcc/config.gcc.orig 2010-04-07 03:34:00.000000000 -0700
19+++ gcc/config.gcc 2010-06-25 10:15:25.133131055 -0700
20@@ -1457,9 +1457,16 @@
21 ;;
22 ia64*-*-linux*)
23 tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h glibc-stdint.h ia64/sysv4.h ia64/linux.h"
24- tmake_file="${tmake_file} ia64/t-ia64 t-libunwind ia64/t-glibc"
25- if test x$with_system_libunwind != xyes ; then
26- tmake_file="${tmake_file} t-libunwind-elf ia64/t-glibc-libunwind"
27+ tmake_file="${tmake_file} ia64/t-ia64"
28+ if test x${target} = x${host} && test x${target} = x${build} \
29+ && grep gelf_getverdef /usr/include/gelf.h > /dev/null 2>&1 \
30+ && test -f /usr/lib/libelf.so; then
31+ tmake_file="${tmake_file} ia64/t-glibc-no-libunwind"
32+ else
33+ tmake_file="${tmake_file} t-libunwind ia64/t-glibc"
34+ if test x$with_system_libunwind != xyes ; then
35+ tmake_file="${tmake_file} t-libunwind-elf ia64/t-glibc-libunwind"
36+ fi
37 fi
38 target_cpu_default="MASK_GNU_AS|MASK_GNU_LD"
39 extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
40Index: gcc/config/ia64/t-glibc-no-libunwind
41===================================================================
42--- /dev/null 1970-01-01 00:00:00.000000000 +0000
43+++ gcc/config/ia64/t-glibc-no-libunwind 2010-06-25 10:14:32.521880765 -0700
44@@ -0,0 +1,30 @@
45+# Don't use system libunwind library on IA-64 GLIBC based system,
46+# but make _Unwind_* symbols unversioned, so that created programs
47+# are usable even when libgcc_s uses libunwind.
48+LIB2ADDEH += $(srcdir)/config/ia64/fde-glibc.c
49+SHLIB_MAPFILES += $(srcdir)/config/ia64/libgcc-ia64-no-libunwind.ver
50+SHLIB_MKMAP = $(srcdir)/config/ia64/mkmap-symver-multi.awk
51+
52+SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
53+ -Wl,--soname=$(SHLIB_SONAME) \
54+ -Wl,--version-script=$(SHLIB_MAP) \
55+ -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ $(SHLIB_OBJS) -lc && \
56+ rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
57+ if [ -f $(SHLIB_DIR)/$(SHLIB_SONAME) ]; then \
58+ mv -f $(SHLIB_DIR)/$(SHLIB_SONAME) \
59+ $(SHLIB_DIR)/$(SHLIB_SONAME).backup; \
60+ else true; fi && \
61+ gcc -O2 -o $(SHLIB_DIR)/$(SHLIB_SONAME).tweak \
62+ $$(gcc_srcdir)/config/ia64/change-symver.c -lelf && \
63+ $(SHLIB_DIR)/$(SHLIB_SONAME).tweak $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \
64+ GCC_3.4.2 _GLOBAL_ \
65+ _Unwind_GetGR _Unwind_RaiseException _Unwind_GetRegionStart _Unwind_SetIP \
66+ _Unwind_GetIP _Unwind_GetLanguageSpecificData _Unwind_Resume \
67+ _Unwind_DeleteException _Unwind_SetGR _Unwind_ForcedUnwind \
68+ _Unwind_Backtrace _Unwind_FindEnclosingFunction _Unwind_GetCFA \
69+ _Unwind_Resume_or_Rethrow _Unwind_GetBSP && \
70+ rm -f $(SHLIB_DIR)/$(SHLIB_SONAME).tweak && \
71+ mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \
72+ $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
73+
74+TARGET_LIBGCC2_CFLAGS += -DUSE_SYMVER_GLOBAL
75Index: gcc/config/ia64/change-symver.c
76===================================================================
77--- /dev/null 1970-01-01 00:00:00.000000000 +0000
78+++ gcc/config/ia64/change-symver.c 2010-06-25 10:14:32.521880765 -0700
79@@ -0,0 +1,211 @@
80+#define _GNU_SOURCE 1
81+#define _FILE_OFFSET_BITS 64
82+#include <endian.h>
83+#include <errno.h>
84+#include <error.h>
85+#include <fcntl.h>
86+#include <fnmatch.h>
87+#include <gelf.h>
88+#include <stdlib.h>
89+#include <string.h>
90+#include <unistd.h>
91+
92+int
93+compute_veridx (const char *name, Elf *elf, Elf_Data *verd, GElf_Shdr *verd_shdr)
94+{
95+ if (strcmp (name, "_GLOBAL_") == 0)
96+ return 1;
97+
98+ int cnt;
99+ size_t offset = 0;
100+ for (cnt = verd_shdr->sh_info; --cnt >= 0; )
101+ {
102+ GElf_Verdef defmem;
103+ GElf_Verdef *def;
104+ GElf_Verdaux auxmem;
105+ GElf_Verdaux *aux;
106+ unsigned int auxoffset;
107+
108+ /* Get the data at the next offset. */
109+ def = gelf_getverdef (verd, offset, &defmem);
110+ if (def == NULL)
111+ break;
112+
113+ auxoffset = offset + def->vd_aux;
114+ aux = gelf_getverdaux (verd, auxoffset, &auxmem);
115+ if (aux == NULL)
116+ break;
117+
118+ if (strcmp (name, elf_strptr (elf, verd_shdr->sh_link,
119+ aux->vda_name)) == 0)
120+ return def->vd_ndx;
121+
122+ /* Find the next offset. */
123+ offset += def->vd_next;
124+ }
125+
126+ return -1;
127+}
128+
129+int
130+main (int argc, char **argv)
131+{
132+ if (argc < 4)
133+ error (1, 0, "Usage: change_symver library from_symver to_symver symbol...\nExample: change_symver libfoo.so FOO_1.0 *global* bar baz");
134+
135+ const char *fname = argv[1];
136+
137+ /* Open the file. */
138+ int fd;
139+ fd = open (fname, O_RDWR);
140+ if (fd == -1)
141+ error (1, errno, fname);
142+
143+ elf_version (EV_CURRENT);
144+
145+ /* Now get the ELF descriptor. */
146+ Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
147+ if (elf == NULL || elf_kind (elf) != ELF_K_ELF)
148+ error (1, 0, "Couldn't open %s: %s", fname, elf_errmsg (-1));
149+
150+ size_t shstrndx;
151+ /* Get the section header string table index. */
152+ if (elf_getshstrndx (elf, &shstrndx) < 0)
153+ error (1, 0, "cannot get shstrndx from %s", fname);
154+
155+ GElf_Ehdr ehdr_mem;
156+ GElf_Ehdr *ehdr;
157+
158+ /* We need the ELF header in a few places. */
159+ ehdr = gelf_getehdr (elf, &ehdr_mem);
160+ if (ehdr == NULL)
161+ error (1, 0, "couldn't get ELF headers %s: %s", fname, elf_errmsg (-1));
162+
163+ Elf_Scn *scn = NULL;
164+ GElf_Shdr shdr_mem, verd_shdr, ver_shdr, dynsym_shdr;
165+ Elf_Data *ver = NULL, *verd = NULL, *dynsym = NULL;
166+
167+ while ((scn = elf_nextscn (elf, scn)) != NULL)
168+ {
169+ GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
170+
171+ if (shdr == NULL)
172+ error (1, 0, "couldn't get shdr from %s", fname);
173+
174+ if ((shdr->sh_flags & SHF_ALLOC) != 0)
175+ {
176+ const char *name = elf_strptr (elf, shstrndx, shdr->sh_name);
177+ Elf_Data **p;
178+
179+ if (strcmp (name, ".gnu.version") == 0)
180+ {
181+ p = &ver;
182+ ver_shdr = *shdr;
183+ }
184+ else if (strcmp (name, ".gnu.version_d") == 0)
185+ {
186+ p = &verd;
187+ verd_shdr = *shdr;
188+ }
189+ else if (strcmp (name, ".dynsym") == 0)
190+ {
191+ p = &dynsym;
192+ dynsym_shdr = *shdr;
193+ }
194+ else
195+ continue;
196+
197+ if (*p != NULL)
198+ error (1, 0, "Two %s sections in %s", name, fname);
199+ *p = elf_getdata (scn, NULL);
200+ if (*p == NULL || elf_getdata (scn, *p) != NULL)
201+ error (1, 0, "No data or non-contiguous data in %s section in %s",
202+ name, fname);
203+ }
204+ }
205+
206+ if (ver == NULL || verd == NULL || dynsym == NULL)
207+ error (1, 0, "Couldn't find one of the needed sections in %s", fname);
208+
209+ int from_idx = compute_veridx (argv[2], elf, verd, &verd_shdr);
210+ if (from_idx == -1)
211+ error (1, 0, "Could not find symbol version %s in %s", argv[2], fname);
212+
213+ int to_idx = compute_veridx (argv[3], elf, verd, &verd_shdr);
214+ if (to_idx == -1)
215+ error (1, 0, "Could not find symbol version %s in %s", argv[3], fname);
216+
217+ if (dynsym_shdr.sh_entsize != gelf_fsize (elf, ELF_T_SYM, 1, ehdr->e_version)
218+ || dynsym_shdr.sh_size % dynsym_shdr.sh_entsize
219+ || ver_shdr.sh_entsize != 2
220+ || (ver_shdr.sh_size & 1)
221+ || dynsym_shdr.sh_size / dynsym_shdr.sh_entsize != ver_shdr.sh_size / 2)
222+ error (1, 0, "Unexpected sh_size or sh_entsize in %s", fname);
223+
224+ size_t nentries = ver_shdr.sh_size / 2;
225+ size_t cnt;
226+ GElf_Versym array[nentries];
227+ for (cnt = 0; cnt < nentries; ++cnt)
228+ {
229+ GElf_Versym vsymmem;
230+ GElf_Versym *vsym;
231+
232+ vsym = gelf_getversym (ver, cnt, &vsymmem);
233+ if (vsym == NULL)
234+ error (1, 0, "gelt_getversym failed in %s: %s", fname, elf_errmsg (-1));
235+
236+ array[cnt] = *vsym;
237+ if (*vsym != from_idx)
238+ continue;
239+
240+ GElf_Sym sym_mem;
241+ GElf_Sym *sym;
242+ sym = gelf_getsym (dynsym, cnt, &sym_mem);
243+ if (sym == NULL)
244+ error (1, 0, "gelt_getsym failed in %s: %s", fname, elf_errmsg (-1));
245+
246+ const char *name = elf_strptr (elf, dynsym_shdr.sh_link, sym->st_name);
247+
248+ int argn;
249+ for (argn = 4; argn < argc; ++argn)
250+ if (fnmatch (argv[argn], name, 0) == 0)
251+ {
252+ array[cnt] = to_idx;
253+ break;
254+ }
255+ }
256+
257+ if (sizeof (array[0]) != 2)
258+ abort ();
259+
260+#if __BYTE_ORDER == __LITTLE_ENDIAN
261+ if (ehdr->e_ident[EI_DATA] == ELFDATA2LSB)
262+ ;
263+ else if (ehdr->e_ident[EI_DATA] == ELFDATA2MSB)
264+#elif __BYTE_ORDER == __BIG_ENDIAN
265+ if (ehdr->e_ident[EI_DATA] == ELFDATA2MSB)
266+ ;
267+ else if (ehdr->e_ident[EI_DATA] == ELFDATA2LSB)
268+#else
269+# error Unsupported endianity
270+#endif
271+ {
272+ for (cnt = 0; cnt < nentries; ++cnt)
273+ array[cnt] = ((array[cnt] & 0xff) << 8) | ((array[cnt] & 0xff00) >> 8);
274+ }
275+ else
276+ error (1, 0, "Unknown EI_DATA %d in %s", ehdr->e_ident[EI_DATA], fname);
277+
278+ if (elf_end (elf) != 0)
279+ error (1, 0, "couldn't close %s: %s", fname, elf_errmsg (-1));
280+
281+ if (lseek (fd, ver_shdr.sh_offset, SEEK_SET) != (off_t) ver_shdr.sh_offset)
282+ error (1, 0, "failed to seek to %zd in %s", (size_t) ver_shdr.sh_offset,
283+ fname);
284+
285+ if (write (fd, array, 2 * nentries) != (ssize_t) (2 * nentries))
286+ error (1, 0, "failed to write .gnu.version section into %s", fname);
287+
288+ close (fd);
289+ return 0;
290+}
291Index: gcc/config/ia64/unwind-ia64.c
292===================================================================
293--- gcc/config/ia64/unwind-ia64.c.orig 2009-09-07 08:41:52.000000000 -0700
294+++ gcc/config/ia64/unwind-ia64.c 2010-06-25 10:14:32.521880765 -0700
295@@ -48,6 +48,51 @@
296 #define MD_UNW_COMPATIBLE_PERSONALITY_P(HEADER) 1
297 #endif
298
299+#if defined (USE_SYMVER_GLOBAL) && defined (SHARED)
300+extern _Unwind_Reason_Code __symverglobal_Unwind_Backtrace
301+ (_Unwind_Trace_Fn, void *);
302+extern void __symverglobal_Unwind_DeleteException
303+ (struct _Unwind_Exception *);
304+extern void * __symverglobal_Unwind_FindEnclosingFunction (void *);
305+extern _Unwind_Reason_Code __symverglobal_Unwind_ForcedUnwind
306+ (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *);
307+extern _Unwind_Word __symverglobal_Unwind_GetCFA
308+ (struct _Unwind_Context *);
309+extern _Unwind_Word __symverglobal_Unwind_GetBSP
310+ (struct _Unwind_Context *);
311+extern _Unwind_Word __symverglobal_Unwind_GetGR
312+ (struct _Unwind_Context *, int );
313+extern _Unwind_Ptr __symverglobal_Unwind_GetIP (struct _Unwind_Context *);
314+extern void *__symverglobal_Unwind_GetLanguageSpecificData
315+ (struct _Unwind_Context *);
316+extern _Unwind_Ptr __symverglobal_Unwind_GetRegionStart
317+ (struct _Unwind_Context *);
318+extern _Unwind_Reason_Code __symverglobal_Unwind_RaiseException
319+ (struct _Unwind_Exception *);
320+extern void __symverglobal_Unwind_Resume (struct _Unwind_Exception *);
321+extern _Unwind_Reason_Code __symverglobal_Unwind_Resume_or_Rethrow
322+ (struct _Unwind_Exception *);
323+extern void __symverglobal_Unwind_SetGR
324+ (struct _Unwind_Context *, int, _Unwind_Word);
325+extern void __symverglobal_Unwind_SetIP
326+ (struct _Unwind_Context *, _Unwind_Ptr);
327+#define _Unwind_Backtrace __symverglobal_Unwind_Backtrace
328+#define _Unwind_DeleteException __symverglobal_Unwind_DeleteException
329+#define _Unwind_FindEnclosingFunction __symverglobal_Unwind_FindEnclosingFunction
330+#define _Unwind_ForcedUnwind __symverglobal_Unwind_ForcedUnwind
331+#define _Unwind_GetBSP __symverglobal_Unwind_GetBSP
332+#define _Unwind_GetCFA __symverglobal_Unwind_GetCFA
333+#define _Unwind_GetGR __symverglobal_Unwind_GetGR
334+#define _Unwind_GetIP __symverglobal_Unwind_GetIP
335+#define _Unwind_GetLanguageSpecificData __symverglobal_Unwind_GetLanguageSpecificData
336+#define _Unwind_GetRegionStart __symverglobal_Unwind_GetRegionStart
337+#define _Unwind_RaiseException __symverglobal_Unwind_RaiseException
338+#define _Unwind_Resume __symverglobal_Unwind_Resume
339+#define _Unwind_Resume_or_Rethrow __symverglobal_Unwind_Resume_or_Rethrow
340+#define _Unwind_SetGR __symverglobal_Unwind_SetGR
341+#define _Unwind_SetIP __symverglobal_Unwind_SetIP
342+#endif
343+
344 enum unw_application_register
345 {
346 UNW_AR_BSP,
347@@ -2457,4 +2502,44 @@
348 alias (_Unwind_SetIP);
349 #endif
350
351+#if defined (USE_SYMVER_GLOBAL) && defined (SHARED)
352+#undef alias
353+#define symverglobal(name, version) \
354+__typeof (__symverglobal##name) __symverlocal##name \
355+ __attribute__ ((alias ("__symverglobal" #name))); \
356+__asm__ (".symver __symverglobal" #name"," #name "@@GCC_3.4.2");\
357+__asm__ (".symver __symverlocal" #name"," #name "@" #version)
358+
359+#undef _Unwind_Backtrace
360+#undef _Unwind_DeleteException
361+#undef _Unwind_FindEnclosingFunction
362+#undef _Unwind_ForcedUnwind
363+#undef _Unwind_GetBSP
364+#undef _Unwind_GetCFA
365+#undef _Unwind_GetGR
366+#undef _Unwind_GetIP
367+#undef _Unwind_GetLanguageSpecificData
368+#undef _Unwind_GetRegionStart
369+#undef _Unwind_RaiseException
370+#undef _Unwind_Resume
371+#undef _Unwind_Resume_or_Rethrow
372+#undef _Unwind_SetGR
373+#undef _Unwind_SetIP
374+symverglobal (_Unwind_Backtrace, GCC_3.3);
375+symverglobal (_Unwind_DeleteException, GCC_3.0);
376+symverglobal (_Unwind_FindEnclosingFunction, GCC_3.3);
377+symverglobal (_Unwind_ForcedUnwind, GCC_3.0);
378+symverglobal (_Unwind_GetBSP, GCC_3.3.2);
379+symverglobal (_Unwind_GetCFA, GCC_3.3);
380+symverglobal (_Unwind_GetGR, GCC_3.0);
381+symverglobal (_Unwind_GetIP, GCC_3.0);
382+symverglobal (_Unwind_GetLanguageSpecificData, GCC_3.0);
383+symverglobal (_Unwind_GetRegionStart, GCC_3.0);
384+symverglobal (_Unwind_RaiseException, GCC_3.0);
385+symverglobal (_Unwind_Resume, GCC_3.0);
386+symverglobal (_Unwind_Resume_or_Rethrow, GCC_3.3);
387+symverglobal (_Unwind_SetGR, GCC_3.0);
388+symverglobal (_Unwind_SetIP, GCC_3.0);
389+#endif
390+
391 #endif
392Index: gcc/config/ia64/mkmap-symver-multi.awk
393===================================================================
394--- /dev/null 1970-01-01 00:00:00.000000000 +0000
395+++ gcc/config/ia64/mkmap-symver-multi.awk 2010-06-25 10:14:32.521880765 -0700
396@@ -0,0 +1,133 @@
397+# Generate an ELF symbol version map a-la Solaris and GNU ld.
398+# Contributed by Richard Henderson <rth@cygnus.com>
399+#
400+# This file is part of GCC.
401+#
402+# GCC is free software; you can redistribute it and/or modify it under
403+# the terms of the GNU General Public License as published by the Free
404+# Software Foundation; either version 2, or (at your option) any later
405+# version.
406+#
407+# GCC is distributed in the hope that it will be useful, but WITHOUT
408+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
409+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
410+# License for more details.
411+#
412+# You should have received a copy of the GNU General Public License
413+# along with GCC; see the file COPYING. If not, write to the Free
414+# Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
415+# 02110-1301, USA.
416+
417+BEGIN {
418+ state = "nm";
419+ sawsymbol = 0;
420+}
421+
422+# Remove comment and blank lines.
423+/^ *#/ || /^ *$/ {
424+ next;
425+}
426+
427+# We begin with nm input. Collect the set of symbols that are present
428+# so that we can not emit them into the final version script -- Solaris
429+# complains at us if we do.
430+
431+state == "nm" && /^%%/ {
432+ state = "ver";
433+ next;
434+}
435+
436+state == "nm" && ($1 == "U" || $2 == "U") {
437+ next;
438+}
439+
440+state == "nm" && NF == 3 {
441+ if ($3 ~ /^[^@]*@GCC_[0-9.]*$/) {
442+ def[$3] = 1
443+ tl=$3
444+ sub(/^.*@/,"",tl)
445+ ver[$3] = tl
446+ } else {
447+ sub(/@@?GCC_[0-9.]*$/,"",$3)
448+ def[$3] = 1;
449+ }
450+ sawsymbol = 1;
451+ next;
452+}
453+
454+state == "nm" {
455+ next;
456+}
457+
458+# Now we process a simplified variant of the Solaris symbol version
459+# script. We have one symbol per line, no semicolons, simple markers
460+# for beginning and ending each section, and %inherit markers for
461+# describing version inheritence. A symbol may appear in more than
462+# one symbol version, and the last seen takes effect.
463+
464+NF == 3 && $1 == "%inherit" {
465+ inherit[$2] = $3;
466+ next;
467+}
468+
469+NF == 2 && $2 == "{" {
470+ libs[$1] = 1;
471+ thislib = $1;
472+ next;
473+}
474+
475+$1 == "}" {
476+ thislib = "";
477+ next;
478+}
479+
480+{
481+ ver[$1] = thislib;
482+ next;
483+}
484+
485+END {
486+ if (!sawsymbol)
487+ {
488+ print "No symbols seen -- broken or mis-installed nm?" | "cat 1>&2";
489+ exit 1;
490+ }
491+ for (l in libs)
492+ output(l);
493+}
494+
495+function output(lib) {
496+ if (done[lib])
497+ return;
498+ done[lib] = 1;
499+ if (inherit[lib])
500+ output(inherit[lib]);
501+
502+ empty=1
503+ for (sym in ver)
504+ if ((ver[sym] == lib) && (sym in def))
505+ {
506+ if (empty)
507+ {
508+ printf("%s {\n", lib);
509+ printf(" global:\n");
510+ empty = 0;
511+ }
512+ symp = sym;
513+ sub(/@GCC_[0-9.]*$/,"",symp);
514+ printf("\t%s;\n", symp);
515+ if (dotsyms)
516+ printf("\t.%s;\n", symp);
517+ }
518+
519+ if (empty)
520+ {
521+ for (l in libs)
522+ if (inherit[l] == lib)
523+ inherit[l] = inherit[lib];
524+ }
525+ else if (inherit[lib])
526+ printf("} %s;\n", inherit[lib]);
527+ else
528+ printf ("\n local:\n\t*;\n};\n");
529+}
530Index: gcc/config/ia64/libgcc-ia64-no-libunwind.ver
531===================================================================
532--- /dev/null 1970-01-01 00:00:00.000000000 +0000
533+++ gcc/config/ia64/libgcc-ia64-no-libunwind.ver 2010-06-25 10:14:32.525880902 -0700
534@@ -0,0 +1,17 @@
535+GCC_3.4.2 {
536+ _Unwind_GetGR
537+ _Unwind_RaiseException
538+ _Unwind_GetRegionStart
539+ _Unwind_SetIP
540+ _Unwind_GetIP
541+ _Unwind_GetLanguageSpecificData
542+ _Unwind_Resume
543+ _Unwind_DeleteException
544+ _Unwind_SetGR
545+ _Unwind_ForcedUnwind
546+ _Unwind_Backtrace
547+ _Unwind_FindEnclosingFunction
548+ _Unwind_GetCFA
549+ _Unwind_Resume_or_Rethrow
550+ _Unwind_GetBSP
551+}