From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21317 invoked by alias); 17 Jan 2008 17:34:26 -0000 Received: (qmail 21292 invoked by uid 9514); 17 Jan 2008 17:34:26 -0000 Date: Thu, 17 Jan 2008 17:34:00 -0000 Message-ID: <20080117173426.21276.qmail@sourceware.org> From: pmuldoon@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: 2008-01-17 Phil Muldoon X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 60492e907b8182e4bc2a9f27d467ef79a14dfb30 X-Git-Newrev: 6ec6bc5eb0b14e12428b9effdfec76a7b9179536 Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q1/txt/msg00076.txt.bz2 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 Date: Thu Jan 17 17:34:13 2008 +0000 2008-01-17 Phil Muldoon * 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 + + * 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 * 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 /proc/PID/auxv 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