MCPcopy Create free account
hub / github.com/F-Stack/f-stack / db_write_bytes

Function db_write_bytes

freebsd/arm64/arm64/db_interface.c:151–194  ·  view source on GitHub ↗

* Write bytes to kernel address space for debugger. */

Source from the content-addressed store, hash-verified

149 * Write bytes to kernel address space for debugger.
150 */
151int
152db_write_bytes(vm_offset_t addr, size_t size, char *data)
153{
154 jmp_buf jb;
155 void *prev_jb;
156 char *dst;
157 int ret;
158 uint64_t tmp64;
159 uint32_t tmp32;
160 uint16_t tmp16;
161
162 prev_jb = kdb_jmpbuf(jb);
163 ret = setjmp(jb);
164 if (ret == 0) {
165 if (size == 8 && (addr & 7) == 0) {
166 dst = (char *)&tmp64;
167 while (size-- > 0)
168 *dst++ = *data++;
169 *((uint64_t *)addr) = tmp64;
170 } else if (size == 4 && (addr & 3) == 0) {
171 dst = (char *)&tmp32;
172 while (size-- > 0)
173 *dst++ = *data++;
174 *((uint32_t *)addr) = tmp32;
175 } else if (size == 2 && (addr & 1) == 0) {
176 dst = (char *)&tmp16;
177 while (size-- > 0)
178 *dst++ = *data++;
179 *((uint32_t *)addr) = tmp16;
180 } else {
181 dst = (char *)addr;
182 while (size-- > 0)
183 *dst++ = *data++;
184 }
185 dsb(ish);
186
187 /* Clean D-cache and invalidate I-cache */
188 cpu_dcache_wb_range(addr, (vm_size_t)size);
189 cpu_icache_sync_range(addr, (vm_size_t)size);
190 }
191 (void)kdb_jmpbuf(prev_jb);
192
193 return (ret);
194}

Callers

nothing calls this directly

Calls 2

kdb_jmpbufFunction · 0.85
setjmpFunction · 0.85

Tested by

no test coverage detected