From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 120693 invoked by alias); 10 May 2018 01:59:08 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 120578 invoked by uid 89); 10 May 2018 01:59:08 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=sat, Sat X-HELO: mail-wm0-f46.google.com Received: from mail-wm0-f46.google.com (HELO mail-wm0-f46.google.com) (74.125.82.46) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 10 May 2018 01:59:05 +0000 Received: by mail-wm0-f46.google.com with SMTP id j5-v6so1530702wme.5 for ; Wed, 09 May 2018 18:59:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=HPNAR+8hi4Fu+Jsn5PJehVbjFLMnIATyBWXFvm0iZiQ=; b=n6qkvRP0k/kMnKu09zbMnm2zAThZZh0NB1JVm88iXwKAHESyDAsTf71hhm6J9AsmZ/ RPx2WGeG8sZ2Jz73BGHJ/9kXQK6Tdxc4KlRy1JR1TkjwcaJgnZ29op5uB/i8nJHCbEHj v+Dpl46Zq3FguocVKTszJRkqpF2GfO/7Xa0KLI6Vp2B3I91vOCCKYerC0Am8fx/NZVZ9 HRD0zDFB7YN5ytxI1y3haq3FBsbpNOnqCU0MA7HBDM68Knb1Z21XALzuGOBu31aeX9cu ERSYVj9KgOcRAOOtwbP6weirp1z4qfL1uVV5tbgLss0gLb/HGPsjWv3L+FG9kmxHatW+ mKKg== X-Gm-Message-State: ALKqPwdIosg9aIWo8cRHOXeS1wPAC6TI1Flz7IyUFKQsI3ot+aEE/+4P +Em3pqOD6bQcQ6PZUS5yg+EvhS3uSM53zFujgVYVog== X-Google-Smtp-Source: AB8JxZqps8eaAqpBFUWRLxwKaXMTdnkXA8KLtvSjllG8iidE4kNpA2F1399e34zfbRGkJ4UhwwxpyLd5MEbLDwoCY5g= X-Received: by 2002:a1c:2084:: with SMTP id g126-v6mr7895258wmg.52.1525917543169; Wed, 09 May 2018 18:59:03 -0700 (PDT) MIME-Version: 1.0 Received: by 10.223.165.130 with HTTP; Wed, 9 May 2018 18:59:02 -0700 (PDT) In-Reply-To: <3123655.591XJlIpKI@ralph.baldwin.cx> References: <3393443.3hyCjj7TaN@ralph.baldwin.cx> <3123655.591XJlIpKI@ralph.baldwin.cx> From: Rajendra SY Date: Thu, 10 May 2018 03:08:00 -0000 Message-ID: Subject: Re: [PATCH] [PR gdb/23093] Implementation of "gdbarch_gdb_signal_to/from_target" on FreeBSD To: John Baldwin Cc: gdb-patches@sourceware.org Content-Type: text/plain; charset="UTF-8" X-SW-Source: 2018-05/txt/msg00232.txt.bz2 John, Could you please send me copyright assignment form to be filled? I tried to searching & found .doc format files with different contents. Thanks Rajendra On Tue, May 8, 2018 at 5:50 AM, John Baldwin wrote: > On Saturday, May 05, 2018 11:15:20 AM Rajendra SY wrote: >> John, >> >> Thanks for the review comments. >> > Do you have a copyright assignment on file for contributions to GDB? >> No >> >> Would you please commit this patch? > > I think this change is probably large enough to need a copyright assignment > before it can go upstream. Can you fill one out and let me know when it is > filed? Then I can push this in. > >> Thanks >> Rajendra >> >> >> On Sat, May 5, 2018 at 12:01 AM, John Baldwin wrote: >> > On Friday, April 27, 2018 08:55:03 AM Rajendra SY wrote: >> >> Resending the same patch for review comments. >> >> >> >> Problem: >> >> The $_exitsignal internal variable does not get updated on FreeBSD platform. >> >> >> >> Cause: >> >> FreeBSD target is missing signal mapping functions >> >> "gdb_signal_to_target" & "gdb_signal_from_target". >> >> The code flow gdb/infrun.c:5075 [a call to >> >> gdbarch_gdb_signal_to_target_p()] tries to find out if the target has >> >> these functions. In case of FreeBSD it is not so it just skips >> >> updating '$_exitsignal' variable. >> >> >> >> The attached patch implements these functions to provide correct >> >> FreeBSD signal to GDB signal mapping information. >> >> >> >> Tests: >> >> FAIL: gdb.base/exitsignal.exp: $_exitsignal is 11 (SIGSEGV) after SIGSEGV. >> >> FAIL: gdb.base/exitsignal.exp: $_exitsignal is 11 (SIGSEGV) after >> >> restarting the inferior >> >> >> >> These above currently failing tests will pass with this fix. >> >> >> >> gdb/ChangeLog: >> >> 2018-04-27 Rajendra SY >> >> >> >> PR gdb/23093 >> >> * gdb/fbsd-tdep.c (enum gdb_signal): >> >> (fbsd_gdb_signal_from_target): >> >> (fbsd_gdb_signal_to_target): >> >> (fbsd_init_abi): >> > >> > Thanks, I've tested this change and I have some small changes to it below. Do >> > you have a copyright assignment on file for contributions to GDB? >> > >> > From 4346c0567fd137f845cdc46c0a0d8f6047db0ec9 Mon Sep 17 00:00:00 2001 >> > From: Rajendra SY >> > Date: Wed, 2 May 2018 11:04:24 -0700 >> > Subject: [PATCH] Implement the "gdb_signal_to/from_target" gdbarch methods for >> > FreeBSD. >> > >> > This fixes failures in the gdb.base/exitsignal.exp test. >> > >> > gdb/ChangeLog: >> > >> > PR gdb/23093 >> > * gdb/fbsd-tdep.c (fbsd_gdb_signal_from_target) >> > (fbsd_gdb_signal_to_target): New. >> > (fbsd_init_abi): Install gdbarch "signal_from_target" and >> > "signal_to_target" methods. >> > --- >> > gdb/ChangeLog | 8 ++ >> > gdb/fbsd-tdep.c | 282 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> > 2 files changed, 290 insertions(+) >> > >> > diff --git a/gdb/ChangeLog b/gdb/ChangeLog >> > index f326c8e2d3..46c474b612 100644 >> > --- a/gdb/ChangeLog >> > +++ b/gdb/ChangeLog >> > @@ -1,3 +1,11 @@ >> > +2018-05-02 Rajendra SY >> > + >> > + PR gdb/23093 >> > + * gdb/fbsd-tdep.c (fbsd_gdb_signal_from_target) >> > + (fbsd_gdb_signal_to_target): New. >> > + (fbsd_init_abi): Install gdbarch "signal_from_target" and >> > + "signal_to_target" methods. >> > + >> > 2018-05-02 Tom Tromey >> > >> > PR python/20084: >> > diff --git a/gdb/fbsd-tdep.c b/gdb/fbsd-tdep.c >> > index e49a9aff09..6703cd698d 100644 >> > --- a/gdb/fbsd-tdep.c >> > +++ b/gdb/fbsd-tdep.c >> > @@ -29,6 +29,46 @@ >> > #include "elf-bfd.h" >> > #include "fbsd-tdep.h" >> > >> > +/* This enum is derived from FreeBSD's . */ >> > + >> > +enum >> > + { >> > + FREEBSD_SIGHUP = 1, >> > + FREEBSD_SIGINT = 2, >> > + FREEBSD_SIGQUIT = 3, >> > + FREEBSD_SIGILL = 4, >> > + FREEBSD_SIGTRAP = 5, >> > + FREEBSD_SIGABRT = 6, >> > + FREEBSD_SIGEMT = 7, >> > + FREEBSD_SIGFPE = 8, >> > + FREEBSD_SIGKILL = 9, >> > + FREEBSD_SIGBUS = 10, >> > + FREEBSD_SIGSEGV = 11, >> > + FREEBSD_SIGSYS = 12, >> > + FREEBSD_SIGPIPE = 13, >> > + FREEBSD_SIGALRM = 14, >> > + FREEBSD_SIGTERM = 15, >> > + FREEBSD_SIGURG = 16, >> > + FREEBSD_SIGSTOP = 17, >> > + FREEBSD_SIGTSTP = 18, >> > + FREEBSD_SIGCONT = 19, >> > + FREEBSD_SIGCHLD = 20, >> > + FREEBSD_SIGTTIN = 21, >> > + FREEBSD_SIGTTOU = 22, >> > + FREEBSD_SIGIO = 23, >> > + FREEBSD_SIGXCPU = 24, >> > + FREEBSD_SIGXFSZ = 25, >> > + FREEBSD_SIGVTALRM = 26, >> > + FREEBSD_SIGPROF = 27, >> > + FREEBSD_SIGWINCH = 28, >> > + FREEBSD_SIGINFO = 29, >> > + FREEBSD_SIGUSR1 = 30, >> > + FREEBSD_SIGUSR2 = 31, >> > + FREEBSD_SIGTHR = 32, >> > + FREEBSD_SIGLIBRT = 33, >> > + FREEBSD_SIGRTMIN = 65, >> > + FREEBSD_SIGRTMAX = 126, >> > + }; >> > >> > /* FreeBSD kernels 12.0 and later include a copy of the >> > 'ptrace_lwpinfo' structure returned by the PT_LWPINFO ptrace >> > @@ -1143,6 +1183,246 @@ fbsd_get_siginfo_type (struct gdbarch *gdbarch) >> > return siginfo_type; >> > } >> > >> > +/* Implement the "gdb_signal_from_target" gdbarch method. */ >> > + >> > +static enum gdb_signal >> > +fbsd_gdb_signal_from_target (struct gdbarch *gdbarch, int signal) >> > +{ >> > + switch (signal) >> > + { >> > + case 0: >> > + return GDB_SIGNAL_0; >> > + >> > + case FREEBSD_SIGHUP: >> > + return GDB_SIGNAL_HUP; >> > + >> > + case FREEBSD_SIGINT: >> > + return GDB_SIGNAL_INT; >> > + >> > + case FREEBSD_SIGQUIT: >> > + return GDB_SIGNAL_QUIT; >> > + >> > + case FREEBSD_SIGILL: >> > + return GDB_SIGNAL_ILL; >> > + >> > + case FREEBSD_SIGTRAP: >> > + return GDB_SIGNAL_TRAP; >> > + >> > + case FREEBSD_SIGABRT: >> > + return GDB_SIGNAL_ABRT; >> > + >> > + case FREEBSD_SIGEMT: >> > + return GDB_SIGNAL_EMT; >> > + >> > + case FREEBSD_SIGFPE: >> > + return GDB_SIGNAL_FPE; >> > + >> > + case FREEBSD_SIGKILL: >> > + return GDB_SIGNAL_KILL; >> > + >> > + case FREEBSD_SIGBUS: >> > + return GDB_SIGNAL_BUS; >> > + >> > + case FREEBSD_SIGSEGV: >> > + return GDB_SIGNAL_SEGV; >> > + >> > + case FREEBSD_SIGSYS: >> > + return GDB_SIGNAL_SYS; >> > + >> > + case FREEBSD_SIGPIPE: >> > + return GDB_SIGNAL_PIPE; >> > + >> > + case FREEBSD_SIGALRM: >> > + return GDB_SIGNAL_ALRM; >> > + >> > + case FREEBSD_SIGTERM: >> > + return GDB_SIGNAL_TERM; >> > + >> > + case FREEBSD_SIGURG: >> > + return GDB_SIGNAL_URG; >> > + >> > + case FREEBSD_SIGSTOP: >> > + return GDB_SIGNAL_STOP; >> > + >> > + case FREEBSD_SIGTSTP: >> > + return GDB_SIGNAL_TSTP; >> > + >> > + case FREEBSD_SIGCONT: >> > + return GDB_SIGNAL_CONT; >> > + >> > + case FREEBSD_SIGCHLD: >> > + return GDB_SIGNAL_CHLD; >> > + >> > + case FREEBSD_SIGTTIN: >> > + return GDB_SIGNAL_TTIN; >> > + >> > + case FREEBSD_SIGTTOU: >> > + return GDB_SIGNAL_TTOU; >> > + >> > + case FREEBSD_SIGIO: >> > + return GDB_SIGNAL_IO; >> > + >> > + case FREEBSD_SIGXCPU: >> > + return GDB_SIGNAL_XCPU; >> > + >> > + case FREEBSD_SIGXFSZ: >> > + return GDB_SIGNAL_XFSZ; >> > + >> > + case FREEBSD_SIGVTALRM: >> > + return GDB_SIGNAL_VTALRM; >> > + >> > + case FREEBSD_SIGPROF: >> > + return GDB_SIGNAL_PROF; >> > + >> > + case FREEBSD_SIGWINCH: >> > + return GDB_SIGNAL_WINCH; >> > + >> > + case FREEBSD_SIGINFO: >> > + return GDB_SIGNAL_INFO; >> > + >> > + case FREEBSD_SIGUSR1: >> > + return GDB_SIGNAL_USR1; >> > + >> > + case FREEBSD_SIGUSR2: >> > + return GDB_SIGNAL_USR2; >> > + >> > + /* SIGTHR is the same as SIGLWP on FreeBSD. */ >> > + case FREEBSD_SIGTHR: >> > + return GDB_SIGNAL_LWP; >> > + >> > + case FREEBSD_SIGLIBRT: >> > + return GDB_SIGNAL_LIBRT; >> > + } >> > + >> > + if (signal >= FREEBSD_SIGRTMIN && signal <= FREEBSD_SIGRTMAX) >> > + { >> > + int offset = signal - FREEBSD_SIGRTMIN; >> > + >> > + return (enum gdb_signal) ((int) GDB_SIGNAL_REALTIME_65 + offset); >> > + } >> > + >> > + return GDB_SIGNAL_UNKNOWN; >> > +} >> > + >> > +/* Implement the "gdb_signal_to_target" gdbarch method. */ >> > + >> > +static int >> > +fbsd_gdb_signal_to_target (struct gdbarch *gdbarch, >> > + enum gdb_signal signal) >> > +{ >> > + switch (signal) >> > + { >> > + case GDB_SIGNAL_0: >> > + return 0; >> > + >> > + case GDB_SIGNAL_HUP: >> > + return FREEBSD_SIGHUP; >> > + >> > + case GDB_SIGNAL_INT: >> > + return FREEBSD_SIGINT; >> > + >> > + case GDB_SIGNAL_QUIT: >> > + return FREEBSD_SIGQUIT; >> > + >> > + case GDB_SIGNAL_ILL: >> > + return FREEBSD_SIGILL; >> > + >> > + case GDB_SIGNAL_TRAP: >> > + return FREEBSD_SIGTRAP; >> > + >> > + case GDB_SIGNAL_ABRT: >> > + return FREEBSD_SIGABRT; >> > + >> > + case GDB_SIGNAL_EMT: >> > + return FREEBSD_SIGEMT; >> > + >> > + case GDB_SIGNAL_FPE: >> > + return FREEBSD_SIGFPE; >> > + >> > + case GDB_SIGNAL_KILL: >> > + return FREEBSD_SIGKILL; >> > + >> > + case GDB_SIGNAL_BUS: >> > + return FREEBSD_SIGBUS; >> > + >> > + case GDB_SIGNAL_SEGV: >> > + return FREEBSD_SIGSEGV; >> > + >> > + case GDB_SIGNAL_SYS: >> > + return FREEBSD_SIGSYS; >> > + >> > + case GDB_SIGNAL_PIPE: >> > + return FREEBSD_SIGPIPE; >> > + >> > + case GDB_SIGNAL_ALRM: >> > + return FREEBSD_SIGALRM; >> > + >> > + case GDB_SIGNAL_TERM: >> > + return FREEBSD_SIGTERM; >> > + >> > + case GDB_SIGNAL_URG: >> > + return FREEBSD_SIGURG; >> > + >> > + case GDB_SIGNAL_STOP: >> > + return FREEBSD_SIGSTOP; >> > + >> > + case GDB_SIGNAL_TSTP: >> > + return FREEBSD_SIGTSTP; >> > + >> > + case GDB_SIGNAL_CONT: >> > + return FREEBSD_SIGCONT; >> > + >> > + case GDB_SIGNAL_CHLD: >> > + return FREEBSD_SIGCHLD; >> > + >> > + case GDB_SIGNAL_TTIN: >> > + return FREEBSD_SIGTTIN; >> > + >> > + case GDB_SIGNAL_TTOU: >> > + return FREEBSD_SIGTTOU; >> > + >> > + case GDB_SIGNAL_IO: >> > + return FREEBSD_SIGIO; >> > + >> > + case GDB_SIGNAL_XCPU: >> > + return FREEBSD_SIGXCPU; >> > + >> > + case GDB_SIGNAL_XFSZ: >> > + return FREEBSD_SIGXFSZ; >> > + >> > + case GDB_SIGNAL_VTALRM: >> > + return FREEBSD_SIGVTALRM; >> > + >> > + case GDB_SIGNAL_PROF: >> > + return FREEBSD_SIGPROF; >> > + >> > + case GDB_SIGNAL_WINCH: >> > + return FREEBSD_SIGWINCH; >> > + >> > + case GDB_SIGNAL_INFO: >> > + return FREEBSD_SIGINFO; >> > + >> > + case GDB_SIGNAL_USR1: >> > + return FREEBSD_SIGUSR1; >> > + >> > + case GDB_SIGNAL_USR2: >> > + return FREEBSD_SIGUSR2; >> > + >> > + case GDB_SIGNAL_LWP: >> > + return FREEBSD_SIGTHR; >> > + } >> > + >> > + if (signal >= GDB_SIGNAL_REALTIME_65 >> > + && signal <= GDB_SIGNAL_REALTIME_126) >> > + { >> > + int offset = signal - GDB_SIGNAL_REALTIME_65; >> > + >> > + return FREEBSD_SIGRTMIN + offset; >> > + } >> > + >> > + return -1; >> > +} >> > + >> > /* Implement the "get_syscall_number" gdbarch method. */ >> > >> > static LONGEST >> > @@ -1171,6 +1451,8 @@ fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) >> > set_gdbarch_core_info_proc (gdbarch, fbsd_core_info_proc); >> > set_gdbarch_print_auxv_entry (gdbarch, fbsd_print_auxv_entry); >> > set_gdbarch_get_siginfo_type (gdbarch, fbsd_get_siginfo_type); >> > + set_gdbarch_gdb_signal_from_target (gdbarch, fbsd_gdb_signal_from_target); >> > + set_gdbarch_gdb_signal_to_target (gdbarch, fbsd_gdb_signal_to_target); >> > >> > /* `catch syscall' */ >> > set_xml_syscall_file_name (gdbarch, "syscalls/freebsd.xml"); >> > -- >> > 2.15.1 >> > >> > >> > >> > -- >> > John Baldwin > > > -- > John Baldwin