sim: Include object header files in SWIG interfaces
authorAndreas Sandberg <Andreas.Sandberg@arm.com>
Fri, 2 Nov 2012 16:32:01 +0000 (11:32 -0500)
committerAndreas Sandberg <Andreas.Sandberg@arm.com>
Fri, 2 Nov 2012 16:32:01 +0000 (11:32 -0500)
When casting objects in the generated SWIG interfaces, SWIG uses
classical C-style casts ( (Foo *)bar; ). In some cases, this can
degenerate into the equivalent of a reinterpret_cast (mainly if only a
forward declaration of the type is available). This usually works for
most compilers, but it is known to break if multiple inheritance is
used anywhere in the object hierarchy.

This patch introduces the cxx_header attribute to Python SimObject
definitions, which should be used to specify a header to include in
the SWIG interface. The header should include the declaration of the
wrapped object. We currently don't enforce header the use of the
header attribute, but a warning will be generated for objects that do
not use it.

122 files changed:
src/SConscript
src/arch/alpha/AlphaInterrupts.py
src/arch/alpha/AlphaSystem.py
src/arch/alpha/AlphaTLB.py
src/arch/arm/ArmInterrupts.py
src/arch/arm/ArmNativeTrace.py
src/arch/arm/ArmSystem.py
src/arch/arm/ArmTLB.py
src/arch/mips/MipsInterrupts.py
src/arch/mips/MipsSystem.py
src/arch/mips/MipsTLB.py
src/arch/power/PowerInterrupts.py
src/arch/power/PowerTLB.py
src/arch/sparc/SparcInterrupts.py
src/arch/sparc/SparcNativeTrace.py
src/arch/sparc/SparcSystem.py
src/arch/sparc/SparcTLB.py
src/arch/x86/X86LocalApic.py
src/arch/x86/X86NativeTrace.py
src/arch/x86/X86System.py
src/arch/x86/X86TLB.py
src/arch/x86/bios/ACPI.py
src/arch/x86/bios/E820.py
src/arch/x86/bios/IntelMP.py
src/arch/x86/bios/SMBios.py
src/base/CPA.py
src/base/vnc/Vnc.py
src/cpu/BaseCPU.py
src/cpu/CheckerCPU.py
src/cpu/ExeTracer.py
src/cpu/FuncUnit.py
src/cpu/IntelTrace.py
src/cpu/IntrControl.py
src/cpu/LegionTrace.py
src/cpu/NativeTrace.py
src/cpu/inorder/InOrderCPU.py
src/cpu/inorder/InOrderTrace.py
src/cpu/inteltrace.hh
src/cpu/o3/FUPool.py
src/cpu/simple/AtomicSimpleCPU.py
src/cpu/simple/BaseSimpleCPU.py
src/cpu/simple/TimingSimpleCPU.py
src/cpu/static_inst.hh
src/cpu/testers/directedtest/RubyDirectedTester.py
src/cpu/testers/memtest/MemTest.py
src/cpu/testers/networktest/NetworkTest.py
src/cpu/testers/rubytest/RubyTester.py
src/cpu/testers/traffic_gen/TrafficGen.py
src/dev/BadDevice.py
src/dev/CopyEngine.py
src/dev/Device.py
src/dev/DiskImage.py
src/dev/Ethernet.py
src/dev/Ide.py
src/dev/Pci.py
src/dev/Platform.py
src/dev/SimpleDisk.py
src/dev/Terminal.py
src/dev/Uart.py
src/dev/alpha/AlphaBackdoor.py
src/dev/alpha/Tsunami.py
src/dev/alpha/tsunami_io.hh
src/dev/arm/RealView.py
src/dev/arm/pl011.hh
src/dev/arm/realview.hh
src/dev/arm/timer_cpulocal.hh
src/dev/copy_engine.hh
src/dev/mips/Malta.py
src/dev/mips/malta_io.hh
src/dev/sparc/T1000.py
src/dev/x86/Cmos.py
src/dev/x86/I8042.py
src/dev/x86/I82094AA.py
src/dev/x86/I8237.py
src/dev/x86/I8254.py
src/dev/x86/I8259.py
src/dev/x86/Pc.py
src/dev/x86/PcSpeaker.py
src/dev/x86/SouthBridge.py
src/dev/x86/X86IntPin.py
src/dev/x86/speaker.hh
src/mem/AbstractMemory.py
src/mem/AddrMapper.py
src/mem/Bridge.py
src/mem/Bus.py
src/mem/CommMonitor.py
src/mem/MemObject.py
src/mem/SimpleDRAM.py
src/mem/SimpleMemory.py
src/mem/cache/BaseCache.py
src/mem/cache/prefetch/Prefetcher.py
src/mem/cache/tags/iic_repl/Repl.py
src/mem/ruby/network/BasicLink.py
src/mem/ruby/network/BasicRouter.py
src/mem/ruby/network/Network.py
src/mem/ruby/network/fault_model/FaultModel.py
src/mem/ruby/network/garnet/BaseGarnetNetwork.py
src/mem/ruby/network/garnet/fixed-pipeline/GarnetLink_d.py
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.py
src/mem/ruby/network/garnet/fixed-pipeline/GarnetRouter_d.py
src/mem/ruby/network/garnet/flexible-pipeline/GarnetLink.py
src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.py
src/mem/ruby/network/garnet/flexible-pipeline/GarnetRouter.py
src/mem/ruby/network/simple/SimpleLink.py
src/mem/ruby/network/simple/SimpleNetwork.py
src/mem/ruby/profiler/Profiler.py
src/mem/ruby/slicc_interface/Controller.py
src/mem/ruby/system/Cache.py
src/mem/ruby/system/DirectoryMemory.py
src/mem/ruby/system/MemoryControl.py
src/mem/ruby/system/RubyMemoryControl.py
src/mem/ruby/system/RubySystem.py
src/mem/ruby/system/Sequencer.py
src/mem/ruby/system/WireBuffer.py
src/mem/slicc/symbols/StateMachine.py
src/python/m5/SimObject.py
src/sim/BaseTLB.py
src/sim/ClockedObject.py
src/sim/InstTracer.py
src/sim/Process.py
src/sim/Root.py
src/sim/System.py

index 69a452ac6ffe7e585a7dbaa462104fbbd0e6a58b..9af71c9a6dd96632020796a0eacb991b118b17fb 100755 (executable)
@@ -451,6 +451,12 @@ sys.meta_path.remove(importer)
 sim_objects = m5.SimObject.allClasses
 all_enums = m5.params.allEnums
 
+if m5.SimObject.noCxxHeader:
+    print >> sys.stderr, \
+        "warning: At least one SimObject lacks a header specification. " \
+        "This can cause unexpected results in the generated SWIG " \
+        "wrappers."
+
 # Find param types that need to be explicitly wrapped with swig.
 # These will be recognized because the ParamDesc will have a
 # swig_decl() method.  Most param types are based on types that don't
index ecfcf5c21261a4005e1e6b8473ea11779534926b..a75b11fc0442b01321c4f3107ed76284369464a5 100644 (file)
@@ -31,3 +31,4 @@ from m5.SimObject import SimObject
 class AlphaInterrupts(SimObject):
     type = 'AlphaInterrupts'
     cxx_class = 'AlphaISA::Interrupts'
+    cxx_header = "arch/alpha/interrupts.hh"
index fcbe81edd37efa99363744560f9bb2764f95028d..2486ec059136ac525c0e0c9232778b2a5e2c4e61 100644 (file)
@@ -32,6 +32,7 @@ from System import System
 
 class AlphaSystem(System):
     type = 'AlphaSystem'
+    cxx_header = "arch/alpha/system.hh"
     console = Param.String("file that contains the console code")
     pal = Param.String("file that contains palcode")
     system_type = Param.UInt64("Type of system we are emulating")
@@ -40,6 +41,7 @@ class AlphaSystem(System):
 
 class LinuxAlphaSystem(AlphaSystem):
     type = 'LinuxAlphaSystem'
+    cxx_header = "arch/alpha/linux/system.hh"
     system_type = 34
     system_rev = 1 << 10
 
@@ -48,10 +50,12 @@ class LinuxAlphaSystem(AlphaSystem):
 
 class FreebsdAlphaSystem(AlphaSystem):
     type = 'FreebsdAlphaSystem'
+    cxx_header = "arch/alpha/freebsd/system.hh"
     system_type = 34
     system_rev = 1 << 10
 
 class Tru64AlphaSystem(AlphaSystem):
     type = 'Tru64AlphaSystem'
+    cxx_header = "arch/alpha/tru64/system.hh"
     system_type = 12
     system_rev = 2<<1
index 51f636ec26262e3a9d9eb820f2adfbba5753a3d6..8031c719f6c104e6b5352eec50ac0450e7f0f353 100644 (file)
@@ -34,6 +34,7 @@ from BaseTLB import BaseTLB
 class AlphaTLB(BaseTLB):
     type = 'AlphaTLB'
     cxx_class = 'AlphaISA::TLB'
+    cxx_header = "arch/alpha/tlb.hh"
     size = Param.Int("TLB size")
 
 class AlphaDTB(AlphaTLB):
index f21d49e95873716a947dcadc5112a5e984b505d3..68a58958d7db5c5e70139d0af6871f4269329f39 100644 (file)
@@ -31,3 +31,4 @@ from m5.SimObject import SimObject
 class ArmInterrupts(SimObject):
     type = 'ArmInterrupts'
     cxx_class = 'ArmISA::Interrupts'
+    cxx_header = "arch/arm/interrupts.hh"
index 0a76913e39e241911fbe5fb25e36059c714d824c..91da1ed7609544153ff523fdeda184f85099c200 100644 (file)
@@ -33,5 +33,6 @@ from NativeTrace import NativeTrace
 class ArmNativeTrace(NativeTrace):
     type = 'ArmNativeTrace'
     cxx_class = 'Trace::ArmNativeTrace'
+    cxx_header = "arch/arm/nativetrace.hh"
     stop_on_pc_error = Param.Bool(True,
             "Stop M5 if it and statetrace's pcs are different")
index 3ca9b85738e17ac99ddd12deb9501b25cc5554a1..ce363865c74ee1008efda921817588a64cf9b188 100644 (file)
@@ -48,6 +48,7 @@ class ArmMachineType(Enum):
 
 class ArmSystem(System):
     type = 'ArmSystem'
+    cxx_header = "arch/arm/system.hh"
     load_addr_mask = 0xffffffff
     # 0x35 Implementor is '5' from "M5"
     # 0x0 Variant
@@ -62,6 +63,7 @@ class ArmSystem(System):
 
 class LinuxArmSystem(ArmSystem):
     type = 'LinuxArmSystem'
+    cxx_header = "arch/arm/linux/system.hh"
     load_addr_mask = 0x0fffffff
     machine_type = Param.ArmMachineType('RealView_PBX',
         "Machine id from http://www.arm.linux.org.uk/developer/machines/")
index 0a931b7e548a474fcf0dde5e8d257d2c237f81b3..c70dd80c8ebaed5358bc2d34a0995c1357503a3c 100644 (file)
@@ -45,6 +45,7 @@ from MemObject import MemObject
 class ArmTableWalker(MemObject):
     type = 'ArmTableWalker'
     cxx_class = 'ArmISA::TableWalker'
