#
076b64e8 |
|
12-Mar-2024 |
Andrew Turner <andrew@FreeBSD.org> |
sys/ddb: Add hardware breakpoint support to ddb As with hardware watchpoints add support for hardware breakpoints. The command is only enabled on architectures that report support for them. Currently no architectures do, however arm64 will add support in a future change. Reviewed by: jhb (earlier version) Sponsored by: Arm Ltd Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D22191
|
#
c21bc6f3 |
|
21-Mar-2024 |
Bojan Novković <bnovkov@FreeBSD.org> |
ddb: Add CTF-based pretty printing Add basic CTF support and a CTF-powered pretty-printer to ddb. The db_ctf.* files expose a basic interface for fetching type data for ELF symbols, interacting with the CTF string table, and translating type identifiers to type data. The db_pprint.c file uses those interfaces to implement a pretty-printer for all kernel ELF symbols. The pretty-printer works with symbol names and arbitrary addresses: pprint struct thread 0xffffffff8194ad90 Pretty-printing currently only works after the root filesystem gets mounted because the CTF info is not available during early boot. Differential Revision: https://reviews.freebsd.org/D37899 Approved by: markj (mentor)
|
#
fdafd315 |
|
24-Nov-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Automated cleanup of cdefs and other formatting Apply the following automated changes to try to eliminate no-longer-needed sys/cdefs.h includes as well as now-empty blank lines in a row. Remove /^#if.*\n#endif.*\n#include\s+<sys/cdefs.h>.*\n/ Remove /\n+#include\s+<sys/cdefs.h>.*\n+#if.*\n#endif.*\n+/ Remove /\n+#if.*\n#endif.*\n+/ Remove /^#if.*\n#endif.*\n/ Remove /\n+#include\s+<sys/cdefs.h>\n#include\s+<sys/types.h>/ Remove /\n+#include\s+<sys/cdefs.h>\n#include\s+<sys/param.h>/ Remove /\n+#include\s+<sys/cdefs.h>\n#include\s+<sys/capsicum.h>/ Sponsored by: Netflix
|
#
685dc743 |
|
16-Aug-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Remove $FreeBSD$: one-line .c pattern Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/
|
#
56448506 |
|
07-Jan-2023 |
Mitchell Horne <mhorne@FreeBSD.org> |
ddb: have 'reset' command use normal reboot path This conditionally gives all registered shutdown handlers a chance to perform the reboot, with cpu_reset() being the fallback. The '\s' modifier can be used with the command to get the previous behaviour. The motivation is that some platforms may not be able do anything meaningful via cpu_reset(), due to a lack of standardized reset mechanism and/or firmware shortcomings. However, they may have a separate device driver attached that normally performs the reboot. Such is the case for some versions of the Raspberry Pi, where reset via PSCI fails, but the BCM2835 watchdog driver has a shutdown hook. Reported by: bz Reviewed by: markj (slightly earlier version) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D37981
|
#
c036339d |
|
02-Nov-2022 |
Mark Johnston <markj@FreeBSD.org> |
ddb: Don't flag breakpoint/watchpoint commands as MEMSAFE They could potentially be abused to overwrite kernel memory, so shouldn't be accessible when mac_ddb is loaded. Reviewed by: mhorne Fixes: bc4ea61d55cb ("ddb: tag core commands with DB_CMD_MEMSAFE") Sponsored by: Juniper Networks, Inc. Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D37105
|
#
2449b9e5 |
|
18-Jul-2022 |
Mitchell Horne <mhorne@FreeBSD.org> |
mac: kdb/ddb framework hooks Add three simple hooks to the debugger allowing for a loaded MAC policy to intervene if desired: 1. Before invoking the kdb backend 2. Before ddb command registration 3. Before ddb command execution We extend struct db_command with a private pointer and two flag bits reserved for policy use. Reviewed by: markj Sponsored by: Juniper Networks, Inc. Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D35370
|
#
a305b20e |
|
18-Jul-2022 |
Mitchell Horne <mhorne@FreeBSD.org> |
ddb: tag core commands with DB_CMD_MEMSAFE Those which are statically defined in db_command.c. Sponsored by: Juniper Networks, Inc. Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D35584
|
#
c84c5e00 |
|
18-Jul-2022 |
Mitchell Horne <mhorne@FreeBSD.org> |
ddb: annotate some commands with DB_CMD_MEMSAFE This is not completely exhaustive, but covers a large majority of commands in the tree. Reviewed by: markj Sponsored by: Juniper Networks, Inc. Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D35583
|
#
8a099482 |
|
05-Jul-2022 |
Mitchell Horne <mhorne@FreeBSD.org> |
db_command.c: use designated initializers Provide separate helper macros for regular commands and next-level table commands as they are mutually exclusive. This ensures proper initialization of each element and allows us to exclude some redundant fields, such as specifying .more = NULL for every regular command. Reviewed by: markj, jhb MFC after: 3 days Sponsored by: Juniper Networks, Inc. Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D35580
|
#
4f2ad624 |
|
05-Jul-2022 |
Mitchell Horne <mhorne@FreeBSD.org> |
db_command.c: style Reviewed by: jhb MFC after: 3 days Sponsored by: Juniper Networks, Inc. Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D35368
|
#
4ef7db5a |
|
14-Jun-2022 |
Mitchell Horne <mhorne@FreeBSD.org> |
ddb: namespacing of struct command 'command' is too generic for something specific to the kernel debugger; change this so it is less likely to collide with local variable names. Also rename struct command_table to struct db_command_table. Reviewed by: markj MFC after: 1 week Sponsored by: Juniper Networks, Inc. Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D35367
|
#
d85c9cef |
|
24-Feb-2021 |
Ryan Libby <rlibby@FreeBSD.org> |
ddb: reliably fail with ambiguous commands db_cmd_match had an even/odd bug, where if a third command was partially matched (or any odd number greater than one) the search result would be set back from CMD_AMBIGUOUS to CMD_FOUND, causing the last command in the list to be executed instead of failing the match. Reported by: mlaier Reviewed by: markj, mlaier, vangyzen Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D28659
|
#
fa2528ac |
|
18-Feb-2021 |
Alex Richardson <arichardson@FreeBSD.org> |
Use atomic loads/stores when updating td->td_state KCSAN complains about racy accesses in the locking code. Those races are fine since they are inside a TD_SET_RUNNING() loop that expects the value to be changed by another CPU. Use relaxed atomic stores/loads to indicate that this variable can be written/read by multiple CPUs at the same time. This will also prevent the compiler from doing unexpected re-ordering. Reported by: GENERIC-KCSAN Test Plan: KCSAN no longer complains, kernel still runs fine. Reviewed By: markj, mjg (earlier version) Differential Revision: https://reviews.freebsd.org/D28569
|
#
3e06c7da |
|
31-Dec-2020 |
John Baldwin <jhb@FreeBSD.org> |
Use kdb_thr_* to iterate over threads consistently in DDB. The "findstack", "show all trace", and "show active trace" commands were iterating over allproc to enumerate threads. This missed threads executing in exit1() after being removed from allproc. Reviewed by: kib Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D27829
|
#
825d2341 |
|
31-Dec-2020 |
John Baldwin <jhb@FreeBSD.org> |
Don't check P_INMEM in kdb_thr_*(). Not all debugger operations that enumerate threads require thread stacks to be resident in memory to be useful. Instead, push P_INMEM checks (if needed) into callers. Reviewed by: kib Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D27827
|
#
e2e050c8 |
|
19-May-2019 |
Conrad Meyer <cem@FreeBSD.org> |
Extract eventfilter declarations to sys/_eventfilter.h This allows replacing "sys/eventfilter.h" includes with "sys/_eventfilter.h" in other header files (e.g., sys/{bus,conf,cpu}.h) and reduces header pollution substantially. EVENTHANDLER_DECLARE and EVENTHANDLER_LIST_DECLAREs were moved out of .c files into appropriate headers (e.g., sys/proc.h, powernv/opal.h). As a side effect of reduced header pollution, many .c files and headers no longer contain needed definitions. The remainder of the patch addresses adding appropriate includes to fix those files. LOCK_DEBUG and LOCK_FILE_LINE_ARG are moved to sys/_lock.h, as required by sys/mutex.h since r326106 (but silently protected by header pollution prior to this change). No functional change (intended). Of course, any out of tree modules that relied on header pollution for sys/eventhandler.h, sys/lock.h, or sys/mutex.h inclusion need to be fixed. __FreeBSD_version has been bumped.
|
#
e41793db |
|
20-Oct-2018 |
Conrad Meyer <cem@FreeBSD.org> |
ddb: Enable 'thread <address>' Currently, the 'thread' command (to switch the debugger to another thread) only accepts decimal-encoded tids. Use the same parsing logic as 'show thread <arg>' to accept hex-encoded thread pointers in addition to decimal-encoded tids. Document the 'thread' command in ddb.4 and expand the 'show thread' documentation to cover the tid usage. Reported by: bwidawsk Reviewed by: bwidawsk (earlier version), kib (earlier version), markj Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D16962
|
#
3531bbb5 |
|
17-Apr-2018 |
Warner Losh <imp@FreeBSD.org> |
Restore db_radix on parse error, otherwise we'll silently change it to 10 on a botched trace command.
|
#
796df753 |
|
30-Nov-2017 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
SPDX: Consider code from Carnegie-Mellon University. Interesting cases, most likely from CMU Mach sources.
|
#
212ff84f |
|
27-Nov-2017 |
Edward Tomasz Napierala <trasz@FreeBSD.org> |
Make kdb_reenter() silent when explicitly called from db_error(). This removes the useless backtrace on various ddb(4) user errors. Reviewed by: jhb@ Obtained from: CheriBSD MFC after: 2 weeks Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D13212
|
#
c6404e66 |
|
09-Nov-2017 |
Gavin Atkinson <gavin@FreeBSD.org> |
Point people towards our https web site for documentation, http accesses are just redirected anyway. MFC after: 1 week
|
#
9990da25 |
|
05-Jul-2017 |
Edward Tomasz Napierala <trasz@FreeBSD.org> |
Improve ddb(4) error reporting a bit. Obtained from: CheriBSD MFC after: 2 weeks Sponsored by: DARPA, AFRL
|
#
b5bd6c73 |
|
05-Jul-2017 |
Edward Tomasz Napierala <trasz@FreeBSD.org> |
Make ddb(4) a bit more user-friendly by improving "help". Obtained from: CheriBSD MFC after: 2 weeks Sponsored by: DARPA, AFRL
|
#
51d025a5 |
|
08-Sep-2016 |
Justin Hibbits <jhibbits@FreeBSD.org> |
Correct the type of db_cmd_loop_done. On big endian hardware that uses 1 byte bool a type mismatch of bool vs int will cause the least signifcant byte of db_cmd_loop_done to be set, but the MSB to be read, and read as 0. This causes ddb to stay in an infinite loop. MFC after: 1 week
|
#
7e89a322 |
|
25-Aug-2016 |
Conrad Meyer <cem@FreeBSD.org> |
ddb: Add 'show active trace' command 'show active trace', or 'acttrace' for short, prints backtraces from running threads only. Reviewed by: mjg Differential Revision: https://reviews.freebsd.org/D7646
|
#
9f915a92 |
|
15-Apr-2016 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
ddb: for pointers replace 0 with NULL. Mostly cosmetical, no functional change. Found with devel/coccinelle.
|
#
0a95ab74 |
|
23-May-2015 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
ddb: de-register
|
#
7fb88858 |
|
22-May-2015 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
ddb: Use NULL for pointers Hinted by: DragonflyBSD
|
#
cd508278 |
|
21-May-2015 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
ddb: finish converting boolean values. The replacement started at r283088 was necessarily incomplete without replacing boolean_t with bool. This also involved cleaning some type mismatches and ansifying old C function declarations. Pointed out by: bde Discussed with: bde, ian, jhb
|
#
2b490bc7 |
|
18-May-2015 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
ddb: stop boolean screaming. TRUE --> true FALSE--> false Hinted by: NetBSD
|
#
a41dd031 |
|
12-Oct-2014 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
ddb: ANSI-fy function declarations. MFC after: 5 days
|
#
1549fb22 |
|
11-Oct-2014 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
ddb: space/tab fixes. No functional change. MFC after: 3 days
|
#
527be4f2 |
|
02-Jun-2014 |
John-Mark Gurney <jmg@FreeBSD.org> |
handle longer commands so that lines don't overflow... people who added commands forgot to check this...
|
#
21d748a9 |
|
31-Oct-2012 |
Alfred Perlstein <alfred@FreeBSD.org> |
Small textdump enhancements. Allow textdumps to be called explicitly from DDB. If "dump" is called in DDB and textdumps are enabled then abort the dump and tell the user to turn off textdumps. Add options TEXTDUMP_PREFERRED to turn textdumps on by default. Add options TEXTDUMP_VERBOSE to be a bit more verbose while textdumping. Reviewed by: rwatson MFC after: 2 weeks
|
#
9ab83ecb |
|
16-Dec-2011 |
Konstantin Belousov <kib@FreeBSD.org> |
Add 'findstack' ddb command to search either the thread kernel stack or cached stack containing the specified kernel virtual address. Discussed with: pho MFC after: 1 week
|
#
299cceef |
|
06-Jun-2011 |
Marcel Moolenaar <marcel@FreeBSD.org> |
Fix making kernel dumps from the debugger by creating a command for it. Do not not expect a developer to call doadump(). Calling doadump does not necessarily work when it's declared static. Nor does it necessarily do what was intended in the context of text dumps. The dump command always creates a core dump. Move printing of error messages from doadump to the dump command, now that we don't have to worry about being called from DDB.
|
#
7126ba42 |
|
27-Apr-2011 |
Attilio Rao <attilio@FreeBSD.org> |
- Add the possibility to reuse the already last used timeout when patting the watchdog, via the watchdog(9) interface. For that, the WD_LASTVAL bitwise operation is used. It is mutually exclusive with any explicit timout passing to the watchdogs. The last timeout can be returned via the wdog_kern_last_timeout() KPI. - Add the possibility to pat the watchdogs installed via the watchdog(9) interface from the kernel. In order to do that the new KPI wdog_kern_pat() is offered and it does accept normalized nanoseconds or WD_LASTVAL. - Avoid to pass WD_ACTIVE down in the watchdog handlers. All the control bit processing should over to the upper layer functions and not passed down to the handlers at all. These changes are intended to be used in order to fix up the watchdog tripping in situation when the userland is busted, but protection is still wanted (examples: shutdown syncing / disk dumping). Sponsored by: Sandvine Incorporated Reviewed by: emaste, des, cognet MFC after: 2 weeks
|
#
8b927d7b |
|
05-Apr-2011 |
Attilio Rao <attilio@FreeBSD.org> |
Extend the DDB command "watchdog" with the ability to specify a timeout value. The timeout is expressed in the form T(N) = (2^N * nanoseconds) and can be easilly extracted from the watchdog interface as a WD_TO_* macro. That new functionality is supposed to fix re-entering the kernel from DDB re-enabling the watchdog again (previously disabled) and also offer the possibility to break for deadlocked DDB commands. Please note that retro-compatibility is retained. Sponsored by: Sandvine Incorporated Approved by: des MFC after: 10 days
|
#
3a5d3671 |
|
18-Feb-2011 |
Matthew D Fleming <mdf@FreeBSD.org> |
Modify kdb_trap() so that it re-calls the dbbe_trap function as long as the debugger back-end has changed. This means that switching from ddb to gdb no longer requires a "step" which can be dangerous on an already-crashed kernel. Also add a capability to get from the gdb back-end back to ddb, by typing ^C in the console window. While here, simplify kdb_sysctl_available() by using sbuf_new_for_sysctl(), and use strlcpy() instead of strncpy() since the strlcpy semantic is desired. MFC after: 1 month
|
#
a7d5f7eb |
|
19-Oct-2010 |
Jamie Gritton <jamie@FreeBSD.org> |
A new jail(8) with a configuration file, to replace the work currently done by /etc/rc.d/jail.
|
#
a29af74b |
|
12-Jul-2010 |
Konstantin Belousov <kib@FreeBSD.org> |
One more use for _SIG_VALID. Submitted by: Garrett Cooper <yanegomi gmail com> MFC after: 1 week
|
#
0f59fbc3 |
|
24-May-2010 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
MFp4 @178364: Implement an optional delay to the ddb reset/reboot command. This allows textdumps to be run automatically with unattended reboots after a resonable timeout, while still permitting an administrator to break into debugger if attached to the console at the time of the event for further debugging. Cap the maximum delay at 1 week to avoid highly accidental results, and default to 15s in case of problems parsing the timeout value. Move hex2dec helper function from db_thread.c to db_command.c to make it generally available and prefix it with a "db_" to avoid namespace collisions. Reviewed by: rwatson MFC after: 4 weeks
|
#
fb70e2f7 |
|
18-Dec-2009 |
Konstantin Belousov <kib@FreeBSD.org> |
MFC r199355: Add SI_KERNEL. MFC r199418: Fix pgsignal() call after signature change in r199355.
|
#
a3de221d |
|
17-Nov-2009 |
Konstantin Belousov <kib@FreeBSD.org> |
Among signal generation syscalls, only sigqueue(2) is allowed by POSIX to fail due to lack of resources to queue siginfo. Add KSI_SIGQ flag that allows sigqueue_add() to fail while trying to allocate memory for new siginfo. When the flag is not set, behaviour is the same as for KSI_TRAP: if memory cannot be allocated, set bit in sq_kill. KSI_TRAP is kept to preserve KBI. Add SI_KERNEL si_code, to be used in siginfo.si_code when signal is generated by kernel. Deliver siginfo when signal is generated by kill(2) family of syscalls (SI_USER with properly filled si_uid and si_pid), or by kernel (SI_KERNEL, mostly job control or SIGIO). Since KSI_SIGQ flag is not set for the ksi, low memory condition cause old behaviour. Keep psignal(9) KBI intact, but modify it to generate SI_KERNEL si_code. Pgsignal(9) and gsignal(9) now take ksi explicitely. Add pksignal(9) that behaves like psignal but takes ksi, and ddb kill command implemented as pksignal(..., ksi = NULL) to not do allocation while in debugger. While there, remove some register specifiers and use ANSI C prototypes. Reviewed by: davidxu MFC after: 1 month
|
#
d7f03759 |
|
19-Oct-2008 |
Ulf Lilleengen <lulf@FreeBSD.org> |
- Import the HEAD csup code which is the basis for the cvsmode work.
|
#
93d4804b |
|
25-Sep-2008 |
John Baldwin <jhb@FreeBSD.org> |
Initialize the DDB command list when initializing DDB so that the basic commands are available from 'boot -d'. Suggested by: dfr
|
#
39297ba4 |
|
15-Sep-2008 |
Sam Leffler <sam@FreeBSD.org> |
Make ddb command registration dynamic so modules can extend the command set (only so long as the module is present): o add db_command_register and db_command_unregister to add and remove commands, respectively o replace linker sets with SYSINIT's (and SYSUINIT's) that register commands o expose 3 list heads: db_cmd_table, db_show_table, and db_show_all_table for registering top-level commands, show operands, and show all operands, respectively While here also: o sort command lists o add DB_ALIAS, DB_SHOW_ALIAS, and DB_SHOW_ALL_ALIAS to add aliases for existing commands o add "show all trace" as an alias for "show alltrace" o add "show all locks" as an alias for "show alllocks" Submitted by: Guillaume Ballet <gballet@gmail.com> (original version) Reviewed by: jhb MFC after: 1 month
|
#
9e340a61 |
|
25-Mar-2008 |
Sam Leffler <sam@FreeBSD.org> |
enable dynamic addition of "show all" commands MFC after: 3 weeks
|
#
3755dbd8 |
|
07-Mar-2008 |
Robert Watson <rwatson@FreeBSD.org> |
When killing a user process from DDB, check that the requested signal is > 0 rather than >= 0, or we will panic when trying to deliver the signal. MFC after: 3 days PR: 100802 Submitted by: Valerio Daelli <valerio.daelli at gmail.com>
|
#
618c7db3 |
|
26-Dec-2007 |
Robert Watson <rwatson@FreeBSD.org> |
Add textdump(4) facility, which provides an alternative form of kernel dump using mechanically generated/extracted debugging output rather than a simple memory dump. Current sources of debugging output are: - DDB output capture buffer, if there is captured output to save - Kernel message buffer - Kernel configuration, if included in kernel - Kernel version string - Panic message Textdumps are stored in swap/dump partitions as with regular dumps, but are laid out as ustar files in order to allow multiple parts to be stored as a stream of sequentially written blocks. Blocks are written out in reverse order, as the size of a textdump isn't known a priori. As with regular dumps, they will be extracted using savecore(8). One new DDB(4) command is added, "textdump", which accepts "set", "unset", and "status" arguments. By default, normal kernel dumps are generated unless "textdump set" is run in order to schedule a textdump. It can be canceled using "textdump unset" to restore generation of a normal kernel dump. Several sysctls exist to configure aspects of textdumps; debug.ddb.textdump.pending can be set to check whether a textdump is pending, or set/unset in order to control whether the next kernel dump will be a textdump from userspace. While textdumps don't have to be generated as a result of a DDB script run automatically as part of a kernel panic, this is a particular useful way to use them, as instead of generating a complete memory dump, a simple transcript of an automated DDB session can be captured using the DDB output capture and textdump facilities. This can be used to generate quite brief kernel bug reports rich in debugging information but not dependent on kernel symbol tables or precisely synchronized source code. Most textdumps I generate are less than 100k including the full message buffer. Using textdumps with an interactive debugging session is also useful, with capture being enabled/disabled in order to record some but not all of the DDB session. MFC after: 3 months
|
#
c9b0cc3b |
|
26-Dec-2007 |
Robert Watson <rwatson@FreeBSD.org> |
Add a simple scripting facility to DDB(4), allowing the user to define a set of named scripts. Each script consists of a list of DDB commands separated by ";"s that will be executed verbatim. No higher level language constructs, such as branching, are provided for: scripts are executed by sequentially injecting commands into the DDB input buffer. Four new commands are present in DDB: "run" to run a specific script, "script" to define or print a script, "scripts" to list currently defined scripts, and "unscript" to delete a script, modeled on shell alias commands. Scripts may also be manipulated using sysctls in the debug.ddb.scripting MIB space, although users will prefer to use the soon-to-be-added ddb(8) tool for usability reasons. Scripts with certain names are automatically executed on various DDB events, such as entering the debugger via a panic, a witness error, watchdog, breakpoint, sysctl, serial break, etc, allowing customized handling. MFC after: 3 months
|
#
086fec57 |
|
25-Dec-2007 |
Robert Watson <rwatson@FreeBSD.org> |
Add a new DDB(4) facility, output capture. Input and output from DDB may be captured to a memory buffer for later inspection using sysctl(8), or in the future, to a textdump. A new DDB command, "capture", is added, which accepts arguments "on", "off", "reset", and "status". A new DDB sysctl tree, debug.ddb.capture, is added, which can be used to resize the capture buffer and extract buffer contents. MFC after: 3 months
|
#
f67af5c9 |
|
17-Jan-2007 |
Xin LI <delphij@FreeBSD.org> |
Use FOREACH_PROC_IN_SYSTEM instead of using its unrolled form.
|
#
9641e389 |
|
02-Nov-2006 |
Konstantin Belousov <kib@FreeBSD.org> |
On trap while inside ddb, the trap handler calls kdb_reenter(), that longjmp to the default context. As result, "alltrace" command may be prematurely terminated (without error message). This is happens, for instance, when system is low on memory and referenced page in kernel-mode thread stack is swapped out. Protect "alltrace" against termination on trap by setting temporary kdb_jmpbuf context. Submitted by: Peter Holm
|
#
e4b732cf |
|
10-Oct-2006 |
Bruce Evans <bde@FreeBSD.org> |
The powerpc and sparc64 MD `reboot' commands should never have existed since they just duplicated the MI `reset' command. Instead of removing them, make `reboot' an MI alias for `reboot' since this gives a better way of killing the `r' alias for `reset'. Remove the `registers' command that was used to kill the alias. Turn the powerpc and sparc64 MD `halt' command into an MI command. A copy of sparc64/db_interface.c grew in sun4v just after I found the extra reboot commands. It has not been changed, and is now not identical. Duplicated commands come out duplicated in ddb's online help, but cause large problems when used (e.g., on i386's with 2 halt's and an hwatch, typing h doesn' give the expected message about an ambiguous command, but hangs like the halt command or a looping parseri would).
|
#
75149ab8 |
|
08-Oct-2006 |
Bruce Evans <bde@FreeBSD.org> |
Added some aliases: - `b' is now an official alias for `break'. It used to be an unofficial alias, but this was broken by adding the `bt' alias for `trace'. - `t' is now an official alias for `trace'. It used to be an unofficial alias, but this was broken by adding the `thread' command. - `registers' is now an alias for `show registers'. This is a hack to break the unofficial `r' alias for `reset'. `r' really means `registers' in some debuggers, so I sometimes type it accidentally and am annoyed when it resets the system. A short command shouldn't have such a large effect. Now at least `res' must be typed to disambiguate `reset'.
|
#
2481da74 |
|
08-Oct-2006 |
Bruce Evans <bde@FreeBSD.org> |
Fixed formatting of printing of command tables. WIth the default max output width of 79, only 6 columns of width 12 each fit, but 7 columns were printed. The fix is to pass the width of the next output to db_end_line() and not assume there that this width is always 1. Related unfixed bugs: - 1 character is wasted for a space after the last column - suppression of trailing spaces used to limit the misformatting, but seems to have been lost - in db_examine(), the width of the next output is not know and is still assumed to be 1.
|
#
15cc91d3 |
|
19-Jul-2006 |
John Baldwin <jhb@FreeBSD.org> |
Disable the pager for 'panic' and 'call' to be paranoid.
|
#
19e9205a |
|
12-Jul-2006 |
John Baldwin <jhb@FreeBSD.org> |
Simplify the pager support in DDB. Allowing different db commands to install custom pager functions didn't actually happen in practice (they all just used the simple pager and passed in a local quit pointer). So, just hardcode the simple pager as the only pager and make it set a global db_pager_quit flag that db commands can check when the user hits 'q' (or a suitable variant) at the pager prompt. Also, now that it's easy to do so, enable paging by default for all ddb commands. Any command that wishes to honor the quit flag can do so by checking db_pager_quit. Note that the pager can also be effectively disabled by setting $lines to 0. Other fixes: - 'show idt' on i386 and pc98 now actually checks the quit flag and terminates early. - 'show intr' now actually checks the quit flag and terminates early.
|
#
cf93bc66 |
|
21-Apr-2006 |
John Baldwin <jhb@FreeBSD.org> |
Use LIST_FOREACH().
|
#
e1e31c0e |
|
07-Mar-2006 |
John Baldwin <jhb@FreeBSD.org> |
Clean up the way we handle auxiliary commands for a given ddb command table. Previously, the ddb code knew of each linker set of auxiliary commands and which explicit command list they were tied to. These changes add a simple command_table struct that contains both the static list of commands and the pointers for any auxiliary linker set of additional commands. This also makes it possible for other arbitrary command tables to be defined in other parts of the kernel w/o having to edit ddb itself. The DB_SET macro has also been trimmed down to just creating an entry in a linker set. A new DB_FUNC macro does what the old DB_SET did which is to not only add an entry to the linker set but also to include a function prototype for the function being added. With these changes, it's now also possible to create aliases for ddb functions using DB_SET() directly if desired.
|
#
3924da21 |
|
24-Oct-2005 |
John Baldwin <jhb@FreeBSD.org> |
- Rename 'traceall' to 'alltrace' so that the 'tr' shortcut for 'trace' still works. Also, this is consistent with 'show pcpu' vs 'show allpcpu'. (And 'show allstacks' on OS X for that matter.) - Add 'bt' as an alias for 'trace'. We already have a 'where' alias as well, so this makes it easier for gdb-wired hands to work in ddb. Ok'd by: rwatson (1) Requested by: scottl (2) MFC after: 1 day
|
#
da927f93 |
|
02-Oct-2005 |
Olivier Houchard <cognet@FreeBSD.org> |
- Call db_setup_paging() for traceall. - Make it so one can't call db_setup_paging() if it has already been called before. traceall needs this, or else the db_setup_paging() call from db_trace_thread() will reset the printed line number, and override its argument. This is not perfect for traceall, because even if one presses 'q' while in the middle of printing a backtrace it will finish printing the backtrace before exiting, as db_trace_thread() won't be notified it should stop, but it is hard to do better without reworking the pager interface a lot more.
|
#
a7ad956b |
|
02-Oct-2005 |
Robert Watson <rwatson@FreeBSD.org> |
Add a DDB "traceall" function, which stack traces all known process threads. This is quite useful if generating a debug log for post-mortem by another developer, in which case the person at the console may not know which threads are of interest. The output of this can be quite long. Discussed with: kris MFC after: 3 days
|
#
cec9a4bf |
|
10-Aug-2005 |
David E. O'Brien <obrien@FreeBSD.org> |
Remove the need to forward declare statics by moving them around.
|
#
a2aeb24e |
|
02-Jul-2005 |
Marcel Moolenaar <marcel@FreeBSD.org> |
Implement functions calls from within DDB on ia64. On ia64 a function pointer doesn't point to the first instruction of that function, but rather to a descriptor. The descriptor has the address of the first instruction, as well as the value of the global pointer. The symbol table doesn't know anything about descriptors, so if you lookup the name of a function you get the address of the first instruction. The cast from the address, which is the result of the symbol lookup, to a function pointer as is done in db_fncall is therefore invalid. Abstract this detail behind the DB_CALL macro. By default DB_CALL is defined as db_fncall_generic, which yields the old behaviour. On ia64 the macro is defined as db_fncall_ia64, in which a descriptor is constructed to yield a valid function pointer. While here, introduce DB_MAXARGS. DB_MAXARGS replaces the existing (local) MAXARGS. The DB_MAXARGS macro can be defined by platforms to create a convenient maximum. By default this will be the legacy 10. On ia64 we define this macro to be 8, for 8 is the maximum number of arguments that can be passed in registers. This avoids having to implement spilling of arguments on the memory stack. Approved by: re (dwhite)
|
#
dd3cb568 |
|
05-Jan-2005 |
Warner Losh <imp@FreeBSD.org> |
Start each of the license/copyright comments with /*-
|
#
a13aca1a |
|
23-Nov-2004 |
Robert Watson <rwatson@FreeBSD.org> |
When printing a stack trace for a thread, also print the pid and tid. When a series of traces is included in a bug report, this will make it easier to tie the trace information back to ps or threads output, each of which will show the pid or the tid, but usually not both.
|
#
026c3aaa |
|
20-Jul-2004 |
Marcel Moolenaar <marcel@FreeBSD.org> |
Oops... Add the CS_OWN flag to the trace and where commands so that db_stack_trace() actually has a chance to parse its own arguments.
|
#
fd32d93b |
|
20-Jul-2004 |
Marcel Moolenaar <marcel@FreeBSD.org> |
Unify db_stack_trace_cmd(). All it did was look up the thread given the thread ID and call db_trace_thread(). Since arm has all the logic in db_stack_trace_cmd(), rename the new DB_COMMAND function to db_stack_trace to avoid conflicts on arm. While here, have db_stack_trace parse its own arguments so that we can use a more natural radix for IDs. If the ID is not a thread ID, or more precisely when no thread exists with the ID, try if there's a process with that ID and return the first thread in it. This makes it easier to print stack traces from the ps output. requested by: rwatson@ tested on: amd64, i386, ia64
|
#
f3be7cb3 |
|
11-Jul-2004 |
Marcel Moolenaar <marcel@FreeBSD.org> |
Re-add the gdb command. It was removed to be replaced by something more generic, but that didn't actually happen. Since the feature to switch backends (and historically this means from DDB to GDB) is important, make sure people can do just that until such the generic mechanism actually sees the light of day. Suggested by: rwatson@
|
#
37224cd3 |
|
10-Jul-2004 |
Marcel Moolenaar <marcel@FreeBSD.org> |
Mega update for the KDB framework: turn DDB into a KDB backend. Most of the changes are a direct result of adding thread awareness. Typically, DDB_REGS is gone. All registers are taken from the trapframe and backtraces use the PCB based contexts. DDB_REGS was defined to be a trapframe on all platforms anyway. Thread awareness introduces the following new commands: thread X switch to thread X (where X is the TID), show threads list all threads. The backtrace code has been made more flexible so that one can create backtraces for any thread by giving the thread ID as an argument to trace. With this change, ia64 has support for breakpoints.
|
#
74cc032b |
|
29-Feb-2004 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Give DDB a "watchdog" command which disables all watchdogs.
|
#
26502503 |
|
16-Aug-2003 |
Marcel Moolenaar <marcel@FreeBSD.org> |
Further cleanup <machine/cpu.h> and <machine/md_var.h>: move the MI prototypes of cpu_halt(), cpu_reset() and swi_vm() from md_var.h to cpu.h. This affects db_command.c and kern_shutdown.c. ia64: move all MD prototypes from cpu.h to md_var.h. This affects madt.c, interrupt.c and mp_machdep.c. Remove is_physical_memory(). It's not used (vm_machdep.c). alpha: the MD prototypes have been left in cpu.h with a comment that they should be there. Moving them is left for later. It was expected that the impact would be significant enough to be done in a seperate commit. powerpc: MD prototypes left in cpu.h. Comment added. Suggested by: bde Tested with: make universe (pc98 incomplete)
|
#
1e16f609 |
|
31-Jul-2003 |
John Baldwin <jhb@FreeBSD.org> |
Add a one-shot callout facility to db_printf() that executes the registered callout when a specified number of lines have been output. This can be used to implement pagers for ddb commands that output a lot of text. A simple paging function is included that automatically rearms itself when fired. Reviewed by: bde, julian
|
#
753960f7 |
|
10-Jun-2003 |
David E. O'Brien <obrien@FreeBSD.org> |
Use __FBSDID().
|
#
04361c8c |
|
01-Jun-2003 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Make "where" an alias for "trace"
|
#
029f0b69 |
|
16-Feb-2003 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Change "dev_t gdbdev" to "void *gdb_arg", some possible paths for GDB will not have a dev_t.
|
#
93a7aa79 |
|
27-Dec-2002 |
Julian Elischer <julian@FreeBSD.org> |
Add code to ddb to allow backtracing an arbitrary thread. (show thread {address}) Remove the IDLE kse state and replace it with a change in the way threads sahre KSEs. Every KSE now has a thread, which is considered its "owner" however a KSE may also be lent to other threads in the same group to allow completion of in-kernel work. n this case the owner remains the same and the KSE will revert to the owner when the other work has been completed. All creations of upcalls etc. is now done from kse_reassign() which in turn is called from mi_switch or thread_exit(). This means that special code can be removed from msleep() and cv_wait(). kse_release() does not leave a KSE with no thread any more but converts the existing thread into teh KSE's owner, and sets it up for doing an upcall. It is just inhibitted from being scheduled until there is some reason to do an upcall. Remove all trace of the kse_idle queue since it is no-longer needed. "Idle" KSEs are now on the loanable queue.
|
#
c2476faf |
|
01-Oct-2002 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Indentation indicates missing braces. Spotted by: FlexeLint
|
#
bda9921d |
|
21-Sep-2002 |
Mark Murray <markm@FreeBSD.org> |
Constify to kill some warnings.
|
#
763df836 |
|
23-Mar-2002 |
Bruce Evans <bde@FreeBSD.org> |
Fixed some style bugs in the removal of __P(()). Continuation lines were not outdented to preserve non-KNF lining up of code with parentheses. Switch to KNF formatting.
|
#
14e10f99 |
|
19-Mar-2002 |
Alfred Perlstein <alfred@FreeBSD.org> |
Remove __P.
|
#
e30e3e9e |
|
16-Jan-2002 |
Matt Jacob <mjacob@FreeBSD.org> |
pid is 'long' on alpha.
|
#
19d2c78f |
|
27-Nov-2001 |
Dima Dorfman <dd@FreeBSD.org> |
Implement a "kill" DDB command which is an interface to psignal() that respects locks. Before SMPng, one was able to call psignal() using the "call" command, but this is no longer possible because it does not respect locks by itself. This is very useful when one has gotten their machine into a state where it is impossible to spawn ps/kill or su to root. In this case, respecting locks essentially means trying to aquire the proc lock before calling psignal(). We can't block in the debugger, so if trylock fails, the operation fails. This also means that we can't use pfind(), since that will attempt to lock the process for us. Reviewed by: jhb
|
#
99b95aa2 |
|
05-Nov-2001 |
Andrew R. Reiter <arr@FreeBSD.org> |
- Include machine/md_var.h to get rid of cpu_reset() warning. (-Wall) Approved by: jhb
|
#
5370c3b6 |
|
02-Nov-2001 |
Peter Wemm <peter@FreeBSD.org> |
Add a 'reset' command. This is useful for panics really early before any symbols are loaded. Especially for unattended machines.
|
#
58d9a059 |
|
18-Jul-2001 |
Kris Kennaway <kris@FreeBSD.org> |
Quiet a variable format-string warning. MFC after: 1 week
|
#
17bbfb58 |
|
10-Jul-2001 |
Brian S. Dean <bsd@FreeBSD.org> |
Add 'hwatch' and 'dhwatch' ddb commands analogous to 'watch' and 'dwatch'. The new commands install hardware watchpoints if supported by the architecture and if there are enough registers to cover the desired memory area. No objection by: audit@, hackers@ MFC after: 2 weeks
|
#
0b1ae809 |
|
07-Jul-2001 |
Julian Elischer <julian@FreeBSD.org> |
A set of changes to reduce the number of include files the kernel takes from /usr/include. I cannot check them on alpha.. (will try beast) Briefly looked at by: Warner Losh <imp@harmony.village.org>
|
#
f41325db |
|
13-Jun-2001 |
Peter Wemm <peter@FreeBSD.org> |
With this commit, I hereby pronounce gensetdefs past its use-by date. Replace the a.out emulation of 'struct linker_set' with something a little more flexible. <sys/linker_set.h> now provides macros for accessing elements and completely hides the implementation. The linker_set.h macros have been on the back burner in various forms since 1998 and has ideas and code from Mike Smith (SET_FOREACH()), John Polstra (ELF clue) and myself (cleaned up API and the conversion of the rest of the kernel to use it). The macros declare a strongly typed set. They return elements with the type that you declare the set with, rather than a generic void *. For ELF, we use the magic ld symbols (__start_<setname> and __stop_<setname>). Thanks to Richard Henderson <rth@redhat.com> for the trick about how to force ld to provide them for kld's. For a.out, we use the old linker_set struct. NOTE: the item lists are no longer null terminated. This is why the code impact is high in certain areas. The runtime linker has a new method to find the linker set boundaries depending on which backend format is in use. linker sets are still module/kld unfriendly and should never be used for anything that may be modular one day. Reviewed by: eivind
|
#
c3aac50f |
|
27-Aug-1999 |
Peter Wemm <peter@FreeBSD.org> |
$Id$ -> $FreeBSD$
|
#
ce9edcf5 |
|
09-Aug-1999 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Merge the cons.c and cons.h to the best of my ability. alpha may or may not compile, I can't test it.
|
#
1c6989fa |
|
01-Jul-1999 |
Peter Wemm <peter@FreeBSD.org> |
Quiet warnings on Alpha. (db_expr_t is a long on alpha, int on x86)
|
#
3000820a |
|
09-May-1999 |
Poul-Henning Kamp <phk@FreeBSD.org> |
add some amount of sanity to the way the gdb stuff finds its device. I'm not too happy about the result either, but at least it has less chance of backfiring. This particular feature could be called "a mess" without offending anybody.
|
#
5c92a5b3 |
|
07-May-1999 |
Kirk McKusick <mckusick@FreeBSD.org> |
Get rid of extern declarations on gdb stuff so systems compiled without DDB will compile. Warn users that try to use GDB without specifying a GDB port in their configuration file.
|
#
0ec81012 |
|
13-Jan-1999 |
John Polstra <jdp@FreeBSD.org> |
Replace includes of <sys/kernel.h> with includes of <sys/linker_set.h> in those files that use only the linker set definitions.
|
#
596dfc04 |
|
08-Jul-1998 |
Bruce Evans <bde@FreeBSD.org> |
Use not-so-new printf formats %r and/or %z instead of %n and/or %+x.
|
#
aec5a849 |
|
19-May-1998 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Redo the previous commit in a more Bruce-friendly fashion. Urged by: bde
|
#
7ee17eea |
|
19-May-1998 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Add "show msgbuf" command
|
#
b7aa38c1 |
|
12-Feb-1998 |
Bruce Evans <bde@FreeBSD.org> |
Ensure that the linker sets for commands exist by putting a standard command in each of them. This removes the need for hard-to-configure dummy instantiations of the sets.
|
#
303b270b |
|
08-Feb-1998 |
Eivind Eklund <eivind@FreeBSD.org> |
Staticize.
|
#
6875d254 |
|
22-Feb-1997 |
Peter Wemm <peter@FreeBSD.org> |
Back out part 1 of the MCFH that changed $Id$ to $FreeBSD$. We are not ready for it yet.
|
#
1130b656 |
|
14-Jan-1997 |
Jordan K. Hubbard <jkh@FreeBSD.org> |
Make the long-awaited change from $Id$ to $FreeBSD$ This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so long. Boy, I'm glad we're not using sup anymore. This update would have been insane otherwise.
|
#
5778f6ad |
|
18-Dec-1996 |
Bruce Evans <bde@FreeBSD.org> |
Fixed bogus linkage of one of the ddb linker sets.
|
#
6337f4ef |
|
14-Sep-1996 |
Bruce Evans <bde@FreeBSD.org> |
Support statically attaching of ddb commands in non-ddb modules. The details are hidden in the DB_COMMAND(cmd_name, func_name) and DB_SHOW_COMMAND(cmd_name, func_name) macros. DB_COMMAND() adds to the top-level ddb command table and DB_SHOW_COMMAND adds to the `show' subtable. Most external commands will probably be `show' commands with no side effects. They should check their pointer args more carefully than `show map' :-), or ddb should trap internal faults better (like it does for memory accesses). The vm ddb commands are temporarily unattached. ddb.h: Also declare `db_indent' and db_iprintf() which will replace vm's `indent' and iprintf().
|
#
ad146781 |
|
27-Aug-1996 |
Paul Traina <pst@FreeBSD.org> |
Allow the user to switch into gdb mode from ddb
|
#
5ccbc3cc |
|
10-Dec-1995 |
Bruce Evans <bde@FreeBSD.org> |
Reduced and cleaned up #includes.
|
#
efeaf95a |
|
06-Dec-1995 |
David Greenman <dg@FreeBSD.org> |
Untangled the vm.h include file spaghetti.
|
#
f73a856d |
|
29-Nov-1995 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Staticized and '#ifdef notused' stuff we don't use.
|
#
058284fc |
|
24-Nov-1995 |
Bruce Evans <bde@FreeBSD.org> |
Completed function declarations and/or added prototypes and/or #includes to get the prototypes. Changed some `int's to `boolean_t's. boolean_t's are ints so they are hard to distinguish from ints. Converted function headers to old-style. ddb is written in K&R1 C except where we broke it.
|
#
976794d9 |
|
26-Aug-1995 |
Bruce Evans <bde@FreeBSD.org> |
Change db_fncall() and db_panic() to have the correct number and type of args for a ddb command.
|
#
9b2e5354 |
|
30-May-1995 |
Rodney W. Grimes <rgrimes@FreeBSD.org> |
Remove trailing whitespace.
|
#
edf8a815 |
|
19-Mar-1995 |
David Greenman <dg@FreeBSD.org> |
Removed redundant newlines that were in some panic strings.
|
#
b5e8ce9f |
|
16-Mar-1995 |
Bruce Evans <bde@FreeBSD.org> |
Add and move declarations to fix all of the warnings from `gcc -Wimplicit' (except in netccitt, netiso and netns) and most of the warnings from `gcc -Wnested-externs'. Fix all the bugs found. There were no serious ones.
|
#
23898040 |
|
05-Mar-1995 |
Joerg Wunsch <joerg@FreeBSD.org> |
Make ``p'' an explicit alias for ``print'' instead of being an implicit alias for ``panic'', since this seems to be more rational.
|
#
3eac4884 |
|
05-Feb-1995 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Added "panic" command to ddb, so we can do something sensible even if we have no symbols.
|
#
8a129cae |
|
27-Aug-1994 |
David Greenman <dg@FreeBSD.org> |
1) Changed ddb into a option rather than a pseudo-device (use options DDB in your kernel config now). 2) Added ps ddb function from 1.1.5. Cleaned it up a bit and moved into its own file. 3) Added \r handing in db_printf. 4) Added missing memory usage stats to statclock(). 5) Added dummy function to pseudo_set so it will be emitted if there are no other pseudo declarations.
|
#
f23b4c91 |
|
18-Aug-1994 |
Garrett Wollman <wollman@FreeBSD.org> |
Fix up some sloppy coding practices: - Delete redundant declarations. - Add -Wredundant-declarations to Makefile.i386 so they don't come back. - Delete sloppy COMMON-style declarations of uninitialized data in header files. - Add a few prototypes. - Clean up warnings resulting from the above. NB: ioconf.c will still generate a redundant-declaration warning, which is unavoidable unless somebody volunteers to make `config' smarter.
|
#
f540b106 |
|
12-Aug-1994 |
Garrett Wollman <wollman@FreeBSD.org> |
Change all #includes to follow the current Berkeley style. Some of these ``changes'' are actually not changes at all, but CVS sometimes has trouble telling the difference. This also includes support for second-directory compiles. This is not quite complete yet, as `config' doesn't yet do the right thing. You can still make it work trivially, however, by doing the following: rm /sys/compile mkdir /usr/obj/sys/compile ln -s M-. /sys/compile cd /sys/i386/conf config MYKERNEL cd ../../compile/MYKERNEL ln -s /sys @ rm machine ln -s @/i386/include machine make depend make
|
#
26f9a767 |
|
25-May-1994 |
Rodney W. Grimes <rgrimes@FreeBSD.org> |
The big 4.4BSD Lite to FreeBSD 2.0.0 (Development) patch. Reviewed by: Rodney W. Grimes Submitted by: John Dyson and David Greenman
|
#
51f4a07b |
|
11-Feb-1994 |
Guido van Rooij <guido@FreeBSD.org> |
ps works inside ddb now.
|
#
381fe1aa |
|
24-Nov-1993 |
Garrett Wollman <wollman@FreeBSD.org> |
Make the LINT kernel compile with -W -Wreturn-type -Wcomment -Werror, and add same (sans -Werror) to Makefile for future compilations.
|
#
0edf66ec |
|
16-Oct-1993 |
Rodney W. Grimes <rgrimes@FreeBSD.org> |
Removed all patch kit headers, sccsid and rcsid strings, put $Id$ in, some minor cleanup. Added $Id$ to files that did not have any version info, etc
|
#
5b81b6b3 |
|
12-Jun-1993 |
Rodney W. Grimes <rgrimes@FreeBSD.org> |
Initial import, 0.1 + pk 0.2.4-B1
|