This is the mail archive of the frysk-cvs@sources.redhat.com mailing list for the frysk project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[SCM] master: 2008-01-17 Phil Muldoon <pmuldoon@redhat.com>


The branch, master has been updated
       via  6ec6bc5eb0b14e12428b9effdfec76a7b9179536 (commit)
      from  60492e907b8182e4bc2a9f27d467ef79a14dfb30 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 6ec6bc5eb0b14e12428b9effdfec76a7b9179536
Author: Phil Muldoon <pmuldoon@redhat.com>
Date:   Thu Jan 17 17:34:13 2008 +0000

    2008-01-17  Phil Muldoon  <pmuldoon@redhat.com>
    
    	* LinuxCoreProc.java (constructEnhandedMetaData): Pass wordSize
    	to SOLibMapBuilder.
    	* LinuxExeProc.java (buildMetaData): Ditto.
    	* SOLibMapBuilder.jav (construct): Account for 32 bit address
    	overlapping on ld_addr relocation.

-----------------------------------------------------------------------

Summary of changes:
 frysk-core/frysk/proc/dead/ChangeLog            |    9 +++++++++
 frysk-core/frysk/proc/dead/LinuxCoreProc.java   |    4 ++--
 frysk-core/frysk/proc/dead/LinuxExeProc.java    |    2 +-
 frysk-core/frysk/proc/dead/SOLibMapBuilder.java |   15 +++++++++++++--
 4 files changed, 25 insertions(+), 5 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/proc/dead/ChangeLog b/frysk-core/frysk/proc/dead/ChangeLog
index c152771..081afce 100644
--- a/frysk-core/frysk/proc/dead/ChangeLog
+++ b/frysk-core/frysk/proc/dead/ChangeLog
@@ -1,3 +1,12 @@
+2008-01-17  Phil Muldoon  <pmuldoon@redhat.com>
+
+	* LinuxCoreProc.java (constructEnhandedMetaData): Pass wordSize
+	to SOLibMapBuilder.
+	* LinuxExeProc.java (buildMetaData): Ditto.
+	* SOLibMapBuilder.jav (construct): Account for 32 bit address
+	overlapping on ld_addr relocation.
+	
+
 2008-01-16  Andrew Cagney  <cagney@redhat.com>
 
 	* DeadTask.java (getRegisterBanks()): New; add RegisterBanks to
diff --git a/frysk-core/frysk/proc/dead/LinuxCoreProc.java b/frysk-core/frysk/proc/dead/LinuxCoreProc.java
index 840aa11..bfd753c 100644
--- a/frysk-core/frysk/proc/dead/LinuxCoreProc.java
+++ b/frysk-core/frysk/proc/dead/LinuxCoreProc.java
@@ -420,14 +420,14 @@ public class LinuxCoreProc extends DeadProc {
 	while (mapsIterator.hasNext()) {
 	    Linkmap singleLinkMap = (Linkmap) mapsIterator.next();
 	    if ((!singleLinkMap.name.equals("")) && (!singleLinkMap.name.equals("[vdso]")))
-		SOMaps.construct(new File(singleLinkMap.name),singleLinkMap.l_addr);
+		SOMaps.construct(new File(singleLinkMap.name),singleLinkMap.l_addr,this.getMainTask().getISA().wordSize());
 	    if (singleLinkMap.name.equals("[vdso]"))
 		SOMaps.buildMap(singleLinkMap.l_addr,0,true,true,true,0,singleLinkMap.name,0x1000);
 	}
 
 
 	// Add in case for executables maps.
-	SOMaps.construct(this.exefileBackEnd,0);
+	SOMaps.construct(this.exefileBackEnd,0,this.getMainTask().getISA().wordSize());
 
     
 	// Reconcile maps
diff --git a/frysk-core/frysk/proc/dead/LinuxExeProc.java b/frysk-core/frysk/proc/dead/LinuxExeProc.java
index 1b00342..89c38ee 100644
--- a/frysk-core/frysk/proc/dead/LinuxExeProc.java
+++ b/frysk-core/frysk/proc/dead/LinuxExeProc.java
@@ -124,7 +124,7 @@ public class LinuxExeProc extends DeadProc {
 	
 	BuildExeMaps SOMaps = new BuildExeMaps();
 	// Add in case for executables maps.
-	SOMaps.construct(this.host.exeFile, 0);
+	SOMaps.construct(this.host.exeFile, 0, this.getMainTask().getISA().wordSize());
     }
 
 }
diff --git a/frysk-core/frysk/proc/dead/SOLibMapBuilder.java b/frysk-core/frysk/proc/dead/SOLibMapBuilder.java
index 2543230..930e12b 100644
--- a/frysk-core/frysk/proc/dead/SOLibMapBuilder.java
+++ b/frysk-core/frysk/proc/dead/SOLibMapBuilder.java
@@ -65,7 +65,7 @@ public abstract class SOLibMapBuilder
    * Scan the maps file found in <tt>/proc/PID/auxv</tt> building up
    * a list of memory maps.  Return true if the scan was successful.
    */
-  public final void construct (File clientSolib, long base_addr)
+  public final void construct (File clientSolib, long base_addr, int wordSize)
   {
 
     Elf solib = openElf(clientSolib);
@@ -82,9 +82,20 @@ public abstract class SOLibMapBuilder
 		boolean read = (pHeader.flags &  ElfPHeader.PHFLAG_READABLE) > 0 ? true:false;
 		boolean write =  (pHeader.flags & ElfPHeader.PHFLAG_WRITABLE) > 0 ? true:false;
 		boolean execute = (pHeader.flags & ElfPHeader.PHFLAG_EXECUTABLE) > 0 ? true:false;
-	    
+		
 		long mapBegin = base_addr + (pHeader.vaddr &~ (pHeader.align-1));
 		long mapEnd = base_addr + ((pHeader.vaddr + pHeader.memsz) + pHeader.align -1) &~ (pHeader.align-1);
+
+		// On 32 bit systems, if a segment has been relocated ie base_addr > 0 and base_addr + vaddr is
+		// more than 0xffffffff then the address overlaps to 0++. As we are using a long, so it can store
+		// 64 bit addresses on 64 bit systems, check wordsize == 4 and if so, limit size of address space
+		//  to 32 bits.
+		if (wordSize == 4)
+		{
+		    mapBegin &= 0x00000000ffffffffl;
+		    mapEnd &= 0x00000000ffffffffl;
+		}
+
 		long aOffset = (pHeader.offset &- pHeader.align);
 		buildMap(mapBegin, mapEnd, read, write, execute, 
 			aOffset, clientSolib.getPath(),pHeader.align);


hooks/post-receive
--
frysk system monitor/debugger


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]