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