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).