Re: [RFA] Submit process record and replay third time, 3/9

teawater
2009-01-23T06:58:07Z

[-- Attachment #1: Type: text/plain, Size: 1711 bytes --]

Hi Pedro,

I found that remote.c use signal so I make a patch change sigaction to signal.

Do you think I can keep record.c in all place with this patch?

Thanks,
Hui

On Fri, Jan 23, 2009 at 08:00, teawater <teawater@gmail.com> wrote:
> I think my prev mail is not right.
>
> linux-record.c is not like record.c. It's for the tgt part and it
> doesn't have some os-special code.
>
> I think I will try to put it close to linux-nat.c.
>
> BTW I really want record.c to be a os-nospecial code. Do you have some
> idea with it. I think there just 2 sigaction in there, maybe I can
> make it not os-special.
>
>
> And for this record_beneath_to_xxx function pointer, do you agree with I said?
>
>
> Thanks,
> Hui
>
> On Fri, Jan 23, 2009 at 06:36, Pedro Alves <pedro@codesourcery.com> wrote:
>> On Thursday 22 January 2009 22:34:25, Pedro Alves write:
>>> Here's what I propose you try as first step: remove all references to record.o
>>> from Makefile.in and configure.tgt. Try building. You'll get link errors. Now,
>>> come up with interfaces between the core and record.c that would preserve all
>>> functionality if record.o isn't included in the link; but that will still link
>>> a gdb executable, if record.o isn't linked in.
>>
>> Sigh, I said "isn't" when I mean "is". Let me try again,
>>
>> Here's what I propose you try as first step: remove all references to record.o
>> from Makefile.in and configure.tgt. Try building. You'll get link errors. Now,
>> come up with interfaces between the core and record.c that would preserve all
>> functionality if record.o *is* included in the link; but that will still link
>> a gdb executable, if record.o *isn't* linked in.
>>
>> --
>> Pedro Alves
>>
>

[-- Attachment #2: record-target-remove-sigaction.txt --]
[-- Type: text/plain, Size: 1342 bytes --]

Index: gdb/record.c
===================================================================
--- gdb.orig/record.c 2009-01-23 10:48:23.000000000 +0800
+++ gdb/record.c 2009-01-23 15:04:11.000000000 +0800
@@ -23,6 +23,7 @@
#include "regcache.h"
#include "inferior.h"
#include "gdbthread.h"
+#include "event-top.h"
#include "record.h"

#include <signal.h>
@@ -621,7 +622,6 @@
}
else
{
- struct sigaction act, old_act;
int need_dasm = 0;
struct regcache *regcache = get_current_regcache ();
int continue_flag = 1;
@@ -656,13 +656,7 @@
}

record_get_sig = 0;
- act.sa_handler = record_sig_handler;
- act.sa_mask = record_maskall;
- act.sa_flags = SA_RESTART;
- if (sigaction (SIGINT, &act, &old_act))
- {
- perror_with_name (_("Process record: sigaction failed"));
- }
+ signal (SIGINT, record_sig_handler);
/* If GDB is in terminal_inferior mode, it will not get the signal.
And in GDB replay mode, GDB doesn't need to be in terminal_inferior
mode, because inferior will not executed.
@@ -831,10 +825,7 @@
}
while (continue_flag);

- if (sigaction (SIGALRM, &old_act, NULL))
- {
- perror_with_name (_("Process record: sigaction failed"));
- }
+ signal (SIGINT, handle_sigint);

replay_out:
if (record_get_sig)