Annotation of XNU/osfmk/ddb/db_write_cmd.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  * @OSF_COPYRIGHT@
                     24:  */
                     25: /*
                     26:  * HISTORY
                     27:  * 
                     28:  * Revision 1.1.1.1  1998/09/22 21:05:48  wsanchez
                     29:  * Import of Mac OS X kernel (~semeria)
                     30:  *
                     31:  * Revision 1.1.1.1  1998/03/07 02:26:09  wsanchez
                     32:  * Import of OSF Mach kernel (~mburg)
                     33:  *
                     34:  * Revision 1.2.10.1  1994/09/23  01:23:15  ezf
                     35:  *     change marker to not FREE
                     36:  *     [1994/09/22  21:11:42  ezf]
                     37:  *
                     38:  * Revision 1.2.8.3  1994/03/17  22:35:48  dwm
                     39:  *     The infamous name change:  thread_activation + thread_shuttle = thread.
                     40:  *     [1994/03/17  21:26:02  dwm]
                     41:  * 
                     42:  * Revision 1.2.8.2  1994/01/12  17:51:11  dwm
                     43:  *     Coloc: initial restructuring to follow Utah model.
                     44:  *     [1994/01/12  17:13:42  dwm]
                     45:  * 
                     46:  * Revision 1.2.8.1  1994/01/05  19:28:25  bolinger
                     47:  *     Target current address space, not current "task", for writes.
                     48:  *     [1994/01/04  17:44:51  bolinger]
                     49:  * 
                     50:  * Revision 1.2.2.3  1993/07/27  18:28:36  elliston
                     51:  *     Add ANSI prototypes.  CR #9523.
                     52:  *     [1993/07/27  18:13:37  elliston]
                     53:  * 
                     54:  * Revision 1.2.2.2  1993/06/09  02:21:11  gm
                     55:  *     Added to OSF/1 R1.3 from NMK15.0.
                     56:  *     [1993/06/02  20:58:03  jeffc]
                     57:  * 
                     58:  * Revision 1.2  1993/04/19  16:03:43  devrcs
                     59:  *     Changes from mk78:
                     60:  *     Removed unused variable 'p' from db_write_cmd().
                     61:  *     [92/05/16            jfriedl]
                     62:  *     Reorganized. w/u now works, instead of just w/tu.
                     63:  *     [92/04/18            danner]
                     64:  *     [93/02/02            bruel]
                     65:  * 
                     66:  * Revision 1.1  1992/09/30  02:01:35  robert
                     67:  *     Initial revision
                     68:  * 
                     69:  * $EndLog$
                     70:  */
                     71: /* CMU_HIST */
                     72: /*
                     73:  * Revision 2.6  91/10/09  16:05:06  af
                     74:  *      Revision 2.5.3.1  91/10/05  13:09:25  jeffreyh
                     75:  *             Added user space write support including inactive task.
                     76:  *             [91/08/29            tak]
                     77:  * 
                     78:  * Revision 2.5.3.1  91/10/05  13:09:25  jeffreyh
                     79:  *     Added user space write support including inactive task.
                     80:  *     [91/08/29            tak]
                     81:  * 
                     82:  * Revision 2.5  91/05/14  15:38:04  mrt
                     83:  *     Correcting copyright
                     84:  * 
                     85:  * Revision 2.4  91/02/05  17:07:35  mrt
                     86:  *     Changed to new Mach copyright
                     87:  *     [91/01/31  16:20:19  mrt]
                     88:  * 
                     89:  * Revision 2.3  90/10/25  14:44:26  rwd
                     90:  *     Changed db_write_cmd to print unsigned.
                     91:  *     [90/10/19            rpd]
                     92:  * 
                     93:  * Revision 2.2  90/08/27  21:53:54  dbg
                     94:  *     Set db_prev and db_next instead of explicitly advancing dot.
                     95:  *     [90/08/22            dbg]
                     96:  *     Reflected changes in db_printsym()'s calling seq.
                     97:  *     [90/08/20            af]
                     98:  *     Warn user if nothing was written.
                     99:  *     [90/08/07            dbg]
                    100:  *     Created.
                    101:  *     [90/07/25            dbg]
                    102:  * 
                    103:  */
                    104: /* CMU_ENDHIST */
                    105: /* 
                    106:  * Mach Operating System
                    107:  * Copyright (c) 1991,1990 Carnegie Mellon University
                    108:  * All Rights Reserved.
                    109:  * 
                    110:  * Permission to use, copy, modify and distribute this software and its
                    111:  * documentation is hereby granted, provided that both the copyright
                    112:  * notice and this permission notice appear in all copies of the
                    113:  * software, derivative works or modified versions, and any portions
                    114:  * thereof, and that both notices appear in supporting documentation.
                    115:  * 
                    116:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                    117:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
                    118:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                    119:  * 
                    120:  * Carnegie Mellon requests users of this software to return to
                    121:  * 
                    122:  *  Software Distribution Coordinator  or  [email protected]
                    123:  *  School of Computer Science
                    124:  *  Carnegie Mellon University
                    125:  *  Pittsburgh PA 15213-3890
                    126:  * 
                    127:  * any improvements or extensions that they make and grant Carnegie Mellon
                    128:  * the rights to redistribute these changes.
                    129:  */
                    130: /*
                    131:  */
                    132: /*
                    133:  *     Author: David B. Golub,  Carnegie Mellon University
                    134:  *     Date:   7/90
                    135:  */
                    136: 
                    137: #include <mach/boolean.h>
                    138: #include <kern/task.h>
                    139: #include <kern/thread.h>
                    140: 
                    141: #include <machine/db_machdep.h>
                    142: 
                    143: #include <ddb/db_lex.h>
                    144: #include <ddb/db_access.h>
                    145: #include <ddb/db_command.h>
                    146: #include <ddb/db_sym.h>
                    147: #include <ddb/db_task_thread.h>
                    148: #include <ddb/db_expr.h>
                    149: #include <ddb/db_write_cmd.h>
                    150: #include <ddb/db_output.h>                     /* For db_printf() */
                    151: 
                    152: /*
                    153:  * Write to file.
                    154:  */
                    155: void
                    156: db_write_cmd(
                    157:        db_expr_t       address,
                    158:        boolean_t       have_addr,
                    159:        db_expr_t       count,
                    160:        char *          modif)
                    161: {
                    162:        register db_addr_t      addr;
                    163:        register db_expr_t      old_value;
                    164:        db_expr_t       new_value;
                    165:        register int    size;
                    166:        boolean_t       wrote_one = FALSE;
                    167:        boolean_t       t_opt, u_opt;
                    168:        thread_act_t    thr_act;
                    169:        task_t          task;
                    170: 
                    171:        addr = (db_addr_t) address;
                    172: 
                    173:        size = db_size_option(modif, &u_opt, &t_opt);
                    174: 
                    175:        if (t_opt) 
                    176:          {
                    177:            if (!db_get_next_act(&thr_act, 0))
                    178:              return;
                    179:            task = thr_act->task;
                    180:          }
                    181:        else
                    182:          task = db_current_space();
                    183: 
                    184:        /* if user space is not explicitly specified, 
                    185:           look in the kernel */
                    186:        if (!u_opt)
                    187:          task = TASK_NULL;
                    188: 
                    189:        if (!DB_VALID_ADDRESS(addr, u_opt)) {
                    190:          db_printf("Bad address 0x%x\n", addr);
                    191:          return;
                    192:        }
                    193: 
                    194:        while (db_expression(&new_value)) {
                    195:            old_value = db_get_task_value(addr, size, FALSE, task);
                    196:            db_task_printsym(addr, DB_STGY_ANY, task);
                    197:            db_printf("\t\t%#8n\t=\t%#8n\n", old_value, new_value);
                    198:            db_put_task_value(addr, size, new_value, task);
                    199:            addr += size;
                    200: 
                    201:            wrote_one = TRUE;
                    202:        }
                    203: 
                    204:        if (!wrote_one)
                    205:            db_error("Nothing written.\n");
                    206: 
                    207:        db_next = addr;
                    208:        db_prev = addr - size;
                    209: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.