亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? gdbstub.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/* * gdb server stub * * Copyright (c) 2003-2005 Fabrice Bellard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include "config.h"#ifdef CONFIG_USER_ONLY#include <stdlib.h>#include <stdio.h>#include <stdarg.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <fcntl.h>#include "qemu.h"#else#include "qemu-common.h"#include "qemu-char.h"#include "sysemu.h"#include "gdbstub.h"#endif#include "qemu_socket.h"#ifdef _WIN32/* XXX: these constants may be independent of the host ones even for Unix */#ifndef SIGTRAP#define SIGTRAP 5#endif#ifndef SIGINT#define SIGINT 2#endif#else#include <signal.h>#endif//#define DEBUG_GDBenum RSState {    RS_IDLE,    RS_GETLINE,    RS_CHKSUM1,    RS_CHKSUM2,    RS_SYSCALL,};typedef struct GDBState {    CPUState *env; /* current CPU */    enum RSState state; /* parsing state */    char line_buf[4096];    int line_buf_index;    int line_csum;    uint8_t last_packet[4100];    int last_packet_len;#ifdef CONFIG_USER_ONLY    int fd;    int running_state;#else    CharDriverState *chr;#endif} GDBState;#ifdef CONFIG_USER_ONLY/* XXX: This is not thread safe.  Do we care?  */static int gdbserver_fd = -1;/* XXX: remove this hack.  */static GDBState gdbserver_state;static int get_char(GDBState *s){    uint8_t ch;    int ret;    for(;;) {        ret = recv(s->fd, &ch, 1, 0);        if (ret < 0) {            if (errno != EINTR && errno != EAGAIN)                return -1;        } else if (ret == 0) {            return -1;        } else {            break;        }    }    return ch;}#endif/* GDB stub state for use by semihosting syscalls.  */static GDBState *gdb_syscall_state;static gdb_syscall_complete_cb gdb_current_syscall_cb;enum {    GDB_SYS_UNKNOWN,    GDB_SYS_ENABLED,    GDB_SYS_DISABLED,} gdb_syscall_mode;/* If gdb is connected when the first semihosting syscall occurs then use   remote gdb syscalls.  Otherwise use native file IO.  */int use_gdb_syscalls(void){    if (gdb_syscall_mode == GDB_SYS_UNKNOWN) {        gdb_syscall_mode = (gdb_syscall_state ? GDB_SYS_ENABLED                                              : GDB_SYS_DISABLED);    }    return gdb_syscall_mode == GDB_SYS_ENABLED;}static void put_buffer(GDBState *s, const uint8_t *buf, int len){#ifdef CONFIG_USER_ONLY    int ret;    while (len > 0) {        ret = send(s->fd, buf, len, 0);        if (ret < 0) {            if (errno != EINTR && errno != EAGAIN)                return;        } else {            buf += ret;            len -= ret;        }    }#else    qemu_chr_write(s->chr, buf, len);#endif}static inline int fromhex(int v){    if (v >= '0' && v <= '9')        return v - '0';    else if (v >= 'A' && v <= 'F')        return v - 'A' + 10;    else if (v >= 'a' && v <= 'f')        return v - 'a' + 10;    else        return 0;}static inline int tohex(int v){    if (v < 10)        return v + '0';    else        return v - 10 + 'a';}static void memtohex(char *buf, const uint8_t *mem, int len){    int i, c;    char *q;    q = buf;    for(i = 0; i < len; i++) {        c = mem[i];        *q++ = tohex(c >> 4);        *q++ = tohex(c & 0xf);    }    *q = '\0';}static void hextomem(uint8_t *mem, const char *buf, int len){    int i;    for(i = 0; i < len; i++) {        mem[i] = (fromhex(buf[0]) << 4) | fromhex(buf[1]);        buf += 2;    }}/* return -1 if error, 0 if OK */static int put_packet(GDBState *s, char *buf){    int len, csum, i;    uint8_t *p;#ifdef DEBUG_GDB    printf("reply='%s'\n", buf);#endif    for(;;) {        p = s->last_packet;        *(p++) = '$';        len = strlen(buf);        memcpy(p, buf, len);        p += len;        csum = 0;        for(i = 0; i < len; i++) {            csum += buf[i];        }        *(p++) = '#';        *(p++) = tohex((csum >> 4) & 0xf);        *(p++) = tohex((csum) & 0xf);        s->last_packet_len = p - s->last_packet;        put_buffer(s, (uint8_t *)s->last_packet, s->last_packet_len);#ifdef CONFIG_USER_ONLY        i = get_char(s);        if (i < 0)            return -1;        if (i == '+')            break;#else        break;#endif    }    return 0;}#if defined(TARGET_I386)static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf){    int i, fpus;    uint32_t *registers = (uint32_t *)mem_buf;#ifdef TARGET_X86_64    /* This corresponds with amd64_register_info[] in gdb/amd64-tdep.c */    uint64_t *registers64 = (uint64_t *)mem_buf;    if (env->hflags & HF_CS64_MASK) {        registers64[0] = tswap64(env->regs[R_EAX]);        registers64[1] = tswap64(env->regs[R_EBX]);        registers64[2] = tswap64(env->regs[R_ECX]);        registers64[3] = tswap64(env->regs[R_EDX]);        registers64[4] = tswap64(env->regs[R_ESI]);        registers64[5] = tswap64(env->regs[R_EDI]);        registers64[6] = tswap64(env->regs[R_EBP]);        registers64[7] = tswap64(env->regs[R_ESP]);        for(i = 8; i < 16; i++) {            registers64[i] = tswap64(env->regs[i]);        }        registers64[16] = tswap64(env->eip);        registers = (uint32_t *)&registers64[17];        registers[0] = tswap32(env->eflags);        registers[1] = tswap32(env->segs[R_CS].selector);        registers[2] = tswap32(env->segs[R_SS].selector);        registers[3] = tswap32(env->segs[R_DS].selector);        registers[4] = tswap32(env->segs[R_ES].selector);        registers[5] = tswap32(env->segs[R_FS].selector);        registers[6] = tswap32(env->segs[R_GS].selector);        /* XXX: convert floats */        for(i = 0; i < 8; i++) {            memcpy(mem_buf + 16 * 8 + 7 * 4 + i * 10, &env->fpregs[i], 10);        }        registers[27] = tswap32(env->fpuc); /* fctrl */        fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;        registers[28] = tswap32(fpus); /* fstat */        registers[29] = 0; /* ftag */        registers[30] = 0; /* fiseg */        registers[31] = 0; /* fioff */        registers[32] = 0; /* foseg */        registers[33] = 0; /* fooff */        registers[34] = 0; /* fop */        for(i = 0; i < 16; i++) {            memcpy(mem_buf + 16 * 8 + 35 * 4 + i * 16, &env->xmm_regs[i], 16);        }        registers[99] = tswap32(env->mxcsr);        return 8 * 17 + 4 * 7 + 10 * 8 + 4 * 8 + 16 * 16 + 4;    }#endif    for(i = 0; i < 8; i++) {        registers[i] = env->regs[i];    }    registers[8] = env->eip;    registers[9] = env->eflags;    registers[10] = env->segs[R_CS].selector;    registers[11] = env->segs[R_SS].selector;    registers[12] = env->segs[R_DS].selector;    registers[13] = env->segs[R_ES].selector;    registers[14] = env->segs[R_FS].selector;    registers[15] = env->segs[R_GS].selector;    /* XXX: convert floats */    for(i = 0; i < 8; i++) {        memcpy(mem_buf + 16 * 4 + i * 10, &env->fpregs[i], 10);    }    registers[36] = env->fpuc;    fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;    registers[37] = fpus;    registers[38] = 0; /* XXX: convert tags */    registers[39] = 0; /* fiseg */    registers[40] = 0; /* fioff */    registers[41] = 0; /* foseg */    registers[42] = 0; /* fooff */    registers[43] = 0; /* fop */    for(i = 0; i < 16; i++)        tswapls(&registers[i]);    for(i = 36; i < 44; i++)        tswapls(&registers[i]);    return 44 * 4;}static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size){    uint32_t *registers = (uint32_t *)mem_buf;    int i;    for(i = 0; i < 8; i++) {        env->regs[i] = tswapl(registers[i]);    }    env->eip = tswapl(registers[8]);    env->eflags = tswapl(registers[9]);#if defined(CONFIG_USER_ONLY)#define LOAD_SEG(index, sreg)\            if (tswapl(registers[index]) != env->segs[sreg].selector)\                cpu_x86_load_seg(env, sreg, tswapl(registers[index]));            LOAD_SEG(10, R_CS);            LOAD_SEG(11, R_SS);            LOAD_SEG(12, R_DS);            LOAD_SEG(13, R_ES);            LOAD_SEG(14, R_FS);            LOAD_SEG(15, R_GS);#endif}#elif defined (TARGET_PPC)static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf){    uint32_t *registers = (uint32_t *)mem_buf, tmp;    int i;    /* fill in gprs */    for(i = 0; i < 32; i++) {        registers[i] = tswapl(env->gpr[i]);    }    /* fill in fprs */    for (i = 0; i < 32; i++) {        registers[(i * 2) + 32] = tswapl(*((uint32_t *)&env->fpr[i]));	registers[(i * 2) + 33] = tswapl(*((uint32_t *)&env->fpr[i] + 1));    }    /* nip, msr, ccr, lnk, ctr, xer, mq */    registers[96] = tswapl(env->nip);    registers[97] = tswapl(env->msr);    tmp = 0;    for (i = 0; i < 8; i++)        tmp |= env->crf[i] << (32 - ((i + 1) * 4));    registers[98] = tswapl(tmp);    registers[99] = tswapl(env->lr);    registers[100] = tswapl(env->ctr);    registers[101] = tswapl(ppc_load_xer(env));    registers[102] = 0;    return 103 * 4;}static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size){    uint32_t *registers = (uint32_t *)mem_buf;    int i;    /* fill in gprs */    for (i = 0; i < 32; i++) {        env->gpr[i] = tswapl(registers[i]);    }    /* fill in fprs */    for (i = 0; i < 32; i++) {        *((uint32_t *)&env->fpr[i]) = tswapl(registers[(i * 2) + 32]);	*((uint32_t *)&env->fpr[i] + 1) = tswapl(registers[(i * 2) + 33]);    }    /* nip, msr, ccr, lnk, ctr, xer, mq */    env->nip = tswapl(registers[96]);    ppc_store_msr(env, tswapl(registers[97]));    registers[98] = tswapl(registers[98]);    for (i = 0; i < 8; i++)        env->crf[i] = (registers[98] >> (32 - ((i + 1) * 4))) & 0xF;    env->lr = tswapl(registers[99]);    env->ctr = tswapl(registers[100]);    ppc_store_xer(env, tswapl(registers[101]));}#elif defined (TARGET_SPARC)static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf){    target_ulong *registers = (target_ulong *)mem_buf;    int i;    /* fill in g0..g7 */    for(i = 0; i < 8; i++) {        registers[i] = tswapl(env->gregs[i]);    }    /* fill in register window */    for(i = 0; i < 24; i++) {        registers[i + 8] = tswapl(env->regwptr[i]);    }#ifndef TARGET_SPARC64    /* fill in fprs */    for (i = 0; i < 32; i++) {        registers[i + 32] = tswapl(*((uint32_t *)&env->fpr[i]));    }    /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */    registers[64] = tswapl(env->y);    {	target_ulong tmp;	tmp = GET_PSR(env);	registers[65] = tswapl(tmp);    }    registers[66] = tswapl(env->wim);    registers[67] = tswapl(env->tbr);    registers[68] = tswapl(env->pc);    registers[69] = tswapl(env->npc);    registers[70] = tswapl(env->fsr);    registers[71] = 0; /* csr */    registers[72] = 0;    return 73 * sizeof(target_ulong);#else    /* fill in fprs */    for (i = 0; i < 64; i += 2) {	uint64_t tmp;        tmp = ((uint64_t)*(uint32_t *)&env->fpr[i]) << 32;        tmp |= *(uint32_t *)&env->fpr[i + 1];        registers[i / 2 + 32] = tswap64(tmp);    }    registers[64] = tswapl(env->pc);    registers[65] = tswapl(env->npc);    registers[66] = tswapl(((uint64_t)GET_CCR(env) << 32) |                           ((env->asi & 0xff) << 24) |                           ((env->pstate & 0xfff) << 8) |                           GET_CWP64(env));    registers[67] = tswapl(env->fsr);    registers[68] = tswapl(env->fprs);    registers[69] = tswapl(env->y);    return 70 * sizeof(target_ulong);#endif}static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size){    target_ulong *registers = (target_ulong *)mem_buf;    int i;    /* fill in g0..g7 */    for(i = 0; i < 7; i++) {        env->gregs[i] = tswapl(registers[i]);    }    /* fill in register window */    for(i = 0; i < 24; i++) {        env->regwptr[i] = tswapl(registers[i + 8]);    }#ifndef TARGET_SPARC64    /* fill in fprs */    for (i = 0; i < 32; i++) {        *((uint32_t *)&env->fpr[i]) = tswapl(registers[i + 32]);    }    /* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */    env->y = tswapl(registers[64]);    PUT_PSR(env, tswapl(registers[65]));    env->wim = tswapl(registers[66]);    env->tbr = tswapl(registers[67]);    env->pc = tswapl(registers[68]);    env->npc = tswapl(registers[69]);    env->fsr = tswapl(registers[70]);#else    for (i = 0; i < 64; i += 2) {        uint64_t tmp;        tmp = tswap64(registers[i / 2 + 32]);	*((uint32_t *)&env->fpr[i]) = tmp >> 32;	*((uint32_t *)&env->fpr[i + 1]) = tmp & 0xffffffff;    }    env->pc = tswapl(registers[64]);    env->npc = tswapl(registers[65]);    {

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲妇女屁股眼交7| 日韩电影一二三区| 亚洲精品一区二区在线观看| 91国内精品野花午夜精品| 国产精品一二三四| 免费成人在线影院| 亚洲资源中文字幕| 国产精品国产精品国产专区不蜜| 日韩一区二区电影| 日本电影欧美片| 在线欧美日韩精品| 精品一二线国产| 免费看日韩精品| 偷拍一区二区三区四区| 亚洲精品自拍动漫在线| 国产欧美一区二区精品性| 日韩欧美一二三| 欧美一区二区三区视频在线观看| 不卡一区二区三区四区| 国产激情视频一区二区三区欧美 | 欧美专区亚洲专区| 91在线播放网址| 成a人片国产精品| av电影天堂一区二区在线| 国产99久久精品| 国产91精品露脸国语对白| 岛国一区二区在线观看| 精品国产不卡一区二区三区| 欧美在线三级电影| 欧美日韩一级片网站| 欧美精品一卡两卡| 欧美一区午夜精品| 日韩免费一区二区| 久久久久久久网| 久久久噜噜噜久久人人看 | 亚洲精品成人在线| 亚洲制服丝袜av| 首页国产欧美久久| 男人的j进女人的j一区| 久久99热这里只有精品| 国产在线精品视频| 成人av影视在线观看| 91丨porny丨首页| 欧美丰满一区二区免费视频| 欧美日韩在线三区| 日韩美一区二区三区| ww亚洲ww在线观看国产| 亚洲国产精品ⅴa在线观看| 中文字幕中文字幕一区二区| 一区二区三区不卡视频| 亚洲国产另类av| 久久99热这里只有精品| av一区二区三区在线| 91福利国产精品| 欧美午夜不卡视频| 日韩一级二级三级精品视频| 国产视频一区不卡| 亚洲日本一区二区| 日韩av不卡在线观看| 国产精品一线二线三线精华| 成人妖精视频yjsp地址| 在线亚洲一区观看| 久久精品视频在线看| 五月天亚洲精品| 99国产精品国产精品久久| 欧美成人高清电影在线| 亚洲一区二区视频在线观看| 国产精品一区在线观看你懂的| 欧美日本一区二区三区| 国产精品久久久久久久午夜片 | 欧美日韩精品一区视频| 国产日韩三级在线| 免费在线观看不卡| 欧美性一区二区| 中文字幕在线不卡一区| 激情六月婷婷综合| 3751色影院一区二区三区| 亚洲美女视频在线观看| 风间由美一区二区av101| 3atv一区二区三区| 亚洲国产精品自拍| 91蜜桃传媒精品久久久一区二区| 国产亚洲女人久久久久毛片| 久久电影国产免费久久电影| 欧美在线你懂的| 亚洲精品国产一区二区精华液| 国产高清精品久久久久| 精品久久久久久久久久久久包黑料| 一区二区三区国产豹纹内裤在线| 成人av资源在线观看| 国产精品午夜在线观看| 国产裸体歌舞团一区二区| 日韩视频中午一区| 免费在线一区观看| 欧美一区二区三区免费| 日韩黄色小视频| 欧美日韩电影一区| 午夜精品久久久久久久久久| 欧美视频在线播放| 亚洲综合一区二区精品导航| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产精品电影一区二区三区| 国产69精品久久99不卡| 国产清纯白嫩初高生在线观看91| 日本成人在线视频网站| 在线不卡一区二区| 日韩电影在线免费看| 日韩三级av在线播放| 精品午夜久久福利影院| 精品久久久久久久久久久久包黑料 | 国产精品久久久久久久久免费丝袜| 国产91色综合久久免费分享| 国产欧美精品国产国产专区 | 欧美在线播放高清精品| 亚洲一区二区成人在线观看| 欧美日韩一区精品| 日韩不卡一区二区三区| 欧美xfplay| 国产精品一区在线观看乱码| 中文字幕乱码一区二区免费| 9人人澡人人爽人人精品| 亚洲一区在线视频| 日韩视频免费直播| 国产乱码字幕精品高清av| 欧美国产精品专区| 色噜噜偷拍精品综合在线| 五月天国产精品| 久久婷婷国产综合精品青草| 成人91在线观看| 午夜欧美一区二区三区在线播放| 欧美人与禽zozo性伦| 国产尤物一区二区在线| 国产精品视频观看| 欧美午夜电影网| 狠狠狠色丁香婷婷综合激情 | 欧美挠脚心视频网站| 蜜桃传媒麻豆第一区在线观看| 久久婷婷综合激情| 色老综合老女人久久久| 日本网站在线观看一区二区三区| 精品sm在线观看| 91美女蜜桃在线| 日本最新不卡在线| 国产精品美女久久久久久2018| 在线视频你懂得一区| 麻豆视频一区二区| 国产精品国产三级国产普通话99| 精品视频一区三区九区| 国产一区二区三区日韩| 亚洲最新视频在线播放| 精品久久久久久久久久久久久久久| av一本久道久久综合久久鬼色| 午夜精品久久久久久久99水蜜桃| 国产人成一区二区三区影院| 欧美色区777第一页| 国产成人av电影在线| 无吗不卡中文字幕| 欧美国产一区二区| 制服丝袜一区二区三区| av在线综合网| 黑人精品欧美一区二区蜜桃| 一区二区三区免费| 国产欧美视频一区二区| 欧美精品欧美精品系列| 99综合影院在线| 狠狠色狠狠色合久久伊人| 一区二区三区毛片| 欧美国产一区视频在线观看| 91精品国产综合久久久久久久| 北岛玲一区二区三区四区| 热久久免费视频| 一区二区不卡在线视频 午夜欧美不卡在| 欧美xingq一区二区| 欧美日韩高清在线播放| 99久久久久久99| 国产美女av一区二区三区| 五月天激情综合网| 一区二区在线观看免费视频播放| 久久亚洲精品小早川怜子| 欧美精品vⅰdeose4hd| 91在线码无精品| 成人三级在线视频| 国产美女视频91| 美女免费视频一区| 午夜国产精品影院在线观看| 亚洲视频一区二区在线| 欧美国产综合一区二区| 久久久久久久久97黄色工厂| 日韩欧美一区二区在线视频| 欧美日韩极品在线观看一区| 91免费精品国自产拍在线不卡| 大白屁股一区二区视频| 国产专区欧美精品| 美女免费视频一区| 蜜桃av一区二区在线观看| 日韩电影免费一区| 亚洲成人免费电影| 亚洲成人免费视频| 性欧美大战久久久久久久久| 亚洲成人免费影院|