Commit Graph

36 Commits

Author SHA1 Message Date
Marijn Haverbeke
880be6a940 Overhaul logging system in runtime
See https://github.com/graydon/rust/wiki/Logging-vision

The runtime logging categories are now treated in the same way as
modules in compiled code. Each domain now has a log_lvl that can be
used to restrict the logging from that domain (will be used to allow
logging to be restricted to a single domain).

Features dropped (can be brought back to life if there is interest):
  - Logger indentation
  - Multiple categories per log statement
  - I possibly broke some of the color code -- it confuses me
2011-04-19 16:57:13 +02:00
Marijn Haverbeke
f6be25a870 Update foregoing patches to leave rust_crate alone.
Apparently it can't live in the main binary, since on non-Linux
platforms, dynamics libs won't find symbols in the binary. This
removes the crate_map pointer from rust_crate again, and instead
passes it as an extra argument to rust_start. Rustboot doesn't pass
this argument, but supposedly that's okay as long as we don't actually
use it on that platform.
2011-04-18 16:21:49 +02:00
Marijn Haverbeke
148e6f7b00 Make log the log level configurable per module
This overloads the meaning of RUST_LOG to also allow
'module.submodule' or 'module.somethingelse=2' forms. The first turn
on all logging for a module (loglevel 3), the second sets its loglevel
to 2. Log levels are:

 0: Show only errors
 1: Errors and warnings
 2: Errors, warnings, and notes
 3: Everything, including debug logging

Right now, since we only have one 'log' operation, everything happens
at level 1 (warning), so the only meaningful thing that can be done
with the new RUST_LOG support is disable logging (=0) for some
modules.

TODOS:
 * Language support for logging at a specific level
 * Also add a log level field to tasks, query the current task as well
   as the current module before logging (log if one of them allows it)
 * Revise the C logging API to conform to this set-up (globals for
   per-module log level, query the task level before logging, stop
   using a global mask)

Implementation notes:

Crates now contain two extra data structures. A 'module map' that
contains names and pointers to the module-log-level globals for each
module in the crate that logs, and a 'crate map' that points at the
crate's module map, as well as at the crate maps of all external
crates it depends on. These are walked by the runtime (in
rust_crate.cpp) to set the currect log levels based on RUST_LOG.

