public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: jflavio@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM] master: Fixing the Libunwind registers mapping for PowerPC32/64.
Date: Fri, 14 Dec 2007 13:55:00 -0000 [thread overview]
Message-ID: <20071214135532.14119.qmail@sourceware.org> (raw)
The branch, master has been updated
via 59372184fa6dc225a01068158bd3cc02ee22cca9 (commit)
from b75c309191bc0edf60db7b51ddf9c056f720fc86 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email.
- Log -----------------------------------------------------------------
commit 59372184fa6dc225a01068158bd3cc02ee22cca9
Author: Jose Flavio Aguilar Paulino <joseflavio@gmail.com>
Date: Fri Dec 14 11:55:29 2007 -0200
Fixing the Libunwind registers mapping for PowerPC32/64.
-----------------------------------------------------------------------
Summary of changes:
frysk-core/frysk/stack/ChangeLog | 5 +
.../frysk/stack/LibunwindRegisterMapFactory.java | 75 +++++++++++-
frysk-sys/lib/unwind/ChangeLog | 9 ++
frysk-sys/lib/unwind/GenRegEnum.awk | 134 ++++++++++++++++++++
frysk-sys/lib/unwind/UnwindRegistersPPC32.shenum | 10 +--
frysk-sys/lib/unwind/UnwindRegistersPPC64.shenum | 8 +-
6 files changed, 223 insertions(+), 18 deletions(-)
create mode 100644 frysk-sys/lib/unwind/GenRegEnum.awk
First 500 lines of diff:
diff --git a/frysk-core/frysk/stack/ChangeLog b/frysk-core/frysk/stack/ChangeLog
index 83886b7..639321e 100644
--- a/frysk-core/frysk/stack/ChangeLog
+++ b/frysk-core/frysk/stack/ChangeLog
@@ -1,3 +1,8 @@
+2007-12-14 Jose Flavio Aguilar Paulino <joseflavio@gmail.com>
+
+ * LibunwindRegisterMapFactory.java: Add PPC32/64 LR, NIP and Floating
+ Pointer Registers.
+
2007-12-11 Andrew Cagney <cagney@redhat.com>
* TestRegs.java (testFloatRegisters()): Delete.
diff --git a/frysk-core/frysk/stack/LibunwindRegisterMapFactory.java b/frysk-core/frysk/stack/LibunwindRegisterMapFactory.java
index 0ba51b4..72c34f6 100644
--- a/frysk-core/frysk/stack/LibunwindRegisterMapFactory.java
+++ b/frysk-core/frysk/stack/LibunwindRegisterMapFactory.java
@@ -125,7 +125,6 @@ public class LibunwindRegisterMapFactory {
.add(X8664Registers.R15, UnwindRegistersX8664.R15)
.add(X8664Registers.RIP, UnwindRegistersX8664.RIP)
;
-
private static final RegisterMap PPC64
= new RegisterMap("PPC64 libunwind")
.add(PPC64Registers.GPR0, UnwindRegistersPPC64.R0)
@@ -159,7 +158,43 @@ public class LibunwindRegisterMapFactory {
.add(PPC64Registers.GPR28, UnwindRegistersPPC64.R28)
.add(PPC64Registers.GPR29, UnwindRegistersPPC64.R29)
.add(PPC64Registers.GPR30, UnwindRegistersPPC64.R30)
- .add(PPC64Registers.GPR29, UnwindRegistersPPC64.R31)
+ .add(PPC64Registers.GPR31, UnwindRegistersPPC64.R31)
+ //Special Registers
+ .add(PPC64Registers.LR , UnwindRegistersPPC64.LR )
+ .add(PPC64Registers.NIP , UnwindRegistersPPC64.NIP)
+ //Floating Point Registers
+ .add(PPC64Registers.FPR0, UnwindRegistersPPC64.F0)
+ .add(PPC64Registers.FPR1, UnwindRegistersPPC64.F1)
+ .add(PPC64Registers.FPR2, UnwindRegistersPPC64.F2)
+ .add(PPC64Registers.FPR3, UnwindRegistersPPC64.F3)
+ .add(PPC64Registers.FPR4, UnwindRegistersPPC64.F4)
+ .add(PPC64Registers.FPR5, UnwindRegistersPPC64.F5)
+ .add(PPC64Registers.FPR6, UnwindRegistersPPC64.F6)
+ .add(PPC64Registers.FPR7, UnwindRegistersPPC64.F7)
+ .add(PPC64Registers.FPR8, UnwindRegistersPPC64.F8)
+ .add(PPC64Registers.FPR9, UnwindRegistersPPC64.F9)
+ .add(PPC64Registers.FPR10, UnwindRegistersPPC64.F10)
+ .add(PPC64Registers.FPR11, UnwindRegistersPPC64.F11)
+ .add(PPC64Registers.FPR12, UnwindRegistersPPC64.F12)
+ .add(PPC64Registers.FPR13, UnwindRegistersPPC64.F13)
+ .add(PPC64Registers.FPR14, UnwindRegistersPPC64.F14)
+ .add(PPC64Registers.FPR15, UnwindRegistersPPC64.F15)
+ .add(PPC64Registers.FPR16, UnwindRegistersPPC64.F16)
+ .add(PPC64Registers.FPR17, UnwindRegistersPPC64.F17)
+ .add(PPC64Registers.FPR18, UnwindRegistersPPC64.F18)
+ .add(PPC64Registers.FPR19, UnwindRegistersPPC64.F19)
+ .add(PPC64Registers.FPR20, UnwindRegistersPPC64.F20)
+ .add(PPC64Registers.FPR21, UnwindRegistersPPC64.F21)
+ .add(PPC64Registers.FPR22, UnwindRegistersPPC64.F22)
+ .add(PPC64Registers.FPR23, UnwindRegistersPPC64.F23)
+ .add(PPC64Registers.FPR24, UnwindRegistersPPC64.F24)
+ .add(PPC64Registers.FPR25, UnwindRegistersPPC64.F25)
+ .add(PPC64Registers.FPR26, UnwindRegistersPPC64.F26)
+ .add(PPC64Registers.FPR27, UnwindRegistersPPC64.F27)
+ .add(PPC64Registers.FPR28, UnwindRegistersPPC64.F28)
+ .add(PPC64Registers.FPR29, UnwindRegistersPPC64.F29)
+ .add(PPC64Registers.FPR30, UnwindRegistersPPC64.F30)
+ .add(PPC64Registers.FPR31, UnwindRegistersPPC64.F31)
;
private static final RegisterMap PPC32
@@ -195,7 +230,41 @@ public class LibunwindRegisterMapFactory {
.add(PPC32Registers.GPR28, UnwindRegistersPPC32.R28)
.add(PPC32Registers.GPR29, UnwindRegistersPPC32.R29)
.add(PPC32Registers.GPR30, UnwindRegistersPPC32.R30)
- .add(PPC32Registers.GPR29, UnwindRegistersPPC32.R31)
+ .add(PPC32Registers.GPR31, UnwindRegistersPPC32.R31)
+ .add(PPC32Registers.LR , UnwindRegistersPPC32.LR )
+ //Floating Point Registers
+ .add(PPC32Registers.FPR0, UnwindRegistersPPC32.F0)
+ .add(PPC32Registers.FPR1, UnwindRegistersPPC32.F1)
+ .add(PPC32Registers.FPR2, UnwindRegistersPPC32.F2)
+ .add(PPC32Registers.FPR3, UnwindRegistersPPC32.F3)
+ .add(PPC32Registers.FPR4, UnwindRegistersPPC32.F4)
+ .add(PPC32Registers.FPR5, UnwindRegistersPPC32.F5)
+ .add(PPC32Registers.FPR6, UnwindRegistersPPC32.F6)
+ .add(PPC32Registers.FPR7, UnwindRegistersPPC32.F7)
+ .add(PPC32Registers.FPR8, UnwindRegistersPPC32.F8)
+ .add(PPC32Registers.FPR9, UnwindRegistersPPC32.F9)
+ .add(PPC32Registers.FPR10, UnwindRegistersPPC32.F10)
+ .add(PPC32Registers.FPR11, UnwindRegistersPPC32.F11)
+ .add(PPC32Registers.FPR12, UnwindRegistersPPC32.F12)
+ .add(PPC32Registers.FPR13, UnwindRegistersPPC32.F13)
+ .add(PPC32Registers.FPR14, UnwindRegistersPPC32.F14)
+ .add(PPC32Registers.FPR15, UnwindRegistersPPC32.F15)
+ .add(PPC32Registers.FPR16, UnwindRegistersPPC32.F16)
+ .add(PPC32Registers.FPR17, UnwindRegistersPPC32.F17)
+ .add(PPC32Registers.FPR18, UnwindRegistersPPC32.F18)
+ .add(PPC32Registers.FPR19, UnwindRegistersPPC32.F19)
+ .add(PPC32Registers.FPR20, UnwindRegistersPPC32.F20)
+ .add(PPC32Registers.FPR21, UnwindRegistersPPC32.F21)
+ .add(PPC32Registers.FPR22, UnwindRegistersPPC32.F22)
+ .add(PPC32Registers.FPR23, UnwindRegistersPPC32.F23)
+ .add(PPC32Registers.FPR24, UnwindRegistersPPC32.F24)
+ .add(PPC32Registers.FPR25, UnwindRegistersPPC32.F25)
+ .add(PPC32Registers.FPR26, UnwindRegistersPPC32.F26)
+ .add(PPC32Registers.FPR27, UnwindRegistersPPC32.F27)
+ .add(PPC32Registers.FPR28, UnwindRegistersPPC32.F28)
+ .add(PPC32Registers.FPR29, UnwindRegistersPPC32.F29)
+ .add(PPC32Registers.FPR30, UnwindRegistersPPC32.F30)
+ .add(PPC32Registers.FPR31, UnwindRegistersPPC32.F31)
;
private static final ISAMap isaToMap
diff --git a/frysk-sys/lib/unwind/ChangeLog b/frysk-sys/lib/unwind/ChangeLog
index bf3bbed..f93b188 100644
--- a/frysk-sys/lib/unwind/ChangeLog
+++ b/frysk-sys/lib/unwind/ChangeLog
@@ -1,3 +1,12 @@
+2007-12-14 Jose Flavio Aguilar Paulino <joseflavio@gmail.com>
+
+ * GenRegEnum.awk: Add new Awk script to generate the registers
+ enum to be used for all archs.
+
+ * UnwindRegistersPPC32.shenum: Using the GenRegEnum.awk script.
+
+ * UnwindRegistersPPC64.shenum: Same as above.
+
2007-12-11 Andrew Cagney <cagney@redhat.com>
* cni/UnwindH.hxx (getRegister): Delete stray printf.
diff --git a/frysk-sys/lib/unwind/GenRegEnum.awk b/frysk-sys/lib/unwind/GenRegEnum.awk
new file mode 100644
index 0000000..fa6fcb6
--- /dev/null
+++ b/frysk-sys/lib/unwind/GenRegEnum.awk
@@ -0,0 +1,134 @@
+# This file is part of the program FRYSK.
+#
+# Copyright (C) 2006-2007 IBM
+#
+# Contributed by
+# Jose Flavio Aguilar Paulino <jflavio@br.ibm.com> <joseflavio@gmail.com>
+#
+# FRYSK is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# FRYSK is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with FRYSK; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+#
+# In addition, as a special exception, Red Hat, Inc. gives You the
+# additional right to link the code of FRYSK with code not covered
+# under the GNU General Public License ("Non-GPL Code") and to
+# distribute linked combinations including the two, subject to the
+# limitations in this paragraph. Non-GPL Code permitted under this
+# exception must only link to the code of FRYSK through those well
+# defined interfaces identified in the file named EXCEPTION found in
+# the source code files (the "Approved Interfaces"). The files of
+# Non-GPL Code may instantiate templates or use macros or inline
+# functions from the Approved Interfaces without causing the
+# resulting work to be covered by the GNU General Public
+# License. Only Red Hat, Inc. may make changes or additions to the
+# list of Approved Interfaces. You must obey the GNU General Public
+# License in all respects for all of the FRYSK code and other code
+# used in conjunction with FRYSK except the Non-GPL Code covered by
+# this exception. If you modify this file, you may extend this
+# exception to your version of the file, but you are not obligated to
+# do so. If you do not wish to provide this exception without
+# modification, you must delete this exception statement from your
+# version and license this file solely under the GPL without
+# exception.
+
+BEGIN {
+ if ( ARGC != 3 ) {
+ print "This script ('gen_reg_list.awk') requires 2 command line args, not " (ARGC-1);
+ print "The first the arch prefix, ex: PPC64 or X86;";
+ print "The second the registers unwind prefix, ex: UNW.";
+ print "To be used to compose the registers DEFINE such as: PPC32_UNW_XXXXX";
+ exit 1;
+ }
+ arch_prefix = ARGV[1];
+ unwind_reg_prefix = ARGV[2];
+ #cleaning the argv (to avoid it to be read as files by awk)
+ ARGV[1] = "";
+ ARGV[2] = "";
+ reg_prefix = unwind_reg_prefix "_" arch_prefix "_";
+ reg_num = 0;
+ error_parsing = 0;
+ all_reg_num_list = "";
+}
+
+#Main program block
+#for each line input
+{
+ #Only lines started with UNW_PPC64 will be processed
+ line_begin_regexp = "^[ \\t]*" reg_prefix;
+ if($0 ~ line_begin_regexp) {
+
+ valid_line = 0;
+ second_field_start = "";
+
+ if(NF > 1) {
+ second_field_start = substr($2, 1);
+ if(second_field_start == "=") {
+ if($3 != "") {
+ reg_equals_start = substr($3, 4);
+ if(reg_equals_start != "UNW_") {
+ valid_line = 1;
+ gsub(",","",$3);
+ reg_num = $3;
+ }
+ else {
+ #for this kind of line:
+ #UNW_TDEP_LAST_REG = UNW_PPC64_NIP,
+ #thats not a real valid line for creating a Java Reg
+ valid_line = 0;
+ }
+ }
+ else {
+ error_parsing = 1;
+ }
+ }
+ else
+ if( (second_field_start == "//") ||
+ (second_field_start == "/*") ) {
+ valid_line = 1;
+ }
+ else {
+ error_parsing = 1;
+ }
+ }
+ else {
+ valid_line = 1;
+ }
+
+ if(error_parsing == 0) {
+ if(valid_line == 1) {
+
+ #Check if the current register number
+ #has been assigned to other registers
+ regnum_exp = "reg" reg_num;
+ if(all_reg_num_list ~ regnum_exp) {
+ print "ERROR, THERE ARE TWO REGISTERS WITH THE SAME NUMBER: " reg_num " (" $1 ")";
+ error_parsing = 1;
+ }
+ else {
+ gsub(",","",$1)
+ gsub(reg_prefix, "", $1)
+ printf "%s %s\n", $1, reg_num;
+ #Put the printed REG number in a string (a list)
+ all_reg_num_list = all_reg_num_list " reg" reg_num;
+ reg_num++;
+ }
+ }
+ }
+ } #UNW_PPC64 lines
+ }
+
+ END {
+ if(error_parsing == 1) {
+ print "ERROR, COULD NOT CONVERT libunwind HEADER to java\n";
+ exit 1;
+ }
+ }
diff --git a/frysk-sys/lib/unwind/UnwindRegistersPPC32.shenum b/frysk-sys/lib/unwind/UnwindRegistersPPC32.shenum
index 2f9997b..785bd65 100644
--- a/frysk-sys/lib/unwind/UnwindRegistersPPC32.shenum
+++ b/frysk-sys/lib/unwind/UnwindRegistersPPC32.shenum
@@ -41,11 +41,5 @@
# version and license this file solely under the GPL without
# exception.
-# Generate a mkenum.sh table for the UNW_PPC32 encodings we are interested in.
-cat $(dirname $0)/../../../frysk-imports/libunwind/include/libunwind-ppc32.h | awk '
- /UNW_PPC32/ {
- gsub(",","",$1)
- gsub("UNW_PPC32_", "", $1)
- printf "%s\n", $1
- }' | awk '{printf "%s %s\n", $1, NR -1 }
-' 2>&1
+# Generate a mkenum.sh table for the UNW_PPC64 encodings we are interested in.
+cat $(dirname $0)/../../../frysk-imports/libunwind/include/libunwind-ppc32.h | awk -f $(dirname $0)/../../../frysk-sys/lib/unwind/GenRegEnum.awk PPC32 UNW 2>&1
diff --git a/frysk-sys/lib/unwind/UnwindRegistersPPC64.shenum b/frysk-sys/lib/unwind/UnwindRegistersPPC64.shenum
index 51c515f..b370bb7 100644
--- a/frysk-sys/lib/unwind/UnwindRegistersPPC64.shenum
+++ b/frysk-sys/lib/unwind/UnwindRegistersPPC64.shenum
@@ -42,10 +42,4 @@
# exception.
# Generate a mkenum.sh table for the UNW_PPC64 encodings we are interested in.
-cat $(dirname $0)/../../../frysk-imports/libunwind/include/libunwind-ppc64.h | awk '
- /UNW_PPC64/ {
- gsub(",","",$1)
- gsub("UNW_PPC64_", "", $1)
- printf "%s\n", $1
- }' | awk '{printf "%s %s\n", $1, NR -1 }
-' 2>&1
+cat $(dirname $0)/../../../frysk-imports/libunwind/include/libunwind-ppc64.h | awk -f $(dirname $0)/../../../frysk-sys/lib/unwind/GenRegEnum.awk PPC64 UNW 2>&1
hooks/post-receive
--
frysk system monitor/debugger
reply other threads:[~2007-12-14 13:55 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20071214135532.14119.qmail@sourceware.org \
--to=jflavio@sourceware.org \
--cc=frysk-cvs@sourceware.org \
--cc=frysk@sourceware.org \
/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).