Lines Matching +full:is +full:- +full:decoded +full:- +full:cs

5 		Copyright (C) 2000-2001 IBM Deutschland Entwicklung GmbH, IBM Corporation
10 This document is intended to give a good overview of how to debug
13 390 IO in any detail. It is intended to complement the documents in the
16 It is intended like the Enterprise Systems Architecture/390 Reference Summary
52 16 General propose registers, 32 bit on s/390 64 bit on z/Architecture, r0-r15 or gpr0-gpr15 used …
54 16 Control registers, 32 bit on s/390 64 bit on z/Architecture, ( cr0-cr15 kernel usage only ) used…
57 16 Access registers ( ar0-ar15 ) 32 bit on s/390 & z/Architecture
59 be used as temporary storage. Their main purpose is their 1 to 1
63 pointer ) ) is currently used by the pthread library as a pointer to
66 16 64 bit floating point registers (fp0-fp15 ) IEEE & HFP floating
71 ( provided the kernel is configured for this ).
74 The PSW is the most important register on the machine it
75 is 64 bit on s/390 & 128 bit on z/Architecture & serves the roles of
90 PER is used to facilitate debugging e.g. single stepping.
92 2-4 2-4 Reserved ( must be 0 ).
101 8-11 8-11 PSW Key used for complex memory protection mechanism not used under linux
115 16-17 16-17 Address Space Control
118 The linux kernel currently runs in this mode, CR1 is affiliated with
121 01 Access register mode this mode is used in functions to
125 register affiliated with this mode is & this & normally
134 kernel & don't keep secondary space free is that code will not run in
138 it is affiliated with CR13.
140 18-19 18-19 Condition codes (CC)
154 24-31 24-30 Reserved Must be 0.
167 33-64 Instruction address.
168 33-63 Reserved must be 0
169 64-127 Address
170 In 24 bits mode bits 64-103=0 bits 104-127 Address
171 In 31 bits mode bits 64-96=0 bits 97-127 Address
174 specification exception occurs, LPSW is fully backward
179 --------------
180 This per cpu memory area is too intimately tied to the processor not to mention.
181 It exists between the real addresses 0-4096 on s/390 & 0-8192 z/Architecture & is exchanged
184 This page is mapped to a different prefix for each processor in an SMP configuration
185 ( assuming the os designer is sane of course :-) ).
186 Bytes 0-512 ( 200 hex ) on s/390 & 0-512,4096-4544,4604-5119 currently on z/Architecture
190 ( there is a gap on z/Architecture too currently between 0xc00 & 1000 which linux uses ).
191 The closest thing to this on traditional architectures is the interrupt
192 vector table. This is a good thing & does simplify some of the kernel coding
201 The traditional Intel Linux is approximately mapped as follows forgive
219 Now it is easy to see that on Intel it is quite easy to recognise a kernel address
223 If using the virtual machine ( VM ) as a debugger it is quite difficult to
224 know which user process is running as the address space you are looking at
227 The limitation of Intels addressing technique is that the linux
229 of Real Address=Virtual Address-User Space Himem.
231 Himem=0xFFFFFFFF-0xC0000000=1GB & this is all the RAM these machines
252 Our addressing scheme is as follows
256 currently 0x3ffffffffff (2^42)-1 * User Stack * * *
274 A virtual address on s/390 is made up of 3 parts
276 being bits 1-11.
278 being bits 12-19.
283 The region index bits (RX) 0-32 we currently use bits 22-32
284 The segment index (SX) being bits 33-43
285 The page index (PX) being bits 44-51
286 The byte index (BX) being bits 52-63
289 1) s/390 has no PMD so the PMD is really the PGD also.
290 A lot of this stuff is defined in pgtable.h.
293 (bits 12-19 x 4 bytes per pte ) we use 1 ( page 4k )
298 ( bits 12-19 x 8 bytes per pte ) we do a similar trick
302 3) As z/Architecture supports up to a massive 5-level page table lookup we
303 can only use 3 currently on Linux ( as this is all the generic kernel
308 enough for another 2 or 3 of years I think :-).
309 to do this we use a region-third-table designation type in
319 (which we use for per-processor globals).
321 The kernel stack pointer is intimately tied with the task structure for
342 What this means is that we don't need to dedicate any register or global variable
349 __asm__("lhi %0,-8192\n\t"
355 i.e. just anding the current kernel stack pointer with the mask -8192.
366 ---------
367 This is the code that gcc produces at the top & the bottom of
368 each function. It usually is fairly consistent & similar from
381 ---------
383 This is a built in compiler function for runtime allocation
384 of extra space on the callers stack which is obviously freed
393 back-chain:
394 This is a pointer to the stack pointer before entering a
400 base-pointer:
401 This is a pointer to the back of the literal pool which
402 is an area just behind each procedure used to store constants
405 call-clobbered: The caller probably needs to save these registers if there
406 is something of value in them, on the stack or elsewhere before making a
412 frameless-function
413 A frameless function in Linux for s390 & z/Architecture is one which doesn't
422 GOT-pointer:
423 This is a pointer to the global-offset-table in ELF
427 lazy-binding
429 library are actually first called at runtime. This is lazy binding.
431 procedure-linkage-table
432 This is a table found from the GOT which contains pointers to routines
438 outgoing-args:
439 This is extra area allocated on the stack of the calling function if the
443 routine-descriptor:
446 This is typically defined as follows
449 The table of contents/TOC is roughly equivalent to a GOT pointer.
454 static-chain: This is used in nested functions a concept adopted from pascal
456 is a pointer used to reference local variables of enclosing functions.
476 r0 used by syscalls/assembly call-clobbered
477 r1 used by syscalls/assembly call-clobbered
478 r2 argument 0 / return value 0 call-clobbered
479 r3 argument 1 / return value 1 (if long long) call-clobbered
480 r4 argument 2 call-clobbered
481 r5 argument 3 call-clobbered
483 r7 pointer-to arguments 5 to ... saved
486 r10 static-chain ( if nested function ) saved
487 r11 frame-pointer ( if function used alloca ) saved
488 r12 got-pointer saved
489 r13 base-pointer saved
490 r14 return-address saved
491 r15 stack-pointer saved
493 f0 argument 0 / return value ( float/double ) call-clobbered
494 f2 argument 1 call-clobbered
498 f1,f3,f5 f7-f15 are call-clobbered.
501 ------
502 1) The only requirement is that registers which are used
503 by the callee are saved, e.g. the compiler is perfectly
505 frame pointer if a frame pointer is not needed.
507 is identical to one without variable arguments & the same number of
508 parameters. However, the prologue of this function is somewhat more
530 ------------------
555 0 back-chain
561 -----------------------------
563 ( :-( ).
564 2) This is a frameless function & no stack is bought.
566 value in r2 as well as use it for the passed in parameter ( :-) ).
568 has a special case with r0,r0 with some instruction operands is understood as
570 we are branching to the next address & the address new program counter is
577 400382: a7 da ff fa ahi %r13,-6 # basr trick
588 -----------------------------
589 1) The compiler did this function optimally ( 8-) )
597 40039a: a7 fa ff a0 ahi %r15,-96 # Make area for callee saving
599 4003a0: a7 da ff f0 ahi %r13,-16 # literal pool
616 ----------------
625 40050a: a7 fa ff a0 ahi %r15,-96
631 # compiler adds 1 extra instruction to epilogue this is done to
646 --------------------------------------
652 the only other difference you'll find between 32 & 64 bit is that
671 800005c6: a7 fb ff 60 aghi %r15,-160
675 # brasl allows jumps > 64k & is overkill here bras would do fune
686 -gdwarf-2 now works it should be considered the default debugging
687 format for s/390 & z/Architecture as it is more reliable for debugging
688 shared libraries, normal -g debugging works much better now
691 This is typically done adding/appending the flags -g or -gdwarf-2 to the
696 that there is no -O2 or similar on the CFLAGS line of the Makefile &
698 ( not advisable for shipment ) but it is an aid to the debugging process.
706 some bugs, please make sure you are using gdb-5.0 or later developed
713 It often helps to just preprocess the file, this is done with the -E
715 What this does is that it runs through the very first phase of compilation
716 ( compilation in gcc is done in several stages & gcc calls many programs to
717 achieve its end result ) with the -E option gcc just calls the gcc preprocessor (cpp).
722 This is useful for debugging because
737 s390-gcc -D__KERNEL__ -I/home1/barrow/linux/include -Wall -Wstrict-prototypes -O2 -fomit-frame-poin…
738 -fno-strict-aliasing -D__SMP__ -pipe -fno-strength-reduce -E arch/s390/kernel/signal.c
754 meant for another architecture or code that is simply not implemented, with a fixme statement
756 To look at the assembly emitted by gcc just before it is about to call gas ( the gnu assembler )
757 use the -S option.
764 s390-gcc -D__KERNEL__ -I/home1/barrow/linux/include -Wall -Wstrict-prototypes -O2 -fomit-frame-poin…
765 -fno-strict-aliasing -D__SMP__ -pipe -fno-strength-reduce -S arch/s390/kernel/signal.c
766 -o arch/s390/kernel/signal.s
778 .long -262401
780 .long -1
782 .long schedule-.L$PG1
784 .long do_signal-.L$PG1
799 AHI 15,-112
801 .L$CO1: AHI 13,.L$PG1-.L$CO1
804 N 5,.LC192-.L$PG1(13)
806 Adding -g to the above output makes the output even more useful
808 make CC:="s390-gcc -g" kernel/sched.s
811-gcc -g -D__KERNEL__ -I/home/barrow/linux-2.3/include -Wall -Wstrict-prototypes -O2 -fomit-frame-p…
820 is
823 rlimit_cur starts at bit offset 0 & is 32 bits in size
824 rlimit_max starts at bit offset 32 & is 32 bits in size.
832 This is a tool with many options the most useful being ( if compiled with -g).
833 objdump --source <victim program or object file> > <victims debug listing >
841 objdump --source vmlinux > vmlinux.lst
842 Also, if the file isn't compiled -g, this will output as much debugging information
843 as it can (e.g. function names). This is very slow as it spends lots
845 instead if the code isn't compiled -g, as it is much faster:
846 objdump --disassemble-all --syms vmlinux > vmlinux.lst
848 As hard drive space is valuable most of us use the following approach.
854 with this function if you don't know where it is.
855 4) rebuild this object file with -g on, as an example suppose the file was
857 5) Assuming the file with the erroneous function is signal.c Move to the base of the
862 9) type it in again or alternatively cut & paste it on the console adding the -g option.
863 10) objdump --source arch/s390/kernel/signal.o > signal.lst
867 by playing with the --adjust-vma parameter to objdump.
876 __asm__ __volatile(" lhi 1,-1\n"
877 a6: a7 18 ff ff lhi %r1,-1
879 ac: ba 01 30 00 cs %r0,%r1,0(%r3)
881 saveset = current->blocked;
884 return (set->sig[0] & mask) != 0;
890 I now have a tool which takes the pain out of --adjust-vma
895 This tool is now standard in linux distro's in scripts/makelst
898 -------
899 Q. What is it ?
900 A. It is a tool for intercepting calls to the kernel & logging them
903 Q. What use is it ?
909 ---------
911 strace ping -c 1 127.0.0.1
913 ( In fact this is sometimes easier than looking at some spaghetti
917 Just looking quickly you can see that it is making up a RAW socket
922 has an idea what is going on.
927 stat("/usr/share/locale/C/libc.cat", 0xbffff134) = -1 ENOENT (No such file or directory)
928 stat("/usr/share/locale/libc/C", 0xbffff134) = -1 ENOENT (No such file or directory)
929 stat("/usr/local/share/locale/C/libc.cat", 0xbffff134) = -1 ENOENT (No such file or directory)
934 mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40008000
956 ---------
960 open("/opt/kde/lib/libc.so.5", O_RDONLY) = -1 ENOENT (No such file or directory)
969 The 2>&1 is done to redirect stderr to stdout & grep is then filtering this input
974 ---------
979 -----
981 telnet stream tcp nowait root /usr/sbin/in.telnetd -h
987 /usr/bin/strace -o/t1 -f /usr/sbin/in.telnetd -h
990 killall -HUP inetd
993 & kill -HUP inetd to restart it.
996 -----------------
997 -o is used to tell strace to output to a file in our case t1 in the root directory
998 -f is to follow children i.e.
1000 You will be able to tell which is which from the process ID's listed on the left hand side
1002 -p<pid> will tell strace to attach to a running process, yup this can be done provided
1004 the reason 2 processes cannot trace or debug the same program is that strace
1013 413 execve("/usr/sbin/in.telnetd", ["/usr/sbin/in.telnetd", "-h"], [/* 17 vars */]) = 0
1014 414 execve("/bin/login", ["/bin/login", "-h", "localhost", "-p"], [/* 2 vars */]) = 0
1020 ------------
1021 If the program is not very interactive ( i.e. not much keyboard input )
1022 & is crashing in one architecture but not in another you can do
1029 is possibly near the cause of the crash.
1032 ---------
1039 gcc is capable of compiling in profiling code just add the -p option
1042 gcov the gnu code coverage tool ( code coverage is a means of testing
1048 ----------------------------------------------------------------
1055 tells you where each process is sleeping here is a typical output.
1070 ----------------
1071 Another related command is the time command which gives you an indication
1072 of where a process is spending the majority of its time.
1074 time ping -c 5 nc
1084 -----
1086 Address ranges are of the format <HexValue1>-<HexValue2> or <HexValue1>.<HexValue2>
1087 e.g. The address range 0x2000 to 0x3000 can be described as 2000-3000 or 2000.1000
1089 The VM Debugger is case insensitive.
1098 changing the interface :-), also the debugger displays useful information on the same line &
1105 also it is quite easy to follow, if you don't have an objdump listing keep a copy of
1110 is a ( load register ) lr r0,r15
1112 Also it is very easy to tell the length of a 390 instruction from the 2 most significant
1113 bits in the instruction ( not that this info is really useful except if you are trying to
1115 Here is a table
1117 ------------------------------------------
1130 000198BA' BRC A7840004 -> 000198C2' CC 0
1136 ---------------------------
1152 It is typically useful to add shortcuts to your profile.exec file
1153 if you have one ( this is roughly equivalent to autoexec.bat in DOS ).
1169 -------------------
1184 TR BR INTO 0 is often quite useful if a program is getting awkward & deciding
1193 --------------------------------
1195 Adding a extra G to all the commands is necessary to access the full 64 bit
1201 D AR4-7 will display access registers 4 to 7
1210 -----------------
1219 but are in primary space the easiest thing to do is to temporarily
1226 -----
1241 This sends a message to your own console each time do_signal is entered.
1247 On linux'es 3270 emulator x3270 there is a very useful option under the file ment
1248 Save Screens In File this is very good of keeping a copy of traces.
1263 which can be used for ^c (ctrl-c),^z (ctrl-z) which can't be typed directly into some 3270 consoles.
1264 SET PF11 ^-
1270 Sometimes in VM the display is set up to scroll automatically this
1280 ----------------------------
1281 The kernel's text segment is intentionally at an address in memory that it will
1284 However it is quite common for user processes to have addresses which collide
1291 Your first problem is to find the STD ( segment table designation )
1294 1) objdump --syms <program to be debugged> | grep main
1298 point of the main function this is most likely the process you wish to debug.
1300 On 31 bit the STD is bits 1-19 ( the STO segment table origin )
1301 & 25-31 ( the STL segment table length ) of CR13.
1306 Another very useful variation is
1311 is to do the following, ( this method is more complex but
1320 Now make CC:="s390-gcc -g" kernel/sched.s
1322 ( task_struct is defined in include/linux/sched.h ).
1324 task->active_mm->pgd
1325 on my machine the active_mm in the task structure stab is
1327 its offset is 672/8=84=0x54
1328 the pgd member in the mm_struct stab is
1330 so its offset is 96/8=12=0xc
1333 hexdump -s 0xf160054 /dev/mem | more
1337 hexdump -s 0x0feecc6c /dev/mem | more
1343 i.e. the 0x7f is added because the pgd only
1354 --------------------------
1361 The most common ones you will normally be tracing for is
1370 The full list of these is on page 22 of the current s/390 Reference Summary.
1376 ----------
1380 till a driver is open before you start tracing IO, but know in your
1384 What you can do is
1390 TR IO 7c08-7c09 inst int run
1399 -------------------------------
1401 possibilities of these as the instruction is made up of a 0xA opcode & the second byte being
1406 TR SVC 5 ( as this is the syscall number of open )
1410 ---------------------
1423 shutdown -h now or halt.
1427 DETACH CPU 01-(number of cpus in configuration)
1430 DEFINE CPU 01-(number in configuration)
1435 -------------------------------------
1449 This is quite useful when looking at a parameter passed in as a text string
1455 000151B0' SVC 0A05 -> 0001909A' CC 0
1468 Now display what gpr2 is pointing to
1472 Now copy the text till the first 00 hex ( which is the end of the string
1476 Decoded Hex:=/ d e v / c o n s o l e 0x00
1479 You can compile the code below yourself for practice :-),
1495 if(argc>1&&(strcmp(argv[1],"-a")==0))
1497 printf("Decoded Hex:=");
1505 c=c-'0';
1507 c=c-'A'+10;
1509 c=c-'a'+10;
1543 ----------------------
1545 -----------------
1550 --------------------------------------
1551 This can happen when an exception happens in the kernel & the kernel is entered twice
1554 1) A kernel address should be easy to recognise since it is in
1556 The Hi bit of the address is set.
1557 2) Another backchain should also be easy to recognise since it is an
1562 Here is some practice.
1569 Note that GPR14 is a return address but as we are real men we are going to
1579 Ah now look at whats in sp+56 (sp+0x38) this is 8001B36A our saved r14 if
1601 our 3rd return address is 8001085A
1603 as the 04B52002 looks suspiciously like rubbish it is fair to assume that the kernel entry routines
1608 grep -i 0001b3 System.map
1612 is cpu_idle+0x66 ( quiet the cpu is asleep, don't wake it )
1615 grep -i 00014 System.map
1618 so 0014CA6 is start_kernel+some hex number I can't add in my head.
1620 grep -i 00108 System.map
1623 so 8001085A is _stext+0x5a
1641 with around 64. Here is some of the common IO terminology
1644 This is the logical number most IO commands use to talk to an IO device there can be up to
1645 0x10000 (65536) of these in a configuration typically there is a few hundred. Under VM
1647 they typically stay consistent between boots provided no new hardware is inserted or removed.
1653 can have up to 8 channel paths to a device this offers redundancy if one is not available.
1657 This number remains static & Is closely tied to the hardware, there are 65536 of these
1660 from the hardware, there is a 1 to 1 mapping between Subchannels & Device Numbers provided
1665 which is initially given to Start Subchannel (SSCH) command along with the subchannel number
1671 channel is idle & the second for device end ( secondary status ) sometimes you get both
1692 this architecture is also designed to be forward compatible with up & coming 64 bit machines.
1714 +---------------------------------------------------------------+
1715 | +-----+ +-----+ +-----+ +-----+ +----------+ +----------+ |
1718 | +-----+ +-----+ +-----+ +-----+ +----------+ +----------+ |
1719 |---------------------------------------------------------------+
1721 |---------------------------------------------------------------
1723 ----------------------------------------------------------------
1728 +----------+ +----------+ +----------+
1732 +----------+ +----------+ +----------+
1734 +----------+ +----------+ +----------+ +----------+ +----------+
1736 +----------+ +----------+ +----------+ +----------+ +----------+
1745 sometimes called Bus-and Tag & sometimes Original Equipment Manufacturers
1752 about one inch in diameter. The maximum unextended length supported by these cables is
1754 such as a 3044. The maximum burst speed supported is 4.5 megabytes per second however
1759 ESCON if fibre optic it is also called FICON
1765 ESCONs typical max cable length is 3km for the led version & 20km for the laser version
1767 ESCON director which triples the above mentioned ranges. Unlike Bus & Tag as ESCON is
1769 is however present within the packets. Up to 256 devices can be attached to each control
1773 Network adapters typically OSA2,3172's,2116's & OSA-E gigabit ethernet adapters,
1779 between 2 machines. We use 2 cables under linux to do a bi-directional serial link.
1790 Q DISK ( This command is CMS specific )
1813 like TR SSCH 7C08-7C09
1815 or TR HSCH 7C08-7C09
1818 Ingo's favourite trick is tracing all the IO's & CCWS & spooling them into the reader of another
1825 TR IO 7c08-7c09 INST INT CCW PRT RUN
1845 00020B0A' I/O DEV 7C08 -> 000197BC' SCH 0000 PARM 00E2C9C4
1856 ---------------------------------------------
1867 The VARY command is normally only available to VM administrators.
1870 This is used to switch on or off channel paths to devices.
1876 this I believe is also only available to administrators.
1885 def vfb-<blocksize> <subchannel> <number blocks>
1886 blocksize is commonly 4096 for linux.
1901 ----------
1905 -----------
1910 Note gdb's online help is very good use it.
1914 --------
1916 info all-registers: displays floating points as well.
1923 -----------------------------
1943 set args: will set argc & argv each time the victim program is invoked.
1952 -------------------
1974 ------------
2006 is inconsistent & not very good, watchpoints usually work but not always.
2011 Specify breakpoint number N to break only if COND is true.
2012 Usage is `condition N COND', where N is an integer and COND is an
2013 expression to be evaluated whenever breakpoint N is reached.
2018 -----------------------------
2019 define: ( Note this is very very useful,simple & powerful )
2035 ----------------------------
2052 (note it is a bit sensitive about slashes)
2058 This calls a function in the victim program, this is pretty powerful
2073 -----
2076 e.g. hit br <TAB> & cursor up & down :-).
2081 your home directory & they will be read each time gdb is launched.
2091 -----------------------------
2092 This is done using a the same trick described for VM
2100 i.e. here is a 3rd backchain dereference
2110 rl_getc + 36 in section .text telling you what is located at address 0x528f18
2123 ---------------------------------------------
2124 gdb typically complains if there is a lack of debugging
2140 -------------
2145 ----------
2147 A core dump is a file generated by the kernel ( if allowed ) which contains the registers,
2150 program as if it just crashed on your system, it is usually called core & created in the
2152 This is very useful in that a customer can mail a core dump to a technical support department
2155 the source base of this build is available.
2156 In short it is far more useful than something like a crash log could ever hope to be.
2158 In theory all that is missing to restart a core dumped program is a kernel patch which
2170 ulimit -c unlimited in bash
2172 ulimit -a
2177 ulimit -c unlimited
2181 ps -aux | grep gdb
2182 kill -SIGSEGV <gdb's pid>
2183 or alternatively use killall -SIGSEGV gdb if you have the killall command.
2189 GDB is free software, covered by the GNU General Public License, and you are
2192 There is absolutely no warranty for GDB. Type "show warranty" for details.
2193 This GDB was configured as "s390-ibm-linux"...
2199 Reading symbols from /lib/ld-linux.so.2...done.
2204 (top-gdb) info stack
2221 This is a program which lists the shared libraries which a library needs,
2223 help when using objdump --source.
2230 /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
2237 first time & you end up in functions like _dl_runtime_resolve this is
2238 the ld.so doing lazy binding, lazy binding is a concept in ELF where
2241 To get around this either relink the program -static or exit gdb type
2250 anywhere to get around this use the -m option with insmod to emit a load
2255 What is it ?.
2256 It is a filesystem created by the kernel with files which are created on demand
2258 it is a powerful concept.
2265 telling me ip_forwarding is not on to switch it on I can do
2271 IP forwarding is on.
2272 There is a lot of useful info in here best found by going in & having a look around,
2291 00400000-00478000 r-xp 00000000 5f:00 4103 /bin/bash
2292 00478000-0047e000 rw-p 00077000 5f:00 4103 /bin/bash
2293 0047e000-00492000 rwxp 00000000 00:00 0
2294 40000000-40015000 r-xp 00000000 5f:00 14382 /lib/ld-2.1.2.so
2295 40015000-40016000 rw-p 00014000 5f:00 14382 /lib/ld-2.1.2.so
2296 40016000-40017000 rwxp 00000000 00:00 0
2297 40017000-40018000 rw-p 00000000 00:00 0
2298 40018000-4001b000 r-xp 00000000 5f:00 14435 /lib/libtermcap.so.2.0.8
2299 4001b000-4001c000 rw-p 00002000 5f:00 14435 /lib/libtermcap.so.2.0.8
2300 4001c000-4010d000 r-xp 00000000 5f:00 14387 /lib/libc-2.1.2.so
2301 4010d000-40111000 rw-p 000f0000 5f:00 14387 /lib/libc-2.1.2.so
2302 40111000-40114000 rw-p 00000000 00:00 0
2303 40114000-4011e000 r-xp 00000000 5f:00 14408 /lib/libnss_files-2.1.2.so
2304 4011e000-4011f000 rw-p 00009000 5f:00 14408 /lib/libnss_files-2.1.2.so
2305 7fffd000-80000000 rwxp ffffe000 00:00 0
2311 /proc/1/cwd is a softlink to the current working directory.
2312 /proc/1/root is the root of the filesystem for this process.
2314 /proc/1/mem is the current running processes memory which you
2316 strace uses this sometimes as it is a bit faster than the
2368 -------------
2383 ------------------------------------
2384 ifconfig is a quite useful command
2387 If you suspect your network device driver is dead
2388 one way to check is type
2411 ping -c 5 <broadcast_addr> i.e. the Bcast field above in the output of
2420 -------
2421 There is a new device layer for channel devices, some
2435 bash -x <scriptname>
2436 e.g. bash -x /usr/bin/bashbug
2439 + OS=linux-gnu
2441 … CFLAGS= -DPROGRAM='bash' -DHOSTTYPE='i586' -DOSTYPE='linux-gnu' -DMACHTYPE='i586-pc-linux-gnu' -D…
2445 + MACHTYPE=i586-pc-linux-gnu
2447 perl -d <scriptname> runs the perlscript in a fully interactive debugger
2459 This is now supported by linux for s/390 & z/Architecture.
2461 Kernel Hacking -> Magic SysRq Key Enabled
2467 ^-
2469 ^-t will show tasks.
2470 ^-? or some unknown command will display help.
2471 The sysrq key reading is very picky ( I have to type the keys in an
2475 This is particularly useful for syncing disks unmounting & rebooting
2492 z/Architecture Principles of Operation SA22-7832-00
2493 Enterprise Systems Architecture/390 Reference Summary SA22-7209-01 & the
2494 Enterprise Systems Architecture/390 Principles of Operation SA22-7201-05