These module log globals are allocated as-needed whenever a log
expression is encountered, and their location is hard-coded into the
logging code, which compares the current level to the log statement's
level, and skips over all logging code when it is lower.
2011-04-18 15:28:47 +02:00
Marijn Haverbeke
973023030e add -O2 when compiling rt, fix warnings triggered by optimizer 2011-04-08 00:41:52 +02:00
Lindsey Kuper
bcc104ce79 A first stab at the 'nbody' demo, with support for calling C sqrt(). 2011-03-25 00:15:56 -07:00
Marijn Haverbeke
ea5dc54c3f Add functionality for running external programs to the std lib
See lib/run_program.rs.
2011-03-14 14:57:13 -07:00
Graydon Hoare
af4d6ae76b Add ABI tagging to crates, adjust rustc output and runtime stack-frame setup so access to argv works. 2011-02-22 16:37:27 -08:00
Graydon Hoare
d55bee4417 Further corrections to the logging layer in runtime. 2011-01-14 16:50:37 -08:00
Graydon Hoare
fe1a4ab23c Change log buffer butes to a symbolic const in runtime. 2011-01-14 13:41:39 -08:00
Graydon Hoare
89946609f2 Support a special const-value refcount, use it for const strings. 2010-11-09 14:15:07 -08:00
Michael Bebenita
a493350eb5 Cleanup, refactoring, and some runtime tests. 2010-09-10 14:38:31 -07:00
Graydon Hoare
616b7afb72 Tidy up the sync dir, remove dead or mis-designed code in favour of OS primitives, switch rust_kernel to use a lock/signal pair and wait rather than spin. 2010-09-08 19:13:49 -07:00
Michael Bebenita
de611a3090 Lots of design changes around proxies and message passing. Made it so that domains can only talk to other domains via handles, and with the help of the rust_kernel. 2010-09-07 18:44:12 -07:00
Michael Bebenita
f8ff013e3c Added a few utility classes, cleaned up the include order of .h files, and started to make the Rust kernel own domain message queues rather than the Rust domains themselves. 2010-09-07 18:41:07 -07:00
Michael Bebenita
2c1ec6771b Lots of changes around memory managment in the Runtime. Added memory regions and fixed race caused by calling rust_srv::malloc() from multiple threads when sending messages. 2010-08-17 23:49:57 -07:00
Michael Bebenita
b40a9fa787 Pulled rust_srv in its own file. Some cleanup, and added varargs to assertion macros. 2010-08-16 15:05:57 -07:00
Michael Bebenita
988695a96c Added support for task sleeping in the scheduler. 2010-08-11 21:24:04 -07:00
Michael Bebenita
d584de7a37 Made ref_count a word sized value. 2010-08-11 16:08:45 -07:00
Michael Bebenita
5917ca3519 Fixed deadlock in the scheduler caused by condition variables. 2010-08-09 08:06:08 -07:00
Michael Bebenita
4641fcef61 Added peek() to ptr_vec. 2010-08-09 08:01:40 -07:00
Michael Bebenita
f65c885c83 Made ref_count signed to help detect negative ref_count bugs. 2010-08-09 08:00:04 -07:00
Michael Bebenita
4246d567b7 Move ports out into their own file, add data_message and make communication system use it (and proxies) instead of existing token scheme. 2010-07-28 20:30:29 -07:00
Michael Bebenita
e327aa5093 Teach task_owned and dom_owned to find their dom via consistent interface. 2010-07-28 20:30:29 -07:00
Michael Bebenita
6c0ce25dbf Move rust_cond. 2010-07-28 20:30:29 -07:00
Michael Bebenita
06b52b70db Fix typos in comments, delete obsolete comments and dead commented code. 2010-07-28 20:30:29 -07:00
Michael Bebenita
d786469785 Add a warning interface to rust_srv. 2010-07-28 20:30:28 -07:00
Roy Frostig
1730d2e037 Notify copy glue of dst-initialization and fix _vec.alloc issues in lib and runtime. Closes #109. 2010-07-22 17:47:32 -07:00
Graydon Hoare
7ff2094496 Back out too-platform-fussy bits in preempt-test work. I hate this test. 2010-07-22 15:39:41 -07:00
Graydon Hoare
0f220ecae9 Beat up on the preempt test a bit more, as it keeps hanging under valgrind. 2010-07-22 15:05:35 -07:00
Michael Bebenita
00d1465d13 Added a message passing system based on lock free queues for inter-thread communication. Channels now buffer on the sending side, and no longer require blocking when sending. Lots of other refactoring and bug fixes. 2010-07-19 14:05:18 -07:00
Graydon Hoare
b1eeb9b825 Change from 'spawner' to 'supervisor' in rust_task, and add an unsupervise call. 2010-07-05 14:43:40 -07:00
Graydon Hoare
5abc483d9a Move more of the GC logic into the runtime. 2010-06-28 18:53:43 -07:00
Graydon Hoare
37426e42cf Add sever-glue, for missing first stage of sweep. 2010-06-25 21:57:46 -07:00
Graydon Hoare
eed5c0aa24 Add rust_task::gc(size_t args) method that drops us back into the GC glue. 2010-06-25 16:54:03 -07:00
Graydon Hoare
67d1f0a9aa Emit gc glue and rearrange crate glue offsets slightly to have a regular order. 2010-06-25 15:43:55 -07:00
Graydon Hoare
d6b7c96c3e Populate tree. 2010-06-23 21:03:09 -07:00