|
|
1.1 ! root 1: .TH ADB 1 ! 2: .CT 1 debug_tune ! 3: .ds TW \v'.25m'\s+2~\s-2\v'-.25m' ! 4: .ds ST \v'.25m'*\v'-.25m' ! 5: .ds IM \v'.1m'=\v'-.1m'\s-2\h'-.1m'>\h'.1m'\s+2 ! 6: .ds LE \(<= ! 7: .ds LT \s-2<\s+2 ! 8: .ds GT \s-2>\s+2 ! 9: .SH NAME ! 10: adb \- debugger ! 11: .SH SYNOPSIS ! 12: .B adb ! 13: [ ! 14: .I option ... ! 15: ] ! 16: [ ! 17: .I objfil ! 18: [ ! 19: .I corfil ! 20: ] ! 21: ] ! 22: .SH DESCRIPTION ! 23: .I Adb ! 24: is a general purpose debugging program. ! 25: It may be used to examine files and to provide ! 26: a controlled environment for the execution ! 27: of UNIX programs. ! 28: .PP ! 29: .I Objfil ! 30: is normally an executable program file, preferably ! 31: containing a symbol table; ! 32: if not then the ! 33: symbolic features of ! 34: .I adb ! 35: cannot be used although the file can still ! 36: be examined. ! 37: The default for ! 38: .I objfil ! 39: is ! 40: .LR a.out . ! 41: .I Corfil ! 42: is assumed to be a core image file produced after ! 43: executing ! 44: .IR objfil ; ! 45: the default for ! 46: .I corfil ! 47: is ! 48: .LR core . ! 49: .PP ! 50: Requests to ! 51: .I adb ! 52: are read from the standard input and ! 53: responses are to the standard output. ! 54: Quit signals are ignored; interrupts ! 55: cause return to the next ! 56: .I adb ! 57: command. ! 58: The options are ! 59: .TP ! 60: .B -w ! 61: Create ! 62: .I objfil ! 63: and ! 64: .I corfil ! 65: if they don't exist; open them for writing ! 66: as well as reading. ! 67: .TP ! 68: .BI -I path ! 69: Directory in which to look for relative pathnames in ! 70: .B $< ! 71: and ! 72: .B $<< ! 73: commands. ! 74: .PP ! 75: In general requests to ! 76: .I adb ! 77: have the following form. ! 78: Multiple requests on one line must be separated by ! 79: .LR ; . ! 80: .IP ! 81: .RI [ address ] ! 82: .RB [ , ! 83: .IR count ] ! 84: .RI [ command ] ! 85: .PP ! 86: If ! 87: .I address ! 88: is present then the current position, called `dot', ! 89: is set to ! 90: .IR address . ! 91: Initially dot ! 92: is set to 0. ! 93: In general commands are repeated ! 94: .I count ! 95: times. ! 96: Dot advances between repetitions. ! 97: The default ! 98: .I count ! 99: is 1. ! 100: .I Address ! 101: and ! 102: .I count ! 103: are expressions. ! 104: .PP ! 105: Some formats, ! 106: data sizes, ! 107: and command details have ! 108: different behavior ! 109: on different systems. ! 110: See the ! 111: .SM "MACHINE DEPENDENCIES" ! 112: attachment for details. ! 113: .SS Expressions ! 114: Expressions are computed with sufficient precision ! 115: to address the largest possible file; ! 116: generally this means a long integer. ! 117: On the VAX, ! 118: expressions are 32 bits; ! 119: on the Cray, ! 120: 64 bits. ! 121: .TP 7.2n ! 122: .B . ! 123: The value of dot. ! 124: .TP 7.2n ! 125: .B + ! 126: The value of dot ! 127: incremented by the current increment. ! 128: .TP 7.2n ! 129: .B ^ ! 130: The value of dot ! 131: decremented by the current increment. ! 132: .TP 7.2n ! 133: .B \&" ! 134: The last ! 135: .I address ! 136: typed. ! 137: .TP 7.2n ! 138: .I integer ! 139: A number ! 140: in the ! 141: .IR "default radix" ; ! 142: see the ! 143: .B $d ! 144: command. ! 145: Regardless of the default, ! 146: the prefixes ! 147: .L 0o ! 148: and ! 149: .L 0O ! 150: (zero oh) force interpretation ! 151: in octal radix; the prefixes ! 152: .L 0t ! 153: and ! 154: .L 0T ! 155: force interpretation in ! 156: decimal radix; the prefixes ! 157: .LR 0x , ! 158: .LR 0X , ! 159: and ! 160: .L # ! 161: force interpretation in ! 162: hexadecimal radix. ! 163: Thus ! 164: .LR 0o20 , ! 165: .LR 0t16 , ! 166: and ! 167: .L #10 ! 168: all represent sixteen. ! 169: .TP 7.2n ! 170: .IB integer . fraction ! 171: A floating point number. ! 172: .TP 7.2n ! 173: .BI \' cccc\| \' ! 174: The ! 175: .SM ASCII ! 176: value of one or more characters. ! 177: .L \e ! 178: may be used to escape a ! 179: .LR \' . ! 180: .TP 7.2n ! 181: .BI < name ! 182: The value of ! 183: .IR name , ! 184: which is either a variable name or a register name. ! 185: .I Adb ! 186: maintains a number of variables ! 187: named by single letters or digits. ! 188: The register names are ! 189: those printed by the ! 190: .B $r ! 191: command. ! 192: .TP 7.2n ! 193: .I symbol ! 194: A ! 195: .I symbol ! 196: is a sequence ! 197: of upper or lower case letters, underscores or ! 198: digits, not starting with a digit. ! 199: .L \e ! 200: may be used to escape other characters. ! 201: The value of the ! 202: .I symbol ! 203: is taken from the symbol table ! 204: in ! 205: .IR objfil . ! 206: .TP 7.2n ! 207: .IB routine . name ! 208: The address of the variable ! 209: .I name ! 210: in the specified ! 211: C routine. ! 212: Both ! 213: .I routine ! 214: and ! 215: .I name ! 216: are ! 217: .IR symbols . ! 218: If ! 219: .I name ! 220: is omitted the value is the address of the ! 221: most recently activated C stack frame ! 222: corresponding to ! 223: .IR routine ; ! 224: if ! 225: .I routine ! 226: is omitted, ! 227: the active procedure ! 228: is assumed. ! 229: .TP 7.2n ! 230: .BI ( exp ) ! 231: The value of the expression ! 232: .IB exp . ! 233: .LP ! 234: .I Monadic operators ! 235: .TP 7.2n ! 236: .BI * exp ! 237: The contents of the location addressed ! 238: by ! 239: .I exp ! 240: in ! 241: .IR corfil . ! 242: .TP 7.2n ! 243: .BI @ exp ! 244: The contents of the location addressed by ! 245: .I exp ! 246: in ! 247: .IR objfil . ! 248: .TP 7.2n ! 249: .BI - exp ! 250: Integer negation. ! 251: .TP 7.2n ! 252: .BI ~ exp ! 253: Bitwise complement. ! 254: .TP 7.2n ! 255: .BI % exp ! 256: If ! 257: .I exp ! 258: is used as an address, ! 259: it is in register space; ! 260: see `Addresses'. ! 261: .LP ! 262: .I "Dyadic\ operators" ! 263: are left associative ! 264: and are less binding than monadic operators. ! 265: .TP 7.2n ! 266: .IB e1 + e2 ! 267: Integer addition. ! 268: .TP 7.2n ! 269: .IB e1 - e2 ! 270: Integer subtraction. ! 271: .TP 7.2n ! 272: .IB e1 * e2 ! 273: Integer multiplication. ! 274: .TP 7.2n ! 275: .IB e1 % e2 ! 276: Integer division. ! 277: .TP 7.2n ! 278: .IB e1 & e2 ! 279: Bitwise conjunction. ! 280: .TP 7.2n ! 281: .IB e1 | e2 ! 282: Bitwise disjunction. ! 283: .TP 7.2n ! 284: .IB e1 # e2 ! 285: .I E1 ! 286: rounded up to the next multiple of ! 287: .IR e2 . ! 288: .DT ! 289: .SS Commands ! 290: Most commands consist of a verb followed by a modifier or list ! 291: of modifiers. ! 292: The following verbs are available. ! 293: (The commands ! 294: .L ? ! 295: and ! 296: .L / ! 297: may be followed by ! 298: .LR * ; ! 299: see `Addresses' ! 300: for further details.) ! 301: .TP .5i ! 302: .BI ? f ! 303: Locations starting at ! 304: .I address ! 305: in ! 306: .I objfil ! 307: are printed according to the format ! 308: .IR f . ! 309: .TP ! 310: .BI / f ! 311: Locations starting at ! 312: .I address ! 313: in ! 314: .I corfil ! 315: are printed according to the format ! 316: .I f. ! 317: .TP ! 318: .BI = f ! 319: The value of ! 320: .I address ! 321: itself is printed in the ! 322: styles indicated by the format ! 323: .IR f . ! 324: (For ! 325: .B i ! 326: format ! 327: .L ? ! 328: is printed for the parts of the instruction that reference ! 329: subsequent words.) ! 330: .PP ! 331: A ! 332: .I format ! 333: consists of one or more characters that specify a style ! 334: of printing. ! 335: Each format character may be preceded by a decimal integer ! 336: that is a repeat count for the format character. ! 337: If no format is given then the last format is used. ! 338: .PP ! 339: Most format letters fetch some data, ! 340: print it, ! 341: and advance (a local copy of) dot ! 342: by the number of bytes fetched. ! 343: The total number of bytes in a format becomes the ! 344: .I current increment. ! 345: `Long integers' are full words, ! 346: the size of an expression item: ! 347: e.g.\& ! 348: 4 bytes on the VAX, ! 349: 8 bytes on the Cray. ! 350: `Short integers' ! 351: are some useful shorter size: ! 352: 2 byte short integers on the VAX, ! 353: 2 byte parcels on the Cray. ! 354: .ta 2.5n .5i ! 355: .RS ! 356: .TP ! 357: .PD 0 ! 358: .B r ! 359: Print short integer in the current default radix. ! 360: .TP ! 361: .PD 0 ! 362: .B R ! 363: Print long integer in the current default radix. ! 364: .TP ! 365: .PD 0 ! 366: .B o ! 367: Print short integer in octal. ! 368: .TP ! 369: .B O ! 370: Print long integer in octal. ! 371: .TP ! 372: .B q ! 373: Print short in signed octal. ! 374: .TP ! 375: .B Q ! 376: Print long in signed octal. ! 377: .TP ! 378: .B d ! 379: Print short in decimal. ! 380: .TP ! 381: .B D ! 382: Print long in decimal. ! 383: .TP ! 384: .B x ! 385: Print short in hexadecimal. ! 386: .TP ! 387: .B X ! 388: Print long in hexadecimal. ! 389: .TP ! 390: .B u ! 391: Print short in unsigned decimal. ! 392: .TP ! 393: .B U ! 394: Print long in unsigned decimal. ! 395: .TP ! 396: .B f ! 397: Print ! 398: as a floating point number. ! 399: .TP ! 400: .B F ! 401: Print double-precision floating point. ! 402: .TP ! 403: .B b ! 404: Print the addressed byte in octal. ! 405: .TP ! 406: .B c ! 407: Print the addressed character. ! 408: .TP ! 409: .B C ! 410: Print the addressed character. ! 411: Control characters ! 412: are printed in the form ! 413: .BI ^ X ! 414: and the delete character is printed as ! 415: .LR ^? . ! 416: .TP ! 417: .B s ! 418: Print the addressed characters until a zero character ! 419: is reached. ! 420: Advance dot ! 421: by the length of the string, ! 422: including the zero terminator. ! 423: .TP ! 424: .B S ! 425: Print a string using ! 426: the ! 427: .BI ^ X ! 428: escape convention (see ! 429: .B C ! 430: above). ! 431: .TP ! 432: .B Y ! 433: Print a long integer in date format (see ! 434: .IR ctime (3)). ! 435: .TP ! 436: .B i ! 437: Print as machine instructions. ! 438: This style of printing causes variables ! 439: 0, (1, ...) ! 440: to be set to the offset parts ! 441: of the first (second, ...) ! 442: operand of the instruction. ! 443: .TP ! 444: .B a ! 445: Print the value of dot ! 446: in symbolic form. ! 447: Dot is unaffected. ! 448: .TP ! 449: .B p ! 450: Print the addressed value in symbolic form. ! 451: Dot is advanced by the size of a machine address ! 452: (4 bytes on the VAX, ! 453: 8 bytes on the Cray). ! 454: .TP ! 455: .B t ! 456: When preceded by an integer tabs to the next ! 457: appropriate tab stop. ! 458: For example, ! 459: .B 8t ! 460: moves to the next 8-space tab stop. ! 461: Dot is unaffected. ! 462: .TP ! 463: .B n ! 464: Print a newline. ! 465: Dot is unaffected. ! 466: .tr '" ! 467: .TP ! 468: .BR ' ... ' ! 469: Print the enclosed string. ! 470: Dot is unaffected. ! 471: .br ! 472: .tr '' ! 473: .TP ! 474: .B ^ ! 475: Dot is decremented by the current increment. ! 476: Nothing is printed. ! 477: .TP ! 478: .B + ! 479: Dot is incremented by 1. ! 480: Nothing is printed. ! 481: .TP ! 482: .B - ! 483: Dot is decremented by 1. ! 484: Nothing is printed. ! 485: .RE ! 486: .PD ! 487: .TP ! 488: newline ! 489: Update dot by the current increment. ! 490: Repeat the previous command with a ! 491: .I count ! 492: of 1. ! 493: .TP ! 494: .RB [ ?/ ] l "\fI value mask\fR" ! 495: Words starting at dot ! 496: are masked with ! 497: .I mask ! 498: and compared with ! 499: .I value ! 500: until ! 501: a match is found. ! 502: If ! 503: .B l ! 504: is used, ! 505: the match is for a short integer; ! 506: .B L ! 507: matches longs. ! 508: If no match is found then dot ! 509: is unchanged; otherwise dot ! 510: is set to the matched location. ! 511: If ! 512: .I mask ! 513: is omitted then \-1 is used. ! 514: .TP ! 515: .RB [ ?/ ] w "\fI value ...\fR" ! 516: Write the short ! 517: .I value ! 518: into the addressed ! 519: location. ! 520: If the command is ! 521: .BR W , ! 522: write a long. ! 523: Option ! 524: .B -w ! 525: must be in effect. ! 526: .TP ! 527: .RB [ ?/ ] "m\fI b e f \fP" [ ?\fR] ! 528: .br ! 529: New values for ! 530: .RI ( b,\ e,\ f ) ! 531: in the first map entry ! 532: are recorded. ! 533: If less than three expressions are given then ! 534: the remaining map parameters are left unchanged. ! 535: The address type (instruction or data) ! 536: is unchanged in any case. ! 537: If the ! 538: .L ? ! 539: or ! 540: .L / ! 541: is followed by ! 542: .L * ! 543: then ! 544: the second segment ! 545: of the mapping is changed. ! 546: If the list is terminated by ! 547: .L ? ! 548: or ! 549: .L / ! 550: then the file ! 551: .RI ( objfil ! 552: or ! 553: .I corfil ! 554: respectively) is used ! 555: for subsequent requests. ! 556: For example, ! 557: .L /m? ! 558: will cause ! 559: .L / ! 560: to refer to ! 561: .IR objfil . ! 562: .TP ! 563: .BI > name ! 564: Dot is assigned to the variable or register named. ! 565: .TP ! 566: .B ! ! 567: A shell is called to read the ! 568: rest of the line following `!'. ! 569: .TP ! 570: .BI $ modifier ! 571: Miscellaneous commands. ! 572: The available ! 573: .I modifiers ! 574: are: ! 575: .RS ! 576: .TP ! 577: .PD 0 ! 578: .BI < f ! 579: Read commands from the file ! 580: .IR f . ! 581: If ! 582: .I f ! 583: cannot be found, try ! 584: .BI /usr/lib/adb/ f. ! 585: If this command is executed in a file, further commands ! 586: in the file are not seen. ! 587: If ! 588: .I f ! 589: is omitted, the current input stream is terminated. ! 590: If a ! 591: .I count ! 592: is given, and is zero, the command will be ignored. ! 593: The value of the count will be placed in variable ! 594: .B 9 ! 595: before the first command in ! 596: .I f ! 597: is executed. ! 598: .TP ! 599: .BI << f ! 600: Similar to ! 601: .B < ! 602: except it can be used in a file of commands without ! 603: causing the file to be closed. ! 604: Variable ! 605: .B 9 ! 606: is saved during the execution of this command, and restored ! 607: when it completes. ! 608: There is a (small) limit to the number of ! 609: .B << ! 610: files that can be open at once. ! 611: .br ! 612: .ns ! 613: .TP ! 614: .BI > f ! 615: Append output to the file ! 616: .IR f , ! 617: which is created if it does not exist. ! 618: If ! 619: .I f ! 620: is omitted, output is returned to the terminal. ! 621: .TP ! 622: .B ? ! 623: Print process id, the signal which caused stopping or termination, ! 624: as well as the registers. ! 625: This is the default if ! 626: .I modifier ! 627: is omitted. ! 628: .TP ! 629: .B r ! 630: Print the general registers and ! 631: the instruction addressed by ! 632: .BR pc . ! 633: Dot is set to ! 634: .BR pc . ! 635: .TP ! 636: .B R ! 637: Like ! 638: .BR $r , ! 639: but include miscellaneous registers ! 640: such as the kernel stack pointer. ! 641: .TP ! 642: .B b ! 643: Print all breakpoints ! 644: and their associated counts and commands. ! 645: .TP ! 646: .B c ! 647: C stack backtrace. ! 648: If ! 649: .I address ! 650: is given then it is taken as the ! 651: address of the current frame; ! 652: otherwise, ! 653: the current C frame pointer ! 654: is used. ! 655: If ! 656: .B C ! 657: is used then the names and (long) values of all ! 658: parameters, ! 659: automatic ! 660: and static variables are printed for each active function. ! 661: If ! 662: .I count ! 663: is given then only the first ! 664: .I count ! 665: frames are printed. ! 666: .TP ! 667: .B a ! 668: Set the maximum number of arguments ! 669: printed by ! 670: .B $c ! 671: or ! 672: .B $C ! 673: to ! 674: .IR address . ! 675: The default is 20. ! 676: .TP ! 677: .B d ! 678: Set the default radix to ! 679: .I address ! 680: and report the new value. ! 681: .I Address ! 682: is interpreted in the (old) current radix; ! 683: .L 10$d ! 684: never changes the default radix. ! 685: To make decimal the default radix, use ! 686: .LR 0t10$d . ! 687: A radix of zero (the initial default) is a special case; ! 688: input with a leading zero is octal, ! 689: that with a leading sharp-sign ! 690: .L # ! 691: is hexadecimal, ! 692: other numbers are decimal. ! 693: When the default radix is zero, ! 694: the default output radix is ! 695: appropriate to the machine: ! 696: hexadecimal on the VAX, ! 697: octal on the Cray. ! 698: .TP ! 699: .B e ! 700: The names and values of all ! 701: external variables are printed. ! 702: .TP ! 703: .B w ! 704: Set the page width for output to ! 705: .I address ! 706: (default 80). ! 707: .TP ! 708: .B s ! 709: Set the limit for symbol matches to ! 710: .I address ! 711: (default 255). ! 712: .TP ! 713: .B q ! 714: Exit from ! 715: .IR adb . ! 716: .TP ! 717: .B v ! 718: Print all non zero variables in the current radix. ! 719: .TP ! 720: .B m ! 721: Print the address maps. ! 722: .TP ! 723: .B k ! 724: Simulate kernel memory management. ! 725: .TP ! 726: .B p ! 727: Simulate per-process memory management. ! 728: .IP ! 729: .B $k ! 730: and ! 731: .B $p ! 732: are used for system debugging. ! 733: Their details vary with machine and operating system. ! 734: .PD ! 735: .RE ! 736: .TP ! 737: .BI : modifier ! 738: Manage a subprocess. ! 739: Available modifiers are: ! 740: .RS ! 741: .TP ! 742: .PD 0 ! 743: .BI b c ! 744: Set breakpoint at ! 745: .IR address . ! 746: The breakpoint is executed ! 747: .IR count \-1 ! 748: times before ! 749: causing a stop. ! 750: Each time the breakpoint is encountered ! 751: the command ! 752: .I c ! 753: is executed. ! 754: If this command is omitted or sets dot ! 755: to zero ! 756: then the breakpoint causes a stop. ! 757: .TP ! 758: .B d ! 759: Delete breakpoint at ! 760: .IR address . ! 761: .TP ! 762: .B r ! 763: Run ! 764: .I objfil ! 765: as a subprocess. ! 766: If ! 767: .I address ! 768: is given explicitly then the ! 769: program is entered at this point; otherwise ! 770: the program is entered at its standard entry point. ! 771: .I count ! 772: specifies how many breakpoints are to be ! 773: ignored before stopping. ! 774: Arguments to the subprocess may be supplied on the ! 775: same line as the command. ! 776: An argument starting with < or > causes the standard ! 777: input or output to be established for the command. ! 778: All signals are enabled on entry to the subprocess. ! 779: .TP ! 780: .BI c s ! 781: The subprocess is continued. ! 782: If ! 783: .I s ! 784: is omitted ! 785: or nonzero, ! 786: the subprocess ! 787: is sent the signal that caused it to stop; ! 788: if 0 ! 789: is specified, ! 790: no signal is sent. ! 791: Breakpoints ! 792: and single-stepping ! 793: don't count as signals. ! 794: Breakpoint skipping is the same ! 795: as for ! 796: .BR r . ! 797: .TP ! 798: .BI s s ! 799: As for ! 800: .B c ! 801: except that ! 802: the subprocess is single stepped ! 803: .I count ! 804: times. ! 805: If a signal is sent, ! 806: it is received ! 807: before the first instruction is executed. ! 808: If there is no current subprocess then ! 809: .I objfil ! 810: is run ! 811: as a subprocess as for ! 812: .BR r . ! 813: In this case no signal can be sent; the remainder of the line ! 814: is treated as arguments to the subprocess. ! 815: .TP ! 816: .B k ! 817: The current subprocess, if any, is terminated. ! 818: .PD ! 819: .RE ! 820: .SS Variables ! 821: .I Adb ! 822: provides a number of variables. ! 823: Named variables are set initially by ! 824: .I adb ! 825: but are not used subsequently. ! 826: Numbered variables are reserved for communication ! 827: as follows. ! 828: .TP ! 829: .BR 0 ", " 1 ", ..." ! 830: The offset parts of the first, second, ... ! 831: operands of the last instruction printed. ! 832: Meaningless if the operand was a register. ! 833: .br ! 834: .ns ! 835: .TP ! 836: .B 9 ! 837: The count on the last ! 838: .B $< ! 839: or ! 840: .B $<< ! 841: command. ! 842: .PP ! 843: On entry the following are set ! 844: from the system header in the ! 845: .IR corfil . ! 846: If ! 847: .I corfil ! 848: does not appear to be a ! 849: core image then ! 850: these values are set from ! 851: .IR objfil . ! 852: .TP ! 853: .B b ! 854: The base address of the data segment. ! 855: .PD 0 ! 856: .TP ! 857: .B d ! 858: The data segment size. ! 859: .TP ! 860: .B e ! 861: The entry point. ! 862: .TP ! 863: .B m ! 864: The `magic' number ! 865: .RI ( a.out (5)). ! 866: .TP ! 867: .B s ! 868: The stack segment size. ! 869: .TP ! 870: .B t ! 871: The text segment size. ! 872: .PD ! 873: .SS Addresses ! 874: The address in a file associated with ! 875: a written address is determined by a mapping ! 876: associated with that file. ! 877: Each mapping is represented by one or more quadruples ! 878: .RI ( "t, b, e, f" ), ! 879: each mapping addresses of type ! 880: .I t ! 881: (instruction, ! 882: data, ! 883: user block) ! 884: in the range ! 885: .I b ! 886: through ! 887: .I e ! 888: to the part of the file ! 889: beginning at ! 890: address ! 891: .IR f . ! 892: An address ! 893: .I a ! 894: of type ! 895: .I t ! 896: is mapped ! 897: to a file address ! 898: by finding a quadruple ! 899: of type ! 900: .IR t , ! 901: for which ! 902: .IR b \*(LE a < e ; ! 903: the file address ! 904: is ! 905: .IR address + f \(mi b . ! 906: As a special case, ! 907: if an instruction space address is not found, ! 908: a second search is made ! 909: for the same address in data space. ! 910: .PP ! 911: Typically, ! 912: the text segment of a program ! 913: is mapped as instruction space, ! 914: the data and bss segments ! 915: as data space. ! 916: If ! 917: .I objfil ! 918: is an ! 919: .IR a.out, ! 920: or if ! 921: .I corfil ! 922: is a core image ! 923: or process file, ! 924: maps are set accordingly. ! 925: Otherwise, ! 926: a single `data space' ! 927: map is set up, ! 928: with ! 929: .I b ! 930: and ! 931: .I f ! 932: set to zero, ! 933: and ! 934: .I e ! 935: set to a huge number; ! 936: thus the entire file can be examined ! 937: without address translation. ! 938: .PP ! 939: The ! 940: .B ? ! 941: and ! 942: .B / ! 943: commands attempt to examine ! 944: instruction and data space ! 945: respectively. ! 946: .B ?* ! 947: tries for data space ! 948: (in ! 949: .IR objfil ); ! 950: .B /* ! 951: accesses instruction space ! 952: (in ! 953: .IR corfil ). ! 954: .PP ! 955: Registers in ! 956: process and core images ! 957: are a special case; ! 958: they live in a special `register' address space. ! 959: The contents of register 0 ! 960: are located at address ! 961: .BR %0 ; ! 962: register 1 ! 963: at ! 964: .BR %4 ! 965: (if registers are 4 bytes long); ! 966: and so on. ! 967: .B % ! 968: addresses ! 969: are mapped to the registers ! 970: for the `current frame,' ! 971: set by local variable references, ! 972: and reset to the outermost frame ! 973: (the `real' registers) ! 974: whenever a process runs ! 975: or a stack trace is requested. ! 976: .PP ! 977: Simulated memory management ! 978: translations ! 979: (the ! 980: .B $k ! 981: and ! 982: .B $p ! 983: commands) ! 984: are done before the mapping described above. ! 985: .SH FILES ! 986: .F a.out ! 987: .br ! 988: .F core ! 989: .br ! 990: .F /usr/lib/adb/* ! 991: parameter files ! 992: .br ! 993: .F /proc/* ! 994: .SH SEE\ ALSO ! 995: .IR cin (1), ! 996: .IR pi (9.1), ! 997: .IR nm (1), ! 998: .IR proc (4), ! 999: .IR a.out (5), ! 1000: .IR bigcore (1) ! 1001: .br ! 1002: J. F. Maranzano and S. R. Bourne, ! 1003: `A Tutorial Introduction to ADB' in ! 1004: Bell Laboratories, ! 1005: .I UNIX Programmer's Manual, ! 1006: Volume\ 2, ! 1007: Holt, Rinehart and Winston (1984) ! 1008: .SH DIAGNOSTICS ! 1009: `Adb' when there is no current command or format. ! 1010: Exit status is 0, unless last command failed or ! 1011: returned nonzero status. ! 1012: .SH BUGS ! 1013: Either the explanation ! 1014: or the implementation ! 1015: of register variables ! 1016: is too complex and arcane. ! 1017: .SH MACHINE DEPENDENCIES ! 1018: .SS PDP-11 ! 1019: Short integers (printed by ! 1020: .B r ! 1021: format) ! 1022: are 2 bytes; ! 1023: long integers ! 1024: (printed by ! 1025: .B R ! 1026: format) ! 1027: are 4 bytes. ! 1028: Addresses printed by ! 1029: .B a ! 1030: format are 2 bytes. ! 1031: .PP ! 1032: Register variables match the hardware in the ! 1033: obvious way: ! 1034: .B r0 ! 1035: is at address ! 1036: .BR %0 , ! 1037: .B r1 ! 1038: at ! 1039: .BR %2 , ! 1040: and so on. ! 1041: .PP ! 1042: The default output radix ! 1043: is octal. ! 1044: .PP ! 1045: .B $k ! 1046: and ! 1047: .B $p ! 1048: are unimplemented. ! 1049: .SS VAX ! 1050: Short integers are 2 bytes, ! 1051: long integers are 4 bytes, ! 1052: addresses are 4 bytes. ! 1053: .PP ! 1054: Register variables match the hardware in the ! 1055: obvious way: r0 ! 1056: is at address ! 1057: .BR %0 , ! 1058: r1 at ! 1059: .BR %4 , ! 1060: and so on. ! 1061: .PP ! 1062: The default output radix ! 1063: is hexadecimal. ! 1064: .PP ! 1065: .B $k ! 1066: sets the system base register pointer to ! 1067: .IR address . ! 1068: System space addresses are thereafter ! 1069: mapped according to the system page table ! 1070: starting at that physical address. ! 1071: An ! 1072: .I address ! 1073: of zero ! 1074: turns off mapping. ! 1075: .PP ! 1076: .B $p ! 1077: sets the process control block pointer to ! 1078: .IR address ; ! 1079: user space addresses are thereafter ! 1080: translated according to the user page tables ! 1081: described by the PCB. ! 1082: Kernel mapping must already be in effect. ! 1083: .I Address ! 1084: may be a physical address ! 1085: (that of the PCB) ! 1086: or the system space virtual address ! 1087: of a page table entry ! 1088: pointing to the PCB ! 1089: (the number stored in ! 1090: .IR p_addr ). ! 1091: If ! 1092: .I address ! 1093: is zero, ! 1094: user mapping is turned off; ! 1095: addresses less than ! 1096: 0x80000000 ! 1097: will be treated as physical addresses. ! 1098: .PP ! 1099: The command ! 1100: .L "$<crash" ! 1101: will initialize registers ! 1102: and mapping from a kernel crash dump. ! 1103: .SS Cray ! 1104: Short integers are 2 bytes; ! 1105: long integers are 8 bytes. ! 1106: Addresses are 8 bytes. ! 1107: .PP ! 1108: Registers are funny, ! 1109: and yet to be described. ! 1110: .PP ! 1111: The default output radix is octal. ! 1112: .PP ! 1113: .B $k ! 1114: and ! 1115: .B $p ! 1116: are unimplemented.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.