Skip to content

Commit d42a2a5

Browse files
committed
Replace growing alloca lists with std::vector
1 parent 0e3143b commit d42a2a5

1 file changed

Lines changed: 35 additions & 69 deletions

File tree

gdb/stabsread.c

Lines changed: 35 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1224,13 +1224,10 @@ read_stabs_symtab_1 (minimal_symbol_reader &reader,
12241224
legacy_psymtab *pst;
12251225

12261226
/* List of current psymtab's include files. */
1227-
const char **psymtab_include_list;
1228-
int includes_allocated;
1229-
int includes_used;
1227+
std::vector<const char *> psymtab_include_list;
12301228

12311229
/* Index within current psymtab dependency list. */
1232-
legacy_psymtab **dependency_list;
1233-
int dependencies_used, dependencies_allocated;
1230+
std::vector<legacy_psymtab *> dependency_list;
12341231

12351232
text_addr = DBX_TEXT_ADDR (objfile);
12361233
text_size = DBX_TEXT_SIZE (objfile);
@@ -1243,17 +1240,6 @@ read_stabs_symtab_1 (minimal_symbol_reader &reader,
12431240

12441241
pst = (legacy_psymtab *) 0;
12451242

1246-
includes_allocated = 30;
1247-
includes_used = 0;
1248-
psymtab_include_list = (const char **) alloca (includes_allocated *
1249-
sizeof (const char *));
1250-
1251-
dependencies_allocated = 30;
1252-
dependencies_used = 0;
1253-
dependency_list =
1254-
(legacy_psymtab **) alloca (dependencies_allocated *
1255-
sizeof (legacy_psymtab *));
1256-
12571243
/* Init bincl list */
12581244
std::vector<struct header_file_location> bincl_storage;
12591245
scoped_restore restore_bincl_global
@@ -1384,16 +1370,18 @@ read_stabs_symtab_1 (minimal_symbol_reader &reader,
13841370
which are not the address. */
13851371
&& unrel_val >= pst->unrelocated_text_low ())
13861372
{
1387-
stabs_end_psymtab (objfile, partial_symtabs,
1388-
pst, psymtab_include_list,
1389-
includes_used, symnum * dbx->ctx.symbol_size,
1373+
stabs_end_psymtab (objfile, partial_symtabs, pst,
1374+
psymtab_include_list.data (),
1375+
psymtab_include_list.size (),
1376+
symnum * dbx->ctx.symbol_size,
13901377
unrel_val > pst->unrelocated_text_high ()
13911378
? unrel_val : pst->unrelocated_text_high (),
1392-
dependency_list, dependencies_used,
1379+
dependency_list.data (),
1380+
dependency_list.size (),
13931381
textlow_not_set);
13941382
pst = (legacy_psymtab *) 0;
1395-
includes_used = 0;
1396-
dependencies_used = 0;
1383+
psymtab_include_list.clear ();
1384+
dependency_list.clear ();
13971385
dbx->ctx.has_line_numbers = 0;
13981386
}
13991387
else
@@ -1501,17 +1489,19 @@ read_stabs_symtab_1 (minimal_symbol_reader &reader,
15011489
if (pst)
15021490
{
15031491
unrelocated_addr unrel_value = unrelocated_addr (valu);
1504-
stabs_end_psymtab (objfile, partial_symtabs,
1505-
pst, psymtab_include_list,
1506-
includes_used, symnum * dbx->ctx.symbol_size,
1492+
stabs_end_psymtab (objfile, partial_symtabs, pst,
1493+
psymtab_include_list.data (),
1494+
psymtab_include_list.size (),
1495+
symnum * dbx->ctx.symbol_size,
15071496
unrel_value > pst->unrelocated_text_high ()
15081497
? unrel_value
15091498
: pst->unrelocated_text_high (),
1510-
dependency_list, dependencies_used,
1499+
dependency_list.data (),
1500+
dependency_list.size (),
15111501
prev_textlow_not_set);
15121502
pst = (legacy_psymtab *) 0;
1513-
includes_used = 0;
1514-
dependencies_used = 0;
1503+
psymtab_include_list.clear ();
1504+
dependency_list.clear ();
15151505
dbx->ctx.has_line_numbers = 0;
15161506
}
15171507
}
@@ -1624,7 +1614,7 @@ read_stabs_symtab_1 (minimal_symbol_reader &reader,
16241614
{
16251615
int i;
16261616

1627-
for (i = 0; i < includes_used; i++)
1617+
for (i = 0; i < psymtab_include_list.size (); i++)
16281618
if (filename_cmp (namestring, psymtab_include_list[i]) == 0)
16291619
{
16301620
i = -1;
@@ -1636,16 +1626,7 @@ read_stabs_symtab_1 (minimal_symbol_reader &reader,
16361626

16371627
record_include_file:
16381628

1639-
psymtab_include_list[includes_used++] = namestring;
1640-
if (includes_used >= includes_allocated)
1641-
{
1642-
const char **orig = psymtab_include_list;
1643-
1644-
psymtab_include_list = (const char **)
1645-
alloca ((includes_allocated *= 2) * sizeof (const char *));
1646-
memcpy (psymtab_include_list, orig,
1647-
includes_used * sizeof (const char *));
1648-
}
1629+
psymtab_include_list.push_back (namestring);
16491630
continue;
16501631
}
16511632
case N_LSYM: /* Typedef or automatic variable. */
@@ -2094,7 +2075,7 @@ read_stabs_symtab_1 (minimal_symbol_reader &reader,
20942075
int i;
20952076
int found = 0;
20962077

2097-
for (i = 0; i < dependencies_used; i++)
2078+
for (i = 0; i < dependency_list.size (); i++)
20982079
if (dependency_list[i] == needed_pst)
20992080
{
21002081
found = 1;
@@ -2105,27 +2086,7 @@ read_stabs_symtab_1 (minimal_symbol_reader &reader,
21052086
if (found)
21062087
continue;
21072088

2108-
dependency_list[dependencies_used++] = needed_pst;
2109-
if (dependencies_used >= dependencies_allocated)
2110-
{
2111-
legacy_psymtab **orig = dependency_list;
2112-
2113-
dependency_list =
2114-
(legacy_psymtab **)
2115-
alloca ((dependencies_allocated *= 2)
2116-
* sizeof (legacy_psymtab *));
2117-
memcpy (dependency_list, orig,
2118-
(dependencies_used
2119-
* sizeof (legacy_psymtab *)));
2120-
#ifdef DEBUG_INFO
2121-
gdb_printf (gdb_stderr,
2122-
"Had to reallocate "
2123-
"dependency list.\n");
2124-
gdb_printf (gdb_stderr,
2125-
"New dependencies allocated: %d\n",
2126-
dependencies_allocated);
2127-
#endif
2128-
}
2089+
dependency_list.push_back (needed_pst);
21292090
}
21302091
}
21312092
continue;
@@ -2138,13 +2099,16 @@ read_stabs_symtab_1 (minimal_symbol_reader &reader,
21382099
if (pst && gdbarch_sofun_address_maybe_missing (gdbarch))
21392100
{
21402101
stabs_end_psymtab (objfile, partial_symtabs, pst,
2141-
psymtab_include_list, includes_used,
2102+
psymtab_include_list.data (),
2103+
psymtab_include_list.size (),
21422104
symnum * dbx->ctx.symbol_size,
2143-
(unrelocated_addr) 0, dependency_list,
2144-
dependencies_used, textlow_not_set);
2105+
(unrelocated_addr) 0,
2106+
dependency_list.data (),
2107+
dependency_list.size (),
2108+
textlow_not_set);
21452109
pst = (legacy_psymtab *) 0;
2146-
includes_used = 0;
2147-
dependencies_used = 0;
2110+
psymtab_include_list.clear ();
2111+
dependency_list.clear ();
21482112
dbx->ctx.has_line_numbers = 0;
21492113
}
21502114
continue;
@@ -2204,12 +2168,14 @@ read_stabs_symtab_1 (minimal_symbol_reader &reader,
22042168
: CORE_ADDR (dbx->ctx.lowest_text_address))
22052169
+ text_size));
22062170

2207-
stabs_end_psymtab (objfile, partial_symtabs,
2208-
pst, psymtab_include_list, includes_used,
2171+
stabs_end_psymtab (objfile, partial_symtabs, pst,
2172+
psymtab_include_list.data (),
2173+
psymtab_include_list.size (),
22092174
symnum * dbx->ctx.symbol_size,
22102175
(text_end > pst->unrelocated_text_high ()
22112176
? text_end : pst->unrelocated_text_high ()),
2212-
dependency_list, dependencies_used, textlow_not_set);
2177+
dependency_list.data (), dependency_list.size (),
2178+
textlow_not_set);
22132179
}
22142180
}
22152181

0 commit comments

Comments
 (0)