diff options
author | Andrew Cagney <cagney@redhat.com> | 2001-11-14 19:54:59 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2001-11-14 19:54:59 +0000 |
commit | bebd2b3536bce3bb1d50eff76e51a50310fb29e5 (patch) | |
tree | 49ca3ddb5436ed239e6392fd38edd846263d6844 /sim/ppc/tree.c | |
parent | 378af1d671c4ac1e6501c740ba97bbfe1964bf44 (diff) | |
download | gdb-bebd2b3536bce3bb1d50eff76e51a50310fb29e5.zip gdb-bebd2b3536bce3bb1d50eff76e51a50310fb29e5.tar.gz gdb-bebd2b3536bce3bb1d50eff76e51a50310fb29e5.tar.bz2 |
when #size-cells is zero, don't expect a size.
Diffstat (limited to 'sim/ppc/tree.c')
-rw-r--r-- | sim/ppc/tree.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/sim/ppc/tree.c b/sim/ppc/tree.c index 3600593..c5106f4 100644 --- a/sim/ppc/tree.c +++ b/sim/ppc/tree.c @@ -463,6 +463,7 @@ parse_address(device *current, const char *chp, device_unit *address) { + ASSERT(device_nr_address_cells(bus) > 0); if (device_decode_unit(bus, chp, address) < 0) device_error(current, "invalid unit address in %s", chp); return skip_token(chp); @@ -485,6 +486,7 @@ parse_size(device *current, /* parse the numeric list */ size->nr_cells = device_nr_size_cells(bus); nr = 0; + ASSERT(size->nr_cells > 0); while (1) { char *next; size->cells[nr] = strtoul(curr, &next, 0); @@ -521,9 +523,11 @@ parse_reg_property(device *current, int reg_nr; reg_property_spec *regs; const char *chp; + device *bus = device_parent(current); /* determine the number of reg entries by counting tokens */ - nr_regs = count_entries(current, property_name, property_value, 2); + nr_regs = count_entries(current, property_name, property_value, + 1 + (device_nr_size_cells(bus) > 0)); /* create working space */ regs = zalloc(nr_regs * sizeof(*regs)); @@ -531,10 +535,11 @@ parse_reg_property(device *current, /* fill it in */ chp = property_value; for (reg_nr = 0; reg_nr < nr_regs; reg_nr++) { - chp = parse_address(current, device_parent(current), - chp, ®s[reg_nr].address); - chp = parse_size(current, device_parent(current), - chp, ®s[reg_nr].size); + chp = parse_address(current, bus, chp, ®s[reg_nr].address); + if (device_nr_size_cells(bus) > 0) + chp = parse_size(current, bus, chp, ®s[reg_nr].size); + else + memset(®s[reg_nr].size, sizeof (®s[reg_nr].size), 0); } /* create it */ |