• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    Dynamically Translating Binary Code for Multi-Threaded Programs Using Shared Code Cache

    2014-03-24 05:40:19ChiaLunLiuJiunnYeuChenWuuYangandWeiChungHsu

    Chia-Lun Liu, Jiunn-Yeu Chen, Wuu Yang, and Wei-Chung Hsu

    Dynamically Translating Binary Code for Multi-Threaded Programs Using Shared Code Cache

    Chia-Lun Liu, Jiunn-Yeu Chen, Wuu Yang, and Wei-Chung Hsu

    ——mc2llvm is a process-level ARM-to-x86 binary translator developed in our lab in the past several years. Currently, it is able to emulate singlethreaded programs. We extend mc2llvm to emulate multi-threaded programs. Our main task is to reconstruct its architecture for multi-threaded programs. Register mapping, code cache management, and address mapping in mc2llvm have all been modified. In addition, to further speed up the emulation, we collect hot paths, aggressively optimize and generate code for them at run time. Additional threads are used to alleviate the overhead. Thus, when the same hot path is walked through again, the corresponding optimized native code will be executed instead. In our experiments, our system is 8.8X faster than QEMU (quick emulator) on average when emulating the specified benchmarks with 8 guest threads.

    Index Terms——ARM, binary translation, hot path, mc2llvm, multi-threaded program, QEMU (quick emulator).

    1. Introduction

    Binary translation emulates one instruction-set architecture (ISA) through another ISA. Its applications include legacy program migration, program instrumentation[1], fast simulation[2], and security investigation[3], etc. mc2llvm[4]is a process-level ARM-to-x86 hybrid binary translation system developed in our lab in the past few years, which is able to do static and dynamic binary translation. Currently, it is only able to emulate sequential programs. Our main task is to add the support to mc2llvm so that it can emulate multi-threaded programs. In this paper, the emulated ISA is called the guest, and the emulating ISA is called the host.

    Dynamic binary translator (DBT) takes the guest executable file as data. At run time, guest instructions are translated to host instructions whenever needed. Thetranslated host instructions are stored in the memory place called the code cache. Due to the code cache, subsequent emulations of the same instructions can be done by directly executing the generated native code in the code cache without repeated translation. In this research, we make the following contributions: 1) reconstruct mc2llvm to emulate multi-threaded ARM binaries using the shared code cache; 2) craft an efficient method to do lookup in the address mapping table; and 3) add the trace compilation to mc2llvm. The remainder of this paper is structured as follows. Section 2 sketches the binary translator mc2llvm. Section 3 illustrates the implementation details. Section 4 discusses the experimental results. Finally, this research is summarized in Section 5.

    2. Background

    mc2llvm[4]is an ARM-to-x86 process-level LLVM (low level virtual machine)-based[5]hybrid binary translation system. It is able to do static and dynamic binary translation and both guest and host operating systems (OS) should be Linux. Since our work focuses on dynamic binary translation, we would only describe the dynamic binary translation of mc2llvm in this paper. To emulate a program, mc2llvm first maps the text and data segments of the guest executable into the host memory directly without adding any offset. mc2llvm starts translation from the entry point specified in the guest ELF (extensible linking format) file. The translation unit of mc2llvm is the basic block. Three steps are involved in the translation. Guest instructions in the guest basic block are translated into the LLVM intermediate representation (IR) and then the LLVM optimizer attempts to optimize the LLVM IR. Because the optimization is performed at run time, only slight optimization is done at this stage in order to reduce run-time overhead. Finally, it uses the LLVM JIT (just-in-time) compiler to emit x86 instructions. The emitted instructions are kept in the code cache. Thus, the subsequent emulation can be done by directly executing the generated native code in the code cache without repeated translation. Before translating at a guest address, mc2llvm looks up the address mapping table to check if the corresponding translated host instructions exist. If they exist, the table-lookup routine returns the host address where mc2llvm can execute code in the code cache. The next guest address is obtained when mc2llvm completes the emulation of a guest basic block by executing its translated code in the code cache. Some ARM instructions cannot betranslated to LLVM IR directly such as the svc instruction. This instruction triggers a system call. mc2llvm translates this instruction into a call to a wrapper function that handles the corresponding guest system call. The execution flow is presented in Fig. 1.

    Fig. 1. Program flow of mc2llvm: g represents a guest address and h is the host address.

    3. Design and Implementation

    Our modified architecture of mc2llvm for multithreaded programs is presented in Fig. 2. Two kinds of threads are involved in the emulation. One is called the emulating threads, which emulates the behavior of each guest thread. Each emulating thread has its private data structure that keeps the guest architecture state for the guest thread. The guest architecture state mainly includes the ARM guest registers, the base address of thread-local storage, and the condition flags.

    Fig. 2. Architecture of the modified mc2llvm.3.1 Thread Creation and TerminationA new child thread is created by the clone system call. Its stack and thread-local storage are prepared by its parent

    The other is called the optimizing threads. It periodically tries to take a trace from a FIFO (first-in first-out) queue of hot paths. If one is available, the optimizing thread would use the trace generator to generate the host instructions for the trace and then stores them in the shared trace code cache. The number of the emulating threads is determined by the programs being emulated and the number of the optimizing threads is set to 3 in our experiments. thread. When a guest clone system call is encountered, we first call the function pthread_create to produce a new emulating thread. This thread is responsible for emulating the new guest thread. mc2llvm copies the guest architecture state of the parent emulating thread to the child emulating thread and sets ARM guest registers r0 to 0 and r13 to the new stack address and sets the guest base thread-local storage to a value given by the guest clone system call. The guest register r0 of the parent thread is set to the child’s thread id. A parameter in the clone system call indicates the part of the parent’s data structure that should be copied to the child thread.

    A thread is terminated by the exit or exit_group system call. When an emulating thread encounters the exit system call, it does some cleanup then calls pthread_exit. But before it kills itself, the emulating thread has to test if child_tidptr, which is defined below, has a non-zero value. If so, it does a futex wakeup at the child. To emulate exit_group, mc2llvm simply terminates the programs.

    chid_tidptr is the name of a parameter of the clone system call. When a guest clone system call is invoked, the new emulating thread keeps this value if necessary by testing a flag, which is also a parameter of the clone system call.

    The emulation of the creation and termination of a thread is done in the wrapper function that emulates the guest system calls.

    3.2 Atomic Operations

    In our experiments, we observe two ways to perform the atomic operations. One is to call the kernel supported __kuser_cmpxchg function, which lies at a specific address. The other is to call the futex system call, which is the building block for the mutex.

    __kuser_cmpxchg is a function that does compare-and-swap atomically and sets the condition flag C to 1 if the operation is successful or 0 otherwise. We emulate __kuser_cmpxchg by doing the compare-and-swap and guarding the operation with a lock/unlock pair. For the guest futex system call, we emulate it by calling the host futex system call. Note that both the host and the guest are Linux systems in our experiments.

    3.3 Thread-Local Storage

    In our environment, the base address of the guest thread-local storage is read by the kernel-supported function. __kuser_get_tls is set by the ARM-private system call set_tls. Each emulating thread has a member tls in its guest architecture state to hold this base address. set_tls sets tls to a given value while __kuser_get_tls only returns tls. Since the thread-local storage of every thread, including the main thread, is allocated at run time, mc2llvm does not need to specially pre-allocate the space for each guest thread.

    3.4 Shared Code Cache

    Because the operating system performs the contextswitch of the architecture states, multiple threads on the same CPU can execute the same code without interferingwith one another. Under the emulation, the guest architecture state is maintained by the respective thread. Hence, the OS cannot perform the context-switch of the guest architecture states automatically. It becomes the duty of the translator to make sure that emulating threads work with the correct guest architecture states. In mc2llvm, to load an ARM guest register, such as r1, we first load the guest architecture state of the current emulating thread and then load the member in the guest architecture state that corresponds to r1. In this way, when two emulating threads operate on the same guest register, each would load its own private register. Therefore, code cache can be shared because the registers used in an instruction refer to the private registers of the executing thread. The original mc2llvm, which is intended for single-threaded programs, maps each guest register to an individual LLVM global variable. The emulation of single-threaded programs can work correctly under this register mapping because only a single emulating thread manipulates the LLVM global variables. The alternative code cache is the private code cache, that is, each emulating thread keeps its own private code cache. More memory would be needed when the private code cache is used.

    3.5 Address Mapping Table

    In Fig. 2, there are two kinds of address mapping tables: global-shared and thread-private address mapping tables. The global-shared table contains all the address-mapping entries and the thread-private table contains only the entries recently used by the owner thread. Both tables are hash tables.

    Fig. 3 presents how to access the address mapping tables. For a read access, the emulating thread looks up its own thread-private address-mapping table first. If not found there, the global-shared table will be searched next.

    Fig. 3. Write and read accesses to the address mapping tables. g is guest address. h is host address. (g,h): the mapping of guest and host address.

    For a write access, the emulating thread would store the address-mapping entry in both the global-shared and thread-private tables. The thread-private tables would speed up the search significantly because the access to the private table is free of synchronization while the global table has to be locked before the access.

    In our experiments, table lookup is much faster than synchronization. Although the thread-private tables store only recently used address mapping entries, the hit rate of read access in our experiments is very high (98%). As a result, the global-shared table is used only infrequently. The thread-private table is a simple array with no more than 10000 entries because we discover that programs in the benchmark needs 1000 to 7000 address mapping entries.

    3.6 Synchronization

    In our translation system, there are five major critical sections:

    · The instruction translator

    · The global-shared address-mapping table

    · The concurrent FIFO

    · LLVM functions used in the system

    · The emulation of atomic operations

    The instruction translator is invoked when an emulating thread fails to find the address mapping in the global-shared address-mapping table. The case is that more than one emulating thread may fail to find the address mapping in the table and all the emulating threads then call the instruction translator almost at the same time. Therefore, the instruction translator is guarded by a global lock.

    The instruction translator is not used very frequently because instructions are translated only once. Consequently, a global lock does not hurt the performance much. The global-shared address-mapping table is crafted based on [6]. The global-shared address mapping table is a hash table composed of an array of lists. Atomic CAS (compare-andswap) instructions are used to lock the table before elements are inserted or deleted. If the CAS fails, the whole operation repeats until it succeeds.

    The concurrent FIFO is a bridge to pass traces selected by the emulating threads to the optimizing threads. A well-known method in [7] is employed. The technique is similar to [6]. As for LLVM functions, LLVM has an internal mechanism to prevent the race condition. Finally, the atomic operations are emulated with a lock/unlock pair.

    3.7 Trace Compilation

    The emulating threads perform profiling and select traces. The selected traces are kept in the concurrent FIFO. The optimizing threads compile and optimize the traces in the FIFO one by one. At the beginning of a translated block, we patch the code to perform trace selection. The trace selection is presented in Fig. 4. The trace is optimized with LLVM aggressive level. We insert several instructions in each translated block to test if it is the head of the trace. If so, the emulating thread would jump to the shared trace code cache to execute the instructions of the trace. Otherwise, the emulating thread executes the host instructions in the shared block code cache.

    Fig. 4. Trace selection. The emulating thread starts at TRACE HEAD DETECTION. TB stands for translation block. L is a linked list.

    4. Experimental Results

    ARMv5te statically linked binaries are fed into the binary translator. We run the translator on a 48-core x86_64 host machine with the Debian Linux operating system. Each core is 2.1 GHz and the memory is 48 GB. The benchmark we use is SPEC omp 2001. All the benchmarks are compiled with GNU gcc or gfortran 4.3.2 with flags -O2 -static -fopenmp. Among the 11 benchmarks in the SPEC omp, our translator fails to compile galgel, and fails to emulate ammp. To build mc2llvm, we have to install LLVM-3.2 library beforehand. Four experiments are conducted and described as follows.

    4.1 Parallel Emulation

    We experiment with various numbers of threads for each benchmark. The resulting emulation time is shown in Fig. 5. The experiments show that the emulation time decreases when more threads are used, except gafort.

    Fig. 5. Ratio of the emulation time for mc2llvm that use various numbers of guest threads.

    4.2 Comparison of QEMU and mc2llvm

    Fig. 6 shows the emulation time of QEMU and mc2llvm. Each benchmark makes use of 8 guest threads. QEMU is slower than mc2llvm because, in QEMU, the access to the common address-mapping table is protected by a lock and the access frequency of the table is really high while mc2llvm provides a thread-private addressmapping table. In average, mc2llvm is 8.8x faster than QEMU.

    Fig. 6. Ratio of the emulation time for QEMU and mc2llvm.

    4.3 Comparison with ARM Native Machine-Origen

    Origen is an ARM board. It is equipped with Samsung Exynos 4 Quad Cortex-A9 cores at 1.4 GHz and 1 GB memory. Fig. 7 shows the emulation time of Origen and mc2llvm. Each benchmark makes use of 4 guest threads. On average, Origen is 5.45x faster than mc2llvm.

    Fig. 7. Ratio of the emulation time for Origen and mc2llvm.

    4.4 Trace Compilation

    Fig. 8 shows the emulation time of mc2llvm with and without trace compilation. Each benchmark makes use of 8 guest threads in this experiment. We take the SPEC omp 2001 benchmark with the ref data set as input because trace compilation normally takes longer time to show its advantage. On average, we obtain 33% performance speedup with trace compilation.

    Fig. 8. Ratio of the emulation time for mc2llvm with and without trace compilation.

    5. Conclusions

    We extend the binary translator mc2llvm[4]from sequential-program emulation into multi-threaded-program emulation. The code cache is designed to be shared among the threads in order to reduce the memory usage. The synchronization overhead is mostly reduced by having thread-private address-mapping tables in addition to the global-shared address-mapping table. Runtime optimization is done by trace compilation with 3 extra threads to generate the code for the traces. According to our experiments, mc2llvm is 8.8x faster than QEMU when emulating programs with 8 guest threads. mc2llvm is 5.45x slower than Origen[8]when emulating programs with 4 guest threads. When mc2llvm performs trace compilation, it gains 33% performance speedup on average.

    [1] N. Nethercote and J. Seward, “Valgrind: A framework for heavyweight dynamic binary instrumentation,” inProc. of 2007 ACM SIGPLAN PLDI, 2007, pp. 89-100.

    [2] E. Witchel and M. Rosenblum, “Embra: Fast and flexible machine simulation,” inProc. of 1996 ACM SIGMETRICS Int. Conf. on Measurement and Modeling of Computer Systems, 1996, pp. 68-79.

    [3] M. Payer and T. R. Gross, “Fine-grained user-space security through virtualization,” inProc. of the 7th ACM SIGPLAN/SIGOPS Int. Conf. on Virtual Execution Environments, 2011, pp. 157-168.

    [4] B.-Y. Shen, J.-Y. You, W. Yang, and W.-C. Hsu, “An LLVM-based hybrid binary translation system,” presented at the 7th IEEE Int. Symposium on Industrial Embedded Systems (SIES'12), Karlsruhe, Germany, 2012.

    [5] V. Adve and C. Lattner. (March 2013). The LLVM Compiler Infrastructure. [Online]. Available: http://llvm.org/

    [6] M. M. Michael, “High performance dynamic lock-free hash tables and list-based sets,” inProc. of the 14th Annual ACM Symposium on Parallel Algorithms and Architectures, 2002, pp. 73-82.

    [7] M. M. Michael and M. L. Scott, “Simple, fast, and practical nonblocking and blocking concurrent queue algorithms,” inProc. of the 15th Annual ACM Symposium on Principles of Distributed Computing, 1996, pp. 267-275.

    [8] Origen —— an arm board. (March 2013). [Online]. Available: http://www.origenboard.org

    Chia-Lun Liu was born in Tainan in 1989. He received the B.S. degree from National Sun Yat-sen University, Kaohsiung in 2011 and the M.S. degree from National Chiao Tung University, Hsinchu in 2013, both in computer science. He is currently working as a software engineer at Gemtek. His research interests include operating systems and compilers.

    Jiunn-Yeu Chen received both the B.S. degree and M.S. degree from the National Chiao Tung University, Hsinchu in 2006 and 2008, respectively. He is currently pursuing the Ph.D. degree with the Department of Computer Science in the National Chiao Tung University. His research interests include binary translation, system software, and parallel programming.

    Wuu Yang received the B.S. degree from the National Taiwan University, Taipei in 1982 and the Ph.D. degree from the University of Wisconsin, Madison in 1989, both in computer science. He is currently a professor with the Department of Computer Science, National Chiao Tung University, Hsinchu. His research interests include embedded systems, systems software, programming language, and garbage collection.

    Wei Chung Hsu received his Ph.D. degree in computer science from the University of Wisconsin, Madison in 1987. Currently, he is a professor with the Department of Computer Science and Information Engineering, National Taiwan University, Taibei. From 1999 to 2009, he was a professor with the Computer Science and Engineering Department, University of Minnesota, Twin Cities. From 1993 to 1999, he was a runtime optimization architect with the California Language Lab, Hewlett Packard Company. Prior to joining HP, he was a senior architect with Cray Research in Chippewa Falls, Wisconsin. His current research interests include virtualization, dynamic binary translation, and optimization techniques.

    Manuscript received December 16, 2013; revised March 14, 2014. This work was supported by NSC under Grant No. NSC 100-2218-E-009-009-MY3 and NSC 100-2218-E-009-010- MY3.

    C.-L. Liu is with the Department of Computer Science, National Chiao-Tung University, Hsinch (Corresponding author e-mail: bendog0224@gmail.com).

    J.-Y. Chen, W. Yang, and W.-C. Hsu are with the Department of Computer Science, National Chiao-Tung University, Hsinch (e-mail: morningrain@gmail.com, wuuyang@cs.nctu.edu.tw, hsu@cs.nctu.edu.tw).

    Digital Object Identifier: 10.3969/j.issn.1674-862X.2014.04.018

    成人特级黄色片久久久久久久| 色老头精品视频在线观看| 男人舔女人的私密视频| 天天影视国产精品| 久久天堂一区二区三区四区| 国产高清激情床上av| 搡老岳熟女国产| av线在线观看网站| 老熟女久久久| 人人妻,人人澡人人爽秒播| 黑人巨大精品欧美一区二区蜜桃| 好男人电影高清在线观看| 久久精品国产a三级三级三级| av天堂在线播放| 日韩免费av在线播放| 亚洲三区欧美一区| 啦啦啦视频在线资源免费观看| 国产精品一区二区在线不卡| aaaaa片日本免费| 免费观看人在逋| 亚洲成人国产一区在线观看| 中文字幕人妻丝袜一区二区| 露出奶头的视频| 欧美日韩乱码在线| 1024视频免费在线观看| 国产极品粉嫩免费观看在线| 亚洲精品久久午夜乱码| 老熟妇仑乱视频hdxx| 欧美黄色片欧美黄色片| 后天国语完整版免费观看| 久久人妻av系列| 在线观看免费视频日本深夜| 天堂动漫精品| 亚洲五月婷婷丁香| 亚洲 欧美一区二区三区| 精品一区二区三区视频在线观看免费 | svipshipincom国产片| 国产精品乱码一区二三区的特点 | 欧美日韩黄片免| 91麻豆精品激情在线观看国产 | 丰满人妻熟妇乱又伦精品不卡| 岛国在线观看网站| 日韩精品免费视频一区二区三区| 在线看a的网站| 可以免费在线观看a视频的电影网站| 久久精品国产综合久久久| 国产欧美日韩一区二区三区在线| 老汉色av国产亚洲站长工具| 国产一区二区激情短视频| 精品视频人人做人人爽| 欧美乱妇无乱码| 久久性视频一级片| 久久精品人人爽人人爽视色| а√天堂www在线а√下载 | 99国产精品一区二区三区| 欧美日韩黄片免| 成人国产一区最新在线观看| 精品免费久久久久久久清纯 | 亚洲男人天堂网一区| 又大又爽又粗| 脱女人内裤的视频| 亚洲专区中文字幕在线| 女性生殖器流出的白浆| 久久久久国产一级毛片高清牌| 两性午夜刺激爽爽歪歪视频在线观看 | 日本欧美视频一区| 中国美女看黄片| 久久久久精品国产欧美久久久| 亚洲欧美精品综合一区二区三区| 精品乱码久久久久久99久播| 在线观看免费午夜福利视频| 丁香六月欧美| tube8黄色片| 日本a在线网址| 大片电影免费在线观看免费| 亚洲专区国产一区二区| 一进一出好大好爽视频| 欧美日韩成人在线一区二区| 一级毛片女人18水好多| 日韩制服丝袜自拍偷拍| 亚洲七黄色美女视频| 婷婷丁香在线五月| 国产精品一区二区精品视频观看| 日本黄色日本黄色录像| 成人国语在线视频| 757午夜福利合集在线观看| 久久精品熟女亚洲av麻豆精品| 国产精品久久久久久人妻精品电影| 亚洲精品国产一区二区精华液| 777久久人妻少妇嫩草av网站| 国产免费av片在线观看野外av| 又大又爽又粗| 在线国产一区二区在线| 一区福利在线观看| 男人的好看免费观看在线视频 | 亚洲全国av大片| 90打野战视频偷拍视频| 国产精品久久电影中文字幕 | 亚洲av熟女| 夫妻午夜视频| 国产一区二区三区视频了| 国产精品秋霞免费鲁丝片| 黑人猛操日本美女一级片| 亚洲免费av在线视频| 大陆偷拍与自拍| 69精品国产乱码久久久| 国产精品永久免费网站| 一本综合久久免费| 日韩欧美国产一区二区入口| 亚洲av电影在线进入| 免费观看a级毛片全部| 校园春色视频在线观看| 亚洲va日本ⅴa欧美va伊人久久| 99久久人妻综合| 久久中文字幕一级| 国产成人欧美在线观看 | 少妇被粗大的猛进出69影院| 久久精品国产亚洲av高清一级| 欧美日韩福利视频一区二区| 国产精品一区二区免费欧美| 在线十欧美十亚洲十日本专区| 久久久久久人人人人人| 久久人人97超碰香蕉20202| 黄色女人牲交| 黄频高清免费视频| 久99久视频精品免费| 成人影院久久| 欧美性长视频在线观看| 丝瓜视频免费看黄片| 中文字幕人妻丝袜一区二区| 久久天躁狠狠躁夜夜2o2o| 国产单亲对白刺激| 啦啦啦在线免费观看视频4| 黄网站色视频无遮挡免费观看| 久久精品熟女亚洲av麻豆精品| 欧美日韩乱码在线| 人人妻人人澡人人看| 在线国产一区二区在线| 在线永久观看黄色视频| 久久久精品国产亚洲av高清涩受| 水蜜桃什么品种好| 亚洲中文av在线| 国产97色在线日韩免费| 黄网站色视频无遮挡免费观看| 国产三级黄色录像| 狂野欧美激情性xxxx| 亚洲专区国产一区二区| 精品久久久久久久毛片微露脸| 成人三级做爰电影| 国产精品综合久久久久久久免费 | 亚洲美女黄片视频| 国产精品偷伦视频观看了| 日日摸夜夜添夜夜添小说| 亚洲美女黄片视频| 十八禁人妻一区二区| 啦啦啦在线免费观看视频4| 免费黄频网站在线观看国产| tocl精华| 欧美国产精品va在线观看不卡| 久久天堂一区二区三区四区| 热99re8久久精品国产| 欧美 亚洲 国产 日韩一| 国产精品久久久人人做人人爽| 欧美人与性动交α欧美精品济南到| 女人爽到高潮嗷嗷叫在线视频| 精品视频人人做人人爽| 国产精品偷伦视频观看了| 黄色毛片三级朝国网站| 欧美在线黄色| 免费在线观看黄色视频的| 看黄色毛片网站| 男人舔女人的私密视频| 新久久久久国产一级毛片| 亚洲色图综合在线观看| 美女国产高潮福利片在线看| 久久久久久人人人人人| 亚洲av美国av| 午夜福利在线观看吧| 国产激情久久老熟女| 成年人午夜在线观看视频| 村上凉子中文字幕在线| 亚洲av日韩精品久久久久久密| 嫁个100分男人电影在线观看| 免费av中文字幕在线| 亚洲国产精品合色在线| 精品人妻1区二区| 国产免费现黄频在线看| 国产精品美女特级片免费视频播放器 | 国产欧美日韩一区二区三| 一级作爱视频免费观看| 激情在线观看视频在线高清 | 中文字幕精品免费在线观看视频| 欧美激情 高清一区二区三区| 视频区图区小说| 激情在线观看视频在线高清 | 丝袜美足系列| 在线永久观看黄色视频| 亚洲一区高清亚洲精品| 日韩免费av在线播放| 男女免费视频国产| 中文字幕av电影在线播放| 亚洲第一av免费看| 黄色片一级片一级黄色片| 九色亚洲精品在线播放| 久久久水蜜桃国产精品网| 国产欧美日韩一区二区精品| 欧洲精品卡2卡3卡4卡5卡区| 国产成+人综合+亚洲专区| 国产精品久久久久久精品古装| 人妻一区二区av| 欧美日韩视频精品一区| 亚洲精品av麻豆狂野| 亚洲专区中文字幕在线| 色94色欧美一区二区| 黄色片一级片一级黄色片| 国产成人精品久久二区二区免费| 欧美+亚洲+日韩+国产| 视频区欧美日本亚洲| 极品人妻少妇av视频| 精品久久久精品久久久| 波多野结衣av一区二区av| 狠狠狠狠99中文字幕| 老司机福利观看| 亚洲色图av天堂| 久久久精品免费免费高清| 亚洲精品自拍成人| 久久热在线av| 12—13女人毛片做爰片一| 日韩三级视频一区二区三区| 日本一区二区免费在线视频| 99国产精品99久久久久| 老熟女久久久| 免费观看人在逋| 成熟少妇高潮喷水视频| 亚洲色图av天堂| 久久狼人影院| 午夜亚洲福利在线播放| 国产男女内射视频| 亚洲成人免费电影在线观看| 99精品欧美一区二区三区四区| 欧美亚洲 丝袜 人妻 在线| 91大片在线观看| 国产99白浆流出| 亚洲,欧美精品.| 嫁个100分男人电影在线观看| 中文字幕最新亚洲高清| 精品福利观看| 他把我摸到了高潮在线观看| 久久香蕉激情| 亚洲成人手机| 精品国产一区二区三区四区第35| a级毛片在线看网站| av天堂久久9| 999久久久精品免费观看国产| 欧美激情极品国产一区二区三区| 欧美日韩一级在线毛片| 午夜日韩欧美国产| 巨乳人妻的诱惑在线观看| 一边摸一边抽搐一进一小说 | 日韩成人在线观看一区二区三区| 69av精品久久久久久| 老司机福利观看| 国产视频一区二区在线看| 天堂√8在线中文| 很黄的视频免费| 国产精品久久久久成人av| 亚洲片人在线观看| 亚洲熟女精品中文字幕| 757午夜福利合集在线观看| 国产三级黄色录像| 久久青草综合色| 久久狼人影院| 亚洲综合色网址| 精品电影一区二区在线| 欧美精品一区二区免费开放| 久热爱精品视频在线9| 欧美日韩亚洲综合一区二区三区_| 精品少妇久久久久久888优播| 80岁老熟妇乱子伦牲交| 熟女少妇亚洲综合色aaa.| 久久精品国产a三级三级三级| 香蕉国产在线看| 777久久人妻少妇嫩草av网站| 香蕉丝袜av| 免费一级毛片在线播放高清视频 | 国产又爽黄色视频| 狂野欧美激情性xxxx| av线在线观看网站| 午夜老司机福利片| ponron亚洲| 嫁个100分男人电影在线观看| 一边摸一边抽搐一进一出视频| 精品国产一区二区三区久久久樱花| xxx96com| 亚洲成人免费av在线播放| 在线观看午夜福利视频| 亚洲成人手机| 777久久人妻少妇嫩草av网站| 无限看片的www在线观看| 国产精品香港三级国产av潘金莲| 国产精华一区二区三区| 免费一级毛片在线播放高清视频 | 1024视频免费在线观看| 在线播放国产精品三级| 精品一区二区三区视频在线观看免费 | 国精品久久久久久国模美| 天天躁夜夜躁狠狠躁躁| 香蕉丝袜av| 亚洲情色 制服丝袜| 新久久久久国产一级毛片| 日韩人妻精品一区2区三区| 黄片播放在线免费| 亚洲伊人色综图| 男女之事视频高清在线观看| 91麻豆av在线| 久久久久久免费高清国产稀缺| 成在线人永久免费视频| www.精华液| 999精品在线视频| 亚洲七黄色美女视频| 亚洲欧美日韩高清在线视频| 免费黄频网站在线观看国产| 久久精品亚洲av国产电影网| 午夜日韩欧美国产| 亚洲精品久久成人aⅴ小说| 国产精品偷伦视频观看了| 久久 成人 亚洲| 日韩制服丝袜自拍偷拍| 91精品国产国语对白视频| 丁香欧美五月| 别揉我奶头~嗯~啊~动态视频| 欧美 亚洲 国产 日韩一| 亚洲av美国av| 精品久久蜜臀av无| 免费在线观看影片大全网站| 欧美日韩乱码在线| 两个人看的免费小视频| 大片电影免费在线观看免费| 一边摸一边抽搐一进一出视频| 国产蜜桃级精品一区二区三区 | 成人永久免费在线观看视频| 国产精品香港三级国产av潘金莲| 精品免费久久久久久久清纯 | 国产色视频综合| 欧美乱码精品一区二区三区| 巨乳人妻的诱惑在线观看| 日本wwww免费看| 激情视频va一区二区三区| 亚洲精品美女久久av网站| 性少妇av在线| 又黄又爽又免费观看的视频| 久久狼人影院| 日本wwww免费看| 在线观看免费视频日本深夜| 欧美日韩亚洲综合一区二区三区_| 精品久久久久久久久久免费视频 | 亚洲精品成人av观看孕妇| 亚洲人成77777在线视频| 最新美女视频免费是黄的| 国产野战对白在线观看| 超色免费av| 女人爽到高潮嗷嗷叫在线视频| 18禁国产床啪视频网站| 亚洲精品乱久久久久久| 国产成人欧美| 高清黄色对白视频在线免费看| 国精品久久久久久国模美| 国产高清激情床上av| 日本wwww免费看| 一区二区三区激情视频| 亚洲七黄色美女视频| 91精品国产国语对白视频| 美女高潮到喷水免费观看| 淫妇啪啪啪对白视频| 十八禁网站免费在线| 午夜免费鲁丝| 黄色视频不卡| 韩国av一区二区三区四区| 久久中文字幕一级| 久久久久国产精品人妻aⅴ院 | 999精品在线视频| 一区在线观看完整版| 婷婷成人精品国产| 免费在线观看黄色视频的| 亚洲 国产 在线| 美女 人体艺术 gogo| 乱人伦中国视频| 两人在一起打扑克的视频| 国产日韩欧美亚洲二区| 人妻久久中文字幕网| 午夜福利欧美成人| 国产高清videossex| 热99久久久久精品小说推荐| 淫妇啪啪啪对白视频| 日本黄色日本黄色录像| 在线国产一区二区在线| 午夜亚洲福利在线播放| 777久久人妻少妇嫩草av网站| 1024视频免费在线观看| 国产精品久久久久久精品古装| 久久香蕉激情| videos熟女内射| 亚洲第一欧美日韩一区二区三区| 国产高清激情床上av| 欧美精品av麻豆av| 国产欧美日韩精品亚洲av| 久久国产亚洲av麻豆专区| 女性生殖器流出的白浆| 亚洲自偷自拍图片 自拍| 69av精品久久久久久| 精品福利观看| 香蕉国产在线看| 精品电影一区二区在线| 亚洲成国产人片在线观看| 精品视频人人做人人爽| xxx96com| 国产免费现黄频在线看| 欧美性长视频在线观看| 久久久久国内视频| 三上悠亚av全集在线观看| 很黄的视频免费| 亚洲欧美色中文字幕在线| 熟女少妇亚洲综合色aaa.| 他把我摸到了高潮在线观看| av国产精品久久久久影院| 亚洲av电影在线进入| 老司机深夜福利视频在线观看| 亚洲一码二码三码区别大吗| 黄网站色视频无遮挡免费观看| 麻豆国产av国片精品| 黑人巨大精品欧美一区二区蜜桃| 91麻豆av在线| 黄片小视频在线播放| 50天的宝宝边吃奶边哭怎么回事| 亚洲人成77777在线视频| 99国产精品一区二区三区| av超薄肉色丝袜交足视频| 丰满饥渴人妻一区二区三| 亚洲人成电影免费在线| 亚洲国产精品sss在线观看 | 色综合婷婷激情| 欧美日韩乱码在线| 在线观看66精品国产| 亚洲色图 男人天堂 中文字幕| 久久人人97超碰香蕉20202| 欧美黄色淫秽网站| 另类亚洲欧美激情| 国精品久久久久久国模美| 丝袜美腿诱惑在线| 国产精品99久久99久久久不卡| 国产亚洲精品一区二区www | 亚洲午夜精品一区,二区,三区| 亚洲人成电影观看| 久久久久久久国产电影| 精品欧美一区二区三区在线| 少妇被粗大的猛进出69影院| 夫妻午夜视频| 午夜福利乱码中文字幕| 国产精品久久电影中文字幕 | 久久 成人 亚洲| 精品国产美女av久久久久小说| 首页视频小说图片口味搜索| 老熟女久久久| 99久久国产精品久久久| 一进一出抽搐gif免费好疼 | 成年版毛片免费区| 人人妻人人爽人人添夜夜欢视频| www.熟女人妻精品国产| 又紧又爽又黄一区二区| 飞空精品影院首页| 香蕉丝袜av| 免费观看精品视频网站| 黄片小视频在线播放| 高清av免费在线| 涩涩av久久男人的天堂| 久久精品亚洲av国产电影网| 精品一区二区三区视频在线观看免费 | 飞空精品影院首页| 国产欧美日韩一区二区精品| 麻豆乱淫一区二区| 亚洲精品自拍成人| 老司机在亚洲福利影院| 在线观看午夜福利视频| 亚洲专区国产一区二区| 亚洲全国av大片| av超薄肉色丝袜交足视频| 老司机亚洲免费影院| 国产亚洲精品久久久久5区| 欧美人与性动交α欧美软件| videosex国产| 精品国内亚洲2022精品成人 | 久久久久国内视频| 国产亚洲精品久久久久久毛片 | 黑人巨大精品欧美一区二区mp4| 国产亚洲欧美在线一区二区| 久久人人爽av亚洲精品天堂| 少妇被粗大的猛进出69影院| 成年人黄色毛片网站| 精品一区二区三区视频在线观看免费 | 黄色 视频免费看| 99香蕉大伊视频| 男人舔女人的私密视频| 久久久精品国产亚洲av高清涩受| 纯流量卡能插随身wifi吗| 最新的欧美精品一区二区| 亚洲三区欧美一区| 69av精品久久久久久| 精品少妇一区二区三区视频日本电影| 69av精品久久久久久| 国产精品99久久99久久久不卡| 91av网站免费观看| 日日摸夜夜添夜夜添小说| 丰满的人妻完整版| 淫妇啪啪啪对白视频| 日本精品一区二区三区蜜桃| 精品第一国产精品| 国产一区二区三区综合在线观看| 91老司机精品| 91精品三级在线观看| 久久影院123| 美女高潮到喷水免费观看| 精品卡一卡二卡四卡免费| 一个人免费在线观看的高清视频| 一级毛片高清免费大全| 国产欧美亚洲国产| 脱女人内裤的视频| av欧美777| 99久久精品国产亚洲精品| 女人被躁到高潮嗷嗷叫费观| 1024香蕉在线观看| 成人18禁在线播放| 午夜福利视频在线观看免费| 91国产中文字幕| 日韩中文字幕欧美一区二区| 日韩人妻精品一区2区三区| 国产精品久久久久成人av| 成在线人永久免费视频| 免费在线观看亚洲国产| 自线自在国产av| 99riav亚洲国产免费| 成年人午夜在线观看视频| 国产伦人伦偷精品视频| 久久精品亚洲精品国产色婷小说| 俄罗斯特黄特色一大片| 黄色毛片三级朝国网站| 欧美黑人欧美精品刺激| 男女高潮啪啪啪动态图| 日本五十路高清| 免费在线观看黄色视频的| 精品亚洲成a人片在线观看| 女人精品久久久久毛片| 久久狼人影院| 黑人猛操日本美女一级片| 精品国产美女av久久久久小说| 黄色a级毛片大全视频| 亚洲精品粉嫩美女一区| 黑人操中国人逼视频| 亚洲九九香蕉| 精品第一国产精品| 亚洲熟妇熟女久久| 人人妻人人添人人爽欧美一区卜| 精品人妻在线不人妻| 中文字幕最新亚洲高清| 久久精品国产清高在天天线| 男女高潮啪啪啪动态图| 中文字幕人妻丝袜一区二区| 精品一区二区三区av网在线观看| 黄色女人牲交| 国产日韩一区二区三区精品不卡| 欧美午夜高清在线| 最新美女视频免费是黄的| 久久天堂一区二区三区四区| 久久ye,这里只有精品| 91精品三级在线观看| 久久精品国产综合久久久| 国产三级黄色录像| 9191精品国产免费久久| 性色av乱码一区二区三区2| 久久久久国产精品人妻aⅴ院 | 精品久久久精品久久久| 天天添夜夜摸| 9热在线视频观看99| 欧美乱妇无乱码| 国产精品综合久久久久久久免费 | 国产高清激情床上av| 国产高清国产精品国产三级| 岛国毛片在线播放| 啦啦啦在线免费观看视频4| 国产亚洲精品久久久久5区| 一边摸一边做爽爽视频免费| 中文字幕人妻熟女乱码| 波多野结衣av一区二区av| 久久精品国产99精品国产亚洲性色 | 999久久久国产精品视频| 国产麻豆69| 精品一区二区三卡| 最新美女视频免费是黄的| 国产精品九九99| 又黄又粗又硬又大视频| 1024视频免费在线观看| 精品电影一区二区在线| 日本vs欧美在线观看视频| 日韩 欧美 亚洲 中文字幕| 欧美中文综合在线视频| 欧美日本中文国产一区发布| 国产1区2区3区精品| 免费女性裸体啪啪无遮挡网站| a级毛片黄视频| 制服诱惑二区| www.自偷自拍.com| 国产精品免费大片| 国产蜜桃级精品一区二区三区 | 亚洲第一青青草原| 丝袜美足系列| 欧美精品人与动牲交sv欧美|