+    cxx_header = "arch/arm/table_walker.hh"
     port = MasterPort("Port for TableWalker to do walk the translation with")
     sys = Param.System(Parent.any, "system object parameter")
     num_squash_per_cycle = Param.Unsigned(2,
@@ -53,5 +54,6 @@ class ArmTableWalker(MemObject):
 class ArmTLB(SimObject):
     type = 'ArmTLB'
     cxx_class = 'ArmISA::TLB'
+    cxx_header = "arch/arm/tlb.hh"
     size = Param.Int(64, "TLB size")
     walker = Param.ArmTableWalker(ArmTableWalker(), "HW Table walker")
index 06cd54263751f83b76ffb94c6dfc6e6ca88dbf7e..9cde5daef6c3dfda8eff2c1840527dce57faacfd 100644 (file)
@@ -31,3 +31,4 @@ from m5.SimObject import SimObject
 class MipsInterrupts(SimObject):
     type = 'MipsInterrupts'
     cxx_class = 'MipsISA::Interrupts'
+    cxx_header = 'arch/mips/interrupts.hh'
index 4a0851eba4142ad71c3b2fc68108ed7faed07dee..c6ceb71db32838ffb0ce57340ad7112f3c170c9c 100644 (file)
@@ -36,6 +36,7 @@ from System import System
 
 class MipsSystem(System):
     type = 'MipsSystem'
+    cxx_header = 'arch/mips/system.hh'
     console = Param.String("file that contains the console code")
     bare_iron = Param.Bool(False, "Using Bare Iron Mode?")
     hex_file_name = Param.String("test.hex","hex file that contains [address,data] pairs")
@@ -45,6 +46,7 @@ class MipsSystem(System):
 
 class LinuxMipsSystem(MipsSystem):
     type = 'LinuxMipsSystem'
+    cxx_header = 'arch/mips/linux/system.hh'
     system_type = 34
     system_rev = 1 << 10
 
@@ -53,6 +55,7 @@ class LinuxMipsSystem(MipsSystem):
 
 class BareIronMipsSystem(MipsSystem):
     type = 'BareIronMipsSystem'
+    cxx_header = 'arch/mips/bare_iron/system.hh'
     bare_iron = True
     system_type = 34
     system_rev = 1 << 10
index 16cbe68797d5561a12fa460e2885c70f054db6ff..c43cee717953f4b35dd27b34347842da2ec68e77 100644 (file)
@@ -37,4 +37,5 @@ from BaseTLB import BaseTLB
 class MipsTLB(BaseTLB):
     type = 'MipsTLB'
     cxx_class = 'MipsISA::TLB'
+    cxx_header = 'arch/mips/tlb.hh'
     size = Param.Int(64, "TLB size")
index 82d614077f5693e945e5dfc247eb7d89699f2a71..2c6a5c2c3a05625aeef75c5d2655ab54c20c1c53 100644 (file)
@@ -31,3 +31,4 @@ from m5.SimObject import SimObject
 class PowerInterrupts(SimObject):
     type = 'PowerInterrupts'
     cxx_class = 'PowerISA::Interrupts'
+    cxx_header = 'arch/power/interrupts.hh'
index 36dff53338300fc8bc05f4053ba06a5c6dfa07a7..ae6503a1f16558d266b58027f40195b2621e691d 100644 (file)
@@ -34,4 +34,5 @@ from m5.params import *
 class PowerTLB(SimObject):
     type = 'PowerTLB'
     cxx_class = 'PowerISA::TLB'
+    cxx_header = 'arch/power/tlb.hh'
     size = Param.Int(64, "TLB size")
index 2cc964c2dea8e427c0dc9b8e9a0ffd71cde09a4c..c11176164abff3f42e3d084d5054e2d001e45f70 100644 (file)
@@ -31,3 +31,4 @@ from m5.SimObject import SimObject
 class SparcInterrupts(SimObject):
     type = 'SparcInterrupts'
     cxx_class = 'SparcISA::Interrupts'
+    cxx_header = 'arch/sparc/interrupts.hh'
index 0a92764efc9ecb1efefac0bfcf908d6879468507..cdc34b541f7fc29b60414221f918a0579606b7fe 100644 (file)
@@ -33,3 +33,4 @@ from NativeTrace import NativeTrace
 class SparcNativeTrace(NativeTrace):
     type = 'SparcNativeTrace'
     cxx_class = 'Trace::SparcNativeTrace'
+    cxx_header = 'arch/sparc/nativetrace.hh'
index b0fddf31170b2e5e213a78fb0732978009f414bf..9d8be5d064d0f3691689daf7ec66b5459a22ee1f 100644 (file)
@@ -33,6 +33,7 @@ from System import System
 
 class SparcSystem(System):
     type = 'SparcSystem'
+    cxx_header = 'arch/sparc/system.hh'
     _rom_base = 0xfff0000000
     _nvram_base = 0x1f11000000
     _hypervisor_desc_base = 0x1f12080000
index 0c3fdc7fb6b2b23a9d2a47819ed1beff77567410..219f6842ac57804180a092977639281bdccb353c 100644 (file)
@@ -34,4 +34,5 @@ from BaseTLB import BaseTLB
 class SparcTLB(BaseTLB):
     type = 'SparcTLB'
     cxx_class = 'SparcISA::TLB'
+    cxx_header = 'arch/sparc/tlb.hh'
     size = Param.Int(64, "TLB size")
index 0bc36612d24d60a6f341fe41960f02363174f466..5c14679c258399f3489b7f499b89f10263134a77 100644 (file)
@@ -46,6 +46,7 @@ from Device import BasicPioDevice
 class X86LocalApic(BasicPioDevice):
     type = 'X86LocalApic'
     cxx_class = 'X86ISA::Interrupts'
+    cxx_header = 'arch/x86/interrupts.hh'
     int_master = MasterPort("Port for sending interrupt messages")
     int_slave = SlavePort("Port for receiving interrupt messages")
     int_latency = Param.Latency('1ns', \
index cbed77f371445750eb8d711f3d5104feaf780acd..281a2df503d46373fc9afed303950d9e684c91cf 100644 (file)
@@ -33,3 +33,4 @@ from NativeTrace import NativeTrace
 class X86NativeTrace(NativeTrace):
     type = 'X86NativeTrace'
     cxx_class = 'Trace::X86NativeTrace'
+    cxx_header = 'arch/x86/nativetrace.hh'
index 8b294fb861745d01d1efc8f4634e62f6b1cee8b0..02185b648af91822058318839adceaa4f94c3ed3 100644 (file)
@@ -44,6 +44,7 @@ from System import System
 
 class X86System(System):
     type = 'X86System'
+    cxx_header = 'arch/x86/system.hh'
     smbios_table = Param.X86SMBiosSMBiosTable(
             X86SMBiosSMBiosTable(), 'table of smbios/dmi information')
     intel_mp_pointer = Param.X86IntelMPFloatingPointer(
@@ -58,6 +59,7 @@ class X86System(System):
 
 class LinuxX86System(X86System):
     type = 'LinuxX86System'
+    cxx_header = 'arch/x86/linux/system.hh'
 
     e820_table = Param.X86E820Table(
             X86E820Table(), 'E820 map of physical memory')
index 334d2a0cf4a9bd5e54028ed34958010ee9330b06..a08dbb138be4ee32fbba42e1efec6e68a9211419 100644 (file)
@@ -44,12 +44,14 @@ from MemObject import MemObject
 class X86PagetableWalker(MemObject):
     type = 'X86PagetableWalker'
     cxx_class = 'X86ISA::Walker'
+    cxx_header = 'arch/x86/pagetable_walker.hh'
     port = MasterPort("Port for the hardware table walker")
     system = Param.System(Parent.any, "system object")
 
 class X86TLB(BaseTLB):
     type = 'X86TLB'
     cxx_class = 'X86ISA::TLB'
+    cxx_header = 'arch/x86/tlb.hh'
     size = Param.Int(64, "TLB size")
     walker = Param.X86PagetableWalker(\
             X86PagetableWalker(), "page table walker")
index 671ed902dadea89490943c4594a263bd74ffb85b..77de42f92534ebdff750f5fca8bf4c0a33bc4f25 100644 (file)
@@ -41,6 +41,7 @@ from m5.SimObject import SimObject
 class X86ACPISysDescTable(SimObject):
     type = 'X86ACPISysDescTable'
     cxx_class = 'X86ISA::ACPI::SysDescTable'
+    cxx_header = 'arch/x86/bios/acpi.hh'
     abstract = True
 
     oem_id = Param.String('', 'string identifying the oem')
@@ -55,12 +56,14 @@ class X86ACPISysDescTable(SimObject):
 class X86ACPIRSDT(X86ACPISysDescTable):
     type = 'X86ACPIRSDT'
     cxx_class = 'X86ISA::ACPI::RSDT'
+    cxx_header = 'arch/x86/bios/acpi.hh'
 
     entries = VectorParam.X86ACPISysDescTable([], 'system description tables')
 
 class X86ACPIXSDT(X86ACPISysDescTable):
     type = 'X86ACPIXSDT'
     cxx_class = 'X86ISA::ACPI::XSDT'
+    cxx_header = 'arch/x86/bios/acpi.hh'
 
     entries = VectorParam.X86ACPISysDescTable([], 'system description tables')
 
@@ -68,6 +71,7 @@ class X86ACPIXSDT(X86ACPISysDescTable):
 class X86ACPIRSDP(SimObject):
     type = 'X86ACPIRSDP'
     cxx_class = 'X86ISA::ACPI::RSDP'
+    cxx_header = 'arch/x86/bios/acpi.hh'
 
     oem_id = Param.String('', 'string identifying the oem')
     # Because 0 encodes ACPI 1.0, 2 encodes ACPI 3.0, the version implemented
index 78b5faee037728f150f340b38e84407051c7a352..9fa18edbdc94ebad29430c52e4ad052dc26a3352 100644 (file)
@@ -41,6 +41,7 @@ from m5.SimObject import SimObject
 class X86E820Entry(SimObject):
     type = 'X86E820Entry'
     cxx_class = 'X86ISA::E820Entry'
+    cxx_header = 'arch/x86/bios/e820.hh'
 
     addr = Param.Addr(0, 'address of the beginning of the region')
     size = Param.MemorySize('0B', 'size of the region')
@@ -49,5 +50,6 @@ class X86E820Entry(SimObject):
 class X86E820Table(SimObject):
     type = 'X86E820Table'
     cxx_class = 'X86ISA::E820Table'
+    cxx_header = 'arch/x86/bios/e820.hh'
 
     entries = VectorParam.X86E820Entry('entries for the e820 table')
index 713f62960d6d872b1aca2a76e24cf4b0e25b4ab0..21f93eaad1831ffe3a960bbd657d51df36bed182 100644 (file)
@@ -41,6 +41,7 @@ from m5.SimObject import SimObject
 class X86IntelMPFloatingPointer(SimObject):
     type = 'X86IntelMPFloatingPointer'
     cxx_class = 'X86ISA::IntelMP::FloatingPointer'
+    cxx_header = 'arch/x86/bios/intelmp.hh'
 
     # The minor revision of the spec to support. The major version is assumed
     # to be 1 in accordance with the spec.
@@ -53,6 +54,7 @@ class X86IntelMPFloatingPointer(SimObject):
 class X86IntelMPConfigTable(SimObject):
     type = 'X86IntelMPConfigTable'
     cxx_class = 'X86ISA::IntelMP::ConfigTable'
+    cxx_header = 'arch/x86/bios/intelmp.hh'
 
     spec_rev = Param.UInt8(4, 'minor revision of the MP spec supported')
     oem_id = Param.String("", 'system manufacturer')
@@ -80,16 +82,19 @@ class X86IntelMPConfigTable(SimObject):
 class X86IntelMPBaseConfigEntry(SimObject):
     type = 'X86IntelMPBaseConfigEntry'
     cxx_class = 'X86ISA::IntelMP::BaseConfigEntry'
+    cxx_header = 'arch/x86/bios/intelmp.hh'
     abstract = True
 
 class X86IntelMPExtConfigEntry(SimObject):
     type = 'X86IntelMPExtConfigEntry'
     cxx_class = 'X86ISA::IntelMP::ExtConfigEntry'
+    cxx_header = 'arch/x86/bios/intelmp.hh'
     abstract = True
 
 class X86IntelMPProcessor(X86IntelMPBaseConfigEntry):
     type = 'X86IntelMPProcessor'
     cxx_class = 'X86ISA::IntelMP::Processor'
+    cxx_header = 'arch/x86/bios/intelmp.hh'
 
     local_apic_id = Param.UInt8(0, 'local APIC id')
     local_apic_version = Param.UInt8(0,
@@ -106,6 +111,7 @@ class X86IntelMPProcessor(X86IntelMPBaseConfigEntry):
 class X86IntelMPBus(X86IntelMPBaseConfigEntry):
     type = 'X86IntelMPBus'
     cxx_class = 'X86ISA::IntelMP::Bus'
+    cxx_header = 'arch/x86/bios/intelmp.hh'
 
     bus_id = Param.UInt8(0, 'bus id assigned by the bios')
     bus_type = Param.String("", 'string that identify the bus type')
@@ -118,6 +124,7 @@ class X86IntelMPBus(X86IntelMPBaseConfigEntry):
 class X86IntelMPIOAPIC(X86IntelMPBaseConfigEntry):
     type = 'X86IntelMPIOAPIC'
     cxx_class = 'X86ISA::IntelMP::IOAPIC'
+    cxx_header = 'arch/x86/bios/intelmp.hh'
 
     id = Param.UInt8(0, 'id of this APIC')
     version = Param.UInt8(0, 'bits 0-7 of the version register')
@@ -148,6 +155,7 @@ class X86IntelMPTriggerMode(Enum):
 class X86IntelMPIOIntAssignment(X86IntelMPBaseConfigEntry):
     type = 'X86IntelMPIOIntAssignment'
     cxx_class = 'X86ISA::IntelMP::IOIntAssignment'
+    cxx_header = 'arch/x86/bios/intelmp.hh'
 
     interrupt_type = Param.X86IntelMPInterruptType('INT', 'type of interrupt')
 
@@ -167,6 +175,7 @@ class X86IntelMPIOIntAssignment(X86IntelMPBaseConfigEntry):
 class X86IntelMPLocalIntAssignment(X86IntelMPBaseConfigEntry):
     type = 'X86IntelMPLocalIntAssignment'
     cxx_class = 'X86ISA::IntelMP::LocalIntAssignment'
+    cxx_header = 'arch/x86/bios/intelmp.hh'
 
     interrupt_type = Param.X86IntelMPInterruptType('INT', 'type of interrupt')
 
@@ -192,6 +201,7 @@ class X86IntelMPAddressType(Enum):
 class X86IntelMPAddrSpaceMapping(X86IntelMPExtConfigEntry):
     type = 'X86IntelMPAddrSpaceMapping'
     cxx_class = 'X86ISA::IntelMP::AddrSpaceMapping'
+    cxx_header = 'arch/x86/bios/intelmp.hh'
 
     bus_id = Param.UInt8(0, 'id of the bus the address space is mapped to')
     address_type = Param.X86IntelMPAddressType('IOAddress',
@@ -202,6 +212,7 @@ class X86IntelMPAddrSpaceMapping(X86IntelMPExtConfigEntry):
 class X86IntelMPBusHierarchy(X86IntelMPExtConfigEntry):
     type = 'X86IntelMPBusHierarchy'
     cxx_class = 'X86ISA::IntelMP::BusHierarchy'
+    cxx_header = 'arch/x86/bios/intelmp.hh'
 
     bus_id = Param.UInt8(0, 'id of the bus being described')
     subtractive_decode = Param.Bool(False,
@@ -216,6 +227,7 @@ class X86IntelMPRangeList(Enum):
 class X86IntelMPCompatAddrSpaceMod(X86IntelMPExtConfigEntry):
     type = 'X86IntelMPCompatAddrSpaceMod'
     cxx_class = 'X86ISA::IntelMP::CompatAddrSpaceMod'
+    cxx_header = 'arch/x86/bios/intelmp.hh'
 
     bus_id = Param.UInt8(0, 'id of the bus being described')
     add = Param.Bool(False,
index 8fd3d57d8fcdfed2db965d2e312a11b84300901b..918d43c2ede01ddd0309ddf6ca30c1eafc62c8b5 100644 (file)
@@ -41,6 +41,7 @@ from m5.SimObject import SimObject
 class X86SMBiosSMBiosStructure(SimObject):
     type = 'X86SMBiosSMBiosStructure'
     cxx_class = 'X86ISA::SMBios::SMBiosStructure'
+    cxx_header = 'arch/x86/bios/smbios.hh'
     abstract = True
 
 class Characteristic(Enum):
@@ -93,6 +94,7 @@ class ExtCharacteristic(Enum):
 class X86SMBiosBiosInformation(X86SMBiosSMBiosStructure):
     type = 'X86SMBiosBiosInformation'
     cxx_class = 'X86ISA::SMBios::BiosInformation'
+    cxx_header = 'arch/x86/bios/smbios.hh'
 
     vendor = Param.String("", "vendor name string")
     version = Param.String("", "version string")
@@ -115,6 +117,7 @@ class X86SMBiosBiosInformation(X86SMBiosSMBiosStructure):
 class X86SMBiosSMBiosTable(SimObject):
     type = 'X86SMBiosSMBiosTable'
     cxx_class = 'X86ISA::SMBios::SMBiosTable'
+    cxx_header = 'arch/x86/bios/smbios.hh'
 
     major_version = Param.UInt8(2, "major version number")
     minor_version = Param.UInt8(5, "minor version number")
index c0beaedeffcad21d69bb1dd913e0b6d04232a0b3..cbed29a37b508eee8a04ace87164a6ed0326084f 100644 (file)
@@ -3,6 +3,7 @@ from m5.params import *
 
 class CPA(SimObject):
     type = 'CPA'
+    cxx_header = "base/cp_annotate.hh"
 
     enabled = Param.Bool(False, "Is Annotation enabled?")
     user_apps = VectorParam.String([], "List of apps to get symbols for")
index 4e8e185124ce9867dbb86acc0d6ae4cc718add0a..a7faefb41827548afcb2a22243bf7343c9be9928 100644 (file)
@@ -40,9 +40,11 @@ from m5.params import *
 
 class VncInput(SimObject):
     type = 'VncInput'
+    cxx_header = "base/vnc/vncinput.hh"
     frame_capture = Param.Bool(False, "capture changed frames to files")
 
 class VncServer(VncInput):
     type = 'VncServer'
+    cxx_header = "base/vnc/vncserver.hh"
     port = Param.TcpPort(5900, "listen port")
     number = Param.Int(0, "vnc client number")
index 3319577497c52fc9242e846785d870c60ae7ae90..dfbd459fd3ab4882ac774d9d9e58ef11b7dedbee 100644 (file)
@@ -76,11 +76,7 @@ elif buildEnv['TARGET_ISA'] == 'power':
 class BaseCPU(MemObject):
     type = 'BaseCPU'
     abstract = True
-
-    @classmethod
-    def export_method_cxx_predecls(cls, code):
-        code('#include "cpu/base.hh"')
-
+    cxx_header = "cpu/base.hh"
 
     @classmethod
     def export_methods(cls, code):
index a6b5da5d77af48ac9c1ca1f126945cae2dcd2ae8..f08b59f202ed9247f74364645b0fa6689c121200 100644 (file)
@@ -32,6 +32,7 @@ from BaseCPU import BaseCPU
 class CheckerCPU(BaseCPU):
     type = 'CheckerCPU'
     abstract = True
+    cxx_header = "cpu/checker/cpu.hh"
     exitOnError = Param.Bool(False, "Exit on an error")
     updateOnError = Param.Bool(False,
         "Update the checker with the main CPU's state on an error")
index 5754f5d5b2f8f85cc03ea152e88322761084838e..f672fd65f6104c35508a52086176938f6cbb74e8 100644 (file)
@@ -33,3 +33,4 @@ from InstTracer import InstTracer
 class ExeTracer(InstTracer):
     type = 'ExeTracer'
     cxx_class = 'Trace::ExeTracer'
+    cxx_header = "cpu/exetrace.hh"
index 92d7e13ca2d2daaec80d072b29e6b5598c0a5d4a..0bb23e876d0690aff21720905d99ad7ff44b7634 100644 (file)
@@ -53,11 +53,13 @@ class OpClass(Enum):
 
 class OpDesc(SimObject):
     type = 'OpDesc'
+    cxx_header = "cpu/func_unit.hh"
     issueLat = Param.Cycles(1, "cycles until another can be issued")
     opClass = Param.OpClass("type of operation")
     opLat = Param.Cycles(1, "cycles until result is available")
 
 class FUDesc(SimObject):
     type = 'FUDesc'
+    cxx_header = "cpu/func_unit.hh"
     count = Param.Int("number of these FU's available")
     opList = VectorParam.OpDesc("operation classes for this FU type")
index 3642f3174b7d7beb93859de52ede7be7b6124409..6319ed1aae0aa403574670c46b8b14dfe7b4f3e8 100644 (file)
@@ -33,3 +33,4 @@ from InstTracer import InstTracer
 class IntelTrace(InstTracer):
     type = 'IntelTrace'
     cxx_class = 'Trace::IntelTrace'
+    cxx_header = "cpu/inteltrace.hh"
index eb4b1696bfbbc58c09ab1bca3d0277b53eeacae0..72ea6ccb97adfe1fa8e4916ff27682718371d645 100644 (file)
@@ -31,4 +31,5 @@ from m5.params import *
 from m5.proxy import *
 class IntrControl(SimObject):
     type = 'IntrControl'
+    cxx_header = "cpu/intr_control.hh"
     sys = Param.System(Parent.any, "the system we are part of")
index d450dd00ece36bde49f27c8118680b0e2c5a0d3e..8b2a7cd85ca4ac9cc220ca9cbaf1f6ce01b72e82 100644 (file)
@@ -33,3 +33,4 @@ from InstTracer import InstTracer
 class LegionTrace(InstTracer):
     type = 'LegionTrace'
     cxx_class = 'Trace::LegionTrace'
+    cxx_header = "cpu/legiontrace.hh"
index dba6de06776aa97baa2a63b516009bdc06c8fe82..fbcb341f0029502ad0f70f7df09ff8472757ca87 100644 (file)
@@ -34,3 +34,4 @@ class NativeTrace(ExeTracer):
     abstract = True
     type = 'NativeTrace'
     cxx_class = 'Trace::NativeTrace'
+    cxx_header = "cpu/nativetrace.hh"
index 119de7f1ce03b50def1517ba6264aff64f1d88e0..811549bae298afd5a8ddc6cc77e89a70a3c275c0 100644 (file)
@@ -35,6 +35,7 @@ class ThreadModel(Enum):
 
 class InOrderCPU(BaseCPU):
     type = 'InOrderCPU'
+    cxx_header = "cpu/inorder/cpu.hh"
     activity = Param.Unsigned(0, "Initial count")
 
     threadModel = Param.ThreadModel('SMT', "Multithreading model (SE-MODE only)")
index 3453fa675ba90c018974fd9af9594923f474432c..fd4e00ed1b88eeb3d05917f947084778d9a2b47d 100644 (file)
@@ -33,3 +33,4 @@ from InstTracer import InstTracer
 class InOrderTrace(InstTracer):
     type = 'InOrderTrace'
     cxx_class = 'Trace::InOrderTrace'
+    cxx_header = "cpu/inorder/inorder_trace.hh"
index dbb6300ac576de70ab820ae5f091560de06f7f50..e5f88bf1a3f9a48228d1383ea400bb3da89062ea 100644 (file)
 #include "base/trace.hh"
 #include "base/types.hh"
 #include "cpu/static_inst.hh"
+#include "cpu/thread_context.hh"
 #include "debug/ExecEnable.hh"
 #include "debug/ExecSpeculative.hh"
 #include "params/IntelTrace.hh"
 #include "sim/insttracer.hh"
 
-class ThreadContext;
-
 namespace Trace {
 
 class IntelTraceRecord : public InstRecord
index 1d3afbc6b1ef58e1ab73390d24ea1d46edae8f87..0f4ea67c79485031d217aee8fc2c08f5a43554dc 100644 (file)
@@ -33,6 +33,7 @@ from FuncUnitConfig import *
 
 class FUPool(SimObject):
     type = 'FUPool'
+    cxx_header = "cpu/o3/fu_pool.hh"
     FUList = VectorParam.FUDesc("list of FU's for this pool")
 
 class DefaultFUPool(FUPool):
index 54daaec63b795021ff8d75bf8eaec0f8e12daa06..1927a586221ff597cc211164b500688c719be8eb 100644 (file)
@@ -43,6 +43,7 @@ from BaseSimpleCPU import BaseSimpleCPU
 
 class AtomicSimpleCPU(BaseSimpleCPU):
     type = 'AtomicSimpleCPU'
+    cxx_header = "cpu/simple/atomic.hh"
     width = Param.Int(1, "CPU width")
     simulate_data_stalls = Param.Bool(False, "Simulate dcache stall cycles")
     simulate_inst_stalls = Param.Bool(False, "Simulate icache stall cycles")
index d9b963890ca2b475e1206069e7047fc66ee9bba1..a4ae7e34bc72f70a10fffffb568ee275c1a7cab7 100644 (file)
@@ -34,6 +34,7 @@ from DummyChecker import DummyChecker
 class BaseSimpleCPU(BaseCPU):
     type = 'BaseSimpleCPU'
     abstract = True
+    cxx_header = "cpu/simple/base.hh"
 
     def addCheckerCpu(self):
         if buildEnv['TARGET_ISA'] in ['arm']:
index 61491b0872ce7491af9fc4a1f52bfe18d234e6b0..72560366e75b2d715eb3491371206203f32da397 100644 (file)
@@ -31,3 +31,4 @@ from BaseSimpleCPU import BaseSimpleCPU
 
 class TimingSimpleCPU(BaseSimpleCPU):
     type = 'TimingSimpleCPU'
+    cxx_header = "cpu/simple/timing.hh"
index db2cd817d85cdffcb737694921015888a7f251e5..507decbdf51e37bb1661a6dd385def5135a4fbeb 100644 (file)
 #include "config/the_isa.hh"
 #include "cpu/op_class.hh"
 #include "cpu/static_inst_fwd.hh"
+#include "cpu/thread_context.hh"
 #include "sim/fault_fwd.hh"
 
 // forward declarations
 struct AlphaSimpleImpl;
 struct OzoneImpl;
 struct SimpleImpl;
-class ThreadContext;
 class DynInst;
 class Packet;
 
index bf3eace08613a06eb09d3d36f4dc4baab3a64635..f6a6257350f8335eed255e82eb5d0fae4e5b15ed 100644 (file)
@@ -34,20 +34,24 @@ from m5.proxy import *
 class DirectedGenerator(SimObject):
     type = 'DirectedGenerator'
     abstract = True
+    cxx_header = "cpu/testers/directedtest/DirectedGenerator.hh"
     num_cpus = Param.Int("num of cpus")
     system = Param.System(Parent.any, "System we belong to")
 
 class SeriesRequestGenerator(DirectedGenerator):
     type = 'SeriesRequestGenerator'
+    cxx_header = "cpu/testers/directedtest/SeriesRequestGenerator.hh"
     addr_increment_size = Param.Int(64, "address increment size")
     issue_writes = Param.Bool(True, "issue writes if true, otherwise reads")
 
 class InvalidateGenerator(DirectedGenerator):
     type = 'InvalidateGenerator'
+    cxx_header = "cpu/testers/directedtest/InvalidateGenerator.hh"
     addr_increment_size = Param.Int(64, "address increment size")
 
 class RubyDirectedTester(MemObject):
     type = 'RubyDirectedTester'
+    cxx_header = "cpu/testers/directedtest/RubyDirectedTester.hh"
     cpuPort = VectorMasterPort("the cpu ports")
     requests_to_complete = Param.Int("checks to complete")
     generator = Param.DirectedGenerator("the request generator")
index 1b4d6767cfe6dd7de8e0e5be3517a51032b970cf..ad3ee923393a788dd80e11dbc84e4bf6959ad767 100644 (file)
@@ -32,6 +32,7 @@ from m5.proxy import *
 
 class MemTest(MemObject):
     type = 'MemTest'
+    cxx_header = "cpu/testers/memtest/memtest.hh"
     max_loads = Param.Counter(0, "number of loads to execute")
     atomic = Param.Bool(False, "Execute tester in atomic mode? (or timing)\n")
     memory_size = Param.Int(65536, "memory size")
index 7d6ed576bb785f8a794879e9737cb7590f8723db..25b2bb6906fe8d400d736e7236a74cb047bd952a 100644 (file)
@@ -32,6 +32,7 @@ from m5.proxy import *
 
 class NetworkTest(MemObject):
     type = 'NetworkTest'
+    cxx_header = "cpu/testers/networktest/networktest.hh"
     block_offset = Param.Int(6, "block offset in bits")
     num_memories = Param.Int(1, "Num Memories")
     memory_size = Param.Int(65536, "memory size")
index 2eaeb8efd5c93fa348541faa861532a2e0e0c403..7af70cae0fd6168e4ddc4778fd3d0c4706809604 100644 (file)
@@ -32,6 +32,7 @@ from m5.proxy import *
 
 class RubyTester(MemObject):
     type = 'RubyTester'
+    cxx_header = "cpu/testers/rubytest/RubyTester.hh"
     num_cpus = Param.Int("number of cpus / RubyPorts")
     cpuDataPort = VectorMasterPort("the cpu data cache ports")
     cpuInstPort = VectorMasterPort("the cpu inst cache ports")
index 15e9d7a9b96accecc5781c293c0cc030506dfc04..916279f91dbe334629aeabfc7d17977ac0e11916 100644 (file)
@@ -61,6 +61,7 @@ from MemObject import MemObject
 # probabilities, effectively making it a Markov Chain.
 class TrafficGen(MemObject):
     type = 'TrafficGen'
+    cxx_header = "cpu/testers/traffic_gen/traffic_gen.hh"
 
     # Port used for sending requests and receiving responses
     port = MasterPort("Master port")
index 4fc5921841b3ba03068ff8cde88a0faefd56f5fd..d6d68f86d834e884548b683a9ac27dbacfe8e04b 100644 (file)
@@ -31,4 +31,5 @@ from Device import BasicPioDevice
 
 class BadDevice(BasicPioDevice):
     type = 'BadDevice'
+    cxx_header = "dev/baddev.hh"
     devicename = Param.String("Name of device to error on")
index 9aa0e1fe5387f75a0dfc1f5d983a71198749a880..68332e0a0dd84e51806d30293eba566bb3bca54e 100644 (file)
@@ -33,6 +33,7 @@ from Pci import PciDevice
 
 class CopyEngine(PciDevice):
     type = 'CopyEngine'
+    cxx_header = "dev/copy_engine.hh"
     dma = VectorMasterPort("Copy engine DMA port")
     VendorID = 0x8086
     DeviceID = 0x1a38
index 3a06444cb3680df5ea5468ddf41594fd03e40905..3b86ffb7dd05a0820244b9dc516efca4a7d68730 100644 (file)
@@ -32,24 +32,28 @@ from MemObject import MemObject
 
 class PioDevice(MemObject):
     type = 'PioDevice'
+    cxx_header = "dev/io_device.hh"
     abstract = True
     pio = SlavePort("Programmed I/O port")
     system = Param.System(Parent.any, "System this device is part of")
 
 class BasicPioDevice(PioDevice):
     type = 'BasicPioDevice'
+    cxx_header = "dev/io_device.hh"
     abstract = True
     pio_addr = Param.Addr("Device Address")
     pio_latency = Param.Latency('100ns', "Programmed IO latency")
 
 class DmaDevice(PioDevice):
     type = 'DmaDevice'
+    cxx_header = "dev/io_device.hh"
     abstract = True
     dma = MasterPort("DMA port")
 
 
 class IsaFake(BasicPioDevice):
     type = 'IsaFake'
+    cxx_header = "dev/io_device.hh"
     pio_size = Param.Addr(0x8, "Size of address range")
     ret_data8 = Param.UInt8(0xFF, "Default data to return")
     ret_data16 = Param.UInt16(0xFFFF, "Default data to return")
index 92eb0553c6d8b7825a33768616e725d7509a0a37..38cc6e75dfd40724879011e9875968290d5529ba 100644 (file)
@@ -31,14 +31,17 @@ from m5.params import *
 class DiskImage(SimObject):
     type = 'DiskImage'
     abstract = True
+    cxx_header = "dev/disk_image.hh"
     image_file = Param.String("disk image file")
     read_only = Param.Bool(False, "read only image")
 
 class RawDiskImage(DiskImage):
     type = 'RawDiskImage'
+    cxx_header = "dev/disk_image.hh"
 
 class CowDiskImage(DiskImage):
     type = 'CowDiskImage'
+    cxx_header = "dev/disk_image.hh"
     child = Param.DiskImage(RawDiskImage(read_only=True),
                             "child image")
     table_size = Param.Int(65536, "initial table size")
index 1afbce8eee2a813a319975e457303c30989624b5..57d867fbe7e56492a849958a706ea5bed90556e5 100644 (file)
@@ -34,9 +34,11 @@ from Pci import PciDevice
 class EtherObject(SimObject):
     type = 'EtherObject'
     abstract = True
+    cxx_header = "dev/etherobject.hh"
 
 class EtherLink(EtherObject):
     type = 'EtherLink'
+    cxx_header = "dev/etherlink.hh"
     int0 = SlavePort("interface 0")
     int1 = SlavePort("interface 1")
     delay = Param.Latency('0us', "packet transmit delay")
@@ -46,29 +48,34 @@ class EtherLink(EtherObject):
 
 class EtherBus(EtherObject):
     type = 'EtherBus'
+    cxx_header = "dev/etherbus.hh"
     loopback = Param.Bool(True, "send packet back to the sending interface")
     dump = Param.EtherDump(NULL, "dump object")
     speed = Param.NetworkBandwidth('100Mbps', "bus speed in bits per second")
 
 class EtherTap(EtherObject):
     type = 'EtherTap'
+    cxx_header = "dev/ethertap.hh"
     bufsz = Param.Int(10000, "tap buffer size")
     dump = Param.EtherDump(NULL, "dump object")
     port = Param.UInt16(3500, "tap port")
 
 class EtherDump(SimObject):
     type = 'EtherDump'
+    cxx_header = "dev/etherdump.hh"
     file = Param.String("dump file")
     maxlen = Param.Int(96, "max portion of packet data to dump")
 
 class EtherDevice(PciDevice):
     type = 'EtherDevice'
     abstract = True
+    cxx_header = "dev/etherdevice.hh"
     interface = MasterPort("Ethernet Interface")
 
 class IGbE(EtherDevice):
     # Base class for two IGbE adapters listed above
     type = 'IGbE'
+    cxx_header = "dev/i8254xGBe.hh"
     hardware_address = Param.EthernetAddr(NextEthernetAddr,
         "Ethernet Hardware Address")
     use_flow_control = Param.Bool(False,
@@ -149,6 +156,7 @@ class EtherDevBase(EtherDevice):
 
 class NSGigE(EtherDevBase):
     type = 'NSGigE'
+    cxx_header = "dev/ns_gige.hh"
 
     dma_data_free = Param.Bool(False, "DMA of Data is free")
     dma_desc_free = Param.Bool(False, "DMA of Descriptors is free")
@@ -178,6 +186,7 @@ class NSGigE(EtherDevBase):
 class Sinic(EtherDevBase):
     type = 'Sinic'
     cxx_class = 'Sinic::Device'
+    cxx_header = "dev/sinic.hh"
 
     rx_max_copy = Param.MemorySize('1514B', "rx max copy")
     tx_max_copy = Param.MemorySize('16kB', "tx max copy")
index 7d97c42b67231c0a73aaaaa8f936acbc0e901bb9..c5eef9f540d7b9229f96d626636d5a917b139e59 100644 (file)
@@ -34,12 +34,14 @@ class IdeID(Enum): vals = ['master', 'slave']
 
 class IdeDisk(SimObject):
     type = 'IdeDisk'
+    cxx_header = "dev/ide_disk.hh"
     delay = Param.Latency('1us', "Fixed disk delay in microseconds")
     driveID = Param.IdeID('master', "Drive ID")
     image = Param.DiskImage("Disk image")
 
 class IdeController(PciDevice):
     type = 'IdeController'
+    cxx_header = "dev/ide_ctrl.hh"
     disks = VectorParam.IdeDisk("IDE disks attached to this controller")
 
     VendorID = 0x8086
index 8b4fd7b2fa2cad4845adce0fef920d2ea0712a14..df7c773c4426351c7710b44a539a7e2287a05d64 100644 (file)
@@ -33,6 +33,7 @@ from Device import BasicPioDevice, DmaDevice, PioDevice
 
 class PciConfigAll(PioDevice):
     type = 'PciConfigAll'
+    cxx_header = "dev/pciconfigall.hh"
     platform = Param.Platform(Parent.any, "Platform this device is part of.")
     pio_latency = Param.Latency('30ns', "Programmed IO latency")
     bus = Param.UInt8(0x00, "PCI bus to act as config space for")
@@ -42,6 +43,7 @@ class PciConfigAll(PioDevice):
 class PciDevice(DmaDevice):
     type = 'PciDevice'
     cxx_class = 'PciDev'
+    cxx_header = "dev/pcidev.hh"
     abstract = True
     platform = Param.Platform(Parent.any, "Platform this device is part of.")
     config = SlavePort("PCI configuration space port")
index cb414121b6e0fa9a17568dc623781985dc656633..8a9871b35a464baf65c3a3a174bf729eed96e435 100644 (file)
@@ -32,4 +32,5 @@ from m5.proxy import *
 class Platform(SimObject):
     type = 'Platform'
     abstract = True
+    cxx_header = "dev/platform.hh"
     intrctrl = Param.IntrControl(Parent.any, "interrupt controller")
index cf28c9c194a16299bb0a8a5532ad0b35bfc18d39..88bf5dbfb429da86e193485527ff8ae1718eee96 100644 (file)
@@ -31,5 +31,6 @@ from m5.params import *
 from m5.proxy import *
 class SimpleDisk(SimObject):
     type = 'SimpleDisk'
+    cxx_header = "dev/simple_disk.hh"
     disk = Param.DiskImage("Disk Image")
     system = Param.System(Parent.any, "System Pointer")
index d67019198b01a1f0c6698200883bec86de7eca30..2b54f9d5ef3e7b32bd24f56df4806ede6f0fd701 100644 (file)
@@ -32,6 +32,7 @@ from m5.proxy import *
 
 class Terminal(SimObject):
     type = 'Terminal'
+    cxx_header = "dev/terminal.hh"
     intr_control = Param.IntrControl(Parent.any, "interrupt controller")
     port = Param.TcpPort(3456, "listen port")
     number = Param.Int(0, "terminal number")
index 3dfc885eb55c5a15ce07b6609b3d88c1e3237f53..c3bc9dd0f7ceadcf6bbbfe213d6814ecb1094e99 100644 (file)
@@ -33,8 +33,10 @@ from Device import BasicPioDevice
 class Uart(BasicPioDevice):
     type = 'Uart'
     abstract = True
+    cxx_header = "dev/uart.hh"
     platform = Param.Platform(Parent.any, "Platform this device is part of.")
     terminal = Param.Terminal(Parent.any, "The terminal")
 
 class Uart8250(Uart):
     type = 'Uart8250'
+    cxx_header = "dev/uart8250.hh"
index 14894b86383831c108da18b48fadf736d30b8368..29372bce8074864d2e7e03b3b661ff71608679e3 100644 (file)
@@ -33,6 +33,7 @@ from Device import BasicPioDevice
 
 class AlphaBackdoor(BasicPioDevice):
     type = 'AlphaBackdoor'
+    cxx_header = "dev/alpha/backdoor.hh"
     cpu = Param.BaseCPU(Parent.cpu[0], "Processor")
     disk = Param.SimpleDisk("Simple Disk")
     terminal = Param.Terminal(Parent.any, "The console terminal")
index 9a3ec0593a5d7d2a5a8b2135f11a9ec71e2e34a1..1a29b25d9755dc5c1ea444ffb136242a4ee0c293 100644 (file)
@@ -37,10 +37,12 @@ from Uart import Uart8250
 
 class TsunamiCChip(BasicPioDevice):
     type = 'TsunamiCChip'
+    cxx_header = "dev/alpha/tsunami_cchip.hh"
     tsunami = Param.Tsunami(Parent.any, "Tsunami")
 
 class TsunamiIO(BasicPioDevice):
     type = 'TsunamiIO'
+    cxx_header = "dev/alpha/tsunami_io.hh"
     time = Param.Time('01/01/2009',
         "System time to use ('Now' for actual time)")
     year_is_bcd = Param.Bool(False,
@@ -50,10 +52,12 @@ class TsunamiIO(BasicPioDevice):
 
 class TsunamiPChip(BasicPioDevice):
     type = 'TsunamiPChip'
+    cxx_header = "dev/alpha/tsunami_pchip.hh"
     tsunami = Param.Tsunami(Parent.any, "Tsunami")
 
 class Tsunami(Platform):
     type = 'Tsunami'
+    cxx_header = "dev/alpha/tsunami.hh"
     system = Param.System(Parent.any, "system")
 
     cchip = TsunamiCChip(pio_addr=0x801a0000000)
index 212e2a3d5c783a2b24690fdc30aa5b79f509e083..7477fb12422f3e2da077d1d8aae41ec9010b7bc4 100644 (file)
@@ -38,6 +38,7 @@
 #define __DEV_TSUNAMI_IO_HH__
 
 #include "dev/alpha/tsunami.hh"
+#include "dev/alpha/tsunami_cchip.hh"
 #include "dev/intel_8254_timer.hh"
 #include "dev/io_device.hh"
 #include "dev/mc146818.hh"
index f0b629b38f32339eb47972e148a5c184daba556f..87d4d9b16e8020600e153cc8087b9d7e612d14d2 100644 (file)
@@ -54,11 +54,13 @@ from SimpleMemory import SimpleMemory
 class AmbaDevice(BasicPioDevice):
     type = 'AmbaDevice'
     abstract = True
+    cxx_header = "dev/arm/amba_device.hh"
     amba_id = Param.UInt32("ID of AMBA device for kernel detection")
 
 class AmbaIntDevice(AmbaDevice):
     type = 'AmbaIntDevice'
     abstract = True
+    cxx_header = "dev/arm/amba_device.hh"
     gic = Param.Gic(Parent.any, "Gic to use for interrupting")
     int_num = Param.UInt32("Interrupt number that connects to GIC")
     int_delay = Param.Latency("100ns",
@@ -67,6 +69,7 @@ class AmbaIntDevice(AmbaDevice):
 class AmbaDmaDevice(DmaDevice):
     type = 'AmbaDmaDevice'
     abstract = True
+    cxx_header = "dev/arm/amba_device.hh"
     pio_addr = Param.Addr("Address for AMBA slave interface")
     pio_latency = Param.Latency("10ns", "Time between action and write/read result by AMBA DMA Device")
     gic = Param.Gic(Parent.any, "Gic to use for interrupting")
@@ -75,15 +78,18 @@ class AmbaDmaDevice(DmaDevice):
 
 class A9SCU(BasicPioDevice):
     type = 'A9SCU'
+    cxx_header = "dev/arm/a9scu.hh"
 
 class RealViewCtrl(BasicPioDevice):
     type = 'RealViewCtrl'
+    cxx_header = "dev/arm/rv_ctrl.hh"
     proc_id0 = Param.UInt32(0x0C000000, "Processor ID, SYS_PROCID")
     proc_id1 = Param.UInt32(0x0C000222, "Processor ID, SYS_PROCID1")
     idreg = Param.UInt32(0x00000000, "ID Register, SYS_ID")
 
 class Gic(PioDevice):
     type = 'Gic'
+    cxx_header = "dev/arm/gic.hh"
     platform = Param.Platform(Parent.any, "Platform this device is part of.")
     dist_addr = Param.Addr(0x1f001000, "Address for distributor")
     cpu_addr = Param.Addr(0x1f000100, "Address for cpu")
@@ -94,11 +100,13 @@ class Gic(PioDevice):
 
 class AmbaFake(AmbaDevice):
     type = 'AmbaFake'
+    cxx_header = "dev/arm/amba_fake.hh"
     ignore_access = Param.Bool(False, "Ignore reads/writes to this device, (e.g. IsaFake + AMBA)")
     amba_id = 0;
 
 class Pl011(Uart):
     type = 'Pl011'
+    cxx_header = "dev/arm/pl011.hh"
     gic = Param.Gic(Parent.any, "Gic to use for interrupting")
     int_num = Param.UInt32("Interrupt number that connects to GIC")
     end_on_eot = Param.Bool(False, "End the simulation when a EOT is received on the UART")
@@ -106,6 +114,7 @@ class Pl011(Uart):
 
 class Sp804(AmbaDevice):
     type = 'Sp804'
+    cxx_header = "dev/arm/timer_sp804.hh"
     gic = Param.Gic(Parent.any, "Gic to use for interrupting")
     int_num0 = Param.UInt32("Interrupt number that connects to GIC")
     clock0 = Param.Clock('1MHz', "Clock speed of the input")
@@ -115,6 +124,7 @@ class Sp804(AmbaDevice):
 
 class CpuLocalTimer(BasicPioDevice):
     type = 'CpuLocalTimer'
+    cxx_header = "dev/arm/timer_cpulocal.hh"
     gic = Param.Gic(Parent.any, "Gic to use for interrupting")
     int_num_timer = Param.UInt32("Interrrupt number used per-cpu to GIC")
     int_num_watchdog = Param.UInt32("Interrupt number for per-cpu watchdog to GIC")
@@ -123,11 +133,13 @@ class CpuLocalTimer(BasicPioDevice):
 
 class PL031(AmbaIntDevice):
     type = 'PL031'
+    cxx_header = "dev/arm/rtc_pl031.hh"
     time = Param.Time('01/01/2009', "System time to use ('Now' for actual time)")
     amba_id = 0x00341031
 
 class Pl050(AmbaIntDevice):
     type = 'Pl050'
+    cxx_header = "dev/arm/kmi.hh"
     vnc = Param.VncInput(Parent.any, "Vnc server for remote frame buffer display")
     is_mouse = Param.Bool(False, "Is this interface a mouse, if not a keyboard")
     int_delay = '1us'
@@ -135,6 +147,7 @@ class Pl050(AmbaIntDevice):
 
 class Pl111(AmbaDmaDevice):
     type = 'Pl111'
+    cxx_header = "dev/arm/pl111.hh"
     # Override the default clock
     clock = '24MHz'
     vnc   = Param.VncInput(Parent.any, "Vnc server for remote frame buffer display")
@@ -142,6 +155,7 @@ class Pl111(AmbaDmaDevice):
 
 class RealView(Platform):
     type = 'RealView'
+    cxx_header = "dev/arm/realview.hh"
     system = Param.System(Parent.any, "system")
     pci_cfg_base = Param.Addr(0, "Base address of PCI Configuraiton Space")
     mem_start_addr = Param.Addr(0, "Start address of main memory")
index dbd8bd539e89010f2c0f3d2352112115265887ca..e96d33d83268f6c646113f5a59010c549d63119c 100644 (file)
@@ -48,6 +48,8 @@
 #ifndef __DEV_ARM_PL011_H__
 #define __DEV_ARM_PL011_H__
 
+#include "base/bitfield.hh"
+#include "base/bitunion.hh"
 #include "dev/io_device.hh"
 #include "dev/uart.hh"
 #include "params/Pl011.hh"
index 70647d47c994f4ec9d00c40c9d3bb534b049a2b7..f38aa69fc7ef75cb00946f87e21c1247ab6f23b0 100644 (file)
@@ -52,6 +52,7 @@
 #include "dev/platform.hh"
 #include "params/RealView.hh"
 
+class Gic;
 class IdeController;
 class System;
 
index cf7e4649640acdb0c78678f8296a91eec0f01420..9b60db4ec2651a485f8a8780d2b5ef85ccca589a 100644 (file)
@@ -41,6 +41,7 @@
 #ifndef __DEV_ARM_LOCALTIMER_HH__
 #define __DEV_ARM_LOCALTIMER_HH__
 
+#include "base/bitunion.hh"
 #include "dev/io_device.hh"
 #include "params/CpuLocalTimer.hh"
 
index 41b4a631ea7bc7657802752c9dbbfa26127844f2..9a0cb062814cb8ce811b96fdf76bc8a8946df1c7 100644 (file)
@@ -50,6 +50,7 @@
 
 #include <vector>
 
+#include "base/cp_annotate.hh"
 #include "base/statistics.hh"
 #include "dev/copy_engine_defs.hh"
 #include "dev/pcidev.hh"
index 23a5e5c8fe09ba7da05543e985ca1ea4bda8dff9..290dabf01095dd5c86860a43eba76712e8b082b5 100755 (executable)
@@ -37,10 +37,12 @@ from Uart import Uart8250
 
 class MaltaCChip(BasicPioDevice):
     type = 'MaltaCChip'
+    cxx_header = "dev/mips/malta_cchip.hh"
     malta = Param.Malta(Parent.any, "Malta")
 
 class MaltaIO(BasicPioDevice):
     type = 'MaltaIO'
+    cxx_header = "dev/mips/malta_io.hh"
     time = Param.Time('01/01/2009',
         "System time to use (0 for actual time, default is 1/1/06)")
     year_is_bcd = Param.Bool(False,
@@ -50,10 +52,12 @@ class MaltaIO(BasicPioDevice):
 
 class MaltaPChip(BasicPioDevice):
     type = 'MaltaPChip'
+    cxx_header = "dev/mips/malta_pchip.hh"
     malta = Param.Malta(Parent.any, "Malta")
 
 class Malta(Platform):
     type = 'Malta'
+    cxx_header = "dev/mips/malta.hh"
     system = Param.System(Parent.any, "system")
     cchip = MaltaCChip(pio_addr=0x801a0000000)
     io = MaltaIO(pio_addr=0x801fc000000)
index 9311d7c225269a01effc5b8328945877a18ae943..9f49f20ccb91c54004dcd4f6f2cd7e209e970b0c 100755 (executable)
@@ -38,6 +38,7 @@
 #define __DEV_MALTA_IO_HH__
 
 #include "dev/mips/malta.hh"
+#include "dev/mips/malta_cchip.hh"
 #include "dev/intel_8254_timer.hh"
 #include "dev/io_device.hh"
 #include "dev/mc146818.hh"
index 03a59ac670a31db4655c41cf137608c4140ff57e..511f54b2c29af4ae1e6e226cb5d59aeb481e262d 100644 (file)
@@ -36,22 +36,26 @@ from Uart import Uart8250
 
 class MmDisk(BasicPioDevice):
     type = 'MmDisk'
+    cxx_header = "dev/sparc/mm_disk.hh"
     image = Param.DiskImage("Disk Image")
     pio_addr = 0x1F40000000
 
 class DumbTOD(BasicPioDevice):
     type = 'DumbTOD'
+    cxx_header = "dev/sparc/dtod.hh"
     time = Param.Time('01/01/2009', "System time to use ('Now' for real time)")
     pio_addr = 0xfff0c1fff8
 
 class Iob(PioDevice):
     type = 'Iob'
+    cxx_header = "dev/sparc/iob.hh"
     platform = Param.Platform(Parent.any, "Platform this device is part of.")
     pio_latency = Param.Latency('1ns', "Programed IO latency")
 
 
 class T1000(Platform):
     type = 'T1000'
+    cxx_header = "dev/sparc/t1000.hh"
     system = Param.System(Parent.any, "system")
 
     fake_clk = IsaFake(pio_addr=0x9600000000, pio_size=0x100000000)
index 266fb8937dfdcf27c6743e029c00a97d5e9568d0..c0b2be58a36f4f62b533c534cae98e80f7af07a3 100644 (file)
@@ -34,6 +34,7 @@ from X86IntPin import X86IntSourcePin
 class Cmos(BasicPioDevice):
     type = 'Cmos'
     cxx_class='X86ISA::Cmos'
+    cxx_header = "dev/x86/cmos.hh"
     time = Param.Time('01/01/2012',
         "System time to use ('Now' for actual time)")
     int_pin = Param.X86IntSourcePin(X86IntSourcePin(),
index 57bf32ca0f8d2b3bc21b9b04905f5d902825b141..d13a133416068fff7486e965255e996ff9cff3a4 100644 (file)
@@ -34,6 +34,7 @@ from X86IntPin import X86IntSourcePin
 class I8042(BasicPioDevice):
     type = 'I8042'
     cxx_class = 'X86ISA::I8042'
+    cxx_header = "dev/x86/i8042.hh"
     # This isn't actually used for anything here.
     pio_addr = 0x0
     data_port = Param.Addr('Data port address')
index 3b076a9d68ff50f4be1fa18738079c9313e8fac2..7e71cdfc1af237a16513eae1cfdd10b8bf983684 100644 (file)
@@ -34,6 +34,7 @@ from X86IntPin import X86IntSinkPin
 class I82094AA(BasicPioDevice):
     type = 'I82094AA'
     cxx_class = 'X86ISA::I82094AA'
+    cxx_header = "dev/x86/i82094aa.hh"
     apic_id = Param.Int(1, 'APIC id for this IO APIC')
     int_master = MasterPort("Port for sending interrupt messages")
     int_latency = Param.Latency('1ns', \
index 0121c3d2492de23d40fcf3c2f68ea4e8910311b3..a4c5e3ad5f031749d2de73638dddcb89990f64f5 100644 (file)
@@ -33,3 +33,4 @@ from Device import BasicPioDevice
 class I8237(BasicPioDevice):
     type = 'I8237'
     cxx_class = 'X86ISA::I8237'
+    cxx_header = "dev/x86/i8237.hh"
index 6fdcb1c8d05125bdeace6d7865b19277bc4c083f..574dd81c26ab3b3460f6f8aee4427e2b3d95d117 100644 (file)
@@ -34,5 +34,6 @@ from X86IntPin import X86IntSourcePin
 class I8254(BasicPioDevice):
     type = 'I8254'
     cxx_class = 'X86ISA::I8254'
+    cxx_header = "dev/x86/i8254.hh"
     int_pin = Param.X86IntSourcePin(X86IntSourcePin(),
             'Pin to signal timer interrupts to')
index 30ea142256e268fff0b5023aa44ca8fb215093e6..4403c3f53e97c42e90431b41611fa681d5ef1a2d 100644 (file)
@@ -40,6 +40,7 @@ class X86I8259CascadeMode(Enum):
 class I8259(BasicPioDevice):
     type = 'I8259'
     cxx_class='X86ISA::I8259'
+    cxx_header = "dev/x86/i8259.hh"
     output = Param.X86IntSourcePin(X86IntSourcePin(),
             'The pin this I8259 drives')
     mode = Param.X86I8259CascadeMode('How this I8259 is cascaded')
index 91292788c8bff5801aee741749e6e872d17ebca8..3fc2382b7565e10a0d53c907f57d8a5a8851e970 100644 (file)
@@ -42,6 +42,7 @@ def x86IOAddress(port):
 
 class Pc(Platform):
     type = 'Pc'
+    cxx_header = "dev/x86/pc.hh"
     system = Param.System(Parent.any, "system")
 
     pciconfig = PciConfigAll()
index cc1f5517a63266de6692d5da6de59acd51ba325a..f1c23157bdcd5651d56feaeafef9a4eb2da95d40 100644 (file)
@@ -33,4 +33,5 @@ from Device import BasicPioDevice
 class PcSpeaker(BasicPioDevice):
     type = 'PcSpeaker'
     cxx_class = 'X86ISA::Speaker'
+    cxx_header = "dev/x86/speaker.hh"
     i8254 = Param.I8254('Timer that drives the speaker')
index 7ac208d5e563330f7d506981d511f9d8f65379ab..45c49ce3a7365a5c367d6075e7d8d0cfb286c866 100644 (file)
@@ -45,6 +45,7 @@ def x86IOAddress(port):
 
 class SouthBridge(SimObject):
     type = 'SouthBridge'
+    cxx_header = "dev/x86/south_bridge.hh"
     platform = Param.Platform(Parent.any, "Platform this device is part of")
 
     _pic1 = I8259(pio_addr=x86IOAddress(0x20), mode='I8259Master')
index 35e274624b99ce7980ddfe998758e92cd0d72e34..53760b4962a2dda0b7e4c73a82720f7dd116ebe9 100644 (file)
@@ -33,11 +33,13 @@ from m5.SimObject import SimObject
 class X86IntSourcePin(SimObject):
     type = 'X86IntSourcePin'
     cxx_class = 'X86ISA::IntSourcePin'
+    cxx_header = "dev/x86/intdev.hh"
 
 # A generic pin to receive an interrupt signal generated by another device.
 class X86IntSinkPin(SimObject):
     type = 'X86IntSinkPin'
     cxx_class = 'X86ISA::IntSinkPin'
+    cxx_header = "dev/x86/intdev.hh"
 
     device = Param.SimObject("Device this pin belongs to")
     number = Param.Int("The pin number on the device")
@@ -46,6 +48,7 @@ class X86IntSinkPin(SimObject):
 class X86IntLine(SimObject):
     type = 'X86IntLine'
     cxx_class = 'X86ISA::IntLine'
+    cxx_header = "dev/x86/intdev.hh"
 
     source = Param.X86IntSourcePin("Pin driving this line")
     sink = Param.X86IntSinkPin("Pin driven by this line")
index 5aa1ccf0a0bc48cffdd6ce7a366934561d7d3352..2886a76d7ba8de45286f6facea7a0d8d335727f3 100644 (file)
@@ -32,6 +32,7 @@
 #define __DEV_X86_SPEAKER_HH__
 
 #include "base/bitunion.hh"
+#include "dev/io_device.hh"
 #include "params/PcSpeaker.hh"
 
 namespace X86ISA
index ce3f04c49548c648bb8f23b8d4334cb1b1ac7d2c..f96ca5b784ffd3ac5ed1af6c0c8b1ebba0aec72a 100644 (file)
@@ -45,6 +45,7 @@ from MemObject import MemObject
 class AbstractMemory(MemObject):
     type = 'AbstractMemory'
     abstract = True
+    cxx_header = "mem/abstract_mem.hh"
     range = Param.AddrRange(AddrRange('128MB'), "Address range")
     null = Param.Bool(False, "Do not store data, always return zero")
     zero = Param.Bool(False, "Initialize memory with zeros")
index 2b999ee92cc154ca6c507041a59a394f815b8612..f6e943ed19264170a5c0f167032297c196bd636e 100644 (file)
@@ -46,6 +46,7 @@ from MemObject import MemObject
 # currently not modified.
 class AddrMapper(MemObject):
     type = 'AddrMapper'
+    cxx_header = 'mem/addr_mapper.hh'
     abstract = True
 
     # one port in each direction
@@ -58,6 +59,7 @@ class AddrMapper(MemObject):
 # (original and remapped), only with an offset.
 class RangeAddrMapper(AddrMapper):
     type = 'RangeAddrMapper'
+    cxx_header = 'mem/addr_mapper.hh'
 
     # These two vectors should be the exact same length and each range
     # should be the exact same size. Each range in original_ranges is
index 62dfb73517cb112e69c642d696f8ca0ba1173d6f..5f2cc9f40ae912fe51706913c6e6899cbb16df6e 100644 (file)
@@ -44,6 +44,7 @@ from MemObject import MemObject
 
 class Bridge(MemObject):
     type = 'Bridge'
+    cxx_header = "mem/bridge.hh"
     slave = SlavePort('Slave port')
     master = MasterPort('Master port')
     req_size = Param.Int(16, "The number of requests to buffer")
index 45b1f1b0a4f1d4f2225a0a90fe6e8ea0ff09d3fe..4637b0ebcd5d0ce3d1d0329b0a1289d63f2a75ef 100644 (file)
@@ -45,6 +45,7 @@ from m5.params import *
 class BaseBus(MemObject):
     type = 'BaseBus'
     abstract = True
+    cxx_header = "mem/bus.hh"
     slave = VectorSlavePort("vector port for connecting masters")
     master = VectorMasterPort("vector port for connecting slaves")
     header_cycles = Param.Cycles(1, "cycles of overhead per transaction")
@@ -66,6 +67,8 @@ class BaseBus(MemObject):
 
 class NoncoherentBus(BaseBus):
     type = 'NoncoherentBus'
+    cxx_header = "mem/noncoherent_bus.hh"
 
 class CoherentBus(BaseBus):
     type = 'CoherentBus'
+    cxx_header = "mem/coherent_bus.hh"
index 3621942d9514e979c8c559b57298bc22ec223f18..a34a57db42d4e9c13c384f418dd27284f638c962 100644 (file)
@@ -43,6 +43,7 @@ from MemObject import MemObject
 # with periodic dumping and resetting of stats using schedStatEvent
 class CommMonitor(MemObject):
     type = 'CommMonitor'
+    cxx_header = "mem/comm_monitor.hh"
 
     # one port in each direction
     master = MasterPort("Master port")
index 0f33cc0bfa5c4c5f7d11b4394e9bde74fae2d88b..0827218aace94f25f7f2a753c37cb1dc6e305be2 100644 (file)
@@ -31,3 +31,4 @@ from ClockedObject import ClockedObject
 class MemObject(ClockedObject):
     type = 'MemObject'
     abstract = True
+    cxx_header = "mem/mem_object.hh"
index c874256109f9dc8be0d67e0a3ec2d34579ef7fea..3211f576a7f760875b69f5c1080623c44a6b7972 100644 (file)
@@ -57,6 +57,7 @@ class PageManage(Enum): vals = ['open', 'close']
 # itself.
 class SimpleDRAM(AbstractMemory):
     type = 'SimpleDRAM'
+    cxx_header = "mem/simple_dram.hh"
 
     # single-ported on the system interface side, instantiate with a
     # bus in front of the controller for multiple ports
index 9361b45d8caf5cd1734ffbaf5d2a167484e3f949..0cf6dece3c9407e6a99bf45b65ae3934b811dc5d 100644 (file)
@@ -44,6 +44,7 @@ from AbstractMemory import *
 
 class SimpleMemory(AbstractMemory):
     type = 'SimpleMemory'
+    cxx_header = "mem/simple_mem.hh"
     port = SlavePort("Slave ports")
     latency = Param.Latency('30ns', "Request to response latency")
     latency_var = Param.Latency('0ns', "Request to response latency variance")
index 6fe73a9c22e93a3747cd747b3f757f655c1d010a..fe0d9ceb04208a7e6e577d30eb4b6c512f3b78ba 100644 (file)
@@ -46,6 +46,7 @@ from Prefetcher import BasePrefetcher
 
 class BaseCache(MemObject):
     type = 'BaseCache'
+    cxx_header = "mem/cache/base.hh"
     assoc = Param.Int("associativity")
     block_size = Param.Int("block size in bytes")
     hit_latency = Param.Cycles("The hit latency for this cache")
index e590410ae581312d0e45899e55d2662144783586..af67f40b695610b638eee616df0ebbb2f5651ad2 100644 (file)
@@ -45,6 +45,7 @@ from m5.proxy import *
 class BasePrefetcher(ClockedObject):
     type = 'BasePrefetcher'
     abstract = True
+    cxx_header = "mem/cache/prefetch/base.hh"
     size = Param.Int(100,
          "Number of entries in the hardware prefetch queue")
     cross_pages = Param.Bool(False,
@@ -63,14 +64,17 @@ class BasePrefetcher(ClockedObject):
 class GHBPrefetcher(BasePrefetcher):
     type = 'GHBPrefetcher'
     cxx_class = 'GHBPrefetcher'
+    cxx_header = "mem/cache/prefetch/ghb.hh"
 
 class StridePrefetcher(BasePrefetcher):
     type = 'StridePrefetcher'
     cxx_class = 'StridePrefetcher'
+    cxx_header = "mem/cache/prefetch/stride.hh"
 
 class TaggedPrefetcher(BasePrefetcher):
     type = 'TaggedPrefetcher'
     cxx_class = 'TaggedPrefetcher'
+    cxx_header = "mem/cache/prefetch/tagged.hh"
 
 
 
index 4c333e897810cc7f1450d5a529b493429aef1985..577eb8fedb4f7c1b3987be8ee83705a86b5fa0fc 100644 (file)
@@ -31,9 +31,11 @@ from m5.params import *
 class Repl(SimObject):
     type = 'Repl'
     abstract = True
+    cxx_header = "mem/cache/tags/iic_repl/repl.hh"
 
 class GenRepl(Repl):
     type = 'GenRepl'
+    cxx_header = "mem/cache/tags/iic_repl/gen.hh"
     fresh_res = Param.Int("Fresh pool residency time")
     num_pools = Param.Int("Number of priority pools")
     pool_res = Param.Int("Pool residency time")
index f73f5d97789598b0255b48ffad3e8579c535098f..84120857800a34a4fba23b407ebac38e5cd24275 100644 (file)
@@ -32,6 +32,7 @@ from m5.SimObject import SimObject
 
 class BasicLink(SimObject):
     type = 'BasicLink'
+    cxx_header = "mem/ruby/network/BasicLink.hh"
     link_id = Param.Int("ID in relation to other links")
     latency = Param.Int(1, "latency")
     # The following banwidth factor does not translate to the same value for
@@ -43,12 +44,14 @@ class BasicLink(SimObject):
 
 class BasicExtLink(BasicLink):
     type = 'BasicExtLink'
+    cxx_header = "mem/ruby/network/BasicLink.hh"
     ext_node = Param.RubyController("External node")
     int_node = Param.BasicRouter("ID of internal node")
     bandwidth_factor = 16
 
 class BasicIntLink(BasicLink):
     type = 'BasicIntLink'
+    cxx_header = "mem/ruby/network/BasicLink.hh"
     node_a = Param.BasicRouter("Router on one end")
     node_b = Param.BasicRouter("Router on other end")
     bandwidth_factor = 16
index 0ff41c33c2850af01099d2f48ba733695e9a1bd5..0c8e5cb54a72cc28eda757113ceb23a3d86a939d 100644 (file)
@@ -32,4 +32,5 @@ from m5.SimObject import SimObject
 
 class BasicRouter(SimObject):
     type = 'BasicRouter'
+    cxx_header = "mem/ruby/network/BasicRouter.hh"
     router_id = Param.Int("ID in relation to other routers")
index 9642b046e3b18f664f51bbab0eafd96bbb6be13a..4bc35b30c0f52088c044562cfb8e0162d0a285de 100644 (file)
@@ -33,6 +33,7 @@ from BasicLink import BasicLink
 
 class Topology(SimObject):
     type = 'Topology'
+    cxx_header = "mem/ruby/network/Topology.hh"
     description = Param.String("Not Specified",
                                "the name of the imported topology module")
     ext_links = VectorParam.BasicExtLink("Links to external nodes")
@@ -44,6 +45,7 @@ class Topology(SimObject):
 class RubyNetwork(SimObject):
     type = 'RubyNetwork'
     cxx_class = 'Network'
+    cxx_header = "mem/ruby/network/Network.hh"
     abstract = True
     number_of_virtual_networks = Param.Int(10, "");
     topology = Param.Topology("");
index 5117491f2d4fc60a6bae5359842fc9ee54a428b3..b1532150bcf1beb7a5bbc5b7dcbc9ff4cd7d5386 100644 (file)
@@ -39,6 +39,7 @@ from m5.SimObject import SimObject
 class FaultModel(SimObject):
     type = 'FaultModel'
     cxx_class = 'FaultModel' 
+    cxx_header = "mem/ruby/network/fault_model/FaultModel.hh"
     
     baseline_fault_vector_database = VectorParam.Float([
         5, 40, 0.080892, 0.109175, 0.018864, 0.130408, 0.059724, 0.077571, 0.034830, 0.083430, 0.067500, 0.121500,
index 2431db20364303cd7f1ffd28d352f7915be3838f..0bcb0484db8cb9a4ebd924f31ebb782c4564362f 100644 (file)
@@ -33,6 +33,7 @@ from Network import RubyNetwork
 
 class BaseGarnetNetwork(RubyNetwork):
     type = 'BaseGarnetNetwork'
+    cxx_header = "mem/ruby/network/garnet/BaseGarnetNetwork.hh"
     abstract = True
     ni_flit_size = Param.Int(16, "network interface flit size in bytes")
     vcs_per_vnet = Param.Int(4, "virtual channels per virtual network");
index 1fb7e0b7b34b07465e1624e794d6ad3bd713f843..e5de4ecafc93871ca805be6efff9a76f01cc5303 100644 (file)
@@ -35,6 +35,7 @@ from BasicLink import BasicIntLink, BasicExtLink
 
 class NetworkLink_d(SimObject):
     type = 'NetworkLink_d'
+    cxx_header = "mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh"
     link_id = Param.Int(Parent.link_id, "link id")
     link_latency = Param.Int(Parent.latency, "link latency")
     vcs_per_vnet = Param.Int(Parent.vcs_per_vnet,
@@ -46,10 +47,12 @@ class NetworkLink_d(SimObject):
 
 class CreditLink_d(NetworkLink_d):
     type = 'CreditLink_d'
+    cxx_header = "mem/ruby/network/garnet/fixed-pipeline/CreditLink_d.hh"
 
 # Interior fixed pipeline links between routers
 class GarnetIntLink_d(BasicIntLink):
     type = 'GarnetIntLink_d'
+    cxx_header = "mem/ruby/network/garnet/fixed-pipeline/GarnetLink_d.hh"
     # The detailed fixed pipeline bi-directional link include two main
     # forward links and two backward flow-control links, one per direction
     nls = []
@@ -69,6 +72,7 @@ class GarnetIntLink_d(BasicIntLink):
 # Exterior fixed pipeline links between a router and a controller
 class GarnetExtLink_d(BasicExtLink):
     type = 'GarnetExtLink_d'
+    cxx_header = "mem/ruby/network/garnet/fixed-pipeline/GarnetLink_d.hh"
     # The detailed fixed pipeline bi-directional link include two main
     # forward links and two backward flow-control links, one per direction
     nls = []
index a3a00525d9efb9b5d9cfbaf03d1e4b412f03a1fe..6ebf94e045cce64dd2b9182ca3fc2913086cc77b 100644 (file)
@@ -33,5 +33,6 @@ from BaseGarnetNetwork import BaseGarnetNetwork
 
 class GarnetNetwork_d(BaseGarnetNetwork):
     type = 'GarnetNetwork_d'
+    cxx_header = "mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh"
     buffers_per_data_vc = Param.Int(4, "buffers per data virtual channel");
     buffers_per_ctrl_vc = Param.Int(1, "buffers per ctrl virtual channel");
index b2a01fb46bbb22155060cb36e0e27d90dd27e673..cd009a80723e66fbcdb12f42f5adce4a42000820 100644 (file)
@@ -35,6 +35,7 @@ from BasicRouter import BasicRouter
 class GarnetRouter_d(BasicRouter):
     type = 'GarnetRouter_d'
     cxx_class = 'Router_d'
+    cxx_header = "mem/ruby/network/garnet/fixed-pipeline/Router_d.hh"
     vcs_per_vnet = Param.Int(Parent.vcs_per_vnet,
                               "virtual channels per virtual network")
     virt_nets = Param.Int(Parent.number_of_virtual_networks,
index 591ab4beb006668caa7923dafa3ae64d6dbac2a0..d5b55c1ecc5c23e3c57252d1bc64d70bdcaf1d33 100644 (file)
@@ -35,6 +35,7 @@ from BasicLink import BasicIntLink, BasicExtLink
 
 class NetworkLink(SimObject):
     type = 'NetworkLink'
+    cxx_header = "mem/ruby/network/garnet/flexible-pipeline/NetworkLink.hh"
     link_id = Param.Int(Parent.link_id, "link id")
     link_latency = Param.Int(Parent.latency, "link latency")
     vcs_per_vnet = Param.Int(Parent.vcs_per_vnet,
@@ -47,6 +48,7 @@ class NetworkLink(SimObject):
 # Interior fixed pipeline links between routers
 class GarnetIntLink(BasicIntLink):
     type = 'GarnetIntLink'
+    cxx_header = "mem/ruby/network/garnet/flexible-pipeline/GarnetLink.hh"
     # The flexible pipeline bi-directional link only include two main
     # forward links and no backward flow-control links
     nls = []
@@ -59,6 +61,7 @@ class GarnetIntLink(BasicIntLink):
 # Exterior fixed pipeline links between a router and a controller
 class GarnetExtLink(BasicExtLink):
     type = 'GarnetExtLink'
+    cxx_header = "mem/ruby/network/garnet/flexible-pipeline/GarnetLink.hh"
     # The flexible pipeline bi-directional link only include two main
     # forward links and no backward flow-control links
     nls = []
index 7ad61a5ce34778fa8607a33898ced70136b7ad11..28f81d732f8ea769515253c4f1e9855966b6c9d0 100644 (file)
@@ -33,6 +33,7 @@ from BaseGarnetNetwork import BaseGarnetNetwork
 
 class GarnetNetwork(BaseGarnetNetwork):
     type = 'GarnetNetwork'
+    cxx_header = "mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.hh"
     buffer_size = Param.Int(0,
         "default buffer size; 0 indicates infinite buffering");
     number_of_pipe_stages = Param.Int(4, "router pipeline stages");
index a39348c46b63499ea80011aaf91b783d54ced80e..22d8c86704b31867e3004d5c40601cc170b2bf5e 100644 (file)
@@ -35,6 +35,7 @@ from BasicRouter import BasicRouter
 class GarnetRouter(BasicRouter):
     type = 'GarnetRouter'
     cxx_class = 'Router'
+    cxx_header = "mem/ruby/network/garnet/flexible-pipeline/Router.hh"
     vcs_per_vnet = Param.Int(Parent.vcs_per_vnet,
                               "virtual channels per virtual network")
     virt_nets = Param.Int(Parent.number_of_virtual_networks,
index 55b21562e52b524e1030c536ce6138577381d03b..716a21eecf6ef419da5250aab49ead7575786037 100644 (file)
@@ -34,6 +34,8 @@ from BasicLink import BasicIntLink, BasicExtLink
 
 class SimpleExtLink(BasicExtLink):
     type = 'SimpleExtLink'
+    cxx_header = "mem/ruby/network/simple/SimpleLink.hh"
 
 class SimpleIntLink(BasicIntLink):
     type = 'SimpleIntLink'
+    cxx_header = "mem/ruby/network/simple/SimpleLink.hh"
index 0603546ce8268b77ba3f7a1a4a999f48d43bf0fe..217dc20ece14107d3cc2010aae80e85794bdf53f 100644 (file)
@@ -34,6 +34,7 @@ from BasicRouter import BasicRouter
 
 class SimpleNetwork(RubyNetwork):
     type = 'SimpleNetwork'
+    cxx_header = "mem/ruby/network/simple/SimpleNetwork.hh"
     buffer_size = Param.Int(0,
         "default buffer size; 0 indicates infinite buffering");
     endpoint_bandwidth = Param.Int(1000, "bandwidth adjustment factor");
index 3521911c2d21998ba7624badda399dd98c478c8d..0bb1bbc3d4d6f8186da70b992656f93296575497 100644 (file)
@@ -33,6 +33,7 @@ from m5.SimObject import SimObject
 class RubyProfiler(SimObject):
     type = 'RubyProfiler'
     cxx_class = 'Profiler'
+    cxx_header = "mem/ruby/profiler/Profiler.hh"
     hot_lines = Param.Bool(False, "")
     all_instructions = Param.Bool(False, "")
     num_of_sequencers = Param.Int("")
index 44e08ecdc12063563c9c693db89670cc4d50650b..9787b5ce7c30f4bf95f82d63a02eb75e9b6fb9a5 100644 (file)
@@ -33,6 +33,7 @@ from m5.SimObject import SimObject
 class RubyController(SimObject):
     type = 'RubyController'
     cxx_class = 'AbstractController'
+    cxx_header = "mem/ruby/slicc_interface/AbstractController.hh"
     abstract = True
     version = Param.Int("")
     cntrl_id = Param.Int("")
index 57326c3c604d1170ea054b037dd35668bca8afd4..4b0269822cd919e03a4edc20b050a607e3995315 100644 (file)
@@ -34,6 +34,7 @@ from Controller import RubyController
 class RubyCache(SimObject):
     type = 'RubyCache'
     cxx_class = 'CacheMemory'
+    cxx_header = "mem/ruby/system/CacheMemory.hh"
     size = Param.MemorySize("capacity in bytes");
     latency = Param.Int("");
     assoc = Param.Int("");
index d3b6bc5917f1f4f3d51d9afc9dde2fedc5e724dc..ac4dd5934eb54775c86df813b83b0b167bb4f62e 100644 (file)
@@ -34,6 +34,7 @@ from m5.SimObject import SimObject
 class RubyDirectoryMemory(SimObject):
     type = 'RubyDirectoryMemory'
     cxx_class = 'DirectoryMemory'
+    cxx_header = "mem/ruby/system/DirectoryMemory.hh"
     version = Param.Int(0, "")
     size = Param.MemorySize("1GB", "capacity in bytes")
     use_map = Param.Bool(False, "enable sparse memory")
index 09c940fee1790d2f32bc4e750a6c7f98233e0f08..ad18efec50e8bcec6c3bc1b9717efbe2c3682dcd 100644 (file)
@@ -34,5 +34,6 @@ class MemoryControl(ClockedObject):
     abstract = True
     type = 'MemoryControl'
     cxx_class = 'MemoryControl'
+    cxx_header = "mem/ruby/system/MemoryControl.hh"
     version = Param.Int("");
     ruby_system = Param.RubySystem("")
index e65b6f5ccd5994f2c35695ec17c66fa030567a89..7764938d32d7066236be6ecb5757fb9fc93aa396 100644 (file)
@@ -34,6 +34,7 @@ from MemoryControl import MemoryControl
 class RubyMemoryControl(MemoryControl):
     type = 'RubyMemoryControl'
     cxx_class = 'RubyMemoryControl'
+    cxx_header = "mem/ruby/system/RubyMemoryControl.hh"
     version = Param.Int("");
 
     # Override the default clock
index c9d2e96ac00c8a75d382870073e7c1c6df5e2153..b1f625723ccd8962ab6d845ab03e35c14df4f032 100644 (file)
@@ -32,6 +32,7 @@ from ClockedObject import ClockedObject
 
 class RubySystem(ClockedObject):
     type = 'RubySystem'
+    cxx_header = "mem/ruby/system/System.hh"
     random_seed = Param.Int(1234, "random seed used by the simulation");
     randomization = Param.Bool(False,
         "insert random delays on message enqueue times");
index deef6e714136805f136cd8578a86624cae7baa5a..9b243a8b94a4705c29fa03d548a0c75fb58f9946 100644 (file)
@@ -34,6 +34,7 @@ from MemObject import MemObject
 class RubyPort(MemObject):
     type = 'RubyPort'
     abstract = True
+    cxx_header = "mem/ruby/system/RubyPort.hh"
     slave = VectorSlavePort("CPU slave port")
     master = VectorMasterPort("CPU master port")
     version = Param.Int(0, "")
@@ -50,10 +51,12 @@ class RubyPort(MemObject):
 
 class RubyPortProxy(RubyPort):
     type = 'RubyPortProxy'
+    cxx_header = "mem/ruby/system/RubyPortProxy.hh"
     
 class RubySequencer(RubyPort):
     type = 'RubySequencer'
     cxx_class = 'Sequencer'
+    cxx_header = "mem/ruby/system/Sequencer.hh"
     icache = Param.RubyCache("")
     dcache = Param.RubyCache("")
     max_outstanding_requests = Param.Int(16,
@@ -63,3 +66,4 @@ class RubySequencer(RubyPort):
 
 class DMASequencer(RubyPort):
     type = 'DMASequencer'
+    cxx_header = "mem/ruby/system/DMASequencer.hh"
index bca19b4dfd093aff56089f4ab5b76ef75a3741ab..f48ab1f95a82cc9027acdb70ce9f249c14a9b873 100644 (file)
@@ -32,3 +32,4 @@ from m5.SimObject import SimObject
 class RubyWireBuffer(SimObject):
     type = 'RubyWireBuffer'
     cxx_class = 'WireBuffer'
+    cxx_header = "mem/ruby/system/WireBuffer.hh"
index 427dbf7000db94a2b41c322b78105bc14b6d2fb2..f07e521d35a1996b8e34544cb788f1a214580730 100644 (file)
@@ -185,6 +185,7 @@ from Controller import RubyController
 
 class $py_ident(RubyController):
     type = '$py_ident'
+    cxx_header = 'mem/protocol/${c_ident}.hh'
 ''')
         code.indent()
         for param in self.config_parameters:
index b63aa22d58457629200e8291c5a5a08b63e2307a..c01db2a8001a4f3ae4465ac3c271bff14548986e 100644 (file)
@@ -105,6 +105,9 @@ allClasses = {}
 # dict to look up SimObjects based on path
 instanceDict = {}
 
+# Did any of the SimObjects lack a header file?
+noCxxHeader = False
+
 def public_value(key, value):
     return key.startswith('_') or \
                isinstance(value, (FunctionType, MethodType, ModuleType,
@@ -119,6 +122,7 @@ class MetaSimObject(type):
     init_keywords = { 'abstract' : bool,
                       'cxx_class' : str,
                       'cxx_type' : str,
+                      'cxx_header' : str,
                       'type' : str }
     # Attributes that can be set any time
     keywords = { 'check' : FunctionType }
@@ -203,6 +207,12 @@ class MetaSimObject(type):
 
             cls._value_dict['cxx_type'] = '%s *' % cls._value_dict['cxx_class']
 
+            if 'cxx_header' not in cls._value_dict:
+                global noCxxHeader
+                noCxxHeader = True
+                print >> sys.stderr, \
+                    "warning: No header file specified for SimObject: %s" % name
+
         # Export methods are automatically inherited via C++, so we
         # don't want the method declarations to get inherited on the
         # python side (and thus end up getting repeated in the wrapped
@@ -407,6 +417,7 @@ class MetaSimObject(type):
         code('#include "params/$cls.hh"')
         for param in params:
             param.cxx_predecls(code)
+        code('#include "${{cls.cxx_header}}"')
         cls.export_method_cxx_predecls(code)
         code('''\
 /**
@@ -568,15 +579,7 @@ class SimObject(object):
     __metaclass__ = MetaSimObject
     type = 'SimObject'
     abstract = True
-
-    @classmethod
-    def export_method_cxx_predecls(cls, code):
-        code('''
-#include <Python.h>
-
-#include "sim/serialize.hh"
-#include "sim/sim_object.hh"
-''')
+    cxx_header = "sim/sim_object.hh"
 
     @classmethod
     def export_method_swig_predecls(cls, code):
@@ -1099,10 +1102,11 @@ baseClasses = allClasses.copy()
 baseInstances = instanceDict.copy()
 
 def clear():
-    global allClasses, instanceDict
+    global allClasses, instanceDict, noCxxHeader
 
     allClasses = baseClasses.copy()
     instanceDict = baseInstances.copy()
+    noCxxHeader = False
 
 # __all__ defines the list of symbols that get exported when
 # 'from config import *' is invoked.  Try to keep this reasonably
index 9aca4a97c461e8e03f1a800a706bfaae97aa80b3..8a03413a9255f3b8d78370353c24d25807ed88b1 100644 (file)
@@ -31,3 +31,4 @@ from m5.SimObject import SimObject
 class BaseTLB(SimObject):
     type = 'BaseTLB'
     abstract = True
+    cxx_header = "sim/tlb.hh"
index 26b0e234890ac8c535a51a98ca61def6a71b74ca..8bc4031a4c392b78e5973038d4f88bea57ee1081 100644 (file)
@@ -42,6 +42,7 @@ from m5.proxy import *
 class ClockedObject(SimObject):
     type = 'ClockedObject'
     abstract = True
+    cxx_header = "sim/clocked_object.hh"
 
     # Clock period of this object, with the default value being the
     # clock period of the parent object, unproxied at instantiation
index 9ba91a019b7767781bbdfa52b51763b409305e56..7405ecbc6d45662b679fc0e540facdc2165f7e8a 100644 (file)
@@ -33,3 +33,4 @@ class InstTracer(SimObject):
     type = 'InstTracer'
     cxx_class = 'Trace::InstTracer'
     abstract = True
+    cxx_header = "sim/insttracer.hh"
index bb76b5cf71d73d01937d1ba0c6a2d7770a9fb932..55ccc50d02aabd5c80cce131e4c0c8b5b4379421 100644 (file)
@@ -33,22 +33,20 @@ from m5.proxy import *
 class Process(SimObject):
     type = 'Process'
     abstract = True
+    cxx_header = "sim/process.hh"
     input = Param.String('cin', "filename for stdin")
     output = Param.String('cout', 'filename for stdout')
     errout = Param.String('cerr', 'filename for stderr')
     system = Param.System(Parent.any, "system process will run on")
     max_stack_size = Param.MemorySize('64MB', 'maximum size of the stack')
 
-    @classmethod
-    def export_method_cxx_predecls(cls, code):
-        code('#include "sim/process.hh"')
-
     @classmethod
     def export_methods(cls, code):
         code('bool map(Addr vaddr, Addr paddr, int size);')
 
 class LiveProcess(Process):
     type = 'LiveProcess'
+    cxx_header = "sim/process.hh"
     executable = Param.String('', "executable (overrides cmd[0] if set)")
     cmd = VectorParam.String("command line (executable plus arguments)")
     env = VectorParam.String([], "environment settings")
index daa0a903fdb62f29e2ec8dc17fdfee80076a8d59..44f768c0bc6b7927e9140be02124e8e991516881 100644 (file)
@@ -58,6 +58,7 @@ class Root(SimObject):
         return 'root'
 
     type = 'Root'
+    cxx_header = "sim/root.hh"
 
     full_system = Param.Bool("if this is a full system simulation")
 
index 92883b299988a491969e6495d61c3f96832043ab..3d45c23c064211a8e516a2ed994a467d5bb0a6e0 100644 (file)
@@ -39,6 +39,7 @@ class MemoryMode(Enum): vals = ['invalid', 'atomic', 'timing']
 
 class System(MemObject):
     type = 'System'
+    cxx_header = "sim/system.hh"
     system_port = MasterPort("System port")
 
     # Override the clock from the ClockedObject which looks at the