aboutsummaryrefslogtreecommitdiff
path: root/configure
AgeCommit message (Expand)AuthorFilesLines
2001-01-02* configure: handle DOS-style absolute paths.Laurynas Biveinis1-18/+10
2000-11-13configure: Provide the original toplevel configure arguments (including $0) t...Joseph Myers1-13/+5
2000-11-13configure: Turn on libstdc++ V3 by default.Mark Mitchell1-1/+2
2000-10-17Only create gcc/configargs.h if gcc build directory is presentMichael Meissner1-2/+4
2000-10-05configure: Save configure arguments to gcc/configargs.h.Phil Edwards1-1/+11
2000-08-14top level:Zack Weinberg1-7/+5
2000-07-23* configure (topsrcdir): Don't use dirname.Michael Sokolov1-2/+3
2000-07-22merge with /cvs/srcJason Merrill1-7/+12
2000-02-16configure (gcc_version): When setting, narrow search to lines containing `ver...Kaveh R. Ghazi1-3/+3
1999-10-25* configure: Fix quoting inside arguments of eval.Andreas Schwab1-6/+6
1999-04-02configure (gxx_include_dir): Removed.H.J. Lu1-29/+0
1998-11-26configure (skip-this-dir): Add handling for new shell script...Manfred Hollstein1-0/+16
1998-10-13configure: Add pattern to replace "build_tooldir"'s definition in the generat...Manfred Hollstein1-0/+1
1998-10-12Final changes from devo<->egcs merge.Jeff Law1-23/+127
1998-08-30configure (gxx_include_dir): Changed to '${prefix}/include/g++'-${libstdcxx_i...H.J. Lu1-1/+2
1998-07-29configure: Fix --without/--disable cases for gxx-include-dir.Manfred Hollstein1-2/+17
1998-06-26Makefile.in (BASE_FLAGS_TO_PASS): Add gcc_version_trigger.Manfred Hollstein1-33/+30
1998-06-24configure (enable_version_specific_runtime_libs): Implement new flag --enable...Manfred Hollstein1-1/+11
1998-06-24configure (gcc_version): Initialize properly depending on how and where confi...Manfred Hollstein1-5/+26
1998-06-19configure (gcc_version): Add new variable describing the particular gcc versi...Manfred Hollstein1-0/+13
1998-04-23Fix consistency error reported by Yotam Medini.Jim Wilson1-2/+2
1998-04-14configure: Define DEFAULT_M4 by searching PATH.Krister Walfridsson1-0/+20
1998-03-17configure: When making link, also check the current directory.H.J. Lu1-4/+11
1998-02-05Makefile.in (BASE_FLAGS_TO_PASS): Don't pass PICFLAG and PICFLAG_FOR_TARGET.Manfred Hollstein1-0/+7
1998-01-27configure (package_makefile_rules_frag): New variable, which names a file wit...Manfred Hollstein1-16/+32
1998-01-23configure (package_makefile_frag): Move inserting the ${package_makefile_frag...Manfred Hollstein1-25/+24
1997-12-15Don't ever run autoconf in the toplevel directory :(Jeff Law1-0/+1414
1997-12-15Rebuild.Jeff Law1-1414/+0
1997-12-05release branch changes from 11-27 snapshot to egcs-1.0.Jeff Law1-3/+3
1997-11-27Makefile.in (INSTALL_TARGET): Do install-gcc first.Jeffrey A Law1-1/+10
1997-09-16Uli's libio/libstdc++ patches.Ulrich Drepper1-37/+36
1997-08-21Initial revisionJason Merrill1-0/+1406
>, uint8_t val) { trace_cpu_out(addr, 'b', val); address_space_write(&address_space_io, addr, MEMTXATTRS_UNSPECIFIED, &val, 1); } void cpu_outw(uint32_t addr, uint16_t val) { uint8_t buf[2]; trace_cpu_out(addr, 'w', val); stw_p(buf, val); address_space_write(&address_space_io, addr, MEMTXATTRS_UNSPECIFIED, buf, 2); } void cpu_outl(uint32_t addr, uint32_t val) { uint8_t buf[4]; trace_cpu_out(addr, 'l', val); stl_p(buf, val); address_space_write(&address_space_io, addr, MEMTXATTRS_UNSPECIFIED, buf, 4); } uint8_t cpu_inb(uint32_t addr) { uint8_t val; address_space_read(&address_space_io, addr, MEMTXATTRS_UNSPECIFIED, &val, 1); trace_cpu_in(addr, 'b', val); return val; } uint16_t cpu_inw(uint32_t addr) { uint8_t buf[2]; uint16_t val; address_space_read(&address_space_io, addr, MEMTXATTRS_UNSPECIFIED, buf, 2); val = lduw_p(buf); trace_cpu_in(addr, 'w', val); return val; } uint32_t cpu_inl(uint32_t addr) { uint8_t buf[4]; uint32_t val; address_space_read(&address_space_io, addr, MEMTXATTRS_UNSPECIFIED, buf, 4); val = ldl_p(buf); trace_cpu_in(addr, 'l', val); return val; } void portio_list_init(PortioList *piolist, Object *owner, const MemoryRegionPortio *callbacks, void *opaque, const char *name) { unsigned n = 0; while (callbacks[n].size) { ++n; } piolist->ports = callbacks; piolist->nr = 0; piolist->regions = g_new0(MemoryRegion *, n); piolist->address_space = NULL; piolist->opaque = opaque; piolist->owner = owner; piolist->name = name; piolist->flush_coalesced_mmio = false; } void portio_list_set_flush_coalesced(PortioList *piolist) { piolist->flush_coalesced_mmio = true; } void portio_list_destroy(PortioList *piolist) { MemoryRegionPortioList *mrpio; unsigned i; for (i = 0; i < piolist->nr; ++i) { mrpio = container_of(piolist->regions[i], MemoryRegionPortioList, mr); object_unparent(OBJECT(&mrpio->mr)); g_free(mrpio); } g_free(piolist->regions); } static const MemoryRegionPortio *find_portio(MemoryRegionPortioList *mrpio, uint64_t offset, unsigned size, bool write) { const MemoryRegionPortio *mrp; for (mrp = mrpio->ports; mrp->size; ++mrp) { if (offset >= mrp->offset && offset < mrp->offset + mrp->len && size == mrp->size && (write ? (bool)mrp->write : (bool)mrp->read)) { return mrp; } } return NULL; } static uint64_t portio_read(void *opaque, hwaddr addr, unsigned size) { MemoryRegionPortioList *mrpio = opaque; const MemoryRegionPortio *mrp = find_portio(mrpio, addr, size, false); uint64_t data; data = ((uint64_t)1 << (size * 8)) - 1; if (mrp) { data = mrp->read(mrpio->portio_opaque, mrp->base + addr); } else if (size == 2) { mrp = find_portio(mrpio, addr, 1, false); if (mrp) { data = mrp->read(mrpio->portio_opaque, mrp->base + addr); if (addr + 1 < mrp->offset + mrp->len) { data |= mrp->read(mrpio->portio_opaque, mrp->base + addr + 1) << 8; } else { data |= 0xff00; } } } return data; } static void portio_write(void *opaque, hwaddr addr, uint64_t data, unsigned size) { MemoryRegionPortioList *mrpio = opaque; const MemoryRegionPortio *mrp = find_portio(mrpio, addr, size, true); if (mrp) { mrp->write(mrpio->portio_opaque, mrp->base + addr, data); } else if (size == 2) { mrp = find_portio(mrpio, addr, 1, true); if (mrp) { mrp->write(mrpio->portio_opaque, mrp->base + addr, data & 0xff); if (addr + 1 < mrp->offset + mrp->len) { mrp->write(mrpio->portio_opaque, mrp->base + addr + 1, data >> 8); } } } } static const MemoryRegionOps portio_ops = { .read = portio_read, .write = portio_write, .endianness = DEVICE_LITTLE_ENDIAN, .valid.unaligned = true, .impl.unaligned = true, }; static void portio_list_add_1(PortioList *piolist, const MemoryRegionPortio *pio_init, unsigned count, unsigned start, unsigned off_low, unsigned off_high) { MemoryRegionPortioList *mrpio; unsigned i; /* Copy the sub-list and null-terminate it. */ mrpio = g_malloc0(sizeof(MemoryRegionPortioList) + sizeof(MemoryRegionPortio) * (count + 1)); mrpio->portio_opaque = piolist->opaque; memcpy(mrpio->ports, pio_init, sizeof(MemoryRegionPortio) * count); memset(mrpio->ports + count, 0, sizeof(MemoryRegionPortio)); /* Adjust the offsets to all be zero-based for the region. */ for (i = 0; i < count; ++i) { mrpio->ports[i].offset -= off_low; mrpio->ports[i].base = start + off_low; } memory_region_init_io(&mrpio->mr, piolist->owner, &portio_ops, mrpio, piolist->name, off_high - off_low); if (piolist->flush_coalesced_mmio) { memory_region_set_flush_coalesced(&mrpio->mr); } memory_region_add_subregion(piolist->address_space, start + off_low, &mrpio->mr); piolist->regions[piolist->nr] = &mrpio->mr; ++piolist->nr; } void portio_list_add(PortioList *piolist, MemoryRegion *address_space, uint32_t start) { const MemoryRegionPortio *pio, *pio_start = piolist->ports; unsigned int off_low, off_high, off_last, count; piolist->address_space = address_space; /* Handle the first entry specially. */ off_last = off_low = pio_start->offset; off_high = off_low + pio_start->len + pio_start->size - 1; count = 1; for (pio = pio_start + 1; pio->size != 0; pio++, count++) { /* All entries must be sorted by offset. */ assert(pio->offset >= off_last); off_last = pio->offset; /* If we see a hole, break the region. */ if (off_last > off_high) { portio_list_add_1(piolist, pio_start, count, start, off_low, off_high); /* ... and start collecting anew. */ pio_start = pio; off_low = off_last; off_high = off_low + pio->len + pio_start->size - 1; count = 0; } else if (off_last + pio->len > off_high) { off_high = off_last + pio->len + pio_start->size - 1; } } /* There will always be an open sub-list. */ portio_list_add_1(piolist, pio_start, count, start, off_low, off_high); } void portio_list_del(PortioList *piolist) { MemoryRegionPortioList *mrpio; unsigned i; for (i = 0; i < piolist->nr; ++i) { mrpio = container_of(piolist->regions[i], MemoryRegionPortioList, mr); memory_region_del_subregion(piolist->address_space, &mrpio->mr); } }