]>
Commit | Line | Data |
---|---|---|
5384b728 | 1 | 2001-10-31 Jakub Jelinek <jakub@redhat.com> |
2 | ||
3 | * frame.c (fde_merge): Choose just one from FDEs for the | |
4 | same function in erratic array. | |
5 | ||
6 | --- gcc/unwind-dw2-fde.c.jj Fri Jan 11 14:01:21 2002 | |
7 | +++ gcc/unwind-dw2-fde.c Tue Jan 15 15:58:27 2002 | |
8 | @@ -535,7 +535,7 @@ fde_merge (struct object *ob, fde_compar | |
9 | struct fde_vector *v1, struct fde_vector *v2) | |
10 | { | |
11 | size_t i1, i2; | |
12 | - fde * fde2; | |
13 | + fde * fde2 = NULL; | |
14 | ||
15 | i2 = v2->count; | |
16 | if (i2 > 0) | |
17 | @@ -544,6 +544,17 @@ fde_merge (struct object *ob, fde_compar | |
18 | do | |
19 | { | |
20 | i2--; | |
21 | + if (fde2 != NULL && fde_compare (ob, v2->array[i2], fde2) == 0) | |
22 | + { | |
23 | + /* Some linkers (e.g. 2.10.91.0.2 or 2.11.92.0.8) resolve | |
24 | + section relative relocations against removed linkonce | |
25 | + section to corresponding location in the output linkonce | |
26 | + section. Always use the earliest fde in that case. */ | |
27 | + fde2 = v2->array[i2]; | |
28 | + v1->array[i1+i2+1] = fde2; | |
29 | + v1->array[i1+i2] = fde2; | |
30 | + continue; | |
31 | + } | |
32 | fde2 = v2->array[i2]; | |
33 | while (i1 > 0 && fde_compare (ob, v1->array[i1-1], fde2) > 0) | |
34 | { |