diff options
Diffstat (limited to 'Documentation/s390/Debugging390.txt')
-rw-r--r-- | Documentation/s390/Debugging390.txt | 93 |
1 files changed, 46 insertions, 47 deletions
diff --git a/Documentation/s390/Debugging390.txt b/Documentation/s390/Debugging390.txt index 844c03fe7921..4dd25ee549e9 100644 --- a/Documentation/s390/Debugging390.txt +++ b/Documentation/s390/Debugging390.txt | |||
@@ -8,8 +8,8 @@ | |||
8 | Overview of Document: | 8 | Overview of Document: |
9 | ===================== | 9 | ===================== |
10 | This document is intended to give an good overview of how to debug | 10 | This document is intended to give an good overview of how to debug |
11 | Linux for s/390 & z/Architecture it isn't intended as a complete reference & not a | 11 | Linux for s/390 & z/Architecture. It isn't intended as a complete reference & not a |
12 | tutorial on the fundamentals of C & assembly, it dosen't go into | 12 | tutorial on the fundamentals of C & assembly. It doesn't go into |
13 | 390 IO in any detail. It is intended to complement the documents in the | 13 | 390 IO in any detail. It is intended to complement the documents in the |
14 | reference section below & any other worthwhile references you get. | 14 | reference section below & any other worthwhile references you get. |
15 | 15 | ||
@@ -88,7 +88,7 @@ s/390 z/Architecture | |||
88 | 0 0 Reserved ( must be 0 ) otherwise specification exception occurs. | 88 | 0 0 Reserved ( must be 0 ) otherwise specification exception occurs. |
89 | 89 | ||
90 | 1 1 Program Event Recording 1 PER enabled, | 90 | 1 1 Program Event Recording 1 PER enabled, |
91 | PER is used to facilititate debugging e.g. single stepping. | 91 | PER is used to facilitate debugging e.g. single stepping. |
92 | 92 | ||
93 | 2-4 2-4 Reserved ( must be 0 ). | 93 | 2-4 2-4 Reserved ( must be 0 ). |
94 | 94 | ||
@@ -163,7 +163,7 @@ s/390 z/Architecture | |||
163 | 1 1 64 bit | 163 | 1 1 64 bit |
164 | 164 | ||
165 | 32 1=31 bit addressing mode 0=24 bit addressing mode (for backward | 165 | 32 1=31 bit addressing mode 0=24 bit addressing mode (for backward |
166 | compatibility ), linux always runs with this bit set to 1 | 166 | compatibility), linux always runs with this bit set to 1 |
167 | 167 | ||
168 | 33-64 Instruction address. | 168 | 33-64 Instruction address. |
169 | 33-63 Reserved must be 0 | 169 | 33-63 Reserved must be 0 |
@@ -188,7 +188,7 @@ Bytes 0-512 ( 200 hex ) on s/390 & 0-512,4096-4544,4604-5119 currently on z/Arch | |||
188 | are used by the processor itself for holding such information as exception indications & | 188 | are used by the processor itself for holding such information as exception indications & |
189 | entry points for exceptions. | 189 | entry points for exceptions. |
190 | Bytes after 0xc00 hex are used by linux for per processor globals on s/390 & z/Architecture | 190 | Bytes after 0xc00 hex are used by linux for per processor globals on s/390 & z/Architecture |
191 | ( there is a gap on z/Architecure too currently between 0xc00 & 1000 which linux uses ). | 191 | ( there is a gap on z/Architecture too currently between 0xc00 & 1000 which linux uses ). |
192 | The closest thing to this on traditional architectures is the interrupt | 192 | The closest thing to this on traditional architectures is the interrupt |
193 | vector table. This is a good thing & does simplify some of the kernel coding | 193 | vector table. This is a good thing & does simplify some of the kernel coding |
194 | however it means that we now cannot catch stray NULL pointers in the | 194 | however it means that we now cannot catch stray NULL pointers in the |
@@ -239,7 +239,7 @@ they go to 64 Bit. | |||
239 | 239 | ||
240 | On 390 our limitations & strengths make us slightly different. | 240 | On 390 our limitations & strengths make us slightly different. |
241 | For backward compatibility we are only allowed use 31 bits (2GB) | 241 | For backward compatibility we are only allowed use 31 bits (2GB) |
242 | of our 32 bit addresses,however, we use entirely separate address | 242 | of our 32 bit addresses, however, we use entirely separate address |
243 | spaces for the user & kernel. | 243 | spaces for the user & kernel. |
244 | 244 | ||
245 | This means we can support 2GB of non Extended RAM on s/390, & more | 245 | This means we can support 2GB of non Extended RAM on s/390, & more |
@@ -317,9 +317,9 @@ Each process/thread under Linux for S390 has its own kernel task_struct | |||
317 | defined in linux/include/linux/sched.h | 317 | defined in linux/include/linux/sched.h |
318 | The S390 on initialisation & resuming of a process on a cpu sets | 318 | The S390 on initialisation & resuming of a process on a cpu sets |
319 | the __LC_KERNEL_STACK variable in the spare prefix area for this cpu | 319 | the __LC_KERNEL_STACK variable in the spare prefix area for this cpu |
320 | ( which we use for per processor globals). | 320 | (which we use for per-processor globals). |
321 | 321 | ||
322 | The kernel stack pointer is intimately tied with the task stucture for | 322 | The kernel stack pointer is intimately tied with the task structure for |
323 | each processor as follows. | 323 | each processor as follows. |
324 | 324 | ||
325 | s/390 | 325 | s/390 |
@@ -354,7 +354,7 @@ static inline struct task_struct * get_current(void) | |||
354 | } | 354 | } |
355 | 355 | ||
356 | i.e. just anding the current kernel stack pointer with the mask -8192. | 356 | i.e. just anding the current kernel stack pointer with the mask -8192. |
357 | Thankfully because Linux dosen't have support for nested IO interrupts | 357 | Thankfully because Linux doesn't have support for nested IO interrupts |
358 | & our devices have large buffers can survive interrupts being shut for | 358 | & our devices have large buffers can survive interrupts being shut for |
359 | short amounts of time we don't need a separate stack for interrupts. | 359 | short amounts of time we don't need a separate stack for interrupts. |
360 | 360 | ||
@@ -366,8 +366,8 @@ Register Usage & Stackframes on Linux for s/390 & z/Architecture | |||
366 | Overview: | 366 | Overview: |
367 | --------- | 367 | --------- |
368 | This is the code that gcc produces at the top & the bottom of | 368 | This is the code that gcc produces at the top & the bottom of |
369 | each function, it usually is fairly consistent & similar from | 369 | each function. It usually is fairly consistent & similar from |
370 | function to function & if you know its layout you can probalby | 370 | function to function & if you know its layout you can probably |
371 | make some headway in finding the ultimate cause of a problem | 371 | make some headway in finding the ultimate cause of a problem |
372 | after a crash without a source level debugger. | 372 | after a crash without a source level debugger. |
373 | 373 | ||
@@ -394,7 +394,7 @@ i.e they aren't in registers & they aren't static. | |||
394 | back-chain: | 394 | back-chain: |
395 | This is a pointer to the stack pointer before entering a | 395 | This is a pointer to the stack pointer before entering a |
396 | framed functions ( see frameless function ) prologue got by | 396 | framed functions ( see frameless function ) prologue got by |
397 | deferencing the address of the current stack pointer, | 397 | dereferencing the address of the current stack pointer, |
398 | i.e. got by accessing the 32 bit value at the stack pointers | 398 | i.e. got by accessing the 32 bit value at the stack pointers |
399 | current location. | 399 | current location. |
400 | 400 | ||
@@ -724,7 +724,7 @@ This is useful for debugging because | |||
724 | 1) You can double check whether the files you expect to be included are the ones | 724 | 1) You can double check whether the files you expect to be included are the ones |
725 | that are being included ( e.g. double check that you aren't going to the i386 asm directory ). | 725 | that are being included ( e.g. double check that you aren't going to the i386 asm directory ). |
726 | 2) Check that macro definitions aren't clashing with typedefs, | 726 | 2) Check that macro definitions aren't clashing with typedefs, |
727 | 3) Check that definitons aren't being used before they are being included. | 727 | 3) Check that definitions aren't being used before they are being included. |
728 | 4) Helps put the line emitting the error under the microscope if it contains macros. | 728 | 4) Helps put the line emitting the error under the microscope if it contains macros. |
729 | 729 | ||
730 | For convenience the Linux kernel's makefile will do preprocessing automatically for you | 730 | For convenience the Linux kernel's makefile will do preprocessing automatically for you |
@@ -840,12 +840,11 @@ using the strip command to make it a more reasonable size to boot it. | |||
840 | 840 | ||
841 | A source/assembly mixed dump of the kernel can be done with the line | 841 | A source/assembly mixed dump of the kernel can be done with the line |
842 | objdump --source vmlinux > vmlinux.lst | 842 | objdump --source vmlinux > vmlinux.lst |
843 | Also if the file isn't compiled -g this will output as much debugging information | 843 | Also, if the file isn't compiled -g, this will output as much debugging information |
844 | as it can ( e.g. function names ), however, this is very slow as it spends lots | 844 | as it can (e.g. function names). This is very slow as it spends lots |
845 | of time searching for debugging info, the following self explanitory line should be used | 845 | of time searching for debugging info. The following self explanatory line should be used |
846 | instead if the code isn't compiled -g. | 846 | instead if the code isn't compiled -g, as it is much faster: |
847 | objdump --disassemble-all --syms vmlinux > vmlinux.lst | 847 | objdump --disassemble-all --syms vmlinux > vmlinux.lst |
848 | as it is much faster | ||
849 | 848 | ||
850 | As hard drive space is valuble most of us use the following approach. | 849 | As hard drive space is valuble most of us use the following approach. |
851 | 1) Look at the emitted psw on the console to find the crash address in the kernel. | 850 | 1) Look at the emitted psw on the console to find the crash address in the kernel. |
@@ -861,7 +860,7 @@ Linux source tree. | |||
861 | 6) rm /arch/s390/kernel/signal.o | 860 | 6) rm /arch/s390/kernel/signal.o |
862 | 7) make /arch/s390/kernel/signal.o | 861 | 7) make /arch/s390/kernel/signal.o |
863 | 8) watch the gcc command line emitted | 862 | 8) watch the gcc command line emitted |
864 | 9) type it in again or alernatively cut & paste it on the console adding the -g option. | 863 | 9) type it in again or alternatively cut & paste it on the console adding the -g option. |
865 | 10) objdump --source arch/s390/kernel/signal.o > signal.lst | 864 | 10) objdump --source arch/s390/kernel/signal.o > signal.lst |
866 | This will output the source & the assembly intermixed, as the snippet below shows | 865 | This will output the source & the assembly intermixed, as the snippet below shows |
867 | This will unfortunately output addresses which aren't the same | 866 | This will unfortunately output addresses which aren't the same |
@@ -913,8 +912,8 @@ If you wanted to know does ping work but didn't have the source | |||
913 | strace ping -c 1 127.0.0.1 | 912 | strace ping -c 1 127.0.0.1 |
914 | & then look at the man pages for each of the syscalls below, | 913 | & then look at the man pages for each of the syscalls below, |
915 | ( In fact this is sometimes easier than looking at some spagetti | 914 | ( In fact this is sometimes easier than looking at some spagetti |
916 | source which conditionally compiles for several architectures ) | 915 | source which conditionally compiles for several architectures ). |
917 | Not everything that it throws out needs to make sense immeadiately | 916 | Not everything that it throws out needs to make sense immediately. |
918 | 917 | ||
919 | Just looking quickly you can see that it is making up a RAW socket | 918 | Just looking quickly you can see that it is making up a RAW socket |
920 | for the ICMP protocol. | 919 | for the ICMP protocol. |
@@ -974,8 +973,9 @@ through the pipe for each line containing the string open. | |||
974 | 973 | ||
975 | Example 3 | 974 | Example 3 |
976 | --------- | 975 | --------- |
977 | Getting sophistocated | 976 | Getting sophisticated |
978 | telnetd crashes on & I don't know why | 977 | telnetd crashes & I don't know why |
978 | |||
979 | Steps | 979 | Steps |
980 | ----- | 980 | ----- |
981 | 1) Replace the following line in /etc/inetd.conf | 981 | 1) Replace the following line in /etc/inetd.conf |
@@ -1085,8 +1085,7 @@ Notes | |||
1085 | ----- | 1085 | ----- |
1086 | Addresses & values in the VM debugger are always hex never decimal | 1086 | Addresses & values in the VM debugger are always hex never decimal |
1087 | Address ranges are of the format <HexValue1>-<HexValue2> or <HexValue1>.<HexValue2> | 1087 | Address ranges are of the format <HexValue1>-<HexValue2> or <HexValue1>.<HexValue2> |
1088 | e.g. The address range 0x2000 to 0x3000 can be described described as | 1088 | e.g. The address range 0x2000 to 0x3000 can be described as 2000-3000 or 2000.1000 |
1089 | 2000-3000 or 2000.1000 | ||
1090 | 1089 | ||
1091 | The VM Debugger is case insensitive. | 1090 | The VM Debugger is case insensitive. |
1092 | 1091 | ||
@@ -1311,7 +1310,7 @@ for finding out when a particular variable changes. | |||
1311 | 1310 | ||
1312 | An alternative way of finding the STD of a currently running process | 1311 | An alternative way of finding the STD of a currently running process |
1313 | is to do the following, ( this method is more complex but | 1312 | is to do the following, ( this method is more complex but |
1314 | could be quite convient if you aren't updating the kernel much & | 1313 | could be quite convenient if you aren't updating the kernel much & |
1315 | so your kernel structures will stay constant for a reasonable period of | 1314 | so your kernel structures will stay constant for a reasonable period of |
1316 | time ). | 1315 | time ). |
1317 | 1316 | ||
@@ -1413,7 +1412,7 @@ SMP Specific commands | |||
1413 | To find out how many cpus you have | 1412 | To find out how many cpus you have |
1414 | Q CPUS displays all the CPU's available to your virtual machine | 1413 | Q CPUS displays all the CPU's available to your virtual machine |
1415 | To find the cpu that the current cpu VM debugger commands are being directed at do | 1414 | To find the cpu that the current cpu VM debugger commands are being directed at do |
1416 | Q CPU to change the current cpu cpu VM debugger commands are being directed at do | 1415 | Q CPU to change the current cpu VM debugger commands are being directed at do |
1417 | CPU <desired cpu no> | 1416 | CPU <desired cpu no> |
1418 | 1417 | ||
1419 | On a SMP guest issue a command to all CPUs try prefixing the command with cpu all. | 1418 | On a SMP guest issue a command to all CPUs try prefixing the command with cpu all. |
@@ -1674,8 +1673,8 @@ channel is idle & the second for device end ( secondary status ) sometimes you g | |||
1674 | concurrently, you check how the IO went on by issuing a TEST SUBCHANNEL at each interrupt, | 1673 | concurrently, you check how the IO went on by issuing a TEST SUBCHANNEL at each interrupt, |
1675 | from which you receive an Interruption response block (IRB). If you get channel & device end | 1674 | from which you receive an Interruption response block (IRB). If you get channel & device end |
1676 | status in the IRB without channel checks etc. your IO probably went okay. If you didn't you | 1675 | status in the IRB without channel checks etc. your IO probably went okay. If you didn't you |
1677 | probably need a doctorto examine the IRB & extended status word etc. | 1676 | probably need a doctor to examine the IRB & extended status word etc. |
1678 | If an error occurs more sophistocated control units have a facitity known as | 1677 | If an error occurs, more sophistocated control units have a facitity known as |
1679 | concurrent sense this means that if an error occurs Extended sense information will | 1678 | concurrent sense this means that if an error occurs Extended sense information will |
1680 | be presented in the Extended status word in the IRB if not you have to issue a | 1679 | be presented in the Extended status word in the IRB if not you have to issue a |
1681 | subsequent SENSE CCW command after the test subchannel. | 1680 | subsequent SENSE CCW command after the test subchannel. |
@@ -1704,7 +1703,7 @@ concentrate on data processing. | |||
1704 | IOP's can use one or more links ( known as channel paths ) to talk to each | 1703 | IOP's can use one or more links ( known as channel paths ) to talk to each |
1705 | IO device. It first checks for path availability & chooses an available one, | 1704 | IO device. It first checks for path availability & chooses an available one, |
1706 | then starts ( & sometimes terminates IO ). | 1705 | then starts ( & sometimes terminates IO ). |
1707 | There are two types of channel path ESCON & the Paralell IO interface. | 1706 | There are two types of channel path: ESCON & the Parallel IO interface. |
1708 | 1707 | ||
1709 | IO devices are attached to control units, control units provide the | 1708 | IO devices are attached to control units, control units provide the |
1710 | logic to interface the channel paths & channel path IO protocols to | 1709 | logic to interface the channel paths & channel path IO protocols to |
@@ -1743,11 +1742,11 @@ controllers or a control unit which connects to 1000 3270 terminals ). | |||
1743 | 1742 | ||
1744 | The 390 IO systems come in 2 flavours the current 390 machines support both | 1743 | The 390 IO systems come in 2 flavours the current 390 machines support both |
1745 | 1744 | ||
1746 | The Older 360 & 370 Interface,sometimes called the paralell I/O interface, | 1745 | The Older 360 & 370 Interface,sometimes called the Parallel I/O interface, |
1747 | sometimes called Bus-and Tag & sometimes Original Equipment Manufacturers | 1746 | sometimes called Bus-and Tag & sometimes Original Equipment Manufacturers |
1748 | Interface (OEMI). | 1747 | Interface (OEMI). |
1749 | 1748 | ||
1750 | This byte wide paralell channel path/bus has parity & data on the "Bus" cable | 1749 | This byte wide Parallel channel path/bus has parity & data on the "Bus" cable |
1751 | & control lines on the "Tag" cable. These can operate in byte multiplex mode for | 1750 | & control lines on the "Tag" cable. These can operate in byte multiplex mode for |
1752 | sharing between several slow devices or burst mode & monopolize the channel for the | 1751 | sharing between several slow devices or burst mode & monopolize the channel for the |
1753 | whole burst. Upto 256 devices can be addressed on one of these cables. These cables are | 1752 | whole burst. Upto 256 devices can be addressed on one of these cables. These cables are |
@@ -1777,7 +1776,7 @@ Consoles 3270 & 3215 ( a teletype emulated under linux for a line mode console ) | |||
1777 | DASD's direct access storage devices ( otherwise known as hard disks ). | 1776 | DASD's direct access storage devices ( otherwise known as hard disks ). |
1778 | Tape Drives. | 1777 | Tape Drives. |
1779 | CTC ( Channel to Channel Adapters ), | 1778 | CTC ( Channel to Channel Adapters ), |
1780 | ESCON or Paralell Cables used as a very high speed serial link | 1779 | ESCON or Parallel Cables used as a very high speed serial link |
1781 | between 2 machines. We use 2 cables under linux to do a bi-directional serial link. | 1780 | between 2 machines. We use 2 cables under linux to do a bi-directional serial link. |
1782 | 1781 | ||
1783 | 1782 | ||
@@ -1803,8 +1802,8 @@ OSA 7C09 ON OSA 7C09 SUBCHANNEL = 0001 | |||
1803 | OSA 7C14 ON OSA 7C14 SUBCHANNEL = 0002 | 1802 | OSA 7C14 ON OSA 7C14 SUBCHANNEL = 0002 |
1804 | OSA 7C15 ON OSA 7C15 SUBCHANNEL = 0003 | 1803 | OSA 7C15 ON OSA 7C15 SUBCHANNEL = 0003 |
1805 | 1804 | ||
1806 | If you have a guest with certain priviliges you may be able to see devices | 1805 | If you have a guest with certain privileges you may be able to see devices |
1807 | which don't belong to you to avoid this do add the option V. | 1806 | which don't belong to you. To avoid this, add the option V. |
1808 | e.g. | 1807 | e.g. |
1809 | Q V OSA | 1808 | Q V OSA |
1810 | 1809 | ||
@@ -1837,7 +1836,7 @@ RDRLIST | |||
1837 | RECEIVE / LOG TXT A1 ( replace | 1836 | RECEIVE / LOG TXT A1 ( replace |
1838 | 8) | 1837 | 8) |
1839 | filel & press F11 to look at it | 1838 | filel & press F11 to look at it |
1840 | You should see someting like. | 1839 | You should see something like: |
1841 | 1840 | ||
1842 | 00020942' SSCH B2334000 0048813C CC 0 SCH 0000 DEV 7C08 | 1841 | 00020942' SSCH B2334000 0048813C CC 0 SCH 0000 DEV 7C08 |
1843 | CPA 000FFDF0 PARM 00E2C9C4 KEY 0 FPI C0 LPM 80 | 1842 | CPA 000FFDF0 PARM 00E2C9C4 KEY 0 FPI C0 LPM 80 |
@@ -1916,7 +1915,7 @@ Assembly | |||
1916 | -------- | 1915 | -------- |
1917 | info registers: displays registers other than floating point. | 1916 | info registers: displays registers other than floating point. |
1918 | info all-registers: displays floating points as well. | 1917 | info all-registers: displays floating points as well. |
1919 | disassemble: dissassembles | 1918 | disassemble: disassembles |
1920 | e.g. | 1919 | e.g. |
1921 | disassemble without parameters will disassemble the current function | 1920 | disassemble without parameters will disassemble the current function |
1922 | disassemble $pc $pc+10 | 1921 | disassemble $pc $pc+10 |
@@ -1935,7 +1934,7 @@ undisplay : undo's display's | |||
1935 | 1934 | ||
1936 | info breakpoints: shows all current breakpoints | 1935 | info breakpoints: shows all current breakpoints |
1937 | 1936 | ||
1938 | info stack: shows stack back trace ( if this dosent work too well, I'll show you the | 1937 | info stack: shows stack back trace ( if this doesn't work too well, I'll show you the |
1939 | stacktrace by hand below ). | 1938 | stacktrace by hand below ). |
1940 | 1939 | ||
1941 | info locals: displays local variables. | 1940 | info locals: displays local variables. |
@@ -2045,13 +2044,13 @@ what gdb does when the victim receives certain signals. | |||
2045 | list: | 2044 | list: |
2046 | e.g. | 2045 | e.g. |
2047 | list lists current function source | 2046 | list lists current function source |
2048 | list 1,10 list first 10 lines of curret file. | 2047 | list 1,10 list first 10 lines of current file. |
2049 | list test.c:1,10 | 2048 | list test.c:1,10 |
2050 | 2049 | ||
2051 | 2050 | ||
2052 | directory: | 2051 | directory: |
2053 | Adds directories to be searched for source if gdb cannot find the source. | 2052 | Adds directories to be searched for source if gdb cannot find the source. |
2054 | (note it is a bit sensititive about slashes ) | 2053 | (note it is a bit sensititive about slashes) |
2055 | e.g. To add the root of the filesystem to the searchpath do | 2054 | e.g. To add the root of the filesystem to the searchpath do |
2056 | directory // | 2055 | directory // |
2057 | 2056 | ||
@@ -2123,9 +2122,9 @@ p/x (*(**$sp+56))&0x7fffffff | |||
2123 | 2122 | ||
2124 | Disassembling instructions without debug info | 2123 | Disassembling instructions without debug info |
2125 | --------------------------------------------- | 2124 | --------------------------------------------- |
2126 | gdb typically compains if there is a lack of debugging | 2125 | gdb typically complains if there is a lack of debugging |
2127 | symbols in the disassemble command with | 2126 | symbols in the disassemble command with |
2128 | "No function contains specified address." to get around | 2127 | "No function contains specified address." To get around |
2129 | this do | 2128 | this do |
2130 | x/<number lines to disassemble>xi <address> | 2129 | x/<number lines to disassemble>xi <address> |
2131 | e.g. | 2130 | e.g. |
@@ -2184,7 +2183,7 @@ ps -aux | grep gdb | |||
2184 | kill -SIGSEGV <gdb's pid> | 2183 | kill -SIGSEGV <gdb's pid> |
2185 | or alternatively use killall -SIGSEGV gdb if you have the killall command. | 2184 | or alternatively use killall -SIGSEGV gdb if you have the killall command. |
2186 | Now look at the core dump. | 2185 | Now look at the core dump. |
2187 | ./gdb ./gdb core | 2186 | ./gdb core |
2188 | Displays the following | 2187 | Displays the following |
2189 | GNU gdb 4.18 | 2188 | GNU gdb 4.18 |
2190 | Copyright 1998 Free Software Foundation, Inc. | 2189 | Copyright 1998 Free Software Foundation, Inc. |
@@ -2316,7 +2315,7 @@ Showing us the shared libraries init uses where they are in memory | |||
2316 | /proc/1/mem is the current running processes memory which you | 2315 | /proc/1/mem is the current running processes memory which you |
2317 | can read & write to like a file. | 2316 | can read & write to like a file. |
2318 | strace uses this sometimes as it is a bit faster than the | 2317 | strace uses this sometimes as it is a bit faster than the |
2319 | rather inefficent ptrace interface for peeking at DATA. | 2318 | rather inefficient ptrace interface for peeking at DATA. |
2320 | 2319 | ||
2321 | 2320 | ||
2322 | cat status | 2321 | cat status |
@@ -2446,7 +2445,7 @@ displays the following lines as it executes them. | |||
2446 | + RELSTATUS=release | 2445 | + RELSTATUS=release |
2447 | + MACHTYPE=i586-pc-linux-gnu | 2446 | + MACHTYPE=i586-pc-linux-gnu |
2448 | 2447 | ||
2449 | perl -d <scriptname> runs the perlscript in a fully intercative debugger | 2448 | perl -d <scriptname> runs the perlscript in a fully interactive debugger |
2450 | <like gdb>. | 2449 | <like gdb>. |
2451 | Type 'h' in the debugger for help. | 2450 | Type 'h' in the debugger for help. |
2452 | 2451 | ||
@@ -2477,7 +2476,7 @@ Lcrash is a perfectly normal program,however, it requires 2 | |||
2477 | additional files, Kerntypes which is built using a patch to the | 2476 | additional files, Kerntypes which is built using a patch to the |
2478 | linux kernel sources in the linux root directory & the System.map. | 2477 | linux kernel sources in the linux root directory & the System.map. |
2479 | 2478 | ||
2480 | Kerntypes is an an objectfile whose sole purpose in life | 2479 | Kerntypes is an objectfile whose sole purpose in life |
2481 | is to provide stabs debug info to lcrash, to do this | 2480 | is to provide stabs debug info to lcrash, to do this |
2482 | Kerntypes is built from kerntypes.c which just includes the most commonly | 2481 | Kerntypes is built from kerntypes.c which just includes the most commonly |
2483 | referenced header files used when debugging, lcrash can then read the | 2482 | referenced header files used when debugging, lcrash can then read the |