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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? arm-semi.c.svn-base

?? 我們自己開發的一個OSEK操作系統!不知道可不可以?
?? SVN-BASE
字號:
/* *  Arm "Angel" semihosting syscalls * *  Copyright (c) 2005, 2007 CodeSourcery. *  Written by Paul Brook. * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program 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 General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <time.h>#include "cpu.h"#ifdef CONFIG_USER_ONLY#include "qemu.h"#define ARM_ANGEL_HEAP_SIZE (128 * 1024 * 1024)#else#include "qemu-common.h"#include "sysemu.h"#include "gdbstub.h"#endif#define SYS_OPEN        0x01#define SYS_CLOSE       0x02#define SYS_WRITEC      0x03#define SYS_WRITE0      0x04#define SYS_WRITE       0x05#define SYS_READ        0x06#define SYS_READC       0x07#define SYS_ISTTY       0x09#define SYS_SEEK        0x0a#define SYS_FLEN        0x0c#define SYS_TMPNAM      0x0d#define SYS_REMOVE      0x0e#define SYS_RENAME      0x0f#define SYS_CLOCK       0x10#define SYS_TIME        0x11#define SYS_SYSTEM      0x12#define SYS_ERRNO       0x13#define SYS_GET_CMDLINE 0x15#define SYS_HEAPINFO    0x16#define SYS_EXIT        0x18#ifndef O_BINARY#define O_BINARY 0#endif#define GDB_O_RDONLY  0x000#define GDB_O_WRONLY  0x001#define GDB_O_RDWR    0x002#define GDB_O_APPEND  0x008#define GDB_O_CREAT   0x200#define GDB_O_TRUNC   0x400#define GDB_O_BINARY  0static int gdb_open_modeflags[12] = {    GDB_O_RDONLY,    GDB_O_RDONLY | GDB_O_BINARY,    GDB_O_RDWR,    GDB_O_RDWR | GDB_O_BINARY,    GDB_O_WRONLY | GDB_O_CREAT | GDB_O_TRUNC,    GDB_O_WRONLY | GDB_O_CREAT | GDB_O_TRUNC | GDB_O_BINARY,    GDB_O_RDWR | GDB_O_CREAT | GDB_O_TRUNC,    GDB_O_RDWR | GDB_O_CREAT | GDB_O_TRUNC | GDB_O_BINARY,    GDB_O_WRONLY | GDB_O_CREAT | GDB_O_APPEND,    GDB_O_WRONLY | GDB_O_CREAT | GDB_O_APPEND | GDB_O_BINARY,    GDB_O_RDWR | GDB_O_CREAT | GDB_O_APPEND,    GDB_O_RDWR | GDB_O_CREAT | GDB_O_APPEND | GDB_O_BINARY};static int open_modeflags[12] = {    O_RDONLY,    O_RDONLY | O_BINARY,    O_RDWR,    O_RDWR | O_BINARY,    O_WRONLY | O_CREAT | O_TRUNC,    O_WRONLY | O_CREAT | O_TRUNC | O_BINARY,    O_RDWR | O_CREAT | O_TRUNC,    O_RDWR | O_CREAT | O_TRUNC | O_BINARY,    O_WRONLY | O_CREAT | O_APPEND,    O_WRONLY | O_CREAT | O_APPEND | O_BINARY,    O_RDWR | O_CREAT | O_APPEND,    O_RDWR | O_CREAT | O_APPEND | O_BINARY};#ifdef CONFIG_USER_ONLYstatic inline uint32_t set_swi_errno(TaskState *ts, uint32_t code){    if (code == (uint32_t)-1)        ts->swi_errno = errno;    return code;}#elsestatic inline uint32_t set_swi_errno(CPUState *env, uint32_t code){    return code;}#include "softmmu-semi.h"#endifstatic target_ulong arm_semi_syscall_len;#if !defined(CONFIG_USER_ONLY)static target_ulong syscall_err;#endifstatic void arm_semi_cb(CPUState *env, target_ulong ret, target_ulong err){#ifdef CONFIG_USER_ONLY    TaskState *ts = env->opaque;#endif    if (ret == (target_ulong)-1) {#ifdef CONFIG_USER_ONLY        ts->swi_errno = err;#else	syscall_err = err;#endif        env->regs[0] = ret;    } else {        /* Fixup syscalls that use nonstardard return conventions.  */        switch (env->regs[0]) {        case SYS_WRITE:        case SYS_READ:            env->regs[0] = arm_semi_syscall_len - ret;            break;        case SYS_SEEK:            env->regs[0] = 0;            break;        default:            env->regs[0] = ret;            break;        }    }}static void arm_semi_flen_cb(CPUState *env, target_ulong ret, target_ulong err){    /* The size is always stored in big-endian order, extract       the value. We assume the size always fit in 32 bits.  */    uint32_t size;    cpu_memory_rw_debug(env, env->regs[13]-64+32, (uint8_t *)&size, 4, 0);    env->regs[0] = be32_to_cpu(size);#ifdef CONFIG_USER_ONLY    ((TaskState *)env->opaque)->swi_errno = err;#else    syscall_err = err;#endif}#define ARG(n)					\({						\    target_ulong __arg;				\    /* FIXME - handle get_user() failure */	\    get_user_ual(__arg, args + (n) * 4);	\    __arg;					\})#define SET_ARG(n, val) put_user_ual(val, args + (n) * 4)uint32_t do_arm_semihosting(CPUState *env){    target_ulong args;    char * s;    int nr;    uint32_t ret;    uint32_t len;#ifdef CONFIG_USER_ONLY    TaskState *ts = env->opaque;#else    CPUState *ts = env;#endif    nr = env->regs[0];    args = env->regs[1];    switch (nr) {    case SYS_OPEN:        if (!(s = lock_user_string(ARG(0))))            /* FIXME - should this error code be -TARGET_EFAULT ? */            return (uint32_t)-1;        if (ARG(1) >= 12)            return (uint32_t)-1;        if (strcmp(s, ":tt") == 0) {            if (ARG(1) < 4)                return STDIN_FILENO;            else                return STDOUT_FILENO;        }        if (use_gdb_syscalls()) {            gdb_do_syscall(arm_semi_cb, "open,%s,%x,1a4", ARG(0),			   (int)ARG(2)+1, gdb_open_modeflags[ARG(1)]);            return env->regs[0];        } else {            ret = set_swi_errno(ts, open(s, open_modeflags[ARG(1)], 0644));        }        unlock_user(s, ARG(0), 0);        return ret;    case SYS_CLOSE:        if (use_gdb_syscalls()) {            gdb_do_syscall(arm_semi_cb, "close,%x", ARG(0));            return env->regs[0];        } else {            return set_swi_errno(ts, close(ARG(0)));        }    case SYS_WRITEC:        {          char c;          if (get_user_u8(c, args))              /* FIXME - should this error code be -TARGET_EFAULT ? */              return (uint32_t)-1;          /* Write to debug console.  stderr is near enough.  */          if (use_gdb_syscalls()) {                gdb_do_syscall(arm_semi_cb, "write,2,%x,1", args);                return env->regs[0];          } else {                return write(STDERR_FILENO, &c, 1);          }        }    case SYS_WRITE0:        if (!(s = lock_user_string(args)))            /* FIXME - should this error code be -TARGET_EFAULT ? */            return (uint32_t)-1;        len = strlen(s);        if (use_gdb_syscalls()) {            gdb_do_syscall(arm_semi_cb, "write,2,%x,%x\n", args, len);            ret = env->regs[0];        } else {            ret = write(STDERR_FILENO, s, len);        }        unlock_user(s, args, 0);        return ret;    case SYS_WRITE:        len = ARG(2);        if (use_gdb_syscalls()) {            arm_semi_syscall_len = len;            gdb_do_syscall(arm_semi_cb, "write,%x,%x,%x", ARG(0), ARG(1), len);            return env->regs[0];        } else {            if (!(s = lock_user(VERIFY_READ, ARG(1), len, 1)))                /* FIXME - should this error code be -TARGET_EFAULT ? */                return (uint32_t)-1;            ret = set_swi_errno(ts, write(ARG(0), s, len));            unlock_user(s, ARG(1), 0);            if (ret == (uint32_t)-1)                return -1;            return len - ret;        }    case SYS_READ:        len = ARG(2);        if (use_gdb_syscalls()) {            arm_semi_syscall_len = len;            gdb_do_syscall(arm_semi_cb, "read,%x,%x,%x", ARG(0), ARG(1), len);            return env->regs[0];        } else {            if (!(s = lock_user(VERIFY_WRITE, ARG(1), len, 0)))                /* FIXME - should this error code be -TARGET_EFAULT ? */                return (uint32_t)-1;            do              ret = set_swi_errno(ts, read(ARG(0), s, len));            while (ret == -1 && errno == EINTR);            unlock_user(s, ARG(1), len);            if (ret == (uint32_t)-1)                return -1;            return len - ret;        }    case SYS_READC:       /* XXX: Read from debug cosole. Not implemented.  */        return 0;    case SYS_ISTTY:        if (use_gdb_syscalls()) {            gdb_do_syscall(arm_semi_cb, "isatty,%x", ARG(0));            return env->regs[0];        } else {            return isatty(ARG(0));        }    case SYS_SEEK:        if (use_gdb_syscalls()) {            gdb_do_syscall(arm_semi_cb, "lseek,%x,%x,0", ARG(0), ARG(1));            return env->regs[0];        } else {            ret = set_swi_errno(ts, lseek(ARG(0), ARG(1), SEEK_SET));            if (ret == (uint32_t)-1)              return -1;            return 0;        }    case SYS_FLEN:        if (use_gdb_syscalls()) {            gdb_do_syscall(arm_semi_flen_cb, "fstat,%x,%x",			   ARG(0), env->regs[13]-64);            return env->regs[0];        } else {            struct stat buf;            ret = set_swi_errno(ts, fstat(ARG(0), &buf));            if (ret == (uint32_t)-1)                return -1;            return buf.st_size;        }    case SYS_TMPNAM:        /* XXX: Not implemented.  */        return -1;    case SYS_REMOVE:        if (use_gdb_syscalls()) {            gdb_do_syscall(arm_semi_cb, "unlink,%s", ARG(0), (int)ARG(1)+1);            ret = env->regs[0];        } else {            if (!(s = lock_user_string(ARG(0))))                /* FIXME - should this error code be -TARGET_EFAULT ? */                return (uint32_t)-1;            ret =  set_swi_errno(ts, remove(s));            unlock_user(s, ARG(0), 0);        }        return ret;    case SYS_RENAME:        if (use_gdb_syscalls()) {            gdb_do_syscall(arm_semi_cb, "rename,%s,%s",                           ARG(0), (int)ARG(1)+1, ARG(2), (int)ARG(3)+1);            return env->regs[0];        } else {            char *s2;            s = lock_user_string(ARG(0));            s2 = lock_user_string(ARG(2));            if (!s || !s2)                /* FIXME - should this error code be -TARGET_EFAULT ? */                ret = (uint32_t)-1;            else                ret = set_swi_errno(ts, rename(s, s2));            if (s2)                unlock_user(s2, ARG(2), 0);            if (s)                unlock_user(s, ARG(0), 0);            return ret;        }    case SYS_CLOCK:        return clock() / (CLOCKS_PER_SEC / 100);    case SYS_TIME:        return set_swi_errno(ts, time(NULL));    case SYS_SYSTEM:        if (use_gdb_syscalls()) {            gdb_do_syscall(arm_semi_cb, "system,%s", ARG(0), (int)ARG(1)+1);            return env->regs[0];        } else {            if (!(s = lock_user_string(ARG(0))))                /* FIXME - should this error code be -TARGET_EFAULT ? */                return (uint32_t)-1;            ret = set_swi_errno(ts, system(s));            unlock_user(s, ARG(0), 0);        }    case SYS_ERRNO:#ifdef CONFIG_USER_ONLY        return ts->swi_errno;#else        return syscall_err;#endif    case SYS_GET_CMDLINE:#ifdef CONFIG_USER_ONLY        /* Build a commandline from the original argv.  */        {            char **arg = ts->info->host_argv;            int len = ARG(1);            /* lock the buffer on the ARM side */            char *cmdline_buffer = (char*)lock_user(VERIFY_WRITE, ARG(0), len, 0);            if (!cmdline_buffer)                /* FIXME - should this error code be -TARGET_EFAULT ? */                return (uint32_t)-1;            s = cmdline_buffer;            while (*arg && len > 2) {                int n = strlen(*arg);                if (s != cmdline_buffer) {                    *(s++) = ' ';                    len--;                }                if (n >= len)                    n = len - 1;                memcpy(s, *arg, n);                s += n;                len -= n;                arg++;            }            /* Null terminate the string.  */            *s = 0;            len = s - cmdline_buffer;            /* Unlock the buffer on the ARM side.  */            unlock_user(cmdline_buffer, ARG(0), len);            /* Adjust the commandline length argument.  */            SET_ARG(1, len);            /* Return success if commandline fit into buffer.  */            return *arg ? -1 : 0;        }#else      return -1;#endif    case SYS_HEAPINFO:        {            uint32_t *ptr;            uint32_t limit;#ifdef CONFIG_USER_ONLY            /* Some C libraries assume the heap immediately follows .bss, so               allocate it using sbrk.  */            if (!ts->heap_limit) {                long ret;                ts->heap_base = do_brk(0);                limit = ts->heap_base + ARM_ANGEL_HEAP_SIZE;                /* Try a big heap, and reduce the size if that fails.  */                for (;;) {                    ret = do_brk(limit);                    if (ret != -1)                        break;                    limit = (ts->heap_base >> 1) + (limit >> 1);                }                ts->heap_limit = limit;            }            if (!(ptr = lock_user(VERIFY_WRITE, ARG(0), 16, 0)))                /* FIXME - should this error code be -TARGET_EFAULT ? */                return (uint32_t)-1;            ptr[0] = tswap32(ts->heap_base);            ptr[1] = tswap32(ts->heap_limit);            ptr[2] = tswap32(ts->stack_base);            ptr[3] = tswap32(0); /* Stack limit.  */            unlock_user(ptr, ARG(0), 16);#else            limit = ram_size;            if (!(ptr = lock_user(VERIFY_WRITE, ARG(0), 16, 0)))                /* FIXME - should this error code be -TARGET_EFAULT ? */                return (uint32_t)-1;            /* TODO: Make this use the limit of the loaded application.  */            ptr[0] = tswap32(limit / 2);            ptr[1] = tswap32(limit);            ptr[2] = tswap32(limit); /* Stack base */            ptr[3] = tswap32(0); /* Stack limit.  */            unlock_user(ptr, ARG(0), 16);#endif            return 0;        }    case SYS_EXIT:        exit(0);    default:        fprintf(stderr, "qemu: Unsupported SemiHosting SWI 0x%02x\n", nr);        cpu_dump_state(env, stderr, fprintf, 0);        abort();    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久99精品久久久久久| 欧美巨大另类极品videosbest| 精品日韩99亚洲| 激情深爱一区二区| 久久久久久久久一| 成人免费视频一区二区| 国产精品入口麻豆原神| 91婷婷韩国欧美一区二区| 亚洲天堂福利av| 欧美日韩色一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩欧美国产午夜精品| 国产电影一区二区三区| 亚洲欧洲韩国日本视频| 精品少妇一区二区三区日产乱码| 轻轻草成人在线| 久久婷婷综合激情| 99精品热视频| 婷婷综合另类小说色区| 欧美精品一区二区精品网| 成人美女视频在线看| 一级做a爱片久久| 日韩一区二区三区三四区视频在线观看| 国产精选一区二区三区| 中文字幕一区二区三区在线播放 | 中文字幕不卡三区| 色综合天天综合网天天狠天天| 亚洲影院免费观看| 精品福利一区二区三区免费视频| 国产成人综合亚洲网站| 亚洲一区二区三区视频在线| 精品成人在线观看| 色婷婷综合久久久中文一区二区| 午夜视频在线观看一区二区| 亚洲国产成人午夜在线一区| 欧美日韩一区二区不卡| 国产精品亚洲第一| 偷拍一区二区三区| 亚洲欧洲美洲综合色网| 欧美一区二区视频在线观看2020 | 日韩视频中午一区| 不卡av在线免费观看| 日韩二区三区四区| 国产精品免费av| 日韩欧美国产高清| 欧美中文一区二区三区| 国产精品一区二区无线| 性感美女久久精品| 亚洲欧美国产毛片在线| 久久亚洲春色中文字幕久久久| 在线免费不卡电影| 成人激情校园春色| 日本不卡免费在线视频| 亚洲综合图片区| 一区视频在线播放| 久久你懂得1024| 91精品国产综合久久香蕉的特点| 91丨九色丨尤物| 国产成人综合在线观看| 久久成人av少妇免费| 日韩av一二三| 午夜精品视频在线观看| 亚洲欧美国产77777| 中文成人av在线| 久久精品在这里| 日韩精品一区二区三区视频| 欧美日韩一级二级| 在线一区二区三区做爰视频网站| 成人亚洲精品久久久久软件| 国内欧美视频一区二区| 狠狠狠色丁香婷婷综合久久五月| 爽好久久久欧美精品| 亚洲国产精品久久不卡毛片 | 久久综合狠狠综合久久激情| 欧美另类videos死尸| 亚洲女与黑人做爰| 日韩精品一区二区三区视频播放| 欧美视频中文字幕| 麻豆成人综合网| ...xxx性欧美| 日韩亚洲欧美高清| 欧美日韩一区二区三区在线看| 蜜桃视频一区二区三区| 欧美精品高清视频| 欧美精品一区二区蜜臀亚洲| 成人免费高清视频| 国产高清视频一区| 国产成人精品aa毛片| 国产黑丝在线一区二区三区| 成人综合婷婷国产精品久久蜜臀| 粉嫩av一区二区三区在线播放| 丁香桃色午夜亚洲一区二区三区| 国产不卡高清在线观看视频| www.欧美日韩国产在线| 色综合色综合色综合| 欧洲色大大久久| 7777精品伊人久久久大香线蕉超级流畅| 欧美电影在哪看比较好| 日韩美一区二区三区| 久久精品夜夜夜夜久久| 中文字幕一区二区三区不卡| 亚洲精品欧美在线| 秋霞午夜av一区二区三区| 国产一区二区福利| 成人污污视频在线观看| 在线一区二区三区四区五区| 91精品国产综合久久久久久久久久| 91精品国产欧美日韩| 久久你懂得1024| 亚洲欧美激情在线| 蜜臀久久久久久久| 国产成人精品在线看| 欧洲生活片亚洲生活在线观看| 欧美一区日本一区韩国一区| 国产日韩欧美不卡| 亚洲动漫第一页| 欧洲另类一二三四区| 69堂成人精品免费视频| 欧美国产一区二区在线观看| 亚洲精品乱码久久久久久黑人| 日韩精品福利网| 成人av电影在线| 日韩亚洲欧美一区二区三区| 国产精品福利在线播放| 日韩精品成人一区二区在线| 国产美女视频一区| 欧美日韩免费观看一区二区三区| 亚洲精品在线电影| 亚洲一线二线三线久久久| 激情综合色综合久久| 色综合久久88色综合天天 | 国产精品久久久久国产精品日日 | 欧美美女直播网站| 国产女同互慰高潮91漫画| 亚洲www啪成人一区二区麻豆| 福利电影一区二区三区| 9191成人精品久久| 自拍偷拍国产亚洲| 精品一区二区免费在线观看| 欧美亚洲国产怡红院影院| 国产亚洲综合性久久久影院| 亚洲不卡一区二区三区| 色综合久久久久综合体| 久久精品一区蜜桃臀影院| 丝袜美腿亚洲色图| 色94色欧美sute亚洲线路一ni| 久久伊99综合婷婷久久伊| 日韩精品色哟哟| 欧美性猛片aaaaaaa做受| 国产精品丝袜一区| 久久99热这里只有精品| 欧美电影一区二区| 亚洲成人自拍偷拍| 91麻豆国产福利在线观看| 国产精品久久午夜| 国产乱对白刺激视频不卡| 日韩欧美一区中文| 日韩精品久久理论片| 欧美男同性恋视频网站| 亚洲午夜在线电影| 色婷婷综合久久| 亚洲欧美乱综合| 色综合中文字幕国产| 欧美性感一区二区三区| 国产欧美日本一区视频| 国产激情一区二区三区桃花岛亚洲| 91福利在线导航| 玉米视频成人免费看| 91免费在线看| 亚洲精品高清视频在线观看| 日本高清不卡aⅴ免费网站| 国产精品久久综合| 成人黄色大片在线观看| 国产精品乱人伦| 精品国产精品一区二区夜夜嗨| 五月婷婷久久综合| 欧美女孩性生活视频| 日本va欧美va精品发布| 欧美xingq一区二区| 韩国在线一区二区| 亚洲国产高清在线| 91丨porny丨蝌蚪视频| 亚洲乱码国产乱码精品精小说| 色综合av在线| 午夜精品国产更新| 日韩色在线观看| 国产在线精品免费av| 欧美国产亚洲另类动漫| 91原创在线视频| 亚洲成av人片在线观看| 欧美一二三四区在线| 国产精品18久久久久久久网站| 中文字幕免费不卡在线| 91免费版pro下载短视频| 亚洲一区二区在线观看视频| 日韩欧美卡一卡二| 不卡一区二区三区四区| 亚洲综合丁香婷婷六月香| 欧美一区二区三区影视| 国产精品一区二区黑丝|