From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13916 invoked by alias); 30 May 2009 10:11:38 -0000 Received: (qmail 13905 invoked by uid 22791); 30 May 2009 10:11:37 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_24,SPF_SOFTFAIL X-Spam-Check-By: sourceware.org Received: from mtaout5.012.net.il (HELO mtaout5.012.net.il) (84.95.2.13) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 30 May 2009 10:11:28 +0000 Received: from conversion-daemon.i_mtaout5.012.net.il by i_mtaout5.012.net.il (HyperSendmail v2004.12) id <0KKG00600C3ZCR00@i_mtaout5.012.net.il> for gdb@sourceware.org; Sat, 30 May 2009 13:11:26 +0300 (IDT) Received: from HOME-C4E4A596F7 ([84.228.115.215]) by i_mtaout5.012.net.il (HyperSendmail v2004.12) with ESMTPA id <0KKG0018TCARKI10@i_mtaout5.012.net.il>; Sat, 30 May 2009 13:11:24 +0300 (IDT) Date: Sat, 30 May 2009 10:11:00 -0000 From: Eli Zaretskii Subject: System call support in process record and replay To: Hui Zhu Cc: gdb@sourceware.org Reply-to: Eli Zaretskii Message-id: <83iqji529q.fsf@gnu.org> X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2009-05/txt/msg00192.txt.bz2 I have a question about general design of the system call support for the record/replay target, for systems whose system calls are entered through software interrupts. The following excerpt from i386-tdep.c shows the currently-only implementation, for Linux system calls entered via INT 80h: case 0xcd: { int ret; if (target_read_memory (ir.addr, &tmpu8, 1)) { if (record_debug) printf_unfiltered (_("Process record: error reading memory " "at addr 0x%s len = 1.\n"), paddr_nz (ir.addr)); return -1; } ir.addr++; if (tmpu8 != 0x80 || gdbarch_tdep (gdbarch)->i386_intx80_record == NULL) { printf_unfiltered (_("Process record doesn't support " "instruction int 0x%02x.\n"), tmpu8); ir.addr -= 2; goto no_support; } ret = gdbarch_tdep (gdbarch)->i386_intx80_record (ir.regcache); if (ret) return ret; } break; Now, suppose there is another x86 target whose system calls are entered through 3 software interrupts: 0x10, 0x21, and 0x31. Does this mean that to support such a target, we will need to define 3 additional members of `struct gdbarch_tdep', one each for every one of the above interrupt numbers, and then tweak the above code to call each member whenever the corresponding interrupt number is seen in the instruction stream? And adding support for Windows syscalls means that yet another member, for INT 2Eh, should be added? That seems rather inelegant and wasteful to me (since these members will go unused on every x86 target that does not use those interrupts), but if that's the design we want to follow, I'm okay with it.