misc: Merge branch 'release-staging-v20.0.0.0' into develop
authorBobby R. Bruce <bbruce@ucdavis.edu>
Thu, 28 May 2020 08:04:16 +0000 (01:04 -0700)
committerBobby R. Bruce <bbruce@ucdavis.edu>
Thu, 28 May 2020 08:04:16 +0000 (01:04 -0700)
205 files changed:
.gitignore
RELEASE-NOTES.md
SConstruct
build_opts/ARM_MESI_Three_Level
build_opts/ARM_MOESI_hammer
build_opts/GCN3_X86 [deleted file]
build_opts/Garnet_standalone
configs/boot/ammp.rcS [deleted file]
configs/boot/ammp.symbol [deleted file]
configs/boot/art.rcS [deleted file]
configs/boot/bn-app.rcS [deleted file]
configs/boot/bonnie.rcS [deleted file]
configs/boot/bonnie.symbol [deleted file]
configs/boot/bzip.rcS [deleted file]
configs/boot/cc1.symbol [deleted file]
configs/boot/devtime.rcS [deleted file]
configs/boot/equake.rcS [deleted file]
configs/boot/equake.symbol [deleted file]
configs/boot/gcc.rcS [deleted file]
configs/boot/gzip.rcS [deleted file]
configs/boot/gzip.symbol [deleted file]
configs/boot/iscsi-client.rcS [deleted file]
configs/boot/iscsi-server.rcS [deleted file]
configs/boot/ls.rcS [deleted file]
configs/boot/mcf.rcS [deleted file]
configs/boot/mcf.symbol [deleted file]
configs/boot/mesa.rcS [deleted file]
configs/boot/mesa.symbol [deleted file]
configs/boot/micro_ctx.rcS [deleted file]
configs/boot/micro_memlat.rcS [deleted file]
configs/boot/micro_memlat2mb.rcS [deleted file]
configs/boot/micro_memlat8.rcS [deleted file]
configs/boot/micro_memlat8mb.rcS [deleted file]
configs/boot/micro_stream.rcS [deleted file]
configs/boot/micro_streamcopy.rcS [deleted file]
configs/boot/micro_streamscale.rcS [deleted file]
configs/boot/micro_syscall.rcS [deleted file]
configs/boot/micro_tlblat.rcS [deleted file]
configs/boot/micro_tlblat2.rcS [deleted file]
configs/boot/micro_tlblat3.rcS [deleted file]
configs/boot/mutex-test.rcS [deleted file]
configs/boot/nat-netperf-maerts-client.rcS [deleted file]
configs/boot/nat-netperf-server.rcS [deleted file]
configs/boot/nat-netperf-stream-client.rcS [deleted file]
configs/boot/nat-spec-surge-client.rcS [deleted file]
configs/boot/nat-spec-surge-server.rcS [deleted file]
configs/boot/natbox-netperf.rcS [deleted file]
configs/boot/natbox-spec-surge.rcS [deleted file]
configs/boot/netperf-maerts-client.rcS [deleted file]
configs/boot/netperf-rr.rcS [deleted file]
configs/boot/netperf-server.rcS [deleted file]
configs/boot/netperf-stream-client.rcS [deleted file]
configs/boot/netperf-stream-nt-client.rcS [deleted file]
configs/boot/netperf-stream-udp-client.rcS [deleted file]
configs/boot/netperf-stream-udp-local.rcS [deleted file]
configs/boot/nfs-client-dbench.rcS [deleted file]
configs/boot/nfs-client-nhfsstone.rcS [deleted file]
configs/boot/nfs-client-smallb.rcS [deleted file]
configs/boot/nfs-client-tcp-smallb.rcS [deleted file]
configs/boot/nfs-client-tcp.rcS [deleted file]
configs/boot/nfs-client.rcS [deleted file]
configs/boot/nfs-server-nhfsstone.rcS [deleted file]
configs/boot/nfs-server.rcS [deleted file]
configs/boot/null.rcS [deleted file]
configs/boot/ping-client.rcS [deleted file]
configs/boot/ping-server.rcS [deleted file]
configs/boot/setup [deleted file]
configs/boot/spec-surge-client.rcS [deleted file]
configs/boot/spec-surge-server.rcS [deleted file]
configs/boot/surge-client.rcS [deleted file]
configs/boot/surge-server.rcS [deleted file]
configs/common/FSConfig.py
configs/common/FileSystemConfig.py
configs/common/HMC.py
configs/common/ObjectList.py
configs/common/Options.py
configs/common/Simulation.py
configs/common/SysPaths.py
configs/dram/lat_mem_rd.py
configs/dram/sweep.py
configs/example/arm/baremetal.py
configs/example/arm/devices.py
configs/example/arm/fs_bigLITTLE.py
configs/example/arm/starter_fs.py
configs/example/arm/starter_se.py
configs/example/read_config.py
configs/ruby/AMD_Base_Constructor.py
configs/ruby/GPU_RfO.py
configs/ruby/GPU_VIPER.py
configs/ruby/GPU_VIPER_Baseline.py
configs/ruby/GPU_VIPER_Region.py
configs/ruby/Garnet_standalone.py
configs/ruby/MESI_Three_Level.py
configs/ruby/MESI_Two_Level.py
configs/ruby/MI_example.py
configs/ruby/MOESI_AMD_Base.py
configs/ruby/MOESI_CMP_directory.py
configs/ruby/MOESI_CMP_token.py
configs/ruby/MOESI_hammer.py
configs/topologies/MeshDirCorners_XY.py
configs/topologies/Mesh_XY.py
ext/testlib/__init__.py
ext/testlib/config.py [deleted file]
ext/testlib/configuration.py [new file with mode: 0644]
ext/testlib/fixture.py
ext/testlib/handlers.py
ext/testlib/helper.py
ext/testlib/loader.py
ext/testlib/log.py
ext/testlib/main.py
ext/testlib/query.py
ext/testlib/result.py
ext/testlib/runner.py
ext/testlib/sandbox.py
ext/testlib/suite.py
ext/testlib/terminal.py
ext/testlib/test.py [deleted file]
ext/testlib/test_util.py [new file with mode: 0644]
ext/testlib/uid.py
ext/testlib/wrappers.py
src/SConscript
src/arch/arm/semihosting.cc
src/arch/hsail/gen.py
src/arch/riscv/isa.cc
src/arch/riscv/pagetable_walker.cc
src/arch/x86/process.cc
src/arch/x86/tlb.cc
src/base/output.cc
src/base/stats/group.hh
src/base/version.cc
src/dev/arm/smmu_v3_transl.hh
src/dev/hsa/HSADevice.py
src/dev/hsa/HSADriver.py
src/dev/hsa/hsa_device.cc
src/dev/hsa/hsa_driver.cc
src/dev/hsa/hsa_packet_processor.cc
src/dev/hsa/hsa_packet_processor.hh
src/dev/hsa/hw_scheduler.cc
src/dev/storage/disk_image.cc
src/doxygen/group_definitions.hh [new file with mode: 0644]
src/gpu-compute/gpu_tlb.cc
src/mem/dram_ctrl.cc
src/mem/physical.cc
src/mem/ruby/SConscript
src/mem/ruby/network/garnet2.0/OutputUnit.hh
src/mem/ruby/protocol/MESI_Three_Level-L0cache.sm
src/mem/ruby/protocol/MESI_Two_Level-L1cache.sm
src/mem/ruby/protocol/MOESI_CMP_directory-L1cache.sm
src/mem/ruby/protocol/RubySlicc_Types.sm
src/mem/ruby/structures/Prefetcher.cc [deleted file]
src/mem/ruby/structures/Prefetcher.hh [deleted file]
src/mem/ruby/structures/RubyPrefetcher.cc [new file with mode: 0644]
src/mem/ruby/structures/RubyPrefetcher.hh [new file with mode: 0644]
src/mem/ruby/structures/RubyPrefetcher.py
src/mem/ruby/structures/SConscript
src/mem/ruby/system/RubySystem.cc
src/mem/slicc/symbols/StateMachine.py
src/mem/token_port.hh
src/python/m5/ticks.py
src/python/m5/util/__init__.py
src/python/m5/util/dot_writer.py
src/sim/drain.hh
src/sim/eventq.hh
src/sim/mem_state.cc
src/sim/power/mathexpr_powermodel.hh
src/sim/pseudo_inst.cc
src/sim/serialize.cc
src/sim/serialize.hh
src/sim/sim_object.hh
src/sim/syscall_emul.hh
src/systemc/core/scheduler.hh
tests/configs/base_config.py
tests/gem5/.testignore
tests/gem5/__init__.py
tests/gem5/cpu_tests/test.py
tests/gem5/fixture.py
tests/gem5/memory/memtest-run.py
tests/gem5/memory/test.py
tests/gem5/suite.py
tests/gem5/verifier.py
tests/gem5/x86-boot-tests/system/system.py
tests/main.py
tests/testing/__init__.py
tests/testing/helpers.py
tests/testing/results.py
tests/testing/tests.py
tests/testing/units.py
tests/tests.py
util/cpt_upgrader.py
util/cpt_upgraders/arm-hdlcd-upgrade.py
util/cpt_upgraders/arm-miscreg-teehbr.py
util/cpt_upgraders/arm-sve.py
util/cpt_upgraders/armv8.py
util/cpt_upgraders/x86-add-tlb.py
util/dockerfiles/python3/Dockerfile [deleted file]
util/dockerfiles/ubuntu-18.04_all-dependencies/Dockerfile
util/dockerfiles/ubuntu-20.04_all-dependencies/Dockerfile [new file with mode: 0644]
util/git-commit-msg.py
util/git-pre-commit.py
util/style/file_types.py
util/style/region.py
util/style/repo.py
util/style/sort_includes.py
util/style/style.py
util/style/verifiers.py

index b851a23f1d3b372649008cc27b64f150e61f462e..a19560973bdb1572e6c9bf502ae1fe73e9aba07f 100644 (file)
@@ -8,7 +8,7 @@ cscope.out
 .*.swp
 .*.swo
 m5out
-/src/doxygen
+/src/doxygen/html
 /ext/dramsim2/DRAMSim2
 /ext/mcpat/regression/*/*.out
 /util/m5/*.o
index 6f80906b2195422c21b19c872cc309af79b5ced6..1ea05f40457a04479fc1d0815e5c6fba8c3556a5 100644 (file)
@@ -1,11 +1,95 @@
 # Version 20.0.0.0
 
-* Compiling and running gem5 with Python 3 is now fully supported.
-* Compiling and running gem5 with GCC 8 and 9 is now supported.
-* Scons-based tests have been migrated to the testlib framework. Please consult TESTING.md for more information on how these may be run.
-* Support for the ALPHA ISA has been dropped.
+Welcome to our first "official" gem5 release!
+gem5 v19.0.0.0 was a "test" release, but this one has release notes, so it must be official!
+
+Thank you to everyone that made this release possible!
+This has been a very productive release with over [70 issues closed](https://gem5.atlassian.net/), over 500 commits, and 31 unique contributors.
+Below are some of the highlights, though I'm sure I've missed some important changes.
+
+## New features
+
+* [gem5-resources repository](https://gem5.googlesource.com/public/gem5-resources/)
+  * This new repository will store all of the *sources* (e.g., code) used to create testing and research resources. This includes disk images, testing binaries, kernel binaries, etc.
+  * Binaries created with the sources are hosted on dist.gem5.org.
+  * Details on the new page for resources: <http://www.gem5.org/documentation/general_docs/gem5_resources>.
 * Memory SimObjects can now be initialized using an image file using the image_file parameter.
-* The m5 utility has been revamped with a new build system based on scons, tests, and updated and more consistent feature support.
+* **[USER-FACING CHANGE]** The m5 utility has been revamped with a new build system based on scons, tests, and updated and more consistent feature support.
+  * To build, now use `scons build/<arch>/out/m5`, not `make`.
+  * [Documentation](http://www.gem5.org/documentation/general_docs/m5ops/) coming soon.
 * Robust support for marshalling data from a function call inside the simulation to a function within gem5 using a predefined set of rules.
-* Workload configuration pulled out into its own object, simplifying the System object and making workload configuration more modular and flexible.
+  * Developers can specify an ABI for guest<->simulator calls and then "just call functions".
+  * Unifies pseudo-inst, syscall, and other support.
+  * Code within gem5 has been updated. However, users which added new pseudo-ops may have to update their code.
+* **[PYTHON API CHANGE]** Workload configuration pulled out into its own object, simplifying the System object and making workload configuration more modular and flexible.
+  * All full system config/run scripts must be updated (e.g., anything that used the `LinuxX86System` or similar SimObject).
+  * Many of the parameters of `System` are now parameters of the `Workload` (see `src/sim/Workload.py`).
+    * For instance, many parameters of `LinuxX86System` are now part of `X86FsLinux` which is now the `workload` parameter of the `System` SimObject.
+  * See https://gem5-review.googlesource.com/c/public/gem5/+/24283/ and https://gem5-review.googlesource.com/c/public/gem5/+/26466 for more details.
 * Sv39 paging has been added to the RISC-V ISA, bringing gem5 close to running Linux on RISC-V.
+  * (Some) Baremetal OSes are now supported.
+* Improvements to DRAM model:
+  * Added support for verifying available command bandwidth.
+  * Added support for multi-cycle commands.
+  * Added new timing parameters.
+  * Added ability to interleave bursts.
+  * Added LPDDR5 configurations.
+* **[Developer change]** We are beginning to document gem5 APIs.
+  * Currently, only SimObjects and the APIs they depend on have been documented.
+  * We are using doxygen to mark "stable APIs" and will use manual code review to make sure the APIs stay stable.
+  * More information will be coming during gem5-20.1 development.
+
+## Removed features
+
+* Support for the ALPHA ISA has been dropped.
+  * All ALPHA ISA code has been removed
+  * Old "rcS" scripts for ALPHA have been removed
+
+## New supported platforms
+
+* Compiling and running gem5 with Python 3 is now fully supported.
+  * Lots of code changes required for this.
+  * There may still be some python code that's not up to date. Please open a [Jira ticket](https://gem5.atlassian.net/) if you find any code that doesn't work with python3.
+* gem5 now supports Ubuntu 20.04.
+* Compiling gem5 with GCC 8 and 9 is now supported.
+* Compiling with clang up to version 9 is now supported.
+
+## Testing improvements
+
+* Scons-based tests have been migrated to the testlib framework.
+  * Tests can now be run with `tests/main.py`, except for the unittests.
+  * Please consult TESTING.md for more information on how these may be run.
+* We are continuing to work on CI tests. Most of the plumbing is there for Google Cloud Build integration. See [the Jira issue](https://gem5.atlassian.net/browse/GEM5-237) for details.
+
+## Other API changes
+
+* **[API CHANGE]** Ruby's prefetcher renamed to RubyPrefetcher.
+  * Any SLICC protocols with prefetchers need to be updated.
+  * Some config scripts for Ruby protocols with prefetchers may need to be updated.
+* **[API CHANGE]** SE mode improvements.
+  * Better support for the mmap and related syscalls.
+  * A new virtual memory area API for tracking SE mode allocations.
+  * When implementing syscalls, the way that guest memory is allocated changes. All code in gem5 is updated, but if there are any external syscalls, they may need be updated.
+* **[COMMAND LINE CHANGE]** The `--disk-image` argument to `fs.py` is now optional.
+  * However, the disk image names *are no longer implied*.
+  * The script still implicitly searches `M5_PATH`, but the name of the disk image must be specified.
+* **[API CHANGE]** SLICC `queueMemory` is now `enqueue`.
+  * All protocol configs must be updated with another message buffer in the memory controllers (directories).
+  * All protocol SLICC files must replace `queueMemoryRead` and `queueMemoryWrite` with `enqueue` to another "special" message buffer named `memQueue`.
+  * This allows finite buffering between the cache controllers and DRAMCtrl.
+* **[API CHANGE]** Added Prefetcher namespace
+  * All prefetchers' names have changed from `*Prefetcher` to `Prefetcher::*`
+  * If you have any prefetchers that are not in the gem5 mainline, your code will likely need to be updated.
+
+## Other changes
+
+* Implemented ARMv8.3-CompNum, SIMD complex number extension.
+* Support for Arm Trusted Firmware + u-boot with the new VExpress_GEM5_Foundation platform
+* Removed author list from source files.
+  * This was originally so future people would know who to contact.
+  * However, it was difficult to maintain and quickly out of date.
+  * Copyright is unchanged.
+* Improvements to gem5's power model.
+* MESI_Three_Level Ruby protocol bugfixes.
+* Ruby functional reads now work in more cases.
+* Indirect branch stats work correctly now.
index ba4affaf7ac9c62038096511a9a0b6aec2062839..370cd60241f18dbb0deac707fb8b57ecc91fcb9b 100755 (executable)
@@ -97,7 +97,7 @@ import SCons
 import SCons.Node
 import SCons.Node.FS
 
-from m5.util import compareVersions, readCommand
+from m5.util import compareVersions, readCommand, readCommandWithReturn
 
 help_texts = {
     "options" : "",
@@ -277,7 +277,7 @@ global_vars.AddVariables(
     ('CCFLAGS_EXTRA', 'Extra C and C++ compiler flags', ''),
     ('LDFLAGS_EXTRA', 'Extra linker flags', ''),
     ('PYTHON_CONFIG', 'Python config binary to use',
-     [ 'python2.7-config', 'python-config' ]),
+     [ 'python2.7-config', 'python-config', 'python3-config' ]),
     ('PROTOC', 'protoc tool', environ.get('PROTOC', 'protoc')),
     ('BATCH', 'Use batch pool for build and tests', False),
     ('BATCH_CMD', 'Batch pool submission command name', 'qdo'),
@@ -404,22 +404,27 @@ if main['GCC']:
 
     main['GCC_VERSION'] = gcc_version
 
-    if compareVersions(gcc_version, '4.9') >= 0 and \
-       compareVersions(gcc_version, '8.1') < 0:
+    if compareVersions(gcc_version, '4.9') >= 0:
         # Incremental linking with LTO is currently broken in gcc versions
-        # 4.9 to 8.1.
+        # 4.9 and above. A version where everything works completely hasn't
+        # yet been identified.
         #
         # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67548
-        #
+        main['BROKEN_INCREMENTAL_LTO'] = True
+    if compareVersions(gcc_version, '6.0') >= 0:
         # gcc versions 6.0 and greater accept an -flinker-output flag which
         # selects what type of output the linker should generate. This is
         # necessary for incremental lto to work, but is also broken in
-        # versions of gcc up to 8.1.
+        # current versions of gcc. It may not be necessary in future
+        # versions. We add it here since it might be, and as a reminder that
+        # it exists. It's excluded if lto is being forced.
         #
         # https://gcc.gnu.org/gcc-6/changes.html
         # https://gcc.gnu.org/ml/gcc-patches/2015-11/msg03161.html
         # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69866
-        main['BROKEN_INCREMENTAL_LTO'] = True
+        if not GetOption('force_lto'):
+            main.Append(PSHLINKFLAGS='-flinker-output=rel')
+            main.Append(PLINKFLAGS='-flinker-output=rel')
 
     disable_lto = GetOption('no_lto')
     if not disable_lto and main.get('BROKEN_INCREMENTAL_LTO', False) and \
@@ -471,6 +476,11 @@ elif main['CLANG']:
                          # interchangeably.
                          '-Wno-mismatched-tags',
                          ])
+    if compareVersions(clang_version, "10.0") >= 0:
+        main.Append(CCFLAGS=['-Wno-c99-designator'])
+
+    if compareVersions(clang_version, "8.0") >= 0:
+        main.Append(CCFLAGS=['-Wno-defaulted-function-deleted'])
 
     main.Append(TCMALLOC_CCFLAGS=['-fno-builtin'])
 
@@ -683,8 +693,21 @@ if main['USE_PYTHON']:
 
     # Read the linker flags and split them into libraries and other link
     # flags. The libraries are added later through the call the CheckLib.
-    py_ld_flags = readCommand([python_config, '--ldflags'],
-        exception='').split()
+    # Note: starting in Python 3.8 the --embed flag is required to get the
+    # -lpython3.8 linker flag
+    retcode, cmd_stdout = readCommandWithReturn(
+        [python_config, '--ldflags', '--embed'], exception='')
+    if retcode != 0:
+        # If --embed isn't detected then we're running python <3.8
+        retcode, cmd_stdout = readCommandWithReturn(
+            [python_config, '--ldflags'], exception='')
+
+    # Checking retcode again
+    if retcode != 0:
+        error("Failing on python-config --ldflags command")
+
+    py_ld_flags = cmd_stdout.split()
+
     py_libs = []
     for lib in py_ld_flags:
          if not lib.startswith('-l'):
index 1836fb095bae5f843ebeeebab442284e3d28ed4f..29a429ce68e4c185f7e6756bd993eb34370490e2 100644 (file)
@@ -2,5 +2,5 @@
 # All rights reserved.
 
 TARGET_ISA = 'arm'
-CPU_MODELS = 'TimingSimpleCPU, O3CPU'
+CPU_MODELS = 'TimingSimpleCPU,O3CPU'
 PROTOCOL = 'MESI_Three_Level'
index 2eddc5b05df726d45bc541f9b8abec4ac0e993d6..2ba8ce835b487f58c02252d7c721b7e18c509566 100644 (file)
@@ -2,5 +2,5 @@
 # All rights reserved.
 
 TARGET_ISA = 'arm'
-CPU_MODELS = 'TimingSimpleCPU, O3CPU'
+CPU_MODELS = 'TimingSimpleCPU,O3CPU'
 PROTOCOL = 'MOESI_hammer'
diff --git a/build_opts/GCN3_X86 b/build_opts/GCN3_X86
deleted file mode 100644 (file)
index 21e3cf0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-PROTOCOL = 'GPU_VIPER'
-TARGET_ISA = 'x86'
-TARGET_GPU_ISA = 'gcn3'
-BUILD_GPU = True
-CPU_MODELS = 'AtomicSimpleCPU,O3CPU,TimingSimpleCPU'
index df97b5b31362e050df6c4cc510b4d11ec821f63e..f749d54ca269ab2b0063746f1f3358a36a58098f 100644 (file)
@@ -1,3 +1,3 @@
-TARGET_ISA = 'alpha'
-CPU_MODELS = 'AtomicSimpleCPU,TimingSimpleCPU,O3CPU,MinorCPU'
+TARGET_ISA = 'null'
+CPU_MODELS = ''
 PROTOCOL = 'Garnet_standalone'
diff --git a/configs/boot/ammp.rcS b/configs/boot/ammp.rcS
deleted file mode 100644 (file)
index 485244c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-cd /benchmarks/spec/ammp00/
-
-/sbin/m5 checkpoint 0 0
-/sbin/m5 checkpoint 100000000 200000000
-
-/sbin/m5 loadsymbol
-
-/sbin/m5 resetstats 
-./ammp < input/mdred.in
-/sbin/m5 exit
diff --git a/configs/boot/ammp.symbol b/configs/boot/ammp.symbol
deleted file mode 100644 (file)
index 93ef405..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-000000012001da40 T AMMPmonitor
-000000012001dfc0 T AMMPmonitor_mute
-0000000120034338 D _DYNAMIC
-00000001200346c8 D _GLOBAL_OFFSET_TABLE_
-0000000120034d60 G _IO_stdin_used
-0000000120034500 T _PROCEDURE_LINKAGE_TABLE_
-00000001200344e0 d __CTOR_END__
-00000001200344d8 d __CTOR_LIST__
-00000001200344f0 d __DTOR_END__
-00000001200344e8 d __DTOR_LIST__
-0000000120034334 r __FRAME_END__
-00000001200344f8 d __JCR_END__
-00000001200344f8 d __JCR_LIST__
-0000000120034da0 A __bss_start
-00000001200328c8 D __data_start
-0000000120020c40 t __do_global_ctors_aux
-0000000120001090 t __do_global_dtors_aux
-0000000120034d68 G __dso_handle
-00000001200328c8 A __fini_array_end
-00000001200328c8 A __fini_array_start
-00000001200328c8 A __init_array_end
-00000001200328c8 A __init_array_start
-0000000120020ba0 T __libc_csu_fini
-0000000120020af0 T __libc_csu_init
-0000000120001050 W __start
-0000000120034da0 A _edata
-0000000120035418 A _end
-0000000120020ca0 T _fini
-0000000120000fe8 T _init
-0000000120001050 T _start
-000000012000d220 T a_angle
-000000012000b3d0 T a_bond
-000000012000e1b0 T a_c_angle
-0000000120009cd0 T a_d_zero
-0000000120009c90 T a_f_zero
-0000000120009f70 T a_ftodx
-000000012000a000 T a_ftogx
-000000012000a090 T a_ftovx
-0000000120009d20 T a_g_zero
-0000000120010950 T a_hybrid
-000000012000a7c0 T a_inactive_f_zero
-0000000120009e50 T a_inc_d
-0000000120009dc0 T a_inc_f
-0000000120009ee0 T a_inc_v
-000000012000a370 T a_l2_d
-000000012000a220 T a_l2_f
-000000012000a290 T a_l2_g
-000000012000a300 T a_l2_v
-0000000120008bf0 T a_m_serial
-000000012000a1a0 T a_max_d
-000000012000a120 T a_max_f
-000000012000d570 T a_mmangle
-000000012000b620 T a_mmbond
-0000000120009c30 T a_next
-0000000120005350 T a_noel
-0000000120004700 T a_nonbon
-0000000120009bc0 T a_number
-00000001200096b0 T a_pr_beta
-000000012000a660 T a_readvelocity
-0000000120020750 T a_restrain
-000000012001eda0 T a_tether
-000000012001a2e0 T a_torsion
-0000000120009d70 T a_v_zero
-0000000120003c90 T aaerror
-0000000120009a60 T activate
-000000012001fef0 T alltether
-0000000120004370 T analyze
-000000012000c0d0 T angle
-0000000120034df8 S angle_first
-0000000120034e00 S angle_last
-0000000120034dd0 s ap.2
-0000000120034de0 s ap.4
-0000000120008970 T atom
-0000000120034dc8 s atomNUMBER
-0000000120034dcc s atomUPDATE
-000000012000a8b0 T bond
-0000000120034de8 S bond_first
-0000000120034df0 S bond_last
-000000012000bf20 T bond_length
-000000012001f240 T bstrot
-0000000120034ea0 b buff.0
-000000012001ad40 T cngdel
-0000000120034da0 s completed.1
-00000001200200c0 T cpyvec
-00000001200328c8 W data_start
-0000000120034d98 g dielecold.0
-000000012000efe0 T dump_angles
-0000000120008d00 T dump_atoms
-000000012000be40 T dump_bonds
-000000012000a3e0 T dump_excludes
-000000012000a6c0 T dump_force
-0000000120011a50 T dump_hybrids
-0000000120005c20 T dump_noels
-0000000120008f40 T dump_pdb
-0000000120020a10 T dump_restrains
-000000012001ffe0 T dump_tethers
-0000000120017b30 T dump_tgroup
-000000012001a170 T dump_torsions
-000000012001b7a0 T dump_variable
-000000012000a590 T dump_velocity
-0000000120034d7c g echo.0
-0000000120001760 T eval
-000000012000c580 T f_angle
-000000012000ac60 T f_bond
-0000000120001230 T f_box
-000000012000dc50 T f_c_angle
-000000012000ea10 T f_ho_angle
-000000012000bab0 T f_ho_bond
-0000000120011020 T f_ho_hybrid
-0000000120005840 T f_ho_noel
-000000012001fca0 T f_ho_tether
-00000001200102b0 T f_hybrid
-000000012000cd10 T f_mmangle
-000000012000b0e0 T f_mmbond
-0000000120005060 T f_noel
-00000001200155d0 T f_nonbon
-0000000120020500 T f_restrain
-000000012001ebd0 T f_tether
-0000000120019850 T f_torsion
-000000012000fbd0 T f_trace
-0000000120034db8 S first
-0000000120035058 B forces
-0000000120001130 t frame_dummy
-0000000120014b20 T fv_update_nonbon
-0000000120034e58 s fx.0
-0000000120034e60 s fy.1
-0000000120034e68 s fz.2
-000000012000ef40 T get_angle
-000000012000bda0 T get_bond
-000000012000c050 T get_bond_pointer
-000000012001b6e0 T get_f_variable
-00000001200119b0 T get_hybrid
-000000012001b740 T get_i_variable
-0000000120005b80 T get_noel
-0000000120020970 T get_restrain
-000000012001a9f0 T get_torsion
-00000001200184a0 T get_torsion_value
-000000012001ca50 T getatomdata
-000000012000f130 T gsdg
-000000012000e5a0 T gsdg_angle
-000000012000bfc0 T gsdg_bond
-000000012000f810 T gsdg_dgeom
-0000000120011790 T gsdg_hybrid
-000000012000f6c0 T gsdg_line_search
-0000000120005d30 T gsdg_noel
-000000012001a850 T gsdg_torsion
-0000000120034d84 g highest.0
-0000000120007490 T hpac
-000000012000fe30 T hybrid
-0000000120034e08 S hybrid_first
-0000000120034e10 S hybrid_last
-0000000120034e70 S in_mom_list
-0000000120009920 T inactivate
-00000001200097a0 T inactivate_non_zero
-0000000120034d80 g inloop.1
-0000000120034e74 s ip.1
-0000000120034e78 s jp.2
-0000000120034e7c s kp.3
-0000000120034dc0 S last
-0000000120034dd8 s lastmatched.3
-000000012001b0d0 T linmin
-0000000120003f80 T loadloop
-0000000120034e28 s local.3
-0000000120034d88 g lowest.1
-0000000120034e20 s lsize.2
-0000000120001180 T main
-0000000120017c10 T match_tgroup
-000000012001b450 T match_variable
-000000012001b860 T math
-000000012001cd40 T math_findlabel
-000000012001ccb0 T math_match_atom
-0000000120020100 T matmul
-0000000120012b90 T mm_fv_update_nonbon
-000000012001cef0 T mom
-000000012001d3f0 T mom_add
-000000012001d900 T mom_jab
-00000001200350f8 B mom_list
-000000012001d890 T mom_param
-000000012001d600 T mom_solve
-0000000120004c70 T noel
-0000000120034da8 S noel_first
-0000000120034db0 S noel_last
-0000000120034d78 G nused
-0000000120034e18 s oldatomnumber.0
-0000000120034d90 g oldcutoff.4
-0000000120034d70 g p.0
-0000000120006430 T pac
-0000000120006dd0 T pacpac
-00000001200350a8 B potentials
-0000000120007ac0 T ppac
-0000000120008180 T ptpac
-000000012001e840 T rand3
-000000012001e480 T randf
-000000012001e760 T randg
-0000000120001550 T read_eval_do
-00000001200201c0 T restrain
-0000000120034e90 S restrain_first
-0000000120034e98 S restrain_last
-000000012001b4e0 T set_f_variable
-000000012001b5e0 T set_i_variable
-0000000120018730 T set_torsion
-000000012001e2a0 T significance
-0000000120034e1c s since.1
-000000012001aa90 T steep
-0000000120018f50 T tailor_exclude
-0000000120018d30 T tailor_include
-0000000120019110 T tailor_qab
-000000012001e940 T tether
-0000000120034e80 S tether_first
-0000000120034e88 S tether_last
-00000001200171f0 T tg_apply
-0000000120017490 T tg_d_apply
-0000000120016fd0 T tg_do_search
-0000000120034e30 S tg_first
-0000000120017a20 T tg_gen_con
-0000000120016b90 T tg_init
-0000000120017700 T tg_nonbon
-0000000120016220 T tgroup
-0000000120004220 T tisint
-0000000120003cd0 T tisvariable
-00000001200189e0 T tmap
-0000000120017ec0 T tmin
-0000000120019190 T torsion
-0000000120034e38 S torsion_first
-0000000120034e40 S torsion_last
-0000000120006840 T tpac
-0000000120016800 T tsearch
-0000000120017c80 T tset
-0000000120018200 T tset_bond_build
-0000000120012100 T u_f_nonbon
-0000000120011b60 T u_v_nonbon
-0000000120012770 T uselist
-000000012000c310 T v_angle
-000000012000aac0 T v_bond
-0000000120001540 T v_box
-000000012000d930 T v_c_angle
-000000012000e750 T v_ho_angle
-000000012000b8a0 T v_ho_bond
-0000000120010ce0 T v_ho_hybrid
-00000001200055e0 T v_ho_noel
-000000012001faf0 T v_ho_tether
-000000012000fff0 T v_hybrid
-0000000120005dc0 T v_maxwell
-000000012000ca20 T v_mmangle
-000000012000aef0 T v_mmbond
-0000000120004e60 T v_noel
-0000000120015a80 T v_nonbon
-0000000120005fd0 T v_rescale
-0000000120020360 T v_restrain
-000000012001eab0 T v_tether
-00000001200193e0 T v_torsion
-000000012000f990 T v_trace
-000000012001c6f0 T validatom
-0000000120034e48 S variableFIRST
-0000000120034e50 S variableLAST
-00000001200061a0 T verlet
-0000000120015ec0 T zone_nonbon
diff --git a/configs/boot/art.rcS b/configs/boot/art.rcS
deleted file mode 100644 (file)
index caca588..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-#/benchmarks/spec/art00/art -scanfile c756hel.in -trainfile1 a10.img -stride 2 -startx 134 -starty 220 -endx 184 -endy 240 -objects 3
-cd /benchmarks/spec/art00/
-/sbin/m5 resetstats 
-/benchmarks/spec/art00/art -scanfile c756hel.in -trainfile1 a10.img -stride 5 -startx 134 -starty 220 -endx 184 -endy 240 -objects 1
-/sbin/m5 exit
diff --git a/configs/boot/bn-app.rcS b/configs/boot/bn-app.rcS
deleted file mode 100644 (file)
index 6fe2800..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-cd /benchmarks/bn
-./bottleneck-app
-m5 exit
diff --git a/configs/boot/bonnie.rcS b/configs/boot/bonnie.rcS
deleted file mode 100644 (file)
index 65b2fd6..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-
-echo -n "Mounting empty disk..."
-mkdir /tmp-space
-/bin/mount /dev/hdb1 /tmp-space
-chmod a+rwx /tmp-space
-echo "done."
-
-/bin/bonnie++ -u 99 -s 700 -r 0 -n 0 -f -F -d /tmp-space
-m5 exit
diff --git a/configs/boot/bonnie.symbol b/configs/boot/bonnie.symbol
deleted file mode 100644 (file)
index 041753e..0000000
+++ /dev/null
@@ -1,309 +0,0 @@
-0000000120025cb0 V DW.ref._ZTISt9bad_alloc
-0000000120025c98 V DW.ref.__gxx_personality_v0
-0000000120025018 D _DYNAMIC
-00000001200255a0 D _GLOBAL_OFFSET_TABLE_
-0000000120025c80 G _IO_stdin_used
-00000001200251e0 T _PROCEDURE_LINKAGE_TABLE_
-000000012000e8a0 T _Unwind_Backtrace
-000000012000e860 T _Unwind_DeleteException
-000000012000c290 T _Unwind_FindEnclosingFunction
-0000000120010df0 T _Unwind_Find_FDE
-0000000120010850 t _Unwind_Find_registered_FDE
-000000012000e470 T _Unwind_ForcedUnwind
-000000012000e340 t _Unwind_ForcedUnwind_Phase2
-000000012000c260 T _Unwind_GetCFA
-000000012000c2d0 T _Unwind_GetDataRelBase
-000000012000e9d0 T _Unwind_GetGR
-000000012000e9f0 T _Unwind_GetIP
-000000012000c270 T _Unwind_GetLanguageSpecificData
-000000012000c280 T _Unwind_GetRegionStart
-000000012000c2e0 T _Unwind_GetTextRelBase
-0000000120010ac0 t _Unwind_IteratePhdrCallback
-000000012000e160 T _Unwind_RaiseException
-000000012000e070 t _Unwind_RaiseException_Phase2
-000000012000e5c0 T _Unwind_Resume
-000000012000e710 T _Unwind_Resume_or_Rethrow
-000000012000e9e0 T _Unwind_SetGR
-000000012000ea00 T _Unwind_SetIP
-0000000120003cb0 T _Z10TestDirOpsiiiiR12CGlobalItems
-0000000120003220 T _Z11TestFileOpsiR12CGlobalItems
-0000000120009250 T _Z11bon_setugidPKcS0_b
-00000001200096b4 t _Z12read_sleb128PKhPl
-0000000120009678 t _Z12read_uleb128PKhPm
-0000000120009a04 t _Z15get_ttype_entryP16lsda_header_infom
-0000000120009a84 t _Z16get_adjusted_ptrPKSt9type_infoS1_PPv
-000000012000ab40 t _Z16get_globals_dtorPv
-000000012000ab9c t _Z16get_globals_initv
-00000001200098a8 t _Z17parse_lsda_headerP15_Unwind_ContextPKhP16lsda_header_info
-0000000120009b30 t _Z20check_exception_specP16lsda_header_infoPKSt9type_infoPvl
-0000000120009be0 t _Z20empty_exception_specP16lsda_header_infol
-00000001200095b4 t _Z21base_of_encoded_valuehP15_Unwind_Context
-000000012000abe0 t _Z21get_globals_init_oncev
-0000000120009548 t _Z21size_of_encoded_valueh
-000000012000a3ec t _Z23__gxx_exception_cleanup19_Unwind_Reason_CodeP17_Unwind_Exception
-000000012000970c t _Z28read_encoded_value_with_basehmPKhPm
-0000000120004200 T _Z5usagev
-0000000120004510 T _Z6seekerP4ForkPvi
-0000000120004240 T _Z8io_errorPKcb
-000000012000a310 T _ZN10__cxxabiv111__terminateEPFvvE
-000000012000a374 T _ZN10__cxxabiv112__unexpectedEPFvvE
-000000012000b08c T _ZN10__cxxabiv117__class_type_infoD0Ev
-000000012000b058 T _ZN10__cxxabiv117__class_type_infoD1Ev
-000000012000b024 T _ZN10__cxxabiv117__class_type_infoD2Ev
-0000000120025ca0 G _ZN10__cxxabiv119__terminate_handlerE
-000000012000b148 T _ZN10__cxxabiv120__si_class_type_infoD0Ev
-000000012000b114 T _ZN10__cxxabiv120__si_class_type_infoD1Ev
-000000012000b0e0 T _ZN10__cxxabiv120__si_class_type_infoD2Ev
-0000000120025ca8 G _ZN10__cxxabiv120__unexpected_handlerE
-000000012000b204 T _ZN10__cxxabiv121__vmi_class_type_infoD0Ev
-000000012000b1d0 T _ZN10__cxxabiv121__vmi_class_type_infoD1Ev
-000000012000b19c T _ZN10__cxxabiv121__vmi_class_type_infoD2Ev
-00000001200024b0 T _ZN12CGlobalItems18decrement_and_waitEi
-0000000120002380 T _ZN12CGlobalItemsC1EPb
-0000000120002250 T _ZN12CGlobalItemsC2EPb
-0000000120008de0 T _ZN4Fork2goEPFvPS_PviES1_i
-0000000120009080 T _ZN4Fork4ReadEPvii
-0000000120009010 T _ZN4Fork4waitEv
-0000000120009160 T _ZN4Fork5WriteEPvii
-0000000120008d60 T _ZN4Fork7startitEP11THREAD_DATA
-0000000120008d40 T _ZN4ForkC1Ev
-0000000120008d20 T _ZN4ForkC2Ev
-0000000120004cd0 T _ZN7CFileOp10read_blockEPv
-0000000120004f90 T _ZN7CFileOp11write_blockEPv
-0000000120004e70 T _ZN7CFileOp15read_block_getcEPc
-0000000120005080 T _ZN7CFileOp16write_block_putcEv
-0000000120005180 T _ZN7CFileOp4openEPKcbb
-0000000120004a40 T _ZN7CFileOp4seekEii
-0000000120005770 T _ZN7CFileOp5closeEv
-0000000120005910 T _ZN7CFileOp6doseekElb
-0000000120005630 T _ZN7CFileOp6m_openEPKcib
-0000000120005430 T _ZN7CFileOp6reopenEbb
-0000000120004760 T _ZN7CFileOp9seek_testEbR9Semaphore
-0000000120005330 T _ZN7CFileOpC1ER8BonTimeriib
-0000000120005230 T _ZN7CFileOpC2ER8BonTimeriib
-0000000120004400 T _ZN7CFileOpD1Ev
-00000001200042f0 T _ZN7CFileOpD2Ev
-0000000120007b40 T _ZN8BonTimer10InitializeEv
-0000000120007820 T _ZN8BonTimer10cpu_so_farEv
-0000000120007c80 T _ZN8BonTimer10print_statE7tests_t
-0000000120007f80 T _ZN8BonTimer11PrintHeaderEP8_IO_FILE
-00000001200078f0 T _ZN8BonTimer11get_cpu_useEv
-0000000120007970 T _ZN8BonTimer11get_delta_tE7tests_t
-00000001200077e0 T _ZN8BonTimer11time_so_farEv
-0000000120007860 T _ZN8BonTimer12get_cur_timeEv
-0000000120007b70 T _ZN8BonTimer14print_cpu_statE7tests_t
-0000000120007e40 T _ZN8BonTimer15print_file_statE7tests_t
-0000000120007a10 T _ZN8BonTimer16add_delta_reportER8report_s7tests_t
-00000001200079c0 T _ZN8BonTimer16get_delta_reportER8report_s
-0000000120008030 T _ZN8BonTimer8DoReportEPKciiiiiiP8_IO_FILE
-0000000120007790 T _ZN8BonTimer9timestampEv
-0000000120007b00 T _ZN8BonTimerC1Ev
-0000000120007ac0 T _ZN8BonTimerC2Ev
-00000001200061a0 T _ZN9COpenTest10make_namesEb
-0000000120005bf0 T _ZN9COpenTest11random_sortEv
-0000000120007400 T _ZN9COpenTest11stat_randomER8BonTimer
-0000000120006520 T _ZN9COpenTest13create_a_fileEPKcPcii
-0000000120006710 T _ZN9COpenTest13create_a_linkEPKcS1_i
-0000000120006c50 T _ZN9COpenTest13delete_randomER8BonTimer
-00000001200074c0 T _ZN9COpenTest15stat_sequentialER8BonTimer
-0000000120006f10 T _ZN9COpenTest17delete_sequentialER8BonTimer
-0000000120006830 T _ZN9COpenTest6createEPKcR8BonTimeriiiib
-0000000120007280 T _ZN9COpenTest9stat_fileEPKc
-0000000120005b50 T _ZN9COpenTestC1EibPb
-0000000120005ab0 T _ZN9COpenTestC2EibPb
-0000000120005f40 T _ZN9COpenTestD1Ev
-0000000120005ce0 T _ZN9COpenTestD2Ev
-0000000120008aa0 T _ZN9Semaphore18decrement_and_waitEi
-0000000120008920 T _ZN9Semaphore6createEi
-0000000120008850 T _ZN9Semaphore9clear_semEv
-0000000120008be0 T _ZN9Semaphore9get_mutexEv
-0000000120008a10 T _ZN9Semaphore9get_semidEv
-0000000120008c80 T _ZN9Semaphore9put_mutexEv
-00000001200087d0 T _ZN9SemaphoreC1Eiii
-0000000120008750 T _ZN9SemaphoreC2Eiii
-000000012000b258 T _ZNK10__cxxabiv117__class_type_info10__do_catchEPKSt9type_infoPPvj
-000000012000ba74 T _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PKvRNS0_15__upcast_resultE
-000000012000b2b8 T _ZNK10__cxxabiv117__class_type_info11__do_upcastEPKS0_PPv
-000000012000b4c0 T _ZNK10__cxxabiv117__class_type_info12__do_dyncastElNS0_10__sub_kindEPKS0_PKvS3_S5_RNS0_16__dyncast_resultE
-000000012000b330 T _ZNK10__cxxabiv117__class_type_info20__do_find_public_srcElPKvPKS0_S2_
-000000012000baa4 T _ZNK10__cxxabiv120__si_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE
-000000012000b510 T _ZNK10__cxxabiv120__si_class_type_info12__do_dyncastElNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE
-000000012000b340 T _ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcElPKvPKNS_17__class_type_infoES2_
-000000012000bb38 T _ZNK10__cxxabiv121__vmi_class_type_info11__do_upcastEPKNS_17__class_type_infoEPKvRNS1_15__upcast_resultE
-000000012000b5c4 T _ZNK10__cxxabiv121__vmi_class_type_info12__do_dyncastElNS_17__class_type_info10__sub_kindEPKS1_PKvS4_S6_RNS1_16__dyncast_resultE
-000000012000b394 T _ZNK10__cxxabiv121__vmi_class_type_info20__do_find_public_srcElPKvPKNS_17__class_type_infoES2_
-000000012000ab30 T _ZNKSt9exception4whatEv
-000000012000b00c T _ZNKSt9type_info10__do_catchEPKS_PPvj
-000000012000b01c T _ZNKSt9type_info11__do_upcastEPKN10__cxxabiv117__class_type_infoEPPv
-000000012000affc T _ZNKSt9type_info14__is_pointer_pEv
-000000012000b004 T _ZNKSt9type_info15__is_function_pEv
-000000012000afa8 T _ZNSt10bad_typeidD0Ev
-000000012000af74 T _ZNSt10bad_typeidD1Ev
-000000012000af40 T _ZNSt10bad_typeidD2Ev
-000000012000aadc T _ZNSt13bad_exceptionD0Ev
-000000012000aaa8 T _ZNSt13bad_exceptionD1Ev
-000000012000aa74 T _ZNSt13bad_exceptionD2Ev
-000000012000aeec T _ZNSt8bad_castD0Ev
-000000012000aeb8 T _ZNSt8bad_castD1Ev
-000000012000ae84 T _ZNSt8bad_castD2Ev
-000000012000add4 T _ZNSt9bad_allocD0Ev
-000000012000ada0 T _ZNSt9bad_allocD1Ev
-000000012000ad6c T _ZNSt9bad_allocD2Ev
-000000012000aa40 T _ZNSt9exceptionD0Ev
-000000012000aa2c T _ZNSt9exceptionD1Ev
-000000012000aa18 T _ZNSt9exceptionD2Ev
-000000012000ae50 T _ZNSt9type_infoD0Ev
-000000012000ae3c T _ZNSt9type_infoD1Ev
-000000012000ae28 T _ZNSt9type_infoD2Ev
-000000012000a39c T _ZSt10unexpectedv
-000000012000a3bc T _ZSt13set_terminatePFvvE
-000000012000a3d4 T _ZSt14set_unexpectedPFvvE
-000000012000ad54 T _ZSt15set_new_handlerPFvvE
-000000012000a9e4 T _ZSt18uncaught_exceptionv
-0000000120025cd0 G _ZSt7nothrow
-000000012000a354 T _ZSt9terminatev
-00000001200127d8 V _ZTIN10__cxxabiv117__class_type_infoE
-00000001200127f0 V _ZTIN10__cxxabiv120__si_class_type_infoE
-0000000120012808 V _ZTIN10__cxxabiv121__vmi_class_type_infoE
-00000001200127c0 V _ZTISt10bad_typeid
-0000000120012578 V _ZTISt13bad_exception
-00000001200127a8 V _ZTISt8bad_cast
-00000001200125d8 V _ZTISt9bad_alloc
-0000000120012568 V _ZTISt9exception
-0000000120012798 V _ZTISt9type_info
-000000012001286b V _ZTSN10__cxxabiv117__class_type_infoE
-0000000120012846 V _ZTSN10__cxxabiv120__si_class_type_infoE
-0000000120012820 V _ZTSN10__cxxabiv121__vmi_class_type_infoE
-000000012001288d V _ZTSSt10bad_typeid
-0000000120012590 V _ZTSSt13bad_exception
-000000012001289c V _ZTSSt8bad_cast
-00000001200125f0 V _ZTSSt9bad_alloc
-00000001200125a2 V _ZTSSt9exception
-00000001200128a8 V _ZTSSt9type_info
-00000001200126b0 V _ZTVN10__cxxabiv117__class_type_infoE
-0000000120012658 V _ZTVN10__cxxabiv120__si_class_type_infoE
-0000000120012600 V _ZTVN10__cxxabiv121__vmi_class_type_infoE
-0000000120012708 V _ZTVSt10bad_typeid
-0000000120012518 V _ZTVSt13bad_exception
-0000000120012730 V _ZTVSt8bad_cast
-00000001200125b0 V _ZTVSt9bad_alloc
-0000000120012540 V _ZTVSt9exception
-0000000120012758 V _ZTVSt9type_info
-0000000120025cb8 g _ZZ18__gthread_active_pvE20__gthread_active_ptr
-0000000120025cc8 g _ZZ18__gthread_active_pvE20__gthread_active_ptr
-0000000120025cc4 g _ZZ21get_globals_init_oncevE4once
-0000000120009518 T _ZdlPv
-000000012000a648 T _Znam
-000000012000a580 T _Znwm
-00000001200251c0 d __CTOR_END__
-00000001200251b8 d __CTOR_LIST__
-00000001200251d0 d __DTOR_END__
-00000001200251c8 d __DTOR_LIST__
-0000000120024f30 r __FRAME_END__
-00000001200251d8 d __JCR_END__
-00000001200251d8 d __JCR_LIST__
-0000000120025ce8 A __bss_start
-000000012000a694 T __cxa_allocate_exception
-000000012000a884 T __cxa_begin_catch
-000000012000a19c T __cxa_call_unexpected
-000000012000a930 T __cxa_end_catch
-000000012000a7b4 T __cxa_free_exception
-000000012000ac84 T __cxa_get_globals
-000000012000ac3c T __cxa_get_globals_fast
-000000012000a4f8 T __cxa_rethrow
-000000012000a45c T __cxa_throw
-0000000120024000 D __data_start
-000000012000fa50 T __deregister_frame
-000000012000fa20 T __deregister_frame_info
-000000012000f8c0 T __deregister_frame_info_bases
-0000000120011470 t __do_global_ctors_aux
-0000000120002160 t __do_global_dtors_aux
-0000000120025c88 G __dso_handle
-000000012000bd74 T __dynamic_cast
-0000000120024000 A __fini_array_end
-0000000120024000 A __fini_array_start
-000000012000d250 T __frame_state_for
-0000000120025ce0 g __gthread_active_ptr.0
-0000000120025cd8 g __gthread_active_ptr.1
-0000000120009c28 T __gxx_personality_v0
-0000000120024000 A __init_array_end
-0000000120024000 A __init_array_start
-00000001200113e0 T __libc_csu_fini
-0000000120011350 T __libc_csu_init
-0000000120025d00 S __new_handler
-000000012000f6f0 T __register_frame
-000000012000f6b0 T __register_frame_info
-000000012000f5f0 T __register_frame_info_bases
-000000012000f820 T __register_frame_info_table
-000000012000f760 T __register_frame_info_table_bases
-000000012000f860 T __register_frame_table
-0000000120002120 W __start
-0000000120025ce8 A _edata
-0000000120035db0 A _end
-00000001200114d0 T _fini
-00000001200020b0 T _init
-0000000120002120 T _start
-0000000120010250 t add_fdes
-0000000120025cea s already_printed_error
-00000001200094b0 T arm
-0000000120010a30 t base_from_cb_data
-000000012000fab0 t base_from_object
-000000012000bf50 t base_of_encoded_value
-00000001200094f8 T checkpoint
-00000001200100e0 t classify_object_over_fdes
-0000000120025ce8 s completed.1
-00000001200024f0 T ctrl_c_handler
-0000000120024000 W data_start
-0000000120009508 T debugbreak
-00000001200094e8 T dump_stats
-00000001200094f0 T dumpreset_stats
-0000000120035d40 b dwarf_reg_size_table
-0000000120025d30 b emergency_buffer
-0000000120024008 d emergency_mutex
-0000000120025cf0 s emergency_used
-000000012000caa0 t execute_cfa_program
-000000012000c520 t execute_stack_op
-0000000120025ce9 s exitNow
-000000012000c2f0 t extract_cie_info
-000000012000fd20 t fde_mixed_encoding_compare
-000000012000fc60 t fde_single_encoding_compare
-00000001200111d0 t fde_split
-000000012000fc30 t fde_unencoded_compare
-0000000120002200 t frame_dummy
-000000012000fe00 t frame_heapsort
-000000012000fb40 t get_cie_encoding
-0000000120025cf8 s globals_key
-0000000120035d30 b globals_static
-000000012000ea10 t init_dwarf_reg_size_table
-0000000120010e90 t init_object
-00000001200094d8 T initparam
-00000001200094c0 T ivlb
-00000001200094c8 T ivle
-00000001200103d0 t linear_search_fdes
-00000001200094d0 T m5exit
-0000000120002590 T main
-0000000120025d10 s marker.1
-0000000120035d88 b object_mutex
-0000000120025d08 s once_regsizes.0
-0000000120025c90 g p.0
-00000001200094b8 T quiesce
-000000012000c0d0 t read_encoded_value_with_base
-000000012000f460 t read_encoded_value_with_base
-000000012000c060 t read_sleb128
-000000012000f3f0 t read_sleb128
-000000012000c020 t read_uleb128
-000000012000f3b0 t read_uleb128
-0000000120009500 T readfile
-00000001200094e0 T reset_stats
-0000000120010560 t search_object
-0000000120025d20 s seen_objects
-000000012000bed0 t size_of_encoded_value
-000000012000f330 t size_of_encoded_value
-0000000120009510 T switchcpu
-0000000120025d18 s unseen_objects
-0000000120025cc0 g use_thread_key
-000000012000cf90 t uw_frame_state_for
-000000012000d590 t uw_init_context_1
-000000012000d650 t uw_install_context_1
-000000012000d540 t uw_update_context
-000000012000d390 t uw_update_context_1
diff --git a/configs/boot/bzip.rcS b/configs/boot/bzip.rcS
deleted file mode 100644 (file)
index 369659c..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-cd /benchmarks/spec/bzip200/
-/sbin/m5 resetstats 
-/benchmarks/spec/bzip200/bzip2 lgred.graphic 1
-/sbin/m5 exit
diff --git a/configs/boot/cc1.symbol b/configs/boot/cc1.symbol
deleted file mode 100644 (file)
index 16c1691..0000000
+++ /dev/null
@@ -1,3454 +0,0 @@
-00000001201fec60 G DFbignan
-00000001201fec68 G DFlittlenan
-0000000120006f30 T GNU_xref_begin
-0000000120006f70 T GNU_xref_end
-00000001201e9b60 d Reg_names
-00000001201fec70 G SFbignan
-00000001201fec74 G SFlittlenan
-00000001201e9ff8 D TFbignan
-00000001201ea008 D TFlittlenan
-00000001201e82c8 D W_options
-00000001201ea018 D XFbignan
-00000001201ea024 D XFlittlenan
-00000001201fad48 D _DYNAMIC
-00000001201fb210 D _GLOBAL_OFFSET_TABLE_
-00000001201febe8 G _IO_stdin_used
-00000001201faf10 T _PROCEDURE_LINKAGE_TABLE_
-00000001201faef0 d __CTOR_END__
-00000001201faee8 d __CTOR_LIST__
-00000001201faf00 d __DTOR_END__
-00000001201faef8 d __DTOR_LIST__
-00000001201fad44 r __FRAME_END__
-00000001201faf08 d __JCR_END__
-00000001201faf08 d __JCR_LIST__
-00000001201fecdc A __bss_start
-00000001201e6a58 D __data_start
-000000012019eb20 t __do_global_ctors_aux
-00000001200019e0 t __do_global_dtors_aux
-00000001201febf0 G __dso_handle
-00000001201e6a58 A __fini_array_end
-00000001201e6a58 A __fini_array_start
-00000001201e6a58 A __init_array_end
-00000001201e6a58 A __init_array_start
-000000012019ea80 T __libc_csu_fini
-000000012019e9d0 T __libc_csu_init
-00000001200019a0 W __start
-00000001201fecdc A _edata
-00000001202157c8 A _end
-000000012019eb80 T _fini
-0000000120001938 T _init
-00000001200019a0 T _start
-00000001202003e8 S abs_optab
-00000001200d89c0 t abstract_origin_attribute
-000000012016a550 t actual_hazard
-000000012016af00 t actual_hazard_this_instance
-000000012016fb20 t add_bb_string
-00000001201831a0 T add_clobbers
-00000001201ff138 s add_cost
-0000000120200858 S add_cost
-0000000120164b10 t add_dependence
-0000000120055d40 T add_double
-00000001200b4c60 T add_insn
-00000001200b2c40 T add_insn_after
-00000001200b2d90 T add_insn_before
-000000012002f860 t add_ixpansion
-00000001200fed90 t add_label_notes
-0000000120197770 T add_operand
-0000000120200408 S add_optab
-000000012015d210 t add_to_delay_list
-00000001201ff5f8 s added_links_insn
-00000001201ff4c0 s addr_combined_regs
-00000001201ff4b8 s addr_placeholder
-00000001201731d0 T address_operand
-00000001201720f0 T adj_offsettable_operand
-00000001200dfe00 t adjust_copied_decl_tree
-000000012016aa30 t adjust_priority
-0000000120095b20 T adjust_stack
-00000001200291a0 t affix_data_type
-00000001201ff588 s after_insn_hard_regs
-0000000120062e10 T aggregate_value_p
-00000001201fed48 s align.4
-000000012005f550 t all_blocks
-000000012006a350 T all_cases_count
-00000001201eb418 d all_from_align
-00000001201ff3e8 s all_minus_one
-0000000120200110 S all_types_permanent
-0000000120134ef0 t alloc_qty_for_scratch
-0000000120094f90 T allocate_dynamic_stack_space
-000000012010fc50 T allocate_for_life_analysis
-0000000120154180 t allocate_reload_reg
-00000001200422b0 T allocation_temporary_p
-00000001201ff808 s allocno_calls_crossed
-000000012013a160 t allocno_compare
-00000001201ff818 s allocno_live_length
-00000001201ff810 s allocno_n_refs
-00000001201ff7a0 s allocno_order
-00000001201ff798 s allocno_reg
-00000001201ff7c0 s allocno_row_words
-00000001201ff7a8 s allocno_size
-00000001201ff820 s allocnos_live
-00000001201fed6c s already.0
-00000001201ff698 s altclass
-000000012014b230 t alter_reg
-000000012016e1e0 T alter_subreg
-0000000120140e20 t alternative_allows_memconst
-0000000120190fb0 t alu_unit_blockage
-000000012018cc20 T alu_unit_blockage_range
-000000012018c790 T alu_unit_ready_cost
-00000001202005d8 S and_optab
-00000001200387d0 T announce_function
-00000001201ff258 s anonymous_types
-0000000120095bd0 T anti_adjust_stack
-00000001201645f0 T anti_dependence
-000000012006f4f0 T any_pending_cleanups
-000000012016f6b0 T app_disable
-000000012016f690 T app_enable
-00000001201ffb1c s app_on
-0000000120203548 b apply_args_mode
-0000000120203748 b apply_args_reg_offset
-0000000120082a30 T apply_args_register_offset
-0000000120084640 t apply_args_size
-00000001201ff108 s apply_args_value
-000000012016fd70 T apply_change_group
-0000000120122f00 t apply_distributive_law
-0000000120203648 b apply_result_mode
-0000000120084920 t apply_result_size
-000000012010d890 t approx_final_value
-00000001202007d8 S arg_pointer_rtx
-00000001202001e8 S arg_pointer_save_area
-00000001201e73ff d argnofun.1
-00000001201e73e8 d argstring.0
-0000000120197640 T arith32_operand
-00000001201975c0 T arith5_operand
-00000001201976b0 T arith64_operand
-0000000120197540 T arith_operand
-00000001201eb6b8 d arityvec
-0000000120043af0 T array_type_nelts
-00000001200ba350 t asctoe
-00000001200ba340 t asctoe113
-00000001200ba310 t asctoe24
-00000001200ba320 t asctoe53
-00000001200ba330 t asctoe64
-00000001200ba360 t asctoeg
-00000001202004f0 S ashl_optab
-0000000120200608 S ashr_optab
-00000001201fff10 S asm_file_name
-000000012016f110 T asm_fprintf
-000000012016c9c0 t asm_insn_count
-0000000120171ab0 T asm_noperands
-0000000120200058 S asm_out_file
-00000001200a80b0 T assemble_alias
-00000001200a8fb0 T assemble_align
-00000001200a8b20 T assemble_asm
-00000001200a8a10 T assemble_constant_align
-00000001200a8cb0 T assemble_constructor
-00000001200a8bd0 T assemble_destructor
-00000001200a8dd0 T assemble_end_function
-00000001200a9310 T assemble_external
-00000001200a9320 T assemble_external_libcall
-00000001200a8d40 T assemble_gc_entry
-00000001200a9330 T assemble_global
-00000001200a4660 T assemble_integer
-00000001200a93b0 T assemble_label
-00000001200a3d40 T assemble_name
-00000001200a4890 T assemble_real
-00000001200a2700 T assemble_start_function
-00000001200a3e80 T assemble_static_space
-00000001200a9060 T assemble_string
-00000001200a40f0 T assemble_trampoline_template
-00000001200a2be0 T assemble_variable
-00000001200a8f30 T assemble_zeros
-0000000120059c00 T assign_outer_stack_local
-000000012005d300 T assign_parms
-0000000120059a60 T assign_stack_local
-0000000120059db0 T assign_stack_temp
-00000001201e7368 d asso_values.0
-0000000120162c10 t attach_deaths
-0000000120169c10 t attach_deaths_insn
-0000000120040b10 T attribute_hash_list
-0000000120040bc0 T attribute_list_contained
-0000000120040b40 T attribute_list_equal
-0000000120200b10 b attrtab
-00000001201feec8 s attrtab_idx
-0000000120200000 S aux_info_file
-00000001201fefe0 s aux_info_file_name
-000000012010cd40 T back_branch_in_range_p
-00000001201ff8a4 s bad_spill_regs
-000000012006c730 t balance_case_nodes
-00000001201ff218 s base_label_num
-00000001201ff520 s basic_block_drops_in
-00000001202008c8 S basic_block_end
-00000001202008d8 S basic_block_head
-0000000120200878 S basic_block_live_at_start
-00000001201ff528 s basic_block_loop_depth
-0000000120215098 B basic_block_needs
-00000001201045b0 t basic_induction_var
-00000001201ffa18 s bb_dead_regs
-00000001201fecb8 g bb_file_label_num
-00000001201fecbc g bb_func_label_num
-00000001201ffad0 s bb_head
-00000001201ffa20 s bb_live_regs
-00000001201fecb0 g bb_tail
-00000001201ff968 s bb_ticks
-0000000120081f90 T bc_adjust_stack
-000000012019c610 T bc_align
-000000012019b890 T bc_align_bytecode
-000000012019bd00 T bc_align_const
-000000012019bfa0 T bc_align_data
-00000001200810f0 T bc_allocate_local
-0000000120082af0 T bc_allocate_variable_array
-000000012019b760 T bc_begin_function
-0000000120063420 T bc_build_calldesc
-0000000120081320 T bc_canonicalize_array_ref
-000000012006ab50 t bc_check_for_full_enumeration_handling
-000000012019c5f0 T bc_data
-00000001201ffbc8 s bc_data_seg
-000000012019b710 T bc_define_pointer
-000000012019c760 T bc_emit
-000000012019cb00 T bc_emit_bytecode
-000000012019b960 T bc_emit_bytecode_const
-000000012019ba90 T bc_emit_bytecode_labeldef
-000000012019bb10 T bc_emit_bytecode_labelref
-000000012019bc00 T bc_emit_code_labelref
-000000012019c240 T bc_emit_common
-000000012019bdd0 T bc_emit_const
-000000012019bf60 T bc_emit_const_labeldef
-000000012019bf80 T bc_emit_const_labelref
-000000012019bea0 T bc_emit_const_skip
-000000012019c070 T bc_emit_data
-000000012019c200 T bc_emit_data_labeldef
-000000012019c220 T bc_emit_data_labelref
-000000012019c140 T bc_emit_data_skip
-000000012019ac10 T bc_emit_instruction
-000000012019c9b0 T bc_emit_labeldef
-000000012019ca00 T bc_emit_labelref
-000000012019c890 T bc_emit_skip
-000000012019cc40 T bc_emit_trampoline
-000000012019a140 T bc_end_function
-0000000120081600 T bc_expand_address
-000000012019d430 T bc_expand_binary_operation
-0000000120081480 T bc_expand_component_address
-0000000120081a90 T bc_expand_constructor
-000000012019dd40 T bc_expand_conversion
-0000000120068a10 t bc_expand_decl
-0000000120068ce0 t bc_expand_decl_init
-0000000120068110 t bc_expand_end_bindings
-000000012006bc60 t bc_expand_end_case
-0000000120065b50 t bc_expand_end_cond
-000000012006fc40 t bc_expand_end_loop
-000000012007b490 T bc_expand_expr
-0000000120064180 t bc_expand_fixup
-0000000120063670 T bc_expand_function_end
-000000012005fcc0 T bc_expand_function_start
-000000012006f690 t bc_expand_goto_internal
-000000012019df90 T bc_expand_increment
-0000000120069450 t bc_expand_start_case
-0000000120065ab0 t bc_expand_start_cond
-000000012019de90 T bc_expand_truth_conversion
-000000012019d900 T bc_expand_unary_operation
-0000000120064240 t bc_fixup_gotos
-0000000120081910 T bc_gen_constr_label
-000000012019ca60 T bc_gen_rtx
-000000012019ba30 T bc_get_bytecode_label
-000000012019c420 T bc_globalize_label
-000000012019d350 T bc_init_mode_to_code_map
-000000012006fe00 T bc_init_mode_to_opcode_maps
-0000000120199ef0 T bc_initialize
-0000000120082b60 T bc_load_bit_field
-00000001200811a0 T bc_load_externaddr
-0000000120081200 T bc_load_externaddr_id
-0000000120081290 T bc_load_localaddr
-0000000120080f90 T bc_load_memory
-00000001200812d0 T bc_load_parmaddr
-00000001200a9d10 t bc_make_decl_rtl
-000000012006f5a0 T bc_new_uid
-00000001200a9160 T bc_output_constructor
-00000001200a9250 T bc_output_data_constructor
-000000012019caf0 T bc_print_rtl
-00000001200815a0 T bc_push_offset_and_size
-000000012006a050 t bc_pushcase
-0000000120081870 T bc_runtime_type_code
-0000000120081f50 T bc_store_bit_field
-0000000120081e50 T bc_store_field
-0000000120081040 T bc_store_memory
-000000012019c5d0 T bc_text
-00000001201ffbc0 s bc_text_seg
-00000001201ff0b0 s bc_uid.1
-000000012019ca50 T bc_write_file
-000000012019ce50 T bc_xstrdup
-000000012020c108 B bcc_gen_fctn
-00000001202004d0 S bcmp_libfunc
-0000000120200698 S bcopy_libfunc
-00000001201eb43c d best_from_align
-000000012002b5a0 T binary_op_error
-0000000120043510 T binfo_member
-000000012016add0 t birthing_insn_p
-00000001200d8380 t bit_offset_attribute
-000000012018ed90 T bit_unit_ready_cost
-000000012010ce50 T biv_total_increment
-0000000120132150 t block_alloc
-00000001201ffb18 s block_depth
-00000001201ff530 s block_live_static
-0000000120198b80 t block_move_loop
-0000000120191ea0 t block_move_no_loop
-00000001201921e0 t block_move_sequence
-00000001202002d0 S block_stack
-00000001202002ac S block_start_count
-00000001201ff0e8 s block_vector
-000000012005f520 t blocks_nreverse
-00000001201e9f94 d bmask
-00000001201ffda0 S boolean_false_node
-00000001201ffcc8 S boolean_true_node
-00000001201ffe58 S boolean_type_node
-0000000120038bb0 T botch
-0000000120096150 t break_out_memory_refs
-0000000120205fe4 b buffer.0
-0000000120206048 b buffer.1
-00000001202063cc b buffer.10
-0000000120206430 b buffer.11
-0000000120206494 b buffer.12
-00000001201fedf8 s buffer.2
-00000001202060ac b buffer.2
-0000000120206110 b buffer.3
-0000000120206174 b buffer.4
-00000001202061d8 b buffer.5
-000000012020623c b buffer.6
-00000001202062a0 b buffer.7
-0000000120206304 b buffer.8
-0000000120206368 b buffer.9
-00000001201feee0 s buffer_length.2
-000000012003fff0 T build
-0000000120040250 T build1
-000000012001adb0 T build_array_ref
-00000001200414f0 T build_array_type
-000000012001c1a0 T build_binary_op
-0000000120044230 T build_block
-000000012001fc20 T build_c_cast
-0000000120042a00 T build_complex
-00000001200415e0 T build_complex_type
-000000012001a930 T build_component_ref
-00000001200255b0 T build_compound_expr
-000000012001f570 T build_conditional_expr
-0000000120044170 T build_decl
-00000001200442b0 T build_decl_attribute_variant
-00000001200437a0 T build_decl_list
-0000000120014920 T build_enumerator
-000000012001b260 T build_function_call
-0000000120044ed0 T build_function_type
-0000000120044dd0 T build_index_2_type
-0000000120044c40 T build_index_type
-000000012001abc0 T build_indirect_ref
-00000001200427b0 T build_int_2_wide
-0000000120045090 T build_method_type
-0000000120020200 T build_modify_expr
-00000001200403e0 T build_nt
-0000000120006f10 T build_objc_string
-0000000120045170 T build_offset_type
-00000001200404a0 T build_parse_node
-00000001200412a0 T build_pointer_type
-00000001200413a0 T build_range_type
-0000000120042800 T build_real
-000000012003dc50 T build_real_from_int_cst
-0000000120044fd0 T build_reference_type
-000000012003e0c0 T build_string
-0000000120043750 T build_tree_list
-0000000120040590 T build_type_attribute_variant
-0000000120040810 T build_type_copy
-0000000120040740 T build_type_variant
-000000012001e500 T build_unary_op
-00000001200105e0 T builtin_function
-00000001202006f4 S byte_mode
-00000001200d81c0 t byte_size_attribute
-0000000120200a28 S bytecode
-0000000120200510 S bzero_libfunc
-0000000120025510 T c_alignof
-0000000120019fd0 T c_alignof_expr
-000000012002d690 T c_build_type_variant
-000000012000c410 T c_decode_option
-0000000120024980 T c_expand_asm_operands
-000000012002d190 T c_expand_expr_stmt
-0000000120024c10 T c_expand_return
-0000000120025bf0 T c_expand_start_case
-00000001201ffc18 S c_function_chain
-00000001201fedc0 s c_function_varargs
-0000000120017a00 T c_mark_varargs
-0000000120025430 T c_size_in_bytes
-0000000120019e30 T c_sizeof
-0000000120025350 T c_sizeof_nowarn
-0000000120084500 t c_strlen
-000000012010d100 t calculate_giv_inc
-0000000120197400 T call_address_operand
-0000000120200928 S call_fixed_reg_set
-0000000120213ab0 B call_fixed_regs
-0000000120200910 S call_used_reg_set
-0000000120213a70 B call_used_regs
-0000000120200978 S caller_save_needed
-0000000120084d50 t calls_function_1
-00000001201ff128 s calls_function_save_exprs
-000000012012c200 t can_combine_p
-000000012009c7e0 T can_compare_p
-00000001200a15b0 T can_extend_p
-0000000120200800 S can_reach_end
-00000001200e6860 T can_reverse_comparison_p
-00000001201700e0 T cancel_changes
-00000001201ff8c0 s cannot_omit_stores
-00000001200e9090 t canon_hash
-00000001200ea190 t canon_reg
-00000001201648e0 t canon_rtx
-000000012006f570 T case_index_expr_type
-00000001202002c8 S case_stack
-00000001201ff53c s cc0_live
-0000000120200718 S cc0_rtx
-00000001202007c8 S cc1_rtx
-0000000120093200 T ceil_log2
-0000000120043540 T chain_member
-00000001200435a0 T chain_member_purpose
-0000000120043570 T chain_member_value
-00000001200435f0 T chainon
-00000001200b22f0 T change_address
-0000000120209a58 b change_locs
-0000000120044710 T change_main_variant
-0000000120209800 b change_objects
-0000000120209990 b change_old_codes
-0000000120209be8 b change_olds
-00000001201ffc30 S char_array_type_node
-00000001201ffcb8 S char_type_node
-000000012016fc40 T check_asm_operands
-000000012002d290 T check_case_value
-0000000120105f70 t check_dbra_loop
-00000001201040a0 t check_final_value
-000000012006a850 T check_for_full_enumeration_handling
-000000012002d7a0 t check_format_info
-000000012002cce0 T check_function_format
-00000001200234d0 t check_init_type_bitfields
-0000000120008020 T check_newline
-000000012012ff00 T choose_hard_reg_mode
-0000000120093540 t choose_multiplier
-000000012014e7e0 t choose_reload_regs
-0000000120213514 B class_narrowest_mode
-00000001200b3080 T classify_insn
-0000000120196810 T classify_integer
-0000000120200240 S cleanup_label
-00000001202002d8 S cleanups_this_call
-0000000120200a40 b clear_binding_level
-00000001200a9450 T clear_const_double_mem
-000000012006e9f0 T clear_last_expr
-0000000120042460 T clear_momentary
-0000000120017050 T clear_parm_order
-0000000120082a90 T clear_pending_stack_adjust
-00000001201559d0 t clear_reg_live
-0000000120153020 t clear_reload_reg_in_use
-0000000120082650 T clear_storage
-0000000120200358 S cmp_optab
-000000012020c4a8 B code_to_optab
-000000012002e9d0 t collect_iterators
-0000000120114400 t combinable_i3pat
-00000001201ff590 s combine_attempts
-00000001201fef14 S combine_dump
-00000001201ffef0 S combine_dump_file
-00000001201ff598 s combine_extras
-0000000120105650 t combine_givs
-0000000120113b30 T combine_instructions
-00000001201ff5bc s combine_max_regno
-00000001201ff594 s combine_merges
-00000001200fe3a0 t combine_movables
-0000000120015c30 T combine_parm_decls
-0000000120133580 t combine_regs
-0000000120146c80 t combine_reloads
-00000001200294d0 T combine_strings
-00000001201ff59c s combine_successes
-000000012005a0d0 T combine_temp_slots
-00000001201fffd4 S combine_time
-0000000120019070 T common_type
-00000001200801f0 t compare
-00000001200a5200 t compare_constant_1
-0000000120080310 T compare_from_rtx
-0000000120152d50 t compare_spill_regs
-00000001200e6bb0 T comparison_dominates_p
-0000000120173a00 T comparison_operator
-0000000120039530 t compile_file
-00000001201feeb8 s compiled_from_record.0
-0000000120011560 T complete_array_type
-00000001201fece0 s completed.1
-00000001201ffc08 S complex_double_type_node
-00000001201ffe70 S complex_float_type_node
-00000001201ffc38 S complex_integer_type_node
-00000001201ffce8 S complex_long_double_type_node
-00000001200196f0 T comptypes
-0000000120200288 S cond_stack
-00000001201968b0 T condition_value
-00000001200e6db0 T condjump_in_parallel_p
-00000001200e6cd0 T condjump_p
-00000001201ff7b8 s conflicts
-00000001201ff3f0 s consec_ints
-0000000120105360 t consec_sets_giv
-00000001201012d0 t consec_sets_invariant_p
-0000000120200708 S const0_rtx
-0000000120200780 S const1_rtx
-0000000120200750 S const2_rtx
-000000012004aac0 t const_binop
-00000001201ff170 s const_double_chain
-0000000120173400 T const_double_operand
-00000001200a4df0 t const_hash
-0000000120203b98 b const_hash_table
-00000001201733f0 T const_int_operand
-0000000120205b20 b const_int_rtx
-00000001202006c8 S const_labelno
-000000012018ee30 T const_num_delay_slots
-00000001201ffe38 S const_ptr_type_node
-00000001201ff188 s const_rtx_hash_table
-00000001201ff1a8 s const_rtx_sym_hash_table
-00000001200a8260 T const_section
-00000001201ffe60 S const_string_type_node
-0000000120213530 B const_tiny_rtx
-00000001202007b8 S const_true_rtx
-00000001200d9fa0 t const_value_attribute
-000000012002cd30 T constant_expression_warning
-00000001201ff438 s constant_pool_entries_cost
-0000000120200798 S constm1_rtx
-00000001201723a0 T constrain_operands
-0000000120152980 t constraint_accepts_reg_p
-00000001201feea0 s constructor_asmspec
-00000001201fee58 s constructor_bit_index
-00000001201fee68 s constructor_constant
-00000001201fee98 s constructor_decl
-00000001201fee80 s constructor_depth
-00000001201fee60 s constructor_elements
-00000001201fee70 s constructor_erroneous
-00000001201fee28 s constructor_fields
-00000001201fee84 s constructor_implicit
-00000001201fee90 s constructor_incremental
-00000001201fee30 s constructor_index
-00000001201fee40 s constructor_max_index
-00000001201fee00 S constructor_no_implicit
-00000001201fee78 s constructor_pending_elts
-00000001201fee38 s constructor_range_end
-00000001201feeb0 s constructor_result
-00000001201fee6c s constructor_simple
-00000001201ffe98 S constructor_stack
-00000001201fee74 s constructor_subconstants_deferred
-00000001201feea8 s constructor_top_level
-00000001201fee20 s constructor_type
-00000001201fee48 s constructor_unfilled_fields
-00000001201fee50 s constructor_unfilled_index
-0000000120043f90 T contains_placeholder_p
-00000001200a3c50 t contains_pointers_p
-00000001201ff030 s context_display
-00000001201ec720 d conversion_info
-000000012019e5b0 t conversion_reasonable_p
-000000012020ae90 b conversion_recipe
-0000000120026880 T convert
-000000012002cf90 T convert_and_check
-000000012001b520 t convert_arguments
-0000000120020650 t convert_for_assignment
-0000000120071230 T convert_modes
-0000000120070530 T convert_move
-0000000120199c60 T convert_to_complex
-0000000120199080 T convert_to_integer
-00000001200711f0 T convert_to_mode
-0000000120199930 T convert_to_pointer
-0000000120199ad0 T convert_to_real
-00000001200959e0 T copy_addr_to_reg
-0000000120095600 T copy_all_regs
-00000001201ff300 s copy_asm_constraints_vector
-00000001201ff2f8 s copy_asm_operands_vector
-00000001200a5dc0 t copy_constant
-000000012012f480 t copy_cost
-0000000120200834 S copy_cost
-00000001200dae60 t copy_decl_list
-00000001200dafd0 t copy_decl_rtls
-00000001200daf10 t copy_decl_tree
-00000001200db590 t copy_for_inline
-0000000120017c10 T copy_lang_decl
-00000001200426f0 T copy_list
-0000000120109ac0 t copy_loop_body
-00000001200aab70 T copy_most_rtx
-000000012003d5b0 T copy_node
-0000000120143780 T copy_replacements
-00000001200aa7c0 T copy_rtx
-00000001200dda30 T copy_rtx_and_substitute
-00000001200b2430 T copy_rtx_if_shared
-0000000120094b10 T copy_to_mode_reg
-0000000120094a50 T copy_to_reg
-0000000120095a90 T copy_to_suggested_reg
-0000000120200440 S cos_optab
-00000001201ff0d0 s cost_table
-00000001201ff688 s costs
-00000001201ffaf8 s count_basic_blocks
-0000000120038620 T count_error
-0000000120101550 t count_loop_regs_set
-0000000120100050 t count_nonfixed_reads
-0000000120152a80 t count_occurrences
-000000012014a920 t count_possible_groups
-00000001200f4b50 t count_reg_usage
-00000001201ff8b0 s counted_for_groups
-00000001201ff8b8 s counted_for_nongroups
-0000000120165850 t create_reg_dead_note
-00000001201ff310 s cross_jump_death_matters
-00000001201fef0c S cse2_dump
-00000001201fff38 S cse2_dump_file
-00000001201fff90 S cse2_time
-00000001200f4080 t cse_basic_block
-00000001201ff3fc s cse_basic_block_end
-00000001201ff3f8 s cse_basic_block_start
-00000001200fc2e0 t cse_check_loop_start
-00000001201ff440 s cse_check_loop_start_value
-00000001201fef04 S cse_dump
-00000001201ffff8 S cse_dump_file
-00000001200f3530 T cse_end_of_basic_block
-00000001200ed360 t cse_gen_binary
-00000001200f6d90 t cse_insn
-00000001201ff40c s cse_jumps_altered
-00000001200f3a60 T cse_main
-00000001202002e4 S cse_not_expected
-00000001200f3290 t cse_process_notes
-00000001200fb530 t cse_set_around_loop
-00000001201fff44 S cse_time
-00000001200a83f0 T ctors_section
-00000001201fec54 g cur_insn_uid
-00000001201fedd0 s current_binding_level
-00000001201fed08 s current_declspecs
-00000001201ff290 s current_dienum
-00000001201fedc8 s current_extern_inline
-00000001201fec90 g current_funcdef_number
-0000000120200218 S current_function_arg_offset_rtx
-0000000120200230 S current_function_args_info
-0000000120200214 S current_function_args_size
-0000000120200170 S current_function_calls_alloca
-0000000120200188 S current_function_calls_longjmp
-00000001202001a8 S current_function_calls_setjmp
-0000000120200234 S current_function_contains_functions
-00000001201ffd80 S current_function_decl
-0000000120200168 S current_function_epilogue_delay_list
-0000000120200258 S current_function_has_nonlocal_goto
-0000000120200270 S current_function_has_nonlocal_label
-00000001202001c8 S current_function_internal_arg_pointer
-00000001202001f8 S current_function_name
-0000000120200160 S current_function_needs_context
-0000000120200248 S current_function_outgoing_args_size
-00000001201fed98 s current_function_parm_tags
-00000001201fed90 s current_function_parms
-00000001202001c0 S current_function_pops_args
-000000012020015c S current_function_pretend_args_size
-00000001201feda0 s current_function_prototype_file
-00000001201feda8 s current_function_prototype_line
-0000000120200178 S current_function_return_rtx
-00000001201ffcb0 S current_function_returns_null
-0000000120200280 S current_function_returns_pcc_struct
-0000000120200208 S current_function_returns_pointer
-000000012020018c S current_function_returns_struct
-00000001201ffdc0 S current_function_returns_value
-00000001202001f0 S current_function_stdarg
-0000000120200210 S current_function_uses_const_pool
-00000001202001d0 S current_function_uses_pic_offset_table
-000000012020020c S current_function_varargs
-00000001201ff980 s current_live_regs
-00000001202000a0 S current_obstack
-00000001200d74c0 t data_member_location_attribute
-00000001200a8580 T data_section
-00000001201e6a58 W data_start
-00000001201feec0 s data_type
-00000001201fef2c S dbr_sched_dump
-0000000120200038 S dbr_sched_dump_file
-00000001201ffee0 S dbr_sched_time
-00000001201593d0 T dbr_schedule
-000000012016f6d0 T dbr_sequence_length
-0000000120200730 S dconst0
-00000001202007d0 S dconst1
-0000000120200788 S dconst2
-0000000120200700 S dconstm1
-00000001201ffa30 s dead_notes
-00000001200b08c0 T dead_or_set_p
-00000001200ae500 T dead_or_set_regno_p
-00000001201fef3c S debug_info_level
-00000001201ffab8 s debug_insn
-00000001201feffc S debug_no_type_hash
-0000000120042380 T debug_obstack
-00000001200bce10 T debug_real
-0000000120145250 T debug_reload
-00000001200acd80 T debug_rtx
-00000001201ff1b8 S debug_rtx_count
-00000001200acec0 T debug_rtx_find
-00000001200acdd0 T debug_rtx_list
-00000001201fec10 G debug_temp_inits
-0000000120047750 T debug_tree
-0000000120029800 T decl_attributes
-0000000120041b90 T decl_function_context
-0000000120039220 t decl_name
-0000000120200060 S decl_printable_name
-0000000120043810 T decl_tree_cons
-00000001200453e0 T decl_type_context
-000000012002c750 T declare_function_name
-000000012006e810 T declare_nonlocal_label
-0000000120016590 T declare_parm_level
-00000001200a9b50 T declare_weak
-00000001201fed10 s declspec_stack
-00000001200a9f90 t decode_addr_const
-0000000120171c90 T decode_asm_operands
-0000000120058ce0 t decode_field_reference
-00000001200a1bf0 T decode_reg_name
-00000001200aa310 t decode_rtx_const
-000000012013d160 t decompose
-000000012019e060 t deduce_conversion
-000000012001a1d0 T default_conversion
-00000001201ffc48 S default_function_type
-00000001200388a0 T default_print_error_function
-00000001200a94a0 T defer_addressed_constants
-00000001201ff180 s defer_addressed_constants_flag
-000000012007e5d0 t defer_cleanups_to
-00000001201ff178 s deferred_constants
-000000012000e1a0 T define_label
-0000000120016730 T delete_block
-00000001200e4330 t delete_computation
-00000001200f4de0 T delete_dead_from_cse
-000000012014b150 t delete_dead_insn
-00000001200e6f00 T delete_for_peephole
-000000012015d2f0 t delete_from_delay_slot
-00000001200e4d90 t delete_from_jump_chain
-00000001200e4560 T delete_insn
-00000001200b4ca0 T delete_insns_since
-00000001200e42c0 T delete_jump
-00000001200e5260 t delete_labelref_insn
-0000000120152360 t delete_output_reload
-0000000120021fc0 t digest_init
-000000012020350c b direct_load
-0000000120203529 b direct_store
-00000001201feed8 s directive_buffer.1
-0000000120056e70 t distribute_bit_expr
-000000012012ba90 t distribute_links
-000000012012ad10 t distribute_notes
-000000012004a2b0 T div_and_round_double
-0000000120203a3c b div_cost
-000000012018ee60 t div_unit_blockage
-000000012018ebb0 T div_unit_blockage_range
-000000012018b380 T div_unit_ready_cost
-0000000120038b90 T do_abort
-00000001201ff250 s do_block
-00000001200e3700 t do_cross_jump
-00000001201ff000 s do_identifier_warnings
-000000012007e800 T do_jump
-000000012007fc50 t do_jump_by_parts_equality
-000000012007fe50 t do_jump_by_parts_equality_rtx
-000000012007f710 t do_jump_by_parts_greater
-000000012007f9e0 T do_jump_by_parts_greater_rtx
-000000012007fff0 t do_jump_for_compare
-000000012006c110 t do_jump_if_equal
-00000001201ff414 s do_not_record
-000000012007e550 T do_pending_stack_adjust
-00000001201fec3c G do_preexpand_calls
-0000000120080560 t do_store_flag
-00000001201ffc00 S doing_objc_thang
-00000001201fed68 S dollars_in_ident
-00000001201ffd98 S double_ftype_double
-00000001201ffe18 S double_ftype_double_double
-0000000120200998 S double_reg_address_ok
-00000001201ffd78 S double_type_node
-000000012006f350 T drop_through_at_end_p
-00000001200a8470 T dtors_section
-0000000120200018 S dump_base_name
-000000012012beb0 T dump_combine_stats
-000000012012bf10 T dump_combine_total_stats
-0000000120139930 t dump_conflicts
-0000000120112190 T dump_flow_info
-0000000120139f80 T dump_global_regs
-0000000120134e20 T dump_local_alloc
-00000001201fff6c S dump_time
-00000001200454e0 T dump_tree_statistics
-0000000120017c20 t duplicate_decls
-00000001200e2ab0 t duplicate_loop_exit_test
-00000001200ce060 t dwarf_attr_name
-00000001200ce5e0 t dwarf_fund_type_name
-00000001201ff2c0 s dwarf_last_decl
-00000001200d7200 t dwarf_tag_name
-00000001200cd250 T dwarfout_begin_block
-00000001200cd480 T dwarfout_begin_function
-00000001200cd900 T dwarfout_define
-00000001200cd300 T dwarfout_end_block
-00000001200cd5c0 T dwarfout_end_epilogue
-00000001200cd520 T dwarfout_end_function
-00000001200caa30 T dwarfout_file_scope_decl
-00000001200cc540 T dwarfout_finish
-00000001200cb950 T dwarfout_init
-00000001200cd3b0 T dwarfout_label
-00000001200cb160 T dwarfout_line
-00000001200cd7c0 T dwarfout_resume_previous_source_file
-00000001200cd650 T dwarfout_start_new_source_file
-00000001200cdbb0 T dwarfout_undef
-00000001201ff094 s dynamic_offset
-00000001200b8a30 t e113toe
-00000001200b8e80 t e24toe
-00000001201e9e2c D e32
-00000001200b80a0 t e53toe
-00000001200b8570 t e64toe
-00000001200b6c40 t eadd
-00000001200b6df0 t eadd1
-00000001200b65e0 T earith
-000000012013c790 t earlyclobber_operand_p
-00000001200b95e0 t ecmp
-00000001200b7570 t ediv
-00000001200bd6a0 t edivm
-00000001200bc0d0 T efixi
-00000001200bc140 T efixui
-00000001200bb210 t efloor
-00000001201e9e08 D ehalf
-00000001200bea70 t eifrac
-00000001200bb5c0 t eiremain
-00000001200b6a30 t eisnan
-00000001200b6a10 t eisneg
-00000001200bb380 t eldexp
-00000001200d84f0 t element_list_attribute
-000000012018e7c0 T eligible_for_annul_true
-000000012018e1b0 T eligible_for_delay
-00000001201ff548 s elim_reg_set
-00000001201e8fc8 d elim_regs.0
-00000001201ff834 s eliminable_regset
-00000001201ea050 d eliminables.0
-00000001201ea0a0 d eliminables.0
-00000001201ea688 d eliminables.0
-00000001201ea670 d eliminables.2
-0000000120095380 T eliminate_constant_term
-000000012014bc10 T eliminate_regs
-000000012014cd40 t eliminate_regs_in_insn
-00000001201e9e38 D elog2
-00000001200bdd70 t emdnorm
-00000001200b5f30 T emit
-00000001200a1250 T emit_0_to_1_insn
-0000000120194ba0 t emit_add
-00000001200b5be0 T emit_barrier
-00000001200b3010 T emit_barrier_after
-00000001200b5250 T emit_barrier_before
-00000001201957a0 T emit_bcnd
-0000000120071840 T emit_block_move
-0000000120089a50 t emit_call_1
-00000001200b5ab0 T emit_call_insn
-00000001200b5190 T emit_call_insn_before
-000000012006cac0 t emit_case_nodes
-00000001200a1210 T emit_clr_insn
-000000012009c090 T emit_cmp_insn
-000000012015cec0 t emit_delay_sequence
-0000000120200298 S emit_filename
-000000012009c830 T emit_float_lib_cmp
-00000001200a1290 T emit_indirect_jump
-00000001200b5750 T emit_insn
-00000001200b2ee0 T emit_insn_after
-00000001200b5340 T emit_insn_after_with_line_notes
-00000001200b4fc0 T emit_insn_before
-00000001200b58a0 T emit_insns
-00000001200b5970 T emit_insns_after
-00000001200b5900 T emit_insns_before
-0000000120105ac0 T emit_iv_add_mult
-000000012006e580 T emit_jump
-000000012006ca30 t emit_jump_if_reachable
-00000001200b59f0 T emit_jump_insn
-00000001200b5500 T emit_jump_insn_after
-00000001200b50e0 T emit_jump_insn_before
-00000001200b5b80 T emit_label
-00000001200b55b0 T emit_label_after
-0000000120194ef0 t emit_ldst
-000000012009be10 T emit_libcall_block
-0000000120088070 T emit_library_call
-00000001200887a0 T emit_library_call_value
-00000001200b5c50 T emit_line_note
-00000001200b5690 T emit_line_note_after
-00000001200b5ef0 T emit_line_note_force
-0000000120200290 S emit_lineno
-0000000120071c20 T emit_move_insn
-0000000120071e90 T emit_move_insn_1
-0000000120191520 T emit_move_sequence
-000000012009ba10 T emit_no_conflict_block
-000000012006e460 T emit_nop
-00000001200b5db0 T emit_note
-00000001200b5610 T emit_note_after
-00000001200b52c0 T emit_note_before
-0000000120072360 T emit_push_insn
-00000001200821d0 T emit_queue
-0000000120150350 t emit_reload_insns
-0000000120095df0 T emit_stack_restore
-0000000120094d40 T emit_stack_save
-00000001200922d0 T emit_store_flag
-00000001201989a0 T emit_test
-000000012019dc30 T emit_typecode_conversion
-00000001200a0dc0 T emit_unop_insn
-000000012010a770 T emit_unrolled_add
-00000001200b6990 t emov
-00000001200bd500 t emovi
-00000001201e9ef8 d emtens
-00000001200b7b30 t emul
-00000001200bdb40 t emulm
-000000012016b090 T end_final
-00000001201fed28 s end_of_file
-00000001201ff958 s end_of_function_label
-0000000120209514 b end_of_function_needs
-00000001200b6430 T end_sequence
-0000000120042160 T end_temporary_allocation
-00000001200bd410 t endian
-00000001200b69e0 t eneg
-00000001200b9ff0 t enormlz
-00000001201fed70 s enum_next_value
-00000001201fed78 s enum_overflow
-00000001201e9e14 D eone
-00000001201e9e50 D epi
-00000001201ff0a8 s epilogue
-00000001201ffb94 s epilogue_marked
-00000001202005b0 S eqdf2_libfunc
-0000000120200458 S eqhf2_libfunc
-00000001202006b0 S eqsf2_libfunc
-00000001202005e0 S eqtf2_libfunc
-0000000120197ba0 T equality_op
-00000001200f16c0 t equiv_constant
-00000001201ff778 s equiv_mem
-00000001201ff780 s equiv_mem_modified
-0000000120205f5c b equot
-00000001202003f0 S eqxf2_libfunc
-00000001200b6750 T ereal_atof
-00000001200bd250 T ereal_cmp
-00000001200bd340 T ereal_from_double
-00000001200bd2f0 T ereal_from_float
-00000001200bc1b0 T ereal_from_int
-00000001200bc7c0 T ereal_from_uint
-00000001200bd2b0 T ereal_isneg
-00000001200bcd90 T ereal_ldexp
-00000001200bc080 T ereal_negate
-00000001200bd200 T ereal_to_decimal
-00000001200b6840 T ereal_to_int
-00000001201e9fb8 d ermsg
-0000000120030560 T error
-00000001200301d0 T error_for_asm
-0000000120021a20 T error_init
-00000001201ffd48 S error_mark_node
-000000012002ffa0 T error_with_decl
-000000012002fcf0 T error_with_file_and_line
-00000001201fef44 S errorcount
-00000001200b9cc0 t eshift
-00000001201ff240 s esqinited
-00000001201e9e44 D esqrt2
-000000012006c220 t estimate_case_costs
-00000001200b6a90 t esub
-00000001200bd090 T etardouble
-00000001200bcf80 T etarldouble
-00000001200bd0f0 T etarsingle
-00000001200bce70 T etartdouble
-00000001201e9e5c d etens
-00000001200bf010 t etoasc
-00000001200b92e0 t etoe53
-00000001200bba10 T etrunci
-00000001200bbd60 T etruncui
-00000001201e9e20 D etwo
-00000001200b9750 t euifrac
-000000012004bf50 t eval_subst
-0000000120197a00 T even_relop
-00000001201fec98 g everything.1
-00000001201fec9c g everything.2
-00000001201feca0 g everything.5
-0000000120038c80 T exact_log2_wide
-00000001200e9450 t exp_equiv_p
-000000012009ad30 T expand_abs
-00000001200921b0 T expand_and
-0000000120068e40 T expand_anon_union_decl
-000000012006e940 T expand_asm
-0000000120064330 T expand_asm_operands
-0000000120072c90 T expand_assignment
-00000001200962f0 T expand_binop
-0000000120196d00 T expand_block_move
-000000012007bde0 t expand_builtin
-000000012007d3f0 t expand_builtin_apply
-000000012007d180 t expand_builtin_apply_args
-000000012007dad0 t expand_builtin_return
-0000000120082930 T expand_builtin_return_addr
-0000000120085050 T expand_call
-00000001200690e0 t expand_cleanups
-000000012007e6e0 T expand_cleanups_to
-000000012009b0c0 T expand_complex_abs
-000000012011e640 t expand_compound_operation
-000000012006e5f0 T expand_computed_goto
-000000012006eed0 T expand_continue_loop
-0000000120093170 T expand_dec
-0000000120068320 T expand_decl
-000000012006f3f0 T expand_decl_cleanup
-0000000120068b10 T expand_decl_init
-000000012008eaa0 T expand_divmod
-000000012006ed50 T expand_elseif
-0000000120067850 T expand_end_bindings
-000000012006acc0 T expand_end_case
-0000000120069630 T expand_end_case_dummy
-00000001200658d0 T expand_end_cond
-0000000120065d70 T expand_end_loop
-00000001200654b0 T expand_end_stmt_expr
-000000012006ef30 T expand_exit_loop
-000000012006ef90 T expand_exit_loop_if_false
-000000012006f160 T expand_exit_something
-0000000120075360 T expand_expr
-0000000120064f60 T expand_expr_stmt
-000000012011e960 t expand_field_assignment
-000000012009ddb0 T expand_fix
-0000000120063eb0 t expand_fixup
-000000012006e920 T expand_fixups
-000000012009cf70 T expand_float
-00000001200607d0 T expand_function_end
-000000012005ff70 T expand_function_start
-00000001200639c0 T expand_goto
-0000000120063ce0 t expand_goto_internal
-00000001200930e0 T expand_inc
-000000012007dce0 t expand_increment
-00000001200dbc40 T expand_inline_function
-000000012006e6a0 T expand_label
-000000012006ee30 T expand_loop_continue_here
-0000000120063660 T expand_main_function
-000000012008da30 T expand_mult
-00000001200933d0 T expand_mult_add
-000000012008e3a0 T expand_mult_highpart
-0000000120093240 T expand_mult_highpart_adjust
-000000012006f1d0 T expand_null_return
-00000001201374d0 t expand_preferences
-0000000120066330 T expand_return
-000000012008ce50 T expand_shift
-0000000120067600 T expand_start_bindings
-0000000120069210 T expand_start_case
-0000000120069500 T expand_start_case_dummy
-0000000120065700 T expand_start_cond
-000000012006ec10 T expand_start_else
-000000012006eb00 T expand_start_elseif
-0000000120065b90 T expand_start_loop
-000000012006edd0 T expand_start_loop_continue_elsewhere
-000000012006ea10 T expand_start_stmt_expr
-000000012002f4a0 t expand_stmt_with_iterators_1
-00000001200998a0 T expand_twoval_binop
-0000000120099f20 T expand_unop
-00000001201fed54 S explicit_flag_signed_bitfields
-0000000120095510 T expr_size
-00000001202002a8 S expr_stmts_for_value
-00000001202000b8 S expression_obstack
-00000001202003f8 S extenddftf2_libfunc
-0000000120200320 S extenddfxf2_libfunc
-000000012012bd50 T extended_count
-0000000120200658 S extendsfdf2_libfunc
-0000000120200418 S extendsftf2_libfunc
-0000000120200488 S extendsfxf2_libfunc
-000000012020fce0 B extendtab
-00000001201fefc4 S extra_warnings
-000000012008b320 T extract_bit_field
-000000012008c510 t extract_fixed_bit_field
-000000012012c9c0 t extract_left_shift
-000000012008cb50 t extract_split_bit_field
-0000000120205f50 B ezero
-00000001201e7a08 D f_options
-00000001201ea030 D factors
-00000001201ffba8 s failure_errno.1
-00000001201ff2b8 s fake_containing_scope
-0000000120038b70 T fancy_abort
-0000000120030830 T fatal
-000000012002f9d0 T fatal_insn
-0000000120038790 T fatal_insn_not_found
-0000000120038740 T fatal_io_error
-0000000120200688 S ffs_optab
-00000001200d9980 t field_byte_offset
-0000000120018f00 t field_decl_cmp
-00000001201ff270 s filename_table
-000000012015b4b0 t fill_eager_delay_slots
-0000000120159ed0 t fill_simple_delay_slots
-000000012015e3a0 t fill_slots_from_thread
-000000012016ca70 T final
-000000012010bd30 T final_biv_value
-000000012016f890 T final_end_function
-000000012010c1d0 T final_giv_value
-000000012016cdb0 T final_scan_insn
-00000001202009c0 S final_sequence
-000000012016f720 T final_start_function
-00000001201ffed8 S final_time
-00000001201ff264 s finalizing
-00000001201003a0 t find_and_verify_loops
-000000012010df00 t find_basic_blocks
-00000001200f5950 t find_best_addr
-00000001200f67a0 t find_comparison_args
-0000000120173f60 t find_constant_term_loc
-00000001200e3280 t find_cross_jump
-000000012013c220 t find_dummy_reload
-000000012015cc40 t find_end_label
-0000000120143fa0 T find_equiv_reg
-0000000120134400 t find_free_reg
-0000000120061c20 T find_function_data
-0000000120144fc0 t find_inc_amount
-00000001200b03c0 T find_last_value
-000000012006f5c0 T find_loop_tree_blocks
-0000000120103610 t find_mem_givs
-0000000120093b30 T find_next_ref
-0000000120137ba0 t find_reg
-00000001200ae880 T find_reg_fusage
-00000001200b09c0 T find_reg_note
-00000001200ae9e0 T find_regno_fusage
-00000001200b0a20 T find_regno_note
-000000012013d610 T find_reloads
-0000000120141490 t find_reloads_address
-0000000120142720 t find_reloads_address_1
-0000000120143360 t find_reloads_address_part
-0000000120140ed0 t find_reloads_toplev
-0000000120145e60 T find_replacement
-0000000120173060 T find_single_use
-0000000120170dc0 t find_single_use_1
-0000000120107b10 t find_single_use_in_loop
-0000000120117900 t find_split_point
-000000012010aff0 t find_splittable_givs
-000000012010a800 t find_splittable_regs
-0000000120164a10 t find_symbolic_term
-0000000120111f40 t find_use_as_address
-0000000120010df0 T finish_decl
-0000000120014560 T finish_enum
-0000000120006fb0 T finish_file
-0000000120015fe0 T finish_function
-0000000120016430 T finish_incomplete_decl
-00000001200257e0 T finish_init
-0000000120013a60 T finish_struct
-0000000120200010 S finput
-00000001202006d8 S first_global_object_name
-00000001201ff1e8 s first_insn
-00000001201ff210 s first_label_num
-00000001201ff190 s first_pool
-000000012005ed80 T fix_lexical_addr
-0000000120130180 T fix_register
-00000001202003b0 S fixdfdi_libfunc
-0000000120200370 S fixdfsi_libfunc
-00000001202002f8 S fixdfti_libfunc
-0000000120200920 S fixed_reg_set
-0000000120213bec B fixed_regs
-0000000120200468 S fixsfdi_libfunc
-00000001202005f0 S fixsfsi_libfunc
-0000000120200368 S fixsfti_libfunc
-000000012020c850 B fixtab
-0000000120200400 S fixtfdi_libfunc
-00000001202003a0 S fixtfsi_libfunc
-00000001202004c0 S fixtfti_libfunc
-0000000120211728 B fixtrunctab
-00000001202005c8 S fixunsdfdi_libfunc
-00000001202004e8 S fixunsdfsi_libfunc
-00000001202005a0 S fixunsdfti_libfunc
-0000000120200378 S fixunssfdi_libfunc
-0000000120200448 S fixunssfsi_libfunc
-0000000120200328 S fixunssfti_libfunc
-00000001202003c8 S fixunstfdi_libfunc
-00000001202006b8 S fixunstfsi_libfunc
-00000001202003b8 S fixunstfti_libfunc
-0000000120200310 S fixunsxfdi_libfunc
-00000001202004f8 S fixunsxfsi_libfunc
-0000000120200650 S fixunsxfti_libfunc
-000000012006f820 t fixup_gotos
-000000012005bd20 t fixup_memory_subreg
-00000001200493d0 T fixup_signed_type
-000000012005c060 t fixup_stack_1
-00000001200494e0 T fixup_unsigned_type
-000000012005aaa0 t fixup_var_refs
-000000012005afa0 t fixup_var_refs_1
-000000012005ac10 t fixup_var_refs_insns
-0000000120200318 S fixxfdi_libfunc
-0000000120200630 S fixxfsi_libfunc
-0000000120200490 S fixxfti_libfunc
-00000001201fed50 S flag_allow_single_precision
-00000001201fef74 S flag_caller_saves
-00000001201ffc40 S flag_cond_mismatch
-00000001201fff28 S flag_cse_follow_jumps
-00000001201fff98 S flag_cse_skip_blocks
-00000001201fef84 S flag_defer_pop
-0000000120200024 S flag_delayed_branch
-00000001201fff88 S flag_expensive_optimizations
-00000001201fef9c S flag_fast_math
-00000001201fef88 S flag_float_store
-00000001201fef80 S flag_force_addr
-00000001201fef7c S flag_force_mem
-00000001201fefa4 S flag_gen_aux_info
-00000001201fec24 G flag_gnu_linker
-00000001201fefb4 S flag_inhibit_size_directive
-00000001201ffef8 S flag_inline_functions
-00000001201ffecc S flag_keep_inline_functions
-00000001201fec78 g flag_minimal_debug
-00000001201ffe50 S flag_no_asm
-00000001201ffc98 S flag_no_builtin
-0000000120200008 S flag_no_common
-00000001201fef90 S flag_no_function_cse
-00000001201fed58 S flag_no_ident
-00000001201fff68 S flag_no_inline
-00000001201ffc94 S flag_no_nonansi_builtin
-00000001201fef98 S flag_no_peephole
-00000001201fef94 S flag_omit_frame_pointer
-00000001201fefbc S flag_pack_struct
-00000001201fef78 S flag_pcc_struct_return
-00000001201fefa8 S flag_pedantic_errors
-00000001201fffdc S flag_pic
-00000001201ffec8 S flag_pretend_float
-00000001201fef30 S flag_print_asm_name
-00000001201fefdc s flag_rerun_cse_after_loop
-00000001201fefac S flag_schedule_insns
-00000001201fefb0 S flag_schedule_insns_after_reload
-0000000120200030 S flag_shared_data
-00000001201ffe20 S flag_short_double
-00000001201ffee8 S flag_short_enums
-00000001201fffb8 S flag_short_temps
-00000001201fec0c G flag_signed_bitfields
-00000001201fff48 S flag_signed_char
-00000001201fef8c S flag_strength_reduce
-00000001201fefa0 S flag_syntax_only
-00000001201fff08 S flag_thread_jumps
-00000001201ffdf8 S flag_traditional
-00000001201fff94 S flag_unroll_all_loops
-00000001201fec1c G flag_unroll_loops
-00000001201fefb8 S flag_verbose_asm
-00000001201fff60 S flag_volatile
-0000000120200068 S flag_volatile_global
-00000001201fec20 G flag_writable_strings
-00000001202033e8 b float_error
-00000001201ffd88 S float_ftype_float
-00000001201fff0c S float_handled
-000000012020ba18 B float_handler
-00000001200394c0 t float_signal
-00000001201ffdd0 S float_type_node
-0000000120200648 S floatdidf_libfunc
-00000001202004b8 S floatdisf_libfunc
-0000000120200638 S floatditf_libfunc
-0000000120200668 S floatdixf_libfunc
-0000000120200380 S floatsidf_libfunc
-0000000120200528 S floatsisf_libfunc
-00000001202004a0 S floatsitf_libfunc
-00000001202003e0 S floatsixf_libfunc
-000000012020e298 B floattab
-00000001202003a8 S floattidf_libfunc
-0000000120200530 S floattisf_libfunc
-00000001202005f8 S floattitf_libfunc
-0000000120200338 S floattixf_libfunc
-0000000120200438 S flodiv_optab
-0000000120038ce0 T floor_log2_wide
-000000012010db80 T flow_analysis
-000000012010eea0 t flow_delete_insn
-00000001201fef10 S flow_dump
-0000000120200048 S flow_dump_file
-0000000120200040 S flow_time
-0000000120164f30 t flush_pending_lists
-000000012004c5f0 T fold
-0000000120056820 t fold_convert
-00000001200ee250 t fold_rtx
-0000000120057700 t fold_truthop
-00000001200e3cc0 T follow_jumps
-000000012020099c S forbidden_regs
-00000001200a69e0 T force_const_mem
-0000000120049f20 T force_fit_type
-00000001200fe2a0 t force_movables
-00000001200b5f10 T force_next_line_note
-0000000120095a00 T force_not_mem
-0000000120074c00 T force_operand
-0000000120094bf0 T force_reg
-0000000120120540 t force_to_mode
-00000001202007f8 S forced_labels
-000000012014e490 t forget_old_reloads_1
-000000012000b7d0 T forget_protocol_qualifiers
-0000000120145b80 T form_sum
-000000012018f1c0 t fpadd100_unit_blockage
-000000012018b860 T fpadd100_unit_blockage_range
-000000012018b5e0 T fpadd100_unit_ready_cost
-000000012018ef60 t fpadd110_unit_blockage
-000000012018b460 T fpadd110_unit_blockage_range
-000000012018ec40 T fpadd110_unit_ready_cost
-000000012018fa70 t fpmul100_unit_blockage
-000000012018bb20 T fpmul100_unit_blockage_range
-000000012018ba30 T fpmul100_unit_ready_cost
-000000012018ed00 T fpmul110_unit_ready_cost
-0000000120001a80 t frame_dummy
-00000001201ffb88 s frame_laid_out
-00000001202001d8 S frame_offset
-00000001202009ac S frame_pointer_needed
-00000001202007c0 S frame_pointer_rtx
-00000001201ffb8c s frame_size
-00000001201fedd8 s free_binding_level
-00000001200e7f30 t free_element
-00000001201ff420 s free_element_chain
-00000001201688c0 t free_pending_lists
-0000000120062020 T free_temp_slots
-0000000120062090 T free_temps_for_rtl_expr
-00000001201ff27c s ft_entries
-00000001201ff278 s ft_entries_allocated
-0000000120200498 S ftrunc_optab
-0000000120200284 S function_call_count
-00000001200da320 T function_cannot_inline_p
-00000001201ff160 s function_defined
-00000001201feed0 s function_format_list
-00000001202000f0 S function_maybepermanent_obstack
-00000001202000c8 S function_obstack
-00000001200a8830 T function_section
-00000001200199a0 t function_types_compatible_p
-00000001201eb100 D function_units
-000000012018ced0 T function_units_used
-00000001200ce960 t fundamental_type_code
-00000001201fff9c S g_switch_set
-00000001201ffeb0 S g_switch_value
-000000012003bd90 T gcc_obstack_init
-0000000120200360 S gedf2_libfunc
-00000001202003d0 S gehf2_libfunc
-000000012018a050 T gen_absdf2
-000000012018a0c0 T gen_abssf2
-00000001200a1330 T gen_add2_insn
-0000000120188dc0 T gen_adddf3
-0000000120188f50 T gen_adddi3
-0000000120188ee0 T gen_addsf3
-0000000120188d50 T gen_addsi3
-00000001201898e0 T gen_anddi3
-00000001201815c0 T gen_andsi3
-0000000120181aa0 T gen_ashlsi3
-0000000120181f00 T gen_ashrsi3
-0000000120028650 T gen_aux_info_record
-0000000120185ee0 T gen_bcnd
-0000000120186100 T gen_beq
-0000000120186a80 T gen_bge
-0000000120186bd0 T gen_bgeu
-00000001201863a0 T gen_bgt
-00000001201864f0 T gen_bgtu
-0000000120126bf0 t gen_binary
-0000000120186df0 T gen_ble
-0000000120186f40 T gen_bleu
-000000012018a630 T gen_blockage
-0000000120186710 T gen_blt
-0000000120186860 T gen_bltu
-0000000120186250 T gen_bne
-0000000120185ff0 T gen_bxx
-000000012018a130 T gen_call
-0000000120187a30 T gen_call_block_move
-0000000120187dc0 T gen_call_movstrsi_loop
-000000012018a2e0 T gen_call_value
-0000000120182830 T gen_casesi
-0000000120182fc0 T gen_casesi_enter
-0000000120182de0 T gen_casesi_jump
-0000000120185360 T gen_cmpdf
-0000000120185260 T gen_cmpsf
-0000000120185120 T gen_cmpsi
-0000000120027d40 t gen_decl
-000000012018a6d0 T gen_decrement_and_branch_until_zero
-0000000120181340 T gen_divdf3
-0000000120189870 T gen_divsf3
-000000012017f050 T gen_divsi3
-0000000120183160 T gen_dummy
-000000012018a590 T gen_epilogue
-00000001200a15e0 T gen_extend_insn
-0000000120188720 T gen_extendhisi2
-0000000120188850 T gen_extendqihi2
-0000000120188980 T gen_extendqisi2
-0000000120188ab0 T gen_extendsfdf2
-00000001201885a0 T gen_extendsidi2
-0000000120189e90 T gen_extv
-0000000120189f00 T gen_extzv
-0000000120189d60 T gen_ffssi2
-0000000120188c70 T gen_fix_truncdfsi2
-0000000120188ce0 T gen_fix_truncsfsi2
-0000000120188b90 T gen_floatsidf2
-0000000120188c00 T gen_floatsisf2
-0000000120028c20 t gen_formal_list_for_func_def
-00000001200287b0 t gen_formal_list_for_type
-00000001200b1bf0 T gen_highpart
-00000001200b3e60 T gen_imagpart
-000000012018a690 T gen_indirect_jump
-00000001200b43f0 T gen_inline_header_rtx
-0000000120189950 T gen_iordi3
-0000000120181780 T gen_iorsi3
-0000000120183100 T gen_jump
-00000001200b4360 T gen_label_rtx
-0000000120187160 T gen_locate1
-0000000120187220 T gen_locate2
-00000001200b4000 T gen_lowpart
-00000001200b14c0 T gen_lowpart_common
-00000001201265a0 t gen_lowpart_for_combine
-00000001200f1980 T gen_lowpart_if_possible
-0000000120182360 T gen_lshrsi3
-00000001201833f0 T gen_m88k_rcs_id
-00000001201877a0 T gen_movdf
-00000001201876d0 T gen_movdi
-000000012009cbd0 T gen_move_insn
-0000000120187530 T gen_movhi
-0000000120187600 T gen_movqi
-0000000120187870 T gen_movsf
-0000000120187370 T gen_movsi
-0000000120187940 T gen_movstrsi
-00000001201893a0 T gen_muldf3
-00000001201894c0 T gen_mulsf3
-0000000120189330 T gen_mulsi3
-0000000120189f70 T gen_negdf2
-0000000120189fe0 T gen_negsf2
-00000001201827c0 T gen_negsi2
-000000012018a4c0 T gen_nop
-0000000120189aa0 T gen_one_cmpldi2
-0000000120189a30 T gen_one_cmplsi2
-000000012018a520 T gen_prologue
-00000001200828f0 T gen_push_operand
-00000001200b3e10 T gen_realpart
-00000001200b1290 T gen_reg_rtx
-0000000120151de0 T gen_reload
-0000000120187440 T gen_reload_insi
-000000012018a4e0 T gen_return
-0000000120189b70 T gen_rotlsi3
-0000000120189cf0 T gen_rotrsi3
-00000001200b1100 T gen_rtvec
-00000001200b1210 T gen_rtvec_v
-00000001200b0e00 T gen_rtx
-00000001201269a0 t gen_rtx_combine
-00000001201854a0 T gen_seq
-00000001200b64a0 T gen_sequence
-0000000120185920 T gen_sge
-00000001201859e0 T gen_sgeu
-0000000120185620 T gen_sgt
-00000001201856e0 T gen_sgtu
-0000000120185aa0 T gen_sle
-0000000120185b60 T gen_sleu
-00000001201857a0 T gen_slt
-0000000120185860 T gen_sltu
-0000000120185560 T gen_sne
-0000000120183430 T gen_split_1
-000000012017eed0 T gen_split_125
-000000012017e110 T gen_split_13
-000000012017e390 T gen_split_14
-000000012017e5a0 T gen_split_15
-0000000120184140 T gen_split_16
-00000001201842e0 T gen_split_17
-0000000120184450 T gen_split_18
-000000012017e7f0 T gen_split_19
-0000000120183610 T gen_split_2
-000000012017ea70 T gen_split_20
-000000012017ec80 T gen_split_21
-00000001201845e0 T gen_split_22
-0000000120184780 T gen_split_23
-00000001201848f0 T gen_split_24
-00000001201837f0 T gen_split_3
-0000000120184a80 T gen_split_31
-0000000120184bb0 T gen_split_33
-0000000120184d00 T gen_split_35
-0000000120184e30 T gen_split_37
-00000001201839d0 T gen_split_4
-0000000120183bb0 T gen_split_5
-0000000120183d90 T gen_split_6
-0000000120183f70 T gen_split_7
-0000000120185c20 T gen_split_75
-0000000120185d70 T gen_split_80
-00000001200a1470 T gen_sub2_insn
-00000001201890b0 T gen_subdf3
-0000000120189240 T gen_subdi3
-00000001201891d0 T gen_subsf3
-0000000120189040 T gen_subsi3
-0000000120189b10 T gen_tbnd
-0000000120189570 T gen_tcnd_divide_by_zero
-0000000120184f80 T gen_test
-0000000120189530 T gen_trap_divide_by_zero
-0000000120188b20 T gen_truncdfsf2
-0000000120026a00 t gen_type
-0000000120180e90 T gen_udivsi3
-0000000120126f10 t gen_unary
-00000001201899c0 T gen_xordi3
-0000000120181920 T gen_xorsi3
-00000001201881f0 T gen_zero_extendhisi2
-0000000120188320 T gen_zero_extendqihi2
-0000000120188450 T gen_zero_extendqisi2
-00000001201049d0 t general_induction_var
-0000000120171140 T general_operand
-0000000120200428 S gesf2_libfunc
-000000012018ee20 T get_attr_cpu
-000000012018d8b0 T get_attr_fpu
-000000012016be50 T get_attr_length
-000000012018da20 T get_attr_type
-0000000120048ce0 T get_best_mode
-0000000120157380 t get_branch_condition
-0000000120107100 T get_condition
-0000000120107760 T get_condition_for_loop
-000000012002c580 T get_directive_line
-0000000120041c40 T get_file_function_name
-0000000120062d80 T get_first_block_beg
-00000001200b3df0 T get_first_label_num
-0000000120062d30 T get_first_nonparm_insn
-0000000120061cb0 T get_frame_size
-000000012003d8a0 T get_identifier
-00000001200746b0 T get_inner_reference
-00000001200745e0 t get_inner_unaligned_p
-00000001200b4830 T get_insns
-00000001200afcb0 T get_integer_term
-0000000120156dd0 t get_jump_flags
-00000001200e39a0 T get_label_after
-00000001200e3910 T get_label_before
-00000001200b4850 T get_last_insn
-00000001200b48b0 T get_last_insn_anywhere
-00000001201299d0 t get_last_value
-00000001201297d0 t get_last_value_validate
-00000001200b4900 T get_max_uid
-0000000120041960 T get_narrower
-0000000120013760 T get_parm_info
-0000000120048e70 T get_pending_sizes
-00000001200842e0 t get_pointer_alignment
-00000001200a9760 T get_pool_constant
-00000001200a9830 T get_pool_mode
-00000001200a9900 T get_pool_offset
-00000001200a99d0 T get_pool_size
-00000001200afd30 T get_related_value
-00000001200384e0 T get_run_time
-0000000120041e00 T get_set_constructor_bits
-0000000120041fc0 T get_set_constructor_bytes
-0000000120021790 t get_spelling
-00000001200416b0 T get_unwidened
-0000000120016e20 T getdecls
-0000000120200580 S getf2_libfunc
-0000000120198ed0 T getpwd
-0000000120016e40 T gettags
-0000000120200678 S gexf2_libfunc
-0000000120135fa0 T global_alloc
-0000000120200090 S global_alloc_time
-00000001201fede0 s global_binding_level
-00000001200164d0 T global_bindings_p
-0000000120136f90 t global_conflicts
-00000001202007e8 S global_const_equiv_map
-00000001202007f0 S global_const_equiv_map_size
-00000001201fef20 S global_reg_dump
-0000000120200078 S global_reg_dump_file
-0000000120213d0c B global_regs
-0000000120130270 T globalize_reg
-00000001201ff0e0 s goto_fixup_chain
-0000000120011750 t grokdeclarator
-0000000120017710 T grokfield
-0000000120013550 t grokparms
-0000000120016ee0 T groktypename
-0000000120016f20 T groktypename_in_parm_context
-000000012006c550 t group_case_nodes
-0000000120200340 S gtdf2_libfunc
-0000000120200670 S gthf2_libfunc
-0000000120200500 S gtsf2_libfunc
-0000000120200460 S gttf2_libfunc
-0000000120200598 S gtxf2_libfunc
-000000012000c110 T handle_pragma_token
-00000001200a99f0 T handle_pragma_weak
-0000000120008c80 T handle_sysv_pragma
-00000001202007e0 S hard_frame_pointer_rtx
-0000000120095f70 T hard_function_value
-0000000120096090 T hard_libcall_value
-00000001201ff7d0 s hard_reg_conflicts
-00000001201ff7e0 s hard_reg_copy_preferences
-00000001201ff7e8 s hard_reg_full_preferences
-00000001201ff7d8 s hard_reg_preferences
-000000012013c7e0 t hard_reg_set_here_p
-0000000120152d20 t hard_reg_use_compare
-00000001201ff3d8 s hard_regs_in_table
-00000001201ff7c4 s hard_regs_live
-00000001201ff938 s hard_regs_live
-00000001201ff85c s hard_regs_live_known
-00000001201ff948 s hard_regs_need_restore
-00000001201ff940 s hard_regs_saved
-00000001201ff418 s hash_arg_in_memory
-00000001201ff41c s hash_arg_in_struct
-0000000120201258 b hash_table
-0000000120209db8 b hashtab
-00000001200a1440 T have_add2_insn
-00000001200a1580 T have_sub2_insn
-00000001201ff244 s have_used_extensions
-00000001201ffae8 s high_block_linenum
-00000001201ffaec s high_function_linenum
-00000001201ff120 s highest_outgoing_arg_in_use
-00000001201ff6a8 s highest_regno_in_uid_map
-00000001201ffff0 S id_clash_len
-00000001201feff8 S id_string_size
-000000012005f2a0 T identify_blocks
-00000001201fecf8 s if_stmt_file
-00000001201fed00 s if_stmt_line
-00000001201219a0 t if_then_else_cond
-00000001200fe1d0 t ignore_some_movables
-00000001200a4ad0 T immed_double_const
-00000001200a9420 T immed_real_const
-00000001200a4d30 T immed_real_const_1
-00000001201732d0 T immediate_operand
-0000000120200148 S immediate_size_expand
-00000001200169f0 T implicitly_declare
-00000001201ff08c s in_arg_offset
-00000001201ff168 s in_named_name
-00000001201ff308 s in_nonparm_insns
-00000001200165c0 T in_parm_level_p
-00000001201ff148 s in_section
-00000001200b6480 T in_sequence_p
-00000001201fef68 S in_system_header
-00000001200a86e0 T in_text_section
-0000000120152660 t inc_for_reload
-00000001201fef58 S incomplete_decl_finalize_hook
-0000000120018f40 T incomplete_type_error
-00000001201ff1b4 s indent.0
-0000000120047830 T indent_to
-0000000120044df0 T index_type_equal
-0000000120173810 T indirect_operand
-0000000120200999 S indirect_symref_ok
-00000001200af270 T inequality_comparisons_p
-00000001202002ec S inhibit_defer_pop
-00000001201fefc0 S inhibit_warnings
-00000001201ff348 s init.0
-00000001201ff34c s init.3
-00000001201ff350 s init.4
-00000001201641d0 T init_alias_analysis
-00000001201740b0 T init_all_optabs
-00000001201549c0 T init_caller_save
-00000001200a9560 T init_const_rtx_hash_table
-000000012000e5d0 T init_decl_processing
-00000001200b35a0 T init_emit
-00000001200b3800 T init_emit_once
-0000000120089c70 T init_expmed
-0000000120082040 T init_expr
-000000012006ff10 T init_expr_once
-000000012016f630 T init_final
-000000012002cb10 T init_function_format_info
-000000012005f5e0 T init_function_start
-000000012016f700 T init_insn_lengths
-000000012002e8e0 T init_iterators
-0000000120007110 T init_lex
-00000001200a1640 t init_libfuncs
-0000000120107800 T init_loop
-000000012018a8b0 T init_mov_optab
-0000000120084200 t init_noncopied_parts
-000000012003b990 T init_obstacks
-000000012009ecb0 T init_optabs
-0000000120082a70 T init_pending_stack_adjust
-0000000120172e30 T init_recog
-0000000120172e10 T init_recog_no_volatile
-0000000120114280 t init_reg_last_arrays
-0000000120109a30 t init_reg_map
-0000000120130b10 t init_reg_modes
-000000012012d1e0 T init_reg_sets
-00000001201307a0 t init_reg_sets_1
-000000012012fec0 T init_regs
-000000012010ff40 t init_regset_vector
-0000000120147440 T init_reload
-00000001200ac2b0 T init_rtl
-0000000120156100 T init_save_areas
-000000012006e240 T init_stmt
-000000012006e270 T init_stmt_for_function
-00000001200425f0 T init_tree_codes
-00000001201ea0f8 d initial_call_used_regs
-00000001201ea0b8 d initial_fixed_regs
-000000012010d3a0 t initial_reg_note_copy
-00000001201ff028 s initial_trampoline.1
-00000001201ffea0 S initialization_message
-00000001200dfa70 t initialize_for_inline
-00000001201ff26c s initialized.2
-00000001200213c0 T initializer_constant_valid_p
-00000001201ffe90 S initializer_stack
-0000000120200198 S inline_function_decl
-0000000120200108 S inline_obstacks
-00000001201fff20 S input_file_stack
-000000012020000c S input_file_stack_tick
-00000001201fffc0 S input_filename
-00000001200e7f50 t insert
-00000001200167b0 T insert_block
-00000001200e7ab0 t insert_regs
-0000000120155d20 t insert_save_restore
-00000001202009b8 S insn_addresses
-00000001201ff9f0 s insn_blockage
-0000000120164cf0 t insn_cost
-00000001201ff9e0 s insn_costs
-00000001201ffac8 s insn_counter
-00000001202009b4 S insn_current_address
-000000012018ea90 T insn_current_length
-00000001201109b0 t insn_dead_p
-000000012018a8c0 T insn_default_length
-000000012017c590 T insn_extract
-00000001201bf238 R insn_gen_function
-00000001201ffb28 s insn_lengths
-00000001201ff9d0 s insn_luid
-00000001201ff2d8 s insn_map
-00000001201cec10 R insn_n_alternatives
-00000001201bff7c R insn_n_dups
-00000001201bfb10 R insn_n_operands
-00000001201ea800 D insn_name
-00000001201fecc8 G insn_name_ptr
-00000001201ffb08 s insn_noperands
-00000001201c03e8 R insn_operand_constraint
-00000001201c5c58 R insn_operand_mode
-00000001201c93a0 R insn_operand_predicate
-00000001201c8890 R insn_operand_strict_low
-00000001201be960 R insn_outfun
-00000001201ff9d8 s insn_priority
-0000000120209570 b insn_queue
-00000001201ff9f8 s insn_ref_count
-00000001201be088 R insn_template
-00000001201ffa38 s insn_tick
-00000001201ff9e8 s insn_units
-000000012018eb20 T insn_variable_length_p
-0000000120063780 t instantiate_decls_1
-00000001200621a0 T instantiate_virtual_regs
-000000012005c860 t instantiate_virtual_regs_1
-0000000120197760 T int32_operand
-0000000120197730 T int5_operand
-00000001201ffcf8 S intDI_type_node
-00000001201ffd08 S intHI_type_node
-00000001201ffc78 S intQI_type_node
-00000001201ffcd8 S intSI_type_node
-00000001201ffdb0 S int_array_type_node
-0000000120045270 T int_fits_type_p
-00000001201ffe08 S int_ftype_cptr_cptr_sizet
-00000001201ffd30 S int_ftype_int
-00000001201ffca8 S int_ftype_ptr_ptr_int
-00000001201ffde0 S int_ftype_string_string
-00000001201ea238 d int_reg_class_contents
-0000000120043a30 T int_size_in_bytes
-0000000120042cf0 T integer_all_onesp
-0000000120196960 T integer_ok_for_set
-00000001201ffd58 S integer_one_node
-0000000120042b90 T integer_onep
-0000000120042ef0 T integer_pow2p
-00000001201ffe80 S integer_type_node
-00000001201ffd68 S integer_zero_node
-0000000120042ac0 T integer_zerop
-00000001200dd810 t integrate_decl_tree
-00000001200dd710 t integrate_parm_decls
-00000001201ffefc S integration_time
-00000001200387c0 T interim_eh
-0000000120200088 S interim_eh_hook
-0000000120025d50 t internal_build_compound_expr
-00000001200e87e0 t invalidate
-00000001200f5710 t invalidate_for_call
-00000001200f2dd0 t invalidate_from_clobbers
-00000001200fb1e0 t invalidate_skipped_set
-0000000120100fe0 T invariant_p
-00000001200e4a60 T invert_exp
-00000001200e6f60 T invert_jump
-000000012004c250 T invert_truthvalue
-0000000120200538 S ior_optab
-0000000120044300 T is_attribute_p
-0000000120006eb0 T is_class_name
-000000012000b660 T is_reserved_word
-00000001201ffea8 S iter_stack
-000000012010d480 t iteration_info
-000000012002ef90 T iterator_expand
-000000012002ee60 T iterator_for_loop_end
-000000012002ed40 T iterator_for_loop_start
-00000001201feee8 s ixp_firstobj
-0000000120201150 b ixp_obstack
-00000001201fef28 S jump2_opt_dump
-00000001201fffc8 S jump2_opt_dump_file
-00000001200e3a30 t jump_back_p
-00000001201ff318 s jump_chain
-00000001201fef00 S jump_opt_dump
-00000001201fffb0 S jump_opt_dump_file
-00000001200e0140 T jump_optimize
-0000000120200070 S jump_time
-000000012007e7c0 T jumpif
-000000012007e790 T jumpifnot
-00000001201ffb38 s junk
-00000001201fedec s keep_next_if_subblocks
-00000001200164f0 T keep_next_level
-00000001201fede8 s keep_next_level_flag
-0000000120016510 T kept_level_p
-00000001201222b0 t known_cond
-00000001202034f8 b label.4
-00000001201ff0f8 s label_counter.3
-00000001201fedf0 s label_level_chain
-00000001201ff2d0 s label_map
-00000001201fec50 g label_num
-000000012006e510 T label_rtx
-00000001201ff628 s label_tick
-00000001201ff14c s labelno.1
-00000001201ff150 s labelno.2
-0000000120200a30 S labelrefs
-0000000120200a38 S labels
-0000000120100f60 t labels_in_range_p
-0000000120006de0 T lang_decode_option
-00000001201fffa0 S lang_expand_expr
-0000000120006e60 T lang_finish
-0000000120006e70 T lang_identify
-0000000120006e10 T lang_init
-00000001201e7db0 D lang_options
-00000001201fec00 G language_string
-00000001201fff5c S larger_than_size
-00000001201ffb78 s last_addr.2
-00000001202006d0 S last_assemble_variable_decl
-00000001201ff0c8 s last_block_end_note
-00000001201ff5d4 s last_call_cuid
-00000001201ff558 s last_call_suid
-000000012006f4d0 T last_cleanup_this_contour
-00000001201fefd0 s last_error_function
-00000001201fefec s last_error_tick
-00000001201ff0b8 s last_expr_type
-00000001201ff0c0 s last_expr_value
-00000001201ff208 s last_filename
-00000001201ff288 s last_filename
-00000001201ffaf0 s last_filename
-00000001201ffa98 s last_function_call
-00000001201fed88 s last_function_parm_tags
-00000001201fed80 s last_function_parms
-00000001201ffac0 s last_ignored_compare
-00000001201ff1f0 s last_insn
-00000001201ff430 s last_jump_equiv_class
-00000001201ff214 s last_label_num
-00000001201ff268 s last_line_entry_num.0
-00000001201ff200 s last_linenum
-00000001201ffae4 s last_linenum
-00000001201ff540 s last_mem_set
-00000001201ff048 s last_parm_insn
-00000001201ffa90 s last_pending_memory_flush
-00000001201ff198 s last_pool
-00000001201ffaa8 s last_scheduled_insn
-00000001201ff8ac s last_spill_reg
-0000000120106ed0 t last_use_this_basic_block
-00000001201ffbf0 S lastiddecl
-00000001200144f0 t layout_array_type
-00000001200478c0 T layout_decl
-00000001200495d0 t layout_record
-0000000120047db0 T layout_type
-0000000120049bc0 t layout_union
-00000001201ffe00 S ldouble_ftype_ldouble
-00000001201ea470 d leaf.0
-00000001202009c8 S leaf_function
-000000012016fa00 T leaf_function_p
-0000000120200480 S ledf2_libfunc
-0000000120191870 T legitimize_address
-0000000120197110 T legitimize_operand
-0000000120200330 S lehf2_libfunc
-00000001202005c0 S lesf2_libfunc
-0000000120200560 S letf2_libfunc
-00000001202003d8 S lexf2_libfunc
-00000001200fe070 t libcall_benefit
-0000000120110c60 t libcall_dead_p
-00000001200fdec0 t libcall_other_reg
-000000012010eec0 t life_analysis
-00000001201ffa00 s line_note
-00000001201ffb20 s line_note_exists
-00000001201ffa08 s line_note_head
-00000001201feff0 s line_position
-0000000120200094 S lineno
-00000001200435d0 T list_length
-00000001200436d0 T listify
-0000000120130d90 T local_alloc
-00000001201fff8c S local_alloc_time
-00000001201fef1c S local_reg_dump
-00000001201ffeb8 S local_reg_dump_file
-0000000120206f90 b local_reg_live_length
-0000000120206e90 b local_reg_n_refs
-00000001202001e0 S local_vars_size
-000000012005e850 T locate_and_pad_parm
-00000001200d9aa0 t location_attribute
-00000001200d78e0 t location_or_const_value_attribute
-00000001201ffca0 S long_double_type_node
-00000001201ffc88 S long_ftype_long
-00000001201ffd50 S long_integer_type_node
-00000001201ffe40 S long_long_integer_type_node
-00000001201ffd18 S long_long_unsigned_type_node
-00000001201ffe88 S long_unsigned_type_node
-00000001200444f0 T lookup_attribute
-000000012001a760 t lookup_field
-00000001200cdce0 t lookup_filename
-0000000120006ea0 T lookup_interface
-0000000120016b90 T lookup_label
-000000012000e4c0 T lookup_name
-000000012000e500 T lookup_name_current_level
-000000012000e560 T lookup_name_current_level_global
-0000000120063370 T lookup_static_chain
-00000001201ff470 s loop_continue
-00000001201ff6a4 s loop_cost
-00000001201ff538 s loop_depth
-00000001201ff6a0 s loop_depth
-00000001201ff770 s loop_depth
-00000001201fef08 S loop_dump
-0000000120200050 S loop_dump_file
-0000000120200820 S loop_dump_stream
-00000001201ff4f0 s loop_final_value
-00000001201ff468 s loop_has_call
-00000001201ff46c s loop_has_volatile
-00000001201ff4e8 s loop_increment
-00000001201ff4e0 s loop_initial_value
-00000001201ff460 s loop_invalid
-00000001201ff4d8 s loop_iteration_var
-000000012010c720 T loop_iterations
-0000000120200848 S loop_iv_list
-0000000120200808 S loop_n_iterations
-0000000120200840 S loop_number_exit_count
-0000000120200810 S loop_number_exit_labels
-00000001201ff458 s loop_number_loop_ends
-00000001201ff450 s loop_number_loop_starts
-00000001200fc370 T loop_optimize
-0000000120200818 S loop_outer_loop
-0000000120101da0 t loop_reg_used_before_p
-00000001202002c0 S loop_stack
-0000000120206608 b loop_store_mems
-00000001201ff498 s loop_store_mems_idx
-00000001201ffed0 S loop_time
-00000001201ff4a8 s loops_enclosed
-0000000120055f40 T lrotate_double
-0000000120055db0 T lshift_double
-000000012008cab0 t lshift_value
-00000001202006c0 S lshr_optab
-00000001202005a8 S ltdf2_libfunc
-0000000120200548 S lthf2_libfunc
-0000000120200518 S ltsf2_libfunc
-0000000120200470 S lttf2_libfunc
-0000000120200430 S ltxf2_libfunc
-000000012001f0a0 T lvalue_or_else
-000000012001eff0 T lvalue_p
-00000001200c0300 t m16m
-0000000120197de0 T m88k_begin_epilogue
-0000000120197cd0 T m88k_begin_prologue
-0000000120195430 T m88k_builtin_saveregs
-0000000120200a08 S m88k_case_index
-0000000120200a00 S m88k_compare_op0
-0000000120200a18 S m88k_compare_op1
-00000001202009e8 S m88k_compare_reg
-00000001202009e0 S m88k_cpu
-0000000120198220 T m88k_debugger_offset
-0000000120197e80 T m88k_end_epilogue
-0000000120197cf0 T m88k_end_prologue
-0000000120198160 T m88k_expand_epilogue
-0000000120194880 T m88k_expand_prologue
-00000001201ffb4c S m88k_fp_offset
-00000001201987f0 T m88k_function_arg
-00000001201ffb48 S m88k_function_number
-00000001201ffb40 S m88k_gp_threshold
-0000000120194400 T m88k_layout_frame
-00000001201fecd0 G m88k_pound_sign
-00000001201ffb44 S m88k_prologue_done
-0000000120200a10 S m88k_short_data
-00000001201ffb50 S m88k_stack_size
-00000001202009f0 S m88k_version
-00000001202009f8 S m88k_volatile_code
-00000001201eb4a8 d m_options
-0000000120036b90 T main
-0000000120200028 S main_input_filename
-0000000120197800 T mak_mask_p
-000000012011f8b0 t make_compound_operation
-00000001200a1df0 T make_decl_rtl
-000000012011ed90 t make_extraction
-0000000120122800 t make_field_assignment
-00000001200a1880 T make_function_rtl
-00000001200b4bf0 T make_insn_raw
-00000001200bb910 t make_nan
-000000012003d170 T make_node
-000000012000b790 T make_pointer_declarator
-000000012015c790 t make_return_insns
-00000001200b46f0 T make_safe_from
-0000000120049170 T make_signed_type
-0000000120091e70 T make_tree
-000000012003e220 T make_tree_vec
-00000001200492c0 T make_unsigned_type
-00000001200a89c0 T make_var_volatile
-000000012001f3c0 T mark_addressable
-0000000120139ec0 T mark_elimination
-000000012014b680 T mark_home_live
-00000001200e3f10 t mark_jump_label
-000000012010ecc0 t mark_label_ref
-0000000120134950 t mark_life
-0000000120100be0 t mark_loop_jump
-00000001200e7250 t mark_modified_reg
-0000000120152c40 t mark_not_eliminable
-0000000120156280 t mark_referenced_resources
-0000000120139030 t mark_reg_clobber
-0000000120139220 t mark_reg_conflicts
-0000000120139370 t mark_reg_death
-00000001201394c0 t mark_reg_live_nc
-00000001200b3d50 T mark_reg_pointer
-0000000120138df0 t mark_reg_store
-0000000120152e70 t mark_reload_reg_in_use
-000000012014b750 t mark_scratch_live
-000000012006a560 T mark_seen_cases
-0000000120110e70 t mark_set_1
-0000000120110d50 t mark_set_regs
-0000000120156860 t mark_set_resources
-00000001200df8d0 T mark_stores
-0000000120158370 t mark_target_live_regs
-0000000120061e00 T mark_temp_addr_taken
-0000000120111510 t mark_used_regs
-000000012012a230 t mark_used_regs_combine
-0000000120063640 T mark_varargs
-000000012008c9c0 t mask_rtx
-00000001201ff788 s max_allocno
-00000001201ffb0c s max_block_depth
-00000001201ff42c s max_elements_made
-00000001201eb3f4 d max_from_align
-00000001201ff320 s max_jump_chain
-00000001200b3db0 T max_label_num
-00000001201ff44c s max_loop_num
-00000001201ff448 s max_luid
-0000000120200930 S max_parallel
-00000001201ff050 s max_parm_reg
-00000001201ff2e8 s max_parm_reg
-0000000120062d10 T max_parm_reg_num
-00000001201ffab0 s max_priority
-00000001201ff358 s max_qty
-00000001201ff354 s max_reg
-0000000120200830 S max_reg_before_loop
-00000001200b3d90 T max_reg_num
-00000001202008a4 S max_regno
-0000000120200880 S max_scratch
-0000000120200158 S max_stack_depth
-00000001201ff408 s max_uid
-00000001201ff978 s max_uid
-00000001201ff5b8 s max_uid_cuid
-00000001201ff4f8 s max_uid_for_flow
-0000000120200868 S max_uid_for_loop
-000000012020014c S maximum_field_alignment
-00000001201fed24 s maxtoken
-0000000120206c8c b may_move_cost
-00000001201ff488 s may_not_optimize
-00000001200aef80 T may_trap_p
-0000000120016f60 T maybe_build_cleanup
-0000000120006ef0 T maybe_building_objc_message_expr
-0000000120106830 t maybe_eliminate_biv
-00000001201069c0 t maybe_eliminate_biv_1
-0000000120006ec0 T maybe_objc_check_decl
-0000000120006ed0 T maybe_objc_comptypes
-0000000120006ee0 T maybe_objc_method_name
-00000001202000c0 S maybepermanent_firstobj
-000000012020bdf0 B maybepermanent_obstack
-0000000120190250 t mem100_unit_blockage
-000000012018c440 T mem100_unit_blockage_range
-0000000120190b80 t mem100_unit_conflict_cost
-000000012018c1d0 T mem100_unit_ready_cost
-000000012018fca0 t mem110_unit_blockage
-000000012018be80 T mem110_unit_blockage_range
-000000012018bc10 T mem110_unit_ready_cost
-00000001201ff5d0 s mem_last_set
-0000000120200568 S memcmp_libfunc
-0000000120200520 S memcpy_libfunc
-0000000120207540 b memlocs
-0000000120093c80 T memory_address
-00000001200956f0 T memory_address_noforce
-00000001201716e0 T memory_address_p
-0000000120173730 T memory_operand
-0000000120131600 t memref_referenced_p
-0000000120160a20 t memrefs_conflict_p
-0000000120200420 S memset_libfunc
-00000001200e77c0 t mention_regs
-00000001200f5390 t merge_equiv_classes
-000000012012cba0 t merge_outer_ops
-00000001201ff23c S merror
-0000000120200a88 b message.0
-00000001201e740e d message.4
-000000012002d590 T min_precision
-00000001201fee04 s missing_braces_mentioned
-00000001200cee50 t mod_fund_type_attribute
-00000001200cf2c0 t mod_u_d_type_attribute
-00000001201e9488 D mode_class
-0000000120173e40 T mode_dependent_address_p
-0000000120049050 T mode_for_size
-00000001201eb3d0 d mode_from_align
-0000000120173e50 T mode_independent_operand
-00000001201e93a0 D mode_name
-00000001201e94fc D mode_size
-000000012020bf38 B mode_to_const_map
-000000012020bfac B mode_to_load_map
-000000012020c094 B mode_to_store_map
-00000001201e9570 D mode_unit_size
-00000001201e95e4 D mode_wider_mode
-000000012014ac70 t modes_equiv_for_class_p
-00000001200ad550 T modified_between_p
-00000001200ad830 T modified_in_p
-00000001201ff340 s modified_mem
-00000001201ff338 s modified_regs
-00000001202000e0 S momentary_firstobj
-00000001202000a8 S momentary_function_firstobj
-000000012020bb28 B momentary_obstack
-0000000120200118 S momentary_stack
-00000001201928e0 T mostly_false_jump
-0000000120156f70 t mostly_true_jump
-0000000120200618 S mov_optab
-0000000120082310 T move_block_from_reg
-0000000120082240 T move_block_to_reg
-0000000120082c80 t move_by_pieces
-0000000120071640 t move_by_pieces_1
-0000000120071540 t move_by_pieces_ninsns
-000000012006f470 T move_cleanups_up
-0000000120206bc8 b move_cost
-000000012012a4e0 t move_deaths
-00000001200fef90 t move_movables
-0000000120197240 T move_operand
-00000001201ff490 s moved_once
-000000012020c020 B movstr_optab
-00000001202005e8 S movstrict_optab
-00000001200bb870 t mtherr
-00000001202039c8 b mul_cost
-000000012004a0a0 T mul_double
-0000000120203b24 b mul_highpart_cost
-0000000120203ab0 b mul_widen_cost
-00000001201ffbbc s n.3
-00000001202008b0 S n_basic_blocks
-0000000120200958 S n_earlyclobbers
-00000001201ff428 s n_elements_made
-00000001201ff848 s n_memlocs
-0000000120200900 S n_non_fixed_regs
-00000001201ff668 s n_occurrences
-0000000120145880 T n_occurrences
-00000001202009a4 S n_regs_saved
-00000001201ff830 s n_regs_set
-0000000120200954 S n_reloads
-00000001201ff844 s n_replacements
-00000001201ff8a0 s n_spills
-00000001201ff478 s n_times_set
-00000001201ff480 s n_times_used
-00000001201fed38 s name.2
-00000001201fedb0 s named_labels
-00000001200a8700 T named_section
-0000000120200388 S nedf2_libfunc
-00000001201fefe8 s need_error_newline
-0000000120055d70 T neg_double
-00000001202005d0 S neg_optab
-00000001201ff13c s negate_cost
-0000000120093010 T negate_rtx
-0000000120200690 S nehf2_libfunc
-0000000120200680 S nesf2_libfunc
-00000001202002b0 S nesting_depth
-00000001202002a0 S nesting_stack
-0000000120200350 S netf2_libfunc
-00000001201ff8f8 s new_asm_operands_vec
-00000001200f5100 t new_basic_block
-00000001201feca8 g new_block
-000000012016a0d0 t new_insn_dead_notes
-000000012014ae20 t new_spill_reg
-00000001201fed20 s newline_warning.1
-00000001201ff5ec s newpat_used_regs
-00000001202004c8 S nexf2_libfunc
-00000001200b4ab0 T next_active_insn
-00000001202009a8 S next_block_index
-00000001201ff254 s next_block_number
-00000001201fec88 g next_block_number
-00000001201ff004 s next_decl_uid
-00000001200b4920 T next_insn
-00000001200b4b90 T next_label
-00000001200e6ed0 T next_nondeleted_insn
-00000001200b49d0 T next_nonnote_insn
-00000001201ff260 s next_pubname_number
-00000001201ff35c s next_qty
-00000001201ff6b0 s next_qty
-00000001200b4a30 T next_real_insn
-00000001201fec38 g next_type_uid
-00000001201fec8c g next_unused_dienum
-00000001201fec08 g nextchar
-00000001201ff020 s nlab.0
-00000001201ffbb0 s nlab.0
-0000000120134bb0 t no_conflict_p
-00000001201ff7f8 s no_global_alloc_regs
-00000001200afdb0 T no_labels_between_p
-00000001201ff21c s no_line_numbers
-00000001200563a0 T non_lvalue
-00000001201734b0 T nonimmediate_operand
-00000001201ea570 d nonleaf.1
-00000001202001b0 S nonlocal_goto_handler_slot
-0000000120200220 S nonlocal_goto_stack_level
-0000000120062ae0 T nonlocal_label_rtx_list
-0000000120200268 S nonlocal_labels
-0000000120173540 T nonmemory_operand
-0000000120123780 t nonzero_bits
-00000001201ff638 s nonzero_bits_mode
-00000001201ff648 s nonzero_sign_valid
-00000001201078e0 t note_addr_stored
-00000001201ff4b0 s note_insn
-00000001201e9a70 D note_insn_name
-00000001201ffa10 s note_list
-00000001200f2a60 t note_mem_written
-00000001200dfe50 t note_modified_parmregs
-00000001200ae350 T note_stores
-00000001201ffb80 s nregs
-00000001200436a0 T nreverse
-00000001201ffdc8 S null_pointer_node
-0000000120197c50 T null_prologue
-00000001201ffb30 s num_changes
-000000012018d780 T num_delay_slots
-00000001201ff8d0 s num_eliminable
-0000000120209530 b num_filled_delays
-0000000120209520 b num_insns_needing_delays
-00000001201ff8e8 s num_labels
-00000001201ff4a4 s num_mem_sets
-00000001201ff4a0 s num_movables
-00000001201ff8cc s num_not_at_initial_offset
-00000001201ff330 s num_same_regs
-00000001201ff510 s num_scratch
-0000000120124310 t num_sign_bit_copies
-0000000120173000 T num_validated_changes
-00000001201ffb84 s nxregs
-000000012003ca00 T oballoc
-00000001201fef6c S obey_regdecls
-0000000120042310 T obfree
-00000001200423e0 T object_permanent_p
-00000001202000d0 S obstack_stack
-0000000120201200 b obstack_stack_obstack
-0000000120197a60 T odd_relop
-00000001201ff8e0 s offsets_at
-00000001201ff8d8 s offsets_known_at
-0000000120173b60 T offsettable_address_p
-0000000120173a80 T offsettable_memref_p
-0000000120173af0 T offsettable_nonstrict_memref_p
-00000001201ff8f0 s old_asm_operands_vec
-00000001201ffa28 s old_live_regs
-0000000120200348 S one_cmpl_optab
-0000000120206d50 b op_costs
-000000012003b850 t open_dump_file
-000000012004b950 T operand_equal_p
-00000001200b1df0 T operand_subword
-00000001200b41c0 T operand_subword_force
-000000012013ce20 T operands_match_p
-00000001201ec06c D optab_bit_and_expr
-00000001201ec09c D optab_bit_ior_expr
-00000001201ec544 D optab_bit_not_expr
-00000001201ec0cc D optab_bit_xor_expr
-00000001201ec41c D optab_eq_expr
-00000001201ec2fc D optab_ge_expr
-00000001201ec38c D optab_gt_expr
-00000001201ec26c D optab_le_expr
-00000001201ec0fc D optab_lshift_expr
-00000001201ec1dc D optab_lt_expr
-00000001201ebe9c D optab_minus_expr
-00000001201ebf0c D optab_mult_expr
-00000001201ec48c D optab_ne_expr
-00000001201ec4fc D optab_negate_expr
-00000001201ebe2c D optab_plus_expr
-00000001201ec650 D optab_postdecrement_expr
-00000001201ec6b8 D optab_postincrement_expr
-00000001201ec580 D optab_predecrement_expr
-00000001201ec5e8 D optab_preincrement_expr
-00000001201ec02c D optab_rdiv_expr
-00000001201ec14c D optab_rshift_expr
-00000001201ebf8c D optab_trunc_div_expr
-00000001201ebfdc D optab_trunc_mod_expr
-00000001201ec19c D optab_truth_and_expr
-00000001201ec568 D optab_truth_not_expr
-00000001201ec1bc D optab_truth_or_expr
-00000001201fec18 G optimize
-000000012005c2c0 t optimize_bit_field
-0000000120056ff0 t optimize_bit_field_compare
-0000000120135250 t optimize_reg_copy_1
-0000000120135790 t optimize_reg_copy_2
-000000012015d5d0 t optimize_skip
-000000012014d780 t order_regs_for_reload
-00000001201ff2f0 s orig_asm_operands_vector
-00000001201ff098 s out_arg_offset
-00000001201eb388 d out_rcs_id
-00000001202001b8 S outer_function_chain
-00000001201ff1c0 s outfile
-000000012017d430 t output_107
-000000012017d460 t output_108
-000000012017d1b0 t output_11
-000000012017d490 t output_114
-000000012017d4c0 t output_117
-000000012017d230 t output_12
-000000012017d4f0 t output_120
-000000012017d520 t output_121
-000000012017d550 t output_123
-000000012017d580 t output_126
-000000012017d5b0 t output_127
-000000012017d5e0 t output_129
-000000012017d610 t output_131
-000000012017d640 t output_132
-000000012017d670 t output_134
-000000012017d6a0 t output_147
-000000012017d6d0 t output_149
-000000012017d700 t output_151
-000000012017d730 t output_154
-000000012017d760 t output_156
-000000012017d790 t output_158
-000000012017d7c0 t output_169
-000000012017d7f0 t output_223
-000000012017d820 t output_225
-000000012017d960 t output_228
-000000012017d990 t output_230
-000000012017dad0 t output_233
-000000012017db00 t output_235
-000000012017dc40 t output_245
-000000012017dc70 t output_247
-000000012017dca0 t output_249
-000000012017dcd0 t output_252
-000000012017dd00 t output_254
-000000012017dd70 t output_256
-000000012017dde0 t output_257
-000000012017de50 t output_258
-000000012017dec0 t output_259
-000000012017dfb0 t output_261
-000000012017dfe0 t output_262
-000000012017e010 t output_264
-000000012017e040 t output_269
-000000012017e080 t output_271
-000000012017e0b0 t output_273
-000000012017e0e0 t output_281
-000000012017d2b0 t output_46
-000000012017d380 t output_58
-000000012017d3b0 t output_61
-000000012017d3e0 t output_94
-000000012016edc0 T output_addr_const
-000000012016ed70 T output_address
-00000001200a7340 t output_addressed_constants
-0000000120196ed0 T output_and
-00000001200cf650 t output_array_type_die
-00000001201941b0 T output_ascii
-000000012016e3b0 T output_asm_insn
-000000012016ebc0 T output_asm_label
-00000001200d6fa0 t output_block
-0000000120198690 T output_block_profiler
-00000001200d9460 t output_bound_representation
-00000001201fef50 S output_bytecode
-0000000120192610 T output_call
-00000001200d3530 t output_compile_unit_die
-00000001200a74b0 T output_constant
-00000001200a5ff0 T output_constant_def
-00000001200a6550 t output_constant_def_contents
-00000001200a6ff0 T output_constant_pool
-00000001200a79b0 t output_constructor
-00000001200ca140 t output_decl
-00000001200c9f60 t output_decls_for_scope
-00000001200a94c0 T output_deferred_addressed_constants
-0000000120164770 T output_dependence
-00000001200d6db0 t output_die
-00000001200d98c0 t output_enumeral_list
-00000001200d0550 t output_enumeration_type_die
-0000000120039010 T output_file_directive
-0000000120192b90 T output_file_start
-00000001200d0ad0 t output_formal_parameter_die
-00000001201982d0 T output_function_block_profiler
-0000000120195060 T output_function_profiler
-00000001200d0f40 t output_global_subroutine_die
-00000001200d1b20 t output_global_variable_die
-0000000120026240 t output_init_element
-00000001200df520 T output_inline_function
-00000001200cfef0 t output_inlined_enumeration_type_die
-00000001200d0110 t output_inlined_structure_type_die
-00000001200d8fb0 t output_inlined_subroutine_die
-00000001200d0330 t output_inlined_union_type_die
-0000000120196f90 T output_ior
-0000000120197be0 T output_label
-00000001200d2050 t output_label_die
-00000001200d8b40 t output_lexical_block_die
-0000000120196c00 T output_load_const_dimode
-0000000120196b00 T output_load_const_double
-0000000120196a80 T output_load_const_float
-0000000120196990 T output_load_const_int
-00000001200d4cd0 t output_local_subroutine_die
-00000001200d2540 t output_local_variable_die
-00000001200c8e30 t output_mem_loc_descriptor
-00000001200d2a60 t output_member_die
-000000012016ecd0 t output_operand
-000000012016f9b0 T output_operand_lossage
-00000001200d6d60 t output_padded_null_die
-0000000120023cd0 t output_pending_init_elements
-00000001200d2fd0 t output_ptr_to_mbr_type_die
-0000000120038f10 T output_quoted_string
-00000001201ff86c s output_reloadnum
-00000001200cfaa0 t output_set_type_die
-000000012016e090 t output_source_line
-00000001200d43b0 t output_string_type_die
-00000001200d46e0 t output_structure_type_die
-00000001200d58b0 t output_subroutine_type_die
-00000001200c97e0 t output_type
-00000001200d5e50 t output_typedef_die
-00000001200d6370 t output_union_type_die
-00000001200d6960 t output_unspecified_parameters_die
-0000000120197020 T output_xor
-000000012002cda0 T overflow_warning
-00000001201febf8 g p.0
-000000012005ec10 t pad_below
-000000012005eb40 t pad_to_arg_alignment
-00000001201ff040 s parm_birth_insn
-00000001201ff058 s parm_reg_stack_loc
-00000001201ff2e0 s parmdecl_map
-0000000120017070 T parmlist_tags_warning
-000000012020006c S parse_time
-000000012001bc20 T parser_build_binary_op
-0000000120197960 T partial_ccmode_register_operand
-00000001201eb678 d patterns.3
-0000000120197bc0 T pc_or_label_ref
-0000000120200770 S pc_rtx
-00000001201fef64 S pedantic
-000000012001f1f0 t pedantic_lvalue_warning
-0000000120200150 S pedantic_lvalues
-0000000120056480 T pedantic_non_lvalue
-0000000120031860 T pedwarn
-0000000120021cf0 T pedwarn_init
-0000000120031df0 T pedwarn_with_decl
-0000000120032230 T pedwarn_with_file_and_line
-00000001202156c8 B peep_operand
-0000000120156270 T peephole
-00000001201ffb10 s pending_blocks
-00000001201ff110 s pending_chain
-00000001201ff988 s pending_dead_regs
-00000001201ffdd8 S pending_invalid_xref
-00000001201ffdb8 S pending_invalid_xref_file
-00000001201ffc60 S pending_invalid_xref_line
-00000001201ffa78 s pending_lists_length
-00000001201ffa58 s pending_read_insns
-00000001201ffa60 s pending_read_mems
-00000001201ff298 s pending_sibling_stack
-00000001201ff2a0 s pending_siblings
-00000001201ff2a4 s pending_siblings_allocated
-00000001201ff018 s pending_sizes
-00000001202002e0 S pending_stack_adjust
-00000001201ff2b4 s pending_types
-00000001201ff2b0 s pending_types_allocated
-00000001201ff2a8 s pending_types_list
-00000001201ffa68 s pending_write_insns
-00000001201ffa70 s pending_write_mems
-0000000120016e60 T pending_xref_error
-000000012003cbe0 T perm_calloc
-0000000120043860 T perm_tree_cons
-000000012003caf0 T permalloc
-000000012003c480 T permanent_allocation
-000000012020bd98 B permanent_obstack
-00000001200386e0 T pfatal_with_name
-0000000120198a50 T pic_address_needs_scratch
-0000000120200768 S pic_offset_table_rtx
-0000000120039510 t pipe_closed
-00000001201ff0f0 s placeholder_list.0
-00000001200c0440 t plain_type_1
-00000001200952f0 T plus_constant_for_output_wide
-0000000120093810 T plus_constant_wide
-000000012001e270 t pointer_diff
-000000012001deb0 t pointer_int_sum
-00000001201ff1a0 s pool_offset
-0000000120017b10 T pop_c_function_context
-0000000120038df0 T pop_float_handler
-0000000120061c90 T pop_function_context
-00000001200596f0 T pop_function_context_from
-0000000120023580 T pop_init_level
-000000012002f420 T pop_iterator_stack
-000000012000d3d0 T pop_label_level
-00000001200424e0 T pop_momentary
-0000000120042570 T pop_momentary_nofree
-0000000120042200 T pop_obstacks
-0000000120062100 T pop_temp_slots
-00000001200b63b0 T pop_topmost_sequence
-000000012000cfb0 T poplevel
-000000012000b9c0 T position_after_white_space
-000000012014a6a0 t possible_group_p
-0000000120134a40 t post_mark_life
-0000000120161fb0 t potential_hazard
-0000000120207ed0 b potential_reload_regs
-0000000120109670 t precondition_loop_p
-000000012007e2d0 t preexpand_calls
-00000001201ff690 s prefclass
-000000012019dce0 T preferred_typecode
-00000001201fece8 s prefix_attributes
-0000000120089940 T prepare_call_address
-0000000120164c60 t prepare_unit
-00000001201001f0 t prescan_loop
-000000012003c6b0 T preserve_data
-000000012003c790 T preserve_initializer
-0000000120042420 T preserve_momentary
-0000000120194ca0 t preserve_registers
-0000000120061f10 T preserve_rtl_expr_result
-000000012006f0c0 T preserve_subexpressions_p
-000000012005a270 T preserve_temp_slots
-00000001200b4b20 T prev_active_insn
-00000001201fec94 g prev_file_entry_num.1
-00000001201ff3a0 s prev_insn
-00000001200b4bc0 T prev_label
-00000001201fecd8 g prev_lineno.1
-00000001200b4a00 T prev_nonnote_insn
-00000001200b4a70 T prev_real_insn
-00000001200b4970 T previous_insn
-00000001201ff600 s previous_num_undos
-00000001201ff280 s primary_filename
-00000001201e7428 d print_char_table
-00000001201fec28 G print_error_function
-00000001200162f0 T print_lang_decl
-0000000120016310 T print_lang_identifier
-0000000120006e90 T print_lang_statistics
-0000000120016300 T print_lang_type
-00000001200458e0 T print_node
-0000000120045560 T print_node_brief
-000000012003cde0 T print_obstack_name
-0000000120045470 T print_obstack_statistics
-0000000120195a90 T print_operand
-0000000120196430 T print_operand_address
-00000001200ad020 T print_rtl
-00000001200ac610 t print_rtx
-0000000120038150 t print_switch_values
-0000000120038570 T print_time
-0000000120162160 t priority
-00000001200240c0 T process_init_element
-0000000120105c10 t product_cheap_p
-00000001201fffec S profile_block_flag
-00000001201fef60 S profile_flag
-00000001202009b0 S profile_label_no
-00000001201ffec0 S progname
-00000001201ff0a0 s prologue
-00000001201ffb98 s prologue_marked
-0000000120095b10 T promote_mode
-000000012010ff70 t propagate_block
-0000000120070290 T protect_from_queue
-00000001201377f0 t prune_preferences
-00000001202006f0 S ptr_mode
-00000001201ffcd0 S ptr_type_node
-00000001201ffbd0 s ptrconsts
-00000001201ffc58 S ptrdiff_type_node
-00000001200434e0 T purpose_member
-0000000120082740 T push_block
-0000000120017a20 T push_c_function_context
-0000000120038d60 T push_float_handler
-0000000120061c70 T push_function_context
-00000001200593c0 T push_function_context_to
-0000000120022dd0 T push_init_level
-000000012002ec40 T push_iterator_stack
-0000000120016830 T push_label_level
-000000012003d050 T push_momentary
-000000012003c210 T push_obstacks
-000000012003c360 T push_obstacks_nochange
-00000001201736d0 T push_operand
-0000000120016f70 T push_parm_decl
-000000012013a430 t push_reload
-0000000120145fe0 t push_secondary_reload
-00000001200620e0 T push_temp_slots
-00000001200b6220 T push_to_sequence
-00000001200b62f0 T push_topmost_sequence
-00000001200697b0 T pushcase
-0000000120069ba0 T pushcase_range
-000000012000d580 T pushdecl
-00000001200169a0 T pushdecl_top_level
-00000001200165f0 T pushlevel
-00000001200168c0 T pushtag
-0000000120048eb0 T put_pending_sizes
-000000012005a830 t put_reg_into_stack
-000000012005a5a0 T put_var_into_stack
-00000001201ffba0 s pwd.0
-00000001201ff990 s q_ptr
-00000001201ff994 s q_size
-00000001201ff718 s qty_alternate_class
-00000001201ff6f0 s qty_birth
-00000001201ff728 s qty_changes_size
-00000001201331b0 t qty_compare
-0000000120135d80 t qty_compare_1
-00000001201ff388 s qty_comparison_code
-00000001201ff390 s qty_comparison_const
-00000001201ff398 s qty_comparison_qty
-00000001201ff378 s qty_const
-00000001201ff380 s qty_const_insn
-00000001201ff6f8 s qty_death
-00000001201ff360 s qty_first_reg
-00000001201ff730 s qty_first_reg
-00000001201ff368 s qty_last_reg
-00000001201ff6e8 s qty_min_class
-00000001201ff370 s qty_mode
-00000001201ff708 s qty_mode
-00000001201ff710 s qty_n_calls_crossed
-00000001201ff6e0 s qty_n_refs
-00000001201ff6c0 s qty_phys_copy_sugg
-00000001201ff6d0 s qty_phys_num_copy_sugg
-00000001201ff6d8 s qty_phys_num_sugg
-00000001201ff6b8 s qty_phys_reg
-00000001201ff6c8 s qty_phys_sugg
-00000001201ff720 s qty_scratch_rtx
-00000001201ff700 s qty_size
-0000000120133350 t qty_sugg_compare
-0000000120135b10 t qty_sugg_compare_1
-0000000120082bb0 t queued_subexp_p
-00000001201fef70 S quiet_flag
-0000000120058ff0 t range_test
-00000001201690b0 t rank_for_schedule
-0000000120205f6e b rbit
-00000001201eb0d8 d rcs_id.0
-00000001201ff234 s re
-0000000120164430 T read_dependence
-00000001200ab100 T read_rtx
-00000001200aaf00 T read_skip_spaces
-000000012000bd20 t readescape
-00000001200a8640 T readonly_data_section
-000000012001f260 T readonly_warning
-0000000120043160 T real_onep
-00000001201978b0 T real_or_0_operand
-0000000120197080 T real_power_of_2_operand
-00000001200432e0 T real_twop
-0000000120042870 T real_value_from_int_cst
-0000000120056130 T real_value_truncate
-0000000120043080 T real_zerop
-0000000120043460 T really_constant_p
-00000001200328e0 T really_sorry
-00000001200229e0 T really_start_incremental_init
-00000001201ff230 s rebit
-000000012017a390 T recog
-00000001201743e0 T recog_1
-0000000120174bf0 T recog_2
-0000000120175520 T recog_3
-0000000120175ca0 T recog_4
-0000000120176f90 T recog_5
-00000001201792d0 T recog_6
-0000000120215768 B recog_dup_loc
-00000001202009d8 S recog_dup_num
-00000001201260e0 t recog_for_combine
-0000000120172e50 T recog_memoized
-0000000120215718 B recog_operand
-0000000120215778 B recog_operand_loc
-0000000120006f00 T recognize_objc_keyword
-000000012012f5f0 t record_address_regs
-0000000120103860 t record_biv
-0000000120138d10 t record_conflicts
-00000001200aa180 t record_constant
-00000001200a5640 t record_constant_1
-00000001200aa490 t record_constant_rtx
-00000001201295b0 t record_dead_and_set_regs
-000000012012cf60 t record_dead_and_set_regs_1
-00000001201ff670 s record_dead_insn
-00000001200fdd00 T record_excess_regs
-000000012002b190 T record_function_format
-0000000120103a90 t record_giv
-0000000120107a90 t record_initial
-00000001200f1b10 t record_jump_cond
-000000012013a2d0 t record_one_conflict
-000000012012e7c0 t record_reg_classes
-00000001201290e0 t record_value_for_reg
-00000001201ff410 s recorded_label_ref
-000000012000dfc0 t redeclaration_error_message
-00000001200e4ec0 T redirect_exp
-00000001200e7000 T redirect_jump
-00000001200e5150 t redirect_tablejump
-0000000120157570 t redundant_insn
-0000000120143e80 T refers_to_mem_for_reload_p
-00000001200e9f90 t refers_to_mem_p
-00000001200e99e0 t refers_to_p
-0000000120143900 T refers_to_regno_for_reload_p
-00000001200adaa0 T refers_to_regno_p
-00000001201ea138 D reg_alloc_order
-00000001201ff790 s reg_allocno
-0000000120130460 T reg_alternate_class
-00000001202008b8 S reg_basic_block
-000000012012ab60 t reg_bitfield_target_p
-0000000120200870 S reg_biv_class
-00000001202008d0 S reg_changes_size
-0000000120213bb4 B reg_class_contents
-00000001201ea6e8 d reg_class_names
-00000001201ea7c8 d reg_class_names.0
-00000001201ea068 d reg_class_names.1
-0000000120213c2c B reg_class_size
-00000001202137e8 B reg_class_subclasses
-0000000120130720 T reg_class_subset_p
-0000000120213af0 B reg_class_subunion
-0000000120213c48 B reg_class_superclasses
-00000001202138ac B reg_class_superunion
-000000012012fde0 T reg_classes_intersect_p
-000000012010d990 t reg_dead_after_loop
-0000000120129fa0 t reg_dead_at_p
-000000012012d120 t reg_dead_at_p_1
-00000001201ff67c s reg_dead_endregno
-00000001201ff680 s reg_dead_flag
-00000001201ff678 s reg_dead_regno
-00000001201ea720 d reg_eliminate
-0000000120200988 S reg_equiv_address
-0000000120200990 S reg_equiv_constant
-00000001201ff898 s reg_equiv_init
-0000000120200970 S reg_equiv_mem
-0000000120200968 S reg_equiv_memory_loc
-0000000120173e80 T reg_fits_class_p
-00000001201ff880 s reg_has_output_reload
-00000001200fdf70 t reg_in_basic_block_p
-00000001201ff3d0 s reg_in_table
-0000000120133f10 t reg_is_born
-00000001201ff888 s reg_is_output_reload
-0000000120135f50 t reg_is_set
-0000000120200828 S reg_iv_info
-0000000120200838 S reg_iv_type
-00000001201ffa48 s reg_known_equiv_p
-00000001201ffa40 s reg_known_value
-00000001201ffa50 s reg_known_value_size
-00000001201ff5c0 s reg_last_death
-00000001201ff878 s reg_last_reload_reg
-00000001201ff5c8 s reg_last_set
-00000001201ff620 s reg_last_set_invalid
-00000001201ff610 s reg_last_set_label
-00000001201ff650 s reg_last_set_mode
-00000001201ff658 s reg_last_set_nonzero_bits
-00000001201ff660 s reg_last_set_sign_bit_copies
-00000001201ff618 s reg_last_set_table_tick
-00000001201ff608 s reg_last_set_value
-00000001201ff9b8 s reg_last_sets
-00000001201ff9b0 s reg_last_uses
-0000000120200888 S reg_live_length
-00000001201ff2c8 s reg_map
-00000001201ff890 s reg_max_ref_width
-00000001201ff7b0 s reg_may_share
-0000000120133d40 t reg_meets_class_p
-00000001200ad0f0 T reg_mentioned_p
-0000000120200898 S reg_n_calls_crossed
-0000000120200890 S reg_n_deaths
-00000001202008c0 S reg_n_refs
-0000000120200918 S reg_n_sets
-00000001201ea270 D reg_names
-00000001201ff3b8 s reg_next_eqv
-00000001201ff738 s reg_next_in_qty
-00000001201ff518 s reg_next_use
-00000001201ff630 s reg_nonzero_bits
-00000001201e9ae0 D reg_note_name
-00000001201ff748 s reg_offset
-00000001201974e0 T reg_or_0_operand
-0000000120197820 T reg_or_bbx_mask_operand
-00000001201ff570 s reg_order
-0000000120143cd0 T reg_overlap_mentioned_for_reload_p
-00000001200ade60 T reg_overlap_mentioned_p
-00000001201ff9c0 s reg_pending_sets
-00000001201ff9c8 s reg_pending_sets_all
-0000000120130430 T reg_preferred_class
-00000001201ff3c0 s reg_prev_eqv
-00000001201ff3b0 s reg_qty
-00000001201ff740 s reg_qty
-0000000120213970 B reg_raw_mode
-00000001200aff00 T reg_referenced_between_p
-00000001200ad320 T reg_referenced_p
-00000001202076d0 b reg_reloaded_contents
-00000001202077d0 b reg_reloaded_insn
-0000000120200940 S reg_renumber
-00000001202091b0 b reg_restore_code
-00000001201fec48 G reg_rtx_no
-0000000120208eb0 b reg_save_code
-00000001201304c0 T reg_scan
-000000012012f920 t reg_scan_mark_refs
-00000001200afff0 T reg_set_between_p
-00000001201ff1d0 s reg_set_flag
-00000001200b0600 T reg_set_last
-00000001200b0d20 t reg_set_last_1
-00000001201ff1e0 s reg_set_last_first_regno
-00000001201ff1e4 s reg_set_last_last_regno
-00000001201ff1d4 s reg_set_last_unknown
-00000001201ff1d8 s reg_set_last_value
-00000001200b0140 T reg_set_p
-00000001200b0cc0 t reg_set_p_1
-00000001201ff1c8 s reg_set_reg
-00000001201ff640 s reg_sign_bit_copies
-00000001201ff3c8 s reg_tick
-00000001200afdf0 T reg_used_between_p
-00000001201ff568 s reg_where_born
-00000001201ff560 s reg_where_dead
-000000012012db20 T regclass
-00000001201304a0 T regclass_init
-00000001201731f0 T register_operand
-0000000120112800 T regno_clobbered_at_setjmp
-0000000120145180 T regno_clobbered_p
-00000001202008f0 S regno_first_uid
-00000001202008f8 S regno_last_note_uid
-0000000120200908 S regno_last_uid
-0000000120200738 S regno_pointer_flag
-00000001202006f8 S regno_pointer_flag_length
-0000000120200760 S regno_reg_rtx
-00000001202088b0 b regno_save_mem
-00000001202085b0 b regno_save_mode
-0000000120112780 T regno_uninitialized
-000000012016ac40 t regno_use_in
-00000001201ff580 s regs_change_size
-00000001202156d8 B regs_ever_live
-0000000120207f50 b regs_explicitly_used
-00000001201ff3e0 s regs_invalidated_by_call
-00000001201ff578 s regs_live
-00000001201ff750 s regs_live
-00000001201ff758 s regs_live_at
-00000001202008e0 S regs_live_at_setjmp
-00000001202008a8 S regs_may_share
-00000001201ff828 s regs_set
-00000001201ff7f0 s regs_someone_prefers
-00000001201ff800 s regs_used_so_far
-00000001202008a0 S regset_bytes
-00000001202008e8 S regset_size
-00000001200e8e90 t rehash_using_reg
-000000012000b8f0 T reinit_parse_for_function
-000000012015ba10 t relax_delay_slots
-0000000120147750 T reload
-000000012014db60 t reload_as_needed
-00000001202009d0 S reload_completed
-0000000120214818 B reload_earlyclobbers
-0000000120200960 S reload_first_uid
-0000000120200980 S reload_firstobj
-0000000120214200 B reload_in
-0000000120215580 B reload_in_optab
-00000001201ff870 S reload_in_progress
-0000000120214e08 B reload_in_reg
-0000000120214868 B reload_inc
-00000001202153a0 B reload_inheritance_insn
-0000000120214fe8 B reload_inherited
-00000001202143e0 B reload_inmode
-0000000120208290 b reload_mode
-000000012020095c S reload_n_operands
-00000001202147dc B reload_nocombine
-0000000120208380 b reload_nregs
-00000001202155f8 B reload_obstack
-00000001202144d0 B reload_opnum
-00000001202146b0 B reload_optional
-0000000120215650 B reload_order
-0000000120213e40 B reload_out
-0000000120215024 B reload_out_optab
-0000000120214020 B reload_outmode
-00000001202151c0 B reload_override_in
-0000000120214b38 B reload_reg_class
-0000000120152d80 t reload_reg_class_lower
-00000001201537f0 t reload_reg_free_before_p
-00000001201531c0 t reload_reg_free_p
-0000000120153c50 t reload_reg_reaches_end_p
-0000000120214c28 B reload_reg_rtx
-00000001201ff900 s reload_reg_used
-00000001201ff928 s reload_reg_used_at_all
-00000001201ff930 s reload_reg_used_for_inherit
-0000000120208510 b reload_reg_used_in_input
-0000000120208470 b reload_reg_used_in_input_addr
-00000001201ff918 s reload_reg_used_in_insn
-00000001201ff908 s reload_reg_used_in_op_addr
-00000001201ff910 s reload_reg_used_in_op_addr_reload
-00000001201ff920 s reload_reg_used_in_other_addr
-0000000120208560 b reload_reg_used_in_output
-00000001202084c0 b reload_reg_used_in_output_addr
-0000000120214a48 B reload_secondary_in_icode
-00000001202146ec B reload_secondary_in_reload
-0000000120214958 B reload_secondary_out_icode
-0000000120213d50 B reload_secondary_out_reload
-0000000120214110 B reload_secondary_p
-00000001202150d0 B reload_spill_index
-00000001202145c0 B reload_when_needed
-00000001201ea6a0 d reload_when_needed_name
-000000012014e650 t reloads_conflict
-00000001201979e0 T relop
-0000000120197ac0 T relop_no_unsigned
-000000012010cb90 t remap_split_bivs
-000000012006f3d0 T remember_end_note
-000000012000b820 T remember_protocol_qualifiers
-000000012012be00 T remove_death
-00000001200f5250 t remove_from_table
-00000001200e8db0 t remove_invalid_refs
-00000001200b0b00 T remove_note
-000000012005f400 T reorder_blocks
-00000001200b4cd0 T reorder_insns
-00000001200b4d70 T reorder_insns_with_line_notes
-00000001201ff97c s reorg_pass_number
-00000001201581f0 t reorg_redirect_jump
-00000001200af410 T replace_regs
-00000001201ff840 s replace_reloads
-00000001200b0b70 T replace_rtx
-0000000120207090 b replacements
-00000001200389c0 T report_error_function
-00000001200617b0 T reposition_prologue_and_epilogue_notes
-0000000120024f80 T require_complete_type
-00000001201fee8c s require_constant_elements
-00000001201fee88 s require_constant_value
-0000000120134d50 t requires_inout
-00000001200b27e0 T reset_used_flags
-0000000120032ef0 T rest_of_compilation
-0000000120032a40 T rest_of_decl_compilation
-00000001200390c0 T rest_of_type_compilation
-00000001200df230 t restore_constants
-00000001200b4580 T restore_emit_status
-0000000120082170 T restore_expr_status
-0000000120200250 S restore_machine_status
-0000000120155ac0 t restore_referenced_regs
-00000001200b31a0 T restore_reg_data
-00000001200b32b0 t restore_reg_data_1
-000000012006e3a0 T restore_stmt_status
-00000001200495c0 T restore_storage_status
-000000012003c060 T restore_tree_status
-00000001200a9670 T restore_varasm_status
-000000012018abe0 T result_ready_cost
-00000001200425d0 T resume_momentary
-0000000120042190 T resume_temporary_allocation
-0000000120139db0 T retry_global_alloc
-00000001202001a0 S return_label
-00000001200b4280 T reverse_comparison
-00000001200e3c20 T reverse_condition
-00000001201ffb74 s reversep.1
-0000000120128fd0 t reversible_comparison_p
-000000012020b920 B ridpointers
-00000001201fec5c g rlast
-00000001201ff22e s rmbit
-00000001201ff22c s rmsk
-00000001201fec58 G rndprc
-00000001200cecf0 t root_type
-0000000120200308 S rotl_optab
-0000000120200600 S rotr_optab
-0000000120095c80 T round_push
-000000012005f1b0 t round_trampoline_addr
-00000001200490d0 T round_up
-0000000120056050 T rrotate_double
-0000000120055ea0 T rshift_double
-00000001201feef8 S rtl_dump
-00000001201feefc S rtl_dump_and_exit
-00000001201fffe0 S rtl_dump_file
-0000000120200190 S rtl_expr_chain
-00000001200422d0 T rtl_in_current_obstack
-00000001200422f0 T rtl_in_saveable_obstack
-00000001202000e8 S rtl_obstack
-00000001200aa6a0 T rtvec_alloc
-00000001200af9c0 T rtx_addr_can_trap_p
-00000001200afad0 T rtx_addr_varies_p
-00000001200ac4c0 T rtx_alloc
-00000001201e99f8 D rtx_class
-00000001200e7360 T rtx_cost
-00000001200fe8c0 t rtx_equal_for_loop_p
-00000001201604d0 t rtx_equal_for_memref_p
-00000001200e6340 T rtx_equal_for_thread_p
-00000001202006ec S rtx_equal_function_value_matters
-00000001200ae090 T rtx_equal_p
-00000001201e9658 D rtx_format
-00000001200ac5a0 T rtx_free
-0000000120213340 B rtx_length
-00000001201e9000 D rtx_name
-00000001200e5350 T rtx_renumbered_equal_p
-00000001200960d0 T rtx_to_tree_code
-00000001200af710 T rtx_unstable_p
-00000001200af860 T rtx_varies_p
-00000001201ff228 s rw
-00000001201458d0 T safe_from_earlyclobber
-0000000120074f60 t safe_from_p
-00000001200e93d0 t safe_hash
-00000001201ff328 s same_regs
-00000001201fff58 S save_argc
-00000001201fff50 S save_argv
-0000000120155370 T save_call_clobbered_regs
-00000001200db2e0 t save_constants
-00000001200b44e0 T save_emit_status
-0000000120043d00 T save_expr
-0000000120200260 S save_expr_regs
-00000001200820a0 T save_expr_status
-00000001201feef0 s save_exprs
-00000001200da5d0 T save_for_inline_copying
-00000001200db060 T save_for_inline_nocopy
-0000000120200278 S save_machine_status
-0000000120083fb0 t save_noncopied_parts
-0000000120209d78 b save_regs
-000000012006e2e0 T save_stmt_status
-00000001200495b0 T save_storage_status
-000000012003bdd0 T save_tree_status
-00000001200a9620 T save_varasm_status
-00000001200421d0 T saveable_allocation
-00000001202000f8 S saveable_obstack
-0000000120043900 T saveable_tree_cons
-000000012003ccf0 T savealloc
-00000001201ff100 s saveregs_value
-00000001201ff1b0 s sawclose
-00000001201ffb60 s sb_high
-00000001201ffb68 s sb_low
-00000001201ffb58 s sb_name
-00000001201ffad8 s sbb_head
-00000001201ffae0 s sbb_label_num
-00000001201fecc0 g sbb_tail
-00000001201e7768 d scan_char_table
-00000001200fc970 t scan_loop
-000000012014d5a0 t scan_paradoxical_subregs
-00000001201fef24 S sched2_dump
-00000001201fff80 S sched2_dump_file
-00000001201fff78 S sched2_time
-00000001201689d0 t sched_analyze
-0000000120165080 t sched_analyze_1
-0000000120162450 t sched_analyze_2
-000000012016a620 t sched_analyze_insn
-00000001201ffaa0 s sched_before_next_call
-00000001201fef18 S sched_dump
-00000001201fff30 S sched_dump_file
-0000000120168d80 t sched_note_set
-00000001201ff9a8 s sched_reg_live_length
-00000001201ff9a0 s sched_reg_n_calls_crossed
-00000001201ff998 s sched_reg_n_deaths
-00000001201fffa8 S sched_time
-0000000120165a80 t schedule_block
-0000000120169250 t schedule_insn
-00000001201631a0 T schedule_insns
-0000000120169560 t schedule_select
-000000012016a480 t schedule_unit
-0000000120200938 S scratch_block
-00000001201ff760 s scratch_index
-0000000120200948 S scratch_list
-0000000120200950 S scratch_list_length
-0000000120173270 T scratch_operand
-00000001200a8380 T sdata_section
-00000001201fec80 G sdb_begin_function_line
-00000001202064f8 b sdb_dims
-00000001201ff24c s sdb_n_dims
-00000001201fec84 g sdb_type_size
-00000001200c4ef0 T sdbout_begin_block
-00000001200c5510 T sdbout_begin_function
-00000001200c6170 t sdbout_block
-00000001200c52e0 T sdbout_end_block
-00000001200c5a10 T sdbout_end_epilogue
-00000001200c5770 T sdbout_end_function
-00000001200c6070 T sdbout_init
-00000001200c5c90 T sdbout_label
-00000001200c6150 T sdbout_mark_begin_function
-00000001200c2ea0 t sdbout_one_type
-00000001200c66d0 t sdbout_parms
-00000001200c2e50 t sdbout_queue_anonymous_type
-00000001200c7cb0 t sdbout_reg_parms
-00000001200c0a30 T sdbout_symbol
-00000001200c25d0 T sdbout_toplevel_data
-00000001200c6250 t sdbout_type
-00000001200c6080 T sdbout_types
-00000001202006a0 S sdiv_optab
-00000001201ff130 s sdiv_pow2_cheap
-0000000120200610 S sdivmod_optab
-00000001201ffbb4 s section
-000000012019ced0 t seg_defsym
-000000012019d0e0 t seg_refsym
-0000000120019cb0 T self_promoting_args_p
-0000000120019d90 t self_promoting_type_p
-00000001201ff220 s sequence_element_free_list
-0000000120205f28 b sequence_result
-00000001201ff1f8 S sequence_rtl_expr
-0000000120200728 S sequence_stack
-00000001201ffb70 s sequencep.0
-00000001201ff010 S set_alignment
-0000000120016810 T set_block
-00000001200e0010 t set_block_abstract_flags
-00000001200dfec0 t set_block_origin_self
-00000001200df9e0 T set_decl_abstract_flags
-00000001200dffa0 t set_decl_origin_self
-0000000120038d10 T set_float_handler
-0000000120042790 T set_identifier_size
-0000000120025950 T set_init_index
-0000000120025b30 T set_init_label
-000000012014b7f0 t set_label_offsets
-00000001200b4870 T set_last_insn
-00000001200b4490 T set_new_first_and_last_insn
-00000001200b44b0 T set_new_first_and_last_label_num
-00000001200e9ba0 t set_nonvarying_address_components
-000000012012bf70 t set_nonzero_bits_and_sign_copies
-0000000120139550 t set_preference
-0000000120156150 t set_reg_live
-0000000120037fe0 T set_target_switch
-000000012000bba0 T set_yydebug
-0000000120213170 B setcc_gen_code
-0000000120063180 T setjmp_args_warning
-0000000120063220 T setjmp_protect
-00000001200632e0 T setjmp_protect_args
-00000001200e6eb0 T sets_cc0_p
-00000001201143f0 t setup_incoming_promotions
-0000000120154f30 T setup_save_areas
-0000000120016d60 T shadow_label
-0000000120016ed0 T shadow_tag
-0000000120010760 T shadow_tag_warned
-00000001201fedb8 s shadowed_labels
-0000000120203848 b shift_cost
-00000001202038c8 b shiftadd_cost
-0000000120203948 b shiftsub_cost
-00000001201ffd38 S short_integer_type_node
-00000001201ffd70 S short_unsigned_type_node
-00000001201fffd8 S shorten_branch_time
-000000012016c150 T shorten_branches
-000000012002b730 T shorten_compare
-00000001200aedf0 T side_effects_p
-00000001200a0bc0 T sign_expand_binop
-00000001201ffdf0 S signed_char_type_node
-00000001200e6b20 T signed_condition
-000000012020ada0 b signed_mode_to_code_map
-00000001200251f0 T signed_or_unsigned_type
-00000001200250e0 T signed_type
-00000001201ffcc0 S signed_wchar_type_node
-00000001200bd3a0 T significand_size
-0000000120040f40 T simple_cst_equal
-0000000120044bb0 T simple_cst_list_equal
-00000001200e6c70 T simplejump_p
-0000000120123360 t simplify_and_const_int
-00000001200eaff0 T simplify_binary_operation
-0000000120126f90 t simplify_comparison
-0000000120104be0 t simplify_giv_expr
-000000012011b950 t simplify_if_then_else
-000000012011d980 t simplify_logical
-00000001200ecbf0 t simplify_plus_minus
-00000001200ed5c0 T simplify_relational_operation
-0000000120119230 t simplify_rtx
-000000012011cb90 t simplify_set
-0000000120124b80 t simplify_shift_const
-00000001200a96c0 T simplify_subtraction
-00000001200ee0b0 T simplify_ternary_operation
-00000001200ea450 T simplify_unary_operation
-00000001202004e0 S sin_optab
-00000001200b0230 T single_set
-00000001201fec40 g size.1
-00000001201fec44 g size.2
-00000001201fec14 g size.3
-00000001200562a0 T size_binop
-00000001202006e0 S size_directive_output
-0000000120043950 T size_in_bytes
-000000012004b850 T size_int
-0000000120200138 S size_one_node
-00000001202031e0 b size_table.0
-0000000120200130 S size_zero_node
-0000000120200140 S sizetype
-00000001200fe130 t skip_consec_insns
-000000012000bbc0 t skip_white_space
-00000001201ff43c s skipped_writes_memory
-0000000120200410 S smax_optab
-0000000120200558 S smin_optab
-00000001202004b0 S smod_optab
-00000001201ff134 s smod_pow2_cheap
-00000001202004a8 S smul_highpart_optab
-0000000120200660 S smul_optab
-0000000120200540 S smul_widen_optab
-0000000120032770 T sorry
-00000001201fef4c S sorrycount
-00000001201fec7c g source_label_number
-00000001201e9d60 D spaces
-00000001201fee08 s spelling
-00000001201fee10 s spelling_base
-00000001201fee18 s spelling_size
-000000012014ada0 t spill_failure
-000000012014d130 t spill_hard_reg
-00000001201ff8c8 s spill_indirect_levels
-0000000120207dd0 b spill_reg_order
-00000001202079d0 b spill_reg_rtx
-0000000120207bd0 b spill_reg_store
-0000000120207e50 b spill_regs
-0000000120207f90 b spill_stack_slot
-0000000120208190 b spill_stack_slot_width
-000000012017ab80 T split_1
-000000012016f4e0 T split_double
-0000000120169db0 t split_hard_reg_notes
-000000012017bb60 T split_insns
-0000000120056580 t split_tree
-00000001201ff4c8 s splittable_regs
-00000001201ff4d0 s splittable_regs_updates
-0000000120205fd0 b sqrndbit
-0000000120200550 S sqrt_optab
-00000001200e31d0 T squeeze_notes
-00000001200957d0 T stabilize
-000000012003f560 T stabilize_reference
-000000012003fa50 T stabilize_reference_1
-00000001202002f0 S stack_arg_under_construction
-00000001202002b8 S stack_block_stack
-00000001202001f4 S stack_depth
-0000000120200748 S stack_pointer_rtx
-00000001201fef34 S stack_reg_dump
-00000001201fff00 S stack_reg_dump_file
-00000001201ffedc S stack_reg_time
-0000000120200238 S stack_slot_list
-00000001201ff118 s stack_usage_map
-00000001201e8968 D standard_tree_code_length
-00000001201e8b60 D standard_tree_code_name
-00000001201e8578 D standard_tree_code_type
-0000000120010a80 T start_decl
-00000001200177b0 T start_enum
-0000000120014be0 T start_function
-0000000120042770 T start_identifier_warnings
-0000000120022750 T start_init
-0000000120209508 b start_of_epilogue_needs
-00000001200b60d0 T start_sequence
-00000001200b6170 T start_sequence_for_rtl_expr
-00000001200174a0 T start_struct
-00000001201fed30 s state.0
-0000000120200710 S static_chain_incoming_rtx
-0000000120200778 S static_chain_rtx
-00000001201ffe28 S static_ctors
-00000001201ffc68 S static_dtors
-00000001201ff860 s static_reload_reg_p
-0000000120043bf0 T staticp
-000000012015feb0 t steal_delay_list_from_fallthrough
-000000012015f680 t steal_delay_list_from_target
-00000001201fecf0 s stmt_count
-00000001201ff088 s stmt_expr_depth
-000000012020bee0 B stmt_obstack
-000000012008a440 T store_bit_field
-0000000120082f80 t store_constructor
-00000001200733f0 T store_expr
-0000000120074000 t store_field
-000000012008ab00 t store_fixed_bit_field
-0000000120025700 T store_init_value
-00000001200891e0 t store_one_arg
-00000001200152a0 T store_parm_decls
-000000012008afe0 t store_split_bit_field
-0000000120101e80 t strength_reduce
-000000012013c930 T strict_memory_address_p
-0000000120084b90 t string_constant
-00000001201ffe78 S string_ftype_ptr_ptr
-00000001200d8790 t string_length_attribute
-00000001201ffc28 S string_type_node
-00000001201cf0c0 r strings_107.2
-00000001201cf110 r strings_108.3
-00000001201cf138 r strings_114.4
-00000001201cf158 r strings_117.5
-00000001201cf178 r strings_120.6
-00000001201cf188 r strings_121.7
-00000001201cf1c8 r strings_126.8
-00000001201cf1d8 r strings_127.9
-00000001201cf218 r strings_131.10
-00000001201cf228 r strings_132.11
-00000001201cf268 r strings_147.12
-00000001201cf280 r strings_149.13
-00000001201cf298 r strings_151.14
-00000001201cf2b0 r strings_154.15
-00000001201cf2d0 r strings_156.16
-00000001201cf2f0 r strings_158.17
-00000001201cf310 r strings_169.18
-00000001201cf320 r strings_228.19
-00000001201cf340 r strings_233.20
-00000001201cf358 r strings_245.21
-00000001201cf368 r strings_247.22
-00000001201cf378 r strings_249.23
-00000001201cf388 r strings_252.24
-00000001201cf398 r strings_261.25
-00000001201cf3a8 r strings_262.26
-00000001201cf3b8 r strings_264.27
-00000001201cf3c8 r strings_281.28
-00000001201cf080 r strings_58.0
-00000001201cf0a0 r strings_61.1
-0000000120058b80 t strip_compound_expr
-0000000120038e50 T strip_off_ending
-00000001202006a8 S strlen_optab
-00000001202007a8 S struct_value_incoming_rtx
-0000000120200790 S struct_value_rtx
-0000000120113120 t stupid_find_reg
-00000001201128c0 T stupid_life_analysis
-0000000120113470 t stupid_mark_refs
-0000000120113aa0 t stupid_reg_compare
-0000000120200478 S sub_optab
-00000001201ff238 s subflg
-000000012020ba00 B sublevel_ixpansions
-00000001200b4110 T subreg_lowpart_p
-00000001200b3fc0 T subreg_realpart_p
-00000001200d7a80 t subscript_data_attribute
-00000001201188c0 t subst
-00000001200de850 t subst_constants
-0000000120142000 t subst_indexed_address
-00000001201ff5d8 s subst_insn
-00000001201ff5e8 s subst_low_cuid
-00000001201ff5e0 s subst_prev_insn
-0000000120141ec0 t subst_reg_equivs
-00000001201ff868 s subst_reg_equivs_changed
-0000000120143600 T subst_reloads
-000000012003e4d0 T substitute_in_expr
-000000012003e800 T substitute_in_type
-00000001200425a0 T suspend_momentary
-00000001200e69c0 T swap_condition
-000000012019b560 T sym_lookup
-0000000120197460 T symbolic_address_p
-0000000120198ae0 T symbolic_operand
-00000001201fff18 S symout_time
-000000012008d240 t synth_mult
-00000001201ff008 s table
-0000000120206510 b table
-00000001201e8fe0 d table.0
-0000000120067350 t tail_recursion_args
-0000000120200200 S tail_recursion_label
-0000000120200228 S tail_recursion_reentry
-00000001202006e8 S target_flags
-00000001201ff960 s target_hash_table
-0000000120056170 T target_isinf
-00000001200561d0 T target_isnan
-0000000120056260 T target_negative
-00000001201e8558 D target_options
-00000001201e8388 D target_switches
-00000001202002e8 S target_temp_slot_level
-00000001200a8300 T tdesc_section
-0000000120200128 S temp_decl_firstobj
-00000001202011a8 b temp_decl_obstack
-00000001202066a8 b temp_obstack
-0000000120200174 S temp_slot_level
-0000000120200180 S temp_slots
-00000001200438b0 T temp_tree_cons
-0000000120042110 T temporary_allocation
-0000000120200120 S temporary_firstobj
-000000012020be48 B temporary_obstack
-00000001200e3e20 t tension_vector_labels
-00000001200a84f0 T text_section
-00000001201e79e8 d tfaff
-00000001201ff604 s this_basic_block
-00000001201ff078 s this_function_bytecode
-00000001201ff080 s this_function_calldesc
-00000001201ff070 s this_function_callinfo
-00000001201ff068 s this_function_decl
-00000001201ff3a8 s this_insn
-00000001201ff768 s this_insn
-00000001201ff850 s this_insn
-00000001201ff858 s this_insn_is_asm
-00000001201ff764 s this_insn_number
-00000001201ffb00 s this_is_asm_operands
-00000001200e58c0 T thread_jumps
-00000001200613a0 T thread_prologue_and_epilogue_insns
-00000001201eb3a5 d tm_rcs_id
-00000001200be4f0 t toe113
-00000001200be8d0 t toe24
-00000001200b93d0 t toe53
-00000001200be680 t toe64
-00000001201ffbf8 S token_buffer
-00000001202000b0 S toplev_inline_obstacks
-00000001201ff5a0 s total_attempts
-00000001201ff5a8 s total_extras
-00000001201ff5a4 s total_merges
-00000001201ff5ac s total_successes
-0000000120200a20 S trampoline
-000000012005ef80 T trampoline_address
-00000001201ff038 s trampoline_list
-0000000120145820 T transfer_replacements
-0000000120200098 S tree_code_length
-0000000120200100 S tree_code_name
-00000001202000d8 S tree_code_type
-000000012003e370 T tree_cons
-0000000120040ed0 T tree_int_cst_equal
-0000000120044ac0 T tree_int_cst_lt
-0000000120044b70 T tree_int_cst_sgn
-0000000120043670 T tree_last
-000000012020bd58 B tree_node_counts
-00000001201e8f50 D tree_node_kind_names
-000000012020bea0 B tree_node_sizes
-0000000120164460 T true_dependence
-00000001200e7190 T true_regnum
-0000000120200570 S truncdfsf2_libfunc
-0000000120200450 S trunctfdf2_libfunc
-0000000120200628 S trunctfsf2_libfunc
-0000000120200640 S truncxfdf2_libfunc
-0000000120200390 S truncxfsf2_libfunc
-000000012002c1a0 T truthvalue_conversion
-0000000120114730 t try_combine
-00000001200de6e0 T try_constants
-000000012015d8b0 t try_merge_delay_insns
-00000001200b2940 T try_split
-0000000120200300 S tst_optab
-000000012004bce0 t twoval_comparison_p
-00000001201fed34 s type.1
-00000001200c9400 t type_attribute
-000000012002b270 T type_for_mode
-000000012002d3e0 T type_for_size
-0000000120044950 T type_hash_add
-0000000120040880 T type_hash_canon
-0000000120044780 T type_hash_list
-00000001200447b0 T type_hash_lookup
-000000012020bb80 B type_hash_table
-00000001200cede0 t type_is_fundamental
-0000000120044a00 T type_list_equal
-0000000120019ab0 t type_lists_compatible_p
-0000000120045220 T type_precision
-00000001201ebdf8 D typecode_mode
-0000000120200398 S ucmp_optab
-0000000120200508 S udiv_optab
-0000000120200620 S udivmod_optab
-00000001201ff500 s uid_block_number
-00000001201ff400 s uid_cuid
-00000001201ff5b0 s uid_cuid
-0000000120200850 S uid_loop_num
-0000000120200860 S uid_luid
-00000001201ff550 s uid_suid
-00000001201ff970 s uid_to_ruid
-00000001201ff508 s uid_volatile
-0000000120200588 S umax_optab
-0000000120200590 S umin_optab
-00000001202005b8 S umod_optab
-0000000120200578 S umul_highpart_optab
-00000001202003c0 S umul_widen_optab
-000000012001f100 t unary_complex_lvalue
-00000001201fed18 s undeclared_variable_notice
-0000000120117840 t undo_all
-0000000120206700 b undobuf
-00000001201ff950 s unfilled_firstobj
-00000001202094b0 b unfilled_slots_obstack
-0000000120062fe0 T uninitialized_vars_warning
-0000000120209770 b unit_last_insn
-00000001202097dc b unit_n_insns
-00000001202097b8 b unit_tick
-00000001201ff49c s unknown_address_altered
-00000001201ff248 s unnamed_struct_number
-000000012006f630 T unroll_block_trees
-0000000120107ce0 T unroll_loop
-00000001200b4660 T unshare_all_rtl
-00000001201ffce0 S unsigned_char_type_node
-00000001200e6a90 T unsigned_condition
-000000012002cea0 T unsigned_conversion_warning
-00000001201ffd00 S unsigned_intDI_type_node
-00000001201ffe48 S unsigned_intHI_type_node
-00000001201ffe68 S unsigned_intQI_type_node
-00000001201ffcf0 S unsigned_intSI_type_node
-000000012020ae18 b unsigned_mode_to_code_map
-0000000120024fd0 T unsigned_type
-00000001201ffd20 S unsigned_type_node
-00000001201ffc70 S unsigned_wchar_type_node
-00000001201ffa88 s unused_expr_list
-00000001201ffa80 s unused_insn_list
-0000000120158050 t update_block
-00000001201317d0 t update_equiv_regs
-0000000120167ad0 t update_flow_info
-00000001201043c0 t update_giv_derive
-0000000120159d50 t update_live_status
-0000000120133de0 t update_qty_class
-0000000120106f50 t update_reg_last_use
-000000012012ce30 t update_table_tick
-0000000120061cd0 T update_temp_slot_address
-00000001201ff0d8 s use_cost_table
-0000000120129d70 t use_crosses_set_p
-00000001201fef40 S use_gnu_debug_info_extensions
-00000001200824b0 T use_reg
-0000000120082550 T use_regs
-00000001200fc0a0 t use_related_value
-0000000120062b70 T use_variable
-0000000120062c40 T use_variable_after
-000000012010eb40 t uses_reg_or_mem
-0000000120039230 t v_message_with_decl
-0000000120025ed0 t valid_compound_expr_initializer
-0000000120103530 t valid_initial_value_p
-00000001200442c0 T valid_machine_attribute
-0000000120172eb0 T validate_change
-00000001201351a0 t validate_equiv_mem_from_store
-0000000120173020 T validate_replace_rtx
-0000000120170180 t validate_replace_rtx_1
-0000000120095730 T validize_mem
-00000001201fed40 s value.3
-00000001200434b0 T value_member
-00000001202006e4 S var_labelno
-00000001201ff090 s var_offset
-00000001201fffd0 S varconst_time
-00000001201ffb90 s variable_args_p
-0000000120048ef0 T variable_size
-00000001201fec30 G version_string
-0000000120200740 S virtual_incoming_args_rtx
-0000000120200758 S virtual_outgoing_args_rtx
-00000001202007b0 S virtual_stack_dynamic_rtx
-0000000120200720 S virtual_stack_vars_rtx
-00000001201ff060 s virtuals_instantiated
-00000001201ffd40 S void_ftype_ptr_int_int
-00000001201ffc50 S void_ftype_ptr_ptr_int
-00000001201ffd90 S void_type_node
-00000001200aead0 T volatile_insn_p
-00000001202009cc S volatile_ok
-00000001200aec60 T volatile_refs_p
-000000012016e310 t walk_alter_subreg
-000000012005bec0 t walk_fixup_memory_subreg
-00000001201fedc4 s warn_about_return_type
-0000000120200044 S warn_aggregate_return
-00000001201ffe24 S warn_bad_function_cast
-0000000120200080 S warn_cast_align
-00000001201ffd60 S warn_cast_qual
-00000001201fed64 S warn_char_subscripts
-00000001201ffd10 S warn_conversion
-0000000120021280 t warn_for_assignment
-00000001201ffe10 S warn_format
-00000001201fffe8 S warn_id_clash
-00000001200652c0 T warn_if_unused_value
-00000001201ffc10 S warn_implicit
-00000001201ffed4 S warn_inline
-00000001201fff74 S warn_larger_than
-00000001201ffc90 S warn_missing_braces
-00000001201ffdec S warn_missing_declarations
-00000001201ffde8 S warn_missing_prototypes
-00000001201fed60 S warn_nested_externs
-00000001201ffdfc S warn_parentheses
-00000001201ffe30 S warn_pointer_arith
-00000001201fed5c S warn_redundant_decls
-0000000120200020 S warn_return_type
-00000001201fff40 S warn_shadow
-00000001201ffc84 S warn_strict_prototypes
-00000001201fff70 S warn_switch
-00000001201ffda8 S warn_traditional
-00000001201fff64 S warn_uninitialized
-00000001201ffee4 S warn_unused
-00000001201ffc80 S warn_write_strings
-0000000120031500 T warning
-00000001200310d0 T warning_for_asm
-0000000120025f70 t warning_init
-00000001201fefd8 s warning_message.0
-0000000120030e20 T warning_with_decl
-0000000120030ae0 T warning_with_file_and_line
-00000001201fef48 S warningcount
-00000001201fefc8 S warnings_are_errors
-00000001201ffc20 S wchar_array_type_node
-00000001201ffd28 S wchar_type_node
-00000001201ff158 s weak_decls
-00000001200a9be0 T weak_finish
-00000001202009d4 S which_alternative
-00000001201341f0 t wipe_dead_reg
-00000001202007a0 S word_mode
-00000001201e6a58 d wordlist
-00000001200c8b80 t write_modifier_bytes
-00000001201fef38 S write_symbols
-0000000120205f80 b wstring
-0000000120038bd0 T xmalloc
-00000001202004d8 S xor_optab
-0000000120038c30 T xrealloc
-00000001200171f0 T xref_tag
-00000001201ffbe8 S yychar
-00000001201a35c0 r yycheck
-00000001201ffbdc S yydebug
-00000001201a18ac r yydefact
-00000001201a1dd2 r yydefgoto
-000000012000ba50 T yyerror
-0000000120008e00 T yylex
-00000001201ffbe0 S yylval
-00000001201ffbd8 S yynerrs
-00000001201a1ef2 r yypact
-0000000120001ad0 T yyparse
-00000001201a2418 r yypgoto
-000000012019fc46 r yyprhs
-000000012000b900 T yyprint
-00000001201a12d0 r yyr1
-00000001201a15be r yyr2
-000000012019ff34 r yyrhs
-00000001201a08b8 r yyrline
-00000001201a2538 r yytable
-00000001201a0ba8 r yytname
-000000012019fb08 r yytranslate
-00000001201ffbb8 s zero.2
-00000001201ff140 s zero_cost
diff --git a/configs/boot/devtime.rcS b/configs/boot/devtime.rcS
deleted file mode 100644 (file)
index 4d1ca94..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-insmod /modules/devtime.ko dataAddr=0x9000008 count=100
-rmmod devtime
-insmod /modules/devtime.ko dataAddr=0x1a0000300 count=100
-rmmod devtime
-insmod /modules/devtime.ko memTest=1 count=100
-rmmod devtime
-m5 exit
-
diff --git a/configs/boot/equake.rcS b/configs/boot/equake.rcS
deleted file mode 100644 (file)
index 6b799aa..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-cd /benchmarks/spec/equake00/
-
-/sbin/m5 checkpoint 0 0
-/sbin/m5 checkpoint 100000000 200000000
-
-/sbin/m5 loadsymbol
-
-/sbin/m5 resetstats 
-/benchmarks/spec/equake00/equake < lgred.in
-/sbin/m5 exit
diff --git a/configs/boot/equake.symbol b/configs/boot/equake.symbol
deleted file mode 100644 (file)
index 4b28299..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-000000012001a868 S ARCHcholeskylen
-000000012001a878 S ARCHcoord
-000000012001a930 S ARCHcorners
-000000012001a938 S ARCHduration
-000000012001a940 S ARCHelems
-000000012001a8b0 S ARCHglobalelem
-000000012001a8d0 S ARCHglobalelems
-000000012001a8e8 S ARCHglobalnode
-000000012001a8a8 S ARCHglobalnodes
-000000012001a8d8 S ARCHmatrixcol
-000000012001a898 S ARCHmatrixindex
-000000012001a924 S ARCHmatrixlen
-000000012001a8ac S ARCHmesh_dim
-000000012001a8f8 S ARCHmine
-000000012001a90c S ARCHnodes
-000000012001a908 S ARCHpriv
-000000012001a920 S ARCHsubdomains
-000000012001a8b8 S ARCHvertex
-000000012001a900 S C
-000000012001a918 S C23
-000000012001a9a8 B Damp
-000000012001a9c8 B Exc
-000000012001a8a0 S K
-000000012001a928 S M
-000000012001a888 S M23
-000000012001a950 B Src
-000000012001a890 S V23
-000000012001a388 D _DYNAMIC
-000000012001a5f8 D _GLOBAL_OFFSET_TABLE_
-000000012001a848 G _IO_stdin_used
-000000012001a550 T _PROCEDURE_LINKAGE_TABLE_
-000000012001a530 d __CTOR_END__
-000000012001a528 d __CTOR_LIST__
-000000012001a540 d __DTOR_END__
-000000012001a538 d __DTOR_LIST__
-000000012001a384 r __FRAME_END__
-000000012001a548 d __JCR_END__
-000000012001a548 d __JCR_LIST__
-000000012001a860 A __bss_start
-000000012001a000 D __data_start
-0000000120008c50 t __do_global_ctors_aux
-00000001200008d0 t __do_global_dtors_aux
-000000012001a850 G __dso_handle
-000000012001a000 A __fini_array_end
-000000012001a000 A __fini_array_start
-000000012001a000 A __init_array_end
-000000012001a000 A __init_array_start
-0000000120008bb0 T __libc_csu_fini
-0000000120008b00 T __libc_csu_init
-0000000120000890 W __start
-000000012001a860 A _edata
-000000012001a9e0 A _end
-0000000120008cb0 T _fini
-0000000120000828 T _init
-0000000120000890 T _start
-00000001200049c4 T abe_matrix
-00000001200056b8 T arch_bail
-00000001200056e4 T arch_info
-0000000120006584 T arch_init
-00000001200057e0 T arch_parsecommandline
-0000000120005bf4 T arch_readdouble
-0000000120005ad0 T arch_readelemvector
-00000001200059ac T arch_readnodevector
-0000000120004530 T area_triangle
-00000001200051e8 T centroid
-000000012001a860 s completed.1
-000000012001a000 W data_start
-000000012001a948 S disp
-00000001200050bc T distance
-0000000120003c70 T element_matrices
-0000000120000970 t frame_dummy
-00000001200036f8 T get_Enu
-0000000120003820 T inv_J
-00000001200009c0 T main
-0000000120007a88 T mem_init
-00000001200054b8 T mv12x12
-000000012001a8c0 S nodekind
-000000012001a910 S nodekindf
-000000012001a8f0 S options
-000000012001a858 g p.0
-000000012001a8c8 S packfile
-0000000120004bc4 T phi0
-0000000120004cc4 T phi1
-0000000120004d98 T phi2
-00000001200052e8 T point2fault
-000000012001a870 S progname
-0000000120005cd8 T readpackfile
-000000012000360c T shape_ders
-0000000120004e84 T slip
-0000000120006604 T smvp
-00000001200070f8 T smvp_opt
-000000012001a880 S source_elms
-000000012001a8e0 S vel
-000000012000561c T vv12x12
diff --git a/configs/boot/gcc.rcS b/configs/boot/gcc.rcS
deleted file mode 100644 (file)
index 6bcd7e0..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-cd /benchmarks/spec/gcc00/
-
-/sbin/m5 checkpoint 0 0
-/sbin/m5 checkpoint 100000000 200000000
-
-/sbin/m5 loadsymbol
-
-/sbin/m5 resetstats 
-./cc1 mdred.rtlanal.i
-/sbin/m5 exit
diff --git a/configs/boot/gzip.rcS b/configs/boot/gzip.rcS
deleted file mode 100644 (file)
index c7aca7e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-cd /benchmarks/spec/gzip00/
-
-/sbin/m5 checkpoint 0 0
-/sbin/m5 checkpoint 100000000 200000000
-
-/sbin/m5 loadsymbol
-
-/sbin/m5 resetstats 
-./gzip lgred.log 1
-/sbin/m5 exit
diff --git a/configs/boot/gzip.symbol b/configs/boot/gzip.symbol
deleted file mode 100644 (file)
index d965c99..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-0000000120022c08 D _DYNAMIC
-0000000120022fd0 D _GLOBAL_OFFSET_TABLE_
-0000000120023498 G _IO_stdin_used
-0000000120022dc0 T _PROCEDURE_LINKAGE_TABLE_
-0000000120022da0 d __CTOR_END__
-0000000120022d98 d __CTOR_LIST__
-0000000120022db0 d __DTOR_END__
-0000000120022da8 d __DTOR_LIST__
-0000000120022c04 r __FRAME_END__
-0000000120022db8 d __JCR_END__
-0000000120022db8 d __JCR_LIST__
-00000001200234f8 A __bss_start
-0000000120021030 D __data_start
-000000012000fbc0 t __do_global_ctors_aux
-00000001200012a0 t __do_global_dtors_aux
-00000001200234a0 G __dso_handle
-0000000120021030 A __fini_array_end
-0000000120021030 A __fini_array_start
-0000000120021030 A __init_array_end
-0000000120021030 A __init_array_start
-000000012000fb20 T __libc_csu_fini
-000000012000fa70 T __libc_csu_init
-0000000120001260 W __start
-00000001200234f8 A _edata
-0000000120073b10 A _end
-000000012000fc20 T _fini
-00000001200011f8 T _init
-0000000120001260 T _start
-0000000120004cf0 T abort_gzip
-000000012000de80 T add_envopt
-0000000120023550 S args
-0000000120023520 S ascii
-000000012002551c b base_dist
-00000001200254a8 b base_length
-0000000120023698 S bb
-00000001200234fc s bi_buf
-0000000120001ad0 T bi_init
-0000000120001b20 T bi_reverse
-0000000120023500 s bi_valid
-00000001200015d0 T bi_windup
-00000001200235b8 s bitbuf
-00000001200235e0 s bitbuf
-00000001200235c0 s bitcount
-0000000120023690 S bk
-0000000120024654 b bl_count
-0000000120021830 d bl_desc
-0000000120021858 d bl_order
-00000001200245b8 b bl_tree
-00000001200234ec G block_mode
-0000000120023610 S block_start
-00000001200235b4 s blocksize
-0000000120021540 d border
-0000000120009620 t build_tree
-0000000120023650 S bytes_in
-0000000120023668 S bytes_out
-0000000120004740 t check_ofname
-000000012000d5c0 T check_zipfile
-000000012000e540 T clear_bufs
-00000001200234f8 s completed.1
-0000000120023518 s compr_level
-00000001200092e0 t compress_block
-00000001200235a0 s compressed_len
-0000000120021030 d configuration_table
-000000012000e280 T copy
-00000001200017d0 T copy_block
-0000000120004ae0 t copy_stat
-0000000120021644 d cpdext
-0000000120021608 d cpdist
-000000012002158c d cplens
-00000001200215ca d cplext
-00000001200235f8 s crc
-00000001200234f0 g crc.0
-0000000120021870 D crc_32_tab
-0000000120002b90 t create_outfile
-0000000120008450 T ct_init
-0000000120008f60 T ct_tally
-000000012002ea20 B d_buf
-0000000120021808 d d_desc
-0000000120021030 W data_start
-00000001200234e8 G dbglvl
-00000001200234e4 G dbits
-0000000120008440 T debug_time
-000000012000a5e0 t decode
-000000012000ad50 t decode_c
-000000012000ab90 t decode_start
-0000000120023528 S decompress
-00000001200236c0 S decrypt
-0000000120002250 T deflate
-0000000120002770 t deflate_fast
-0000000120024f68 b depth
-000000012000ee70 T display_ratio
-00000001200252a5 b dist_code
-0000000120004c60 t do_exit
-0000000120003f00 t do_list
-0000000120023540 S do_lzw
-00000001200235c8 s done
-0000000120023fcc b dyn_dtree
-00000001200236d8 b dyn_ltree
-0000000120023678 S env
-000000012002350c s eofile
-000000012000e1c0 T error
-0000000120023548 S exit_code
-00000001200235f4 S ext_header
-0000000120021794 d extra_blbits
-000000012002171c d extra_dbits
-00000001200216a8 d extra_lbits
-00000001200236b8 S file_method
-000000012000f9c0 T file_read
-00000001200236b0 S file_type
-000000012000e580 T fill_inbuf
-0000000120002030 t fill_window
-00000001200234d8 g first_time.2
-000000012002358d s flag_bit
-0000000120025594 b flag_buf
-000000012002358c s flags
-0000000120008ba0 T flush_block
-000000012000e730 T flush_outbuf
-000000012000e860 T flush_window
-000000012002352c S force
-0000000120023640 S foreground
-0000000120001340 t frame_dummy
-000000012000a1a0 t gen_bitlen
-0000000120008a80 t gen_codes
-0000000120002dd0 t get_istat
-00000001200032c0 T get_method
-0000000120004d50 t get_suffix
-0000000120023618 S good_match
-000000012000ebf0 T gzipbasename
-00000001200236d0 S header_bytes
-0000000120024674 b heap
-0000000120023578 s heap_len
-000000012002357c s heap_max
-00000001200214b8 d help_msg.5
-0000000120004ee0 T huft_build
-0000000120005670 T huft_free
-00000001200236a0 S hufts
-00000001200235b0 s i.0
-0000000120023688 S ifd
-0000000120023658 S ifile_size
-000000012005eea8 B ifname
-000000012002356c s in_exit.4
-00000001200269e0 B inbuf
-0000000120006e00 T inflate
-0000000120006bf0 T inflate_block
-00000001200056d0 T inflate_codes
-00000001200062b0 T inflate_dynamic
-00000001200060f0 T inflate_fixed
-0000000120005e10 T inflate_stored
-0000000120008960 t init_block
-0000000120023684 S inptr
-00000001200235a8 s input_len
-0000000120023508 s ins_h
-0000000120023644 S insize
-000000012003ea20 B istat
-00000001200235c4 s j
-00000001200236c8 S key
-00000001200213f8 d known_suffixes.0
-00000001200217e0 d l_desc
-0000000120023584 s last_dist
-0000000120023588 s last_flags
-0000000120023580 s last_lit
-000000012002364c S last_member
-00000001200234e0 G lbits
-0000000120026910 b leaves
-00000001200251a5 b length_code
-00000001200234c8 G level
-0000000120021080 d license_msg
-0000000120023534 S list
-00000001200268a8 b lit_base
-00000001200267a8 b literal
-0000000120001b60 T lm_init
-0000000120001d90 T longest_match
-00000001200210f8 D longopts
-0000000120023510 s lookahead
-0000000120006ed0 T lzw
-0000000120007a80 T main
-0000000120003040 t make_ofname
-000000012000ec40 T make_simple_name
-000000012000c130 t make_table
-0000000120021680 D mask_bits
-0000000120023624 S match_start
-000000012002361c S max_chain_length
-0000000120023514 s max_lazy_match
-00000001200235d8 s max_len
-00000001200234c0 G maxbits
-00000001200234c4 G method
-0000000120021470 d methods.3
-0000000120023570 s msg_done
-0000000120004310 t name_too_long
-0000000120023608 S nice_match
-00000001200234b8 G no_name
-00000001200234bc G no_time
-0000000120023630 S ofd
-000000012003eaa8 B ofname
-0000000120023590 s opt_len
-00000001200235d0 s orig_len
-000000012005f2a8 B outbuf
-0000000120023648 S outcnt
-00000001200234a8 g p.0
-0000000120026978 b parents
-0000000120023680 S part_nb
-00000001200235dc s peek_bits
-00000001200235f0 S pkzip
-000000012003eea8 B prev
-000000012002360c S prev_length
-0000000120023628 S progname
-0000000120026594 b pt_len
-00000001200265a8 b pt_table
-000000012002353c S quiet
-00000001200080c0 T ran
-0000000120023600 S read_buf
-000000012000b8c0 t read_c_len
-000000012000ed50 T read_error
-000000012000b130 t read_pt_len
-000000012000d2a0 t read_tree
-0000000120023530 S recursive
-0000000120023568 S remove_ofname
-0000000120023660 S save_orig_name
-0000000120009d90 t scan_tree
-00000001200236a8 S seedi
-0000000120001390 T send_bits
-0000000120009f40 t send_tree
-0000000120009540 t set_file_type
-0000000120004420 t shorten_name
-0000000120007f90 T spec_compress
-0000000120073ac8 B spec_fd
-0000000120007800 T spec_getc
-0000000120006f70 T spec_init
-0000000120007f40 T spec_initbufs
-0000000120007430 T spec_load
-0000000120008350 T spec_putc
-0000000120007090 T spec_random_load
-0000000120007670 T spec_read
-00000001200081b0 T spec_reset
-0000000120008190 T spec_rewind
-0000000120008010 T spec_uncompress
-0000000120007930 T spec_ungetc
-0000000120008210 T spec_write
-0000000120024540 b static_dtree
-0000000120023598 s static_len
-00000001200240c0 b static_ltree
-000000012000eb20 T strlwr
-0000000120023620 S strstart
-00000001200235bc s subbitbuf
-0000000120021440 d suffixes.1
-0000000120023544 S test
-0000000120023638 S time_stamp
-0000000120023524 S to_stdout
-0000000120023558 S total_in
-0000000120023560 S total_out
-000000012000a510 T unlzh
-000000012000c5c0 T unlzw
-000000012000cde0 T unpack
-000000012000d7a0 T unzip
-000000012000e4c0 T updcrc
-00000001200235e8 s valid
-0000000120023538 S verbose
-000000012000ecd0 T warn
-0000000120063aa8 B window
-00000001200234b0 G window_size
-00000001200234d0 G work
-000000012000ea20 T write_buf
-000000012000ee00 T write_error
-000000012000e220 T xmalloc
-0000000120023670 S z_len
-0000000120073aa8 B z_suffix
-0000000120023504 s zfile
-000000012000ef80 T zip
diff --git a/configs/boot/iscsi-client.rcS b/configs/boot/iscsi-client.rcS
deleted file mode 100644 (file)
index cfa8765..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig lo 127.0.0.1
-/sbin/ifconfig eth0 192.168.0.10 txqueuelen 1000
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-#echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "524287" > /proc/sys/net/core/rmem_max
-echo "524287" > /proc/sys/net/core/wmem_max
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "1" > /proc/sys/vm/dirty_writeback_centisecs
-echo "done."
-
-cat > /etc/initiatorname.iscsi <<EOF
-InitiatorName=iqn.1987-05.10.0.168.192
-EOF
-
-cat > /etc/iscsid.conf <<EOF
-node.active_cnx = 1
-node.startup = manual
-#node.session.auth.username = dima
-#node.session.auth.password = aloha
-node.session.timeo.replacement_timeout = 0
-node.session.err_timeo.abort_timeout = 10
-node.session.err_timeo.reset_timeout = 30
-node.session.iscsi.InitialR2T = No
-node.session.iscsi.ImmediateData = Yes
-node.session.iscsi.FirstBurstLength = 262144
-node.session.iscsi.MaxBurstLength = 16776192
-node.session.iscsi.DefaultTime2Wait = 0
-node.session.iscsi.DefaultTime2Retain = 0
-node.session.iscsi.MaxConnections = 0
-node.cnx[0].iscsi.HeaderDigest = None
-node.cnx[0].iscsi.DataDigest = None
-node.cnx[0].iscsi.MaxRecvDataSegmentLength = 65536
-#discovery.sendtargets.auth.authmethod = CHAP
-#discovery.sendtargets.auth.username = dima
-#discovery.sendtargets.auth.password = aloha
-EOF
-
-#mount -t sysfs none /sys
-
-echo "" > /var/log/iscsi.log
-chmod 0600 /var/log/iscsi.log
-chmod 0666 -R /var/db/iscsi
-
-# Required for udev to activate/deactivate devices.
-echo "/sbin/hotplug" > /proc/sys/kernel/hotplug        
-
-/sbin/insmod /modules/scsi_transport_iscsi.ko
-/sbin/insmod /modules/iscsi_tcp.ko
-
-echo "Starting iscsid..."
-/iscsi/iscsid -f &
-
-sleep 1
-
-echo "Waiting for server..."
-netcat -c -l -p 8000 
-
-echo "Attaching target..."
-/iscsi/iscsiadm -m discovery -t st -p 192.168.0.1
-/iscsi/iscsiadm -m node -r a0c049 --login
-echo "done."
-
-sleep 5
-
-#PARAMS="-n 8 -s 8 -r .666 -c 50"         # lisa default
-#PARAMS="-n 8 -s 5120 -r .666 -c 20"      # very unstable
-#PARAMS="-n 8 -s 8 -r 0 -c 20"            # very unstable
-#PARAMS="-n 8 -s 8 -r 1 -c 20"            # stable 960 Mbps
-#PARAMS="-n 8 -s 1024 -r 1 -c 20"         # very unstable
-#PARAMS="-n 16 -s 32 -r 1 -c 50"          # stable ~1.5 Gbps
-#PARAMS="-n 50 -s 32 -r 1 -c 50"          # stable ~1.5 Gbps
-PARAMS="-n 50 -s 8 -r .666 -c 50"
-COMMAND="/benchmarks/aio-bench $PARAMS -i 1000000 -C 50000 /dev/sda"
-
-echo "Starting aio benchmark..."
-echo $COMMAND
-eval $COMMAND
-
-echo "starting bash shell..."
-/bin/bash
-
-echo -n "halting machine"
-m5 exit
diff --git a/configs/boot/iscsi-server.rcS b/configs/boot/iscsi-server.rcS
deleted file mode 100644 (file)
index 210f4ea..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig lo 127.0.0.1
-/sbin/ifconfig eth0 192.168.0.1 txqueuelen 1000
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "10" > /proc/sys/vm/dirty_writeback_centisecs
-echo "done."
-
-# specific for iscsi-target
-MEM_SIZE=1048576
-echo ${MEM_SIZE} > /proc/sys/net/core/wmem_max
-echo ${MEM_SIZE} > /proc/sys/net/core/rmem_max
-echo ${MEM_SIZE} > /proc/sys/net/core/wmem_default
-echo ${MEM_SIZE} > /proc/sys/net/core/rmem_default
-echo "${MEM_SIZE} ${MEM_SIZE} ${MEM_SIZE}" > /proc/sys/net/ipv4/tcp_mem
-echo "${MEM_SIZE} ${MEM_SIZE} ${MEM_SIZE}" > /proc/sys/net/ipv4/tcp_rmem
-echo "${MEM_SIZE} ${MEM_SIZE} ${MEM_SIZE}" > /proc/sys/net/ipv4/tcp_wmem
-
-mke2fs -F /dev/sda
-
-cat > /etc/ietd.conf <<EOF
-Target iqn.2005-05.1.0.168.192
-       Lun 0 Sectors=8000000,Type=nullio
-EOF
-
-/sbin/insmod /modules/iscsi_trgt.ko
-
-echo -n "start enterprise target..."
-/iscsi/ietd -f &
-echo "done."
-
-sleep 3
-
-echo "notifying client..."
-echo "server ready" | netcat -c 192.168.0.10 8000
-echo "done"
-
-echo "starting bash shell..."
-/bin/bash
diff --git a/configs/boot/ls.rcS b/configs/boot/ls.rcS
deleted file mode 100644 (file)
index 4cfe38d..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-ls
-ls
-ls
-ls
-cd bin
-ls
-ls
-ls
-ls
-ls
-ls
-ls
-ls
-cd ../benchmarks
-ls
-ls
-ls
-ls
diff --git a/configs/boot/mcf.rcS b/configs/boot/mcf.rcS
deleted file mode 100644 (file)
index 864966d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-cd /benchmarks/spec/mcf00/
-
-/sbin/m5 checkpoint 0 0
-/sbin/m5 checkpoint 100000000 200000000
-
-/sbin/m5 loadsymbol
-
-/sbin/m5 resetstats 
-/benchmarks/spec/mcf00/mcf mdred.in
-/sbin/m5 exit
diff --git a/configs/boot/mcf.symbol b/configs/boot/mcf.symbol
deleted file mode 100644 (file)
index 878f129..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-0000000120014350 D _DYNAMIC
-0000000120014608 D _GLOBAL_OFFSET_TABLE_
-0000000120014770 G _IO_stdin_used
-0000000120014518 T _PROCEDURE_LINKAGE_TABLE_
-00000001200144f8 d __CTOR_END__
-00000001200144f0 d __CTOR_LIST__
-0000000120014508 d __DTOR_END__
-0000000120014500 d __DTOR_LIST__
-000000012001434c r __FRAME_END__
-0000000120014510 d __JCR_END__
-0000000120014510 d __JCR_LIST__
-0000000120014790 A __bss_start
-0000000120014000 D __data_start
-00000001200034d0 t __do_global_ctors_aux
-0000000120000a40 t __do_global_dtors_aux
-0000000120014778 G __dso_handle
-0000000120014000 A __fini_array_end
-0000000120014000 A __fini_array_start
-0000000120014000 A __init_array_end
-0000000120014000 A __init_array_start
-0000000120003430 T __libc_csu_fini
-0000000120003380 T __libc_csu_init
-0000000120000a00 W __start
-0000000120014790 A _edata
-0000000120017c30 A _end
-0000000120003530 T _fini
-0000000120000998 T _init
-0000000120000a00 T _start
-00000001200147b0 b basket
-0000000120014798 s basket_size
-0000000120003320 T bea_compute_red_cost
-0000000120003340 T bea_is_dual_infeasible
-0000000120014790 s completed.1
-0000000120002410 T compute_red_cost
-0000000120014000 W data_start
-0000000120001480 T dual_feasible
-0000000120001090 T flow_cost
-00000001200011d0 T flow_org_cost
-0000000120000ae0 t frame_dummy
-00000001200015f0 T getfree
-0000000120000e30 T global_opt
-00000001200147a8 s group_pos
-0000000120014788 g initialize
-0000000120002420 T insert_new_arc
-0000000120000b30 T main
-00000001200179d0 B net
-00000001200147a0 s nr_group
-0000000120014780 g p.0
-0000000120016d48 b perm
-0000000120001d20 T price_out_impl
-0000000120003080 T primal_bea_mpp
-0000000120001310 T primal_feasible
-0000000120002a60 T primal_iminus
-0000000120002c00 T primal_net_simplex
-0000000120002510 T primal_start_artificial
-0000000120002ba0 T primal_update_flow
-00000001200016b0 T read_min
-0000000120001580 T refresh_neighbour_lists
-0000000120000fa0 T refresh_potential
-0000000120001c10 T replace_weaker_arc
-0000000120002310 T resize_prob
-0000000120002f30 T sort_basket
-00000001200021b0 T suspend_impl
-00000001200027e0 T update_tree
-0000000120002600 T write_circulations
diff --git a/configs/boot/mesa.rcS b/configs/boot/mesa.rcS
deleted file mode 100644 (file)
index 3e931a8..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-cd /benchmarks/spec/mesa00/
-
-/sbin/m5 checkpoint 0 0
-/sbin/m5 checkpoint 100000000 200000000
-
-/sbin/m5 loadsymbol
-
-/sbin/m5 resetstats 
-/benchmarks/spec/mesa00/mesa -frames 1 -meshfile lgred.in
-/sbin/m5 exit
diff --git a/configs/boot/mesa.symbol b/configs/boot/mesa.symbol
deleted file mode 100644 (file)
index 6666dc8..0000000
+++ /dev/null
@@ -1,1135 +0,0 @@
-00000001200b93f0 S CC
-00000001200b9428 s Current
-00000001200b9410 s CurrentBlock
-00000001200b9408 s CurrentListNum
-00000001200b9400 s CurrentListPtr
-00000001200b9418 s CurrentPos
-000000012004b870 T DeleteHashTable
-000000012004b6c0 T HashFindFreeKeyBlock
-000000012004bbd0 T HashFirstEntry
-000000012004ba60 T HashInsert
-000000012004b950 T HashLookup
-000000012004bc50 T HashPrint
-000000012004b580 T HashRemove
-00000001200aff60 d Identity
-0000000120098be0 t Init
-00000001200b9448 b InstSize
-000000012004b830 T NewHashTable
-00000001200b9434 s NumColumns
-00000001200b9430 s NumRows
-000000012005e400 T OSMesaCreateContext
-000000012005e9b0 T OSMesaDestroyContext
-000000012005eb70 T OSMesaGetCurrentContext
-000000012005ed00 T OSMesaGetDepthBuffer
-000000012005ec40 T OSMesaGetIntegerv
-000000012005ea30 T OSMesaMakeCurrent
-000000012005eb90 T OSMesaPixelStore
-0000000120098520 t ReadMesh
-0000000120098790 t Render
-00000001200b93ec s Space
-00000001200b9440 s SurfaceN
-00000001200b9438 s SurfaceV
-0000000120099030 t WriteImage
-00000001200b93d4 g Xmax
-00000001200b93d0 g Xmin
-00000001200b93e0 g Xrot
-00000001200b93dc g Ymax
-00000001200b93d8 g Ymin
-00000001200b93e4 g Yrot
-00000001200b7a50 D _DYNAMIC
-00000001200b7db0 D _GLOBAL_OFFSET_TABLE_
-00000001200b93a0 G _IO_stdin_used
-00000001200b7c18 T _PROCEDURE_LINKAGE_TABLE_
-00000001200b7bf8 d __CTOR_END__
-00000001200b7bf0 d __CTOR_LIST__
-00000001200b7c08 d __DTOR_END__
-00000001200b7c00 d __DTOR_LIST__
-00000001200b7a4c r __FRAME_END__
-00000001200b7c10 d __JCR_END__
-00000001200b7c10 d __JCR_LIST__
-00000001200b93e8 A __bss_start
-00000001200aff20 D __data_start
-0000000120099390 t __do_global_ctors_aux
-0000000120000ec0 t __do_global_dtors_aux
-00000001200b93a8 G __dso_handle
-00000001200aff20 A __fini_array_end
-00000001200aff20 A __fini_array_start
-00000001200aff20 A __init_array_end
-00000001200aff20 A __init_array_start
-00000001200992f0 T __libc_csu_fini
-0000000120099240 T __libc_csu_init
-0000000120000e80 W __start
-00000001200b93e8 A _edata
-00000001200b9fe8 A _end
-00000001200993f0 T _fini
-0000000120000e10 T _init
-0000000120000e80 T _start
-000000012001e060 t alloc_proxy_textures
-000000012001d0a0 t alloc_shared_state
-0000000120068840 t antialiased_rgba_points
-0000000120073f40 t apply_stencil_op_to_pixels
-0000000120073af0 t apply_stencil_op_to_span
-000000012007f040 t apply_texture
-00000001200affb0 d blue.1
-000000012005f340 t buffer_size
-0000000120060230 t choose_line_function
-000000012005efb0 t clear
-000000012005ef70 t clear_color
-000000012005dfd0 t clear_color_buffer_with_masking
-000000012005de60 t clear_color_buffers
-000000012005ef60 t clear_index
-0000000120072360 t clip_span
-00000001200b93e8 s completed.1
-000000012003bd60 t components
-0000000120076630 t components_in_intformat
-000000012005ed60 t compute_row_addresses
-000000012001f550 t copy_ci_pixels
-000000012001f8e0 t copy_depth_pixels
-000000012001ec60 t copy_rgb_pixels
-000000012001fd10 t copy_stencil_pixels
-0000000120078d60 t copy_tex_sub_image
-00000001200aff20 W data_start
-000000012003aa90 t de_casteljau_surf
-000000012001b530 t decode_internal_format
-00000001200764c0 t decode_internal_format
-0000000120069f90 t dist_atten_antialiased_rgba_points
-0000000120069060 t dist_atten_general_ci_points
-00000001200694b0 t dist_atten_general_rgba_points
-00000001200699e0 t dist_atten_textured_rgba_points
-00000001200166a0 t do_blend
-0000000120032720 t draw_color_pixels
-0000000120031d60 t draw_depth_pixels
-0000000120031000 t draw_index_pixels
-0000000120031810 t draw_stencil_pixels
-0000000120030d40 t drawpixels
-0000000120030690 t enum_string
-0000000120022040 t execute_list
-00000001200b93c8 g extensions.3
-000000012004f6c0 t feedback_line
-00000001200675b0 t feedback_points
-0000000120083ac0 t feedback_triangle
-0000000120062050 t flat_blend_color_line
-0000000120062360 t flat_blend_color_z_line
-00000001200627b0 t flat_blend_color_z_line_write
-000000012004fc60 t flat_ci_line
-0000000120084040 t flat_ci_triangle
-000000012004ff10 t flat_ci_z_line
-0000000120061aa0 t flat_color_line
-0000000120061ce0 t flat_color_z_line
-0000000120061280 t flat_color_z_triangle
-0000000120050270 t flat_rgba_line
-0000000120085190 t flat_rgba_triangle
-0000000120050590 t flat_rgba_z_line
-00000001200557b0 t flat_textured_line
-0000000120000f60 t frame_dummy
-0000000120067c60 t general_ci_points
-00000001200527c0 t general_flat_ci_line
-0000000120054ac0 t general_flat_rgba_line
-0000000120067fe0 t general_rgba_points
-00000001200519d0 t general_smooth_ci_line
-0000000120053450 t general_smooth_rgba_line
-0000000120087f50 t general_textured_triangle
-0000000120083090 t get_1d_texel
-0000000120083300 t get_2d_texel
-00000001200835b0 t get_3d_texel
-00000001200036f0 T glAccum
-00000001200037a0 T glAlphaFunc
-0000000120003850 T glAreTexturesResident
-0000000120011bc0 T glAreTexturesResidentEXT
-0000000120003900 T glArrayElement
-0000000120011a80 T glArrayElementEXT
-00000001200039a0 T glBegin
-0000000120003a40 T glBindTexture
-0000000120011bf0 T glBindTextureEXT
-0000000120002f80 T glBitmap
-0000000120011560 T glBlendColorEXT
-00000001200114c0 T glBlendEquationEXT
-0000000120003ae0 T glBlendFunc
-0000000120003b80 T glCallList
-0000000120003c20 T glCallLists
-0000000120003cc0 T glClear
-0000000120003d60 T glClearAccum
-0000000120003ec0 T glClearColor
-0000000120003f80 T glClearDepth
-0000000120003e20 T glClearIndex
-0000000120004020 T glClearStencil
-00000001200040c0 T glClipPlane
-00000001200041a0 T glColor3b
-0000000120004d10 T glColor3bv
-0000000120004240 T glColor3d
-0000000120004de0 T glColor3dv
-0000000120004290 T glColor3f
-0000000120004e40 T glColor3fv
-00000001200042d0 T glColor3i
-0000000120004e80 T glColor3iv
-0000000120004370 T glColor3s
-0000000120004f20 T glColor3sv
-0000000120004410 T glColor3ub
-0000000120004ff0 T glColor3ubv
-0000000120004460 T glColor3ui
-0000000120005050 T glColor3uiv
-00000001200045a0 T glColor3us
-0000000120005190 T glColor3usv
-00000001200046d0 T glColor4b
-00000001200052d0 T glColor4bv
-0000000120004780 T glColor4d
-00000001200053d0 T glColor4dv
-00000001200047e0 T glColor4f
-0000000120005430 T glColor4fv
-0000000120004830 T glColor4i
-0000000120005480 T glColor4iv
-00000001200048e0 T glColor4s
-0000000120005540 T glColor4sv
-0000000120004990 T glColor4ub
-0000000120005640 T glColor4ubv
-00000001200049e0 T glColor4ui
-0000000120005680 T glColor4uiv
-0000000120004b80 T glColor4us
-0000000120005830 T glColor4usv
-00000001200059f0 T glColorMask
-0000000120005aa0 T glColorMaterial
-0000000120005b40 T glColorPointer
-0000000120011760 T glColorPointerEXT
-0000000120005d00 T glColorSubTableEXT
-0000000120005bf0 T glColorTableEXT
-0000000120005e10 T glCopyPixels
-0000000120005ec0 T glCopyTexImage1D
-0000000120005f80 T glCopyTexImage2D
-0000000120006050 T glCopyTexSubImage1D
-0000000120006110 T glCopyTexSubImage2D
-0000000120011d50 T glCopyTexSubImage3DEXT
-00000001200061e0 T glCullFace
-0000000120006460 T glDeleteLists
-0000000120006500 T glDeleteTextures
-0000000120011c20 T glDeleteTexturesEXT
-0000000120006280 T glDepthFunc
-0000000120006320 T glDepthMask
-00000001200063c0 T glDepthRange
-00000001200065a0 T glDisable
-0000000120006640 T glDisableClientState
-00000001200066e0 T glDrawArrays
-0000000120011b20 T glDrawArraysEXT
-0000000120006780 T glDrawBuffer
-0000000120006820 T glDrawElements
-00000001200068d0 T glDrawPixels
-0000000120007310 T glEdgeFlag
-0000000120007450 T glEdgeFlagPointer
-0000000120011940 T glEdgeFlagPointerEXT
-00000001200073b0 T glEdgeFlagv
-0000000120006980 T glEnable
-0000000120006a20 T glEnableClientState
-0000000120006ac0 T glEnd
-0000000120006b60 T glEndList
-0000000120006c00 T glEvalCoord1d
-0000000120006d40 T glEvalCoord1dv
-0000000120006ca0 T glEvalCoord1f
-0000000120006df0 T glEvalCoord1fv
-0000000120006e90 T glEvalCoord2d
-0000000120006fe0 T glEvalCoord2dv
-0000000120006f40 T glEvalCoord2f
-0000000120007090 T glEvalCoord2fv
-0000000120007270 T glEvalMesh1
-00000001200074f0 T glEvalMesh2
-0000000120007130 T glEvalPoint1
-00000001200071d0 T glEvalPoint2
-00000001200075a0 T glFeedbackBuffer
-0000000120007640 T glFinish
-00000001200076e0 T glFlush
-0000000120007780 T glFogf
-00000001200078e0 T glFogfv
-0000000120007820 T glFogi
-00000001200031c0 T glFogiv
-0000000120007980 T glFrontFace
-0000000120007a20 T glFrustum
-0000000120007ae0 T glGenLists
-0000000120007b80 T glGenTextures
-0000000120011c50 T glGenTexturesEXT
-0000000120007c20 T glGetBooleanv
-0000000120007cc0 T glGetClipPlane
-0000000120007d60 T glGetColorTableEXT
-0000000120007eb0 T glGetColorTableParameterfvEXT
-0000000120007e10 T glGetColorTableParameterivEXT
-0000000120007f80 T glGetDoublev
-0000000120008020 T glGetError
-0000000120008070 T glGetFloatv
-0000000120008110 T glGetIntegerv
-00000001200081b0 T glGetLightfv
-0000000120008250 T glGetLightiv
-00000001200082f0 T glGetMapdv
-0000000120008390 T glGetMapfv
-0000000120008430 T glGetMapiv
-00000001200084d0 T glGetMaterialfv
-0000000120008570 T glGetMaterialiv
-0000000120008610 T glGetPixelMapfv
-00000001200086b0 T glGetPixelMapuiv
-0000000120008750 T glGetPixelMapusv
-00000001200087f0 T glGetPointerv
-00000001200119e0 T glGetPointervEXT
-0000000120008890 T glGetPolygonStipple
-0000000120008930 T glGetString
-00000001200089c0 T glGetTexEnvfv
-0000000120008a60 T glGetTexEnviv
-0000000120008ba0 T glGetTexGendv
-0000000120008c40 T glGetTexGenfv
-0000000120008b00 T glGetTexGeniv
-0000000120008ce0 T glGetTexImage
-0000000120008d90 T glGetTexLevelParameterfv
-0000000120008e40 T glGetTexLevelParameteriv
-0000000120008ef0 T glGetTexParameterfv
-0000000120008f90 T glGetTexParameteriv
-0000000120009030 T glHint
-0000000120009370 T glIndexMask
-00000001200093b0 T glIndexPointer
-0000000120011800 T glIndexPointerEXT
-00000001200090d0 T glIndexd
-0000000120009210 T glIndexdv
-0000000120009110 T glIndexf
-0000000120009260 T glIndexfv
-0000000120009150 T glIndexi
-00000001200092a0 T glIndexiv
-0000000120009190 T glIndexs
-00000001200092e0 T glIndexsv
-00000001200091d0 T glIndexub
-0000000120009330 T glIndexubv
-00000001200094f0 T glInitNames
-0000000120009450 T glInterleavedArrays
-000000012000e330 T glIsEnabled
-0000000120009590 T glIsList
-0000000120009640 T glIsTexture
-0000000120011c80 T glIsTextureEXT
-0000000120009910 T glLightModelf
-0000000120009a70 T glLightModelfv
-00000001200099b0 T glLightModeli
-0000000120009b10 T glLightModeliv
-00000001200096f0 T glLightf
-0000000120009860 T glLightfv
-00000001200097a0 T glLighti
-0000000120003330 T glLightiv
-0000000120009d10 T glLineStipple
-0000000120009c70 T glLineWidth
-0000000120009db0 T glListBase
-0000000120009e50 T glLoadIdentity
-0000000120009ef0 T glLoadMatrixd
-0000000120009fd0 T glLoadMatrixf
-000000012000a070 T glLoadName
-000000012000a110 T glLogicOp
-000000012000a1b0 T glMap1d
-000000012000a2e0 T glMap1f
-000000012000a410 T glMap2d
-000000012000a580 T glMap2f
-000000012000a6e0 T glMapGrid1d
-000000012000a7a0 T glMapGrid1f
-000000012000a850 T glMapGrid2d
-000000012000a920 T glMapGrid2f
-000000012000a9d0 T glMaterialf
-000000012000ab40 T glMaterialfv
-000000012000aa80 T glMateriali
-0000000120003520 T glMaterialiv
-000000012000abe0 T glMatrixMode
-000000012000ac80 T glMultMatrixd
-000000012000ad60 T glMultMatrixf
-000000012000ae00 T glNewList
-000000012000aea0 T glNormal3b
-000000012000b250 T glNormal3bv
-000000012000af40 T glNormal3d
-000000012000b320 T glNormal3dv
-000000012000b070 T glNormal3f
-000000012000b460 T glNormal3fv
-000000012000b110 T glNormal3i
-000000012000b500 T glNormal3iv
-000000012000b1b0 T glNormal3s
-000000012000b5a0 T glNormal3sv
-000000012000b670 T glNormalPointer
-00000001200116c0 T glNormalPointerEXT
-000000012000bae0 T glOrtho
-000000012000bba0 T glPassThrough
-000000012000bc40 T glPixelMapfv
-000000012000b710 T glPixelMapuiv
-000000012000b8f0 T glPixelMapusv
-000000012000bce0 T glPixelStoref
-000000012000bd90 T glPixelStorei
-000000012000be30 T glPixelTransferf
-000000012000bee0 T glPixelTransferi
-000000012000bfa0 T glPixelZoom
-00000001200120f0 T glPointParameterfEXT
-0000000120012190 T glPointParameterfvEXT
-000000012000c040 T glPointSize
-000000012000c0e0 T glPolygonMode
-000000012000c180 T glPolygonOffset
-000000012000c220 T glPolygonOffsetEXT
-000000012000c2e0 T glPolygonStipple
-000000012000c380 T glPopAttrib
-000000012000c420 T glPopClientAttrib
-000000012000c4c0 T glPopMatrix
-000000012000c560 T glPopName
-000000012000c600 T glPrioritizeTextures
-0000000120011cb0 T glPrioritizeTexturesEXT
-000000012000e3e0 T glPushAttrib
-000000012000e480 T glPushClientAttrib
-000000012000c6a0 T glPushMatrix
-000000012000e520 T glPushName
-000000012000c740 T glRasterPos2d
-000000012000d090 T glRasterPos2dv
-000000012000c800 T glRasterPos2f
-000000012000d160 T glRasterPos2fv
-000000012000c8b0 T glRasterPos2i
-000000012000d220 T glRasterPos2iv
-000000012000c980 T glRasterPos2s
-000000012000d2f0 T glRasterPos2sv
-000000012000ca50 T glRasterPos3d
-000000012000d3e0 T glRasterPos3dv
-000000012000cb20 T glRasterPos3f
-000000012000d4a0 T glRasterPos3fv
-000000012000cbd0 T glRasterPos3i
-000000012000d550 T glRasterPos3iv
-000000012000cca0 T glRasterPos3s
-000000012000d620 T glRasterPos3sv
-000000012000cd70 T glRasterPos4d
-000000012000d730 T glRasterPos4dv
-000000012000ce30 T glRasterPos4f
-000000012000d7f0 T glRasterPos4fv
-000000012000cef0 T glRasterPos4i
-000000012000d8a0 T glRasterPos4iv
-000000012000cfc0 T glRasterPos4s
-000000012000d970 T glRasterPos4sv
-000000012000da90 T glReadBuffer
-000000012000db30 T glReadPixels
-000000012000dc00 T glRectd
-000000012000df20 T glRectdv
-000000012000dcc0 T glRectf
-000000012000dfe0 T glRectfv
-000000012000dd80 T glRecti
-000000012000e090 T glRectiv
-000000012000de50 T glRects
-000000012000e160 T glRectsv
-000000012000e5c0 T glRenderMode
-0000000120013510 T glResizeBuffersMESA
-000000012000e660 T glRotated
-000000012000e720 T glRotatef
-000000012000e880 T glScaled
-000000012000e930 T glScalef
-000000012000e280 T glScissor
-000000012000e7e0 T glSelectBuffer
-000000012000e9e0 T glShadeModel
-000000012000ea80 T glStencilFunc
-000000012000eb20 T glStencilMask
-000000012000ebc0 T glStencilOp
-000000012000ec60 T glTexCoord1d
-000000012000f210 T glTexCoord1dv
-000000012000ecb0 T glTexCoord1f
-000000012000f270 T glTexCoord1fv
-000000012000ed00 T glTexCoord1i
-000000012000f2c0 T glTexCoord1iv
-000000012000ed60 T glTexCoord1s
-000000012000f320 T glTexCoord1sv
-000000012000edc0 T glTexCoord2d
-000000012000f390 T glTexCoord2dv
-000000012000ee10 T glTexCoord2f
-000000012000f3e0 T glTexCoord2fv
-000000012000ee50 T glTexCoord2i
-000000012000f420 T glTexCoord2iv
-000000012000eea0 T glTexCoord2s
-000000012000f480 T glTexCoord2sv
-000000012000eef0 T glTexCoord3d
-000000012000f500 T glTexCoord3dv
-000000012000ef50 T glTexCoord3f
-000000012000f560 T glTexCoord3fv
-000000012000efa0 T glTexCoord3i
-000000012000f5b0 T glTexCoord3iv
-000000012000f010 T glTexCoord3s
-000000012000f620 T glTexCoord3sv
-000000012000f080 T glTexCoord4d
-000000012000f6c0 T glTexCoord4dv
-000000012000f0e0 T glTexCoord4f
-000000012000f720 T glTexCoord4fv
-000000012000f130 T glTexCoord4i
-000000012000f770 T glTexCoord4iv
-000000012000f1a0 T glTexCoord4s
-000000012000f7e0 T glTexCoord4sv
-000000012000f8a0 T glTexCoordPointer
-00000001200118a0 T glTexCoordPointerEXT
-000000012000fde0 T glTexEnvf
-000000012000ff60 T glTexEnvfv
-000000012000fe90 T glTexEnvi
-0000000120010000 T glTexEnviv
-000000012000f950 T glTexGend
-000000012000fb70 T glTexGendv
-000000012000fa00 T glTexGenf
-000000012000fd40 T glTexGenfv
-000000012000fab0 T glTexGeni
-000000012000fc50 T glTexGeniv
-0000000120010140 T glTexImage1D
-0000000120010280 T glTexImage2D
-0000000120011e30 T glTexImage3DEXT
-00000001200103c0 T glTexParameterf
-0000000120010540 T glTexParameterfv
-0000000120010470 T glTexParameteri
-00000001200105e0 T glTexParameteriv
-0000000120010750 T glTexSubImage1D
-0000000120010880 T glTexSubImage2D
-0000000120011f90 T glTexSubImage3DEXT
-00000001200109c0 T glTranslated
-0000000120010a70 T glTranslatef
-0000000120010b20 T glVertex2d
-0000000120010f30 T glVertex2dv
-0000000120010b70 T glVertex2f
-0000000120010f80 T glVertex2fv
-0000000120010bb0 T glVertex2i
-0000000120010fc0 T glVertex2iv
-0000000120010c00 T glVertex2s
-0000000120011020 T glVertex2sv
-0000000120010c50 T glVertex3d
-00000001200110a0 T glVertex3dv
-0000000120010ca0 T glVertex3f
-0000000120011100 T glVertex3fv
-0000000120010ce0 T glVertex3i
-0000000120011140 T glVertex3iv
-0000000120010d40 T glVertex3s
-00000001200111a0 T glVertex3sv
-0000000120010da0 T glVertex4d
-0000000120011240 T glVertex4dv
-0000000120010e00 T glVertex4f
-00000001200112a0 T glVertex4fv
-0000000120010e50 T glVertex4i
-00000001200112f0 T glVertex4iv
-0000000120010ec0 T glVertex4s
-0000000120011360 T glVertex4sv
-0000000120011420 T glVertexPointer
-0000000120011620 T glVertexPointerEXT
-0000000120011470 T glViewport
-0000000120012520 T glWindowPos2dMESA
-0000000120012830 T glWindowPos2dvMESA
-0000000120012470 T glWindowPos2fMESA
-0000000120012780 T glWindowPos2fvMESA
-00000001200122f0 T glWindowPos2iMESA
-00000001200125e0 T glWindowPos2ivMESA
-00000001200123b0 T glWindowPos2sMESA
-00000001200126a0 T glWindowPos2svMESA
-0000000120012b40 T glWindowPos3dMESA
-0000000120012e70 T glWindowPos3dvMESA
-0000000120012a90 T glWindowPos3fMESA
-0000000120012dc0 T glWindowPos3fvMESA
-00000001200128f0 T glWindowPos3iMESA
-0000000120012c00 T glWindowPos3ivMESA
-00000001200129c0 T glWindowPos3sMESA
-0000000120012cc0 T glWindowPos3svMESA
-00000001200130d0 T glWindowPos4dMESA
-0000000120013440 T glWindowPos4dvMESA
-0000000120012230 T glWindowPos4fMESA
-0000000120013390 T glWindowPos4fvMESA
-0000000120012f30 T glWindowPos4iMESA
-0000000120013190 T glWindowPos4ivMESA
-0000000120013000 T glWindowPos4sMESA
-0000000120013270 T glWindowPos4svMESA
-0000000120000fb0 T gl_Accum
-0000000120002660 T gl_AlphaFunc
-0000000120079e90 T gl_AreTexturesResident
-000000012008ba30 T gl_ArrayElement
-000000012008e8e0 T gl_Begin
-0000000120079a30 T gl_BindTexture
-0000000120015e40 T gl_Bitmap
-00000001200163a0 T gl_BlendColor
-00000001200162a0 T gl_BlendEquation
-0000000120016160 T gl_BlendFunc
-000000012002faf0 T gl_CallList
-000000012002fb50 T gl_CallLists
-000000012005dc40 T gl_Clear
-0000000120002200 T gl_ClearAccum
-000000012005da80 T gl_ClearColor
-0000000120021400 T gl_ClearDepth
-000000012005d9e0 T gl_ClearIndex
-0000000120073640 T gl_ClearStencil
-000000012001a5e0 T gl_ClipPlane
-000000012008ed20 T gl_Color3f
-000000012008ef20 T gl_Color3fv
-000000012008f120 T gl_Color4f
-000000012008f390 T gl_Color4fv
-000000012008f600 T gl_Color4ub
-000000012008f730 T gl_Color4ub8bit
-000000012008f780 T gl_Color4ubv
-000000012008f8d0 T gl_Color4ubv8bit
-000000012005a770 T gl_ColorMask
-000000012008f900 T gl_ColorMat3f
-000000012008fb20 T gl_ColorMat3fv
-000000012008fd60 T gl_ColorMat4f
-0000000120090010 T gl_ColorMat4fv
-00000001200902d0 T gl_ColorMat4ub
-00000001200904c0 T gl_ColorMat4ubv
-000000012004e190 T gl_ColorMaterial
-000000012008b750 T gl_ColorPointer
-000000012001b3e0 T gl_ColorSubTable
-000000012001b010 T gl_ColorTable
-000000012001e8d0 T gl_CopyPixels
-0000000120075a90 T gl_CopyTexImage1D
-0000000120075c50 T gl_CopyTexImage2D
-0000000120075e50 T gl_CopyTexSubImage1D
-0000000120075f80 T gl_CopyTexSubImage2D
-0000000120076110 T gl_CopyTexSubImage3DEXT
-000000012006ab20 T gl_CullFace
-000000012002f860 T gl_DeleteLists
-0000000120079820 T gl_DeleteTextures
-0000000120021490 T gl_DepthFunc
-0000000120021520 T gl_DepthMask
-00000001200215a0 T gl_DepthRange
-0000000120034b10 T gl_Disable
-0000000120034dd0 T gl_DisableClientState
-000000012008d0d0 T gl_DrawArrays
-000000012005d6c0 T gl_DrawBuffer
-000000012008d990 T gl_DrawElements
-0000000120030830 T gl_DrawPixels
-0000000120090710 T gl_EdgeFlag
-000000012008e1f0 T gl_EdgeFlagPointer
-0000000120034b00 T gl_Enable
-0000000120034c50 T gl_EnableClientState
-00000001200908e0 T gl_End
-000000012002f920 T gl_EndList
-00000001200388a0 T gl_EvalCoord1f
-0000000120038d40 T gl_EvalCoord2f
-0000000120039690 T gl_EvalMesh1
-0000000120039830 T gl_EvalMesh2
-000000012003a440 T gl_EvalPoint1
-0000000120039530 T gl_EvalPoint2
-000000012003bdd0 T gl_FeedbackBuffer
-000000012005dd80 T gl_Finish
-000000012005ddf0 T gl_Flush
-000000012003ca70 T gl_Fogfv
-000000012006abc0 T gl_FrontFace
-000000012005aae0 T gl_Frustum
-0000000120023540 T gl_GenLists
-0000000120079fc0 T gl_GenTextures
-000000012003e2d0 T gl_GetBooleanv
-000000012001a6b0 T gl_GetClipPlane
-000000012001b420 T gl_GetColorTable
-000000012001b4e0 T gl_GetColorTableParameterfv
-000000012001b280 T gl_GetColorTableParameteriv
-00000001200419d0 T gl_GetDoublev
-000000012001d050 T gl_GetError
-0000000120045800 T gl_GetFloatv
-00000001200492e0 T gl_GetIntegerv
-000000012004d830 T gl_GetLightfv
-000000012004da80 T gl_GetLightiv
-00000001200367e0 T gl_GetMapdv
-0000000120037060 T gl_GetMapfv
-0000000120037930 T gl_GetMapiv
-000000012004e390 T gl_GetMaterialfv
-000000012004e5b0 T gl_GetMaterialiv
-0000000120065190 T gl_GetPixelMapfv
-0000000120065350 T gl_GetPixelMapuiv
-0000000120065790 T gl_GetPixelMapusv
-000000012004b460 T gl_GetPointerv
-000000012006ad10 T gl_GetPolygonStipple
-000000012005d420 T gl_GetString
-000000012007bb80 T gl_GetTexEnvfv
-000000012007bc70 T gl_GetTexEnviv
-000000012007b420 T gl_GetTexGendv
-000000012007b680 T gl_GetTexGenfv
-000000012007b920 T gl_GetTexGeniv
-00000001200763a0 T gl_GetTexImage
-000000012007bd60 T gl_GetTexLevelParameterfv
-000000012007a6d0 T gl_GetTexLevelParameteriv
-000000012007a990 T gl_GetTexParameterfv
-000000012007ad00 T gl_GetTexParameteriv
-000000012005d5d0 T gl_Hint
-000000012005a700 T gl_IndexMask
-000000012008b860 T gl_IndexPointer
-000000012008ecc0 T gl_Indexf
-000000012008ecf0 T gl_Indexi
-000000012003c620 T gl_InitNames
-000000012008dcf0 T gl_InterleavedArrays
-00000001200344c0 T gl_IsEnabled
-00000001200234e0 T gl_IsList
-000000012007a0a0 T gl_IsTexture
-000000012004f2e0 T gl_LightModelfv
-000000012004d340 T gl_Lightfv
-000000012004f620 T gl_LineStipple
-000000012004f5a0 T gl_LineWidth
-00000001200237c0 T gl_ListBase
-000000012005b3e0 T gl_LoadIdentity
-000000012005c980 T gl_LoadMatrixf
-000000012003c1d0 T gl_LoadName
-0000000120057ab0 T gl_LogicOp
-0000000120035d40 T gl_Map1f
-0000000120036220 T gl_Map2f
-000000012003a320 T gl_MapGrid1f
-000000012003a3a0 T gl_MapGrid2f
-000000012004e290 T gl_Materialfv
-000000012005c900 T gl_MatrixMode
-000000012005b6f0 T gl_MultMatrixf
-0000000120023690 T gl_NewList
-000000012008ec50 T gl_Normal3f
-000000012008ec80 T gl_Normal3fv
-000000012008b670 T gl_NormalPointer
-000000012005aca0 T gl_Ortho
-000000012003c470 T gl_PassThrough
-0000000120064bc0 T gl_PixelMapfv
-00000001200648a0 T gl_PixelStorei
-0000000120065ce0 T gl_PixelTransferf
-0000000120066320 T gl_PixelZoom
-0000000120067160 T gl_PointParameterfvEXT
-0000000120067530 T gl_PointSize
-000000012006aa00 T gl_PolygonMode
-000000012006ad20 T gl_PolygonOffset
-000000012006ac30 T gl_PolygonStipple
-0000000120014560 T gl_PopAttrib
-00000001200156b0 T gl_PopClientAttrib
-000000012005b0e0 T gl_PopMatrix
-000000012003c7f0 T gl_PopName
-0000000120079d50 T gl_PrioritizeTextures
-00000001200135b0 T gl_PushAttrib
-0000000120015470 T gl_PushClientAttrib
-000000012005adf0 T gl_PushMatrix
-000000012003c710 T gl_PushName
-000000012006ae90 T gl_RasterPos4f
-000000012005d860 T gl_ReadBuffer
-000000012006b910 T gl_ReadPixels
-000000012006e450 T gl_Rectf
-000000012003c2b0 T gl_RenderMode
-000000012001c560 T gl_ResizeBuffersMESA
-000000012005cbf0 T gl_Rotatef
-000000012005bd30 T gl_Scalef
-000000012006e580 T gl_Scissor
-000000012003c530 T gl_SelectBuffer
-000000012004f240 T gl_ShadeModel
-00000001200736c0 T gl_StencilFunc
-0000000120073790 T gl_StencilMask
-0000000120072410 T gl_StencilOp
-0000000120090830 T gl_TexCoord2f
-0000000120090840 T gl_TexCoord2f4
-0000000120090870 T gl_TexCoord4f
-000000012008b930 T gl_TexCoordPointer
-000000012007a130 T gl_TexEnvfv
-000000012007b0b0 T gl_TexGenfv
-0000000120074530 T gl_TexImage1D
-00000001200747e0 T gl_TexImage2D
-0000000120074a90 T gl_TexImage3DEXT
-000000012007a330 T gl_TexParameterfv
-0000000120074d70 T gl_TexSubImage1D
-0000000120075090 T gl_TexSubImage2D
-00000001200754f0 T gl_TexSubImage3DEXT
-000000012005bec0 T gl_Translatef
-000000012008b570 T gl_VertexPointer
-000000012005cc40 T gl_Viewport
-00000001200979a0 T gl_WindowPos4fMESA
-0000000120002140 T gl_alloc_accum_buffer
-0000000120002740 T gl_alloc_alpha_buffers
-0000000120021b40 T gl_alloc_depth_buffer
-0000000120063ad0 T gl_alloc_pb
-00000001200738f0 T gl_alloc_stencil_buffer
-00000001200762f0 T gl_alloc_texture_image
-00000001200792d0 T gl_alloc_texture_object
-000000012008e270 T gl_alloc_vb
-0000000120002330 T gl_alpha_test
-000000012005c080 T gl_analyze_modelview_matrix
-000000012005c3f0 T gl_analyze_projection_matrix
-000000012005c6a0 T gl_analyze_texture_matrix
-0000000120016550 T gl_blend_pixels
-0000000120016460 T gl_blend_span
-0000000120001da0 T gl_clear_accum_buffer
-00000001200028e0 T gl_clear_alpha_buffers
-00000001200210d0 T gl_clear_depth_buffer
-00000001200739d0 T gl_clear_stencil_buffer
-0000000120034b20 T gl_client_state
-000000012006e780 T gl_color_shade_vertices
-000000012006f180 T gl_color_shade_vertices_fast
-000000012004d210 T gl_components_in_format
-000000012004eaf0 T gl_compute_material_shine_table
-000000012004e9c0 T gl_compute_spot_exp_table
-000000012001bd80 T gl_copy_context
-0000000120039f40 T gl_copy_map_points1d
-0000000120039e50 T gl_copy_map_points1f
-000000012003a1a0 T gl_copy_map_points2d
-000000012003a030 T gl_copy_map_points2f
-000000012001b9f0 T gl_create_context
-000000012001ce30 T gl_create_framebuffer
-000000012001b670 T gl_create_visual
-0000000120073450 T gl_depth_stencil_pixels
-0000000120072b50 T gl_depth_stencil_span
-0000000120020790 T gl_depth_test_pixels_generic
-00000001200218d0 T gl_depth_test_pixels_greater
-0000000120021810 T gl_depth_test_pixels_less
-0000000120020000 T gl_depth_test_span_generic
-0000000120021760 T gl_depth_test_span_greater
-00000001200216b0 T gl_depth_test_span_less
-000000012001cc60 T gl_destroy_context
-000000012001bc70 T gl_destroy_framebuffer
-0000000120021c00 T gl_destroy_list
-000000012001cc30 T gl_destroy_visual
-0000000120034f00 t gl_enable
-000000012001c1d0 T gl_error
-000000012008e670 T gl_eval_vertex
-000000012003bf70 T gl_feedback_vertex
-000000012004d020 T gl_flip_bytes
-0000000120062c40 T gl_flush_pb
-000000012003d4d0 T gl_fog_color_pixels
-000000012003cbb0 T gl_fog_color_vertices
-000000012003dd90 T gl_fog_index_pixels
-000000012003d140 T gl_fog_index_vertices
-0000000120035b70 T gl_free_control_points
-000000012004d2d0 T gl_free_image
-0000000120076330 T gl_free_texture_image
-0000000120079420 T gl_free_texture_object
-000000012001cef0 T gl_get_current_context
-000000012006f6b0 T gl_index_shade_vertices
-00000001200664a0 T gl_init_api_function_pointers
-0000000120039e30 T gl_init_eval
-0000000120021e00 T gl_init_lists
-000000012005e3c0 T gl_init_math
-0000000120023820 T gl_list_index
-0000000120058140 T gl_logicop_ci_pixels
-0000000120057b40 T gl_logicop_ci_span
-00000001200595d0 T gl_logicop_rgba_pixels
-0000000120058740 T gl_logicop_rgba_span
-000000012001ce90 T gl_make_current
-000000012005a540 T gl_mask_color_pixels
-000000012005a800 T gl_mask_color_span
-000000012005aa20 T gl_mask_index_pixels
-000000012005a960 T gl_mask_index_span
-000000012004dd90 T gl_material_bitmask
-000000012004bd20 T gl_pixel_addr_in_image
-000000012001cf60 T gl_problem
-0000000120002ef0 T gl_read_alpha_pixels
-0000000120002e80 T gl_read_alpha_span
-0000000120071ff0 T gl_read_color_span
-0000000120021990 T gl_read_depth_span_float
-0000000120021aa0 T gl_read_depth_span_int
-0000000120072220 T gl_read_index_span
-0000000120073810 T gl_read_stencil_span
-00000001200159f0 T gl_render_bitmap
-0000000120091e80 T gl_render_vb
-0000000120092c40 T gl_reset_vb
-000000012005bae0 T gl_rotation_matrix
-0000000120023840 T gl_save_Accum
-00000001200239c0 T gl_save_AlphaFunc
-000000012008c820 T gl_save_ArrayElement
-0000000120023b40 T gl_save_Begin
-0000000120023cb0 T gl_save_BindTexture
-0000000120023e30 T gl_save_Bitmap
-0000000120024300 T gl_save_BlendColor
-0000000120024010 T gl_save_BlendEquation
-0000000120024180 T gl_save_BlendFunc
-00000001200244b0 T gl_save_CallList
-0000000120024620 T gl_save_CallLists
-00000001200247e0 T gl_save_Clear
-0000000120024950 T gl_save_ClearAccum
-0000000120024b00 T gl_save_ClearColor
-0000000120024cb0 T gl_save_ClearDepth
-0000000120024e30 T gl_save_ClearIndex
-0000000120024fa0 T gl_save_ClearStencil
-0000000120025110 T gl_save_ClipPlane
-00000001200252b0 T gl_save_Color3f
-0000000120025450 T gl_save_Color3fv
-00000001200255d0 T gl_save_Color4f
-0000000120025780 T gl_save_Color4fv
-0000000120025910 T gl_save_Color4ub
-0000000120025ae0 T gl_save_Color4ubv
-0000000120025cc0 T gl_save_ColorMask
-0000000120025e90 T gl_save_ColorMaterial
-00000001200261c0 T gl_save_ColorSubTable
-0000000120026010 T gl_save_ColorTable
-0000000120026370 T gl_save_CopyPixels
-0000000120026520 T gl_save_CopyTexImage1D
-0000000120026700 T gl_save_CopyTexImage2D
-00000001200268f0 T gl_save_CopyTexSubImage1D
-0000000120026ab0 T gl_save_CopyTexSubImage2D
-0000000120026ca0 T gl_save_CopyTexSubImage3DEXT
-0000000120026eb0 T gl_save_CullFace
-0000000120027020 T gl_save_DepthFunc
-0000000120027190 T gl_save_DepthMask
-0000000120027310 T gl_save_DepthRange
-00000001200274a0 T gl_save_Disable
-000000012008d8a0 T gl_save_DrawArrays
-0000000120027610 T gl_save_DrawBuffer
-000000012008db60 T gl_save_DrawElements
-0000000120027780 T gl_save_DrawPixels
-00000001200278f0 T gl_save_EdgeFlag
-0000000120027a70 T gl_save_Enable
-0000000120027be0 T gl_save_End
-0000000120027d40 T gl_save_EvalCoord1f
-0000000120027eb0 T gl_save_EvalCoord2f
-0000000120028030 T gl_save_EvalMesh1
-00000001200281c0 T gl_save_EvalMesh2
-0000000120028370 T gl_save_EvalPoint1
-00000001200284e0 T gl_save_EvalPoint2
-0000000120028660 T gl_save_Fogfv
-0000000120028800 T gl_save_FrontFace
-0000000120028970 T gl_save_Frustum
-0000000120028b60 T gl_save_Hint
-0000000120028fd0 T gl_save_IndexMask
-0000000120028e50 T gl_save_Indexf
-0000000120028ce0 T gl_save_Indexi
-0000000120029140 T gl_save_InitNames
-000000012008e260 T gl_save_InterleavedArrays
-0000000120029460 T gl_save_LightModelfv
-00000001200292a0 T gl_save_Lightfv
-0000000120029600 T gl_save_LineStipple
-0000000120029790 T gl_save_LineWidth
-0000000120029900 T gl_save_ListBase
-0000000120029a70 T gl_save_LoadIdentity
-0000000120029bd0 T gl_save_LoadMatrixf
-0000000120029d70 T gl_save_LoadName
-0000000120029ee0 T gl_save_LogicOp
-000000012002a050 T gl_save_Map1f
-000000012002a220 T gl_save_Map2f
-000000012002a440 T gl_save_MapGrid1f
-000000012002a5e0 T gl_save_MapGrid2f
-000000012002a7b0 T gl_save_Materialfv
-000000012002a960 T gl_save_MatrixMode
-000000012002aad0 T gl_save_MultMatrixf
-000000012002ac70 T gl_save_NewList
-000000012002ae30 T gl_save_Normal3f
-000000012002acb0 T gl_save_Normal3fv
-000000012002afd0 T gl_save_Ortho
-000000012002ca10 T gl_save_PassThrough
-000000012002b1c0 T gl_save_PixelMapfv
-000000012002b390 T gl_save_PixelTransferf
-000000012002b510 T gl_save_PixelZoom
-000000012002b690 T gl_save_PointParameterfvEXT
-000000012002b830 T gl_save_PointSize
-000000012002b9a0 T gl_save_PolygonMode
-000000012002bcc0 T gl_save_PolygonOffset
-000000012002bb20 T gl_save_PolygonStipple
-000000012002be40 T gl_save_PopAttrib
-000000012002bfa0 T gl_save_PopMatrix
-000000012002c100 T gl_save_PopName
-000000012002c260 T gl_save_PrioritizeTextures
-000000012002c420 T gl_save_PushAttrib
-000000012002c590 T gl_save_PushMatrix
-000000012002c6f0 T gl_save_PushName
-000000012002c860 T gl_save_RasterPos4f
-000000012002cb80 T gl_save_ReadBuffer
-000000012002ccf0 T gl_save_Rectf
-000000012002cea0 T gl_save_Rotatef
-000000012002cf00 T gl_save_Scalef
-000000012002d0a0 T gl_save_Scissor
-000000012002d240 T gl_save_ShadeModel
-000000012002d3b0 T gl_save_StencilFunc
-000000012002d540 T gl_save_StencilMask
-000000012002d6b0 T gl_save_StencilOp
-000000012002d840 T gl_save_TexCoord2f
-000000012002d9c0 T gl_save_TexCoord4f
-000000012002db70 T gl_save_TexEnvfv
-000000012002dd20 T gl_save_TexGenfv
-000000012002e080 T gl_save_TexImage1D
-000000012002e280 T gl_save_TexImage2D
-000000012002e4a0 T gl_save_TexImage3DEXT
-000000012002ded0 T gl_save_TexParameterfv
-000000012002e6c0 T gl_save_TexSubImage1D
-000000012002e8b0 T gl_save_TexSubImage2D
-000000012002ead0 T gl_save_TexSubImage3DEXT
-000000012002ed20 T gl_save_Translatef
-000000012002eec0 T gl_save_Vertex2f
-000000012002f040 T gl_save_Vertex3f
-000000012002f390 T gl_save_Vertex3fv
-000000012002f1e0 T gl_save_Vertex4f
-000000012002f510 T gl_save_Viewport
-000000012002f6b0 T gl_save_WindowPos4fMESA
-000000012006e6e0 T gl_scissor_pixels
-000000012006e620 T gl_scissor_span
-000000012001cf10 T gl_set_api_table
-000000012008e570 T gl_set_color_function
-000000012004f430 T gl_set_line_function
-000000012004de80 T gl_set_material
-00000001200673e0 T gl_set_point_function
-000000012006ad80 T gl_set_quad_function
-000000012007c950 T gl_set_texture_sampler
-00000001200838a0 T gl_set_triangle_function
-000000012008e3c0 T gl_set_vertex_function
-000000012004d180 T gl_sizeof_type
-000000012005e370 T gl_sqrt
-0000000120072d40 T gl_stencil_pixels
-0000000120072510 T gl_stencil_span
-000000012004d0c0 T gl_swap2
-000000012004d120 T gl_swap4
-0000000120079540 T gl_test_texture_object_completeness
-000000012007be80 T gl_texgen
-000000012007cb00 T gl_texture_pixels
-0000000120095710 T gl_transform_vb_part1
-00000001200952a0 T gl_transform_vb_part2
-0000000120098180 T gl_transform_vector
-0000000120016120 T gl_unpack_bitmap
-000000012004d290 T gl_unpack_image
-000000012004bf80 T gl_unpack_image3D
-0000000120065f90 T gl_unpack_pixels
-00000001200763e0 T gl_unpack_texsubimage
-000000012003c6b0 T gl_update_hitflag
-000000012004eb30 T gl_update_lighting
-000000012001c690 T gl_update_state
-000000012007bdb0 T gl_update_texture_state
-0000000120019bc0 T gl_userclip_line
-000000012001a800 T gl_userclip_point
-0000000120019fe0 T gl_userclip_polygon
-00000001200907b0 T gl_vertex2f_nop
-0000000120090770 T gl_vertex3f_nop
-00000001200907f0 T gl_vertex3fv_nop
-0000000120090730 T gl_vertex4f_nop
-0000000120017660 T gl_viewclip_line
-000000012001a770 T gl_viewclip_point
-0000000120018340 T gl_viewclip_polygon
-000000012001cfd0 T gl_warning
-000000012006b500 T gl_windowpos
-0000000120002c50 T gl_write_alpha_pixels
-0000000120002ac0 T gl_write_alpha_span
-0000000120070780 T gl_write_color_span
-000000012006fd10 T gl_write_index_span
-0000000120002d70 T gl_write_mono_alpha_pixels
-0000000120002ba0 T gl_write_mono_alpha_span
-0000000120070f00 T gl_write_monocolor_span
-00000001200701b0 T gl_write_monoindex_span
-0000000120073880 T gl_write_stencil_span
-0000000120071840 T gl_write_texture_span
-0000000120063b50 T gl_write_zoomed_color_span
-00000001200640c0 T gl_write_zoomed_index_span
-00000001200644e0 T gl_write_zoomed_stencil_span
-0000000120097ea0 T gl_xform_normals_3fv
-0000000120097c90 T gl_xform_points_3fv
-00000001200979d0 T gl_xform_points_4fv
-00000001200b0020 d grayblue.8
-00000001200b0010 d graygreen.7
-00000001200b0000 d grayred.6
-000000012003a500 t horner_bezier_curve
-000000012003a720 t horner_bezier_surf
-00000001200aff20 d identity.0
-0000000120076780 t image_to_texture
-0000000120066b90 t init_dlist_pointers
-00000001200665c0 t init_exec_pointers
-00000001200b93f8 s init_flag.0
-00000001200b9420 s init_flag.0
-000000012001e7c0 t init_light
-000000012001d270 t initialize_context
-00000001200b9424 s initialized.0
-000000012001a8c0 t interpolate_aux
-000000012005cda0 t invert_matrix
-000000012005d130 t invert_matrix_general
-00000001200897a0 t lambda_textured_triangle
-0000000120098270 T main
-0000000120077d40 t make_null_texture
-000000012002fc30 T mesa_print_display_list
-0000000120057aa0 t null_line
-0000000120069050 t null_points
-000000012006ae80 t null_quad
-000000012008b560 t null_triangle
-000000012007e110 t opt_sample_rgb_2d
-000000012007e2c0 t opt_sample_rgba_2d
-000000012005e7c0 t osmesa_setup_DD_pointers
-00000001200b93b0 g p.0
-0000000120082df0 t palette_sample
-00000001200afff0 d posblue.5
-00000001200affe0 d posgreen.4
-00000001200affd0 d posred.3
-000000012002fdd0 t print_list
-00000001200963f0 t project_and_cliptest
-000000012006ade0 t quad
-0000000120030ae0 t quickdraw_rgb
-0000000120078780 t read_color_image
-000000012005fa40 t read_color_pixels
-000000012006ce90 t read_color_pixels
-00000001200600f0 t read_color_pixels3
-000000012005f8e0 t read_color_span
-000000012005fff0 t read_color_span3
-000000012006c140 t read_depth_pixels
-000000012005f9c0 t read_index_pixels
-000000012006bae0 t read_index_pixels
-000000012005f890 t read_index_span
-000000012006c880 t read_stencil_pixels
-0000000120093ac0 t render_clipped_line
-0000000120094390 t render_clipped_polygon
-0000000120093f70 t render_polygon
-0000000120094d40 t render_quad
-0000000120094a70 t render_triangle
-00000001200b9a00 b renderer.0
-0000000120061a80 t renderer_string
-00000001200807d0 t sample_1d_linear
-00000001200804c0 t sample_1d_nearest
-0000000120081060 t sample_2d_linear
-0000000120080c70 t sample_2d_nearest
-0000000120081dd0 t sample_3d_linear
-0000000120081920 t sample_3d_nearest
-000000012007cd70 t sample_lambda_1d
-000000012007d7d0 t sample_lambda_2d
-000000012007e680 t sample_lambda_3d
-000000012007ccb0 t sample_linear_1d
-000000012007d700 t sample_linear_2d
-000000012007e5a0 t sample_linear_3d
-000000012007cbf0 t sample_nearest_1d
-000000012007d630 t sample_nearest_2d
-000000012007e4c0 t sample_nearest_3d
-000000012004fbb0 t select_line
-0000000120067950 t select_points
-0000000120083f60 t select_triangle
-000000012005ef50 t set_buffer
-000000012005f300 t set_color
-000000012005f2f0 t set_index
-0000000120096f30 t shade_vertices
-0000000120086820 t simple_textured_triangle
-0000000120087250 t simple_z_textured_triangle
-0000000120067280 T size1_ci_points
-0000000120067a30 t size1_rgba_points
-0000000120050960 t smooth_ci_line
-0000000120084850 t smooth_ci_triangle
-0000000120050bc0 t smooth_ci_z_line
-0000000120060460 t smooth_color_z_triangle
-0000000120050f00 t smooth_rgba_line
-0000000120085a20 t smooth_rgba_triangle
-00000001200513f0 t smooth_rgba_z_line
-0000000120056630 t smooth_textured_line
-00000001200b9de8 b sqrttab
-00000001200affa0 d texPlane.0
-0000000120078040 t texture_1d_error_check
-0000000120078250 t texture_2d_error_check
-00000001200784a0 t texture_3d_error_check
-00000001200683e0 t textured_rgba_points
-00000001200b9618 b tmp
-0000000120095830 t transform_points3
-0000000120095c40 t transform_points4
-00000001200960b0 t transform_texcoords
-000000012002fc50 t translate_id
-0000000120095020 t unfilled_polygon
-000000012001e720 t update_clipmask
-0000000120097630 t update_material
-000000012001e320 t update_pixel_logic
-000000012001e3f0 t update_pixel_masking
-000000012001e520 t update_rasterflags
-0000000120096b10 t userclip_vertices
-00000001200b93b8 g vendor.1
-00000001200b93c0 g version.2
-00000001200916b0 t vertex2f_color
-0000000120091500 t vertex2f_color_tex2
-00000001200915d0 t vertex2f_color_tex4
-0000000120090b20 t vertex2f_feedback
-0000000120091770 t vertex2f_index
-0000000120091440 t vertex2f_normal
-0000000120091250 t vertex2f_normal_color_tex2
-0000000120091340 t vertex2f_normal_color_tex4
-00000001200910d0 t vertex3f_color
-0000000120090f20 t vertex3f_color_tex2
-0000000120090ff0 t vertex3f_color_tex4
-0000000120090b00 t vertex3f_feedback
-0000000120091190 t vertex3f_index
-0000000120090e60 t vertex3f_normal
-0000000120090c70 t vertex3f_normal_color_tex2
-0000000120090d60 t vertex3f_normal_color_tex4
-0000000120091ce0 t vertex3fv_color
-0000000120091b10 t vertex3fv_color_tex2
-0000000120091bf0 t vertex3fv_color_tex4
-0000000120090b40 t vertex3fv_feedback
-0000000120091db0 t vertex3fv_index
-0000000120091a40 t vertex3fv_normal
-0000000120091830 t vertex3fv_normal_color_tex2
-0000000120091930 t vertex3fv_normal_color_tex4
-0000000120090b60 t vertex4
-00000001200909f0 t vertex4f_feedback
-0000000120096c50 t viewport_map_vertices
-00000001200affc0 d white.2
-000000012005f520 t write_color_pixels
-000000012005fde0 t write_color_pixels3
-000000012005f360 t write_color_span
-000000012005fb50 t write_color_span3
-000000012003c8c0 t write_hit_record
-000000012005f780 t write_index_pixels
-000000012005f6a0 t write_index_span
-000000012005f630 t write_monocolor_pixels
-000000012005fef0 t write_monocolor_pixels3
-000000012005f4d0 t write_monocolor_span
-000000012005fcf0 t write_monocolor_span3
-000000012005f810 t write_monoindex_pixels
-000000012005f710 t write_monoindex_span
diff --git a/configs/boot/micro_ctx.rcS b/configs/boot/micro_ctx.rcS
deleted file mode 100644 (file)
index 4d1c5bc..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/benchmarks/micros/lmbench/bin/alphaev6-linux-gnu/lat_ctx 2 4 8 16  
-m5 exit
-
diff --git a/configs/boot/micro_memlat.rcS b/configs/boot/micro_memlat.rcS
deleted file mode 100644 (file)
index 3bf6b6b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-m5 checkpoint 1 999999999
-/benchmarks/micros/lmbench/bin/alphaev6-linux-gnu/lat_mem_rd 64
-m5 exit
-
diff --git a/configs/boot/micro_memlat2mb.rcS b/configs/boot/micro_memlat2mb.rcS
deleted file mode 100644 (file)
index 12643c6..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/benchmarks/micros/lmbench/bin/alphaev6-linux-gnu/lat_mem_rd_2MB 2 64
-m5 exit
-
diff --git a/configs/boot/micro_memlat8.rcS b/configs/boot/micro_memlat8.rcS
deleted file mode 100644 (file)
index c831c2b..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/benchmarks/micros/lmbench/bin/alphaev6-linux-gnu/lat_mem_rd 128 8
-m5 exit
-
diff --git a/configs/boot/micro_memlat8mb.rcS b/configs/boot/micro_memlat8mb.rcS
deleted file mode 100644 (file)
index 1688a64..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/benchmarks/micros/lmbench/bin/alphaev6-linux-gnu/lat_mem_rd_8MB 8 64
-m5 exit
-
diff --git a/configs/boot/micro_stream.rcS b/configs/boot/micro_stream.rcS
deleted file mode 100644 (file)
index 1cf3a7d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/benchmarks/micros/simstream
-m5 exit
-
diff --git a/configs/boot/micro_streamcopy.rcS b/configs/boot/micro_streamcopy.rcS
deleted file mode 100644 (file)
index 820e840..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/benchmarks/micros/simstreamcopy
-m5 exit
-
diff --git a/configs/boot/micro_streamscale.rcS b/configs/boot/micro_streamscale.rcS
deleted file mode 100644 (file)
index 005da8d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/benchmarks/micros/simstreamscale
-m5 exit
-
diff --git a/configs/boot/micro_syscall.rcS b/configs/boot/micro_syscall.rcS
deleted file mode 100644 (file)
index f954bec..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/benchmarks/micros/lmbench/bin/alphaev6-linux-gnu/lat_syscall read
-m5 exit
-
diff --git a/configs/boot/micro_tlblat.rcS b/configs/boot/micro_tlblat.rcS
deleted file mode 100644 (file)
index fd5fd53..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/benchmarks/micros/lmbench/bin/alphaev6-linux-gnu/lat_mem_rd_2MB 20 8192 
-m5 exit
-
diff --git a/configs/boot/micro_tlblat2.rcS b/configs/boot/micro_tlblat2.rcS
deleted file mode 100644 (file)
index ab05fd9..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/benchmarks/micros/lmbench/bin/alphaev6-linux-gnu/lat_mem_rd_2MB 2 8192 
-m5 exit
-
diff --git a/configs/boot/micro_tlblat3.rcS b/configs/boot/micro_tlblat3.rcS
deleted file mode 100644 (file)
index fd5fd53..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/benchmarks/micros/lmbench/bin/alphaev6-linux-gnu/lat_mem_rd_2MB 20 8192 
-m5 exit
-
diff --git a/configs/boot/mutex-test.rcS b/configs/boot/mutex-test.rcS
deleted file mode 100644 (file)
index 798986c..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-cd /benchmarks
-/sbin/m5 resetstats 
-./pthread_mutex_test 4 10000
-/sbin/m5 exit
diff --git a/configs/boot/nat-netperf-maerts-client.rcS b/configs/boot/nat-netperf-maerts-client.rcS
deleted file mode 100644 (file)
index d8a6d4d..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/sh
-SERVER=192.168.0.1
-CLIENT=10.0.0.2
-
-echo "setting up network..."
-ifconfig lo 127.0.0.1
-ifconfig eth0 $CLIENT txqueuelen 1000
-
-echo "modifying route table..."
-route add default gw 10.0.0.1
-
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "1" > /proc/sys/net/ipv4/tcp_vegas_cong_avoid
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
-echo "262143" > /proc/sys/net/core/rmem_max
-echo "262143" > /proc/sys/net/core/wmem_max
-echo "262143" > /proc/sys/net/core/rmem_default
-echo "262143" > /proc/sys/net/core/wmem_default
-echo "262143" > /proc/sys/net/core/optmem_max
-echo "100000" > /proc/sys/net/core/netdev_max_backlog
-
-echo -n "waiting for natbox..."
-netcat -c -l -p 8000
-
-BINARY=/benchmarks/netperf-bin/netperf
-TEST="TCP_MAERTS"
-SHORT_ARGS="-l -100k"
-LONG_ARGS="-k16384,0 -K16384,0 -- -m 65536 -M 65536 -s 262144 -S 262144"
-
-
-SHORT="$BINARY -H $SERVER -t $TEST $SHORT_ARGS"
-LONG="$BINARY -H $SERVER -t $TEST $LONG_ARGS"
-
-echo "starting test..."
-echo "netperf warmup"
-echo $SHORT
-eval $SHORT
-
-echo "netperf benchmark"
-echo $LONG
-/sbin/m5 resetstats
-/sbin/m5 dumpresetstats 200000000 2000000000
-/sbin/m5 checkpoint 200000000 2000000000
-eval $LONG
-/sbin/m5 exit
diff --git a/configs/boot/nat-netperf-server.rcS b/configs/boot/nat-netperf-server.rcS
deleted file mode 100644 (file)
index 23b99a1..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/sh
-SERVER=192.168.0.1
-CLIENT=10.0.0.2
-NATBOX=192.168.0.2
-
-echo "setting up network..."
-ifconfig lo 127.0.0.1
-ifconfig eth0 $SERVER txqueuelen 1000
-
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "1" > /proc/sys/net/ipv4/tcp_vegas_cong_avoid
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
-echo "262143" > /proc/sys/net/core/rmem_max
-echo "262143" > /proc/sys/net/core/wmem_max
-echo "262143" > /proc/sys/net/core/rmem_default
-echo "262143" > /proc/sys/net/core/wmem_default
-echo "262143" > /proc/sys/net/core/optmem_max
-echo "100000" > /proc/sys/net/core/netdev_max_backlog
-
-echo "running netserver..."
-/benchmarks/netperf-bin/netserver
-
-echo -n "signal natbox to begin..."
-sleep 5
-echo "server ready" | netcat -c $NATBOX 8000
-echo "done."
-
-echo "starting bash..."
-exec /bin/bash
diff --git a/configs/boot/nat-netperf-stream-client.rcS b/configs/boot/nat-netperf-stream-client.rcS
deleted file mode 100644 (file)
index f20e92c..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/sh
-SERVER=192.168.0.1
-CLIENT=10.0.0.2
-
-echo "setting up network..."
-ifconfig lo 127.0.0.1
-ifconfig eth0 $CLIENT txqueuelen 1000
-
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "1" > /proc/sys/net/ipv4/tcp_vegas_cong_avoid
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
-echo "262143" > /proc/sys/net/core/rmem_max
-echo "262143" > /proc/sys/net/core/wmem_max
-echo "262143" > /proc/sys/net/core/rmem_default
-echo "262143" > /proc/sys/net/core/wmem_default
-echo "262143" > /proc/sys/net/core/optmem_max
-echo "100000" > /proc/sys/net/core/netdev_max_backlog
-
-echo "modifying route table"
-route add default gw 10.0.0.1
-
-echo -n "waiting for server..."
-netcat -c -l -p 8000
-
-BINARY=/benchmarks/netperf-bin/netperf
-TEST="TCP_STREAM"
-SHORT_ARGS="-l -100k"
-LONG_ARGS="-k16384,0 -K16384,0 -- -m 65536 -M 65536 -s 262144 -S 262144"
-
-
-SHORT="$BINARY -H $SERVER -t $TEST $SHORT_ARGS"
-LONG="$BINARY -H $SERVER -t $TEST $LONG_ARGS"
-
-echo "starting test..."
-echo "netperf warmup"
-echo $SHORT
-eval $SHORT
-
-echo "netperf benchmark"
-echo $LONG
-/sbin/m5 ivlb 1
-/sbin/m5 resetstats
-/sbin/m5 dumpresetstats 200000000 2000000000
-/sbin/m5 checkpoint 200000000 2000000000
-eval $LONG
-/sbin/m5 exit
diff --git a/configs/boot/nat-spec-surge-client.rcS b/configs/boot/nat-spec-surge-client.rcS
deleted file mode 100644 (file)
index d26e383..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-CLIENT=10.0.0.2
-SERVER=192.168.0.1
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig eth0 $CLIENT txqueuelen 1000
-/sbin/ifconfig lo 127.0.0.1
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "1" > /proc/sys/net/ipv4/tcp_vegas_cong_avoid
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "524287" > /proc/sys/net/core/rmem_max
-echo "524287" > /proc/sys/net/core/wmem_max
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "done."
-
-echo "changing route table..."
-route add default gw 10.0.0.1 
-
-echo "waiting for server..."
-netcat -c -l -p 8000
-
-echo -n "running surge client..."
-/bin/bash -c "cd /benchmarks/surge && ./spec-m5 1 20 1 $SERVER 5 40000 1000000000 1000"
-echo "done."
-
-echo -n "halting machine"
-m5 exit
-
-echo -n "starting bash shell..."
-/bin/bash
diff --git a/configs/boot/nat-spec-surge-server.rcS b/configs/boot/nat-spec-surge-server.rcS
deleted file mode 100755 (executable)
index 0f46256..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-NATBOX=192.168.0.7
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig eth0 192.168.0.1 txqueuelen 1000
-/sbin/ifconfig eth0:1 192.168.0.2 txqueuelen 1000
-/sbin/ifconfig eth0:2 192.168.0.3 txqueuelen 1000
-/sbin/ifconfig eth0:3 192.168.0.4 txqueuelen 1000
-/sbin/ifconfig eth0:4 192.168.0.5 txqueuelen 1000
-/sbin/ifconfig lo 127.0.0.1
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "1" > /proc/sys/net/ipv4/tcp_vegas_cong_avoid
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-echo "524287" > /proc/sys/net/core/rmem_max
-echo "524287" > /proc/sys/net/core/wmem_max
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "done."
-
-echo -n "mounting file set..."
-mkdir -p /z/htdocs
-mount /dev/hdb1 /z/htdocs
-echo "done."
-
-echo -n "starting httpd..."
-/benchmarks/apache2/bin/apachectl start
-sleep 2
-cat /benchmarks/apache2/logs/error_log
-echo "done."
-
-echo "notifying natbox..."
-sleep 5
-echo "server ready" | netcat -c $NATBOX 8000
-echo "done"
-
-echo -n "starting bash shell..."
-/bin/bash
diff --git a/configs/boot/natbox-netperf.rcS b/configs/boot/natbox-netperf.rcS
deleted file mode 100644 (file)
index e638475..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-EXTIF=192.168.0.2
-INTIF=10.0.0.1
-CLIENT=10.0.0.2
-
-echo "setting up network..."
-ifconfig lo 127.0.0.1
-ifconfig eth0 $EXTIF txqueuelen 1000
-ifconfig eth1 $INTIF txqueuelen 1000
-
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "1" > /proc/sys/net/ipv4/tcp_vegas_cong_avoid
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
-echo "262143" > /proc/sys/net/core/rmem_max
-echo "262143" > /proc/sys/net/core/wmem_max
-echo "262143" > /proc/sys/net/core/rmem_default
-echo "262143" > /proc/sys/net/core/wmem_default
-echo "262143" > /proc/sys/net/core/optmem_max
-echo "100000" > /proc/sys/net/core/netdev_max_backlog
-echo "1" > /proc/sys/net/ipv4/ip_forward
-
-echo "waiting for netserver..."
-netcat -c -l -p 8000
-
-echo "setting up iptables..."
-IPTABLES=/sbin/iptables
-EXTIF=eth0
-INTIF=eth1
-
-$IPTABLES -P INPUT ACCEPT
-$IPTABLES -F INPUT
-$IPTABLES -P OUTPUT ACCEPT
-$IPTABLES -F OUTPUT
-$IPTABLES -P FORWARD DROP
-$IPTABLES -F FORWARD
-$IPTABLES -t nat -F
-
-$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
-$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
-$IPTABLES -A FORWARD -j LOG
-
-$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
-
-echo "informing client..."
-sleep 5
-echo "server ready" | netcat -c $CLIENT 8000
-
-echo "starting bash..."
-exec /bin/bash
diff --git a/configs/boot/natbox-spec-surge.rcS b/configs/boot/natbox-spec-surge.rcS
deleted file mode 100644 (file)
index 4346a62..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/sh
-EXTIF=192.168.0.7
-INTIF=10.0.0.1
-CLIENT=10.0.0.2
-
-echo "setting up network..."
-ifconfig lo 127.0.0.1
-ifconfig eth0 $EXTIF txqueuelen 1000
-ifconfig eth1 $INTIF txqueuelen 1000
-
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "1" > /proc/sys/net/ipv4/tcp_vegas_cong_avoid
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
-echo "262143" > /proc/sys/net/core/rmem_max
-echo "262143" > /proc/sys/net/core/wmem_max
-echo "262143" > /proc/sys/net/core/rmem_default
-echo "262143" > /proc/sys/net/core/wmem_default
-echo "262143" > /proc/sys/net/core/optmem_max
-echo "100000" > /proc/sys/net/core/netdev_max_backlog
-
-echo "1" > /proc/sys/net/ipv4/ip_forward
-
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-
-echo "waiting for netserver..."
-netcat -c -l -p 8000
-
-echo "setting up iptables..."
-IPTABLES=/sbin/iptables
-EXTIF=eth0
-INTIF=eth1
-
-$IPTABLES -P INPUT ACCEPT
-$IPTABLES -F INPUT
-$IPTABLES -P OUTPUT ACCEPT
-$IPTABLES -F OUTPUT
-$IPTABLES -P FORWARD DROP
-$IPTABLES -F FORWARD
-$IPTABLES -t nat -F
-
-$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
-$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
-$IPTABLES -A FORWARD -j LOG
-
-$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
-
-echo "informing client..."
-sleep 5
-echo "server ready" | netcat -c $CLIENT 8000
-
-echo "starting bash..."
-exec /bin/bash
diff --git a/configs/boot/netperf-maerts-client.rcS b/configs/boot/netperf-maerts-client.rcS
deleted file mode 100644 (file)
index 7766713..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/sh
-SERVER=10.0.0.1
-CLIENT=10.0.0.2
-
-echo "setting up network..."
-ifconfig lo 127.0.0.1
-ifconfig eth0 $CLIENT txqueuelen 1000
-
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
-echo "262143" > /proc/sys/net/core/rmem_max
-echo "262143" > /proc/sys/net/core/wmem_max
-echo "262143" > /proc/sys/net/core/rmem_default
-echo "262143" > /proc/sys/net/core/wmem_default
-echo "262143" > /proc/sys/net/core/optmem_max
-echo "100000" > /proc/sys/net/core/netdev_max_backlog
-
-echo -n "waiting for server..."
-/usr/bin/netcat -c -l -p 8000
-
-BINARY=/benchmarks/netperf-bin/netperf
-TEST="TCP_MAERTS"
-SHORT_ARGS="-l -100k"
-LONG_ARGS="-k16384,0 -K16384,0 -- -m 65536 -M 65536 -s 262144 -S 262144"
-
-
-SHORT="$BINARY -H $SERVER -t $TEST $SHORT_ARGS"
-LONG="$BINARY -H $SERVER -t $TEST $LONG_ARGS"
-
-echo "starting test..."
-echo "netperf warmup"
-echo $SHORT
-eval $SHORT
-NUMCLNTS=`/sbin/m5 initparam`
-[ "$NUMCLNTS" -eq "0" ] && NUMCLNTS=1
-
-echo "netperf benchmark... starting $NUMCLNTS..."
-lcv=0
-
-while [ "$lcv" -lt "$NUMCLNTS" ]
-do
-    echo $LONG
-    eval $LONG &
-    ((lcv += 1))
-done
-
-ckpt=200000000
-((ckpt = ckpt * 12/3 + 600000000))
-
-echo "configuring checkpointing at $ckpt..."
-/sbin/m5 checkpoint $ckpt 2000000000
-echo "done configuring checkpointing..."
-sleep 100000
-
diff --git a/configs/boot/netperf-rr.rcS b/configs/boot/netperf-rr.rcS
deleted file mode 100644 (file)
index 1467c1f..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/sh
-SERVER=10.0.0.1
-CLIENT=10.0.0.2
-
-echo "setting up network..."
-ifconfig lo 127.0.0.1
-ifconfig eth0 $CLIENT txqueuelen 1000
-
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
-echo "262143" > /proc/sys/net/core/rmem_max
-echo "262143" > /proc/sys/net/core/wmem_max
-echo "262143" > /proc/sys/net/core/rmem_default
-echo "262143" > /proc/sys/net/core/wmem_default
-echo "262143" > /proc/sys/net/core/optmem_max
-echo "100000" > /proc/sys/net/core/netdev_max_backlog
-
-echo -n "waiting for server..."
-netcat -c -l -p 8000
-
-BINARY=/benchmarks/netperf-bin/netperf
-TEST="TCP_RR"
-SHORT_ARGS="-l -1k"
-LONG_ARGS="-k10000,0 -K10000,0"
-
-
-SHORT="$BINARY -H $SERVER -t $TEST $SHORT_ARGS"
-LONG="$BINARY -H $SERVER -t $TEST $LONG_ARGS"
-
-echo "starting test..."
-echo "netperf warmup"
-echo $SHORT
-eval $SHORT
-
-echo "netperf benchmark"
-echo $LONG
-/sbin/m5 ivlb 1
-/sbin/m5 resetstats
-/sbin/m5 dumpresetstats 200000000 2000000000
-/sbin/m5 checkpoint 200000000 2000000000
-eval $LONG
-/sbin/m5 exit
diff --git a/configs/boot/netperf-server.rcS b/configs/boot/netperf-server.rcS
deleted file mode 100644 (file)
index 95a4ac4..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/sh
-SERVER=10.0.0.1
-CLIENT=10.0.0.2
-
-echo "setting up network..."
-ifconfig lo 127.0.0.1
-ifconfig eth0 $SERVER txqueuelen 1000
-
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
-echo "262143" > /proc/sys/net/core/rmem_max
-echo "262143" > /proc/sys/net/core/wmem_max
-echo "262143" > /proc/sys/net/core/rmem_default
-echo "262143" > /proc/sys/net/core/wmem_default
-echo "262143" > /proc/sys/net/core/optmem_max
-echo "100000" > /proc/sys/net/core/netdev_max_backlog
-
-echo "running netserver..."
-/benchmarks/netperf-bin/netserver
-
-echo -n "signal client to begin..."
-sleep 1
-echo "server ready" | netcat -c $CLIENT 8000
-echo "done."
-
-echo "starting bash..."
-exec /bin/bash
diff --git a/configs/boot/netperf-stream-client.rcS b/configs/boot/netperf-stream-client.rcS
deleted file mode 100644 (file)
index 9a2cc0e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/sh
-SERVER=10.0.0.1
-CLIENT=10.0.0.2
-
-echo "setting up network..."
-ifconfig lo 127.0.0.1
-ifconfig eth0 $CLIENT txqueuelen 1000
-
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
-echo "262143" > /proc/sys/net/core/rmem_max
-echo "262143" > /proc/sys/net/core/wmem_max
-echo "262143" > /proc/sys/net/core/rmem_default
-echo "262143" > /proc/sys/net/core/wmem_default
-echo "262143" > /proc/sys/net/core/optmem_max
-echo "100000" > /proc/sys/net/core/netdev_max_backlog
-
-echo -n "waiting for server..."
-netcat -c -l -p 8000
-
-BINARY=/benchmarks/netperf-bin/netperf
-TEST="TCP_STREAM"
-SHORT_ARGS="-l -100k"
-LONG_ARGS="-k16384,0 -K16384,0 -- -m 65536 -M 65536 -s 262144 -S 262144"
-
-
-SHORT="$BINARY -H $SERVER -t $TEST $SHORT_ARGS"
-LONG="$BINARY -H $SERVER -t $TEST $LONG_ARGS"
-
-echo "starting test..."
-echo "netperf warmup"
-echo $SHORT
-eval $SHORT
-
-echo "netperf benchmark"
-echo $LONG
-/sbin/m5 ivlb 1
-/sbin/m5 resetstats
-/sbin/m5 dumpresetstats 200000000 2000000000
-/sbin/m5 checkpoint 200000000 2000000000
-eval $LONG
-/sbin/m5 exit
diff --git a/configs/boot/netperf-stream-nt-client.rcS b/configs/boot/netperf-stream-nt-client.rcS
deleted file mode 100644 (file)
index 5681155..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/sh
-SERVER=10.0.0.1
-CLIENT=10.0.0.2
-
-echo "setting up network..."
-ifconfig lo 127.0.0.1
-ifconfig eth0 $CLIENT txqueuelen 1000
-
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
-echo "262143" > /proc/sys/net/core/rmem_max
-echo "262143" > /proc/sys/net/core/wmem_max
-echo "262143" > /proc/sys/net/core/rmem_default
-echo "262143" > /proc/sys/net/core/wmem_default
-echo "262143" > /proc/sys/net/core/optmem_max
-echo "100000" > /proc/sys/net/core/netdev_max_backlog
-
-echo -n "waiting for server..."
-netcat -c -l -p 8000
-
-BINARY=/benchmarks/netperf-bin/netperf
-TEST="TCP_STREAM"
-SHORT_ARGS="-l -100k"
-LONG_ARGS="-- -m 65536 -M 65536 -s 262144 -S 262144"
-
-
-SHORT="$BINARY -H $SERVER -t $TEST $SHORT_ARGS"
-LONG="$BINARY -H $SERVER -t $TEST $LONG_ARGS"
-
-echo "starting test..."
-echo "netperf warmup"
-echo $SHORT
-eval $SHORT
-
-echo "netperf benchmark"
-echo $LONG
-/sbin/m5 ivlb 1
-/sbin/m5 resetstats
-/sbin/m5 dumpresetstats 200000000 2000000000
-/sbin/m5 checkpoint 200000000 2000000000
-eval $LONG
-/sbin/m5 exit
diff --git a/configs/boot/netperf-stream-udp-client.rcS b/configs/boot/netperf-stream-udp-client.rcS
deleted file mode 100644 (file)
index 4acb424..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/sh
-SERVER=10.0.0.1
-CLIENT=10.0.0.2
-
-echo "setting up network..."
-ifconfig lo 127.0.0.1
-ifconfig eth0 $CLIENT txqueuelen 1000
-
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
-echo "262143" > /proc/sys/net/core/rmem_max
-echo "262143" > /proc/sys/net/core/wmem_max
-echo "262143" > /proc/sys/net/core/rmem_default
-echo "262143" > /proc/sys/net/core/wmem_default
-echo "262143" > /proc/sys/net/core/optmem_max
-echo "100000" > /proc/sys/net/core/netdev_max_backlog
-
-echo -n "waiting for server..."
-netcat -c -l -p 8000
-
-BINARY=/benchmarks/netperf-bin/netperf
-TEST="UDP_STREAM"
-SHORT_ARGS="-l 2 -- -m 16384 -M 16384 -s 262144 -S 262144"
-#LONG_ARGS="-k16384,0 -K16384,0 -- -m 65536 -M 65536 -s 262144 -S 262144"
-
-
-SHORT="$BINARY -H $SERVER -t $TEST $SHORT_ARGS"
-LONG="$BINARY -H $SERVER -t $TEST $LONG_ARGS"
-
-echo "starting test..."
-echo "netperf warmup"
-echo $SHORT
-eval $SHORT
-
-#echo "netperf benchmark"
-#echo $LONG
-#/sbin/m5 ivlb 1
-#/sbin/m5 resetstats
-#/sbin/m5 dumpresetstats 200000000 2000000000
-#/sbin/m5 checkpoint 200000000 2000000000
-#eval $LONG
-/sbin/m5 exit
diff --git a/configs/boot/netperf-stream-udp-local.rcS b/configs/boot/netperf-stream-udp-local.rcS
deleted file mode 100644 (file)
index ccd7654..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-SERVER=127.0.0.1
-CLIENT=127.0.0.1
-
-echo "setting up network..."
-ifconfig lo 127.0.0.1
-
-BINARY=/benchmarks/netperf-bin/netperf
-TEST="UDP_STREAM"
-SHORT_ARGS="-l 2 -- -m 4096"
-
-echo "running netserver..."
-/benchmarks/netperf-bin/netserver
-
-
-SHORT="$BINARY -H $SERVER -t $TEST $SHORT_ARGS"
-
-echo "starting test..."
-echo $SHORT
-eval $SHORT
-
-/sbin/m5 exit
diff --git a/configs/boot/nfs-client-dbench.rcS b/configs/boot/nfs-client-dbench.rcS
deleted file mode 100644 (file)
index 29b5043..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig eth0 10.0.0.2 txqueuelen 1000
-/sbin/ifconfig lo 127.0.0.1
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-echo "524287" > /proc/sys/net/core/rmem_max
-echo "524287" > /proc/sys/net/core/wmem_max
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "10" > /proc/sys/vm/dirty_writeback_centisecs
-echo "done."
-
-echo -n "starting nfs client..."
-/sbin/portmap &
-/sbin/lockd &
-echo "done."
-
-echo -n "waiting for server..."
-/usr/bin/netcat -c -l -p 8000
-
-echo -n "mounting remote share..."
-mkdir /nfs
-mount 10.0.0.1:/nfs /nfs
-echo "done."
-
-cd /nfs
-
-initparam=`m5 initparam`
-
-if test X$initparam == X0; then
-    /sbin/m5 checkpoint 100000000 2000000000
-    dd if=/dev/zero of=foo bs=1024k count=512
-else
-    /sbin/m5 checkpoint 1000000000 2000000000
-    /benchmarks/dbench/dbench $initparam
-fi
-
-/sbin/m5 exit
diff --git a/configs/boot/nfs-client-nhfsstone.rcS b/configs/boot/nfs-client-nhfsstone.rcS
deleted file mode 100755 (executable)
index c59655a..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig eth0 10.0.0.2 txqueuelen 1000
-/sbin/ifconfig lo 127.0.0.1
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-echo "524287" > /proc/sys/net/core/rmem_max
-echo "524287" > /proc/sys/net/core/wmem_max
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "done."
-
-echo -n "starting nfs client..."
-/sbin/portmap &
-/sbin/lockd &
-echo "done."
-
-echo -n "waiting for server..."
-netcat -c -l -p 8000
-
-echo -n "mounting remote share..."
-mkdir /nfs
-mount 10.0.0.1:/nfs /nfs
-echo "done."
-
-/sbin/m5 checkpoint 8000000000 2000000000
-/sbin/nhfsstone /nfs
-
-/sbin/m5 exit
diff --git a/configs/boot/nfs-client-smallb.rcS b/configs/boot/nfs-client-smallb.rcS
deleted file mode 100755 (executable)
index 375da1f..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig eth0 10.0.0.2 txqueuelen 1000
-/sbin/ifconfig lo 127.0.0.1
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-echo "524287" > /proc/sys/net/core/rmem_max
-echo "524287" > /proc/sys/net/core/wmem_max
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "done."
-
-echo -n "starting nfs client..."
-/sbin/portmap &
-/sbin/lockd &
-echo "done."
-
-echo -n "waiting for server..."
-/usr/bin/netcat -c -l -p 8000
-
-echo -n "mounting remote share..."
-mkdir /nfs
-mount -o rsize=1460,wsize=1460 10.0.0.1:/nfs /nfs
-echo "done."
-
-/bin/bonnie++ -u 99 -s 700 -r 0 -n 0 -f -F -d /nfs
-
-/sbin/m5 exit
diff --git a/configs/boot/nfs-client-tcp-smallb.rcS b/configs/boot/nfs-client-tcp-smallb.rcS
deleted file mode 100755 (executable)
index b71ca0b..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig eth0 10.0.0.2 txqueuelen 1000
-/sbin/ifconfig lo 127.0.0.1
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-echo "524287" > /proc/sys/net/core/rmem_max
-echo "524287" > /proc/sys/net/core/wmem_max
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "done."
-
-echo -n "starting nfs client..."
-/sbin/portmap &
-/sbin/lockd &
-echo "done."
-
-echo -n "waiting for server..."
-netcat -c -l -p 8000
-
-echo -n "mounting remote share..."
-mkdir /nfs
-mount -o rsize=1460,wsize=1460,tcp 10.0.0.1:/nfs /nfs
-echo "done."
-
-/usr/bin/bonnie++ -u 99 -s 700 -r 0 -n 0 -f -F -d /nfs
-
-/sbin/m5 exit
diff --git a/configs/boot/nfs-client-tcp.rcS b/configs/boot/nfs-client-tcp.rcS
deleted file mode 100755 (executable)
index e707ef2..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig eth0 10.0.0.2 txqueuelen 1000
-/sbin/ifconfig lo 127.0.0.1
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-echo "524287" > /proc/sys/net/core/rmem_max
-echo "524287" > /proc/sys/net/core/wmem_max
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "done."
-
-echo -n "starting nfs client..."
-/sbin/portmap &
-/sbin/lockd &
-echo "done."
-
-echo -n "waiting for server..."
-netcat -c -l -p 8000
-
-echo -n "mounting remote share..."
-mkdir /nfs
-mount -o tcp 10.0.0.1:/nfs /nfs
-echo "done."
-
-/usr/bin/bonnie++ -u 99 -s 700 -r 0 -n 0 -f -F -d /nfs
-
-/sbin/m5 exit
diff --git a/configs/boot/nfs-client.rcS b/configs/boot/nfs-client.rcS
deleted file mode 100755 (executable)
index f3fbe04..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig eth0 10.0.0.2 txqueuelen 1000
-/sbin/ifconfig lo 127.0.0.1
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-echo "524287" > /proc/sys/net/core/rmem_max
-echo "524287" > /proc/sys/net/core/wmem_max
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "done."
-
-echo -n "starting nfs client..."
-/sbin/portmap &
-/sbin/lockd &
-echo "done."
-
-echo -n "waiting for server..."
-netcat -c -l -p 8000
-
-echo -n "mounting remote share..."
-mkdir /nfs
-mount 10.0.0.1:/nfs /nfs
-echo "done."
-
-/usr/bin/bonnie++ -u 99 -s 700 -r 0 -n 0 -f -F -d /nfs
-
-/sbin/m5 exit
diff --git a/configs/boot/nfs-server-nhfsstone.rcS b/configs/boot/nfs-server-nhfsstone.rcS
deleted file mode 100755 (executable)
index 7fa44a5..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig eth0 10.0.0.1 txqueuelen 1000
-/sbin/ifconfig lo 127.0.0.1
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-echo "524287" > /proc/sys/net/core/rmem_max
-echo "524287" > /proc/sys/net/core/wmem_max
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "done."
-
-#if [ ! -x /dev/sda ] 
-#then
-#     mknod /dev/sda b 8 0
-#     mknod /dev/sda1 b 8 1
-#fi
-
-/sbin/insmod /modules/scsi_debug.ko dev_size_mb=80
-
-echo -n "creating partition and formatting..."
-/sbin/mke2fs -F /dev/sda 
-mkdir /nfs
-/bin/mount  /dev/sda /nfs 
-chmod a+rwx /nfs
-echo "done."
-
-echo "/nfs 10.0.0.0/255.0.0.0(rw,sync,no_root_squash)" > /etc/exports
-echo -n "starting nfs kernel server..."
-/sbin/portmap
-/sbin/lockd
-/sbin/statd
-/sbin/nfsd 8
-/sbin/mountd
-echo "done."
-
-echo "Exporting shares..."
-/sbin/exportfs -r -v
-
-echo -n "signal client to mount..."
-sleep 5
-echo "server ready" | netcat -c 10.0.0.2 8000
-echo "done."
-
-echo -n "starting bash shell..."
-/bin/bash
diff --git a/configs/boot/nfs-server.rcS b/configs/boot/nfs-server.rcS
deleted file mode 100755 (executable)
index 7314d06..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig eth0 10.0.0.1 txqueuelen 1000
-/sbin/ifconfig lo 127.0.0.1
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-echo "524287" > /proc/sys/net/core/rmem_max
-echo "524287" > /proc/sys/net/core/wmem_max
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "done."
-
-#if [ ! -x /dev/sda ] 
-#then
-#     mknod /dev/sda b 8 0
-#     mknod /dev/sda1 b 8 1
-#fi
-
-/sbin/insmod /modules/scsi_debug.ko dev_size_mb=768
-
-echo -n "creating partition and formatting..."
-#echo "1,767,L" > /tmp/sfdisk.run
-#/usr/sbin/sfdisk -uM --force /dev/sda < /tmp/sfdisk.run
-/sbin/mke2fs -F /dev/sda 
-mkdir /nfs
-/bin/mount  /dev/sda /nfs 
-chmod a+rwx /nfs
-#/usr/sbin/sfdisk -uM -l /dev/sda
-echo "done."
-
-echo "/nfs 10.0.0.0/255.0.0.0(rw,sync,no_root_squash)" > /etc/exports
-echo -n "starting nfs kernel server..."
-/sbin/portmap
-/sbin/lockd
-/sbin/statd
-/sbin/nfsd 15
-/sbin/mountd
-echo "done."
-
-echo "Exporting shares..."
-/sbin/exportfs -r -v
-
-echo -n "signal client to mount..."
-echo "server ready" | netcat -c 10.0.0.2 8000
-echo "done."
-
-echo -n "starting bash shell..."
-/bin/bash
diff --git a/configs/boot/null.rcS b/configs/boot/null.rcS
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/configs/boot/ping-client.rcS b/configs/boot/ping-client.rcS
deleted file mode 100644 (file)
index a147fb2..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-SERVER=10.0.0.1
-CLIENT=10.0.0.2
-
-echo "setting up network..."
-ifconfig lo 127.0.0.1
-ifconfig eth0 $CLIENT txqueuelen 1000
-
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
-echo "262143" > /proc/sys/net/core/rmem_max
-echo "262143" > /proc/sys/net/core/wmem_max
-echo "262143" > /proc/sys/net/core/rmem_default
-echo "262143" > /proc/sys/net/core/wmem_default
-echo "262143" > /proc/sys/net/core/optmem_max
-echo "100000" > /proc/sys/net/core/netdev_max_backlog
-
-echo -n "waiting for server..."
-netcat -c -l -p 8000
-
-ping -c 5 $SERVER
-/sbin/m5 exit
diff --git a/configs/boot/ping-server.rcS b/configs/boot/ping-server.rcS
deleted file mode 100644 (file)
index 311c802..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-SERVER=10.0.0.1
-CLIENT=10.0.0.2
-
-echo "setting up network..."
-ifconfig lo 127.0.0.1
-ifconfig eth0 $SERVER txqueuelen 1000
-
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
-echo "262143" > /proc/sys/net/core/rmem_max
-echo "262143" > /proc/sys/net/core/wmem_max
-echo "262143" > /proc/sys/net/core/rmem_default
-echo "262143" > /proc/sys/net/core/wmem_default
-echo "262143" > /proc/sys/net/core/optmem_max
-echo "100000" > /proc/sys/net/core/netdev_max_backlog
-
-echo -n "signal client to begin..."
-echo "server ready" | netcat -c $CLIENT 8000
-echo "done."
-
-echo "starting bash..."
-exec /bin/bash
diff --git a/configs/boot/setup b/configs/boot/setup
deleted file mode 100644 (file)
index 842e50a..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-ifconfig eth1 mtu 9000 txqueuelen 1000 up
-
-### IPV4 specific settings
-# turns TCP timestamp support off, default 1, reduces CPU use
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-
-# turn SACK support off, default on
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-
-# sets min/default/max TCP read buffer, default 4096 87380 174760
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-
-# sets min/pressure/max TCP write buffer, default 4096 16384 131072
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-
-# sets min/pressure/max TCP buffer space, default 31744 32256 32768
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-
-### CORE settings (mostly for socket and UDP effect)
-# maximum receive socket buffer size, default 131071
-echo "524287" > /proc/sys/net/core/rmem_max
-
-# maximum send socket buffer size, default 131071
-echo "524287" > /proc/sys/net/core/wmem_max
-
-# default receive socket buffer size, default 65535
-echo "524287" > /proc/sys/net/core/rmem_default
-
-# default send socket buffer size, default 65535
-echo "524287" > /proc/sys/net/core/wmem_default
-
-# maximum amount of option memory buffers, default 10240
-echo "524287" > /proc/sys/net/core/optmem_max
-
-# number of unprocessed input packets before kernel starts dropping them,
-# default 300
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
diff --git a/configs/boot/spec-surge-client.rcS b/configs/boot/spec-surge-client.rcS
deleted file mode 100644 (file)
index 0dd2ba7..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig eth0 192.168.0.10 txqueuelen 1000
-/sbin/ifconfig lo 127.0.0.1
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "524287" > /proc/sys/net/core/rmem_max
-echo "524287" > /proc/sys/net/core/wmem_max
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "done."
-
-echo "waiting for server..."
-netcat -c -l -p 8000 
-
-echo -n "running surge client..."
-/bin/bash -c "cd /benchmarks/surge && ./spec-m5 1 20 1 192.168.0.1 5 40000 1000000000 1000"
-echo "done."
-
-echo -n "halting machine"
-m5 exit
-
-echo -n "starting bash shell..."
-/bin/bash
diff --git a/configs/boot/spec-surge-server.rcS b/configs/boot/spec-surge-server.rcS
deleted file mode 100755 (executable)
index 89a3fb4..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig eth0 192.168.0.1 txqueuelen 1000
-/sbin/ifconfig eth0:1 192.168.0.2 txqueuelen 1000
-/sbin/ifconfig eth0:2 192.168.0.3 txqueuelen 1000
-/sbin/ifconfig eth0:3 192.168.0.4 txqueuelen 1000
-/sbin/ifconfig eth0:4 192.168.0.5 txqueuelen 1000
-/sbin/ifconfig lo 127.0.0.1
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-echo "524287" > /proc/sys/net/core/rmem_max
-echo "524287" > /proc/sys/net/core/wmem_max
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "done."
-
-echo -n "mounting file set..."
-mkdir -p /z/htdocs
-mount /dev/hdb1 /z/htdocs
-echo "done."
-
-echo -n "starting httpd..."
-/usr/sbin/apache2 -f /etc/apache2/httpd.conf -k start
-sleep 2
-cat /usr/share/apache2/logs/error_log
-echo "done."
-
-echo "notifying client..."
-echo "server ready" | netcat -c 192.168.0.10 8000
-echo "done"
-
-echo -n "starting bash shell..."
-/bin/bash
diff --git a/configs/boot/surge-client.rcS b/configs/boot/surge-client.rcS
deleted file mode 100755 (executable)
index ba7d87f..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig eth0 192.168.0.10 txqueuelen 1000
-/sbin/ifconfig lo 127.0.0.1
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-echo "524287" > /proc/sys/net/core/rmem_max
-echo "524287" > /proc/sys/net/core/wmem_max
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "done."
-
-echo "waiting for server..."
-netcat -c -l -p 8000
-
-echo -n "running surge client..."
-/bin/bash -c "cd /benchmarks/specsurge && ./Surge 2 100 1 192.168.0.1 5"
-echo "done."
-
-echo -n "halting machine"
-m5 exit
-
-echo -n "starting bash shell..."
-/bin/bash
diff --git a/configs/boot/surge-server.rcS b/configs/boot/surge-server.rcS
deleted file mode 100755 (executable)
index 140c02f..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/sh
-#
-# /etc/init.d/rcS
-#
-
-
-echo -n "mounting swap..."
-/sbin/swapon /dev/hdc
-echo "done."
-
-echo -n "setting up network..."
-/sbin/ifconfig eth0 192.168.0.1 txqueuelen 1000
-/sbin/ifconfig eth0:1 192.168.0.2 txqueuelen 1000
-/sbin/ifconfig eth0:2 192.168.0.3 txqueuelen 1000
-/sbin/ifconfig eth0:3 192.168.0.4 txqueuelen 1000
-/sbin/ifconfig eth0:4 192.168.0.5 txqueuelen 1000
-/sbin/ifconfig lo 127.0.0.1
-
-echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
-echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
-echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
-echo "0" > /proc/sys/net/ipv4/tcp_timestamps
-echo "0" > /proc/sys/net/ipv4/tcp_sack
-echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
-echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
-echo "262144" > /proc/sys/net/ipv4/ip_conntrack_max
-echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
-echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
-echo "524287" > /proc/sys/net/core/rmem_max
-echo "524287" > /proc/sys/net/core/wmem_max
-echo "524287" > /proc/sys/net/core/optmem_max
-echo "300000" > /proc/sys/net/core/netdev_max_backlog
-echo "131072" > /proc/sys/fs/file-max
-echo "done."
-
-echo -n "mounting file set..."
-mkdir -p /z/htdocs
-mount /dev/hdb1 /z/htdocs
-echo "done."
-
-echo -n "starting httpd..."
-/usr/sbin/apache2 -f /etc/apache2/httpd.conf -k start
-sleep 2
-cat /usr/share/apache2/logs/error_log
-echo "done."
-
-echo "server ready" | netcat -c 192.168.10 8000
-
-echo -n "starting bash shell..."
-/bin/bash
index d49ad78e750b43a75819230aed03284faff010f9..e15459370cab6b1b1e924ebd38b32c257b4018f2 100644 (file)
 from __future__ import print_function
 from __future__ import absolute_import
 
+import six
+
 import m5
 from m5.objects import *
 from m5.util import *
 from common.Benchmarks import *
 from common import ObjectList
 
+if six.PY3:
+    long = int
+
 # Populate to reflect supported os types per target ISA
 os_types = { 'mips'  : [ 'linux' ],
              'riscv' : [ 'linux' ], # TODO that's a lie
@@ -574,7 +579,7 @@ def makeLinuxX86System(mem_mode, numCPUs=1, mdesc=None, Ruby=False,
 
     # We assume below that there's at least 1MB of memory. We'll require 2
     # just to avoid corner cases.
-    phys_mem_size = sum(map(lambda r: r.size(), self.mem_ranges))
+    phys_mem_size = sum([r.size() for r in self.mem_ranges])
     assert(phys_mem_size >= 0x200000)
     assert(len(self.mem_ranges) <= 2)
 
index 97279f1bc8b3057c9e9651c33377d03c92963708..ec27656e05537863e3c29261ddb7ef0f16ed8447 100644 (file)
@@ -132,7 +132,7 @@ def config_filesystem(system, options = None):
         file_append((procdir, 'cpuinfo'), one_cpu)
 
     file_append((procdir, 'stat'), 'cpu 0 0 0 0 0 0 0\n')
-    for i in xrange(len(cpus)):
+    for i in range(len(cpus)):
         file_append((procdir, 'stat'), 'cpu%d 0 0 0 0 0 0 0\n' % i)
 
     # Set up /sys
index c65b201b7fa9d0623d537678f8651864e538f17d..c4c0acc9e3bd8795041f42edb9b8c807cc15b072 100644 (file)
@@ -432,7 +432,7 @@ def config_hmc_dev(opt, system, hmc_host):
                                   for i in range(numx*(opt.mem_chunk-1))]
 
         # Buffer iterator
-        it = iter(range(len(system.hmc_dev.buffers)))
+        it = iter(list(range(len(system.hmc_dev.buffers))))
 
         # necesarry to add system_port to one of the xbar
         system.system_port = system.hmc_dev.xbar[3].slave
@@ -443,7 +443,7 @@ def config_hmc_dev(opt, system, hmc_host):
                 # connect xbar to all other xbars except itself
                 if i != j:
                     # get the next index of buffer
-                    index = it.next()
+                    index = next(it)
 
                     # Change the default values for ranges of bridge
                     system.hmc_dev.buffers[index].ranges = system.mem_ranges[
index 8bffa5fe08f8001de04ee871d4ccd9265ea2d7f5..c91ea0c6535d70a9f0a45cae1a6e42aaf568d19f 100644 (file)
@@ -75,7 +75,7 @@ class ObjectList(object):
         print("Available {} classes:".format(self.base_cls))
         doc_wrapper = TextWrapper(initial_indent="\t\t",
             subsequent_indent="\t\t")
-        for name, cls in self._sub_classes.items():
+        for name, cls in list(self._sub_classes.items()):
             print("\t{}".format(name))
 
             # Try to extract the class documentation from the class help
@@ -87,7 +87,7 @@ class ObjectList(object):
 
         if self._aliases:
             print("\Aliases:")
-            for alias, target in self._aliases.items():
+            for alias, target in list(self._aliases.items()):
                 print("\t{} => {}".format(alias, target))
 
     def get_names(self):
@@ -156,7 +156,7 @@ class EnumList(ObjectList):
     def _add_objects(self):
         """ Add all enum values to the ObjectList """
         self._sub_classes = {}
-        for (key, value) in self.base_cls.__members__.items():
+        for (key, value) in list(self.base_cls.__members__.items()):
             # All Enums have a value Num_NAME at the end which we
             # do not want to include
             if not key.startswith("Num_"):
index 6d0c6c295b55d548802278fa5c3aed1c3e015347..3eff04bf9a4cd68d78ab0542457fc900924a9c18 100644 (file)
@@ -110,7 +110,7 @@ def addNoISAOptions(parser):
                       help="Specify the physical memory size (single memory)")
     parser.add_option("--enable-dram-powerdown", action="store_true",
                        help="Enable low-power states in DRAMCtrl")
-    parser.add_option("--mem-channels-intlv", type="int",
+    parser.add_option("--mem-channels-intlv", type="int", default=0,
                       help="Memory channels interleave")
 
 
index 73a0ff5413b9ec397fed0893e62d36daa4d6ef6f..e53c755c6c09e1e5528158eaa29966641cd1a8bc 100644 (file)
@@ -40,6 +40,7 @@
 from __future__ import print_function
 from __future__ import absolute_import
 
+import six
 import sys
 from os import getcwd
 from os.path import join as joinpath
@@ -52,6 +53,9 @@ from m5.defines import buildEnv
 from m5.objects import *
 from m5.util import *
 
+if six.PY3:
+    long = int
+
 addToPath('../common')
 
 def getCPUClass(cpu_type):
index f37039e1efd29cdad089ff722e42c2a772573ad5..440b0cfea0cebb73cec6c33591a3e5a55f74ee25 100644 (file)
@@ -55,10 +55,10 @@ class PathSearchFunc(object):
                     paths = [ '/dist/m5/system', '/n/poolfs/z/dist/m5/system' ]
 
                 # expand '~' and '~user' in paths
-                paths = map(os.path.expanduser, paths)
+                paths = list(map(os.path.expanduser, paths))
 
                 # filter out non-existent directories
-                paths = filter(os.path.isdir, paths)
+                paths = list(filter(os.path.isdir, paths))
 
                 if not paths:
                     raise IOError(
index 07f9afcbb9400febc7ea00d71fb534e88d416760..9b04e4bd263ffd7ed6f817314c3f0468a438f7ca 100644 (file)
@@ -37,6 +37,7 @@ from __future__ import print_function
 from __future__ import absolute_import
 
 import gzip
+import six
 import optparse
 import os
 
@@ -52,6 +53,9 @@ from common import MemConfig
 addToPath('../../util')
 import protolib
 
+if six.PY3:
+    long = int
+
 # this script is helpful to observe the memory latency for various
 # levels in a cache hierarchy, and various cache and memory
 # configurations, in essence replicating the lmbench lat_mem_rd thrash
index d3c86c3344cf20aff55b34e0c05e5bb40c3fdaf8..a340b46a5821ffd85855ded38b4b1d44db927790 100644 (file)
@@ -73,7 +73,7 @@ parser.add_option("--rd_perc", type="int", default=100,
                   help = "Percentage of read commands")
 
 parser.add_option("--mode", type="choice", default="DRAM",
-                  choices=dram_generators.keys(),
+                  choices=list(dram_generators.keys()),
                   help = "DRAM: Random traffic; \
                           DRAM_ROTATE: Traffic rotating across banks and ranks")
 
index 412625d576cebc2b66c156d9e4bdd6783d5c3930..04f60a19b36caed97b95eb9ee171084b100177e2 100644 (file)
@@ -203,7 +203,7 @@ def main():
                         help="Disk to instantiate")
     parser.add_argument("--readfile", type=str, default="",
                         help = "File to return with the m5 readfile command")
-    parser.add_argument("--cpu", type=str, choices=cpu_types.keys(),
+    parser.add_argument("--cpu", type=str, choices=list(cpu_types.keys()),
                         default="atomic",
                         help="CPU model to use")
     parser.add_argument("--cpu-freq", type=str, default="4GHz")
index a45188b9c84e73b57d76107a30188a81181bea84..cc8ac5ead3a70b810438cde1e87d1de85c76febd 100644 (file)
 from __future__ import print_function
 from __future__ import absolute_import
 
+import six
+
 import m5
 from m5.objects import *
 m5.util.addToPath('../../')
 from common.Caches import *
 from common import ObjectList
 
+if six.PY3:
+    long = int
+
 have_kvm = "ArmV8KvmCPU" in ObjectList.cpu_list.get_names()
 have_fastmodel = "FastModelCortexA76" in ObjectList.cpu_list.get_names()
 
index b7e794d58ca343a983fd6b6fcce522247dd92dc3..228d11c7f1808d78d85b4f18ac340fd8d9e2a20b 100644 (file)
@@ -177,7 +177,7 @@ def addOptions(parser):
                         help="Disks to instantiate")
     parser.add_argument("--bootscript", type=str, default=default_rcs,
                         help="Linux bootscript")
-    parser.add_argument("--cpu-type", type=str, choices=cpu_types.keys(),
+    parser.add_argument("--cpu-type", type=str, choices=list(cpu_types.keys()),
                         default="timing",
                         help="CPU simulation mode. Default: %(default)s")
     parser.add_argument("--kernel-init", type=str, default="/sbin/init",
index 7a202807e758476dab4d22c42dc9f9dde2799baf..3033890f0454dfb58f3b7af7ff6afb71588a3cd2 100644 (file)
@@ -208,7 +208,7 @@ def main():
                         help="Disk to instantiate")
     parser.add_argument("--script", type=str, default="",
                         help = "Linux bootscript")
-    parser.add_argument("--cpu", type=str, choices=cpu_types.keys(),
+    parser.add_argument("--cpu", type=str, choices=list(cpu_types.keys()),
                         default="atomic",
                         help="CPU model to use")
     parser.add_argument("--cpu-freq", type=str, default="4GHz")
index 0f20ecc6451d069d6d2b1008b86b2a7658779eed..0003ce994d24d8beb8d27ca9644e7eaf87f60cae 100644 (file)
@@ -183,7 +183,7 @@ def main():
 
     parser.add_argument("commands_to_run", metavar="command(s)", nargs='*',
                         help="Command(s) to run")
-    parser.add_argument("--cpu", type=str, choices=cpu_types.keys(),
+    parser.add_argument("--cpu", type=str, choices=list(cpu_types.keys()),
                         default="atomic",
                         help="CPU model to use")
     parser.add_argument("--cpu-freq", type=str, default="4GHz")
index 167815c70218de28155b9591746d8bb2ff665fc4..52a53ba5763064e0cc7e1f768d051f9e8a135503 100644 (file)
@@ -49,7 +49,7 @@ from __future__ import print_function
 from __future__ import absolute_import
 
 import argparse
-import ConfigParser
+from six.moves import configparser
 import inspect
 import json
 import re
@@ -63,7 +63,7 @@ if six.PY3:
     long = int
 
 sim_object_classes_by_name = {
-    cls.__name__: cls for cls in m5.objects.__dict__.values()
+    cls.__name__: cls for cls in list(m5.objects.__dict__.values())
     if inspect.isclass(cls) and issubclass(cls, m5.objects.SimObject) }
 
 # Add some parsing functions to Param classes to handle reading in .ini
@@ -129,7 +129,7 @@ param_parsers = {
     'EthernetAddr': simple_parser()
     }
 
-for name, parser in param_parsers.items():
+for name, parser in list(param_parsers.items()):
     setattr(m5.params.__dict__[name], 'parse_ini', classmethod(parser))
 
 class PortConnection(object):
@@ -193,7 +193,7 @@ class ConfigManager(object):
 
         parsed_params = {}
 
-        for param_name, param in object_class._params.items():
+        for param_name, param in list(object_class._params.items()):
             if issubclass(param.ptype, m5.params.ParamValue):
                 if isinstance(param, m5.params.VectorParamDesc):
                     param_values = self.config.get_param_vector(object_name,
@@ -221,7 +221,7 @@ class ConfigManager(object):
         if object_name == 'Null':
             return NULL
 
-        for param_name, param in obj.__class__._params.items():
+        for param_name, param in list(obj.__class__._params.items()):
             if issubclass(param.ptype, m5.objects.SimObject):
                 if isinstance(param, m5.params.VectorParamDesc):
                     param_values = self.config.get_param_vector(object_name,
@@ -286,11 +286,11 @@ class ConfigManager(object):
             return NULL
 
         parsed_ports = []
-        for port_name, port in obj.__class__._ports.items():
+        for port_name, port in list(obj.__class__._ports.items()):
             # Assume that unnamed ports are unconnected
             peers = self.config.get_port_peers(object_name, port_name)
 
-            for index, peer in zip(range(0, len(peers)), peers):
+            for index, peer in zip(list(range(0, len(peers))), peers):
                 parsed_ports.append((
                     PortConnection(object_name, port.name, index),
                     PortConnection.from_string(peer)))
@@ -368,12 +368,12 @@ class ConfigManager(object):
         # Now fill in SimObject-valued parameters in the knowledge that
         #   this won't be interpreted as becoming the parent of objects
         #   which are already in the root hierarchy
-        for name, obj in self.objects_by_name.items():
+        for name, obj in list(self.objects_by_name.items()):
             self.fill_in_simobj_parameters(name, obj)
 
         # Gather a list of all port-to-port connections
         connections = []
-        for name, obj in self.objects_by_name.items():
+        for name, obj in list(self.objects_by_name.items()):
             connections += self.gather_port_connections(name, obj)
 
         # Find an acceptable order to bind those port connections and
@@ -415,7 +415,7 @@ class ConfigFile(object):
 
 class ConfigIniFile(ConfigFile):
     def __init__(self):
-        self.parser = ConfigParser.ConfigParser()
+        self.parser = configparser.ConfigParser()
 
     def load(self, config_file):
         self.parser.read(config_file)
@@ -466,7 +466,7 @@ class ConfigJsonFile(ConfigFile):
             for elem in node:
                 self.find_all_objects(elem)
         elif isinstance(node, dict):
-            for elem in node.values():
+            for elem in list(node.values()):
                 self.find_all_objects(elem)
 
     def load(self, config_file):
@@ -505,7 +505,7 @@ class ConfigJsonFile(ConfigFile):
         obj = self.object_dicts[object_name]
 
         children = []
-        for name, node in obj.items():
+        for name, node in list(obj.items()):
             if self.is_sim_object(node):
                 children.append((name, node['path']))
             elif isinstance(node, list) and node != [] and all([
index cd51bcac60c2d8afd0319db832617697be3240ce..a347f437390b8185fef80b7044037b1448ad33f3 100644 (file)
@@ -34,7 +34,7 @@ import m5
 from m5.objects import *
 from m5.defines import buildEnv
 from m5.util import addToPath, convert
-from CntrlBase import *
+from .CntrlBase import *
 
 addToPath('../')
 
index 26bea0c8fd9ffd16693e7036217e47c0102bd7ba..58711ea0d0a67264fc081d8fc66374621bbbb57f 100644 (file)
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
+import six
 import math
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
 from m5.util import addToPath
-from Ruby import create_topology
-from Ruby import send_evicts
+from .Ruby import create_topology
+from .Ruby import send_evicts
 
 addToPath('../')
 
 from topologies.Cluster import Cluster
 from topologies.Crossbar import Crossbar
 
+if six.PY3:
+    long = int
+
 class CntrlBase:
     _seqs = 0
     @classmethod
index f4ecc414df87af7f4745d13723f06a2bbba5f5ac..58572ae193a83c54d9e9bbd9febcf5c077edf39a 100644 (file)
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
+import six
 import math
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
 from m5.util import addToPath
-from Ruby import create_topology
-from Ruby import send_evicts
+from .Ruby import create_topology
+from .Ruby import send_evicts
 
 addToPath('../')
 
 from topologies.Cluster import Cluster
 from topologies.Crossbar import Crossbar
 
+if six.PY3:
+    long = int
+
 class CntrlBase:
     _seqs = 0
     @classmethod
@@ -516,16 +520,16 @@ def create_system(options, full_system, system, dma_devices, bootmem,
 
     # Register CPUs and caches for each CorePair and directory (SE mode only)
     if not full_system:
-        for i in xrange((options.num_cpus + 1) // 2):
+        for i in range((options.num_cpus + 1) // 2):
             FileSystemConfig.register_cpu(physical_package_id = 0,
                                           core_siblings = \
-                                            xrange(options.num_cpus),
+                                            range(options.num_cpus),
                                           core_id = i*2,
                                           thread_siblings = [])
 
             FileSystemConfig.register_cpu(physical_package_id = 0,
                                           core_siblings = \
-                                            xrange(options.num_cpus),
+                                            range(options.num_cpus),
                                           core_id = i*2+1,
                                           thread_siblings = [])
 
@@ -564,7 +568,7 @@ def create_system(options, full_system, system, dma_devices, bootmem,
                                             line_size = options.cacheline_size,
                                             assoc = options.l3_assoc,
                                             cpus = [n for n in
-                                                xrange(options.num_cpus)])
+                                                range(options.num_cpus)])
 
     gpuCluster = None
     if hasattr(options, 'bw_scalor') and options.bw_scalor > 0:
index 46fdec9a3be5011d657bbf91b5a652feda3dcd70..5388a4ef6bfcf4b53ad75463a51397d54d06adb1 100644 (file)
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
+import six
 import math
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
 from m5.util import addToPath
-from Ruby import create_topology
-from Ruby import send_evicts
+from .Ruby import create_topology
+from .Ruby import send_evicts
 
 addToPath('../')
 
 from topologies.Cluster import Cluster
 from topologies.Crossbar import Crossbar
 
+if six.PY3:
+    long = int
+
 class CntrlBase:
     _seqs = 0
     @classmethod
index 7b15403140cc0582dc495261724390ffec1616c0..a8b39aeae3966a6b900056e31a1039b5e3460b2c 100644 (file)
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
+import six
 import math
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
 from m5.util import addToPath
-from Ruby import send_evicts
+from .Ruby import send_evicts
 
 addToPath('../')
 
 from topologies.Cluster import Cluster
 
+if six.PY3:
+    long = int
+
 class CntrlBase:
     _seqs = 0
     @classmethod
index 4aee7a46d26e3b11c76aabd0dca1524a843cb9b8..4b7ca8d1225f2bd042551c711803176b5e83bf8e 100644 (file)
@@ -29,7 +29,7 @@ import m5
 from m5.objects import *
 from m5.defines import buildEnv
 from m5.util import addToPath
-from Ruby import create_topology, create_directories
+from .Ruby import create_topology, create_directories
 
 #
 # Declare caches used by the protocol
index 61d6c523b6a19adf524ef2d479f752bf0e3b7773..7cfb83242f265da7d98ec3704b2758d5519e36c2 100644 (file)
@@ -31,8 +31,8 @@ import math
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
-from Ruby import create_topology, create_directories
-from Ruby import send_evicts
+from .Ruby import create_topology, create_directories
+from .Ruby import send_evicts
 from common import FileSystemConfig
 
 #
@@ -121,7 +121,7 @@ def create_system(options, full_system, system, dma_ports, bootmem,
                 clk_domain = system.cpu[i].clk_domain
 
             # Ruby prefetcher
-            prefetcher = RubyPrefetcher.Prefetcher(
+            prefetcher = RubyPrefetcher(
                 num_streams=16,
                 unit_filter = 256,
                 nonunit_filter = 256,
@@ -294,10 +294,10 @@ def create_system(options, full_system, system, dma_ports, bootmem,
         all_cntrls = all_cntrls + [io_controller]
     # Register configuration with filesystem
     else:
-        for i in xrange(options.num_clusters):
-            for j in xrange(num_cpus_per_cluster):
+        for i in range(options.num_clusters):
+            for j in range(num_cpus_per_cluster):
                 FileSystemConfig.register_cpu(physical_package_id = 0,
-                                              core_siblings = xrange(options.num_cpus),
+                                              core_siblings = range(options.num_cpus),
                                               core_id = i*num_cpus_per_cluster+j,
                                               thread_siblings = [])
 
@@ -329,7 +329,7 @@ def create_system(options, full_system, system, dma_ports, bootmem,
                                                    num_l2caches_per_cluster)+'B',
                                             line_size = options.cacheline_size,
                                             assoc = options.l2_assoc,
-                                            cpus = [n for n in xrange(i*num_cpus_per_cluster, \
+                                            cpus = [n for n in range(i*num_cpus_per_cluster, \
                                                                      (i+1)*num_cpus_per_cluster)])
 
     ruby_system.network.number_of_virtual_networks = 3
index 8d2e01fb67878dc1e7c26eaae39cb6eb6a2561b6..77fef767fe9daabfa3fca933b7a64fa2be78e1c6 100644 (file)
@@ -29,8 +29,8 @@ import math
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
-from Ruby import create_topology, create_directories
-from Ruby import send_evicts
+from .Ruby import create_topology, create_directories
+from .Ruby import send_evicts
 
 #
 # Declare caches used by the protocol
@@ -78,7 +78,7 @@ def create_system(options, full_system, system, dma_ports, bootmem,
                             start_index_bit = block_size_bits,
                             is_icache = False)
 
-        prefetcher = RubyPrefetcher.Prefetcher()
+        prefetcher = RubyPrefetcher()
 
         # the ruby random tester reuses num_cpus to specify the
         # number of cpu ports connected to the tester object, which
index 2ea6699d8a299ce1ff21b398055d37c43e62f8ca..264f709ecca87b664c4a54f2a3c0f101060202e5 100644 (file)
@@ -29,8 +29,8 @@ import math
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
-from Ruby import create_topology, create_directories
-from Ruby import send_evicts
+from .Ruby import create_topology, create_directories
+from .Ruby import send_evicts
 
 #
 # Declare caches used by the protocol
@@ -113,7 +113,7 @@ def create_system(options, full_system, system, dma_ports, bootmem,
         l1_cntrl.responseToCache = MessageBuffer(ordered = True)
         l1_cntrl.responseToCache.slave = ruby_system.network.master
 
-    phys_mem_size = sum(map(lambda r: r.size(), system.mem_ranges))
+    phys_mem_size = sum([r.size() for r in system.mem_ranges])
     assert(phys_mem_size % options.num_dirs == 0)
     mem_module_size = phys_mem_size / options.num_dirs
 
index aa9dd5049049f3585c5ae7afb9cc8252375463c3..91ff4d232a650b7a50233778940580f02f7f8f06 100644 (file)
@@ -34,8 +34,8 @@ import m5
 from m5.objects import *
 from m5.defines import buildEnv
 from m5.util import addToPath
-from Ruby import create_topology
-from Ruby import send_evicts
+from .Ruby import create_topology
+from .Ruby import send_evicts
 from common import FileSystemConfig
 
 addToPath('../')
@@ -328,16 +328,16 @@ def create_system(options, full_system, system, dma_devices, bootmem,
 
     # Register CPUs and caches for each CorePair and directory (SE mode only)
     if not full_system:
-        for i in xrange((options.num_cpus + 1) // 2):
+        for i in range((options.num_cpus + 1) // 2):
             FileSystemConfig.register_cpu(physical_package_id = 0,
                                           core_siblings =
-                                            xrange(options.num_cpus),
+                                            range(options.num_cpus),
                                           core_id = i*2,
                                           thread_siblings = [])
 
             FileSystemConfig.register_cpu(physical_package_id = 0,
                                           core_siblings =
-                                            xrange(options.num_cpus),
+                                            range(options.num_cpus),
                                           core_id = i*2+1,
                                           thread_siblings = [])
 
@@ -376,7 +376,7 @@ def create_system(options, full_system, system, dma_devices, bootmem,
                                             line_size = options.cacheline_size,
                                             assoc = options.l3_assoc,
                                             cpus = [n for n in
-                                                xrange(options.num_cpus)])
+                                                range(options.num_cpus)])
 
     # Assuming no DMA devices
     assert(len(dma_devices) == 0)
index 315d62be1a5867379b657a53dff7563e9686ff8e..a78f73c68b9e4e8ce2eb0b5e2f0bcd6bbe4fcef7 100644 (file)
@@ -41,8 +41,8 @@ import math
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
-from Ruby import create_topology, create_directories
-from Ruby import send_evicts
+from .Ruby import create_topology, create_directories
+from .Ruby import send_evicts
 
 #
 # Declare caches used by the protocol
index a2c41c08a01762eace87c1c76adc431ff4b0f1cc..80944f56605dda764d5098008b73d42e91021ceb 100644 (file)
@@ -29,8 +29,8 @@ import math
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
-from Ruby import create_topology, create_directories
-from Ruby import send_evicts
+from .Ruby import create_topology, create_directories
+from .Ruby import send_evicts
 
 #
 # Declare caches used by the protocol
index 5aac38b3e956f28195928c5079fd6509b47b2893..c83bb72dcddf9e9308dc4705a0067fd158079701 100644 (file)
@@ -29,8 +29,8 @@ import math
 import m5
 from m5.objects import *
 from m5.defines import buildEnv
-from Ruby import create_topology, create_directories
-from Ruby import send_evicts
+from .Ruby import create_topology, create_directories
+from .Ruby import send_evicts
 from common import FileSystemConfig
 
 #
@@ -257,7 +257,7 @@ def create_system(options, full_system, system, dma_ports, bootmem,
         all_cntrls = all_cntrls + [io_controller]
     # Register configuration with filesystem
     else:
-        for i in xrange(options.num_cpus):
+        for i in range(options.num_cpus):
             FileSystemConfig.register_cpu(physical_package_id = 0,
                                           core_siblings = [],
                                           core_id = i,
index 6d97f8228db7b16592768bf9ba69b7407e4eb0f6..7d065de5b9aba791c1ca092acc8490e79430c20a 100644 (file)
@@ -101,7 +101,7 @@ class MeshDirCorners_XY(SimpleTopology):
         # NUMA Node for each quadrant
         # With odd columns or rows, the nodes will be unequal
         numa_nodes = [ [], [], [], []]
-        for i in xrange(num_routers):
+        for i in range(num_routers):
             if i % num_columns < num_columns / 2  and \
                i < num_routers / 2:
                 numa_nodes[0].append(i)
index 3ae34857ad77167756ac44caeace84c6935240ac..64a8506160e11028c4854b6478f8797c2947a6aa 100644 (file)
@@ -176,6 +176,6 @@ class Mesh_XY(SimpleTopology):
 
     # Register nodes with filesystem
     def registerTopology(self, options):
-        for i in xrange(options.num_cpus):
+        for i in range(options.num_cpus):
             FileSystemConfig.register_node([i],
                     MemorySize(options.mem_size) / options.num_cpus, i)
index 893da5433a8f91ee0600119c19dbdc597cef4af4..898205d9ab89d33aefe326887269eef3c222547f 100644 (file)
 
 from .state import *
 from .runner import *
-from .test import *
+from .test_util import *
 from .suite import *
 from .loader import *
 from .fixture import *
-from .config import *
-from main import main
+from .configuration import *
+from .main import main
 
 #TODO Remove this awkward bootstrap
 #FIXME
diff --git a/ext/testlib/config.py b/ext/testlib/config.py
deleted file mode 100644 (file)
index 348d0a8..0000000
+++ /dev/null
@@ -1,759 +0,0 @@
-# Copyright (c) 2020 ARM Limited
-# All rights reserved
-#
-# The license below extends only to copyright in the software and shall
-# not be construed as granting a license to any other intellectual
-# property including but not limited to intellectual property relating
-# to a hardware implementation of the functionality of the software
-# licensed hereunder.  You may use the software subject to the license
-# terms below provided that you ensure that this notice is replicated
-# unmodified and in its entirety in all distributions of the software,
-# modified or unmodified, in source code or in binary form.
-#
-# Copyright (c) 2017 Mark D. Hill and David A. Wood
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer;
-# redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution;
-# neither the name of the copyright holders nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-# Authors: Sean Wilson
-
-'''
-Global configuration module which exposes two types of configuration
-variables:
-
-1. config
-2. constants (Also attached to the config variable as an attribute)
-
-The main motivation for this module is to have a centralized location for
-defaults and configuration by command line and files for the test framework.
-
-A secondary goal is to reduce programming errors by providing common constant
-strings and values as python attributes to simplify detection of typos.
-A simple typo in a string can take a lot of debugging to uncover the issue,
-attribute errors are easier to notice and most autocompletion systems detect
-them.
-
-The config variable is initialzed by calling :func:`initialize_config`.
-Before this point only ``constants`` will be availaible. This is to ensure
-that library function writers never accidentally get stale config attributes.
-
-Program arguments/flag arguments are available from the config as attributes.
-If an attribute was not set by the command line or the optional config file,
-then it will fallback to the `_defaults` value, if still the value is not
-found an AttributeError will be raised.
-
-:func define_defaults:
-    Provided by the config if the attribute is not found in the config or
-    commandline. For instance, if we are using the list command fixtures might
-    not be able to count on the build_dir being provided since we aren't going
-    to build anything.
-
-:var constants:
-    Values not directly exposed by the config, but are attached to the object
-    for centralized access. I.E. you can reach them with
-    :code:`config.constants.attribute`. These should be used for setting
-    common string names used across the test framework.
-    :code:`_defaults.build_dir = None` Once this module has been imported
-    constants should not be modified and their base attributes are frozen.
-'''
-import abc
-import argparse
-import copy
-import os
-import re
-
-from ConfigParser import ConfigParser
-from pickle import HIGHEST_PROTOCOL as highest_pickle_protocol
-
-from helper import absdirpath, AttrDict, FrozenAttrDict
-
-class UninitialzedAttributeException(Exception):
-    '''
-    Signals that an attribute in the config file was not initialized.
-    '''
-    pass
-
-class UninitializedConfigException(Exception):
-    '''
-    Signals that the config was not initialized before trying to access an
-    attribute.
-    '''
-    pass
-
-class TagRegex(object):
-    def __init__(self, include, regex):
-        self.include = include
-        self.regex = re.compile(regex)
-
-    def __str__(self):
-        type_ = 'Include' if self.include else 'Remove'
-        return '%10s: %s' % (type_, self.regex.pattern)
-
-class _Config(object):
-    _initialized = False
-
-    __shared_dict = {}
-
-    constants = AttrDict()
-    _defaults = AttrDict()
-    _config = {}
-
-    _cli_args = {}
-    _post_processors = {}
-
-    def __init__(self):
-        # This object will act as if it were a singleton.
-        self.__dict__ = self.__shared_dict
-
-    def _init(self, parser):
-        self._parse_commandline_args(parser)
-        self._run_post_processors()
-        self._initialized = True
-
-    def _init_with_dicts(self, config, defaults):
-        self._config = config
-        self._defaults = defaults
-        self._initialized = True
-
-    def _add_post_processor(self, attr, post_processor):
-        '''
-        :param attr: Attribute to pass to and recieve from the
-        :func:`post_processor`.
-
-        :param post_processor: A callback functions called in a chain to
-            perform additional setup for a config argument. Should return a
-            tuple containing the new value for the config attr.
-        '''
-        if attr not in self._post_processors:
-            self._post_processors[attr] = []
-        self._post_processors[attr].append(post_processor)
-
-    def _set(self, name, value):
-        self._config[name] = value
-
-    def _parse_commandline_args(self, parser):
-        args = parser.parse_args()
-
-        self._config_file_args = {}
-
-        for attr in dir(args):
-            # Ignore non-argument attributes.
-            if not attr.startswith('_'):
-                self._config_file_args[attr] = getattr(args, attr)
-        self._config.update(self._config_file_args)
-
-    def _run_post_processors(self):
-        for attr, callbacks in self._post_processors.items():
-            newval = self._lookup_val(attr)
-            for callback in callbacks:
-                newval = callback(newval)
-            if newval is not None:
-                newval = newval[0]
-            self._set(attr, newval)
-
-
-    def _lookup_val(self, attr):
-        '''
-        Get the attribute from the config or fallback to defaults.
-
-        :returns: If the value is not stored return None. Otherwise a tuple
-            containing the value.
-        '''
-        if attr in self._config:
-            return (self._config[attr],)
-        elif hasattr(self._defaults, attr):
-            return (getattr(self._defaults, attr),)
-
-    def __getattr__(self, attr):
-        if attr in dir(super(_Config, self)):
-            return getattr(super(_Config, self), attr)
-        elif not self._initialized:
-            raise UninitializedConfigException(
-                'Cannot directly access elements from the config before it is'
-                ' initialized')
-        else:
-            val = self._lookup_val(attr)
-            if val is not None:
-                return val[0]
-            else:
-                raise UninitialzedAttributeException(
-                    '%s was not initialzed in the config.' % attr)
-
-    def get_tags(self):
-        d = {typ: set(self.__getattr__(typ))
-            for typ in self.constants.supported_tags}
-        if any(map(lambda vals: bool(vals), d.values())):
-            return d
-        else:
-            return {}
-
-def define_defaults(defaults):
-    '''
-    Defaults are provided by the config if the attribute is not found in the
-    config or commandline. For instance, if we are using the list command
-    fixtures might not be able to count on the build_dir being provided since
-    we aren't going to build anything.
-    '''
-    defaults.base_dir = os.path.abspath(os.path.join(absdirpath(__file__),
-                                                      os.pardir,
-                                                      os.pardir))
-    defaults.result_path = os.path.join(os.getcwd(), '.testing-results')
-    defaults.list_only_failed = False
-    defaults.resource_url = 'http://dist.gem5.org/dist/develop'
-
-def define_constants(constants):
-    '''
-    'constants' are values not directly exposed by the config, but are attached
-    to the object for centralized access. These should be used for setting
-    common string names used across the test framework. A simple typo in
-    a string can take a lot of debugging to uncover the issue, attribute errors
-    are easier to notice and most autocompletion systems detect them.
-    '''
-    constants.system_out_name = 'system-out'
-    constants.system_err_name = 'system-err'
-
-    constants.isa_tag_type = 'isa'
-    constants.x86_tag = 'X86'
-    constants.sparc_tag = 'SPARC'
-    constants.riscv_tag = 'RISCV'
-    constants.arm_tag = 'ARM'
-    constants.mips_tag = 'MIPS'
-    constants.power_tag = 'POWER'
-    constants.null_tag = 'NULL'
-
-    constants.variant_tag_type = 'variant'
-    constants.opt_tag = 'opt'
-    constants.debug_tag = 'debug'
-    constants.fast_tag = 'fast'
-
-    constants.length_tag_type = 'length'
-    constants.quick_tag = 'quick'
-    constants.long_tag = 'long'
-
-    constants.host_isa_tag_type = 'host'
-    constants.host_x86_64_tag = 'x86_64'
-    constants.host_i386_tag = 'i386'
-    constants.host_arm_tag = 'aarch64'
-
-    constants.supported_tags = {
-        constants.isa_tag_type : (
-            constants.x86_tag,
-            constants.sparc_tag,
-            constants.riscv_tag,
-            constants.arm_tag,
-            constants.mips_tag,
-            constants.power_tag,
-            constants.null_tag,
-            ),
-        constants.variant_tag_type: (
-            constants.opt_tag,
-            constants.debug_tag,
-            constants.fast_tag,
-        ),
-        constants.length_tag_type: (
-            constants.quick_tag,
-            constants.long_tag,
-        ),
-        constants.host_isa_tag_type: (
-            constants.host_x86_64_tag,
-            constants.host_i386_tag,
-            constants.host_arm_tag,
-        ),
-    }
-
-    # Binding target ISA with host ISA. This is useful for the
-    # case where host ISA and target ISA need to coincide
-    constants.target_host = {
-        constants.arm_tag   : (constants.host_arm_tag,),
-        constants.x86_tag   : (constants.host_x86_64_tag, constants.host_i386_tag),
-        constants.sparc_tag : (constants.host_x86_64_tag, constants.host_i386_tag),
-        constants.riscv_tag : (constants.host_x86_64_tag, constants.host_i386_tag),
-        constants.mips_tag  : (constants.host_x86_64_tag, constants.host_i386_tag),
-        constants.power_tag : (constants.host_x86_64_tag, constants.host_i386_tag),
-        constants.null_tag  : (None,)
-    }
-
-    constants.supported_isas = constants.supported_tags['isa']
-    constants.supported_variants = constants.supported_tags['variant']
-    constants.supported_lengths = constants.supported_tags['length']
-    constants.supported_hosts = constants.supported_tags['host']
-
-    constants.tempdir_fixture_name = 'tempdir'
-    constants.gem5_simulation_stderr = 'simerr'
-    constants.gem5_simulation_stdout = 'simout'
-    constants.gem5_simulation_stats = 'stats.txt'
-    constants.gem5_simulation_config_ini = 'config.ini'
-    constants.gem5_simulation_config_json = 'config.json'
-    constants.gem5_returncode_fixture_name = 'gem5-returncode'
-    constants.gem5_binary_fixture_name = 'gem5'
-    constants.xml_filename = 'results.xml'
-    constants.pickle_filename = 'results.pickle'
-    constants.pickle_protocol = highest_pickle_protocol
-
-    # The root directory which all test names will be based off of.
-    constants.testing_base = absdirpath(os.path.join(absdirpath(__file__),
-                                                     os.pardir))
-
-def define_post_processors(config):
-    '''
-    post_processors are used to do final configuration of variables. This is
-    useful if there is a dynamically set default, or some function that needs
-    to be applied after parsing in order to set a configration value.
-
-    Post processors must accept a single argument that will either be a tuple
-    containing the already set config value or ``None`` if the config value
-    has not been set to anything. They must return the modified value in the
-    same format.
-    '''
-
-    def set_default_build_dir(build_dir):
-        '''
-        Post-processor to set the default build_dir based on the base_dir.
-
-        .. seealso :func:`~_Config._add_post_processor`
-        '''
-        if not build_dir or build_dir[0] is None:
-            base_dir = config._lookup_val('base_dir')[0]
-            build_dir = (os.path.join(base_dir, 'build'),)
-        return build_dir
-
-    def fix_verbosity_hack(verbose):
-        return (verbose[0].val,)
-
-    def threads_as_int(threads):
-        if threads is not None:
-            return (int(threads[0]),)
-
-    def test_threads_as_int(test_threads):
-        if test_threads is not None:
-            return (int(test_threads[0]),)
-
-    def default_isa(isa):
-        if not isa[0]:
-            return [constants.supported_tags[constants.isa_tag_type]]
-        else:
-            return isa
-
-    def default_variant(variant):
-        if not variant[0]:
-            # Default variant is only opt. No need to run tests with multiple
-            # different compilation targets
-            return [[constants.opt_tag]]
-        else:
-            return variant
-
-    def default_length(length):
-        if not length[0]:
-            return [[constants.quick_tag]]
-        else:
-            return length
-
-    def default_host(host):
-        if not host[0]:
-            try:
-                import platform
-                host_machine = platform.machine()
-                if host_machine not in constants.supported_hosts:
-                    raise ValueError("Invalid host machine")
-                return [[host_machine]]
-            except:
-                return [[constants.host_x86_64_tag]]
-        else:
-            return host
-
-    def compile_tag_regex(positional_tags):
-        if not positional_tags:
-            return positional_tags
-        else:
-            new_positional_tags_list = []
-            positional_tags = positional_tags[0]
-
-            for flag, regex in positional_tags:
-                if flag == 'exclude_tags':
-                    tag_regex = TagRegex(False, regex)
-                elif flag  == 'include_tags':
-                    tag_regex = TagRegex(True, regex)
-                else:
-                    raise ValueError('Unsupported flag.')
-                new_positional_tags_list.append(tag_regex)
-
-            return (new_positional_tags_list,)
-
-    config._add_post_processor('build_dir', set_default_build_dir)
-    config._add_post_processor('verbose', fix_verbosity_hack)
-    config._add_post_processor('isa', default_isa)
-    config._add_post_processor('variant', default_variant)
-    config._add_post_processor('length', default_length)
-    config._add_post_processor('host', default_host)
-    config._add_post_processor('threads', threads_as_int)
-    config._add_post_processor('test_threads', test_threads_as_int)
-    config._add_post_processor(StorePositionalTagsAction.position_kword,
-                               compile_tag_regex)
-class Argument(object):
-    '''
-    Class represents a cli argument/flag for a argparse parser.
-
-    :attr name: The long name of this object that will be stored in the arg
-        output by the final parser.
-    '''
-    def __init__(self, *flags, **kwargs):
-        self.flags = flags
-        self.kwargs = kwargs
-
-        if len(flags) == 0:
-            raise ValueError("Need at least one argument.")
-        elif 'dest' in kwargs:
-            self.name = kwargs['dest']
-        elif len(flags) > 1 or flags[0].startswith('-'):
-            for flag in flags:
-                if not flag.startswith('-'):
-                    raise ValueError("invalid option string %s: must start"
-                    "with a character '-'" % flag)
-
-                if flag.startswith('--'):
-                    if not hasattr(self, 'name'):
-                        self.name = flag.lstrip('-')
-
-        if not hasattr(self, 'name'):
-            self.name = flags[0].lstrip('-')
-        self.name = self.name.replace('-', '_')
-
-    def add_to(self, parser):
-        '''Add this argument to the given parser.'''
-        parser.add_argument(*self.flags, **self.kwargs)
-
-    def copy(self):
-        '''Copy this argument so you might modify any of its kwargs.'''
-        return copy.deepcopy(self)
-
-
-class _StickyInt:
-    '''
-    A class that is used to cheat the verbosity count incrementer by
-    pretending to be an int. This makes the int stay on the heap and eat other
-    real numbers when they are added to it.
-
-    We use this so we can allow the verbose flag to be provided before or after
-    the subcommand. This likely has no utility outside of this use case.
-    '''
-    def __init__(self, val=0):
-        self.val = val
-        self.type = int
-    def __add__(self, other):
-        self.val += other
-        return self
-
-common_args = NotImplemented
-
-class StorePositionAction(argparse.Action):
-    '''Base class for classes wishing to create namespaces where
-    arguments are stored in the order provided via the command line.
-    '''
-    position_kword = 'positional'
-
-    def __call__(self, parser, namespace, values, option_string=None):
-        if not self.position_kword in namespace:
-            setattr(namespace, self.position_kword, [])
-        previous = getattr(namespace, self.position_kword)
-        previous.append((self.dest, values))
-        setattr(namespace, self.position_kword, previous)
-
-class StorePositionalTagsAction(StorePositionAction):
-    position_kword = 'tag_filters'
-
-def define_common_args(config):
-    '''
-    Common args are arguments which are likely to be simular between different
-    subcommands, so they are available to all by placing their definitions
-    here.
-    '''
-    global common_args
-
-    # A list of common arguments/flags used across cli parsers.
-    common_args = [
-        Argument(
-            'directory',
-            nargs='?',
-            default=os.getcwd(),
-            help='Directory to start searching for tests in'),
-        Argument(
-            '--exclude-tags',
-            action=StorePositionalTagsAction,
-            help='A tag comparison used to select tests.'),
-        Argument(
-            '--include-tags',
-            action=StorePositionalTagsAction,
-            help='A tag comparison used to select tests.'),
-        Argument(
-            '--isa',
-            action='append',
-            default=[],
-            help="Only tests that are valid with one of these ISAs. "
-                 "Comma separated."),
-        Argument(
-            '--variant',
-            action='append',
-            default=[],
-            help="Only tests that are valid with one of these binary variants"
-                 "(e.g., opt, debug). Comma separated."),
-        Argument(
-            '--length',
-            action='append',
-            default=[],
-            help="Only tests that are one of these lengths. Comma separated."),
-        Argument(
-            '--host',
-            action='append',
-            default=[],
-            help="Only tests that are meant to runnable on the selected host"),
-        Argument(
-            '--uid',
-            action='store',
-            default=None,
-            help='UID of a specific test item to run.'),
-        Argument(
-            '--build-dir',
-            action='store',
-            help='Build directory for SCons'),
-        Argument(
-            '--base-dir',
-            action='store',
-            default=config._defaults.base_dir,
-            help='Directory to change to in order to exec scons.'),
-        Argument(
-            '-j', '--threads',
-            action='store',
-            default=1,
-            help='Number of threads to run SCons with.'),
-        Argument(
-            '-t', '--test-threads',
-            action='store',
-            default=1,
-            help='Number of threads to spawn to run concurrent tests with.'),
-        Argument(
-            '-v',
-            action='count',
-            dest='verbose',
-            default=_StickyInt(),
-            help='Increase verbosity'),
-        Argument(
-            '--config-path',
-            action='store',
-            default=os.getcwd(),
-            help='Path to read a testing.ini config in'
-        ),
-        Argument(
-            '--skip-build',
-            action='store_true',
-            default=False,
-            help='Skip the building component of SCons targets.'
-        ),
-        Argument(
-            '--result-path',
-            action='store',
-            help='The path to store results in.'
-        ),
-        Argument(
-            '--bin-path',
-            action='store',
-            default=None,
-            help='Path where binaries are stored (downloaded if not present)'
-        ),
-        Argument(
-            '--resource-url',
-            action='store',
-            default=config._defaults.resource_url,
-            help='The URL where the resources reside.'
-        ),
-
-    ]
-
-    # NOTE: There is a limitation which arises due to this format. If you have
-    # multiple arguments with the same name only the final one in the list
-    # will be saved.
-    #
-    # e.g. if you have a -v argument which increments verbosity level and
-    # a separate --verbose flag which 'store's verbosity level. the final
-    # one in the list will be saved.
-    common_args = AttrDict({arg.name:arg for arg in common_args})
-
-
-class ArgParser(object):
-    __metaclass__ = abc.ABCMeta
-
-    def __init__(self, parser):
-        # Copy public methods of the parser.
-        for attr in dir(parser):
-            if not attr.startswith('_'):
-                setattr(self, attr, getattr(parser, attr))
-        self.parser = parser
-        self.add_argument = self.parser.add_argument
-
-        # Argument will be added to all parsers and subparsers.
-        common_args.verbose.add_to(parser)
-
-
-class CommandParser(ArgParser):
-    '''
-    Main parser which parses command strings and uses those to direct to
-    a subparser.
-    '''
-    def __init__(self):
-        parser = argparse.ArgumentParser()
-        super(CommandParser, self).__init__(parser)
-        self.subparser = self.add_subparsers(dest='command')
-
-
-class RunParser(ArgParser):
-    '''
-    Parser for the \'run\' command.
-    '''
-    def __init__(self, subparser):
-        parser = subparser.add_parser(
-            'run',
-            help='''Run Tests.'''
-        )
-
-        super(RunParser, self).__init__(parser)
-
-        common_args.uid.add_to(parser)
-        common_args.skip_build.add_to(parser)
-        common_args.directory.add_to(parser)
-        common_args.build_dir.add_to(parser)
-        common_args.base_dir.add_to(parser)
-        common_args.bin_path.add_to(parser)
-        common_args.threads.add_to(parser)
-        common_args.test_threads.add_to(parser)
-        common_args.isa.add_to(parser)
-        common_args.variant.add_to(parser)
-        common_args.length.add_to(parser)
-        common_args.host.add_to(parser)
-        common_args.include_tags.add_to(parser)
-        common_args.exclude_tags.add_to(parser)
-
-
-class ListParser(ArgParser):
-    '''
-    Parser for the \'list\' command.
-    '''
-    def __init__(self, subparser):
-        parser = subparser.add_parser(
-            'list',
-            help='''List and query test metadata.'''
-        )
-        super(ListParser, self).__init__(parser)
-
-        Argument(
-            '--suites',
-            action='store_true',
-            default=False,
-            help='List all test suites.'
-        ).add_to(parser)
-        Argument(
-            '--tests',
-            action='store_true',
-            default=False,
-            help='List all test cases.'
-        ).add_to(parser)
-        Argument(
-            '--fixtures',
-            action='store_true',
-            default=False,
-            help='List all fixtures.'
-        ).add_to(parser)
-        Argument(
-            '--all-tags',
-            action='store_true',
-            default=False,
-            help='List all tags.'
-        ).add_to(parser)
-        Argument(
-            '-q',
-            dest='quiet',
-            action='store_true',
-            default=False,
-            help='Quiet output (machine readable).'
-        ).add_to(parser)
-
-        common_args.directory.add_to(parser)
-        common_args.bin_path.add_to(parser)
-        common_args.isa.add_to(parser)
-        common_args.variant.add_to(parser)
-        common_args.length.add_to(parser)
-        common_args.host.add_to(parser)
-        common_args.include_tags.add_to(parser)
-        common_args.exclude_tags.add_to(parser)
-
-
-class RerunParser(ArgParser):
-    def __init__(self, subparser):
-        parser = subparser.add_parser(
-            'rerun',
-            help='''Rerun failed tests.'''
-        )
-        super(RerunParser, self).__init__(parser)
-
-        common_args.skip_build.add_to(parser)
-        common_args.directory.add_to(parser)
-        common_args.build_dir.add_to(parser)
-        common_args.base_dir.add_to(parser)
-        common_args.bin_path.add_to(parser)
-        common_args.threads.add_to(parser)
-        common_args.test_threads.add_to(parser)
-        common_args.isa.add_to(parser)
-        common_args.variant.add_to(parser)
-        common_args.length.add_to(parser)
-        common_args.host.add_to(parser)
-
-config = _Config()
-define_constants(config.constants)
-
-# Constants are directly exposed and available once this module is created.
-# All constants MUST be defined before this point.
-config.constants = FrozenAttrDict(config.constants.__dict__)
-constants = config.constants
-
-'''
-This config object is the singleton config object available throughout the
-framework.
-'''
-def initialize_config():
-    '''
-    Parse the commandline arguments and setup the config varibles.
-    '''
-    global config
-
-    # Setup constants and defaults
-    define_defaults(config._defaults)
-    define_post_processors(config)
-    define_common_args(config)
-
-    # Setup parser and subcommands
-    baseparser = CommandParser()
-    runparser = RunParser(baseparser.subparser)
-    listparser = ListParser(baseparser.subparser)
-    rerunparser = RerunParser(baseparser.subparser)
-
-    # Initialize the config by parsing args and running callbacks.
-    config._init(baseparser)
diff --git a/ext/testlib/configuration.py b/ext/testlib/configuration.py
new file mode 100644 (file)
index 0000000..04744e1
--- /dev/null
@@ -0,0 +1,759 @@
+# Copyright (c) 2020 ARM Limited
+# All rights reserved
+#
+# The license below extends only to copyright in the software and shall
+# not be construed as granting a license to any other intellectual
+# property including but not limited to intellectual property relating
+# to a hardware implementation of the functionality of the software
+# licensed hereunder.  You may use the software subject to the license
+# terms below provided that you ensure that this notice is replicated
+# unmodified and in its entirety in all distributions of the software,
+# modified or unmodified, in source code or in binary form.
+#
+# Copyright (c) 2017 Mark D. Hill and David A. Wood
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Sean Wilson
+
+'''
+Global configuration module which exposes two types of configuration
+variables:
+
+1. config
+2. constants (Also attached to the config variable as an attribute)
+
+The main motivation for this module is to have a centralized location for
+defaults and configuration by command line and files for the test framework.
+
+A secondary goal is to reduce programming errors by providing common constant
+strings and values as python attributes to simplify detection of typos.
+A simple typo in a string can take a lot of debugging to uncover the issue,
+attribute errors are easier to notice and most autocompletion systems detect
+them.
+
+The config variable is initialzed by calling :func:`initialize_config`.
+Before this point only ``constants`` will be availaible. This is to ensure
+that library function writers never accidentally get stale config attributes.
+
+Program arguments/flag arguments are available from the config as attributes.
+If an attribute was not set by the command line or the optional config file,
+then it will fallback to the `_defaults` value, if still the value is not
+found an AttributeError will be raised.
+
+:func define_defaults:
+    Provided by the config if the attribute is not found in the config or
+    commandline. For instance, if we are using the list command fixtures might
+    not be able to count on the build_dir being provided since we aren't going
+    to build anything.
+
+:var constants:
+    Values not directly exposed by the config, but are attached to the object
+    for centralized access. I.E. you can reach them with
+    :code:`config.constants.attribute`. These should be used for setting
+    common string names used across the test framework.
+    :code:`_defaults.build_dir = None` Once this module has been imported
+    constants should not be modified and their base attributes are frozen.
+'''
+import abc
+import argparse
+import copy
+import os
+import re
+
+from six import add_metaclass
+from six.moves import configparser as ConfigParser
+from pickle import HIGHEST_PROTOCOL as highest_pickle_protocol
+
+from testlib.helper import absdirpath, AttrDict, FrozenAttrDict
+
+class UninitialzedAttributeException(Exception):
+    '''
+    Signals that an attribute in the config file was not initialized.
+    '''
+    pass
+
+class UninitializedConfigException(Exception):
+    '''
+    Signals that the config was not initialized before trying to access an
+    attribute.
+    '''
+    pass
+
+class TagRegex(object):
+    def __init__(self, include, regex):
+        self.include = include
+        self.regex = re.compile(regex)
+
+    def __str__(self):
+        type_ = 'Include' if self.include else 'Remove'
+        return '%10s: %s' % (type_, self.regex.pattern)
+
+class _Config(object):
+    _initialized = False
+
+    __shared_dict = {}
+
+    constants = AttrDict()
+    _defaults = AttrDict()
+    _config = {}
+
+    _cli_args = {}
+    _post_processors = {}
+
+    def __init__(self):
+        # This object will act as if it were a singleton.
+        self.__dict__ = self.__shared_dict
+
+    def _init(self, parser):
+        self._parse_commandline_args(parser)
+        self._run_post_processors()
+        self._initialized = True
+
+    def _init_with_dicts(self, config, defaults):
+        self._config = config
+        self._defaults = defaults
+        self._initialized = True
+
+    def _add_post_processor(self, attr, post_processor):
+        '''
+        :param attr: Attribute to pass to and recieve from the
+        :func:`post_processor`.
+
+        :param post_processor: A callback functions called in a chain to
+            perform additional setup for a config argument. Should return a
+            tuple containing the new value for the config attr.
+        '''
+        if attr not in self._post_processors:
+            self._post_processors[attr] = []
+        self._post_processors[attr].append(post_processor)
+
+    def _set(self, name, value):
+        self._config[name] = value
+
+    def _parse_commandline_args(self, parser):
+        args = parser.parse_args()
+
+        self._config_file_args = {}
+
+        for attr in dir(args):
+            # Ignore non-argument attributes.
+            if not attr.startswith('_'):
+                self._config_file_args[attr] = getattr(args, attr)
+        self._config.update(self._config_file_args)
+
+    def _run_post_processors(self):
+        for attr, callbacks in self._post_processors.items():
+            newval = self._lookup_val(attr)
+            for callback in callbacks:
+                newval = callback(newval)
+            if newval is not None:
+                newval = newval[0]
+            self._set(attr, newval)
+
+
+    def _lookup_val(self, attr):
+        '''
+        Get the attribute from the config or fallback to defaults.
+
+        :returns: If the value is not stored return None. Otherwise a tuple
+            containing the value.
+        '''
+        if attr in self._config:
+            return (self._config[attr],)
+        elif hasattr(self._defaults, attr):
+            return (getattr(self._defaults, attr),)
+
+    def __getattr__(self, attr):
+        if attr in dir(super(_Config, self)):
+            return getattr(super(_Config, self), attr)
+        elif not self._initialized:
+            raise UninitializedConfigException(
+                'Cannot directly access elements from the config before it is'
+                ' initialized')
+        else:
+            val = self._lookup_val(attr)
+            if val is not None:
+                return val[0]
+            else:
+                raise UninitialzedAttributeException(
+                    '%s was not initialzed in the config.' % attr)
+
+    def get_tags(self):
+        d = {typ: set(self.__getattr__(typ))
+            for typ in self.constants.supported_tags}
+        if any(map(lambda vals: bool(vals), d.values())):
+            return d
+        else:
+            return {}
+
+def define_defaults(defaults):
+    '''
+    Defaults are provided by the config if the attribute is not found in the
+    config or commandline. For instance, if we are using the list command
+    fixtures might not be able to count on the build_dir being provided since
+    we aren't going to build anything.
+    '''
+    defaults.base_dir = os.path.abspath(os.path.join(absdirpath(__file__),
+                                                      os.pardir,
+                                                      os.pardir))
+    defaults.result_path = os.path.join(os.getcwd(), '.testing-results')
+    defaults.list_only_failed = False
+    defaults.resource_url = 'http://dist.gem5.org/dist/v20'
+
+def define_constants(constants):
+    '''
+    'constants' are values not directly exposed by the config, but are attached
+    to the object for centralized access. These should be used for setting
+    common string names used across the test framework. A simple typo in
+    a string can take a lot of debugging to uncover the issue, attribute errors
+    are easier to notice and most autocompletion systems detect them.
+    '''
+    constants.system_out_name = 'system-out'
+    constants.system_err_name = 'system-err'
+
+    constants.isa_tag_type = 'isa'
+    constants.x86_tag = 'X86'
+    constants.sparc_tag = 'SPARC'
+    constants.riscv_tag = 'RISCV'
+    constants.arm_tag = 'ARM'
+    constants.mips_tag = 'MIPS'
+    constants.power_tag = 'POWER'
+    constants.null_tag = 'NULL'
+
+    constants.variant_tag_type = 'variant'
+    constants.opt_tag = 'opt'
+    constants.debug_tag = 'debug'
+    constants.fast_tag = 'fast'
+
+    constants.length_tag_type = 'length'
+    constants.quick_tag = 'quick'
+    constants.long_tag = 'long'
+
+    constants.host_isa_tag_type = 'host'
+    constants.host_x86_64_tag = 'x86_64'
+    constants.host_i386_tag = 'i386'
+    constants.host_arm_tag = 'aarch64'
+
+    constants.supported_tags = {
+        constants.isa_tag_type : (
+            constants.x86_tag,
+            constants.sparc_tag,
+            constants.riscv_tag,
+            constants.arm_tag,
+            constants.mips_tag,
+            constants.power_tag,
+            constants.null_tag,
+            ),
+        constants.variant_tag_type: (
+            constants.opt_tag,
+            constants.debug_tag,
+            constants.fast_tag,
+        ),
+        constants.length_tag_type: (
+            constants.quick_tag,
+            constants.long_tag,
+        ),
+        constants.host_isa_tag_type: (
+            constants.host_x86_64_tag,
+            constants.host_i386_tag,
+            constants.host_arm_tag,
+        ),
+    }
+
+    # Binding target ISA with host ISA. This is useful for the
+    # case where host ISA and target ISA need to coincide
+    constants.target_host = {
+        constants.arm_tag   : (constants.host_arm_tag,),
+        constants.x86_tag   : (constants.host_x86_64_tag, constants.host_i386_tag),
+        constants.sparc_tag : (constants.host_x86_64_tag, constants.host_i386_tag),
+        constants.riscv_tag : (constants.host_x86_64_tag, constants.host_i386_tag),
+        constants.mips_tag  : (constants.host_x86_64_tag, constants.host_i386_tag),
+        constants.power_tag : (constants.host_x86_64_tag, constants.host_i386_tag),
+        constants.null_tag  : (None,)
+    }
+
+    constants.supported_isas = constants.supported_tags['isa']
+    constants.supported_variants = constants.supported_tags['variant']
+    constants.supported_lengths = constants.supported_tags['length']
+    constants.supported_hosts = constants.supported_tags['host']
+
+    constants.tempdir_fixture_name = 'tempdir'
+    constants.gem5_simulation_stderr = 'simerr'
+    constants.gem5_simulation_stdout = 'simout'
+    constants.gem5_simulation_stats = 'stats.txt'
+    constants.gem5_simulation_config_ini = 'config.ini'
+    constants.gem5_simulation_config_json = 'config.json'
+    constants.gem5_returncode_fixture_name = 'gem5-returncode'
+    constants.gem5_binary_fixture_name = 'gem5'
+    constants.xml_filename = 'results.xml'
+    constants.pickle_filename = 'results.pickle'
+    constants.pickle_protocol = highest_pickle_protocol
+
+    # The root directory which all test names will be based off of.
+    constants.testing_base = absdirpath(os.path.join(absdirpath(__file__),
+                                                     os.pardir))
+
+def define_post_processors(config):
+    '''
+    post_processors are used to do final configuration of variables. This is
+    useful if there is a dynamically set default, or some function that needs
+    to be applied after parsing in order to set a configration value.
+
+    Post processors must accept a single argument that will either be a tuple
+    containing the already set config value or ``None`` if the config value
+    has not been set to anything. They must return the modified value in the
+    same format.
+    '''
+
+    def set_default_build_dir(build_dir):
+        '''
+        Post-processor to set the default build_dir based on the base_dir.
+
+        .. seealso :func:`~_Config._add_post_processor`
+        '''
+        if not build_dir or build_dir[0] is None:
+            base_dir = config._lookup_val('base_dir')[0]
+            build_dir = (os.path.join(base_dir, 'build'),)
+        return build_dir
+
+    def fix_verbosity_hack(verbose):
+        return (verbose[0].val,)
+
+    def threads_as_int(threads):
+        if threads is not None:
+            return (int(threads[0]),)
+
+    def test_threads_as_int(test_threads):
+        if test_threads is not None:
+            return (int(test_threads[0]),)
+
+    def default_isa(isa):
+        if not isa[0]:
+            return [constants.supported_tags[constants.isa_tag_type]]
+        else:
+            return isa
+
+    def default_variant(variant):
+        if not variant[0]:
+            # Default variant is only opt. No need to run tests with multiple
+            # different compilation targets
+            return [[constants.opt_tag]]
+        else:
+            return variant
+
+    def default_length(length):
+        if not length[0]:
+            return [[constants.quick_tag]]
+        else:
+            return length
+
+    def default_host(host):
+        if not host[0]:
+            try:
+                import platform
+                host_machine = platform.machine()
+                if host_machine not in constants.supported_hosts:
+                    raise ValueError("Invalid host machine")
+                return [[host_machine]]
+            except:
+                return [[constants.host_x86_64_tag]]
+        else:
+            return host
+
+    def compile_tag_regex(positional_tags):
+        if not positional_tags:
+            return positional_tags
+        else:
+            new_positional_tags_list = []
+            positional_tags = positional_tags[0]
+
+            for flag, regex in positional_tags:
+                if flag == 'exclude_tags':
+                    tag_regex = TagRegex(False, regex)
+                elif flag  == 'include_tags':
+                    tag_regex = TagRegex(True, regex)
+                else:
+                    raise ValueError('Unsupported flag.')
+                new_positional_tags_list.append(tag_regex)
+
+            return (new_positional_tags_list,)
+
+    config._add_post_processor('build_dir', set_default_build_dir)
+    config._add_post_processor('verbose', fix_verbosity_hack)
+    config._add_post_processor('isa', default_isa)
+    config._add_post_processor('variant', default_variant)
+    config._add_post_processor('length', default_length)
+    config._add_post_processor('host', default_host)
+    config._add_post_processor('threads', threads_as_int)
+    config._add_post_processor('test_threads', test_threads_as_int)
+    config._add_post_processor(StorePositionalTagsAction.position_kword,
+                               compile_tag_regex)
+class Argument(object):
+    '''
+    Class represents a cli argument/flag for a argparse parser.
+
+    :attr name: The long name of this object that will be stored in the arg
+        output by the final parser.
+    '''
+    def __init__(self, *flags, **kwargs):
+        self.flags = flags
+        self.kwargs = kwargs
+
+        if len(flags) == 0:
+            raise ValueError("Need at least one argument.")
+        elif 'dest' in kwargs:
+            self.name = kwargs['dest']
+        elif len(flags) > 1 or flags[0].startswith('-'):
+            for flag in flags:
+                if not flag.startswith('-'):
+                    raise ValueError("invalid option string %s: must start"
+                    "with a character '-'" % flag)
+
+                if flag.startswith('--'):
+                    if not hasattr(self, 'name'):
+                        self.name = flag.lstrip('-')
+
+        if not hasattr(self, 'name'):
+            self.name = flags[0].lstrip('-')
+        self.name = self.name.replace('-', '_')
+
+    def add_to(self, parser):
+        '''Add this argument to the given parser.'''
+        parser.add_argument(*self.flags, **self.kwargs)
+
+    def copy(self):
+        '''Copy this argument so you might modify any of its kwargs.'''
+        return copy.deepcopy(self)
+
+
+class _StickyInt:
+    '''
+    A class that is used to cheat the verbosity count incrementer by
+    pretending to be an int. This makes the int stay on the heap and eat other
+    real numbers when they are added to it.
+
+    We use this so we can allow the verbose flag to be provided before or after
+    the subcommand. This likely has no utility outside of this use case.
+    '''
+    def __init__(self, val=0):
+        self.val = val
+        self.type = int
+    def __add__(self, other):
+        self.val += other
+        return self
+
+common_args = NotImplemented
+
+class StorePositionAction(argparse.Action):
+    '''Base class for classes wishing to create namespaces where
+    arguments are stored in the order provided via the command line.
+    '''
+    position_kword = 'positional'
+
+    def __call__(self, parser, namespace, values, option_string=None):
+        if not self.position_kword in namespace:
+            setattr(namespace, self.position_kword, [])
+        previous = getattr(namespace, self.position_kword)
+        previous.append((self.dest, values))
+        setattr(namespace, self.position_kword, previous)
+
+class StorePositionalTagsAction(StorePositionAction):
+    position_kword = 'tag_filters'
+
+def define_common_args(config):
+    '''
+    Common args are arguments which are likely to be simular between different
+    subcommands, so they are available to all by placing their definitions
+    here.
+    '''
+    global common_args
+
+    # A list of common arguments/flags used across cli parsers.
+    common_args = [
+        Argument(
+            'directory',
+            nargs='?',
+            default=os.getcwd(),
+            help='Directory to start searching for tests in'),
+        Argument(
+            '--exclude-tags',
+            action=StorePositionalTagsAction,
+            help='A tag comparison used to select tests.'),
+        Argument(
+            '--include-tags',
+            action=StorePositionalTagsAction,
+            help='A tag comparison used to select tests.'),
+        Argument(
+            '--isa',
+            action='append',
+            default=[],
+            help="Only tests that are valid with one of these ISAs. "
+                 "Comma separated."),
+        Argument(
+            '--variant',
+            action='append',
+            default=[],
+            help="Only tests that are valid with one of these binary variants"
+                 "(e.g., opt, debug). Comma separated."),
+        Argument(
+            '--length',
+            action='append',
+            default=[],
+            help="Only tests that are one of these lengths. Comma separated."),
+        Argument(
+            '--host',
+            action='append',
+            default=[],
+            help="Only tests that are meant to runnable on the selected host"),
+        Argument(
+            '--uid',
+            action='store',
+            default=None,
+            help='UID of a specific test item to run.'),
+        Argument(
+            '--build-dir',
+            action='store',
+            help='Build directory for SCons'),
+        Argument(
+            '--base-dir',
+            action='store',
+            default=config._defaults.base_dir,
+            help='Directory to change to in order to exec scons.'),
+        Argument(
+            '-j', '--threads',
+            action='store',
+            default=1,
+            help='Number of threads to run SCons with.'),
+        Argument(
+            '-t', '--test-threads',
+            action='store',
+            default=1,
+            help='Number of threads to spawn to run concurrent tests with.'),
+        Argument(
+            '-v',
+            action='count',
+            dest='verbose',
+            default=_StickyInt(),
+            help='Increase verbosity'),
+        Argument(
+            '--config-path',
+            action='store',
+            default=os.getcwd(),
+            help='Path to read a testing.ini config in'
+        ),
+        Argument(
+            '--skip-build',
+            action='store_true',
+            default=False,
+            help='Skip the building component of SCons targets.'
+        ),
+        Argument(
+            '--result-path',
+            action='store',
+            help='The path to store results in.'
+        ),
+        Argument(
+            '--bin-path',
+            action='store',
+            default=None,
+            help='Path where binaries are stored (downloaded if not present)'
+        ),
+        Argument(
+            '--resource-url',
+            action='store',
+            default=config._defaults.resource_url,
+            help='The URL where the resources reside.'
+        ),
+
+    ]
+
+    # NOTE: There is a limitation which arises due to this format. If you have
+    # multiple arguments with the same name only the final one in the list
+    # will be saved.
+    #
+    # e.g. if you have a -v argument which increments verbosity level and
+    # a separate --verbose flag which 'store's verbosity level. the final
+    # one in the list will be saved.
+    common_args = AttrDict({arg.name:arg for arg in common_args})
+
+@add_metaclass(abc.ABCMeta)
+class ArgParser(object):
+
+    def __init__(self, parser):
+        # Copy public methods of the parser.
+        for attr in dir(parser):
+            if not attr.startswith('_'):
+                setattr(self, attr, getattr(parser, attr))
+        self.parser = parser
+        self.add_argument = self.parser.add_argument
+
+        # Argument will be added to all parsers and subparsers.
+        common_args.verbose.add_to(parser)
+
+
+class CommandParser(ArgParser):
+    '''
+    Main parser which parses command strings and uses those to direct to
+    a subparser.
+    '''
+    def __init__(self):
+        parser = argparse.ArgumentParser()
+        super(CommandParser, self).__init__(parser)
+        self.subparser = self.add_subparsers(dest='command')
+
+
+class RunParser(ArgParser):
+    '''
+    Parser for the \'run\' command.
+    '''
+    def __init__(self, subparser):
+        parser = subparser.add_parser(
+            'run',
+            help='''Run Tests.'''
+        )
+
+        super(RunParser, self).__init__(parser)
+
+        common_args.uid.add_to(parser)
+        common_args.skip_build.add_to(parser)
+        common_args.directory.add_to(parser)
+        common_args.build_dir.add_to(parser)
+        common_args.base_dir.add_to(parser)
+        common_args.bin_path.add_to(parser)
+        common_args.threads.add_to(parser)
+        common_args.test_threads.add_to(parser)
+        common_args.isa.add_to(parser)
+        common_args.variant.add_to(parser)
+        common_args.length.add_to(parser)
+        common_args.host.add_to(parser)
+        common_args.include_tags.add_to(parser)
+        common_args.exclude_tags.add_to(parser)
+
+
+class ListParser(ArgParser):
+    '''
+    Parser for the \'list\' command.
+    '''
+    def __init__(self, subparser):
+        parser = subparser.add_parser(
+            'list',
+            help='''List and query test metadata.'''
+        )
+        super(ListParser, self).__init__(parser)
+
+        Argument(
+            '--suites',
+            action='store_true',
+            default=False,
+            help='List all test suites.'
+        ).add_to(parser)
+        Argument(
+            '--tests',
+            action='store_true',
+            default=False,
+            help='List all test cases.'
+        ).add_to(parser)
+        Argument(
+            '--fixtures',
+            action='store_true',
+            default=False,
+            help='List all fixtures.'
+        ).add_to(parser)
+        Argument(
+            '--all-tags',
+            action='store_true',
+            default=False,
+            help='List all tags.'
+        ).add_to(parser)
+        Argument(
+            '-q',
+            dest='quiet',
+            action='store_true',
+            default=False,
+            help='Quiet output (machine readable).'
+        ).add_to(parser)
+
+        common_args.directory.add_to(parser)
+        common_args.bin_path.add_to(parser)
+        common_args.isa.add_to(parser)
+        common_args.variant.add_to(parser)
+        common_args.length.add_to(parser)
+        common_args.host.add_to(parser)
+        common_args.include_tags.add_to(parser)
+        common_args.exclude_tags.add_to(parser)
+
+
+class RerunParser(ArgParser):
+    def __init__(self, subparser):
+        parser = subparser.add_parser(
+            'rerun',
+            help='''Rerun failed tests.'''
+        )
+        super(RerunParser, self).__init__(parser)
+
+        common_args.skip_build.add_to(parser)
+        common_args.directory.add_to(parser)
+        common_args.build_dir.add_to(parser)
+        common_args.base_dir.add_to(parser)
+        common_args.bin_path.add_to(parser)
+        common_args.threads.add_to(parser)
+        common_args.test_threads.add_to(parser)
+        common_args.isa.add_to(parser)
+        common_args.variant.add_to(parser)
+        common_args.length.add_to(parser)
+        common_args.host.add_to(parser)
+
+config = _Config()
+define_constants(config.constants)
+
+# Constants are directly exposed and available once this module is created.
+# All constants MUST be defined before this point.
+config.constants = FrozenAttrDict(config.constants.__dict__)
+constants = config.constants
+
+'''
+This config object is the singleton config object available throughout the
+framework.
+'''
+def initialize_config():
+    '''
+    Parse the commandline arguments and setup the config varibles.
+    '''
+    global config
+
+    # Setup constants and defaults
+    define_defaults(config._defaults)
+    define_post_processors(config)
+    define_common_args(config)
+
+    # Setup parser and subcommands
+    baseparser = CommandParser()
+    runparser = RunParser(baseparser.subparser)
+    listparser = ListParser(baseparser.subparser)
+    rerunparser = RerunParser(baseparser.subparser)
+
+    # Initialize the config by parsing args and running callbacks.
+    config._init(baseparser)
index 7af6cb289f2752c5eec2c98d2ec59202a5935069..20568b80f2277a41eaa42388ac1f0a18c418481c 100644 (file)
@@ -29,8 +29,8 @@
 import copy
 import traceback
 
-import helper
-import log
+import testlib.helper as helper
+import testlib.log as log
 
 class SkipException(Exception):
     def __init__(self, fixture, testitem):
@@ -61,7 +61,7 @@ class Fixture(object):
     collector = helper.InstanceCollector()
 
     def __new__(klass, *args, **kwargs):
-        obj = super(Fixture, klass).__new__(klass, *args, **kwargs)
+        obj = super(Fixture, klass).__new__(klass)
         Fixture.collector.collect(obj)
         return obj
 
index 6f76940712ca8f73abfe55b079cff0f517d66540..3005e01efb282006ed42cb6fd15e953ca7aedcd1 100644 (file)
@@ -35,20 +35,20 @@ from __future__ import print_function
 
 import multiprocessing
 import os
-import Queue
 import sys
 import threading
 import time
 import traceback
 
-import helper
-import log
-import result
-import state
-import test
-import terminal
+import testlib.helper as helper
+import testlib.log as log
+import testlib.result as result
+import testlib.state as state
+import testlib.test_util as test
+import testlib.terminal as terminal
 
-from config import config, constants
+from six.moves import queue as Queue
+from testlib.configuration import config, constants
 
 
 class _TestStreamManager(object):
index ac49e468ebb06df4302cdd7696e0a91d529d1f19..4237a765e1211279f79ef26601fdf2b7b8d4fe5b 100644 (file)
@@ -34,7 +34,6 @@ from collections import MutableSet, OrderedDict
 import difflib
 import errno
 import os
-import Queue
 import re
 import shutil
 import stat
@@ -44,6 +43,8 @@ import threading
 import time
 import traceback
 
+from six.moves import queue as Queue
+
 #TODO Tear out duplicate logic from the sandbox IOManager
 def log_call(logger, command, *popenargs, **kwargs):
     '''
@@ -80,7 +81,8 @@ def log_call(logger, command, *popenargs, **kwargs):
 
     def log_output(log_callback, pipe, redirects=tuple()):
         # Read iteractively, don't allow input to fill the pipe.
-        for line in iter(pipe.readline, ''):
+        for line in iter(pipe.readline, b''):
+            line = line.decode("utf-8")
             for r in redirects:
                 r.write(line)
             log_callback(line.rstrip())
index 8f8f60e707fc578fb58a0d47dc975fec686312ab..bb2fe4ef929e173e93ea4282e480050ae73216a3 100644 (file)
@@ -67,16 +67,17 @@ a :class:`TestSuite` named after the module.
 
 import os
 import re
+import six
 import sys
 import traceback
 
-import config
-import log
-import suite as suite_mod
-import test as test_mod
-import fixture as fixture_mod
-import wrappers
-import uid
+import testlib.configuration as configuration
+import testlib.log as log
+import testlib.suite as suite_mod
+import testlib.test_util as test_mod
+import testlib.fixture as fixture_mod
+import testlib.wrappers as wrappers
+import testlib.uid as uid
 
 class DuplicateTestItemException(Exception):
     '''
@@ -112,7 +113,7 @@ def _assert_files_in_same_dir(files):
         if files:
             directory = os.path.dirname(files[0])
             for f in files:
-                assert os.path.dirname(f) == directory
+                assert(os.path.dirname(f) == directory)
 
 class Loader(object):
     '''
@@ -186,6 +187,7 @@ class Loader(object):
             self._loaded_a_file = True
 
         for directory in self._discover_files(root):
+            directory = list(directory)
             if directory:
                 _assert_files_in_same_dir(directory)
                 for f in directory:
@@ -193,6 +195,7 @@ class Loader(object):
 
     def load_dir(self, directory):
         for dir_ in self._discover_files(directory):
+            directory = list(directory)
             _assert_files_in_same_dir(dir_)
             for f in dir_:
                 self.load_file(f)
@@ -221,29 +224,27 @@ class Loader(object):
         sys.path.insert(0, os.path.dirname(path))
         cwd = os.getcwd()
         os.chdir(os.path.dirname(path))
-        config.config.file_under_load = path
+        configuration.config.file_under_load = path
 
         new_tests = test_mod.TestCase.collector.create()
         new_suites = suite_mod.TestSuite.collector.create()
         new_fixtures = fixture_mod.Fixture.collector.create()
 
-        def cleanup():
-            config.config.file_under_load = None
-            sys.path[:] = old_path
-            os.chdir(cwd)
-            test_mod.TestCase.collector.remove(new_tests)
-            suite_mod.TestSuite.collector.remove(new_suites)
-            fixture_mod.Fixture.collector.remove(new_fixtures)
-
         try:
-            execfile(path, newdict, newdict)
+            exec(open(path).read(), newdict, newdict)
         except Exception as e:
             log.test_log.debug(traceback.format_exc())
             log.test_log.warn(
                               'Exception thrown while loading "%s"\n'
                               'Ignoring all tests in this file.'
                                % (path))
-            cleanup()
+            # Clean up
+            configuration.config.file_under_load = None
+            sys.path[:] = old_path
+            os.chdir(cwd)
+            test_mod.TestCase.collector.remove(new_tests)
+            suite_mod.TestSuite.collector.remove(new_suites)
+            fixture_mod.Fixture.collector.remove(new_fixtures)
             return
 
         # Create a module test suite for those not contained in a suite.
@@ -281,7 +282,13 @@ class Loader(object):
             self.suites.extend(loaded_suites)
             self.suite_uids.update({suite.uid: suite
                     for suite in loaded_suites})
-        cleanup()
+        # Clean up
+        configuration.config.file_under_load = None
+        sys.path[:] = old_path
+        os.chdir(cwd)
+        test_mod.TestCase.collector.remove(new_tests)
+        suite_mod.TestSuite.collector.remove(new_suites)
+        fixture_mod.Fixture.collector.remove(new_fixtures)
 
     def _discover_files(self, root):
         '''
index 5ba6f5d4f35cba40457a304f72435a8538ff7599..cddb9217c681f3b8b1170e24fd6e07062604fea8 100644 (file)
@@ -30,8 +30,9 @@
 This module supplies the global `test_log` object which all testing
 results and messages are reported through.
 '''
-import wrappers
+import testlib.wrappers as wrappers
 
+from six import add_metaclass
 
 class LogLevel():
     Fatal = 0
@@ -55,6 +56,7 @@ class RecordTypeCounterMetaclass(type):
         RecordTypeCounterMetaclass.counter += 1
 
 
+@add_metaclass(RecordTypeCounterMetaclass)
 class Record(object):
     '''
     A generic object that is passed to the :class:`Log` and its handlers.
@@ -62,7 +64,6 @@ class Record(object):
     ..note: Although not statically enforced, all items in the record should be
         be pickleable. This enables logging accross multiple processes.
     '''
-    __metaclass__ = RecordTypeCounterMetaclass
 
     def __init__(self, **data):
         self.data = data
index 3827f7815f2f48dbd76a09eb31c3a2b17fe5816a..9c9ed03dd1ad9ea85a857e0198cdda170ef0d2ae 100644 (file)
 import os
 import itertools
 
-import config
-import fixture as fixture_mod
-import handlers
-import loader as loader_mod
-import log
-import query
-import result
-import runner
-import terminal
-import uid
+import testlib.configuration as configuration
+import testlib.fixture as fixture_mod
+import testlib.handlers as handlers
+import testlib.loader as loader_mod
+import testlib.log as log
+import testlib.query as query
+import testlib.result as result
+import testlib.runner as runner
+import testlib.terminal as terminal
+import testlib.uid as uid
 
 def entry_message():
     log.test_log.message("Running the new gem5 testing script.")
@@ -50,7 +50,7 @@ def entry_message():
 class RunLogHandler():
     def __init__(self):
         term_handler = handlers.TerminalHandler(
-            verbosity=config.config.verbose+log.LogLevel.Info
+            verbosity=configuration.config.verbose+log.LogLevel.Info
         )
         summary_handler = handlers.SummaryHandler()
         self.mp_handler = handlers.MultiprocessingHandlerWrapper(
@@ -62,7 +62,7 @@ class RunLogHandler():
     def schedule_finalized(self, test_schedule):
         # Create the result handler object.
         self.result_handler = handlers.ResultHandler(
-                test_schedule, config.config.result_path)
+                test_schedule, configuration.config.result_path)
         self.mp_handler.add_handler(self.result_handler)
 
     def finish_testing(self):
@@ -87,27 +87,27 @@ class RunLogHandler():
         return self.result_handler.unsuccessful()
 
 def get_config_tags():
-    return getattr(config.config,
-            config.StorePositionalTagsAction.position_kword)
+    return getattr(configuration.config,
+            configuration.StorePositionalTagsAction.position_kword)
 
 def filter_with_config_tags(loaded_library):
     tags = get_config_tags()
     final_tags = []
     regex_fmt = '^%s$'
-    cfg = config.config
+    cfg = configuration.config
 
     def _append_inc_tag_filter(name):
         if hasattr(cfg, name):
             tag_opts = getattr(cfg, name)
             for tag in tag_opts:
-                final_tags.append(config.TagRegex(True, regex_fmt % tag))
+                final_tags.append(configuration.TagRegex(True, regex_fmt % tag))
 
     def _append_rem_tag_filter(name):
         if hasattr(cfg, name):
             tag_opts = getattr(cfg, name)
             for tag in cfg.constants.supported_tags[name]:
                 if tag not in tag_opts:
-                    final_tags.append(config.TagRegex(False, regex_fmt % tag))
+                    final_tags.append(configuration.TagRegex(False, regex_fmt % tag))
 
     # Append additional tags for the isa, length, and variant options.
     # They apply last (they take priority)
@@ -206,13 +206,13 @@ def load_tests():
     testloader = loader_mod.Loader()
     log.test_log.message(terminal.separator())
     log.test_log.message('Loading Tests', bold=True)
-    testloader.load_root(config.config.directory)
+    testloader.load_root(configuration.config.directory)
     return testloader
 
 def do_list():
     term_handler = handlers.TerminalHandler(
-        verbosity=config.config.verbose+log.LogLevel.Info,
-        machine_only=config.config.quiet
+        verbosity=configuration.config.verbose+log.LogLevel.Info,
+        machine_only=configuration.config.quiet
     )
     log.test_log.log_obj.add_handler(term_handler)
 
@@ -223,11 +223,11 @@ def do_list():
 
     qrunner = query.QueryRunner(test_schedule)
 
-    if config.config.suites:
+    if configuration.config.suites:
         qrunner.list_suites()
-    elif config.config.tests:
+    elif configuration.config.tests:
         qrunner.list_tests()
-    elif config.config.all_tags:
+    elif configuration.config.all_tags:
         qrunner.list_tags()
     else:
         qrunner.list_suites()
@@ -259,13 +259,13 @@ def run_schedule(test_schedule, log_handler):
     log.test_log.message('Running Tests from {} suites'
             .format(len(test_schedule.suites)), bold=True)
     log.test_log.message("Results will be stored in {}".format(
-                config.config.result_path))
+                configuration.config.result_path))
     log.test_log.message(terminal.separator())
 
     # Build global fixtures and exectute scheduled test suites.
-    if config.config.test_threads > 1:
+    if configuration.config.test_threads > 1:
         library_runner = runner.LibraryParallelRunner(test_schedule)
-        library_runner.set_threads(config.config.test_threads)
+        library_runner.set_threads(configuration.config.test_threads)
     else:
         library_runner = runner.LibraryRunner(test_schedule)
     library_runner.run()
@@ -279,8 +279,8 @@ def run_schedule(test_schedule, log_handler):
 def do_run():
     # Initialize early parts of the log.
     with RunLogHandler() as log_handler:
-        if config.config.uid:
-            uid_ = uid.UID.from_uid(config.config.uid)
+        if configuration.config.uid:
+            uid_ = uid.UID.from_uid(configuration.config.uid)
             if isinstance(uid_, uid.TestUID):
                 log.test_log.error('Unable to run a standalone test.\n'
                         'Gem5 expects test suites to be the smallest unit '
@@ -305,8 +305,8 @@ def do_rerun():
     with RunLogHandler() as log_handler:
         # Load previous results
         results = result.InternalSavedResults.load(
-                os.path.join(config.config.result_path,
-                config.constants.pickle_filename))
+                os.path.join(configuration.config.result_path,
+                configuration.constants.pickle_filename))
 
         rerun_suites = (suite.uid for suite in results if suite.unsuccessful)
 
@@ -323,10 +323,10 @@ def main():
     Returns 0 on success and 1 otherwise so it can be used as a return code
     for scripts.
     '''
-    config.initialize_config()
+    configuration.initialize_config()
 
     # 'do' the given command.
-    result = globals()['do_'+config.config.command]()
+    result = globals()['do_'+configuration.config.command]()
     log.test_log.close()
 
     return result
index c66445c4461881642c99d54f97b06428c3b5db4e..174af626fedac89ce4405dedbcaf6673b6d5e12c 100644 (file)
@@ -26,8 +26,8 @@
 #
 # Authors: Sean Wilson
 
-import terminal
-import log
+import testlib.terminal as terminal
+import testlib.log as log
 
 # TODO Refactor print logic out of this so the objects
 # created are separate from print logic.
index 786c21b609168eb9137a1e5adc1a64e32ef8f8cc..38b3322ba180f2f2a71959e9377c871927ef0e1b 100644 (file)
@@ -30,10 +30,10 @@ import os
 import pickle
 import xml.sax.saxutils
 
-from config import config
-import helper
-import state
-import log
+from testlib.configuration import config
+import testlib.helper as helper
+import testlib.state as state
+import testlib.log as log
 
 def _create_uid_index(iterable):
     index = {}
@@ -62,7 +62,7 @@ class _CommonMetadataMixin:
         return self._metadata.result.value != state.Result.Passed
 
 
-class InternalTestResult(object, _CommonMetadataMixin):
+class InternalTestResult(_CommonMetadataMixin):
     def __init__(self, obj, suite, directory):
         self._metadata = obj.metadata
         self.suite = suite
@@ -77,7 +77,7 @@ class InternalTestResult(object, _CommonMetadataMixin):
         )
 
 
-class InternalSuiteResult(object, _CommonMetadataMixin):
+class InternalSuiteResult(_CommonMetadataMixin):
     def __init__(self, obj, directory):
         self._metadata = obj.metadata
         self.directory = directory
@@ -104,7 +104,7 @@ class InternalSuiteResult(object, _CommonMetadataMixin):
         return results
 
 
-class InternalLibraryResults(object, _CommonMetadataMixin):
+class InternalLibraryResults(_CommonMetadataMixin):
     def __init__(self, obj, directory):
         self.directory = directory
         self._metadata = obj.metadata
@@ -159,12 +159,12 @@ class InternalSavedResults:
                if exc.errno != errno.EEXIST:
                    raise
 
-        with open(path, 'w') as f:
+        with open(path, 'wb') as f:
             pickle.dump(results, f, protocol)
 
     @staticmethod
     def load(path):
-        with open(path, 'r') as f:
+        with open(path, 'rb') as f:
             return pickle.load(f)
 
 
index 9868cefb11ab1941df618dbe8834cc3f7d593504..ec3c838e7da3d1f508f1f4d0c246b86304370cf7 100644 (file)
@@ -30,13 +30,13 @@ import multiprocessing.dummy
 import threading
 import traceback
 
-import helper
-import state
-import log
-import sandbox
+import testlib.helper as helper
+import testlib.state as state
+import testlib.log as log
+import testlib.sandbox as sandbox
 
-from state import Status, Result
-from fixture import SkipException
+from testlib.state import Status, Result
+from testlib.fixture import SkipException
 
 def compute_aggregate_result(iterable):
     '''
index 49fe133eabc57eeb2b4846961d507584ac4a9189..bdc6d88595546884f1f117f358f58c3f6f6ebb88 100644 (file)
@@ -33,7 +33,7 @@ import sys
 import threading
 import traceback
 
-import log
+import testlib.log as log
 
 pdb._Pdb = pdb.Pdb
 class ForkedPdb(pdb._Pdb):
@@ -81,18 +81,18 @@ class IoManager(object):
         self.old_stdout = os.dup(sys.stdout.fileno())
 
         os.dup2(self.stderr_wp, sys.stderr.fileno())
-        sys.stderr = os.fdopen(self.stderr_wp, 'w', 0)
+        sys.stderr = os.fdopen(self.stderr_wp, 'w')
         os.dup2(self.stdout_wp, sys.stdout.fileno())
-        sys.stdout = os.fdopen(self.stdout_wp, 'w', 0)
+        sys.stdout = os.fdopen(self.stdout_wp, 'w')
 
     def restore_pipes(self):
         self.stderr_wp = os.dup(sys.stderr.fileno())
         self.stdout_wp = os.dup(sys.stdout.fileno())
 
         os.dup2(self.old_stderr, sys.stderr.fileno())
-        sys.stderr = os.fdopen(self.old_stderr, 'w', 0)
+        sys.stderr = open(self.old_stderr, 'w')
         os.dup2(self.old_stdout, sys.stdout.fileno())
-        sys.stdout = os.fdopen(self.old_stdout, 'w', 0)
+        sys.stdout = open(self.old_stdout, 'w')
 
     def start_loggers(self):
         self.log_ouput()
index 2ce817a6e849abb570f9ff5f54594335a171ed3d..eae52fd922511e8f5d557b379736886a49dad96e 100644 (file)
@@ -27,8 +27,8 @@
 # Authors: Sean Wilson
 
 
-import helper
-import runner as runner_mod
+import testlib.helper as helper
+import testlib.runner as runner_mod
 
 class TestSuite(object):
     '''
@@ -52,7 +52,7 @@ class TestSuite(object):
     tags = set()
 
     def __new__(klass, *args, **kwargs):
-        obj = super(TestSuite, klass).__new__(klass, *args, **kwargs)
+        obj = super(TestSuite, klass).__new__(klass)
         TestSuite.collector.collect(obj)
         return obj
 
index bdb20edea47228dc39b45dfe76eb09a82262a6f9..bc4c85599db56d8863b7f5252601338d6035d621 100644 (file)
@@ -28,6 +28,7 @@ import sys
 import fcntl
 import termios
 import struct
+import six
 
 # Intended usage example:
 #
@@ -74,7 +75,7 @@ try:
     def cap_string(s, *args):
         cap = curses.tigetstr(s)
         if cap:
-            return curses.tparm(cap, *args)
+            return curses.tparm(cap, *args).decode("utf-8")
         else:
             return ''
 except:
@@ -84,7 +85,7 @@ class ColorStrings(object):
     def __init__(self, cap_string):
         for i, c in enumerate(color_names):
             setattr(self, c, cap_string('setaf', i))
-        for name, cap in capability_map.iteritems():
+        for name, cap in six.iteritems(capability_map):
             setattr(self, name, cap_string(cap))
 
 termcap = ColorStrings(cap_string)
@@ -137,7 +138,7 @@ def insert_separator(inside, char=default_separator,
     .. seealso:: :func:`separator`
     '''
     # Use a bytearray so it's efficient to manipulate
-    string = bytearray(separator(char, color=color))
+    string = bytearray(separator(char, color=color), 'utf-8')
 
     # Check if we can fit inside with at least min_barrier.
     gap = (len(string) - len(inside)) - min_barrier * 2
@@ -145,27 +146,27 @@ def insert_separator(inside, char=default_separator,
         # We'll need to expand the string to fit us.
         string.extend([ char for _ in range(-gap)])
     # Emplace inside
-    middle = ((len(string)-1)/2)
-    start_idx = middle - len(inside)/2
-    string[start_idx:len(inside)+start_idx] = inside
-    return str(string)
+    middle = (len(string)-1)//2
+    start_idx = middle - len(inside)//2
+    string[start_idx:len(inside)+start_idx] = str.encode(inside)
+    return str(string.decode("utf-8"))
 
 
 if __name__ == '__main__':
     def test_termcap(obj):
         for c_name in color_names:
             c_str = getattr(obj, c_name)
-            print c_str + c_name + obj.Normal
+            print(c_str + c_name + obj.Normal)
             for attr_name in capability_names:
                 if attr_name == 'Normal':
                     continue
                 attr_str = getattr(obj, attr_name)
-                print attr_str + c_str + attr_name + " " + c_name + obj.Normal
-            print obj.Bold + obj.Underline + \
-                  c_name + "Bold Underline " + c_str + obj.Normal
+                print(attr_str + c_str + attr_name + " " + c_name + obj.Normal)
+            print(obj.Bold + obj.Underline + \
+                  c_name + "Bold Underline " + c_str + obj.Normal)
 
-    print "=== termcap enabled ==="
+    print("=== termcap enabled ===")
     test_termcap(termcap)
-    print termcap.Normal
-    print "=== termcap disabled ==="
+    print(termcap.Normal)
+    print("=== termcap disabled ===")
     test_termcap(no_termcap)
diff --git a/ext/testlib/test.py b/ext/testlib/test.py
deleted file mode 100644 (file)
index 18899d6..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-# Copyright (c) 2017 Mark D. Hill and David A. Wood
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer;
-# redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution;
-# neither the name of the copyright holders nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-# Authors: Sean Wilson
-
-import functools
-
-import helper
-import runner as runner_mod
-
-class TestingException(Exception):
-    '''Common ancestor for manual Testing Exceptions.'''
-class TestFailException(TestingException):
-    '''Signals that a test has failed.'''
-class TestSkipException(TestingException):
-    '''Signals that a test has been skipped.'''
-
-def fail(message):
-    '''Cause the current test to fail with the given message.'''
-    raise TestFailException(message)
-
-def skip(message):
-    '''Cause the current test to skip with the given message.'''
-    raise TestSkipException(message)
-
-class TestCase(object):
-    '''
-    Base class for all tests.
-
-    ..note::
-        The :func:`__new__` method enables collection of test cases, it must
-        be called in order for test cases to be collected.
-    '''
-    fixtures = []
-
-    # TODO, remove explicit dependency. Use the loader to set the
-    # default runner
-    runner = runner_mod.TestRunner
-    collector = helper.InstanceCollector()
-
-    def __new__(cls, *args, **kwargs):
-        obj = super(TestCase, cls).__new__(cls, *args, **kwargs)
-        TestCase.collector.collect(obj)
-        return obj
-
-    def __init__(self, name=None, fixtures=tuple(), **kwargs):
-        self.fixtures = self.fixtures + list(fixtures)
-        if name is None:
-            name = self.__class__.__name__
-        self.name = name
-
-class TestFunction(TestCase):
-    '''
-    TestCase implementation which uses a callable object as a test.
-    '''
-    def __init__(self, function, name=None, **kwargs):
-        self.test_function = function
-        if name is None:
-            name = function.__name__
-        TestCase.__init__(self, name=name, **kwargs)
-
-    def test(self, *args, **kwargs):
-        self.test_function(*args, **kwargs)
-
-# TODO Change the decorator to make this easier to create copy tests.
-# Good way to do so might be return by reference.
-def testfunction(function=None, name=None, fixtures=tuple()):
-    '''
-    A decorator used to wrap a function as a TestFunction.
-    '''
-    def testfunctiondecorator(function):
-        '''Decorator used to mark a function as a test case.'''
-        kwargs = {}
-        if name is not None:
-            kwargs['name'] = name
-        if fixtures is not None:
-            kwargs['fixtures'] = fixtures
-        TestFunction(function, **kwargs)
-        return function
-    if function is not None:
-        return testfunctiondecorator(function)
-    else:
-        return testfunctiondecorator
diff --git a/ext/testlib/test_util.py b/ext/testlib/test_util.py
new file mode 100644 (file)
index 0000000..5a0c0a8
--- /dev/null
@@ -0,0 +1,106 @@
+# Copyright (c) 2017 Mark D. Hill and David A. Wood
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors: Sean Wilson
+
+import functools
+
+import testlib.helper as helper
+import testlib.runner as runner_mod
+
+class TestingException(Exception):
+    '''Common ancestor for manual Testing Exceptions.'''
+class TestFailException(TestingException):
+    '''Signals that a test has failed.'''
+class TestSkipException(TestingException):
+    '''Signals that a test has been skipped.'''
+
+def fail(message):
+    '''Cause the current test to fail with the given message.'''
+    raise TestFailException(message)
+
+def skip(message):
+    '''Cause the current test to skip with the given message.'''
+    raise TestSkipException(message)
+
+class TestCase(object):
+    '''
+    Base class for all tests.
+
+    ..note::
+        The :func:`__new__` method enables collection of test cases, it must
+        be called in order for test cases to be collected.
+    '''
+    fixtures = []
+
+    # TODO, remove explicit dependency. Use the loader to set the
+    # default runner
+    runner = runner_mod.TestRunner
+    collector = helper.InstanceCollector()
+
+    def __new__(cls, *args, **kwargs):
+        obj = super(TestCase, cls).__new__(cls)
+        TestCase.collector.collect(obj)
+        return obj
+
+    def __init__(self, name=None, fixtures=tuple(), **kwargs):
+        self.fixtures = self.fixtures + list(fixtures)
+        if name is None:
+            name = self.__class__.__name__
+        self.name = name
+
+class TestFunction(TestCase):
+    '''
+    TestCase implementation which uses a callable object as a test.
+    '''
+    def __init__(self, function, name=None, **kwargs):
+        self.test_function = function
+        if name is None:
+            name = function.__name__
+        TestCase.__init__(self, name=name, **kwargs)
+
+    def test(self, *args, **kwargs):
+        self.test_function(*args, **kwargs)
+
+# TODO Change the decorator to make this easier to create copy tests.
+# Good way to do so might be return by reference.
+def testfunction(function=None, name=None, fixtures=tuple()):
+    '''
+    A decorator used to wrap a function as a TestFunction.
+    '''
+    def testfunctiondecorator(function):
+        '''Decorator used to mark a function as a test case.'''
+        kwargs = {}
+        if name is not None:
+            kwargs['name'] = name
+        if fixtures is not None:
+            kwargs['fixtures'] = fixtures
+        TestFunction(function, **kwargs)
+        return function
+    if function is not None:
+        return testfunctiondecorator(function)
+    else:
+        return testfunctiondecorator
index fe56252a0261510c2bfd811bbdb94bce6fbcb26c..f8951a28da1b5827dedeea3f17375287b6ede5eb 100644 (file)
@@ -29,7 +29,7 @@
 import os
 import itertools
 
-import config
+import testlib.configuration as configuration
 
 class UID(object):
     sep = ':'
@@ -42,12 +42,12 @@ class UID(object):
     @staticmethod
     def _shorten_path(path):
         return os.path.relpath(path,
-                os.path.commonprefix((config.constants.testing_base,
+                os.path.commonprefix((configuration.constants.testing_base,
                                       path)))
 
     @staticmethod
     def _full_path(short_path):
-        return os.path.join(config.constants.testing_base, short_path)
+        return os.path.join(configuration.constants.testing_base, short_path)
 
     @classmethod
     def uid_to_path(cls, uid):
index 4bd22a468ec781fcf8da5ddf7fa6ac7fc6c50972..e91970262e31afc8a40a08aa3bc0b3c51a659714 100644 (file)
@@ -44,9 +44,8 @@ loaded by the testlib :class:`testlib.loader.Loader`.
 '''
 import itertools
 
-import log
-import uid
-from state import Status, Result
+import testlib.uid as uid
+from testlib.state import Status, Result
 
 class TestCaseMetadata():
     def __init__(self, name, uid, path, result, status, suite_uid):
@@ -127,9 +126,11 @@ class LoadedTestable(object):
 
     # TODO Change log to provide status_update, result_update for all types.
     def log_status(self, status):
+        import testlib.log as log
         log.test_log.status_update(self, status)
 
     def log_result(self, result):
+        import testlib.log as log
         log.test_log.result_update(self, result)
 
     def __iter__(self):
index 134e2a59883e846082276e1291ceddf22287f665..7cd628a7c872af194a7cfb120540b972af6c65cf 100644 (file)
@@ -624,7 +624,7 @@ def makeTheISA(source, target, env):
     isas = [ src.get_contents().decode('utf-8') for src in source ]
     target_isa = env['TARGET_ISA']
     def define(isa):
-        return isa.upper() + '_ISA'
+        return str(isa.upper()) + '_ISA'
 
     def namespace(isa):
         return isa[0].upper() + isa[1:].lower() + 'ISA'
@@ -666,10 +666,10 @@ env.Command('config/the_isa.hh', list(map(Value, all_isa_list)),
             MakeAction(makeTheISA, Transform("CFG ISA", 0)))
 
 def makeTheGPUISA(source, target, env):
-    isas = [ src.get_contents() for src in source ]
+    isas = [ src.get_contents().decode('utf-8') for src in source ]
     target_gpu_isa = env['TARGET_GPU_ISA']
     def define(isa):
-        return isa.upper() + '_ISA'
+        return str(isa.upper()) + '_ISA'
 
     def namespace(isa):
         return isa[0].upper() + isa[1:].lower() + 'ISA'
index 61a049d594cce998c0852579ee87543cc21d230d..ab21dda1f827c98cb8a2d4dfa54dafbff4db8752 100644 (file)
@@ -581,10 +581,10 @@ ArmSemihosting::callHeapInfo32(ThreadContext *tc, Addr block_addr)
     uint64_t heap_base, heap_limit, stack_base, stack_limit;
     gatherHeapInfo(tc, false, heap_base, heap_limit, stack_base, stack_limit);
 
-    std::array<uint32_t, 4> block = {
+    std::array<uint32_t, 4> block = {{
         (uint32_t)heap_base, (uint32_t)heap_limit,
         (uint32_t)stack_base, (uint32_t)stack_limit
-    };
+    }};
     portProxy(tc).write(block_addr, block, ArmISA::byteOrder(tc));
 
     return retOK(0);
@@ -596,9 +596,9 @@ ArmSemihosting::callHeapInfo64(ThreadContext *tc, Addr block_addr)
     uint64_t heap_base, heap_limit, stack_base, stack_limit;
     gatherHeapInfo(tc, true, heap_base, heap_limit, stack_base, stack_limit);
 
-    std::array<uint64_t, 4> block = {
+    std::array<uint64_t, 4> block = {{
         heap_base, heap_limit, stack_base, stack_limit
-    };
+    }};
     portProxy(tc).write(block_addr, block, ArmISA::byteOrder(tc));
 
     return retOK(0);
index 8dcc92c7bc106f4873a659ce85fa37420b53b66c..56404248bb8a1fdfa20dceb9d6cc8161a774cf30 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
 #  Copyright (c) 2015 Advanced Micro Devices, Inc.
 #  All rights reserved.
 #
index ac26230a13cf9b2b09feb5f30a0109c36587a628..055c95b35225b60b2cbc84d2805fcd28b4dba047 100644 (file)
@@ -38,6 +38,7 @@
 #include "arch/riscv/pagetable.hh"
 #include "arch/riscv/registers.hh"
 #include "base/bitfield.hh"
+#include "base/compiler.hh"
 #include "cpu/base.hh"
 #include "debug/Checkpoint.hh"
 #include "debug/RiscvMisc.hh"
@@ -48,7 +49,7 @@
 namespace RiscvISA
 {
 
-const std::array<const char *, NumMiscRegs> MiscRegNames = {{
+const std::array<const char *, NumMiscRegs> M5_VAR_USED MiscRegNames = {{
     [MISCREG_PRV]           = "PRV",
     [MISCREG_ISA]           = "ISA",
     [MISCREG_VENDORID]      = "VENDORID",
index 6ec118d569634199135a9096743be538b6124b61..786cb8193ed623f6591338eb0eefc4b11d2e281f 100644 (file)
@@ -386,10 +386,9 @@ Walker::WalkerState::stepWalk(PacketPtr &write)
             if (!functional)
                 walker->tlb->insert(entry.vaddr, entry);
             else {
-                Addr offset = entry.vaddr & mask(entry.logBytes);
-                Addr paddr = entry.paddr << PageShift | offset;
                 DPRINTF(PageTableWalker, "Translated %#x -> %#x\n",
-                        entry.vaddr, paddr);
+                        entry.vaddr, entry.paddr << PageShift |
+                        (entry.vaddr & mask(entry.logBytes)));
             }
         }
         endWalk();
index f377e2a2b61aa5bbb61f6580d6fc3521ed996204..1b7fd3e8b52d28c8707f15ce556f3874ee00c7a9 100644 (file)
 using namespace std;
 using namespace X86ISA;
 
-static const int ArgumentReg[] = {
-    INTREG_RDI,
-    INTREG_RSI,
-    INTREG_RDX,
-    // This argument register is r10 for syscalls and rcx for C.
-    INTREG_R10W,
-    // INTREG_RCX,
-    INTREG_R8W,
-    INTREG_R9W
-};
-
-static const int NumArgumentRegs M5_VAR_USED =
-    sizeof(ArgumentReg) / sizeof(const int);
-
-static const int ArgumentReg32[] = {
-    INTREG_EBX,
-    INTREG_ECX,
-    INTREG_EDX,
-    INTREG_ESI,
-    INTREG_EDI,
-    INTREG_EBP
-};
-
-static const int NumArgumentRegs32 M5_VAR_USED =
-    sizeof(ArgumentReg) / sizeof(const int);
-
 template class MultiLevelPageTable<LongModePTE<47, 39>,
                                    LongModePTE<38, 30>,
                                    LongModePTE<29, 21>,
index 4464702dd03288b0391e70576a5b54e9e4cbf73b..4e9d4be253aad0787439cefd7bbadee0b5454ff2 100644 (file)
@@ -206,6 +206,7 @@ TLB::translateInt(bool read, RequestPtr req, ThreadContext *tc)
         if (!msrAddrToIndex(regNum, vaddr))
             return std::make_shared<GeneralProtection>(0);
 
+        req->setPaddr(req->getVaddr());
         req->setLocalAccessor(
             [read,regNum](ThreadContext *tc, PacketPtr pkt)
             {
@@ -223,6 +224,7 @@ TLB::translateInt(bool read, RequestPtr req, ThreadContext *tc)
         // space.
         assert(!(IOPort & ~0xFFFF));
         if (IOPort == 0xCF8 && req->getSize() == 4) {
+            req->setPaddr(req->getVaddr());
             req->setLocalAccessor(
                 [read](ThreadContext *tc, PacketPtr pkt)
                 {
index ec94a1374921fe61719b01c60af1472587612f59..47b8aa7f4de25b5b283b920bf7bef54e55b1ac3a 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2015 ARM Limited
+ * Copyright (c) 2020 Barkhausen Institut
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -142,6 +143,11 @@ OutputDirectory::checkForStdio(const string &name)
 void
 OutputDirectory::close(OutputStream *file)
 {
+    if (file == &stdout || file == &stderr) {
+        file->stream()->flush();
+        return;
+    }
+
     auto i = files.find(file->name());
     if (i == files.end())
         fatal("Attempted to close an unregistred file stream");
index 4fd9e79fd009e5e0d7494f9316edabfbc45fade1..985bf61f60e820639343fc83d1cd6cc35e808682 100644 (file)
@@ -83,9 +83,14 @@ class Info;
 class Group
 {
   public:
+    /**
+     * @ingroup api_stats
+     * @{
+     */
     Group() = delete;
     Group(const Group &) = delete;
     Group &operator=(const Group &) = delete;
+    /** @}*/ //end of api_stats
 
     /**
      * Construct a new statistics group.
@@ -104,6 +109,8 @@ class Group
      * @param parent Parent group to associate this object to.
      * @param name Name of this group, can be NULL to merge this group
      * with the parent group.
+     *
+     * @ingroup api_stats
      */
     Group(Group *parent, const char *name = nullptr);
 
@@ -117,11 +124,15 @@ class Group
      * description. Stat names and descriptions should typically be
      * set from the constructor usingo from the constructor using the
      * ADD_STAT macro.
+     *
+     * @ingroup api_stats
      */
     virtual void regStats();
 
     /**
      * Callback to reset stats.
+     *
+     * @ingroup api_stats
      */
     virtual void resetStats();
 
@@ -129,22 +140,30 @@ class Group
      * Callback before stats are dumped. This can be overridden by
      * objects that need to perform calculations in addition to the
      * capabiltiies implemented in the stat framework.
+     *
+     * @ingroup api_stats
      */
     virtual void preDumpStats();
 
     /**
      * Register a stat with this group. This method is normally called
      * automatically when a stat is instantiated.
+     *
+     * @ingroup api_stats
      */
     void addStat(Stats::Info *info);
 
     /**
      * Get all child groups associated with this object.
+     *
+     * @ingroup api_stats
      */
     const std::map<std::string, Group *> &getStatGroups() const;
 
     /**
      * Get all stats associated with this object.
+     *
+     * @ingroup api_stats
      */
     const std::vector<Info *> &getStats() const;
 
@@ -154,6 +173,8 @@ class Group
      * This method may only be called from a Group constructor or from
      * regStats. It's typically only called explicitly from Python
      * when setting up the SimObject hierarchy.
+     *
+     * @ingroup api_stats
      */
     void addStatGroup(const char *name, Group *block);
 
index 7182b5507653725209db976a2125266107137818..c5fbca03bb43dc8de716432432accdaa7356f544 100644 (file)
@@ -26,4 +26,4 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-const char *gem5Version = "[develop]";
+const char *gem5Version = "20.0.0.0";
index 243e54e26432248310bba76c43ad1003175b0ef4..d72c44c800ace14eb75c071b2e6a3fba29617897 100644 (file)
@@ -38,6 +38,7 @@
 #ifndef __DEV_ARM_SMMU_V3_TRANSL_HH__
 #define __DEV_ARM_SMMU_V3_TRANSL_HH__
 
+#include "base/compiler.hh"
 #include "dev/arm/smmu_v3_proc.hh"
 #include "dev/arm/smmu_v3_ptops.hh"
 #include "dev/arm/smmu_v3_slaveifc.hh"
@@ -96,7 +97,7 @@ class SMMUTranslationProcess : public SMMUProcess
     TranslContext context;
 
     Tick recvTick;
-    Tick faultTick;
+    Tick M5_CLASS_VAR_USED faultTick;
 
     virtual void main(Yield &yield);
 
index 125d6eef141f922fb05e31ceb4a0d5a1fad6b158..50e3c6dbf84270323bd699e9d7d444b7a4f2b401 100644 (file)
@@ -35,7 +35,7 @@
 from m5.SimObject import SimObject
 from m5.params import *
 from m5.proxy import *
-from Device import DmaDevice
+from m5.objects.Device import DmaDevice
 
 class HSADevice(DmaDevice):
     type = 'HSADevice'
index ed742fa49849452c1da4c374a1847b7f938b0376..3df22a00daeb78d1f02900ced6f788dd6fbbbcad 100644 (file)
@@ -35,7 +35,7 @@
 from m5.SimObject import SimObject
 from m5.params import *
 from m5.proxy import *
-from Process import EmulatedDriver
+from m5.objects.Process import EmulatedDriver
 
 class HSADriver(EmulatedDriver):
     type = 'HSADriver'
index 01b7a41ebbc7133e6fea9e8aae34efb6bd14831b..78ec8e8b4e14fa498218da44b2314acfa5c96410 100644 (file)
@@ -102,9 +102,8 @@ HSADevice::translateOrDie(Addr vaddr, Addr &paddr)
      * grab context zero.
      */
     auto process = sys->getThreadContext(0)->getProcessPtr();
-    auto mem_state = process->getMemState();
 
-    if (!mem_state->translate(vaddr, paddr)) {
+    if (!process->pTable->translate(vaddr, paddr)) {
         fatal("failed translation: vaddr 0x%x\n", vaddr);
     }
 }
index 5f301591708eb067a73b908740ab6ef9d57480b2..3f5c8eb0a56e1e9fd5e76f7475470b30d6199ed6 100644 (file)
@@ -74,7 +74,7 @@ HSADriver::mmap(ThreadContext *tc, Addr start, uint64_t length, int prot,
             "offset: 0x%x)\n", start, length, offset);
 
     auto process = tc->getProcessPtr();
-    auto mem_state = process->getMemState();
+    auto mem_state = process->memState;
 
     // Extend global mmap region if necessary.
     if (start == 0) {
@@ -87,32 +87,8 @@ HSADriver::mmap(ThreadContext *tc, Addr start, uint64_t length, int prot,
      * Now map this virtual address to our PIO doorbell interface
      * in the page tables (non-cacheable).
      */
-    mem_state->map(start, device->hsaPacketProc().pioAddr, length, false);
+    process->pTable->map(start, device->hsaPacketProc().pioAddr,
+                         length, false);
     DPRINTF(HSADriver, "amdkfd doorbell mapped to %xp\n", start);
     return start;
 }
-
-/**
- * Forward relevant parameters to packet processor; queueID
- * is used to link doorbell. The queueIDs are not re-used
- * in current implementation, and we allocate only one page
- * (4096 bytes) for doorbells, so check if this queue ID can
- * be mapped into that page.
- */
-void
-HSADriver::allocateQueue(const SETranslatingPortProxy &mem_proxy, Addr ioc_buf)
-{
-    TypedBufferArg<kfd_ioctl_create_queue_args> args(ioc_buf);
-    args.copyIn(mem_proxy);
-
-    if (VOID_PTR_ADD32(0, queueId) >= (void*)0x1000) {
-        fatal("%s: Exceeded maximum number of HSA queues allowed\n", name());
-    }
-
-    args->queue_id = queueId++;
-    auto &hsa_pp = device->hsaPacketProc();
-    hsa_pp.setDeviceQueueDesc(args->read_pointer_address,
-                              args->ring_base_address, args->queue_id,
-                              args->ring_size);
-    args.copyOut(mem_proxy);
-}
index 76da30e29c3f5577a66b8d7e48cff884e025e140..bd050163bba23e6f074d91c0f6b4fab12628d903 100644 (file)
@@ -127,7 +127,7 @@ HSAPacketProcessor::write(Packet *pkt)
           "%s: write of size %d to reg-offset %d (0x%x)\n",
           __FUNCTION__, pkt->getSize(), daddr, daddr);
 
-    uint32_t doorbell_reg = pkt->get<uint32_t>();
+    uint32_t doorbell_reg = pkt->getLE<uint32_t>();
 
     DPRINTF(HSAPacketProcessor,
             "%s: write data 0x%x to offset %d (0x%x)\n",
@@ -152,9 +152,8 @@ HSAPacketProcessor::translateOrDie(Addr vaddr, Addr &paddr)
     // new extensions, it will likely be wrong to just arbitrarily grab context
     // zero.
     auto process = sys->getThreadContext(0)->getProcessPtr();
-    auto mem_state = process->getMemState();
 
-    if (!mem_state->translate(vaddr, paddr))
+    if (!process->pTable->translate(vaddr, paddr))
         fatal("failed translation: vaddr 0x%x\n", vaddr);
 }
 
@@ -395,9 +394,7 @@ HSAPacketProcessor::processPkt(void* pkt, uint32_t rl_idx, Addr host_pkt_addr)
                  * not support atomic operations.
                  */
                 auto tc = sys->getThreadContext(0);
-                auto process = tc->getProcessPtr();
-                auto mem_state = process->getMemState();
-                auto &virt_proxy = mem_state->getVirtProxy();
+                auto &virt_proxy = tc->getVirtProxy();
                 TypedBufferArg<uint64_t> prev_signal(signal_addr);
                 prev_signal.copyIn(virt_proxy);
 
index 5558d4eb69b764d615219df7e1fd23015c1b0e6c..206d9ab8485ddd5d89e509304780d55b77bfbd0d 100644 (file)
 // HSA runtime supports only 5 signals per barrier packet
 #define NumSignalsPerBarrier 5
 
-// This define is copied from hsa runtime (libhsakmt/src/libhsakmt.h)
-// This is the mapping function used by runtime for mapping
-// queueID to dooorbell address
-#define VOID_PTR_ADD32(ptr,n) (void*)((uint32_t*)(ptr) + n)/*ptr + offset*/
-
 class HSADevice;
 class HWScheduler;
 
index 6b371551bd9d330e398cb374808044ceedc0b0c5..57cf6d1b189b52fcd39a63c9f528fb015b771420 100644 (file)
@@ -90,7 +90,12 @@ HWScheduler::registerNewQueue(uint64_t hostReadIndexPointer,
     // Map queue ID to doorbell.
     // We are only using offset to pio base address as doorbell
     // We use the same mapping function used by hsa runtime to do this mapping
-    Addr db_offset = (Addr)(VOID_PTR_ADD32(0, queue_id));
+    //
+    // Originally
+    // #define VOID_PTR_ADD32(ptr,n) \
+    //     (void*)((uint32_t*)(ptr) + n)/*ptr + offset*/
+    // (Addr)VOID_PTR_ADD32(0, queue_id)
+    Addr db_offset = queue_id;
     if (dbMap.find(db_offset) != dbMap.end()) {
         panic("Creating an already existing queue (queueID %d)", queue_id);
     }
@@ -333,7 +338,15 @@ HWScheduler::write(Addr db_addr, uint32_t doorbell_reg)
 void
 HWScheduler::unregisterQueue(uint64_t queue_id)
 {
-    Addr db_offset = (Addr)(VOID_PTR_ADD32(0, queue_id));
+    // Pointer arithmetic on a null pointer is undefined behavior. Clang
+    // compilers therefore complain if the following reads:
+    // `(Addr)(VOID_PRT_ADD32(0, queue_id))`
+    //
+    // Originally
+    // #define VOID_PTR_ADD32(ptr,n) \
+    //     (void*)((uint32_t*)(ptr) + n)/*ptr + offset*/
+    // (Addr)VOID_PTR_ADD32(0, queue_id)
+    Addr db_offset = queue_id;
     auto dbmap_iter = dbMap.find(db_offset);
     if (dbmap_iter == dbMap.end()) {
         panic("Destroying a non-existing queue (db_offset %x)",
index 1578ea30f84aa359741d3c7ef95974ec405b816d..319bccf138307af8e4f6a78850735ba29c8385f7 100644 (file)
@@ -444,7 +444,7 @@ CowDiskImage::unserialize(CheckpointIn &cp)
 {
     string cowFilename;
     UNSERIALIZE_SCALAR(cowFilename);
-    cowFilename = cp.cptDir + "/" + cowFilename;
+    cowFilename = cp.getCptDir() + "/" + cowFilename;
     open(cowFilename);
 }
 
diff --git a/src/doxygen/group_definitions.hh b/src/doxygen/group_definitions.hh
new file mode 100644 (file)
index 0000000..40069e0
--- /dev/null
@@ -0,0 +1,29 @@
+/**
+ * @defgroup api_drain The Drain API.
+ *
+ * These methods relate to the "Drainable" interface.
+ */
+
+/**
+ * @defgroup api_serialize The Serialize API.
+ *
+ * These methods related to the "Serialize" interface.
+ */
+
+/**
+ * @defgroup api_eventq The Event Queue API.
+ *
+ * These methods relate to the event queue interface.
+ */
+
+/**
+ * @defgroup api_stats The Stats API.
+ *
+ * These methods relate to the statistics I/O interface.
+ */
+
+/**
+ * @defgroup api_simobject The SimObject API.
+ *
+ * These methods relate to the SimObject interface.
+ */
index 2ae40dadf23c70dfc6a7105313a257a01ac33cb7..37a8b03a28c5682cc2268eef3ba013fa90bb8969 100644 (file)
@@ -314,7 +314,7 @@ namespace X86ISA
                 return std::make_shared<GeneralProtection>(0);
 
             req->setLocalAccessor(
-                [read,regNum,vaddr](ThreadContext *tc, PacketPtr pkt)
+                [read,regNum](ThreadContext *tc, PacketPtr pkt)
                 {
                     return localMiscRegAccess(read, regNum, tc, pkt);
                 }
index 0a8479eb89cc304d9f3d359737df8a4280a3d445..5f0fcc77a23614b6904fb9c85fdb842a4ab9ca95 100644 (file)
@@ -716,7 +716,7 @@ DRAMCtrl::processRespondEvent()
         accessAndRespond(dram_pkt->pkt, frontendLatency + backendLatency);
     }
 
-    delete respQueue.front();
+    assert(respQueue.front() == dram_pkt);
     respQueue.pop_front();
 
     if (!respQueue.empty()) {
@@ -738,6 +738,8 @@ DRAMCtrl::processRespondEvent()
         }
     }
 
+    delete dram_pkt;
+
     // We have made a location in the queue available at this point,
     // so if there is a read that was forced to wait, retry now
     if (retryRdReq) {
index b4246a30249fd3ab6f7dfb8cb7812a25b9d183fd..4bd812c2125bad8bd63e25e3da2fde93fcb05328 100644 (file)
@@ -401,7 +401,7 @@ PhysicalMemory::unserializeStore(CheckpointIn &cp)
 
     string filename;
     UNSERIALIZE_SCALAR(filename);
-    string filepath = cp.cptDir + "/" + filename;
+    string filepath = cp.getCptDir() + "/" + filename;
 
     // mmap memoryfile
     gzFile compressed_mem = gzopen(filepath.c_str(), "rb");
index 8c22ae495f29a9f836ec4b0402b245be8769059d..fc90f8a624ec5381cd876335bc05e8ee0f671188 100644 (file)
@@ -126,7 +126,7 @@ MakeInclude('structures/CacheMemory.hh')
 MakeInclude('structures/DirectoryMemory.hh')
 MakeInclude('structures/PerfectCacheMemory.hh')
 MakeInclude('structures/PersistentTable.hh')
-MakeInclude('structures/Prefetcher.hh')
+MakeInclude('structures/RubyPrefetcher.hh')
 MakeInclude('structures/TBETable.hh')
 MakeInclude('structures/TimerTable.hh')
 MakeInclude('structures/WireBuffer.hh')
index c720888c126304aec566f00b27e2083af7869645..dbb35eeed605f71926b61f5f5c2406f0ba2b4448 100644 (file)
@@ -35,6 +35,7 @@
 #include <iostream>
 #include <vector>
 
+#include "base/compiler.hh"
 #include "mem/ruby/common/Consumer.hh"
 #include "mem/ruby/network/garnet2.0/CommonTypes.hh"
 #include "mem/ruby/network/garnet2.0/NetworkLink.hh"
@@ -91,7 +92,7 @@ class OutputUnit : public Consumer
 
   private:
     Router *m_router;
-    int m_id;
+    int M5_CLASS_VAR_USED m_id;
     PortDirection m_direction;
     int m_vc_per_vnet;
     NetworkLink *m_out_link;
index 3639ef2c594b60adbe84571de2e53b2160bfe74e..4de4a293e07542afb9f6f77f84d20c84c3296bfb 100644 (file)
@@ -46,7 +46,7 @@ machine(MachineType:L0Cache, "MESI Directory L0 Cache")
    Cycles response_latency := 2;
    bool send_evictions;
 
-   Prefetcher * prefetcher;
+   RubyPrefetcher * prefetcher;
    bool enable_prefetch := "False";
 
    // From this node's L0 cache to the network
index 7c83478db58c2d2eab5b266ca8c976d48d543189..3e07e03024fdb7f95d0999961f08186a57047172 100644 (file)
@@ -1,4 +1,16 @@
 /*
+ * Copyright (c) 2020 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
  * Copyright (c) 1999-2013 Mark D. Hill and David A. Wood
  * All rights reserved.
  *
@@ -30,7 +42,7 @@ machine(MachineType:L1Cache, "MESI Directory L1 Cache CMP")
  : Sequencer * sequencer;
    CacheMemory * L1Icache;
    CacheMemory * L1Dcache;
-   Prefetcher * prefetcher;
+   RubyPrefetcher * prefetcher;
    int l2_select_num_bits;
    Cycles l1_request_latency := 2;
    Cycles l1_response_latency := 2;
@@ -816,11 +828,6 @@ machine(MachineType:L1Cache, "MESI Directory L1 Cache CMP")
     }
   }
 
-  action(dg_invalidate_sc, "dg",
-         desc="Invalidate store conditional as the cache lost permissions") {
-    sequencer.invalidateSC(address);
-  }
-
   action(h_load_hit, "hd",
          desc="Notify sequencer the load completed.")
   {
@@ -1394,7 +1401,6 @@ machine(MachineType:L1Cache, "MESI Directory L1 Cache CMP")
   transition(SM, Inv, IM) {
     forward_eviction_to_cpu;
     fi_sendInvAck;
-    dg_invalidate_sc;
     l_popRequestQueue;
   }
 
index a29fb5c4f3386492c19334f10377c50141cc3f26..15bbdd3f2898c6cbd7532ed2d9e818f6113151fc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 ARM Limited
+ * Copyright (c) 2019-2020 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -1191,6 +1191,7 @@ machine(MachineType:L1Cache, "L1 cache protocol")
   // transition(OM, Fwd_GETX, OMF) {
   transition(OM, Fwd_GETX, IM) {
     ee_sendDataExclusive;
+    forward_eviction_to_cpu;
     l_popForwardQueue;
   }
 
index ff574b5e2854703d724f6427a525c8b7c7629d1a..831a322af97df7576a67a034276d7b3bf1f86eb0 100644 (file)
@@ -131,7 +131,6 @@ structure (Sequencer, external = "yes") {
   void evictionCallback(Addr);
   void recordRequestType(SequencerRequestType);
   bool checkResourceAvailable(CacheResourceType, Addr);
-  void invalidateSC(Addr);
 }
 
 structure (GPUCoalescer, external = "yes") {
@@ -244,7 +243,7 @@ structure (TimerTable, inport="yes", external = "yes") {
   bool isSet(Addr);
 }
 
-structure (Prefetcher, external = "yes") {
+structure (RubyPrefetcher, external = "yes") {
     void observeMiss(Addr, RubyRequestType);
     void observePfHit(Addr);
     void observePfMiss(Addr);
diff --git a/src/mem/ruby/structures/Prefetcher.cc b/src/mem/ruby/structures/Prefetcher.cc
deleted file mode 100644 (file)
index 0602115..0000000
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * Copyright (c) 2020 ARM Limited
- * All rights reserved
- *
- * The license below extends only to copyright in the software and shall
- * not be construed as granting a license to any other intellectual
- * property including but not limited to intellectual property relating
- * to a hardware implementation of the functionality of the software
- * licensed hereunder.  You may use the software subject to the license
- * terms below provided that you ensure that this notice is replicated
- * unmodified and in its entirety in all distributions of the software,
- * modified or unmodified, in source code or in binary form.
- *
- * Copyright (c) 1999-2012 Mark D. Hill and David A. Wood
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "mem/ruby/structures/Prefetcher.hh"
-
-#include "base/bitfield.hh"
-#include "debug/RubyPrefetcher.hh"
-#include "mem/ruby/slicc_interface/RubySlicc_ComponentMapping.hh"
-#include "mem/ruby/system/RubySystem.hh"
-
-RubyPrefetcher*
-PrefetcherParams::create()
-{
-    return new RubyPrefetcher(this);
-}
-
-RubyPrefetcher::RubyPrefetcher(const Params *p)
-    : SimObject(p), m_num_streams(p->num_streams),
-    m_array(p->num_streams), m_train_misses(p->train_misses),
-    m_num_startup_pfs(p->num_startup_pfs), m_num_unit_filters(p->unit_filter),
-    m_num_nonunit_filters(p->nonunit_filter),
-    m_unit_filter(p->unit_filter, 0),
-    m_negative_filter(p->unit_filter, 0),
-    m_nonunit_filter(p->nonunit_filter, 0),
-    m_prefetch_cross_pages(p->cross_page),
-    m_page_shift(p->sys->getPageShift())
-{
-    assert(m_num_streams > 0);
-    assert(m_num_startup_pfs <= MAX_PF_INFLIGHT);
-
-    // create +1 stride filter
-    m_unit_filter_index = 0;
-    m_unit_filter_hit = new uint32_t[m_num_unit_filters];
-    for (uint32_t i =0; i < m_num_unit_filters; i++) {
-        m_unit_filter_hit[i] = 0;
-    }
-
-    // create -1 stride filter
-    m_negative_filter_index = 0;
-    m_negative_filter_hit = new uint32_t[m_num_unit_filters];
-    for (int i =0; i < m_num_unit_filters; i++) {
-        m_negative_filter_hit[i] = 0;
-    }
-
-    // create nonunit stride filter
-    m_nonunit_index = 0;
-    m_nonunit_stride = new int[m_num_nonunit_filters];
-    m_nonunit_hit    = new uint32_t[m_num_nonunit_filters];
-    for (int i =0; i < m_num_nonunit_filters; i++) {
-        m_nonunit_stride[i] = 0;
-        m_nonunit_hit[i]    = 0;
-    }
-}
-
-RubyPrefetcher::~RubyPrefetcher()
-{
-    delete m_unit_filter_hit;
-    delete m_negative_filter_hit;
-    delete m_nonunit_stride;
-    delete m_nonunit_hit;
-}
-
-void
-RubyPrefetcher::regStats()
-{
-    SimObject::regStats();
-
-    numMissObserved
-        .name(name() + ".miss_observed")
-        .desc("number of misses observed")
-        ;
-
-    numAllocatedStreams
-        .name(name() + ".allocated_streams")
-        .desc("number of streams allocated for prefetching")
-        ;
-
-    numPrefetchRequested
-        .name(name() + ".prefetches_requested")
-        .desc("number of prefetch requests made")
-        ;
-
-    numHits
-        .name(name() + ".hits")
-        .desc("number of prefetched blocks accessed (for the first time)")
-        ;
-
-    numPartialHits
-        .name(name() + ".partial_hits")
-        .desc("number of misses observed for a block being prefetched")
-        ;
-
-    numPagesCrossed
-        .name(name() + ".pages_crossed")
-        .desc("number of prefetches across pages")
-        ;
-
-    numMissedPrefetchedBlocks
-        .name(name() + ".misses_on_prefetched_blocks")
-        .desc("number of misses for blocks that were prefetched, yet missed")
-        ;
-}
-
-void
-RubyPrefetcher::observeMiss(Addr address, const RubyRequestType& type)
-{
-    DPRINTF(RubyPrefetcher, "Observed miss for %#x\n", address);
-    Addr line_addr = makeLineAddress(address);
-    numMissObserved++;
-
-    // check to see if we have already issued a prefetch for this block
-    uint32_t index = 0;
-    PrefetchEntry *pfEntry = getPrefetchEntry(line_addr, index);
-    if (pfEntry != NULL) {
-        if (pfEntry->requestIssued[index]) {
-            if (pfEntry->requestCompleted[index]) {
-                // We prefetched too early and now the prefetch block no
-                // longer exists in the cache
-                numMissedPrefetchedBlocks++;
-                return;
-            } else {
-                // The controller has issued the prefetch request,
-                // but the request for the block arrived earlier.
-                numPartialHits++;
-                observePfMiss(line_addr);
-                return;
-            }
-        } else {
-            // The request is still in the prefetch queue of the controller.
-            // Or was evicted because of other requests.
-            return;
-        }
-    }
-
-    // check to see if this address is in the unit stride filter
-    bool alloc = false;
-    bool hit = accessUnitFilter(m_unit_filter, m_unit_filter_hit,
-                                m_unit_filter_index, line_addr, 1, alloc);
-    if (alloc) {
-        // allocate a new prefetch stream
-        initializeStream(line_addr, 1, getLRUindex(), type);
-    }
-    if (hit) {
-        DPRINTF(RubyPrefetcher, "  *** hit in unit stride buffer\n");
-        return;
-    }
-
-    hit = accessUnitFilter(m_negative_filter, m_negative_filter_hit,
-        m_negative_filter_index, line_addr, -1, alloc);
-    if (alloc) {
-        // allocate a new prefetch stream
-        initializeStream(line_addr, -1, getLRUindex(), type);
-    }
-    if (hit) {
-        DPRINTF(RubyPrefetcher, "  *** hit in unit negative unit buffer\n");
-        return;
-    }
-
-    // check to see if this address is in the non-unit stride filter
-    int stride = 0;  // NULL value
-    hit = accessNonunitFilter(address, &stride, alloc);
-    if (alloc) {
-        assert(stride != 0);  // ensure non-zero stride prefetches
-        initializeStream(line_addr, stride, getLRUindex(), type);
-    }
-    if (hit) {
-        DPRINTF(RubyPrefetcher, "  *** hit in non-unit stride buffer\n");
-        return;
-    }
-}
-
-void
-RubyPrefetcher::observePfMiss(Addr address)
-{
-    numPartialHits++;
-    DPRINTF(RubyPrefetcher, "Observed partial hit for %#x\n", address);
-    issueNextPrefetch(address, NULL);
-}
-
-void
-RubyPrefetcher::observePfHit(Addr address)
-{
-    numHits++;
-    DPRINTF(RubyPrefetcher, "Observed hit for %#x\n", address);
-    issueNextPrefetch(address, NULL);
-}
-
-void
-RubyPrefetcher::issueNextPrefetch(Addr address, PrefetchEntry *stream)
-{
-    // get our corresponding stream fetcher
-    if (stream == NULL) {
-        uint32_t index = 0;
-        stream = getPrefetchEntry(address, index);
-    }
-
-    // if (for some reason), this stream is unallocated, return.
-    if (stream == NULL) {
-        DPRINTF(RubyPrefetcher, "Unallocated stream, returning\n");
-        return;
-    }
-
-    // extend this prefetching stream by 1 (or more)
-    Addr page_addr = pageAddress(stream->m_address);
-    Addr line_addr = makeNextStrideAddress(stream->m_address,
-                                         stream->m_stride);
-
-    // possibly stop prefetching at page boundaries
-    if (page_addr != pageAddress(line_addr)) {
-        if (!m_prefetch_cross_pages) {
-            // Deallocate the stream since we are not prefetching
-            // across page boundries
-            stream->m_is_valid = false;
-            return;
-        }
-        numPagesCrossed++;
-    }
-
-    // launch next prefetch
-    numPrefetchRequested++;
-    stream->m_address = line_addr;
-    stream->m_use_time = m_controller->curCycle();
-    DPRINTF(RubyPrefetcher, "Requesting prefetch for %#x\n", line_addr);
-    m_controller->enqueuePrefetch(line_addr, stream->m_type);
-}
-
-uint32_t
-RubyPrefetcher::getLRUindex(void)
-{
-    uint32_t lru_index = 0;
-    Cycles lru_access = m_array[lru_index].m_use_time;
-
-    for (uint32_t i = 0; i < m_num_streams; i++) {
-        if (!m_array[i].m_is_valid) {
-            return i;
-        }
-        if (m_array[i].m_use_time < lru_access) {
-            lru_access = m_array[i].m_use_time;
-            lru_index = i;
-        }
-    }
-
-    return lru_index;
-}
-
-void
-RubyPrefetcher::clearNonunitEntry(uint32_t index)
-{
-    m_nonunit_filter[index] = 0;
-    m_nonunit_stride[index] = 0;
-    m_nonunit_hit[index]    = 0;
-}
-
-void
-RubyPrefetcher::initializeStream(Addr address, int stride,
-     uint32_t index, const RubyRequestType& type)
-{
-    numAllocatedStreams++;
-
-    // initialize the stream prefetcher
-    PrefetchEntry *mystream = &(m_array[index]);
-    mystream->m_address = makeLineAddress(address);
-    mystream->m_stride = stride;
-    mystream->m_use_time = m_controller->curCycle();
-    mystream->m_is_valid = true;
-    mystream->m_type = type;
-
-    // create a number of initial prefetches for this stream
-    Addr page_addr = pageAddress(mystream->m_address);
-    Addr line_addr = makeLineAddress(mystream->m_address);
-
-    // insert a number of prefetches into the prefetch table
-    for (int k = 0; k < m_num_startup_pfs; k++) {
-        line_addr = makeNextStrideAddress(line_addr, stride);
-        // possibly stop prefetching at page boundaries
-        if (page_addr != pageAddress(line_addr)) {
-            if (!m_prefetch_cross_pages) {
-                // deallocate this stream prefetcher
-                mystream->m_is_valid = false;
-                return;
-            }
-            numPagesCrossed++;
-        }
-
-        // launch prefetch
-        numPrefetchRequested++;
-        DPRINTF(RubyPrefetcher, "Requesting prefetch for %#x\n", line_addr);
-        m_controller->enqueuePrefetch(line_addr, m_array[index].m_type);
-    }
-
-    // update the address to be the last address prefetched
-    mystream->m_address = line_addr;
-}
-
-PrefetchEntry *
-RubyPrefetcher::getPrefetchEntry(Addr address, uint32_t &index)
-{
-    // search all streams for a match
-    for (int i = 0; i < m_num_streams; i++) {
-        // search all the outstanding prefetches for this stream
-        if (m_array[i].m_is_valid) {
-            for (int j = 0; j < m_num_startup_pfs; j++) {
-                if (makeNextStrideAddress(m_array[i].m_address,
-                    -(m_array[i].m_stride*j)) == address) {
-                    return &(m_array[i]);
-                }
-            }
-        }
-    }
-    return NULL;
-}
-
-bool
-RubyPrefetcher::accessUnitFilter(std::vector<Addr>& filter_table,
-    uint32_t *filter_hit, uint32_t &index, Addr address,
-    int stride, bool &alloc)
-{
-    //reset the alloc flag
-    alloc = false;
-
-    Addr line_addr = makeLineAddress(address);
-    for (int i = 0; i < m_num_unit_filters; i++) {
-        if (filter_table[i] == line_addr) {
-            filter_table[i] = makeNextStrideAddress(filter_table[i], stride);
-            filter_hit[i]++;
-            if (filter_hit[i] >= m_train_misses) {
-                alloc = true;
-            }
-            return true;
-        }
-    }
-
-    // enter this address in the table
-    int local_index = index;
-    filter_table[local_index] = makeNextStrideAddress(line_addr, stride);
-    filter_hit[local_index] = 0;
-    local_index = local_index + 1;
-    if (local_index >= m_num_unit_filters) {
-        local_index = 0;
-    }
-
-    index = local_index;
-    return false;
-}
-
-bool
-RubyPrefetcher::accessNonunitFilter(Addr address, int *stride,
-    bool &alloc)
-{
-    //reset the alloc flag
-    alloc = false;
-
-    /// look for non-unit strides based on a (user-defined) page size
-    Addr page_addr = pageAddress(address);
-    Addr line_addr = makeLineAddress(address);
-
-    for (uint32_t i = 0; i < m_num_nonunit_filters; i++) {
-        if (pageAddress(m_nonunit_filter[i]) == page_addr) {
-            // hit in the non-unit filter
-            // compute the actual stride (for this reference)
-            int delta = line_addr - m_nonunit_filter[i];
-
-            if (delta != 0) {
-                // no zero stride prefetches
-                // check that the stride matches (for the last N times)
-                if (delta == m_nonunit_stride[i]) {
-                    // -> stride hit
-                    // increment count (if > 2) allocate stream
-                    m_nonunit_hit[i]++;
-                    if (m_nonunit_hit[i] > m_train_misses) {
-                        // This stride HAS to be the multiplicative constant of
-                        // dataBlockBytes (bc makeNextStrideAddress is
-                        // calculated based on this multiplicative constant!)
-                        *stride = m_nonunit_stride[i] /
-                                    RubySystem::getBlockSizeBytes();
-
-                        // clear this filter entry
-                        clearNonunitEntry(i);
-                        alloc = true;
-                    }
-                } else {
-                    // delta didn't match ... reset m_nonunit_hit count for
-                    // this entry
-                    m_nonunit_hit[i] = 0;
-                }
-
-                // update the last address seen & the stride
-                m_nonunit_stride[i] = delta;
-                m_nonunit_filter[i] = line_addr;
-                return true;
-            } else {
-                return false;
-            }
-        }
-    }
-
-    // not found: enter this address in the table
-    m_nonunit_filter[m_nonunit_index] = line_addr;
-    m_nonunit_stride[m_nonunit_index] = 0;
-    m_nonunit_hit[m_nonunit_index]    = 0;
-
-    m_nonunit_index = m_nonunit_index + 1;
-    if (m_nonunit_index >= m_num_nonunit_filters) {
-        m_nonunit_index = 0;
-    }
-    return false;
-}
-
-void
-RubyPrefetcher::print(std::ostream& out) const
-{
-    out << name() << " Prefetcher State\n";
-    // print out unit filter
-    out << "unit table:\n";
-    for (int i = 0; i < m_num_unit_filters; i++) {
-        out << m_unit_filter[i] << std::endl;
-    }
-
-    out << "negative table:\n";
-    for (int i = 0; i < m_num_unit_filters; i++) {
-        out << m_negative_filter[i] << std::endl;
-    }
-
-    // print out non-unit stride filter
-    out << "non-unit table:\n";
-    for (int i = 0; i < m_num_nonunit_filters; i++) {
-        out << m_nonunit_filter[i] << " "
-            << m_nonunit_stride[i] << " "
-            << m_nonunit_hit[i] << std::endl;
-    }
-
-    // print out allocated stream buffers
-    out << "streams:\n";
-    for (int i = 0; i < m_num_streams; i++) {
-        out << m_array[i].m_address << " "
-            << m_array[i].m_stride << " "
-            << m_array[i].m_is_valid << " "
-            << m_array[i].m_use_time << std::endl;
-    }
-}
-
-Addr
-RubyPrefetcher::pageAddress(Addr addr) const
-{
-    return mbits<Addr>(addr, 63, m_page_shift);
-}
diff --git a/src/mem/ruby/structures/Prefetcher.hh b/src/mem/ruby/structures/Prefetcher.hh
deleted file mode 100644 (file)
index 4d2513f..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (c) 2020 ARM Limited
- * All rights reserved
- *
- * The license below extends only to copyright in the software and shall
- * not be construed as granting a license to any other intellectual
- * property including but not limited to intellectual property relating
- * to a hardware implementation of the functionality of the software
- * licensed hereunder.  You may use the software subject to the license
- * terms below provided that you ensure that this notice is replicated
- * unmodified and in its entirety in all distributions of the software,
- * modified or unmodified, in source code or in binary form.
- *
- * Copyright (c) 1999-2012 Mark D. Hill and David A. Wood
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __MEM_RUBY_STRUCTURES_PREFETCHER_HH__
-#define __MEM_RUBY_STRUCTURES_PREFETCHER_HH__
-
-// Implements Power 4 like prefetching
-
-#include <bitset>
-
-#include "base/statistics.hh"
-#include "mem/ruby/common/Address.hh"
-#include "mem/ruby/network/MessageBuffer.hh"
-#include "mem/ruby/slicc_interface/AbstractController.hh"
-#include "mem/ruby/slicc_interface/RubyRequest.hh"
-#include "mem/ruby/system/RubySystem.hh"
-#include "params/Prefetcher.hh"
-#include "sim/sim_object.hh"
-#include "sim/system.hh"
-
-#define MAX_PF_INFLIGHT 8
-
-class PrefetchEntry
-{
-    public:
-        /// constructor
-        PrefetchEntry()
-        {
-            // default: 1 cache-line stride
-            m_stride   = (1 << RubySystem::getBlockSizeBits());
-            m_use_time = Cycles(0);
-            m_is_valid = false;
-        }
-
-        //! The base address for the stream prefetch
-        Addr m_address;
-
-        //! stride distance to get next address from
-        int m_stride;
-
-        //! the last time that any prefetched request was used
-        Cycles m_use_time;
-
-        //! valid bit for each stream
-        bool m_is_valid;
-
-        //! L1D prefetches loads and stores
-        RubyRequestType m_type;
-
-        //! Bitset for tracking prefetches for which addresses have been
-        //! issued, which ones have completed.
-        std::bitset<MAX_PF_INFLIGHT> requestIssued;
-        std::bitset<MAX_PF_INFLIGHT> requestCompleted;
-};
-
-class RubyPrefetcher : public SimObject
-{
-    public:
-        typedef PrefetcherParams Params;
-        RubyPrefetcher(const Params *p);
-        ~RubyPrefetcher();
-
-        void issueNextPrefetch(Addr address, PrefetchEntry *stream);
-        /**
-         * Implement the prefetch hit(miss) callback interface.
-         * These functions are called by the cache when it hits(misses)
-         * on a line with the line's prefetch bit set. If this address
-         * hits in m_array we will continue prefetching the stream.
-         */
-        void observePfHit(Addr address);
-        void observePfMiss(Addr address);
-
-        /**
-         * Observe a memory miss from the cache.
-         *
-         * @param address   The physical address that missed out of the cache.
-         */
-        void observeMiss(Addr address, const RubyRequestType& type);
-
-        /**
-         * Print out some statistics
-         */
-        void print(std::ostream& out) const;
-        void setController(AbstractController *_ctrl)
-        { m_controller = _ctrl; }
-
-        void regStats();
-
-    private:
-        /**
-         * Returns an unused stream buffer (or if all are used, returns the
-         * least recently used (accessed) stream buffer).
-         * @return  The index of the least recently used stream buffer.
-         */
-        uint32_t getLRUindex(void);
-
-        //! clear a non-unit stride prefetcher entry
-        void clearNonunitEntry(uint32_t index);
-
-        //! allocate a new stream buffer at a specific index
-        void initializeStream(Addr address, int stride,
-            uint32_t index, const RubyRequestType& type);
-
-        //! get pointer to the matching stream entry, returns NULL if not found
-        //! index holds the multiple of the stride this address is.
-        PrefetchEntry* getPrefetchEntry(Addr address,
-            uint32_t &index);
-
-        /// access a unit stride filter to determine if there is a hit
-        bool accessUnitFilter(std::vector<Addr>& filter_table,
-            uint32_t *hit_table, uint32_t &index, Addr address,
-            int stride, bool &alloc);
-
-        /// access a unit stride filter to determine if there is a hit
-        bool accessNonunitFilter(Addr address, int *stride,
-            bool &alloc);
-
-        /// determine the page aligned address
-        Addr pageAddress(Addr addr) const;
-
-        //! number of prefetch streams available
-        uint32_t m_num_streams;
-        //! an array of the active prefetch streams
-        std::vector<PrefetchEntry> m_array;
-
-        //! number of misses I must see before allocating a stream
-        uint32_t m_train_misses;
-        //! number of initial prefetches to startup a stream
-        uint32_t m_num_startup_pfs;
-        //! number of stride filters
-        uint32_t m_num_unit_filters;
-        //! number of non-stride filters
-        uint32_t m_num_nonunit_filters;
-
-        /// a unit stride filter array: helps reduce BW requirement of
-        /// prefetching
-        std::vector<Addr> m_unit_filter;
-        /// a round robin pointer into the unit filter group
-        uint32_t m_unit_filter_index;
-        //! An array used to count the of times particular filter entries
-        //! have been hit
-        uint32_t *m_unit_filter_hit;
-
-        //! a negative unit stride filter array: helps reduce BW requirement
-        //! of prefetching
-        std::vector<Addr> m_negative_filter;
-        /// a round robin pointer into the negative filter group
-        uint32_t m_negative_filter_index;
-        /// An array used to count the of times particular filter entries
-        /// have been hit
-        uint32_t *m_negative_filter_hit;
-
-        /// a non-unit stride filter array: helps reduce BW requirement of
-        /// prefetching
-        std::vector<Addr> m_nonunit_filter;
-        /// An array of strides (in # of cache lines) for the filter entries
-        int *m_nonunit_stride;
-        /// An array used to count the of times particular filter entries
-        /// have been hit
-        uint32_t *m_nonunit_hit;
-        /// a round robin pointer into the unit filter group
-        uint32_t m_nonunit_index;
-
-        /// Used for allowing prefetches across pages.
-        bool m_prefetch_cross_pages;
-
-        AbstractController *m_controller;
-
-        const Addr m_page_shift;
-
-        //! Count of accesses to the prefetcher
-        Stats::Scalar numMissObserved;
-        //! Count of prefetch streams allocated
-        Stats::Scalar numAllocatedStreams;
-        //! Count of prefetch requests made
-        Stats::Scalar numPrefetchRequested;
-        //! Count of successful prefetches
-        Stats::Scalar numHits;
-        //! Count of partial successful prefetches
-        Stats::Scalar numPartialHits;
-        //! Count of pages crossed
-        Stats::Scalar numPagesCrossed;
-        //! Count of misses incurred for blocks that were prefetched
-        Stats::Scalar numMissedPrefetchedBlocks;
-};
-
-#endif // __MEM_RUBY_STRUCTURES_PREFETCHER_HH__
diff --git a/src/mem/ruby/structures/RubyPrefetcher.cc b/src/mem/ruby/structures/RubyPrefetcher.cc
new file mode 100644 (file)
index 0000000..8646b99
--- /dev/null
@@ -0,0 +1,483 @@
+/*
+ * Copyright (c) 2020 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Copyright (c) 1999-2012 Mark D. Hill and David A. Wood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "mem/ruby/structures/RubyPrefetcher.hh"
+
+#include "base/bitfield.hh"
+#include "debug/RubyPrefetcher.hh"
+#include "mem/ruby/slicc_interface/RubySlicc_ComponentMapping.hh"
+#include "mem/ruby/system/RubySystem.hh"
+
+RubyPrefetcher*
+RubyPrefetcherParams::create()
+{
+    return new RubyPrefetcher(this);
+}
+
+RubyPrefetcher::RubyPrefetcher(const Params *p)
+    : SimObject(p), m_num_streams(p->num_streams),
+    m_array(p->num_streams), m_train_misses(p->train_misses),
+    m_num_startup_pfs(p->num_startup_pfs), m_num_unit_filters(p->unit_filter),
+    m_num_nonunit_filters(p->nonunit_filter),
+    m_unit_filter(p->unit_filter, 0),
+    m_negative_filter(p->unit_filter, 0),
+    m_nonunit_filter(p->nonunit_filter, 0),
+    m_prefetch_cross_pages(p->cross_page),
+    m_page_shift(p->sys->getPageShift())
+{
+    assert(m_num_streams > 0);
+    assert(m_num_startup_pfs <= MAX_PF_INFLIGHT);
+
+    // create +1 stride filter
+    m_unit_filter_index = 0;
+    m_unit_filter_hit = new uint32_t[m_num_unit_filters];
+    for (uint32_t i =0; i < m_num_unit_filters; i++) {
+        m_unit_filter_hit[i] = 0;
+    }
+
+    // create -1 stride filter
+    m_negative_filter_index = 0;
+    m_negative_filter_hit = new uint32_t[m_num_unit_filters];
+    for (int i =0; i < m_num_unit_filters; i++) {
+        m_negative_filter_hit[i] = 0;
+    }
+
+    // create nonunit stride filter
+    m_nonunit_index = 0;
+    m_nonunit_stride = new int[m_num_nonunit_filters];
+    m_nonunit_hit    = new uint32_t[m_num_nonunit_filters];
+    for (int i =0; i < m_num_nonunit_filters; i++) {
+        m_nonunit_stride[i] = 0;
+        m_nonunit_hit[i]    = 0;
+    }
+}
+
+RubyPrefetcher::~RubyPrefetcher()
+{
+    delete m_unit_filter_hit;
+    delete m_negative_filter_hit;
+    delete m_nonunit_stride;
+    delete m_nonunit_hit;
+}
+
+void
+RubyPrefetcher::regStats()
+{
+    SimObject::regStats();
+
+    numMissObserved
+        .name(name() + ".miss_observed")
+        .desc("number of misses observed")
+        ;
+
+    numAllocatedStreams
+        .name(name() + ".allocated_streams")
+        .desc("number of streams allocated for prefetching")
+        ;
+
+    numPrefetchRequested
+        .name(name() + ".prefetches_requested")
+        .desc("number of prefetch requests made")
+        ;
+
+    numHits
+        .name(name() + ".hits")
+        .desc("number of prefetched blocks accessed (for the first time)")
+        ;
+
+    numPartialHits
+        .name(name() + ".partial_hits")
+        .desc("number of misses observed for a block being prefetched")
+        ;
+
+    numPagesCrossed
+        .name(name() + ".pages_crossed")
+        .desc("number of prefetches across pages")
+        ;
+
+    numMissedPrefetchedBlocks
+        .name(name() + ".misses_on_prefetched_blocks")
+        .desc("number of misses for blocks that were prefetched, yet missed")
+        ;
+}
+
+void
+RubyPrefetcher::observeMiss(Addr address, const RubyRequestType& type)
+{
+    DPRINTF(RubyPrefetcher, "Observed miss for %#x\n", address);
+    Addr line_addr = makeLineAddress(address);
+    numMissObserved++;
+
+    // check to see if we have already issued a prefetch for this block
+    uint32_t index = 0;
+    PrefetchEntry *pfEntry = getPrefetchEntry(line_addr, index);
+    if (pfEntry != NULL) {
+        if (pfEntry->requestIssued[index]) {
+            if (pfEntry->requestCompleted[index]) {
+                // We prefetched too early and now the prefetch block no
+                // longer exists in the cache
+                numMissedPrefetchedBlocks++;
+                return;
+            } else {
+                // The controller has issued the prefetch request,
+                // but the request for the block arrived earlier.
+                numPartialHits++;
+                observePfMiss(line_addr);
+                return;
+            }
+        } else {
+            // The request is still in the prefetch queue of the controller.
+            // Or was evicted because of other requests.
+            return;
+        }
+    }
+
+    // check to see if this address is in the unit stride filter
+    bool alloc = false;
+    bool hit = accessUnitFilter(m_unit_filter, m_unit_filter_hit,
+                                m_unit_filter_index, line_addr, 1, alloc);
+    if (alloc) {
+        // allocate a new prefetch stream
+        initializeStream(line_addr, 1, getLRUindex(), type);
+    }
+    if (hit) {
+        DPRINTF(RubyPrefetcher, "  *** hit in unit stride buffer\n");
+        return;
+    }
+
+    hit = accessUnitFilter(m_negative_filter, m_negative_filter_hit,
+        m_negative_filter_index, line_addr, -1, alloc);
+    if (alloc) {
+        // allocate a new prefetch stream
+        initializeStream(line_addr, -1, getLRUindex(), type);
+    }
+    if (hit) {
+        DPRINTF(RubyPrefetcher, "  *** hit in unit negative unit buffer\n");
+        return;
+    }
+
+    // check to see if this address is in the non-unit stride filter
+    int stride = 0;  // NULL value
+    hit = accessNonunitFilter(address, &stride, alloc);
+    if (alloc) {
+        assert(stride != 0);  // ensure non-zero stride prefetches
+        initializeStream(line_addr, stride, getLRUindex(), type);
+    }
+    if (hit) {
+        DPRINTF(RubyPrefetcher, "  *** hit in non-unit stride buffer\n");
+        return;
+    }
+}
+
+void
+RubyPrefetcher::observePfMiss(Addr address)
+{
+    numPartialHits++;
+    DPRINTF(RubyPrefetcher, "Observed partial hit for %#x\n", address);
+    issueNextPrefetch(address, NULL);
+}
+
+void
+RubyPrefetcher::observePfHit(Addr address)
+{
+    numHits++;
+    DPRINTF(RubyPrefetcher, "Observed hit for %#x\n", address);
+    issueNextPrefetch(address, NULL);
+}
+
+void
+RubyPrefetcher::issueNextPrefetch(Addr address, PrefetchEntry *stream)
+{
+    // get our corresponding stream fetcher
+    if (stream == NULL) {
+        uint32_t index = 0;
+        stream = getPrefetchEntry(address, index);
+    }
+
+    // if (for some reason), this stream is unallocated, return.
+    if (stream == NULL) {
+        DPRINTF(RubyPrefetcher, "Unallocated stream, returning\n");
+        return;
+    }
+
+    // extend this prefetching stream by 1 (or more)
+    Addr page_addr = pageAddress(stream->m_address);
+    Addr line_addr = makeNextStrideAddress(stream->m_address,
+                                         stream->m_stride);
+
+    // possibly stop prefetching at page boundaries
+    if (page_addr != pageAddress(line_addr)) {
+        if (!m_prefetch_cross_pages) {
+            // Deallocate the stream since we are not prefetching
+            // across page boundries
+            stream->m_is_valid = false;
+            return;
+        }
+        numPagesCrossed++;
+    }
+
+    // launch next prefetch
+    numPrefetchRequested++;
+    stream->m_address = line_addr;
+    stream->m_use_time = m_controller->curCycle();
+    DPRINTF(RubyPrefetcher, "Requesting prefetch for %#x\n", line_addr);
+    m_controller->enqueuePrefetch(line_addr, stream->m_type);
+}
+
+uint32_t
+RubyPrefetcher::getLRUindex(void)
+{
+    uint32_t lru_index = 0;
+    Cycles lru_access = m_array[lru_index].m_use_time;
+
+    for (uint32_t i = 0; i < m_num_streams; i++) {
+        if (!m_array[i].m_is_valid) {
+            return i;
+        }
+        if (m_array[i].m_use_time < lru_access) {
+            lru_access = m_array[i].m_use_time;
+            lru_index = i;
+        }
+    }
+
+    return lru_index;
+}
+
+void
+RubyPrefetcher::clearNonunitEntry(uint32_t index)
+{
+    m_nonunit_filter[index] = 0;
+    m_nonunit_stride[index] = 0;
+    m_nonunit_hit[index]    = 0;
+}
+
+void
+RubyPrefetcher::initializeStream(Addr address, int stride,
+     uint32_t index, const RubyRequestType& type)
+{
+    numAllocatedStreams++;
+
+    // initialize the stream prefetcher
+    PrefetchEntry *mystream = &(m_array[index]);
+    mystream->m_address = makeLineAddress(address);
+    mystream->m_stride = stride;
+    mystream->m_use_time = m_controller->curCycle();
+    mystream->m_is_valid = true;
+    mystream->m_type = type;
+
+    // create a number of initial prefetches for this stream
+    Addr page_addr = pageAddress(mystream->m_address);
+    Addr line_addr = makeLineAddress(mystream->m_address);
+
+    // insert a number of prefetches into the prefetch table
+    for (int k = 0; k < m_num_startup_pfs; k++) {
+        line_addr = makeNextStrideAddress(line_addr, stride);
+        // possibly stop prefetching at page boundaries
+        if (page_addr != pageAddress(line_addr)) {
+            if (!m_prefetch_cross_pages) {
+                // deallocate this stream prefetcher
+                mystream->m_is_valid = false;
+                return;
+            }
+            numPagesCrossed++;
+        }
+
+        // launch prefetch
+        numPrefetchRequested++;
+        DPRINTF(RubyPrefetcher, "Requesting prefetch for %#x\n", line_addr);
+        m_controller->enqueuePrefetch(line_addr, m_array[index].m_type);
+    }
+
+    // update the address to be the last address prefetched
+    mystream->m_address = line_addr;
+}
+
+PrefetchEntry *
+RubyPrefetcher::getPrefetchEntry(Addr address, uint32_t &index)
+{
+    // search all streams for a match
+    for (int i = 0; i < m_num_streams; i++) {
+        // search all the outstanding prefetches for this stream
+        if (m_array[i].m_is_valid) {
+            for (int j = 0; j < m_num_startup_pfs; j++) {
+                if (makeNextStrideAddress(m_array[i].m_address,
+                    -(m_array[i].m_stride*j)) == address) {
+                    return &(m_array[i]);
+                }
+            }
+        }
+    }
+    return NULL;
+}
+
+bool
+RubyPrefetcher::accessUnitFilter(std::vector<Addr>& filter_table,
+    uint32_t *filter_hit, uint32_t &index, Addr address,
+    int stride, bool &alloc)
+{
+    //reset the alloc flag
+    alloc = false;
+
+    Addr line_addr = makeLineAddress(address);
+    for (int i = 0; i < m_num_unit_filters; i++) {
+        if (filter_table[i] == line_addr) {
+            filter_table[i] = makeNextStrideAddress(filter_table[i], stride);
+            filter_hit[i]++;
+            if (filter_hit[i] >= m_train_misses) {
+                alloc = true;
+            }
+            return true;
+        }
+    }
+
+    // enter this address in the table
+    int local_index = index;
+    filter_table[local_index] = makeNextStrideAddress(line_addr, stride);
+    filter_hit[local_index] = 0;
+    local_index = local_index + 1;
+    if (local_index >= m_num_unit_filters) {
+        local_index = 0;
+    }
+
+    index = local_index;
+    return false;
+}
+
+bool
+RubyPrefetcher::accessNonunitFilter(Addr address, int *stride,
+    bool &alloc)
+{
+    //reset the alloc flag
+    alloc = false;
+
+    /// look for non-unit strides based on a (user-defined) page size
+    Addr page_addr = pageAddress(address);
+    Addr line_addr = makeLineAddress(address);
+
+    for (uint32_t i = 0; i < m_num_nonunit_filters; i++) {
+        if (pageAddress(m_nonunit_filter[i]) == page_addr) {
+            // hit in the non-unit filter
+            // compute the actual stride (for this reference)
+            int delta = line_addr - m_nonunit_filter[i];
+
+            if (delta != 0) {
+                // no zero stride prefetches
+                // check that the stride matches (for the last N times)
+                if (delta == m_nonunit_stride[i]) {
+                    // -> stride hit
+                    // increment count (if > 2) allocate stream
+                    m_nonunit_hit[i]++;
+                    if (m_nonunit_hit[i] > m_train_misses) {
+                        // This stride HAS to be the multiplicative constant of
+                        // dataBlockBytes (bc makeNextStrideAddress is
+                        // calculated based on this multiplicative constant!)
+                        *stride = m_nonunit_stride[i] /
+                                    RubySystem::getBlockSizeBytes();
+
+                        // clear this filter entry
+                        clearNonunitEntry(i);
+                        alloc = true;
+                    }
+                } else {
+                    // delta didn't match ... reset m_nonunit_hit count for
+                    // this entry
+                    m_nonunit_hit[i] = 0;
+                }
+
+                // update the last address seen & the stride
+                m_nonunit_stride[i] = delta;
+                m_nonunit_filter[i] = line_addr;
+                return true;
+            } else {
+                return false;
+            }
+        }
+    }
+
+    // not found: enter this address in the table
+    m_nonunit_filter[m_nonunit_index] = line_addr;
+    m_nonunit_stride[m_nonunit_index] = 0;
+    m_nonunit_hit[m_nonunit_index]    = 0;
+
+    m_nonunit_index = m_nonunit_index + 1;
+    if (m_nonunit_index >= m_num_nonunit_filters) {
+        m_nonunit_index = 0;
+    }
+    return false;
+}
+
+void
+RubyPrefetcher::print(std::ostream& out) const
+{
+    out << name() << " Prefetcher State\n";
+    // print out unit filter
+    out << "unit table:\n";
+    for (int i = 0; i < m_num_unit_filters; i++) {
+        out << m_unit_filter[i] << std::endl;
+    }
+
+    out << "negative table:\n";
+    for (int i = 0; i < m_num_unit_filters; i++) {
+        out << m_negative_filter[i] << std::endl;
+    }
+
+    // print out non-unit stride filter
+    out << "non-unit table:\n";
+    for (int i = 0; i < m_num_nonunit_filters; i++) {
+        out << m_nonunit_filter[i] << " "
+            << m_nonunit_stride[i] << " "
+            << m_nonunit_hit[i] << std::endl;
+    }
+
+    // print out allocated stream buffers
+    out << "streams:\n";
+    for (int i = 0; i < m_num_streams; i++) {
+        out << m_array[i].m_address << " "
+            << m_array[i].m_stride << " "
+            << m_array[i].m_is_valid << " "
+            << m_array[i].m_use_time << std::endl;
+    }
+}
+
+Addr
+RubyPrefetcher::pageAddress(Addr addr) const
+{
+    return mbits<Addr>(addr, 63, m_page_shift);
+}
diff --git a/src/mem/ruby/structures/RubyPrefetcher.hh b/src/mem/ruby/structures/RubyPrefetcher.hh
new file mode 100644 (file)
index 0000000..b691d3d
--- /dev/null
@@ -0,0 +1,224 @@
+/*
+ * Copyright (c) 2020 ARM Limited
+ * All rights reserved
+ *
+ * The license below extends only to copyright in the software and shall
+ * not be construed as granting a license to any other intellectual
+ * property including but not limited to intellectual property relating
+ * to a hardware implementation of the functionality of the software
+ * licensed hereunder.  You may use the software subject to the license
+ * terms below provided that you ensure that this notice is replicated
+ * unmodified and in its entirety in all distributions of the software,
+ * modified or unmodified, in source code or in binary form.
+ *
+ * Copyright (c) 1999-2012 Mark D. Hill and David A. Wood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __MEM_RUBY_STRUCTURES_PREFETCHER_HH__
+#define __MEM_RUBY_STRUCTURES_PREFETCHER_HH__
+
+// Implements Power 4 like prefetching
+
+#include <bitset>
+
+#include "base/statistics.hh"
+#include "mem/ruby/common/Address.hh"
+#include "mem/ruby/network/MessageBuffer.hh"
+#include "mem/ruby/slicc_interface/AbstractController.hh"
+#include "mem/ruby/slicc_interface/RubyRequest.hh"
+#include "mem/ruby/system/RubySystem.hh"
+#include "params/RubyPrefetcher.hh"
+#include "sim/sim_object.hh"
+#include "sim/system.hh"
+
+#define MAX_PF_INFLIGHT 8
+
+class PrefetchEntry
+{
+    public:
+        /// constructor
+        PrefetchEntry()
+        {
+            // default: 1 cache-line stride
+            m_stride   = (1 << RubySystem::getBlockSizeBits());
+            m_use_time = Cycles(0);
+            m_is_valid = false;
+        }
+
+        //! The base address for the stream prefetch
+        Addr m_address;
+
+        //! stride distance to get next address from
+        int m_stride;
+
+        //! the last time that any prefetched request was used
+        Cycles m_use_time;
+
+        //! valid bit for each stream
+        bool m_is_valid;
+
+        //! L1D prefetches loads and stores
+        RubyRequestType m_type;
+
+        //! Bitset for tracking prefetches for which addresses have been
+        //! issued, which ones have completed.
+        std::bitset<MAX_PF_INFLIGHT> requestIssued;
+        std::bitset<MAX_PF_INFLIGHT> requestCompleted;
+};
+
+class RubyPrefetcher : public SimObject
+{
+    public:
+        typedef RubyPrefetcherParams Params;
+        RubyPrefetcher(const Params *p);
+        ~RubyPrefetcher();
+
+        void issueNextPrefetch(Addr address, PrefetchEntry *stream);
+        /**
+         * Implement the prefetch hit(miss) callback interface.
+         * These functions are called by the cache when it hits(misses)
+         * on a line with the line's prefetch bit set. If this address
+         * hits in m_array we will continue prefetching the stream.
+         */
+        void observePfHit(Addr address);
+        void observePfMiss(Addr address);
+
+        /**
+         * Observe a memory miss from the cache.
+         *
+         * @param address   The physical address that missed out of the cache.
+         */
+        void observeMiss(Addr address, const RubyRequestType& type);
+
+        /**
+         * Print out some statistics
+         */
+        void print(std::ostream& out) const;
+        void setController(AbstractController *_ctrl)
+        { m_controller = _ctrl; }
+
+        void regStats();
+
+    private:
+        /**
+         * Returns an unused stream buffer (or if all are used, returns the
+         * least recently used (accessed) stream buffer).
+         * @return  The index of the least recently used stream buffer.
+         */
+        uint32_t getLRUindex(void);
+
+        //! clear a non-unit stride prefetcher entry
+        void clearNonunitEntry(uint32_t index);
+
+        //! allocate a new stream buffer at a specific index
+        void initializeStream(Addr address, int stride,
+            uint32_t index, const RubyRequestType& type);
+
+        //! get pointer to the matching stream entry, returns NULL if not found
+        //! index holds the multiple of the stride this address is.
+        PrefetchEntry* getPrefetchEntry(Addr address,
+            uint32_t &index);
+
+        /// access a unit stride filter to determine if there is a hit
+        bool accessUnitFilter(std::vector<Addr>& filter_table,
+            uint32_t *hit_table, uint32_t &index, Addr address,
+            int stride, bool &alloc);
+
+        /// access a unit stride filter to determine if there is a hit
+        bool accessNonunitFilter(Addr address, int *stride,
+            bool &alloc);
+
+        /// determine the page aligned address
+        Addr pageAddress(Addr addr) const;
+
+        //! number of prefetch streams available
+        uint32_t m_num_streams;
+        //! an array of the active prefetch streams
+        std::vector<PrefetchEntry> m_array;
+
+        //! number of misses I must see before allocating a stream
+        uint32_t m_train_misses;
+        //! number of initial prefetches to startup a stream
+        uint32_t m_num_startup_pfs;
+        //! number of stride filters
+        uint32_t m_num_unit_filters;
+        //! number of non-stride filters
+        uint32_t m_num_nonunit_filters;
+
+        /// a unit stride filter array: helps reduce BW requirement of
+        /// prefetching
+        std::vector<Addr> m_unit_filter;
+        /// a round robin pointer into the unit filter group
+        uint32_t m_unit_filter_index;
+        //! An array used to count the of times particular filter entries
+        //! have been hit
+        uint32_t *m_unit_filter_hit;
+
+        //! a negative unit stride filter array: helps reduce BW requirement
+        //! of prefetching
+        std::vector<Addr> m_negative_filter;
+        /// a round robin pointer into the negative filter group
+        uint32_t m_negative_filter_index;
+        /// An array used to count the of times particular filter entries
+        /// have been hit
+        uint32_t *m_negative_filter_hit;
+
+        /// a non-unit stride filter array: helps reduce BW requirement of
+        /// prefetching
+        std::vector<Addr> m_nonunit_filter;
+        /// An array of strides (in # of cache lines) for the filter entries
+        int *m_nonunit_stride;
+        /// An array used to count the of times particular filter entries
+        /// have been hit
+        uint32_t *m_nonunit_hit;
+        /// a round robin pointer into the unit filter group
+        uint32_t m_nonunit_index;
+
+        /// Used for allowing prefetches across pages.
+        bool m_prefetch_cross_pages;
+
+        AbstractController *m_controller;
+
+        const Addr m_page_shift;
+
+        //! Count of accesses to the prefetcher
+        Stats::Scalar numMissObserved;
+        //! Count of prefetch streams allocated
+        Stats::Scalar numAllocatedStreams;
+        //! Count of prefetch requests made
+        Stats::Scalar numPrefetchRequested;
+        //! Count of successful prefetches
+        Stats::Scalar numHits;
+        //! Count of partial successful prefetches
+        Stats::Scalar numPartialHits;
+        //! Count of pages crossed
+        Stats::Scalar numPagesCrossed;
+        //! Count of misses incurred for blocks that were prefetched
+        Stats::Scalar numMissedPrefetchedBlocks;
+};
+
+#endif // __MEM_RUBY_STRUCTURES_PREFETCHER_HH__
index d762ba5308bbccff21900fd97a9f651e036f6661..38397c33426bb62eee26d806efd796cd321850d6 100644 (file)
@@ -42,10 +42,10 @@ from m5.proxy import *
 
 from m5.objects.System import System
 
-class Prefetcher(SimObject):
-    type = 'Prefetcher'
+class RubyPrefetcher(SimObject):
+    type = 'RubyPrefetcher'
     cxx_class = 'RubyPrefetcher'
-    cxx_header = "mem/ruby/structures/Prefetcher.hh"
+    cxx_header = "mem/ruby/structures/RubyPrefetcher.hh"
 
     num_streams = Param.UInt32(4,
         "Number of prefetch streams to be allocated")
@@ -58,3 +58,7 @@ class Prefetcher(SimObject):
     cross_page = Param.Bool(False, """True if prefetched address can be on a
             page different from the observed address""")
     sys = Param.System(Parent.any, "System this prefetcher belongs to")
+
+class Prefetcher(RubyPrefetcher):
+    """DEPRECATED"""
+    pass
index 9e2bde924ab901ca9af16e84cedda094ab2d5a95..0cf05598f8af3ea856ca3931ada39e2ff6bde7e8 100644 (file)
@@ -40,6 +40,6 @@ Source('DirectoryMemory.cc')
 Source('CacheMemory.cc')
 Source('WireBuffer.cc')
 Source('PersistentTable.cc')
-Source('Prefetcher.cc')
+Source('RubyPrefetcher.cc')
 Source('TimerTable.cc')
 Source('BankedArray.cc')
index c9da20656bd88d709519b2dc553e38feab0e4cf4..9fa47362bc1e28ef5d5ae92442f036164baec249 100644 (file)
@@ -330,7 +330,7 @@ RubySystem::unserialize(CheckpointIn &cp)
 
     UNSERIALIZE_SCALAR(cache_trace_file);
     UNSERIALIZE_SCALAR(cache_trace_size);
-    cache_trace_file = cp.cptDir + "/" + cache_trace_file;
+    cache_trace_file = cp.getCptDir() + "/" + cache_trace_file;
 
     readCompressedTrace(cache_trace_file, uncompressed_trace,
                         cache_trace_size);
index 0904ac63fc658f28b89d1000d9b96a3da195987b..8e3a1f84b65214900b4a39e7491933d1852dd31a 100644 (file)
@@ -61,7 +61,7 @@ python_class_map = {
                     "MemoryControl": "MemoryControl",
                     "MessageBuffer": "MessageBuffer",
                     "DMASequencer": "DMASequencer",
-                    "Prefetcher":"Prefetcher",
+                    "RubyPrefetcher":"RubyPrefetcher",
                     "Cycles":"Cycles",
                    }
 
@@ -458,6 +458,31 @@ void unset_tbe(${{self.TBEType.c_ident}}*& m_tbe_ptr);
         ident = self.ident
         c_ident = "%s_Controller" % self.ident
 
+        # Unfortunately, clang compilers will throw a "call to function ...
+        # that is neither visible in the template definition nor found by
+        # argument-dependent lookup" error if "mem/ruby/common/BoolVec.hh" is
+        # included after "base/cprintf.hh". This is because "base/cprintf.hh"
+        # utilizes a "<<" operator in "base/cprintf_formats.hh" that is
+        # defined in "mem/ruby/common/BoolVec.hh". While GCC compilers permit
+        # the operator definition after usage in this case, clang compilers do
+        # not.
+        #
+        # The reason for this verbose solution below is due to the gem5
+        # style-checker, which will complain if "mem/ruby/common/BoolVec.hh"
+        # is included above "base/cprintf.hh" in this file, despite it being
+        # necessary in this case. This is therefore a bit of a hack to keep
+        # both clang and our style-checker happy.
+        base_include = '''
+#include "base/compiler.hh"
+#include "base/cprintf.hh"
+
+'''
+
+        boolvec_include = '''
+#include "mem/ruby/common/BoolVec.hh"
+
+'''
+
         code('''
 /** \\file $c_ident.cc
  *
@@ -473,11 +498,11 @@ void unset_tbe(${{self.TBEType.c_ident}}*& m_tbe_ptr);
 #include <string>
 #include <typeinfo>
 
-#include "base/compiler.hh"
-#include "base/cprintf.hh"
-#include "mem/ruby/common/BoolVec.hh"
-
 ''')
+
+        code(boolvec_include)
+        code(base_include)
+
         for f in self.debug_flags:
             code('#include "debug/${{f}}.hh"')
         code('''
index 3d74315b02482d37d64e738690bab707c6c4f284..7112a41e7f095597bbd147fa98067448975c84b2 100644 (file)
@@ -94,7 +94,7 @@ class TokenSlavePort : public SlavePort
 
     std::deque<PacketPtr> respQueue;
 
-    void recvRespRetry();
+    void recvRespRetry() override;
 
   public:
     TokenSlavePort(const std::string& name, ClockedObject *owner,
index 64b7cb8118fe2ddee49d0832cd2f96a134ffa38b..047116ac781edf07aff4070e1b0d2a1c79038d0d 100644 (file)
@@ -25,6 +25,7 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 from __future__ import print_function
+from math import ceil
 import six
 if six.PY3:
     long = int
@@ -73,7 +74,7 @@ def fromSeconds(value):
     # convert the value from time to ticks
     value *= _m5.core.getClockFrequency()
 
-    int_value = int(round(value))
+    int_value = int(ceil(value))
     err = (value - int_value) / value
     if err > frequency_tolerance:
         warn("rounding error > tolerance\n    %f rounded to %d", value,
index 98a7a08dd2fcdc1d17ad622f620d272971b8ef01..c59f40a81189495e1430cd7f80bfd01f450590d3 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 ARM Limited
+# Copyright (c) 2016, 2020 ARM Limited
 # All rights reserved.
 #
 # The license below extends only to copyright in the software and shall
@@ -177,9 +177,16 @@ def printList(items, indent=4):
             line += item
             print(line)
 
-def readCommand(cmd, **kwargs):
-    """run the command cmd, read the results and return them
-    this is sorta like `cmd` in shell"""
+def readCommandWithReturn(cmd, **kwargs):
+    """
+    run the command cmd, read the results and return them
+    this is sorta like `cmd` in shell
+
+    :param cmd: command to run with Popen
+    :type cmd: string, list
+    :returns: pair consisting on Popen retcode and the command stdout
+    :rtype: (int, string)
+    """
     from subprocess import Popen, PIPE, STDOUT
 
     if isinstance(cmd, str):
@@ -196,10 +203,23 @@ def readCommand(cmd, **kwargs):
         subp = Popen(cmd, **kwargs)
     except Exception as e:
         if no_exception:
-            return exception
+            return -1, exception
         raise
 
-    return subp.communicate()[0].decode('utf-8')
+    output = subp.communicate()[0].decode('utf-8')
+    return subp.returncode, output
+
+def readCommand(cmd, **kwargs):
+    """
+    run the command cmd, read the results and return them
+    this is sorta like `cmd` in shell
+
+    :param cmd: command to run with Popen
+    :type cmd: string, list
+    :returns: command stdout
+    :rtype: string
+    """
+    return readCommandWithReturn(cmd, **kwargs)[1]
 
 def makeDir(path):
     """Make a directory if it doesn't exist.  If the path does exist,
index e6de3f321934903daed4593de8ec626513dad237..c66108d21b14e56b34b9b6fcf2295b08281b390a 100644 (file)
@@ -267,7 +267,7 @@ def dot_gen_colour(simNode, isPort = False):
     return dot_rgb_to_html(r, g, b)
 
 def dot_rgb_to_html(r, g, b):
-    return "#%.2x%.2x%.2x" % (r, g, b)
+    return "#%.2x%.2x%.2x" % (int(r), int(g), int(b))
 
 # We need to create all of the clock domains. We abuse the alpha channel to get
 # the correct domain colouring.
index a775c068e85acebb35479d5ab8beadc2918fda94..0d74923713aea5d5529bde218f4a5ebeac0e54b3 100644 (file)
@@ -65,6 +65,8 @@ class Drainable;
  * the world through Drainable::getState()) could be used to determine
  * if all objects have entered the Drained state, the protocol is
  * actually a bit more elaborate. See Drainable::drain() for details.
+ *
+ * @ingroup api_drain
  */
 enum class DrainState {
     Running,  /** Running normally */
@@ -113,11 +115,15 @@ class DrainManager
      *
      * @return true if all objects were drained successfully, false if
      * more simulation is needed.
+     *
+     * @ingroup api_drain
      */
     bool tryDrain();
 
     /**
      * Resume normal simulation in a Drained system.
+     *
+     * @ingroup api_drain
      */
     void resume();
 
@@ -131,18 +137,30 @@ class DrainManager
      * state since the state isn't stored in checkpoints. This method
      * performs state fixups on all Drainable objects and the
      * DrainManager itself.
+     *
+     * @ingroup api_drain
      */
     void preCheckpointRestore();
 
-    /** Check if the system is drained */
+    /**
+     * Check if the system is drained
+     *
+     * @ingroup api_drain
+     */
     bool isDrained() const { return _state == DrainState::Drained; }
 
-    /** Get the simulators global drain state */
+    /**
+     * Get the simulators global drain state
+     *
+     * @ingroup api_drain
+     */
     DrainState state() const { return _state; }
 
     /**
      * Notify the DrainManager that a Drainable object has finished
      * draining.
+     *
+     * @ingroup api_drain
      */
     void signalDrainDone();
 
@@ -246,11 +264,15 @@ class Drainable
      * @return DrainState::Drained if the object is drained at this
      * point in time, DrainState::Draining if it needs further
      * simulation.
+     *
+     * @ingroup api_drain
      */
     virtual DrainState drain() = 0;
 
     /**
      * Resume execution after a successful drain.
+     *
+     * @ingroup api_drain
      */
     virtual void drainResume() {};
 
@@ -261,6 +283,8 @@ class Drainable
      * into a state where it is ready to be drained. The method is
      * safe to call multiple times and there is no need to check that
      * draining has been requested before calling this method.
+     *
+     * @ingroup api_drain
      */
     void signalDrainDone() const {
         switch (_drainState) {
@@ -276,7 +300,11 @@ class Drainable
     }
 
   public:
-    /** Return the current drain state of an object. */
+    /**
+     * Return the current drain state of an object.
+     *
+     * @ingroup api_drain
+     */
     DrainState drainState() const { return _drainState; }
 
     /**
@@ -290,6 +318,8 @@ class Drainable
      *
      * This method is only called in the child of the fork. The call
      * takes place in a drained system.
+     *
+     * @ingroup api_drain
      */
     virtual void notifyFork() {};
 
index 2976e11cb5491746eb82e5a64ea417c5fcf887ef..522b394f7ebcbe0f7f46fb70ca930a617d0a553f 100644 (file)
@@ -111,6 +111,9 @@ class EventBase
     static const FlagsType InitMask      = 0xffc0; // mask for init bits
 
   public:
+    /**
+     * @ingroup api_eventq
+     */
     typedef int8_t Priority;
 
     /// Event priorities, to provide tie-breakers for events scheduled
@@ -118,61 +121,117 @@ class EventBase
     /// priority; these values are used to control events that need to
     /// be ordered within a cycle.
 
-    /// Minimum priority
+    /**
+     * Minimum priority
+     *
+     * @ingroup api_eventq
+     */
     static const Priority Minimum_Pri =          SCHAR_MIN;
 
-    /// If we enable tracing on a particular cycle, do that as the
-    /// very first thing so we don't miss any of the events on
-    /// that cycle (even if we enter the debugger).
+    /**
+     * If we enable tracing on a particular cycle, do that as the
+     * very first thing so we don't miss any of the events on
+     * that cycle (even if we enter the debugger).
+     *
+     * @ingroup api_eventq
+     */
     static const Priority Debug_Enable_Pri =          -101;
 
-    /// Breakpoints should happen before anything else (except
-    /// enabling trace output), so we don't miss any action when
-    /// debugging.
+    /**
+     * Breakpoints should happen before anything else (except
+     * enabling trace output), so we don't miss any action when
+     * debugging.
+     *
+     * @ingroup api_eventq
+     */
     static const Priority Debug_Break_Pri =           -100;
 
-    /// CPU switches schedule the new CPU's tick event for the
-    /// same cycle (after unscheduling the old CPU's tick event).
-    /// The switch needs to come before any tick events to make
-    /// sure we don't tick both CPUs in the same cycle.
+    /**
+     * CPU switches schedule the new CPU's tick event for the
+     * same cycle (after unscheduling the old CPU's tick event).
+     * The switch needs to come before any tick events to make
+     * sure we don't tick both CPUs in the same cycle.
+     *
+     * @ingroup api_eventq
+     */
     static const Priority CPU_Switch_Pri =             -31;
 
-    /// For some reason "delayed" inter-cluster writebacks are
-    /// scheduled before regular writebacks (which have default
-    /// priority).  Steve?
+    /**
+     * For some reason "delayed" inter-cluster writebacks are
+     * scheduled before regular writebacks (which have default
+     * priority).  Steve?
+     *
+     * @ingroup api_eventq
+     */
     static const Priority Delayed_Writeback_Pri =       -1;
 
-    /// Default is zero for historical reasons.
+    /**
+     * Default is zero for historical reasons.
+     *
+     * @ingroup api_eventq
+     */
     static const Priority Default_Pri =                  0;
 
-    /// DVFS update event leads to stats dump therefore given a lower priority
-    /// to ensure all relevant states have been updated
+    /**
+     * DVFS update event leads to stats dump therefore given a lower priority
+     * to ensure all relevant states have been updated
+     *
+     * @ingroup api_eventq
+     */
     static const Priority DVFS_Update_Pri =             31;
 
-    /// Serailization needs to occur before tick events also, so
-    /// that a serialize/unserialize is identical to an on-line
-    /// CPU switch.
+    /**
+     * Serailization needs to occur before tick events also, so
+     * that a serialize/unserialize is identical to an on-line
+     * CPU switch.
+     *
+     * @ingroup api_eventq
+     */
     static const Priority Serialize_Pri =               32;
 
-    /// CPU ticks must come after other associated CPU events
-    /// (such as writebacks).
+    /**
+     * CPU ticks must come after other associated CPU events
+     * (such as writebacks).
+     *
+     * @ingroup api_eventq
+     */
     static const Priority CPU_Tick_Pri =                50;
 
-    /// If we want to exit a thread in a CPU, it comes after CPU_Tick_Pri
+    /**
+     * If we want to exit a thread in a CPU, it comes after CPU_Tick_Pri
+     *
+     * @ingroup api_eventq
+     */
     static const Priority CPU_Exit_Pri =                64;
 
-    /// Statistics events (dump, reset, etc.) come after
-    /// everything else, but before exit.
+    /**
+     * Statistics events (dump, reset, etc.) come after
+     * everything else, but before exit.
+     *
+     * @ingroup api_eventq
+     */
     static const Priority Stat_Event_Pri =              90;
 
-    /// Progress events come at the end.
+    /**
+     * Progress events come at the end.
+     *
+     * @ingroup api_eventq
+     */
     static const Priority Progress_Event_Pri =          95;
 
-    /// If we want to exit on this cycle, it's the very last thing
-    /// we do.
+    /**
+     * If we want to exit on this cycle, it's the very last thing
+     * we do.
+     *
+     * @ingroup api_eventq
+     */
     static const Priority Sim_Exit_Pri =               100;
 
-    /// Maximum priority
+    /**
+     * Maximum priority
+     *
+     * @ingroup api_eventq
+     */
     static const Priority Maximum_Pri =          SCHAR_MAX;
 };
 
@@ -246,7 +305,6 @@ class Event : public EventBase, public Serializable
     }
 
   protected:
-    /// Accessor for flags.
     Flags
     getFlags() const
     {
@@ -260,7 +318,6 @@ class Event : public EventBase, public Serializable
         return flags.isSet(_flags);
     }
 
-    /// Accessor for flags.
     void
     setFlags(Flags _flags)
     {
@@ -281,7 +338,11 @@ class Event : public EventBase, public Serializable
         flags.clear(PublicWrite);
     }
 
-    // This function isn't really useful if TRACING_ON is not defined
+    /**
+     * This function isn't really useful if TRACING_ON is not defined
+     *
+     * @ingroup api_eventq
+     */
     virtual void trace(const char *action);     //!< trace event activity
 
     /// Return the instance number as a string.
@@ -341,6 +402,8 @@ class Event : public EventBase, public Serializable
     /*
      * Event constructor
      * @param queue that the event gets scheduled on
+     *
+     * @ingroup api_eventq
      */
     Event(Priority p = Default_Pri, Flags f = 0)
         : nextBin(nullptr), nextInBin(nullptr), _when(0), _priority(p),
@@ -357,6 +420,10 @@ class Event : public EventBase, public Serializable
 #endif
     }
 
+    /**
+     * @ingroup api_eventq
+     * @{
+     */
     virtual ~Event();
     virtual const std::string name() const;
 
@@ -367,6 +434,7 @@ class Event : public EventBase, public Serializable
 
     /// Dump the current event data
     void dump() const;
+    /** @}*/ //end of api group
 
   public:
     /*
@@ -378,29 +446,63 @@ class Event : public EventBase, public Serializable
      *
      * If the AutoDestroy flag is set, the object is deleted once it
      * is processed.
+     *
+     * @ingroup api_eventq
      */
     virtual void process() = 0;
 
-    /// Determine if the current event is scheduled
+    /**
+     * Determine if the current event is scheduled
+     *
+     * @ingroup api_eventq
+     */
     bool scheduled() const { return flags.isSet(Scheduled); }
 
-    /// Squash the current event
+    /**
+     * Squash the current event
+     *
+     * @ingroup api_eventq
+     */
     void squash() { flags.set(Squashed); }
 
-    /// Check whether the event is squashed
+    /**
+     * Check whether the event is squashed
+     *
+     * @ingroup api_eventq
+     */
     bool squashed() const { return flags.isSet(Squashed); }
 
-    /// See if this is a SimExitEvent (without resorting to RTTI)
+    /**
+     * See if this is a SimExitEvent (without resorting to RTTI)
+     *
+     * @ingroup api_eventq
+     */
     bool isExitEvent() const { return flags.isSet(IsExitEvent); }
 
-    /// Check whether this event will auto-delete
+    /**
+     * Check whether this event will auto-delete
+     *
+     * @ingroup api_eventq
+     */
     bool isManaged() const { return flags.isSet(Managed); }
+
+    /**
+     * @ingroup api_eventq
+     */
     bool isAutoDelete() const { return isManaged(); }
 
-    /// Get the time that the event is scheduled
+    /**
+     * Get the time that the event is scheduled
+     *
+     * @ingroup api_eventq
+     */
     Tick when() const { return _when; }
 
-    /// Get the event priority
+    /**
+     * Get the event priority
+     *
+     * @ingroup api_eventq
+     */
     Priority priority() const { return _priority; }
 
     //! If this is part of a GlobalEvent, return the pointer to the
@@ -412,6 +514,9 @@ class Event : public EventBase, public Serializable
     void unserialize(CheckpointIn &cp) override;
 };
 
+/**
+ * @ingroup api_eventq
+ */
 inline bool
 operator<(const Event &l, const Event &r)
 {
@@ -419,6 +524,9 @@ operator<(const Event &l, const Event &r)
         (l.when() == r.when() && l.priority() < r.priority());
 }
 
+/**
+ * @ingroup api_eventq
+ */
 inline bool
 operator>(const Event &l, const Event &r)
 {
@@ -426,12 +534,19 @@ operator>(const Event &l, const Event &r)
         (l.when() == r.when() && l.priority() > r.priority());
 }
 
+/**
+ * @ingroup api_eventq
+ */
 inline bool
 operator<=(const Event &l, const Event &r)
 {
     return l.when() < r.when() ||
         (l.when() == r.when() && l.priority() <= r.priority());
 }
+
+/**
+ * @ingroup api_eventq
+ */
 inline bool
 operator>=(const Event &l, const Event &r)
 {
@@ -439,12 +554,18 @@ operator>=(const Event &l, const Event &r)
         (l.when() == r.when() && l.priority() >= r.priority());
 }
 
+/**
+ * @ingroup api_eventq
+ */
 inline bool
 operator==(const Event &l, const Event &r)
 {
     return l.when() == r.when() && l.priority() == r.priority();
 }
 
+/**
+ * @ingroup api_eventq
+ */
 inline bool
 operator!=(const Event &l, const Event &r)
 {
@@ -552,6 +673,9 @@ class EventQueue
     class ScopedMigration
     {
       public:
+        /**
+         * @ingroup api_eventq
+         */
         ScopedMigration(EventQueue *_new_eq, bool _doMigrate = true)
             :new_eq(*_new_eq), old_eq(*curEventQueue()),
              doMigrate((&new_eq != &old_eq)&&_doMigrate)
@@ -590,6 +714,9 @@ class EventQueue
     class ScopedRelease
     {
       public:
+        /**
+         * @group api_eventq
+         */
         ScopedRelease(EventQueue *_eq)
             :  eq(*_eq)
         {
@@ -605,33 +732,71 @@ class EventQueue
         EventQueue &eq;
     };
 
+    /**
+     * @ingroup api_eventq
+     */
     EventQueue(const std::string &n);
 
+    /**
+     * @ingroup api_eventq
+     * @{
+     */
     virtual const std::string name() const { return objName; }
     void name(const std::string &st) { objName = st; }
+    /** @}*/ //end of api_eventq group
 
-    //! Schedule the given event on this queue. Safe to call from any
-    //! thread.
+    /**
+     * Schedule the given event on this queue. Safe to call from any thread.
+     *
+     * @ingroup api_eventq
+     */
     void schedule(Event *event, Tick when, bool global = false);
 
-    //! Deschedule the specified event. Should be called only from the
-    //! owning thread.
+    /**
+     * Deschedule the specified event. Should be called only from the owning
+     * thread.
+     * @ingroup api_eventq
+     */
     void deschedule(Event *event);
 
-    //! Reschedule the specified event. Should be called only from
-    //! the owning thread.
+    /**
+     * Reschedule the specified event. Should be called only from the owning
+     * thread.
+     *
+     * @ingroup api_eventq
+     */
     void reschedule(Event *event, Tick when, bool always = false);
 
     Tick nextTick() const { return head->when(); }
     void setCurTick(Tick newVal) { _curTick = newVal; }
+
+    /**
+     * While curTick() is useful for any object assigned to this event queue,
+     * if an object that is assigned to another event queue (or a non-event
+     * object) need to access the current tick of this event queue, this
+     * function is used.
+     *
+     * @return Tick The current tick of this event queue.
+     * @ingroup api_eventq
+     */
     Tick getCurTick() const { return _curTick; }
     Event *getHead() const { return head; }
 
     Event *serviceOne();
 
-    // process all events up to the given timestamp.  we inline a
-    // quick test to see if there are any events to process; if so,
-    // call the internal out-of-line version to process them all.
+    /**
+     * process all events up to the given timestamp.  we inline a quick test
+     * to see if there are any events to process; if so, call the internal
+     * out-of-line version to process them all.
+     *
+     * Notes:
+     *  - This is only used for "instruction" event queues. Instead of counting
+     *    ticks, this is actually counting instructions.
+     *  - This updates the current tick value to the value of the entry at the
+     *    head of the queue.
+     *
+     * @ingroup api_eventq
+     */
     void
     serviceEvents(Tick when)
     {
@@ -650,14 +815,26 @@ class EventQueue
         setCurTick(when);
     }
 
-    // return true if no events are queued
+    /**
+     * Returns true if no events are queued
+     *
+     * @ingroup api_eventq
+     */
     bool empty() const { return head == NULL; }
 
+    /**
+     * This is a debugging function which will print everything on the event
+     * queue.
+     *
+     * @ingroup api_eventq
+     */
     void dump() const;
 
     bool debugVerify() const;
 
-    //! Function for moving events from the async_queue to the main queue.
+    /**
+     * Function for moving events from the async_queue to the main queue.
+     */
     void handleAsyncInsertions();
 
     /**
@@ -672,6 +849,8 @@ class EventQueue
      *  can be used by an implementation to schedule a wakeup in the
      *  future if it is sure it will remain active until then.
      *  Or it can be ignored and the event queue can be woken up now.
+     *
+     *  @ingroup api_eventq
      */
     virtual void wakeup(Tick when = (Tick)-1) { }
 
@@ -730,52 +909,81 @@ class EventManager
     EventQueue *eventq;
 
   public:
+    /**
+     * @ingroup api_eventq
+     * @{
+     */
     EventManager(EventManager &em) : eventq(em.eventq) {}
     EventManager(EventManager *em) : eventq(em->eventq) {}
     EventManager(EventQueue *eq) : eventq(eq) {}
+    /** @}*/ //end of api_eventq group
 
+    /**
+     * @ingroup api_eventq
+     */
     EventQueue *
     eventQueue() const
     {
         return eventq;
     }
 
+    /**
+     * @ingroup api_eventq
+     */
     void
     schedule(Event &event, Tick when)
     {
         eventq->schedule(&event, when);
     }
 
+    /**
+     * @ingroup api_eventq
+     */
     void
     deschedule(Event &event)
     {
         eventq->deschedule(&event);
     }
 
+    /**
+     * @ingroup api_eventq
+     */
     void
     reschedule(Event &event, Tick when, bool always = false)
     {
         eventq->reschedule(&event, when, always);
     }
 
+    /**
+     * @ingroup api_eventq
+     */
     void
     schedule(Event *event, Tick when)
     {
         eventq->schedule(event, when);
     }
 
+    /**
+     * @ingroup api_eventq
+     */
     void
     deschedule(Event *event)
     {
         eventq->deschedule(event);
     }
 
+    /**
+     * @ingroup api_eventq
+     */
     void
     reschedule(Event *event, Tick when, bool always = false)
     {
         eventq->reschedule(event, when, always);
     }
 
+    /**
+     * @ingroup api_eventq
+     */
     void wakeupEventQueue(Tick when = (Tick)-1)
     {
         eventq->wakeup(when);
@@ -823,6 +1031,9 @@ class EventFunctionWrapper : public Event
       std::string _name;
 
   public:
+    /**
+     * @ingroup api_eventq
+     */
     EventFunctionWrapper(const std::function<void(void)> &callback,
                          const std::string &name,
                          bool del = false,
@@ -833,14 +1044,23 @@ class EventFunctionWrapper : public Event
             setFlags(AutoDelete);
     }
 
+   /**
+    * @ingroup api_eventq
+    */
     void process() { callback(); }
 
+    /**
+     * @ingroup api_eventq
+     */
     const std::string
     name() const
     {
         return _name + ".wrapped_function_event";
     }
 
+    /**
+     * @ingroup api_eventq
+     */
     const char *description() const { return "EventFunctionWrapped"; }
 };
 
index 42d37819fac212e4fd056a70c05450f749553e7a..f998fffe9a24eaa693b4ed6c25caa8489e672ffd 100644 (file)
@@ -369,6 +369,7 @@ MemState::remapRegion(Addr start_addr, Addr new_start_addr, Addr length)
                                          new_start_addr);
 
         start_addr += _pageBytes;
+        new_start_addr += _pageBytes;
 
         /**
          * The regions need to always be page-aligned otherwise the while
index 1edb800ef62e160c6bae16142074ef0bd85f2363..37ea1901de05a37c943be224ce76769c031a16a7 100644 (file)
@@ -64,14 +64,14 @@ class MathExprPowerModel : public PowerModelState
      *
      * @return Power (Watts) consumed by this object (dynamic component)
      */
-    double getDynamicPower() const { return eval(dyn_expr); }
+    double getDynamicPower() const override { return eval(dyn_expr); }
 
     /**
      * Get the static power consumption.
      *
      * @return Power (Watts) consumed by this object (static component)
      */
-    double getStaticPower() const { return eval(st_expr); }
+    double getStaticPower() const override { return eval(st_expr); }
 
     /**
      * Get the value for a variable (maps to a stat)
index da19168ddc5dc5e4f3744311b3415448e371d9d9..2d87b059515516dfbb14251c69f0badb1fa9975d 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2010-2012, 2015, 2017 ARM Limited
+ * Copyright (c) 2020 Barkhausen Institut
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -288,7 +289,7 @@ initParam(ThreadContext *tc, uint64_t key_str1, uint64_t key_str2)
     char key[len];
     memset(key, '\0', len);
 
-    std::array<uint64_t, 2> key_regs = { key_str1, key_str2 };
+    std::array<uint64_t, 2> key_regs = {{ key_str1, key_str2 }};
     key_regs = letoh(key_regs);
     memcpy(key, key_regs.data(), sizeof(key_regs));
 
@@ -429,8 +430,10 @@ writefile(ThreadContext *tc, Addr vaddr, uint64_t len, uint64_t offset,
     if (!os)
         panic("could not open file %s\n", filename);
 
-    // seek to offset
-    os->seekp(offset);
+    if (offset != 0) {
+        // seek to offset
+        os->seekp(offset);
+    }
 
     // copy out data and write to file
     char *buf = new char[len];
index 6a71dd2d410c73fd85fe599848feb8cac64c156c..4bb2ab5ff26e49e63d824e8eb74adb5b6d6c8e16 100644 (file)
@@ -66,9 +66,9 @@
 
 using namespace std;
 
-int Serializable::ckptMaxCount = 0;
-int Serializable::ckptCount = 0;
-int Serializable::ckptPrevCount = -1;
+int ckptMaxCount = 0;
+int ckptCount = 0;
+int ckptPrevCount = -1;
 std::stack<std::string> Serializable::path;
 
 /////////////////////////////
@@ -266,9 +266,9 @@ CheckpointIn::dir()
 }
 
 CheckpointIn::CheckpointIn(const string &cpt_dir, SimObjectResolver &resolver)
-    : db(new IniFile), objNameResolver(resolver), cptDir(setDir(cpt_dir))
+    : db(new IniFile), objNameResolver(resolver), _cptDir(setDir(cpt_dir))
 {
-    string filename = cptDir + "/" + CheckpointIn::baseFilename;
+    string filename = getCptDir() + "/" + CheckpointIn::baseFilename;
     if (!db->load(filename)) {
         fatal("Can't load checkpoint file '%s'\n", filename);
     }
index 92b14a9ffff5d09d7ceafb428aab7d1451283cc6..1f31dd2033a41a69bbdcca0be5bb2701e6b165f1 100644 (file)
@@ -72,11 +72,17 @@ class CheckpointIn
 
     SimObjectResolver &objNameResolver;
 
+    const std::string _cptDir;
+
   public:
     CheckpointIn(const std::string &cpt_dir, SimObjectResolver &resolver);
     ~CheckpointIn();
 
-    const std::string cptDir;
+    /**
+     * @ingroup api_serialize
+     * @{
+     */
+    const std::string getCptDir() { return _cptDir; }
 
     bool find(const std::string &section, const std::string &entry,
               std::string &value);
@@ -84,9 +90,9 @@ class CheckpointIn
     bool findObj(const std::string &section, const std::string &entry,
                  SimObject *&value);
 
-
     bool entryExists(const std::string &section, const std::string &entry);
     bool sectionExists(const std::string &section);
+    /** @}*/ //end of api_checkout group
 
     // The following static functions have to do with checkpoint
     // creation rather than restoration.  This class makes a handy
@@ -99,16 +105,28 @@ class CheckpointIn
     // current directory we're serializing into.
     static std::string currentDirectory;
 
+
   public:
-    // Set the current directory.  This function takes care of
-    // inserting curTick() if there's a '%d' in the argument, and
-    // appends a '/' if necessary.  The final name is returned.
+    /**
+     * Set the current directory
+     *
+     * This function takes care of inserting curTick() if there's a '%d' in the
+     * argument, and appends a '/' if necessary. The final name is returned.
+     *
+     * @ingroup api_serialize
+     */
     static std::string setDir(const std::string &base_name);
 
-    // Export current checkpoint directory name so other objects can
-    // derive filenames from it (e.g., memory).  The return value is
-    // guaranteed to end in '/' so filenames can be directly appended.
-    // This function is only valid while a checkpoint is being created.
+    /**
+     * Get the current checkout directory name
+     *
+     * This function exports the current checkout point directory name so other
+     * objects can derive filenames from it (e.g., memory). The return value is
+     * guaranteed to end in '/' so filenames can be directly appended. This
+     * function is only valid while a checkpoint is being created.
+     *
+     * @ingroup api_serialize
+     */
     static std::string dir();
 
     // Filename for base checkpoint file within directory.
@@ -167,6 +185,10 @@ class Serializable
      */
     class ScopedCheckpointSection {
       public:
+        /**
+         * @ingroup api_serialize
+         * @{
+         */
         template<class CP>
         ScopedCheckpointSection(CP &cp, const char *name) {
             pushName(name);
@@ -178,6 +200,7 @@ class Serializable
             pushName(name.c_str());
             nameOut(cp);
         }
+        /** @}*/ //end of api_serialize group
 
         ~ScopedCheckpointSection();
 
@@ -195,6 +218,9 @@ class Serializable
     };
 
   public:
+    /**
+     * @ingroup api_serialize
+     */
     Serializable();
     virtual ~Serializable();
 
@@ -204,6 +230,8 @@ class Serializable
      * Output an object's state into the current checkpoint section.
      *
      * @param cp Checkpoint state
+     *
+     * @ingroup api_serialize
      */
     virtual void serialize(CheckpointOut &cp) const = 0;
 
@@ -213,6 +241,8 @@ class Serializable
      * Read an object's state from the current checkpoint section.
      *
      * @param cp Checkpoint state
+     *
+     * @ingroup api_serialize
      */
     virtual void unserialize(CheckpointIn &cp) = 0;
 
@@ -226,9 +256,14 @@ class Serializable
      *
      * @param cp Checkpoint state
      * @param name Name to append to the active path
+     *
+     * @ingroup api_serialize
      */
     void serializeSection(CheckpointOut &cp, const char *name) const;
 
+    /**
+     * @ingroup api_serialize
+     */
     void serializeSection(CheckpointOut &cp, const std::string &name) const {
         serializeSection(cp, name.c_str());
     }
@@ -242,37 +277,54 @@ class Serializable
      *
      * @param cp Checkpoint state
      * @param name Name to append to the active path
+     *
+     * @ingroup api_serialize
      */
     void unserializeSection(CheckpointIn &cp, const char *name);
 
+    /**
+     * @ingroup api_serialize
+     */
     void unserializeSection(CheckpointIn &cp, const std::string &name) {
         unserializeSection(cp, name.c_str());
     }
 
-    /** Get the fully-qualified name of the active section */
+    /**
+     * Gets the fully-qualified name of the active section
+     *
+     * @ingroup api_serialize
+     */
     static const std::string &currentSection();
 
-    static int ckptCount;
-    static int ckptMaxCount;
-    static int ckptPrevCount;
+    /**
+     * @ingroup api_serialize
+     */
     static void serializeAll(const std::string &cpt_dir);
+
+    /**
+     * @ingroup api_serialize
+     */
     static void unserializeGlobals(CheckpointIn &cp);
 
   private:
     static std::stack<std::string> path;
 };
 
-//
-// The base implementations use to_number for parsing and '<<' for
-// displaying, suitable for integer types.
-//
+/**
+ * @ingroup api_serialize
+ */
 template <class T>
 bool
 parseParam(const std::string &s, T &value)
 {
+    // The base implementations use to_number for parsing and '<<' for
+    // displaying, suitable for integer types.
     return to_number(s, value);
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <class T>
 void
 showParam(CheckpointOut &os, const T &value)
@@ -280,6 +332,9 @@ showParam(CheckpointOut &os, const T &value)
     os << value;
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <class T>
 bool
 parseParam(const std::string &s, BitUnionType<T> &value)
@@ -291,6 +346,9 @@ parseParam(const std::string &s, BitUnionType<T> &value)
     return res;
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <class T>
 void
 showParam(CheckpointOut &os, const BitUnionType<T> &value)
@@ -304,14 +362,20 @@ showParam(CheckpointOut &os, const BitUnionType<T> &value)
         static_cast<unsigned int>(storage) : storage);
 }
 
-// Treat 8-bit ints (chars) as ints on output, not as chars
+/**
+ * @ingroup api_serialize
+ */
 template <>
 inline void
 showParam(CheckpointOut &os, const char &value)
 {
+    // Treat 8-bit ints (chars) as ints on output, not as chars
     os << (int)value;
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <>
 inline void
 showParam(CheckpointOut &os, const signed char &value)
@@ -319,6 +383,9 @@ showParam(CheckpointOut &os, const signed char &value)
     os << (int)value;
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <>
 inline void
 showParam(CheckpointOut &os, const unsigned char &value)
@@ -326,6 +393,9 @@ showParam(CheckpointOut &os, const unsigned char &value)
     os << (unsigned int)value;
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <>
 inline bool
 parseParam(const std::string &s, float &value)
@@ -333,6 +403,9 @@ parseParam(const std::string &s, float &value)
     return to_number(s, value);
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <>
 inline bool
 parseParam(const std::string &s, double &value)
@@ -340,6 +413,9 @@ parseParam(const std::string &s, double &value)
     return to_number(s, value);
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <>
 inline bool
 parseParam(const std::string &s, bool &value)
@@ -347,23 +423,32 @@ parseParam(const std::string &s, bool &value)
     return to_bool(s, value);
 }
 
-// Display bools as strings
+/**
+ * @ingroup api_serialize
+ */
 template <>
 inline void
 showParam(CheckpointOut &os, const bool &value)
 {
+    // Display bools as strings
     os << (value ? "true" : "false");
 }
 
-// String requires no processing to speak of
+/**
+ * @ingroup api_serialize
+ */
 template <>
 inline bool
 parseParam(const std::string &s, std::string &value)
 {
+    // String requires no processing to speak of
     value = s;
     return true;
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <class T>
 void
 paramOut(CheckpointOut &os, const std::string &name, const T &param)
@@ -373,6 +458,9 @@ paramOut(CheckpointOut &os, const std::string &name, const T &param)
     os << "\n";
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <class T>
 void
 paramIn(CheckpointIn &cp, const std::string &name, T &param)
@@ -384,6 +472,9 @@ paramIn(CheckpointIn &cp, const std::string &name, T &param)
     }
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <class T>
 bool
 optParamIn(CheckpointIn &cp, const std::string &name,
@@ -400,6 +491,9 @@ optParamIn(CheckpointIn &cp, const std::string &name,
     }
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <class T>
 void
 arrayParamOut(CheckpointOut &os, const std::string &name,
@@ -416,6 +510,9 @@ arrayParamOut(CheckpointOut &os, const std::string &name,
     os << "\n";
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <class T>
 void
 arrayParamOut(CheckpointOut &os, const std::string &name,
@@ -435,6 +532,9 @@ arrayParamOut(CheckpointOut &os, const std::string &name,
     os << "\n";
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <class T>
 void
 arrayParamOut(CheckpointOut &os, const std::string &name,
@@ -454,6 +554,9 @@ arrayParamOut(CheckpointOut &os, const std::string &name,
     os << "\n";
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <class T>
 void
 arrayParamOut(CheckpointOut &os, const std::string &name,
@@ -477,6 +580,8 @@ arrayParamOut(CheckpointOut &os, const std::string &name,
  * @param name Name of the container.
  * @param param The array container.
  * @param size The expected number of entries to be extracted.
+ *
+ * @ingroup api_serialize
  */
 template <class T>
 void
@@ -523,6 +628,9 @@ arrayParamIn(CheckpointIn &cp, const std::string &name,
     }
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <class T>
 void
 arrayParamIn(CheckpointIn &cp, const std::string &name, std::vector<T> &param)
@@ -565,6 +673,9 @@ arrayParamIn(CheckpointIn &cp, const std::string &name, std::vector<T> &param)
     }
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <class T>
 void
 arrayParamIn(CheckpointIn &cp, const std::string &name, std::list<T> &param)
@@ -595,6 +706,9 @@ arrayParamIn(CheckpointIn &cp, const std::string &name, std::list<T> &param)
     }
 }
 
+/**
+ * @ingroup api_serialize
+ */
 template <class T>
 void
 arrayParamIn(CheckpointIn &cp, const std::string &name, std::set<T> &param)
@@ -628,6 +742,10 @@ arrayParamIn(CheckpointIn &cp, const std::string &name, std::set<T> &param)
 void
 debug_serialize(const std::string &cpt_dir);
 
+
+/**
+ * @ingroup api_serialize
+ */
 void
 objParamIn(CheckpointIn &cp, const std::string &name, SimObject * &param);
 
@@ -635,14 +753,43 @@ objParamIn(CheckpointIn &cp, const std::string &name, SimObject * &param);
 // These macros are streamlined to use in serialize/unserialize
 // functions.  It's assumed that serialize() has a parameter 'os' for
 // the ostream, and unserialize() has parameters 'cp' and 'section'.
+
+
+/**
+ * \def SERIALIZE_SCALER(scaler)
+ *
+ * @ingroup api_serialize
+ */
 #define SERIALIZE_SCALAR(scalar)        paramOut(cp, #scalar, scalar)
 
+/**
+ * \def UNSERIALIZE_SCALER(scalar)
+ *
+ * @ingroup api_serialize
+ */
 #define UNSERIALIZE_SCALAR(scalar)      paramIn(cp, #scalar, scalar)
+
+/**
+ * \def UNSERIALIZE_OPT_SCALAR(scalar)
+ *
+ * @ingroup api_serialize
+ */
 #define UNSERIALIZE_OPT_SCALAR(scalar)      optParamIn(cp, #scalar, scalar)
 
 // ENUMs are like SCALARs, but we cast them to ints on the way out
+
+/**
+ * \def SERIALIZE_ENUM(scalar)
+ *
+ * @ingroup api_serialize
+ */
 #define SERIALIZE_ENUM(scalar)          paramOut(cp, #scalar, (int)scalar)
 
+/**
+ * \def UNSERIALIZE_ENUM(scaler)
+ *
+ * @ingroup api_serialize
+ */
 #define UNSERIALIZE_ENUM(scalar)                        \
     do {                                                \
         int tmp;                                        \
@@ -650,31 +797,82 @@ objParamIn(CheckpointIn &cp, const std::string &name, SimObject * &param);
         scalar = static_cast<decltype(scalar)>(tmp);    \
     } while (0)
 
+/**
+ * \def SERIALIZE_ARRAY(member, size)
+ *
+ * @ingroup api_serialize
+ */
 #define SERIALIZE_ARRAY(member, size)           \
         arrayParamOut(cp, #member, member, size)
 
+/**
+ * \def UNSERIALIZE_ARRAY(member, size)
+ *
+ * @ingroup api_serialize
+ */
 #define UNSERIALIZE_ARRAY(member, size)         \
         arrayParamIn(cp, #member, member, size)
 
+/**
+ * \def SERIALIZE_CONTAINER(member)
+ *
+ * @ingroup api_serialize
+ */
 #define SERIALIZE_CONTAINER(member)             \
         arrayParamOut(cp, #member, member)
 
+/**
+ * \def UNSERIALIZE_CONTAINER(member)
+ *
+ * @ingroup api_serialize
+ */
 #define UNSERIALIZE_CONTAINER(member)           \
         arrayParamIn(cp, #member, member)
 
+/**
+ * \def SERIALIZE_EVENT(event)
+ *
+ * @ingroup api_serialize
+ */
 #define SERIALIZE_EVENT(event) event.serializeSection(cp, #event);
 
+/**
+ * \def UNSERIALIZE_EVENT(event)
+ *
+ * @ingroup api_serialize
+ */
 #define UNSERIALIZE_EVENT(event)                        \
     do {                                                \
         event.unserializeSection(cp, #event);           \
         eventQueue()->checkpointReschedule(&event);     \
     } while (0)
 
+/**
+ * \def SERIALIZE_OBJ(obj)
+ *
+ * @ingroup api_serialize
+ */
 #define SERIALIZE_OBJ(obj) obj.serializeSection(cp, #obj)
+
+/**
+ * \def UNSERIALIZE_OBJ(obj)
+ *
+ * @ingroup api_serialize
+ */
 #define UNSERIALIZE_OBJ(obj) obj.unserializeSection(cp, #obj)
 
+/**
+ * \def SERIALIZE_OBJPTR(objptr)
+ *
+ * @ingroup api_serialize
+ */
 #define SERIALIZE_OBJPTR(objptr)        paramOut(cp, #objptr, (objptr)->name())
 
+/**
+ * \def UNSERIALIZE_OBJPTR(objptr)
+ *
+ * @ingroup api_serialize
+ */
 #define UNSERIALIZE_OBJPTR(objptr)                      \
     do {                                                \
         SimObject *sptr;                                \
index 05c1b3e0ac89f1e11fcaec665ae2d9866f18a19b..de89fbff2258a10f7c35c2fa5da3af29cd2c9843 100644 (file)
@@ -103,17 +103,29 @@ class SimObject : public EventManager, public Serializable, public Drainable,
     ProbeManager *probeManager;
 
   protected:
-    /** Cached copy of the object parameters. */
+    /**
+     * Cached copy of the object parameters.
+     *
+     * @ingroup api_simobject
+     */
     const SimObjectParams *_params;
 
   public:
     typedef SimObjectParams Params;
+    /**
+     * @ingroup api_simobject
+     * @{
+     */
     const Params *params() const { return _params; }
     SimObject(const Params *_params);
+    /** @}*/ //end of the api_simobject group
     virtual ~SimObject();
 
   public:
 
+    /**
+     * @ingroup api_simobject
+     */
     virtual const std::string name() const { return params()->name; }
 
     /**
@@ -121,6 +133,8 @@ class SimObject : public EventManager, public Serializable, public Drainable,
      * all ports are connected.  Initializations that are independent
      * of unserialization but rely on a fully instantiated and
      * connected SimObject graph should be done here.
+     *
+     * @ingroup api_simobject
      */
     virtual void init();
 
@@ -134,6 +148,8 @@ class SimObject : public EventManager, public Serializable, public Drainable,
      * found.
      *
      * @param cp Checkpoint to restore the state from.
+     *
+     * @ingroup api_serialize
      */
     virtual void loadState(CheckpointIn &cp);
 
@@ -141,21 +157,29 @@ class SimObject : public EventManager, public Serializable, public Drainable,
      * initState() is called on each SimObject when *not* restoring
      * from a checkpoint.  This provides a hook for state
      * initializations that are only required for a "cold start".
+     *
+     * @ingroup api_serialize
      */
     virtual void initState();
 
     /**
      * Register probe points for this object.
+     *
+     * @ingroup api_simobject
      */
     virtual void regProbePoints();
 
     /**
      * Register probe listeners for this object.
+     *
+     * @ingroup api_simobject
      */
     virtual void regProbeListeners();
 
     /**
      * Get the probe manager for this object.
+     *
+     * @ingroup api_simobject
      */
     ProbeManager *getProbeManager();
 
@@ -167,6 +191,8 @@ class SimObject : public EventManager, public Serializable, public Drainable,
      * @param idx Index in the case of a VectorPort
      *
      * @return A reference to the given port
+     *
+     * @ingroup api_simobject
      */
     virtual Port &getPort(const std::string &if_name,
                           PortID idx=InvalidPortID);
@@ -176,6 +202,8 @@ class SimObject : public EventManager, public Serializable, public Drainable,
      * All state is initialized (including unserialized state, if any,
      * such as the curTick() value), so this is the appropriate place to
      * schedule initial event(s) for objects that need them.
+     *
+     * @ingroup api_simobject
      */
     virtual void startup();
 
@@ -192,6 +220,8 @@ class SimObject : public EventManager, public Serializable, public Drainable,
      * written all its dirty data back to memory. This method is
      * typically used to prepare a system with caches for
      * checkpointing.
+     *
+     * @ingroup api_simobject
      */
     virtual void memWriteback() {};
 
@@ -205,6 +235,8 @@ class SimObject : public EventManager, public Serializable, public Drainable,
      *
      * @warn This does <i>not</i> cause any dirty state to be written
      * back to memory.
+     *
+     * @ingroup api_simobject
      */
     virtual void memInvalidate() {};
 
@@ -226,6 +258,8 @@ class SimObject : public EventManager, public Serializable, public Drainable,
      * Find the SimObject with the given name and return a pointer to
      * it.  Primarily used for interactive debugging.  Argument is
      * char* rather than std::string to make it callable from gdb.
+     *
+     * @ingroup api_simobject
      */
     static SimObject *find(const char *name);
 };
@@ -241,7 +275,11 @@ class SimObjectResolver
   public:
     virtual ~SimObjectResolver() { }
 
-    // Find a SimObject given a full path name
+    /**
+     * Find a SimObject given a full path name
+     *
+     * @ingroup api_serialize
+     */
     virtual SimObject *resolveSimObject(const std::string &name) = 0;
 };
 
index 247a98ca0f6ce286a2541fe93c4e45b044ffeadf..5b966cd7873cb3717a8417f58e0cb4296960d511 100644 (file)
@@ -1181,7 +1181,6 @@ mremapFunc(SyscallDesc *desc, ThreadContext *tc,
 
                 warn("returning %08p as start\n", new_start);
                 p->memState->remapRegion(start, new_start, old_length);
-                p->memState->mapRegion(new_start, new_length, "remapped");
                 return new_start;
             }
         }
index c9ca161cf17fe5a44f145f49fbbefdec17127ace..31cc35e8e9fb19501d83b148a56215262fdf45ed 100644 (file)
@@ -36,7 +36,7 @@
 
 #include "base/logging.hh"
 #include "sim/core.hh"
-#include "sim/eventq.hh"
+#include "sim/eventq_impl.hh"
 #include "systemc/core/channel.hh"
 #include "systemc/core/list.hh"
 #include "systemc/core/process.hh"
index 0f7993875b235b2975a05fabeab0d79f8d81b734..b124a132b0e3b5384d793b473a2926824ece9f35 100644 (file)
@@ -43,9 +43,11 @@ from common import FSConfig
 from common import Options
 from common.Caches import *
 from ruby import Ruby
+from six import add_metaclass
 
 _have_kvm_support = 'BaseKvmCPU' in globals()
 
+@add_metaclass(ABCMeta)
 class BaseSystem(object):
     """Base system builder.
 
@@ -55,8 +57,6 @@ class BaseSystem(object):
     the initialization process.
     """
 
-    __metaclass__ = ABCMeta
-
     def __init__(self, mem_mode='timing', mem_class=SimpleMemory,
                  cpu_class=TimingSimpleCPU, num_cpus=1, num_threads=1,
                  checker=False, mem_size=None, use_ruby=False):
index cc61aa6133722f99a3ba2cfdd3a6ac1280b669ac..b8cfc7f50815640f94881392c57ff70da5c5b9d2 100644 (file)
@@ -20,12 +20,7 @@ test-insttest-rv64i-linux-TimingSimpleCPU-RISCV-x86_64-debug
 test-insttest-rv64i-linux-DerivO3CPU-RISCV-x86_64-debug
 test-insttest-linux-AtomicSimpleCPU-SPARC-x86_64-debug
 test-insttest-linux-TimingSimpleCPU-SPARC-x86_64-debug
-test-insttest-rv64a-linux-MinorCPU-RISCV-x86_64-fast
-test-insttest-rv64c-linux-MinorCPU-RISCV-x86_64-fast
-test-insttest-rv64d-linux-MinorCPU-RISCV-x86_64-fast
-test-insttest-rv64f-linux-MinorCPU-RISCV-x86_64-fast
 test-insttest-rv64i-linux-MinorCPU-RISCV-x86_64-fast
-test-insttest-rv64m-linux-MinorCPU-RISCV-x86_64-fast
 test-insttest-rv64i-linux-AtomicSimpleCPU-RISCV-x86_64-fast
 test-insttest-rv64i-linux-TimingSimpleCPU-RISCV-x86_64-fast
 test-insttest-rv64i-linux-DerivO3CPU-RISCV-x86_64-fast
index 614165a482285b1701c20ebf0d6a6222e9dd9098..0955469d085aacb6c0aaefcf972c7815515446d8 100644 (file)
@@ -24,8 +24,8 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import suite
-import fixture
+import testlib.suite
+import testlib.fixture
 
-from suite import *
-from fixture import *
+from .suite import *
+from .fixture import *
index 339d15aae08d1b2b715b159e252cb7907e1fe733..a21c4b96565c95bdf0dac2281c27d65ddf6a6bdd 100644 (file)
@@ -70,11 +70,11 @@ for isa in valid_isas:
         binary = joinpath(workload_binary.path, workload)
 
         for cpu in valid_isas[isa]:
-           gem5_verify_config(
+            gem5_verify_config(
                   name='cpu_test_{}_{}'.format(cpu,workload),
                   verifiers=verifiers,
                   config=joinpath(getcwd(), 'run.py'),
                   config_args=['--cpu={}'.format(cpu), binary],
                   valid_isas=(isa.upper(),),
                   fixtures=[workload_binary]
-           )
+            )
index fc31b30c67b0f8eb31f4df82c5ec60540832712d..f28201b046ecb21686887069fe23bee212159bdd 100644 (file)
@@ -42,11 +42,11 @@ import shutil
 import sys
 import socket
 import threading
-import urllib
-import urllib2
+
+from six.moves import urllib
 
 from testlib.fixture import Fixture
-from testlib.config import config, constants
+from testlib.configuration import config, constants
 from testlib.helper import log_call, cacheresult, joinpath, absdirpath
 import testlib.log as log
 from testlib.state import Result
@@ -271,15 +271,16 @@ class DownloadedProgram(UniqueFixture):
             except OSError as e:
                 if e.errno != errno.EEXIST:
                     raise
-        urllib.urlretrieve(self.url, self.filename)
+        urllib.request.urlretrieve(self.url, self.filename)
 
     def _getremotetime(self):
         import datetime, time
         import _strptime # Needed for python threading bug
 
-        u = urllib2.urlopen(self.url, timeout=10)
+        u = urllib.request.urlopen(self.url, timeout=10)
+
         return time.mktime(datetime.datetime.strptime( \
-                    u.info().getheaders("Last-Modified")[0],
+                    u.info()["Last-Modified"],
                     "%a, %d %b %Y %X GMT").timetuple())
 
     def _setup(self, testitem):
@@ -289,7 +290,7 @@ class DownloadedProgram(UniqueFixture):
         else:
             try:
                 t = self._getremotetime()
-            except (urllib2.URLError, socket.timeout):
+            except (urllib.error.URLError, socket.timeout):
                 # Problem checking the server, use the old files.
                 log.test_log.debug("Could not contact server. Binaries may be old.")
                 return
@@ -315,7 +316,7 @@ class DownloadedArchive(DownloadedProgram):
         else:
             try:
                 t = self._getremotetime()
-            except (urllib2.URLError, socket.timeout):
+            except (urllib.error.URLError, socket.timeout):
                 # Problem checking the server, use the old files.
                 log.test_log.debug("Could not contact server. "
                                    "Binaries may be old.")
index 74f4543d64951eefd8fcf8be487134ac70875931..0cae42d873bac0793b1c3c5b1bc16ea06dd14705 100644 (file)
@@ -32,7 +32,7 @@ from common.Caches import *
 #MAX CORES IS 8 with the fals sharing method
 nb_cores = 8
 cpus = [MemTest(max_loads = 1e5, progress_interval = 1e4)
-        for i in xrange(nb_cores) ]
+        for i in range(nb_cores) ]
 
 # system simulated
 system = System(cpu = cpus,
index 5b6294e466c613a201309cf9c5cae21c4a6f6f8e..beed08405a0ecd23d5f9138bb0384ddbe26271ea 100644 (file)
@@ -28,6 +28,8 @@
 Test file for simple memory test
 TODO: Add stats checking
 '''
+import six
+
 from testlib import *
 
 gem5_verify_config(
@@ -48,7 +50,7 @@ simple_mem_params = [
 
 
 for name, params in simple_mem_params:
-    args = ['--' + key + '=' + val for key,val in params.iteritems()]
+    args = ['--' + key + '=' + val for key,val in six.iteritems(params)]
 
     gem5_verify_config(
         name='simple_mem_' + name,
index 25e652e8403f4add0715743e6c897307390a9e6f..4cf0f81a25e3d08e2dcf432e5f0a32dbf04f00bf 100644 (file)
@@ -41,12 +41,13 @@ import copy
 import subprocess
 import sys
 
-from testlib.test import TestFunction
+from testlib.test_util import TestFunction
 from testlib.suite import TestSuite
 from testlib.helper import log_call
-from testlib.config import constants, config
-from fixture import TempdirFixture, Gem5Fixture, VariableFixture
-import verifier
+from testlib.configuration import constants, config
+from .fixture import TempdirFixture, Gem5Fixture, VariableFixture
+
+from . import verifier
 
 def gem5_verify_config(name,
                        config,
@@ -190,6 +191,7 @@ def _create_test_run_gem5(config, config_args, gem5_args):
         command.append(config)
         # Config_args should set up the program args.
         command.extend(config_args)
-        returncode.value = log_call(params.log, command, stderr=sys.stderr)
+        returncode.value = log_call(params.log, command, stdout=sys.stdout,
+                                                         stderr=sys.stderr)
 
     return test_run_gem5
index c955c407df13daa58080220651b314d211eb088b..815b9bbafba759b58c4db732af8a6da3884a05c1 100644 (file)
@@ -29,8 +29,8 @@ Built in test cases that verify particular details about a gem5 run.
 '''
 import re
 
-from testlib import test
-from testlib.config import constants
+from testlib import test_util as test
+from testlib.configuration import constants
 from testlib.helper import joinpath, diff_out_file
 
 class Verifier(object):
index c55664e97fb08e703fab33301ff4cae6fba038b9..bffd08a72524af2f4c3fdd6249e4ab4da078553b 100755 (executable)
@@ -118,7 +118,8 @@ class MySystem(System):
         else:
             m5.fatal("No CPU type {}".format(cpu_type))
 
-        map(lambda c: c.createThreads(), self.cpu)
+        for c in self.cpu:
+            c.createThreads()
 
     def setDiskImages(self, img_path_1, img_path_2):
         disk0 = CowDisk(img_path_1)
index 5cd68e91d1f0e2b1e3fd938d5a0c309c711dfa4a..3287ef14c49b8959b688564a7b4272a5e1307878 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
 '''
 The main source for testlib. Ties together the default test runners and
 loaders.
@@ -10,6 +10,8 @@ from __future__ import print_function
 import sys
 import os
 
+os.environ["PYTHONUNBUFFERED"] = "1"
+
 base_dir = os.path.dirname(os.path.abspath(__file__))
 ext_path = os.path.join(base_dir, os.pardir, 'ext')
 
@@ -17,7 +19,7 @@ sys.path.insert(0, base_dir)
 sys.path.insert(0, ext_path)
 
 import testlib.main as testlib
-import testlib.config as config
+import testlib.configuration as config
 import testlib.helper as helper
 
 config.basedir = helper.absdirpath(__file__)
index 4f97291d5c0f1cd61cc309fcce9cab0a69cfc6e9..5dcc684da7cb71283efd08a514c53a732e8428ed 100644 (file)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
 #
 # Copyright (c) 2016 ARM Limited
 # All rights reserved
index 6fc1e28a08e7d295d7c32a296e6fea6e3261012c..f46915c8f851ae9b98ce870a44a1a85231c0762f 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
 #
 # Copyright (c) 2016 ARM Limited
 # All rights reserved
index 42ec24524e22f65af6a74ca2efd4050cea945d51..eb88d4c238b18270fee7177df8b7daaf0079fc7d 100644 (file)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
 #
 # Copyright (c) 2016 ARM Limited
 # All rights reserved
@@ -40,6 +40,7 @@ from __future__ import print_function
 from abc import ABCMeta, abstractmethod
 import inspect
 import pickle
+from six import add_metaclass
 import string
 import sys
 
@@ -141,8 +142,8 @@ class TestResult(object):
     def __nonzero__(self):
         return all([ r for r in self.results ])
 
+@add_metaclass(ABCMeta)
 class ResultFormatter(object):
-    __metaclass__ = ABCMeta
 
     def __init__(self, fout=sys.stdout, verbose=False):
         self.verbose = verbose
index 29bfa78b6682cad01ece93cd5550dccda33b243b..042180d796b0bfa20accf2381ad15b194ffabb74 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
 #
 # Copyright (c) 2016-2017 ARM Limited
 # All rights reserved
 from abc import ABCMeta, abstractmethod
 import os
 from collections import namedtuple
-from .units import *
-from .helpers import FileIgnoreList
-from .results import TestResult
+
+from six import add_metaclass
+
+import sys
+sys.path.append(os.path.dirname(__file__))
+
+from units import *
+from helpers import FileIgnoreList
+from results import TestResult
 import shutil
 
 _test_base = os.path.join(os.path.dirname(__file__), "..")
@@ -172,6 +178,7 @@ def get_default_protocol(arch):
 all_categories = ("quick", "long")
 all_modes = ("fs", "se")
 
+@add_metaclass(ABCMeta)
 class Test(object):
     """Test case base class.
 
@@ -182,8 +189,6 @@ class Test(object):
 
     """
 
-    __metaclass__ = ABCMeta
-
     def __init__(self, name):
         self.test_name = name
 
index 9c9c1e5bf418841b348e30a5a9035a274ce93e76..d1fa6b227c450950b0f6867904b7201f450500dc 100644 (file)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
 #
 # Copyright (c) 2016 ARM Limited
 # All rights reserved
@@ -41,15 +41,18 @@ import difflib
 import functools
 import os
 import re
+from six import add_metaclass
 import subprocess
 import sys
 import traceback
 
-from .results import UnitResult
-from .helpers import *
+sys.path.append(os.path.dirname(__file__))
+from results import UnitResult
+from helpers import *
 
 _test_base = os.path.join(os.path.dirname(__file__), "..")
 
+@add_metaclass(ABCMeta)
 class TestUnit(object):
     """Base class for all test units.
 
@@ -64,8 +67,6 @@ class TestUnit(object):
 
     """
 
-    __metaclass__ = ABCMeta
-
     def __init__(self, name, ref_dir, test_dir, skip=False):
         self.name = name
         self.ref_dir = ref_dir
index b23cb5a1df11103dc724ca30a0dd3879a8781ee5..df46b414cca18caa2c778be42fc3ca00d62cf1f1 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
 #
 # Copyright (c) 2016 ARM Limited
 # All rights reserved
index 4ac7dbf54811cb18b3536321a1c2d73412afd195..96dcaf6fd4f9e8687548ad9ac9883001cf5238f2 100755 (executable)
@@ -1,6 +1,6 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
 
-# Copyright (c) 2012-2013,2015-2016 ARM Limited
+# Copyright (c) 2012-2013,2015-2016, 2020 ARM Limited
 # All rights reserved
 #
 # The license below extends only to copyright in the software and shall
@@ -68,8 +68,9 @@
 # upgrader. This can be especially valuable when maintaining private
 # upgraders in private branches.
 
+from __future__ import print_function
 
-import ConfigParser
+from six.moves import configparser
 import glob, types, sys, os
 import os.path as osp
 
@@ -79,8 +80,8 @@ def verboseprint(*args):
     if not verbose_print:
         return
     for arg in args:
-        print arg,
-    print
+        print(arg, end=' ')
+    print("\n")
 
 class Upgrader:
     tag_set = set()
@@ -89,7 +90,7 @@ class Upgrader:
     legacy = {}
     def __init__(self, filename):
         self.filename = filename
-        execfile(filename, {}, self.__dict__)
+        exec(open(filename).read(), {}, self.__dict__)
 
         if not hasattr(self, 'tag'):
             self.tag = osp.basename(filename)[:-3]
@@ -99,7 +100,7 @@ class Upgrader:
             self.depends = [self.depends]
 
         if not isinstance(self.depends, list):
-            print "Error: 'depends' for %s is the wrong type" % self.tag
+            print("Error: 'depends' for {} is the wrong type".format(self.tag))
             sys.exit(1)
 
         if hasattr(self, 'fwd_depends'):
@@ -109,23 +110,25 @@ class Upgrader:
             self.fwd_depends = []
 
         if not isinstance(self.fwd_depends, list):
-            print "Error: 'fwd_depends' for %s is the wrong type" % self.tag
+            print("Error: 'fwd_depends' for {} is the wrong type".format(
+                self.tag))
             sys.exit(1)
 
         if hasattr(self, 'upgrader'):
             if not isinstance(self.upgrader, types.FunctionType):
-                print "Error: 'upgrader' for %s is %s, not function" \
-                    % (self.tag, type(self))
+                print("Error: 'upgrader' for {} is {}, not function".format(
+                    self.tag, type(self)))
                 sys.exit(1)
             Upgrader.tag_set.add(self.tag)
         elif hasattr(self, 'downgrader'):
             if not isinstance(self.downgrader, types.FunctionType):
-                print "Error: 'downgrader' for %s is %s, not function" \
-                    % (self.tag, type(self))
+                print("Error: 'downgrader' for {} is {}, not function".format(
+                    self.tag, type(self)))
                 sys.exit(1)
             Upgrader.untag_set.add(self.tag)
         else:
-            print "Error: no upgrader or downgrader method for", self.tag
+            print("Error: no upgrader or downgrader method for".format(
+                self.tag))
             sys.exit(1)
 
         if hasattr(self, 'legacy_version'):
@@ -170,14 +173,14 @@ class Upgrader:
         for tag, upg in Upgrader.by_tag.items():
             for fd in upg.fwd_depends:
                 if fd not in Upgrader.by_tag:
-                    print "Error: '%s' cannot (forward) depend on "\
-                          "nonexistent tag '%s'" % (fd, tag)
+                    print("Error: '{}' cannot (forward) depend on "
+                          "nonexistent tag '{}'".format(fd, tag))
                     sys.exit(1)
                 Upgrader.by_tag[fd].depends.append(tag)
             for dep in upg.depends:
                 if dep not in Upgrader.by_tag:
-                    print "Error: '%s' cannot depend on "\
-                          "nonexistent tag '%s'" % (tag, dep)
+                    print("Error: '{}' cannot depend on "
+                          "nonexistent tag '{}'".format(tag, dep))
                     sys.exit(1)
 
 def process_file(path, **kwargs):
@@ -191,7 +194,7 @@ def process_file(path, **kwargs):
         import shutil
         shutil.copyfile(path, path + '.bak')
 
-    cpt = ConfigParser.SafeConfigParser()
+    cpt = configparser.SafeConfigParser()
 
     # gem5 is case sensitive with paramaters
     cpt.optionxform = str
@@ -219,7 +222,7 @@ def process_file(path, **kwargs):
     elif cpt.has_option('Globals','version_tags'):
         tags = set((''.join(cpt.get('Globals','version_tags'))).split())
     else:
-        print "fatal: no version information in checkpoint"
+        print("fatal: no version information in checkpoint")
         exit(1)
 
     verboseprint("has tags", ' '.join(tags))
@@ -228,8 +231,8 @@ def process_file(path, **kwargs):
     # simulator support for its changes.
     unknown_tags = tags - (Upgrader.tag_set | Upgrader.untag_set)
     if unknown_tags:
-        print "warning: upgrade script does not recognize the following "\
-              "tags in this checkpoint:", ' '.join(unknown_tags)
+        print("warning: upgrade script does not recognize the following "
+              "tags in this checkpoint:", ' '.join(unknown_tags))
 
     # Apply migrations for tags not in checkpoint and tags present for which
     # downgraders are present, respecting dependences
@@ -237,8 +240,8 @@ def process_file(path, **kwargs):
     while to_apply:
         ready = set([ t for t in to_apply if Upgrader.get(t).ready(tags) ])
         if not ready:
-            print "could not apply these upgrades:", ' '.join(to_apply)
-            print "update dependences impossible to resolve; aborting"
+            print("could not apply these upgrades:", ' '.join(to_apply))
+            print("update dependences impossible to resolve; aborting")
             exit(1)
 
         for tag in ready:
@@ -278,14 +281,14 @@ if __name__ == '__main__':
     Upgrader.load_all()
 
     if options.get_cc_file:
-        print "// this file is auto-generated by util/cpt_upgrader.py"
-        print "#include <string>"
-        print "#include <set>"
+        print("// this file is auto-generated by util/cpt_upgrader.py")
+        print("#include <string>")
+        print("#include <set>")
         print
-        print "std::set<std::string> version_tags = {"
+        print("std::set<std::string> version_tags = {")
         for tag in Upgrader.tag_set:
-            print "  \"%s\"," % tag
-        print "};"
+            print("  \"{}\",".format(tag))
+        print("};")
         exit(0)
     elif len(args) != 1:
         parser.error("You must specify a checkpoint file to modify or a "\
@@ -312,8 +315,8 @@ if __name__ == '__main__':
         elif osp.isfile(cpt_file):
             process_file(cpt_file, **vars(options))
         else:
-            print "Error: checkpoint file not found at in %s " % path,
-            print "and recurse not specified"
+            print("Error: checkpoint file not found in {} ".format(path))
+            print("and recurse not specified")
             sys.exit(1)
     sys.exit(0)
 
index ce4b0738034c48458f78a74ff0c1a975f513066d..dbddc567ff8def4efe89359e7c6b063c81bdb6ab 100644 (file)
@@ -94,8 +94,8 @@ def upgrader(cpt):
             cpt.set(sec_dma, "buffer", "")
 
 
-    print "Warning: Assuming that the HDLCD pixel clock and global frequency " \
-        "are still using their default values."
+    print("Warning: Assuming that the HDLCD pixel clock and global frequency "
+        "are still using their default values.")
     sec_osc = "system.realview.realview_io.osc_pxl"
     global_tick = 1E12
     pxl_freq = 137E6
index 70359ddfad54b5bfa0b9d469e5fec098f9f06a34..f0174d59856b4a574773f9b2794682d440c86990 100644 (file)
@@ -7,7 +7,7 @@ def upgrader(cpt):
             if re.search('.*sys.*\.cpu.*\.isa$', sec):
                 mr = cpt.get(sec, 'miscRegs').split()
                 if len(mr) == 161:
-                    print "MISCREG_TEEHBR already seems to be inserted."
+                    print("MISCREG_TEEHBR already seems to be inserted.")
                 else:
                     mr.insert(51,0); # Add dummy value for MISCREG_TEEHBR
                     cpt.set(sec, 'miscRegs', ' '.join(str(x) for x in mr))
index 53fab7fd98a86174af795e206e02dff96d247c39..aa66045c883a226c4816a71760d215bd5dd68445 100644 (file)
@@ -23,7 +23,8 @@ def upgrader(cpt):
                 # Updating SVE misc registers (dummy values)
                 mr = cpt.get(sec, 'miscRegs').split()
                 if len(mr) == 820:
-                    print "MISCREG_SVE registers already seems to be inserted."
+                    print("MISCREG_SVE registers already seems "
+                          "to be inserted.")
                 else:
                     # Replace MISCREG_FREESLOT_1 with MISCREG_ID_AA64ZFR0_EL1
                     mr[-1] = 0;
index 4e4e2a3766b3668cf31fd5244e4677692846cc87..1bb4c2bdd8cd4e9ace563a729a6349ccae19971a 100644 (file)
@@ -3,10 +3,10 @@ def upgrader(cpt):
     if cpt.get('root','isa') != 'arm':
         return
     import re
-    print "Warning: The size of the FP register file has changed. "\
-          "To get similar results you need to adjust the number of "\
-          "physical registers in the CPU you're restoring into by "\
-          "NNNN."
+    print("Warning: The size of the FP register file has changed. "
+          "To get similar results you need to adjust the number of "
+          "physical registers in the CPU you're restoring into by "
+          "NNNN.")
     # Find the CPU context's and upgrade their registers
     for sec in cpt.sections():
         re_xc_match = re.match('^.*?sys.*?\.cpu(\d+)*\.xc\.*', sec)
index bd07a100d2e6ea652290add8e0b1756f4447f40f..db465d512c31a9d805a1a26fcb854360e0567b99 100644 (file)
@@ -12,6 +12,6 @@ def upgrader(cpt):
                 cpt.set(sec, '_size', '0')
                 cpt.set(sec, 'lruSeq', '0')
     else:
-        print "ISA is not x86"
+        print("ISA is not x86")
 
 legacy_version = 6
diff --git a/util/dockerfiles/python3/Dockerfile b/util/dockerfiles/python3/Dockerfile
deleted file mode 100644 (file)
index 2529f36..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (c) 2020 The Regents of the University of California
-# All Rights Reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer;
-# redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution;
-# neither the name of the copyright holders nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-FROM ubuntu:18.04
-
-RUN apt -y update
-RUN apt -y upgrade
-RUN apt -y install build-essential git m4 scons zlib1g zlib1g-dev \
-    libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev \
-    python-dev python python3-dev python3.6 python-six python3-venv
-
-ENV VIRTUAL_ENV "/venv"
-RUN python3 -m venv $VIRTUAL_ENV
-ENV PATH "$VIRTUAL_ENV/bin:$PATH"
index 95923f5d9a3664d5c0fd65a4821e191902378259..95511a8a83f986a01c0156b36ebfd8df3edcfc1c 100644 (file)
@@ -30,5 +30,5 @@ RUN apt -y update
 RUN apt -y upgrade
 RUN apt -y install build-essential git m4 scons zlib1g zlib1g-dev \
     libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev \
-    python-dev python python-pip doxygen
-RUN pip install six
+    python-dev python python-six doxygen libboost-all-dev libhdf5-serial-dev \
+    python-pydot libpng-dev
diff --git a/util/dockerfiles/ubuntu-20.04_all-dependencies/Dockerfile b/util/dockerfiles/ubuntu-20.04_all-dependencies/Dockerfile
new file mode 100644 (file)
index 0000000..814ef75
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright (c) 2020 The Regents of the University of California
+# All Rights Reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+FROM ubuntu:20.04
+
+ENV DEBIAN_FRONTEND=noninteractive
+RUN apt -y update
+RUN apt -y upgrade
+RUN apt -y install build-essential git m4 scons zlib1g zlib1g-dev \
+    libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev \
+    python3-dev python3-six python-is-python3 doxygen libboost-all-dev \
+    libhdf5-serial-dev python3-pydot libpng-dev
index 23270bcadf3535495d760f2e1b32792beceeffa0..92e8100be3f79c451d5830738c2d767108d7cec3 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
 #
 # Copyright (c) 2019 Inria
 # All rights reserved
index 15109498ea5942eed2580af27603174ce5d443e8..b6d124abba08a2396f9ac37bfefc0d24a903c8c3 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
 #
 # Copyright (c) 2016 ARM Limited
 # All rights reserved
@@ -35,6 +35,8 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+from __future__ import print_function
+
 from tempfile import TemporaryFile
 import os
 import subprocess
@@ -66,7 +68,7 @@ staged_mismatch = set()
 
 for status, fname in git.status(filter="MA", cached=True):
     if args.verbose:
-        print "Checking %s..." % fname
+        print("Checking {}...".format(fname))
     if check_ignores(fname):
         continue
     if status == "M":
@@ -77,7 +79,7 @@ for status, fname in git.status(filter="MA", cached=True):
     # Show they appropriate object and dump it to a file
     status = git.file_from_index(fname)
     f = TemporaryFile()
-    f.write(status)
+    f.write(status.encode())
 
     verifiers = [ v(ui, opts, base=repo_base) for v in all_verifiers ]
     for v in verifiers:
@@ -93,22 +95,25 @@ for status, fname in git.status(filter="MA", cached=True):
 
 if failing_files:
     if len(failing_files) > len(staged_mismatch):
-        print >> sys.stderr
-        print >> sys.stderr, "Style checker failed for the following files:"
+        print("\n", file=sys.stderr)
+        print("Style checker failed for the following files:", file=sys.stderr)
         for f in failing_files:
             if f not in staged_mismatch:
-                print >> sys.stderr, "\t%s" % f
-        print >> sys.stderr
-        print >> sys.stderr, \
-        "Please run the style checker manually to fix the offending files.\n" \
-        "To check your modifications, run: util/style.py -m"
+                print("\t{}".format(f), file=sys.stderr)
+        print("\n", file=sys.stderr)
+        print(
+            "Please run the style checker manually to fix "
+            "the offending files.\n"
+            "To check your modifications, run: util/style.py -m",
+            file=sys.stderr)
 
-    print >> sys.stderr
+    print("\n", file=sys.stderr)
     if staged_mismatch:
-        print >> sys.stderr, \
-        "It looks like you have forgotten to stage your fixes for commit in\n"\
-        "the following files: "
+        print(
+            "It looks like you have forgotten to stage your "
+            "fixes for commit in\n"
+            "the following files: ", file=sys.stderr)
         for f in staged_mismatch:
-            print >> sys.stderr, "\t%s" % f
-        print >> sys.stderr, "Please `git --add' them"
+            print("\t%s".format(f), file=sys.stderr)
+        print("Please `git --add' them", file=sys.stderr)
     sys.exit(1)
index 4ffa7e02816da7e0a4e77e939d67fa40d495e5d8..40d0c6f28db23373a2045392502aa31150aec99d 100644 (file)
@@ -77,7 +77,7 @@ hash_bang = (
     )
 
 # the list of all languages that we detect
-all_languages = frozenset(lang_types.itervalues())
+all_languages = frozenset(lang_types.values())
 all_languages |= frozenset(lang for start,lang in lang_prefixes)
 all_languages |= frozenset(lang for start,lang in hash_bang)
 
@@ -104,7 +104,7 @@ def lang_type(filename, firstline=None, openok=True):
     # if a first line was not provided but the file is ok to open,
     # grab the first line of the file.
     if firstline is None and openok:
-        handle = file(filename, 'r')
+        handle = open(filename, 'r')
         firstline = handle.readline()
         handle.close()
 
@@ -173,7 +173,7 @@ def update_file(dst, src, language, mutator):
             mode = 'r+'
         else:
             mode = 'r'
-        src = file(src, mode)
+        src = open(src, mode)
 
     orig_lines = []
 
@@ -196,7 +196,7 @@ def update_file(dst, src, language, mutator):
     elif isinstance(dst, str):
         # if we're not updating in place and a destination file name
         # was provided, create a file object
-        dst = file(dst, 'w')
+        dst = open(dst, 'w')
 
     for line in new_lines:
         dst.write(line)
index f4e12c52ada8e7f32a6acdba97c8901ed3beaa63..ce00680357da505a1eb790f27d266dd29883900a 100644 (file)
@@ -57,8 +57,8 @@ class Region(tuple):
             args = tuple(arg)
 
         if len(args) != 2:
-            raise AttributeError, \
-                "Only one or two arguments allowed, %d provided" % (alen, )
+            raise(AttributeError, \
+                "Only one or two arguments allowed, %d provided" % (alen, ))
 
         return tuple.__new__(cls, args)
 
@@ -239,13 +239,13 @@ if __name__ == '__main__':
     n = Region(9,10)
 
     def test(left, right):
-        print "%s == %s: %s" % (left, right, left == right)
-        print "%s != %s: %s" % (left, right, left != right)
-        print "%s <  %s: %s" % (left, right, left <  right)
-        print "%s <= %s: %s" % (left, right, left <= right)
-        print "%s >  %s: %s" % (left, right, left >  right)
-        print "%s >= %s: %s" % (left, right, left >= right)
-        print
+        print("%s == %s: %s" % (left, right, left == right))
+        print("%s != %s: %s" % (left, right, left != right))
+        print("%s <  %s: %s" % (left, right, left <  right))
+        print("%s <= %s: %s" % (left, right, left <= right))
+        print("%s >  %s: %s" % (left, right, left >  right))
+        print("%s >= %s: %s" % (left, right, left >= right))
+        print("\n")
 
     test(neg_inf, neg_inf)
     test(neg_inf, pos_inf)
@@ -268,14 +268,14 @@ if __name__ == '__main__':
     test(-11111, pos_inf)
     test(11111, pos_inf)
 
-    print x
-    print y
-    print x & y
-    print z
-
-    print 4 in x
-    print 4 in z
-    print 5 not in x
-    print 6 not in z
-    print z in y
-    print n in y, n not in y
+    print(x)
+    print(y)
+    print(x & y)
+    print(z)
+
+    print(4 in x)
+    print(4 in z)
+    print(5 not in x)
+    print(6 not in z)
+    print(z in y)
+    print(n in y, n not in y)
index acf59ce80ff640a5b028f6c708a98651d6c25862..a0eee98fac7a3c56205bd89fd5e6f2c7cb7e3706 100644 (file)
@@ -39,8 +39,8 @@ from abc import *
 import os
 import subprocess
 
-from region import *
-from style import modified_regions
+from .region import *
+from .style import modified_regions
 
 class AbstractRepo(object):
     __metaclass__ = ABCMeta
@@ -118,7 +118,8 @@ class GitRepo(AbstractRepo):
     def repo_base(self):
         if self._repo_base is None:
             self._repo_base = subprocess.check_output(
-                [ self.git, "rev-parse", "--show-toplevel" ]).rstrip("\n")
+                [ self.git, "rev-parse", "--show-toplevel" ]) \
+                .decode().rstrip("\n")
 
         return self._repo_base
 
@@ -159,7 +160,7 @@ class GitRepo(AbstractRepo):
         try:
             self._head_revision = subprocess.check_output(
                 [ self.git, "rev-parse", "--verify", "HEAD" ],
-                stderr=subprocess.PIPE).rstrip("\n")
+                stderr=subprocess.PIPE).decode().rstrip("\n")
         except subprocess.CalledProcessError:
             # Assume that the repo is empty and use the semi-magic
             # empty tree revision if git rev-parse returned an error.
@@ -185,7 +186,7 @@ class GitRepo(AbstractRepo):
         if filter:
             cmd += [ "--diff-filter=%s" % filter ]
         cmd += [ self.head_revision(), "--" ] + files
-        status = subprocess.check_output(cmd).rstrip("\n")
+        status = subprocess.check_output(cmd).decode().rstrip("\n")
 
         if status:
             return [ f.split("\t") for f in status.split("\n") ]
@@ -194,11 +195,12 @@ class GitRepo(AbstractRepo):
 
     def file_from_index(self, name):
         return subprocess.check_output(
-            [ self.git, "show", ":%s" % (name, ) ])
+            [ self.git, "show", ":%s" % (name, ) ]).decode()
 
     def file_from_head(self, name):
         return subprocess.check_output(
-            [ self.git, "show", "%s:%s" % (self.head_revision(), name) ])
+            [ self.git, "show", "%s:%s" % (self.head_revision(), name) ]) \
+            .decode()
 
 class MercurialRepo(AbstractRepo):
     def __init__(self):
@@ -208,7 +210,7 @@ class MercurialRepo(AbstractRepo):
     def repo_base(self):
         if self._repo_base is None:
             self._repo_base = subprocess.check_output(
-                [ self.hg, "root" ]).rstrip("\n")
+                [ self.hg, "root" ]).decode().rstrip("\n")
 
         return self._repo_base
 
@@ -233,14 +235,16 @@ class MercurialRepo(AbstractRepo):
         return modified_regions(old, new, context=context)
 
     def status(self, filter=None):
-        files = subprocess.check_output([ self.hg, "status" ]).rstrip("\n")
+        files = subprocess.check_output([ self.hg, "status" ]) \
+            .decode().rstrip("\n")
         if files:
             return [ f.split(" ") for f in files.split("\n") ]
         else:
             return []
 
     def file_from_tip(self, name):
-        return subprocess.check_output([ self.hg, "cat", name ])
+        return subprocess.check_output([ self.hg, "cat", name ]) \
+            .decode()
 
 def detect_repo(path="."):
     """Auto-detect the revision control system used for a source code
index f2f929c09b41c84c618d7fc0283e6b085ba6212f..ab0bb5fea552075051d6397faa0d6305fb59205d 100644 (file)
@@ -42,7 +42,7 @@ import os
 import re
 import sys
 
-from file_types import *
+from .file_types import *
 
 cpp_c_headers = {
     'assert.h' : 'cassert',
@@ -314,6 +314,6 @@ if __name__ == '__main__':
         for filename,language in find_files(base, languages=opts.languages,
                 file_ignore=opts.file_ignore, dir_ignore=opts.dir_ignore):
             if opts.dry_run:
-                print "%s: %s" % (filename, language)
+                print("{}: {}".format(filename, language))
             else:
                 update_file(filename, filename, language, SortIncludes())
index 68c77a7c027ea73f1365d8b92ded5bffaf16c831..c505dafeafd87600033392ceff4ed1bf9cea8e0b 100644 (file)
@@ -44,7 +44,7 @@ import difflib
 import re
 import sys
 
-from region import *
+from .region import *
 
 tabsize = 8
 lead = re.compile(r'^([ \t]+)')
index c2217d56b9557a6bf3c6839273551019ec916385..00cf0705ca2e78bd816f3a9fadd7c8a150fc58d7 100644 (file)
@@ -47,10 +47,12 @@ import os
 import re
 import sys
 
-import style
-import sort_includes
-from region import *
-from file_types import lang_type
+from six import add_metaclass
+
+from . import style
+from . import sort_includes
+from .region import *
+from .file_types import lang_type
 
 
 def safefix(fix_func):
@@ -100,6 +102,7 @@ def _modified_regions(old, new):
     return regions
 
 
+@add_metaclass(ABCMeta)
 class Verifier(object):
     """Base class for style verifiers
 
@@ -117,7 +120,6 @@ class Verifier(object):
 
     """
 
-    __metaclass__ = ABCMeta
 
     def __init__(self, ui, opts, base=None):
         self.ui = ui
@@ -144,9 +146,9 @@ class Verifier(object):
 
     def open(self, filename, mode):
         try:
-            f = file(filename, mode)
-        except OSError, msg:
-            print 'could not open file %s: %s' % (filename, msg)
+            f = open(filename, mode)
+        except OSError as msg:
+            print('could not open file {}: {}'.format(filename, msg))
             return None
 
         return f
@@ -222,11 +224,12 @@ class Verifier(object):
         """
         pass
 
+@add_metaclass(ABCMeta)
 class LineVerifier(Verifier):
     def check(self, filename, regions=all_regions, fobj=None, silent=False):
         close = False
         if fobj is None:
-            fobj = self.open(filename, 'r')
+            fobj = self.open(filename, 'rb')
             close = True
 
         lang = lang_type(filename)
@@ -236,13 +239,13 @@ class LineVerifier(Verifier):
         for num,line in enumerate(fobj):
             if num not in regions:
                 continue
-            line = line.rstrip('\n')
-            if not self.check_line(line, language=lang):
+            s_line = line.decode().rstrip('\n')
+            if not self.check_line(s_line, language=lang):
                 if not silent:
                     self.ui.write("invalid %s in %s:%d\n" % \
                                   (self.test_name, filename, num + 1))
                     if self.ui.verbose:
-                        self.ui.write(">>%s<<\n" % line[:-1])
+                        self.ui.write(">>%s<<\n" % s_line[:-1])
                 errors += 1
         if close:
             fobj.close()
@@ -348,7 +351,7 @@ class SortedIncludes(Verifier):
             close = True
         norm_fname = self.normalize_filename(filename)
 
-        old = [ l.rstrip('\n') for l in fobj.xreadlines() ]
+        old = [ l.decode().rstrip('\n') for l in fobj ]
         if close:
             fobj.close()
 
@@ -428,14 +431,14 @@ class ControlCharacters(LineVerifier):
     test_name = 'control character'
     opt_name = 'ascii'
 
-    valid = ('\n', '\t')
-    invalid = "".join([chr(i) for i in range(0, 0x20) if chr(i) not in valid])
+    invalid = "".join([chr(i) for i in range(0, 0x20) \
+        if chr(i) not in ('\n', '\t')])
 
     def check_line(self, line, **kwargs):
         return self.fix_line(line) == line
 
     def fix_line(self, line, **kwargs):
-        return line.translate(None, ControlCharacters.invalid)
+        return ''.join(c for c in line if c not in ControlCharacters.invalid)
 
 class BoolCompare(LineVerifier):
     languages = set(('C', 'C++', 'python'))