From: Ian Lance Taylor <iant@golang.org>
To: "REIX, Tony" <tony.reix@atos.net>
Cc: "gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>,
"SARTER, MATTHIEU (ext)" <matthieu.sarter.external@atos.net>,
David Edelsohn <edelsohn@us.ibm.com>
Subject: Re: [PATCH,AIX] Enable XCOFF in libbacktrace on AIX
Date: Fri, 21 Jul 2017 18:05:00 -0000 [thread overview]
Message-ID: <CAKOQZ8x5oqExrAn52e8BNzJQdSyrKmJM0oNXO=Nt5LOtUcxeQA@mail.gmail.com> (raw)
In-Reply-To: <B37989F2852398498001550C29155BE5CD355A@FRCRPVV9EX3MSX.ww931.my-it-solutions.net>
[-- Attachment #1: Type: text/plain, Size: 1796 bytes --]
On Mon, May 15, 2017 at 7:24 AM, REIX, Tony <tony.reix@atos.net> wrote:
> Description:
> * This patch enables libbacktrace to handle XCOFF on AIX.
>
> Tests:
> * Fedora25/x86_64 + GCC v7.1.0 : Configure/Build: SUCCESS
> - build made by means of a .spec file based on Fedora gcc-7.0.1-0.12 .spec file
> ../configure --enable-bootstrap --enable-languages=c,c++,objc,obj-c++,fortran,go,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --enable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
>
> ChangeLog:
> * libbacktrace/Makefile.am : Add xcoff.c
> * libbacktrace/Makefile.in : Regenerated
> * libbacktrace/configure.ac : Add XCOFF output file type
> * libbacktrace/configure : Regenerated
> * libbacktrace/fileline.c : Handle AIX procfs tree
> * libbacktrace/filetype.awk : Add AIX XCOFF type detection
> * libbacktrace/xcoff.c : New file for handling XCOFF format
Thanks. Committed with some minor changes, as follows.
Ian
2017-07-21 Tony Reix <tony.reix@atos.net>
* filetype.awk: Add AIX XCOFF type detection.
* configure.ac: Recognize xcoff format.
* Makefile.am (FORMAT_FILES): Add xcoff.c.
* fileline.c: Include <unistd.h>.
(fileline_initialize): Add case for AIX procfs.
* xcoff.c: New file.
* configure, Makefile.in: Rebuild.
[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 5497 bytes --]
Index: Makefile.am
===================================================================
--- Makefile.am (revision 250406)
+++ Makefile.am (working copy)
@@ -57,7 +57,8 @@ BACKTRACE_FILES = \
FORMAT_FILES = \
elf.c \
pecoff.c \
- unknown.c
+ unknown.c \
+ xcoff.c
VIEW_FILES = \
read.c \
@@ -155,3 +156,5 @@ sort.lo: config.h backtrace.h internal.h
stest.lo: config.h backtrace.h internal.h
state.lo: config.h backtrace.h backtrace-supported.h internal.h
unknown.lo: config.h backtrace.h internal.h
+xcoff.lo: config.h backtrace.h internal.h
+
Index: configure.ac
===================================================================
--- configure.ac (revision 250406)
+++ configure.ac (working copy)
@@ -233,6 +233,9 @@ elf*) FORMAT_FILE="elf.lo" ;;
pecoff) FORMAT_FILE="pecoff.lo"
backtrace_supports_data=no
;;
+xcoff) FORMAT_FILE="xcoff.lo"
+ backtrace_supports_data=no
+ ;;
*) AC_MSG_WARN([could not determine output file type])
FORMAT_FILE="unknown.lo"
backtrace_supported=no
Index: fileline.c
===================================================================
--- fileline.c (revision 250406)
+++ fileline.c (working copy)
@@ -37,6 +37,7 @@ POSSIBILITY OF SUCH DAMAGE. */
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
+#include <unistd.h>
#include "backtrace.h"
#include "internal.h"
@@ -57,6 +58,7 @@ fileline_initialize (struct backtrace_st
int pass;
int called_error_callback;
int descriptor;
+ char buf[64];
if (!state->threaded)
failed = state->fileline_initialization_failed;
@@ -80,7 +82,7 @@ fileline_initialize (struct backtrace_st
descriptor = -1;
called_error_callback = 0;
- for (pass = 0; pass < 4; ++pass)
+ for (pass = 0; pass < 5; ++pass)
{
const char *filename;
int does_not_exist;
@@ -99,6 +101,10 @@ fileline_initialize (struct backtrace_st
case 3:
filename = "/proc/curproc/file";
break;
+ case 4:
+ snprintf (buf, sizeof (buf), "/proc/%d/object/a.out", getpid ());
+ filename = buf;
+ break;
default:
abort ();
}
Index: filetype.awk
===================================================================
--- filetype.awk (revision 250406)
+++ filetype.awk (working copy)
@@ -3,3 +3,6 @@
/\177ELF\002/ { if (NR == 1) { print "elf64"; exit } }
/\114\001/ { if (NR == 1) { print "pecoff"; exit } }
/\144\206/ { if (NR == 1) { print "pecoff"; exit } }
+/\001\337/ { if (NR == 1) { print "xcoff"; exit } }
+/\001\367/ { if (NR == 1) { print "xcoff"; exit } }
+
Index: xcoff.c
===================================================================
--- xcoff.c (revision 0)
+++ xcoff.c (working copy)
@@ -0,0 +1,76 @@
+/* xcoff.c -- Get debug data from a XCOFFF file for backtraces.
+ Copyright (C) 2017 Free Software Foundation, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <sys/types.h>
+
+#include "backtrace.h"
+#include "internal.h"
+
+/* A trivial routine that always fails to find fileline data. */
+
+static int
+xcoff_fileline (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ uintptr_t pc, backtrace_full_callback callback,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data)
+
+{
+ static char buf[32];
+
+ snprintf (buf, sizeof(buf), "pc=0x%llx", (unsigned long long) pc);
+ return callback (data, pc, "unknown_file", 123, buf);
+}
+
+static void
+xcoff_syminfo (struct backtrace_state *state ATTRIBUTE_UNUSED, uintptr_t addr,
+ backtrace_syminfo_callback callback,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data)
+{
+ callback (data, addr, "unknown", 0, 0);
+}
+
+/* Initialize the backtrace data when we don't know how to read the
+ debug info. */
+
+int
+backtrace_initialize (struct backtrace_state *state ATTRIBUTE_UNUSED,
+ int descriptor ATTRIBUTE_UNUSED,
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
+ void *data ATTRIBUTE_UNUSED, fileline *fileline_fn)
+{
+ state->syminfo_fn = xcoff_syminfo;
+ state->fileline_data = NULL;
+ *fileline_fn = xcoff_fileline;
+ return 1;
+}
next prev parent reply other threads:[~2017-07-21 18:05 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-15 14:26 REIX, Tony
2017-07-21 18:05 ` Ian Lance Taylor [this message]
2017-07-23 9:12 ` Rainer Orth
2017-06-06 23:32 David Edelsohn
2017-06-15 15:36 David Edelsohn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAKOQZ8x5oqExrAn52e8BNzJQdSyrKmJM0oNXO=Nt5LOtUcxeQA@mail.gmail.com' \
--to=iant@golang.org \
--cc=edelsohn@us.ibm.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=matthieu.sarter.external@atos.net \
--cc=tony.reix@atos.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).