Merge lp:~rsandifo/gcc-linaro/lp-714921-4.5 into lp:gcc-linaro/4.5
- lp-714921-4.5
- Merge into 4.5
Status: | Merged |
---|---|
Merged at revision: | 99491 |
Proposed branch: | lp:~rsandifo/gcc-linaro/lp-714921-4.5 |
Merge into: | lp:gcc-linaro/4.5 |
Diff against target: |
322 lines (+156/-19) (has conflicts) 2 files modified
ChangeLog.linaro (+29/-0) gcc/dwarf2out.c (+127/-19) Text conflict in ChangeLog.linaro |
To merge this branch: | bzr merge lp:~rsandifo/gcc-linaro/lp-714921-4.5 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Andrew Stubbs (community) | Approve | ||
Review via email: mp+56525@code.launchpad.net |
Commit message
Description of the change
Patch was committed upstream. This backport includes two small changes
from one of Jakub's earlier patches (see ChangeLog).
This may still go into upstream 4.5, but it isn't certain yet.
Linaro Toolchain Builder (cbuild) wrote : | # |
Linaro Toolchain Builder (cbuild) wrote : | # |
cbuild successfully built this on i686-lucid-
The build results are available at:
http://
The test suite results were unchanged compared to the branch point lp:gcc-linaro+bzr99489.
The full testsuite results are at:
http://
cbuild-checked: i686-lucid-
Linaro Toolchain Builder (cbuild) wrote : | # |
cbuild successfully built this on x86_64-
The build results are available at:
http://
The test suite results were unchanged compared to the branch point lp:gcc-linaro+bzr99489.
The full testsuite results are at:
http://
cbuild-checked: x86_64-
Linaro Toolchain Builder (cbuild) wrote : | # |
cbuild successfully built this on armv7l-
The build results are available at:
http://
The test suite results changed compared to the branch point lp:gcc-linaro+bzr99489:
-PASS: gcc.c-torture/
+FAIL: gcc.c-torture/
-PASS: largefile.c -O0 -I. (test for excess errors)
+FAIL: largefile.c -O0 -I. (test for excess errors)
+WARNING: program timed out.
-PASS: gfortran.
-PASS: gfortran.
-PASS: gfortran.
-PASS: gfortran.
+UNRESOLVED: gfortran.
+FAIL: gfortran.
+UNRESOLVED: gfortran.
+FAIL: gfortran.
-PASS: gfortran.
-PASS: gfortran.
-PASS: gfortran.
-PASS: gfortran.
+UNRESOLVED: gfortran.
+FAIL: gfortran.
+UNRESOLVED: gfortran.
+FAIL: gfortran.
-PASS: gfortran.
-PASS: gfortran.
-PASS: gfortran.
-PASS: gfortran.
-PASS: gfortran.
-PASS: gfortran.
-PASS: gfortran.
-PASS: gfortran.
-PASS: gfortran.
-PASS: gfortran.
-PASS: gfortran.
Michael Hope (michaelh1) wrote : | # |
Please ignore the gfortran failues above. I changed the build environment while the test was running.
Andrew Stubbs (ams-codesourcery) wrote : | # |
The A9 results have yet to come in, but this change seems core independent, so I very much doubt they'll find any trouble.
Please indicate in the ChangeLog that this is a backport.
OK with that change. Go ahead and merge to lp:gcc-linaro.
Preview Diff
1 | === modified file 'ChangeLog.linaro' | |||
2 | --- ChangeLog.linaro 2011-04-06 12:29:08 +0000 | |||
3 | +++ ChangeLog.linaro 2011-04-08 10:52:54 +0000 | |||
4 | @@ -1,7 +1,36 @@ | |||
5 | 1 | <<<<<<< TREE | ||
6 | 1 | 2011-04-06 Andrew Stubbs <ams@codesourcery.com> | 2 | 2011-04-06 Andrew Stubbs <ams@codesourcery.com> |
7 | 2 | 3 | ||
8 | 3 | Merge from FSF 4.5 branch r172013 (pre 4.5.3). | 4 | Merge from FSF 4.5 branch r172013 (pre 4.5.3). |
9 | 4 | 5 | ||
10 | 6 | ======= | ||
11 | 7 | 2011-03-28 Richard Sandiford <richard.sandiford@linaro.org> | ||
12 | 8 | |||
13 | 9 | Backport from mainline: | ||
14 | 10 | gcc/ | ||
15 | 11 | * dwarf2out.c (dw_loc_list_node): Add resolved_addr and replaced. | ||
16 | 12 | (cached_dw_loc_list_def): New structure. | ||
17 | 13 | (cached_dw_loc_list): New typedef. | ||
18 | 14 | (cached_dw_loc_list_table): New variable. | ||
19 | 15 | (cached_dw_loc_list_table_hash): New function. | ||
20 | 16 | (cached_dw_loc_list_table_eq): Likewise. | ||
21 | 17 | (add_location_or_const_value_attribute): Take a bool cache_p. | ||
22 | 18 | Cache the list when the parameter is true. | ||
23 | 19 | (gen_formal_parameter_die): Update caller. | ||
24 | 20 | (gen_variable_die): Likewise. | ||
25 | 21 | (dwarf2out_finish): Likewise. | ||
26 | 22 | (dwarf2out_abstract_function): Nullify cached_dw_loc_list_table | ||
27 | 23 | while generating debug info for the decl. | ||
28 | 24 | (dwarf2out_function_decl): Clear cached_dw_loc_list_table. | ||
29 | 25 | (dwarf2out_init): Initialize cached_dw_loc_list_table. | ||
30 | 26 | (resolve_addr): Cache the result of resolving a chain of | ||
31 | 27 | location lists. | ||
32 | 28 | |||
33 | 29 | From: 2010-10-12 Jakub Jelinek <jakub@redhat.com> | ||
34 | 30 | * dwarf2out.c (dw_loc_list_node): Add emitted field. | ||
35 | 31 | (output_loc_list): Return immediately if emitted is set, set it. | ||
36 | 32 | |||
37 | 33 | >>>>>>> MERGE-SOURCE | ||
38 | 5 | 2011-03-10 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org> | 34 | 2011-03-10 Ramana Radhakrishnan <ramana.radhakrishnan@linaro.org> |
39 | 6 | 35 | ||
40 | 7 | LP:730440 | 36 | LP:730440 |
41 | 8 | 37 | ||
42 | === modified file 'gcc/dwarf2out.c' | |||
43 | --- gcc/dwarf2out.c 2011-03-10 14:55:10 +0000 | |||
44 | +++ gcc/dwarf2out.c 2011-04-08 10:52:54 +0000 | |||
45 | @@ -4256,6 +4256,12 @@ | |||
46 | 4256 | Only on head of list */ | 4256 | Only on head of list */ |
47 | 4257 | const char *section; /* Section this loclist is relative to */ | 4257 | const char *section; /* Section this loclist is relative to */ |
48 | 4258 | dw_loc_descr_ref expr; | 4258 | dw_loc_descr_ref expr; |
49 | 4259 | /* True if all addresses in this and subsequent lists are known to be | ||
50 | 4260 | resolved. */ | ||
51 | 4261 | bool resolved_addr; | ||
52 | 4262 | /* True if this list has been replaced by dw_loc_next. */ | ||
53 | 4263 | bool replaced; | ||
54 | 4264 | bool emitted; | ||
55 | 4259 | } dw_loc_list_node; | 4265 | } dw_loc_list_node; |
56 | 4260 | 4266 | ||
57 | 4261 | #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO) | 4267 | #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO) |
58 | @@ -5759,6 +5765,19 @@ | |||
59 | 5759 | /* Table of decl location linked lists. */ | 5765 | /* Table of decl location linked lists. */ |
60 | 5760 | static GTY ((param_is (var_loc_list))) htab_t decl_loc_table; | 5766 | static GTY ((param_is (var_loc_list))) htab_t decl_loc_table; |
61 | 5761 | 5767 | ||
62 | 5768 | /* A cached location list. */ | ||
63 | 5769 | struct GTY (()) cached_dw_loc_list_def { | ||
64 | 5770 | /* The DECL_UID of the decl that this entry describes. */ | ||
65 | 5771 | unsigned int decl_id; | ||
66 | 5772 | |||
67 | 5773 | /* The cached location list. */ | ||
68 | 5774 | dw_loc_list_ref loc_list; | ||
69 | 5775 | }; | ||
70 | 5776 | typedef struct cached_dw_loc_list_def cached_dw_loc_list; | ||
71 | 5777 | |||
72 | 5778 | /* Table of cached location lists. */ | ||
73 | 5779 | static GTY ((param_is (cached_dw_loc_list))) htab_t cached_dw_loc_list_table; | ||
74 | 5780 | |||
75 | 5762 | /* A pointer to the base of a list of references to DIE's that | 5781 | /* A pointer to the base of a list of references to DIE's that |
76 | 5763 | are uniquely identified by their tag, presence/absence of | 5782 | are uniquely identified by their tag, presence/absence of |
77 | 5764 | children DIE's, and list of attribute/value pairs. */ | 5783 | children DIE's, and list of attribute/value pairs. */ |
78 | @@ -6112,7 +6131,7 @@ | |||
79 | 6112 | static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *); | 6131 | static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *); |
80 | 6113 | static void insert_float (const_rtx, unsigned char *); | 6132 | static void insert_float (const_rtx, unsigned char *); |
81 | 6114 | static rtx rtl_for_decl_location (tree); | 6133 | static rtx rtl_for_decl_location (tree); |
83 | 6115 | static bool add_location_or_const_value_attribute (dw_die_ref, tree, | 6134 | static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool, |
84 | 6116 | enum dwarf_attribute); | 6135 | enum dwarf_attribute); |
85 | 6117 | static bool tree_add_const_value_attribute (dw_die_ref, tree); | 6136 | static bool tree_add_const_value_attribute (dw_die_ref, tree); |
86 | 6118 | static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree); | 6137 | static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree); |
87 | @@ -7731,6 +7750,24 @@ | |||
88 | 7731 | htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl)); | 7750 | htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl)); |
89 | 7732 | } | 7751 | } |
90 | 7733 | 7752 | ||
91 | 7753 | /* Returns a hash value for X (which really is a cached_dw_loc_list_list). */ | ||
92 | 7754 | |||
93 | 7755 | static hashval_t | ||
94 | 7756 | cached_dw_loc_list_table_hash (const void *x) | ||
95 | 7757 | { | ||
96 | 7758 | return (hashval_t) ((const cached_dw_loc_list *) x)->decl_id; | ||
97 | 7759 | } | ||
98 | 7760 | |||
99 | 7761 | /* Return nonzero if decl_id of cached_dw_loc_list X is the same as | ||
100 | 7762 | UID of decl *Y. */ | ||
101 | 7763 | |||
102 | 7764 | static int | ||
103 | 7765 | cached_dw_loc_list_table_eq (const void *x, const void *y) | ||
104 | 7766 | { | ||
105 | 7767 | return (((const cached_dw_loc_list *) x)->decl_id | ||
106 | 7768 | == DECL_UID ((const_tree) y)); | ||
107 | 7769 | } | ||
108 | 7770 | |||
109 | 7734 | /* Equate a DIE to a particular declaration. */ | 7771 | /* Equate a DIE to a particular declaration. */ |
110 | 7735 | 7772 | ||
111 | 7736 | static void | 7773 | static void |
112 | @@ -10355,6 +10392,10 @@ | |||
113 | 10355 | { | 10392 | { |
114 | 10356 | dw_loc_list_ref curr = list_head; | 10393 | dw_loc_list_ref curr = list_head; |
115 | 10357 | 10394 | ||
116 | 10395 | if (list_head->emitted) | ||
117 | 10396 | return; | ||
118 | 10397 | list_head->emitted = true; | ||
119 | 10398 | |||
120 | 10358 | ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol); | 10399 | ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol); |
121 | 10359 | 10400 | ||
122 | 10360 | /* Walk the location list, and output each range + expression. */ | 10401 | /* Walk the location list, and output each range + expression. */ |
123 | @@ -15920,15 +15961,22 @@ | |||
124 | 15920 | these things can crop up in other ways also.) Note that one type of | 15961 | these things can crop up in other ways also.) Note that one type of |
125 | 15921 | constant value which can be passed into an inlined function is a constant | 15962 | constant value which can be passed into an inlined function is a constant |
126 | 15922 | pointer. This can happen for example if an actual argument in an inlined | 15963 | pointer. This can happen for example if an actual argument in an inlined |
128 | 15923 | function call evaluates to a compile-time constant address. */ | 15964 | function call evaluates to a compile-time constant address. |
129 | 15965 | |||
130 | 15966 | CACHE_P is true if it is worth caching the location list for DECL, | ||
131 | 15967 | so that future calls can reuse it rather than regenerate it from scratch. | ||
132 | 15968 | This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines, | ||
133 | 15969 | since we will need to refer to them each time the function is inlined. */ | ||
134 | 15924 | 15970 | ||
135 | 15925 | static bool | 15971 | static bool |
137 | 15926 | add_location_or_const_value_attribute (dw_die_ref die, tree decl, | 15972 | add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p, |
138 | 15927 | enum dwarf_attribute attr) | 15973 | enum dwarf_attribute attr) |
139 | 15928 | { | 15974 | { |
140 | 15929 | rtx rtl; | 15975 | rtx rtl; |
141 | 15930 | dw_loc_list_ref list; | 15976 | dw_loc_list_ref list; |
142 | 15931 | var_loc_list *loc_list; | 15977 | var_loc_list *loc_list; |
143 | 15978 | cached_dw_loc_list *cache; | ||
144 | 15979 | void **slot; | ||
145 | 15932 | 15980 | ||
146 | 15933 | if (TREE_CODE (decl) == ERROR_MARK) | 15981 | if (TREE_CODE (decl) == ERROR_MARK) |
147 | 15934 | return false; | 15982 | return false; |
148 | @@ -15964,7 +16012,34 @@ | |||
149 | 15964 | && add_const_value_attribute (die, rtl)) | 16012 | && add_const_value_attribute (die, rtl)) |
150 | 15965 | return true; | 16013 | return true; |
151 | 15966 | } | 16014 | } |
153 | 15967 | list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2); | 16015 | /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its |
154 | 16016 | list several times. See if we've already cached the contents. */ | ||
155 | 16017 | list = NULL; | ||
156 | 16018 | if (loc_list == NULL || cached_dw_loc_list_table == NULL) | ||
157 | 16019 | cache_p = false; | ||
158 | 16020 | if (cache_p) | ||
159 | 16021 | { | ||
160 | 16022 | cache = (cached_dw_loc_list *) | ||
161 | 16023 | htab_find_with_hash (cached_dw_loc_list_table, decl, DECL_UID (decl)); | ||
162 | 16024 | if (cache) | ||
163 | 16025 | list = cache->loc_list; | ||
164 | 16026 | } | ||
165 | 16027 | if (list == NULL) | ||
166 | 16028 | { | ||
167 | 16029 | list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2); | ||
168 | 16030 | /* It is usually worth caching this result if the decl is from | ||
169 | 16031 | BLOCK_NONLOCALIZED_VARS and if the list has at least two elements. */ | ||
170 | 16032 | if (cache_p && list && list->dw_loc_next) | ||
171 | 16033 | { | ||
172 | 16034 | slot = htab_find_slot_with_hash (cached_dw_loc_list_table, decl, | ||
173 | 16035 | DECL_UID (decl), INSERT); | ||
174 | 16036 | cache = (cached_dw_loc_list *) | ||
175 | 16037 | ggc_alloc_cleared (sizeof (cached_dw_loc_list)); | ||
176 | 16038 | cache->decl_id = DECL_UID (decl); | ||
177 | 16039 | cache->loc_list = list; | ||
178 | 16040 | *slot = cache; | ||
179 | 16041 | } | ||
180 | 16042 | } | ||
181 | 15968 | if (list) | 16043 | if (list) |
182 | 15969 | { | 16044 | { |
183 | 15970 | add_AT_location_description (die, attr, list); | 16045 | add_AT_location_description (die, attr, list); |
184 | @@ -17532,7 +17607,7 @@ | |||
185 | 17532 | equate_decl_number_to_die (node, parm_die); | 17607 | equate_decl_number_to_die (node, parm_die); |
186 | 17533 | if (! DECL_ABSTRACT (node_or_origin)) | 17608 | if (! DECL_ABSTRACT (node_or_origin)) |
187 | 17534 | add_location_or_const_value_attribute (parm_die, node_or_origin, | 17609 | add_location_or_const_value_attribute (parm_die, node_or_origin, |
189 | 17535 | DW_AT_location); | 17610 | node == NULL, DW_AT_location); |
190 | 17536 | 17611 | ||
191 | 17537 | break; | 17612 | break; |
192 | 17538 | 17613 | ||
193 | @@ -17712,6 +17787,7 @@ | |||
194 | 17712 | tree context; | 17787 | tree context; |
195 | 17713 | int was_abstract; | 17788 | int was_abstract; |
196 | 17714 | htab_t old_decl_loc_table; | 17789 | htab_t old_decl_loc_table; |
197 | 17790 | htab_t old_cached_dw_loc_list_table; | ||
198 | 17715 | 17791 | ||
199 | 17716 | /* Make sure we have the actual abstract inline, not a clone. */ | 17792 | /* Make sure we have the actual abstract inline, not a clone. */ |
200 | 17717 | decl = DECL_ORIGIN (decl); | 17793 | decl = DECL_ORIGIN (decl); |
201 | @@ -17725,7 +17801,9 @@ | |||
202 | 17725 | DIE. Be sure to not clobber the outer location table nor use it or we would | 17801 | DIE. Be sure to not clobber the outer location table nor use it or we would |
203 | 17726 | get locations in abstract instantces. */ | 17802 | get locations in abstract instantces. */ |
204 | 17727 | old_decl_loc_table = decl_loc_table; | 17803 | old_decl_loc_table = decl_loc_table; |
205 | 17804 | old_cached_dw_loc_list_table = cached_dw_loc_list_table; | ||
206 | 17728 | decl_loc_table = NULL; | 17805 | decl_loc_table = NULL; |
207 | 17806 | cached_dw_loc_list_table = NULL; | ||
208 | 17729 | 17807 | ||
209 | 17730 | /* Be sure we've emitted the in-class declaration DIE (if any) first, so | 17808 | /* Be sure we've emitted the in-class declaration DIE (if any) first, so |
210 | 17731 | we don't get confused by DECL_ABSTRACT. */ | 17809 | we don't get confused by DECL_ABSTRACT. */ |
211 | @@ -17750,6 +17828,7 @@ | |||
212 | 17750 | 17828 | ||
213 | 17751 | current_function_decl = save_fn; | 17829 | current_function_decl = save_fn; |
214 | 17752 | decl_loc_table = old_decl_loc_table; | 17830 | decl_loc_table = old_decl_loc_table; |
215 | 17831 | cached_dw_loc_list_table = old_cached_dw_loc_list_table; | ||
216 | 17753 | pop_cfun (); | 17832 | pop_cfun (); |
217 | 17754 | } | 17833 | } |
218 | 17755 | 17834 | ||
219 | @@ -18431,9 +18510,8 @@ | |||
220 | 18431 | && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin))) | 18510 | && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin))) |
221 | 18432 | defer_location (decl_or_origin, var_die); | 18511 | defer_location (decl_or_origin, var_die); |
222 | 18433 | else | 18512 | else |
226 | 18434 | add_location_or_const_value_attribute (var_die, | 18513 | add_location_or_const_value_attribute (var_die, decl_or_origin, |
227 | 18435 | decl_or_origin, | 18514 | decl == NULL, DW_AT_location); |
225 | 18436 | DW_AT_location); | ||
228 | 18437 | add_pubname (decl_or_origin, var_die); | 18515 | add_pubname (decl_or_origin, var_die); |
229 | 18438 | } | 18516 | } |
230 | 18439 | else | 18517 | else |
231 | @@ -20049,6 +20127,7 @@ | |||
232 | 20049 | dwarf2out_decl (decl); | 20127 | dwarf2out_decl (decl); |
233 | 20050 | 20128 | ||
234 | 20051 | htab_empty (decl_loc_table); | 20129 | htab_empty (decl_loc_table); |
235 | 20130 | htab_empty (cached_dw_loc_list_table); | ||
236 | 20052 | } | 20131 | } |
237 | 20053 | 20132 | ||
238 | 20054 | /* Output a marker (i.e. a label) for the beginning of the generated code for | 20133 | /* Output a marker (i.e. a label) for the beginning of the generated code for |
239 | @@ -20649,6 +20728,11 @@ | |||
240 | 20649 | decl_loc_table = htab_create_ggc (10, decl_loc_table_hash, | 20728 | decl_loc_table = htab_create_ggc (10, decl_loc_table_hash, |
241 | 20650 | decl_loc_table_eq, NULL); | 20729 | decl_loc_table_eq, NULL); |
242 | 20651 | 20730 | ||
243 | 20731 | /* Allocate the cached_dw_loc_list_table. */ | ||
244 | 20732 | cached_dw_loc_list_table | ||
245 | 20733 | = htab_create_ggc (10, cached_dw_loc_list_table_hash, | ||
246 | 20734 | cached_dw_loc_list_table_eq, NULL); | ||
247 | 20735 | |||
248 | 20652 | /* Allocate the initial hunk of the decl_scope_table. */ | 20736 | /* Allocate the initial hunk of the decl_scope_table. */ |
249 | 20653 | decl_scope_table = VEC_alloc (tree, gc, 256); | 20737 | decl_scope_table = VEC_alloc (tree, gc, 256); |
250 | 20654 | 20738 | ||
251 | @@ -21278,30 +21362,53 @@ | |||
252 | 21278 | { | 21362 | { |
253 | 21279 | dw_die_ref c; | 21363 | dw_die_ref c; |
254 | 21280 | dw_attr_ref a; | 21364 | dw_attr_ref a; |
256 | 21281 | dw_loc_list_ref *curr; | 21365 | dw_loc_list_ref *curr, *start, loc; |
257 | 21282 | unsigned ix; | 21366 | unsigned ix; |
258 | 21283 | 21367 | ||
259 | 21284 | for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++) | 21368 | for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++) |
260 | 21285 | switch (AT_class (a)) | 21369 | switch (AT_class (a)) |
261 | 21286 | { | 21370 | { |
262 | 21287 | case dw_val_class_loc_list: | 21371 | case dw_val_class_loc_list: |
265 | 21288 | curr = AT_loc_list_ptr (a); | 21372 | start = curr = AT_loc_list_ptr (a); |
266 | 21289 | while (*curr) | 21373 | loc = *curr; |
267 | 21374 | gcc_assert (loc); | ||
268 | 21375 | /* The same list can be referenced more than once. See if we have | ||
269 | 21376 | already recorded the result from a previous pass. */ | ||
270 | 21377 | if (loc->replaced) | ||
271 | 21378 | *curr = loc->dw_loc_next; | ||
272 | 21379 | else if (!loc->resolved_addr) | ||
273 | 21290 | { | 21380 | { |
275 | 21291 | if (!resolve_addr_in_expr ((*curr)->expr)) | 21381 | /* As things stand, we do not expect or allow one die to |
276 | 21382 | reference a suffix of another die's location list chain. | ||
277 | 21383 | References must be identical or completely separate. | ||
278 | 21384 | There is therefore no need to cache the result of this | ||
279 | 21385 | pass on any list other than the first; doing so | ||
280 | 21386 | would lead to unnecessary writes. */ | ||
281 | 21387 | while (*curr) | ||
282 | 21292 | { | 21388 | { |
285 | 21293 | dw_loc_list_ref next = (*curr)->dw_loc_next; | 21389 | gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr); |
286 | 21294 | if (next && (*curr)->ll_symbol) | 21390 | if (!resolve_addr_in_expr ((*curr)->expr)) |
287 | 21295 | { | 21391 | { |
290 | 21296 | gcc_assert (!next->ll_symbol); | 21392 | dw_loc_list_ref next = (*curr)->dw_loc_next; |
291 | 21297 | next->ll_symbol = (*curr)->ll_symbol; | 21393 | if (next && (*curr)->ll_symbol) |
292 | 21394 | { | ||
293 | 21395 | gcc_assert (!next->ll_symbol); | ||
294 | 21396 | next->ll_symbol = (*curr)->ll_symbol; | ||
295 | 21397 | } | ||
296 | 21398 | *curr = next; | ||
297 | 21298 | } | 21399 | } |
299 | 21299 | *curr = next; | 21400 | else |
300 | 21401 | curr = &(*curr)->dw_loc_next; | ||
301 | 21300 | } | 21402 | } |
302 | 21403 | if (loc == *start) | ||
303 | 21404 | loc->resolved_addr = 1; | ||
304 | 21301 | else | 21405 | else |
306 | 21302 | curr = &(*curr)->dw_loc_next; | 21406 | { |
307 | 21407 | loc->replaced = 1; | ||
308 | 21408 | loc->dw_loc_next = *start; | ||
309 | 21409 | } | ||
310 | 21303 | } | 21410 | } |
312 | 21304 | if (!AT_loc_list (a)) | 21411 | if (!*start) |
313 | 21305 | { | 21412 | { |
314 | 21306 | remove_AT (die, a->dw_attr); | 21413 | remove_AT (die, a->dw_attr); |
315 | 21307 | ix--; | 21414 | ix--; |
316 | @@ -21361,6 +21468,7 @@ | |||
317 | 21361 | add_location_or_const_value_attribute ( | 21468 | add_location_or_const_value_attribute ( |
318 | 21362 | VEC_index (deferred_locations, deferred_locations_list, i)->die, | 21469 | VEC_index (deferred_locations, deferred_locations_list, i)->die, |
319 | 21363 | VEC_index (deferred_locations, deferred_locations_list, i)->variable, | 21470 | VEC_index (deferred_locations, deferred_locations_list, i)->variable, |
320 | 21471 | false, | ||
321 | 21364 | DW_AT_location); | 21472 | DW_AT_location); |
322 | 21365 | } | 21473 | } |
323 | 21366 | 21474 |
cbuild has taken a snapshot of this branch at r99490 and queued it for build.
The snapshot is available at: ex.seabright. co.nz/snapshots /gcc-linaro- 4.5+bzr99490~ rsandifo~ lp-714921- 4.5.tar. xdelta3. xz
http://
and will be built on the following builders:
a8-builder a9-builder i686 x86_64
You can track the build queue at: ex.seabright. co.nz/helpers/ scheduler
http://
cbuild-snapshot: gcc-linaro- 4.5+bzr99490~ rsandifo~ lp-714921- 4.5
cbuild-ancestor: lp:gcc-linaro+bzr99489
cbuild-state: check