You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
1
(6) |
2
(3) |
3
|
4
(3) |
5
(10) |
6
(4) |
7
(5) |
|
8
(1) |
9
(3) |
10
(11) |
11
(18) |
12
(13) |
13
(4) |
14
(11) |
|
15
(12) |
16
(6) |
17
(1) |
18
(13) |
19
(14) |
20
(12) |
21
(3) |
|
22
(17) |
23
(18) |
24
(17) |
25
(24) |
26
(15) |
27
(7) |
28
(23) |
|
29
(31) |
|
|
|
|
|
|
|
From: Nicholas N. <nj...@ca...> - 2004-02-01 17:30:06
|
CVS commit by nethercote:
Killed the terminally wounded --stop-after option.
M +2 -3 FAQ.txt 1.20
M +0 -1 coregrind/Makefile.am 1.65
M +2 -31 coregrind/vg_include.h 1.179
M +2 -70 coregrind/vg_main.c 1.144
M +1 -30 coregrind/vg_scheduler.c 1.141
M +0 -22 coregrind/vg_translate.c 1.69
M +0 -7 coregrind/docs/coregrind_core.html 1.26
R coregrind/vg_startup.S 1.22
--- valgrind/FAQ.txt #1.19:1.20
@@ -200,7 +200,6 @@
As of 1.9.6, Valgrind only uses these variables with
- --trace-children=no, when executing execve() or using the
- --stop-after=yes flag. This should reduce the potential for
- problems.
+ --trace-children=no or when executing execve(). This should
+ reduce the potential for problems.
-----------------------------------------------------------------
--- valgrind/coregrind/Makefile.am #1.64:1.65
@@ -64,5 +64,4 @@
vg_dummy_profile.c \
vg_signals.c \
- vg_startup.S \
vg_symtab2.c \
vg_dwarf.c \
--- valgrind/coregrind/vg_include.h #1.178:1.179
@@ -244,6 +244,4 @@ extern Bool VG_(clo_trace_sched);
(some), 2 (all) */
extern Int VG_(clo_trace_pthread_level);
-/* Stop after this many basic blocks. default: Infinity. */
-extern ULong VG_(clo_stop_after);
/* Display gory details for the k'th most popular error. default:
Infinity. */
@@ -823,5 +821,5 @@ typedef
Although the segment registers are 16 bits long, storage
- management here, in VG_(baseBlock) and in VG_(m_state_static) is
+ management here and in VG_(baseBlock) is
simplified if we pretend they are 32 bits. */
UInt m_cs;
@@ -911,6 +909,4 @@ typedef
VgSrc_ExitSyscall, /* client called exit(). This is the normal
route out. */
- VgSrc_BbsDone, /* In a debugging run, the specified number of
- bbs has been completed. */
VgSrc_FatalSig /* Killed by the default action of a fatal
signal */
@@ -1337,5 +1333,5 @@ extern Addr VG_(code_redirect) (Addr o
/* Is this a SSE/SSE2-capable CPU? If so, we had better save/restore
the SSE state all over the place. This is set up very early, in
- vg_startup.S. We have to determine it early since we can't even
+ main(). We have to determine it early since we can't even
correctly snapshot the startup machine state without it. */
extern Bool VG_(have_ssestate);
@@ -1373,23 +1369,4 @@ extern Int VG_(clexecfd);
extern const Char *VG_(libdir);
-/* A structure used as an intermediary when passing the simulated
- CPU's state to VG_(switch_to_real_CPU)(), for --stop-after=yes.
- Stuff is copied from baseBlock to here, because it's much easier
- to copy the state into the real registers from this structure than
- the baseBlock, because it's layout is simpler.
- Alignment: the SSE state must be 16-byte aligned. We ask for the whole
- struct to be 16-byte aligned, and the SSE state starts at the 6+8+1+1th
- == 16th word, so it too must be 16-byte aligned. Consequence: change
- this struct only _very carefully_ ! See also above comment re masking
- MXCSR.
-*/
-__attribute__ ((aligned (16)))
-extern UInt VG_(m_state_static) [6 /* segment regs, Intel order */
- + 8 /* int regs, in Intel order */
- + 1 /* %eflags */
- + 1 /* %eip */
- + VG_SIZE_OF_SSESTATE_W /* SSE state */
- ];
-
/* Determine if %esp adjustment must be noted */
extern Bool VG_(need_to_handle_esp_assignment) ( void );
@@ -1644,10 +1621,4 @@ extern Int VG_(clone) ( Int (*fn)(void *
/* ---------------------------------------------------------------------
- Exports of vg_startup.S
- ------------------------------------------------------------------ */
-
-extern void VG_(switch_to_real_CPU) ( void );
-
-/* ---------------------------------------------------------------------
Exports of vg_dispatch.S
------------------------------------------------------------------ */
--- valgrind/coregrind/vg_main.c #1.143:1.144
@@ -164,6 +164,4 @@ UInt VG_(dispatch_ctr);
/* 64-bit counter for the number of basic blocks done. */
ULong VG_(bbs_done);
-/* 64-bit counter for the number of bbs to go before a debug exit. */
-ULong VG_(bbs_to_go);
/* This is the ThreadId of the last thread the scheduler ran. */
@@ -1426,5 +1424,4 @@ Bool VG_(clo_trace_symtab) = False;
Bool VG_(clo_trace_sched) = False;
Int VG_(clo_trace_pthread_level) = 0;
-ULong VG_(clo_stop_after) = 1000000000000000LL;
Int VG_(clo_dump_error) = 0;
Int VG_(clo_backtrace_size) = 4;
@@ -1529,6 +1526,4 @@ void usage ( Bool debug_help )
" --trace-sched=no|yes show thread scheduler details? [no]\n"
" --trace-pthread=none|some|all show pthread event details? [none]\n"
-" --stop-after=<number> switch to real CPU after executing\n"
-" <number> basic blocks [infinity]\n"
" --wait-for-gdb=yes|no pause on startup to wait for gdb attach\n"
"\n"
@@ -1861,7 +1856,4 @@ static void process_cmd_line_options
VG_(clo_lowlat_syscalls) = False;
- else if (VG_CLO_STREQN(13, arg, "--stop-after="))
- VG_(clo_stop_after) = VG_(atoll)(&arg[13]);
-
else if (VG_CLO_STREQN(13, arg, "--dump-error="))
VG_(clo_dump_error) = (Int)VG_(atoll)(&arg[13]);
@@ -2059,6 +2051,4 @@ static void process_cmd_line_options
" as it doesn't generate errors.");
}
-
- VG_(bbs_to_go) = VG_(clo_stop_after);
}
@@ -2099,5 +2089,5 @@ static void setup_file_descriptors(void)
/*====================================================================*/
-/*=== m_state_static + baseBlock: definition, setup, copying ===*/
+/*=== baseBlock: definition + setup ===*/
/*====================================================================*/
@@ -2189,13 +2179,4 @@ Int VG_(noncompact_helper_offsets)[MAX_
UInt VG_(baseBlock)[VG_BASEBLOCK_WORDS];
-/* See comment about this in vg_include.h. Change only with great care. */
-__attribute__ ((aligned (16)))
-UInt VG_(m_state_static) [6 /* segment regs, Intel order */
- + 8 /* int regs, in Intel order */
- + 1 /* %eflags */
- + 1 /* %eip */
- + VG_SIZE_OF_SSESTATE_W /* FPU state */
- ];
-
/* Words. */
static Int baB_off = 0;
@@ -2225,34 +2206,4 @@ Int VG_(extractDflag)(UInt eflags)
}
-static void copy_baseBlock_to_m_state_static( void )
-{
- Int i;
- VG_(m_state_static)[ 0/4] = VG_(baseBlock)[VGOFF_(m_cs)];
- VG_(m_state_static)[ 4/4] = VG_(baseBlock)[VGOFF_(m_ss)];
- VG_(m_state_static)[ 8/4] = VG_(baseBlock)[VGOFF_(m_ds)];
- VG_(m_state_static)[12/4] = VG_(baseBlock)[VGOFF_(m_es)];
- VG_(m_state_static)[16/4] = VG_(baseBlock)[VGOFF_(m_fs)];
- VG_(m_state_static)[20/4] = VG_(baseBlock)[VGOFF_(m_gs)];
-
- VG_(m_state_static)[24/4] = VG_(baseBlock)[VGOFF_(m_eax)];
- VG_(m_state_static)[28/4] = VG_(baseBlock)[VGOFF_(m_ecx)];
- VG_(m_state_static)[32/4] = VG_(baseBlock)[VGOFF_(m_edx)];
- VG_(m_state_static)[36/4] = VG_(baseBlock)[VGOFF_(m_ebx)];
- VG_(m_state_static)[40/4] = VG_(baseBlock)[VGOFF_(m_esp)];
- VG_(m_state_static)[44/4] = VG_(baseBlock)[VGOFF_(m_ebp)];
- VG_(m_state_static)[48/4] = VG_(baseBlock)[VGOFF_(m_esi)];
- VG_(m_state_static)[52/4] = VG_(baseBlock)[VGOFF_(m_edi)];
-
- VG_(m_state_static)[56/4]
- = VG_(insertDflag)(VG_(baseBlock)[VGOFF_(m_eflags)],
- VG_(baseBlock)[VGOFF_(m_dflag)]);
- VG_(m_state_static)[60/4] = VG_(baseBlock)[VGOFF_(m_eip)];
-
- for (i = 0; i < VG_SIZE_OF_SSESTATE_W; i++)
- VG_(m_state_static)[64/4 + i]
- = VG_(baseBlock)[VGOFF_(m_ssestate) + i];
-}
-
-
/* Returns the offset, in words. */
static Int alloc_BaB ( Int words )
@@ -2873,5 +2824,5 @@ int main(int argc, char **argv)
//--------------------------------------------------------------
- // Set up baseBlock, copy machine state (m_state_static)
+ // Set up baseBlock
// p: {pre,post}_clo_init() [for tool helper registration]
// load_client() [for 'client_eip']
@@ -3105,23 +3056,4 @@ int main(int argc, char **argv)
break;
- case VgSrc_BbsDone:
- /* Tricky; we have to try and switch back to the real CPU.
- This is all very dodgy and won't work at all in the
- presence of threads, or if the client happened to be
- running a signal handler. */
- /* Prepare to restore state to the real CPU. */
- VG_(sigshutdown_actions)();
- VG_(load_thread_state)(1 /* root thread */ );
- copy_baseBlock_to_m_state_static();
-
- VG_(proxy_shutdown)();
-
- /* This pushes a return address on the simulator's stack,
- which is abandoned. We call vg_sigshutdown_actions() at
- the end of vg_switch_to_real_CPU(), so as to ensure that
- the original stack and machine state is restored before
- the real signal mechanism is restored. */
- VG_(switch_to_real_CPU)();
-
case VgSrc_FatalSig:
/* We were killed by a fatal signal, so replicate the effect */
--- valgrind/coregrind/vg_scheduler.c #1.140:1.141
@@ -518,5 +518,4 @@ UInt run_thread_for_a_while ( ThreadId t
vg_assert(VG_(is_valid_tid)(tid));
vg_assert(VG_(threads)[tid].status == VgTs_Runnable);
- vg_assert(VG_(bbs_to_go) > 0);
vg_assert(!VG_(scheduler_jmpbuf_valid));
@@ -902,8 +901,4 @@ VgSchedReturnCode VG_(scheduler) ( void
threads but some are blocked on I/O. */
- /* Was a debug-stop requested? */
- if (VG_(bbs_to_go) == 0)
- goto debug_stop;
-
/* Do the following loop until a runnable thread is found, or
deadlock is detected. */
@@ -997,8 +992,5 @@ VgSchedReturnCode VG_(scheduler) ( void
always get at least one decrement even if nothing happens.
*/
- if (VG_(bbs_to_go) >= VG_SCHEDULING_QUANTUM)
VG_(dispatch_ctr) = VG_SCHEDULING_QUANTUM + 1;
- else
- VG_(dispatch_ctr) = (UInt)VG_(bbs_to_go) + 1;
/* ... and remember what we asked for. */
@@ -1187,5 +1179,4 @@ VgSchedReturnCode VG_(scheduler) ( void
done_this_time = (Int)dispatch_ctr_SAVED - (Int)VG_(dispatch_ctr) - 1;
vg_assert(done_this_time >= 0);
- VG_(bbs_to_go) -= (ULong)done_this_time;
VG_(bbs_done) += (ULong)done_this_time;
@@ -1208,7 +1199,4 @@ VgSchedReturnCode VG_(scheduler) ( void
simply by doing nothing, causing us to arrive back at
Phase 1. */
- if (VG_(bbs_to_go) == 0) {
- goto debug_stop;
- }
break;
@@ -1217,7 +1205,4 @@ VgSchedReturnCode VG_(scheduler) ( void
simply by doing nothing, causing us to arrive back at
Phase 1. */
- if (VG_(bbs_to_go) == 0) {
- goto debug_stop;
- }
vg_assert(VG_(dispatch_ctr) == 0);
break;
@@ -1257,18 +1242,4 @@ VgSchedReturnCode VG_(scheduler) ( void
VG_(core_panic)("scheduler: post-main-loop ?!");
/* NOTREACHED */
-
- debug_stop:
- /* If we exited because of a debug stop, print the translation
- of the last block executed -- by translating it again, and
- throwing away the result. */
- VG_(printf)(
- "======vvvvvvvv====== LAST TRANSLATION ======vvvvvvvv======\n");
- VG_(translate)( tid,
- VG_(threads)[tid].m_eip, NULL, NULL, NULL, NULL );
- VG_(printf)("\n");
- VG_(printf)(
- "======^^^^^^^^====== LAST TRANSLATION ======^^^^^^^^======\n");
-
- return VgSrc_BbsDone;
}
--- valgrind/coregrind/vg_translate.c #1.68:1.69
@@ -1510,26 +1510,4 @@ static void vg_improve ( UCodeBlock* cb
FlagSet future_dead_flags;
-# if 0
- /* DEBUGGING HOOK */
- {
- static int n_done=0;
- if (VG_(clo_stop_after) > 1000000000) {
- if (n_done > (VG_(clo_stop_after) - 1000000000)) {
- dis=False;
- VG_(clo_trace_codegen) = 0;
- return;
- }
- if (n_done == (VG_(clo_stop_after) - 1000000000)) {
- VG_(printf)("\n");
- VG_(pp_UCodeBlock) ( cb, "Incoming:" );
- dis = True;
- VG_(clo_trace_codegen) = 31;
- }
- n_done++;
- }
- }
- /* end DEBUGGING HOOK */
-# endif /* 0 */
-
if (dis)
VG_(printf) ("Improvements:\n");
--- valgrind/coregrind/docs/coregrind_core.html #1.25:1.26
@@ -925,11 +925,4 @@
<p>
- <li><code>--stop-after=<number></code>
- [default: infinity, more or less]
- <p>After <number> basic blocks have been executed, shut down
- Valgrind and switch back to running the client on the real CPU.
- </li><br>
- <p>
-
<li><code>--dump-error=<number></code> [default: inactive]
<p>After the program has exited, show gory details of the
|
|
From: Nicholas N. <nj...@ca...> - 2004-02-01 14:59:42
|
CVS commit by nethercote: tweak M +1 -1 contact.html 1.2 --- devel-home/valgrind/contact.html #1.1:1.2 @@ -12,5 +12,5 @@ <p> If you want to give detailed, general feedback, please fill out our -<a href="survey2">survey</a>. +<a href="surveys.html">survey</a>. <p> |
|
From: Nicholas N. <nj...@ca...> - 2004-02-01 14:58:50
|
CVS commit by nethercote: Minor tweaks; added ntop to users list M +4 -2 survey2 1.5 M +2 -1 surveys.html 1.5 M +3 -0 users.html 1.24 --- devel-home/valgrind/survey2 #1.4:1.5 @@ -8,6 +8,7 @@ # # - Your response is confidential; we won't make raw data public, only -# summaries. The only exception to this is if you answer "yes" to the -# question below about mentioning your project on the Valgrind website. +# summaries (which may include anonymous quotes). The only exception to this +# is if you answer "yes" to the question below about mentioning your project +# on the Valgrind website. # # - We have no plans to commercialize Valgrind. You can relax, that's not what @@ -268,4 +269,5 @@ # If so, please specify any information you gave in the previous answer that # you do *not* want mentioned (eg. "don't mention the development location"). +# We will not mention your name. --- devel-home/valgrind/surveys.html #1.4:1.5 @@ -13,5 +13,6 @@ Survey responses tell us what is good and bad about Valgrind, sate our curiosity about how it is used, and encourage us to continue our efforts. -By completing the survey, you are supporting Valgrind. +By completing the survey, you are supporting Valgrind, and helping us improve +it. <p> --- devel-home/valgrind/users.html #1.23:1.24 @@ -266,4 +266,7 @@ <dt><a href="http://synce.sf.net">SynCE</a> <dd>A WinCE communications layer. + +<dt><a href="http://www.ntop.org">ntop</a> +<dd>A network traffic probe that shows network usage. </dl> |
|
From: Nicholas N. <nj...@ca...> - 2004-02-01 13:34:08
|
On Sat, 31 Jan 2004, Jeremy Fitzhardinge wrote: > That doesn't really help. Just because you put them in weird-hacks, it > doesn't mean you don't have to document them (since it's probably a bug > that weird-hacks isn't properly documented in the usage message). I've > never particularly liked weird-hacks, and I don't think we should extend > it. It does help with the usage message, which is what I want to minimise. The amount of documentation in the manual doesn't worry me. > Perhaps we should just add a third set of options: --help-unusual, or > something. Yeah, sounds alright to me. Reducing the size of the descriptions for the unusual ones would help too; not easy, but could use the approach taken for --partial-loads-ok: "too hard to explain here; see manual" N |
|
From: Robert W. <rj...@du...> - 2004-02-01 06:29:39
|
> One thing I wasn't sure about: do I need to include a call to > fd_allowed()? Not every call to record_fd_opened() is preceded by one > (eg. fcntl()), although most are... maybe the missing ones are oversights= ? I don't know - that was something Jeremy put in, to check if the file descriptor is within the range allowed for use by the client. I think.=20 Jeremy? Help! Regards, Robert. --=20 Robert Walsh Amalgamated Durables, Inc. - "We don't make the things you buy." Email: rj...@du... |
|
From: Jeremy F. <je...@go...> - 2004-02-01 03:40:46
|
On Sat, 2004-01-31 at 14:58, Nicholas Nethercote wrote: > Of course, for backwards compatibility, we could let the old invocations > still work. The way --weird-hacks works internally would have to be > changed slightly, eg. into a bit-mask, because it currently only allows > one weird hack at a time. > > Comments? That doesn't really help. Just because you put them in weird-hacks, it doesn't mean you don't have to document them (since it's probably a bug that weird-hacks isn't properly documented in the usage message). I've never particularly liked weird-hacks, and I don't think we should extend it. Perhaps we should just add a third set of options: --help-unusual, or something. J |