This is the mail archive of the frysk@sourceware.org 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]

Re: Corefile -arch 32 test failures with breakpoint and stacktrace tests


Mark Wielaard wrote:
2007-10-08 Mark Wielaard <mwielaard@redhat.com>
        * TestLinuxCore.java (Symbol): New static helper class.
        (getFunctionEntryAddress): Use Dwfl directly instead of
        constructing Elf and Dwarf objects directly.


This much code being wired into a test-case scares me. Would a better place for this be frysk.symtab.SymbolFactory; with a test case?



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

Index: frysk-core/frysk/proc/dead/ChangeLog
===================================================================
RCS file: /cvs/frysk/frysk-core/frysk/proc/dead/ChangeLog,v
retrieving revision 1.32
diff -u -r1.32 ChangeLog
--- frysk-core/frysk/proc/dead/ChangeLog 2 Oct 2007 22:31:50 -0000 1.32
+++ frysk-core/frysk/proc/dead/ChangeLog 8 Oct 2007 10:44:52 -0000
@@ -1,3 +1,9 @@
+2007-10-08 Mark Wielaard <mwielaard@redhat.com>
+
+ * TestLinuxCore.java (Symbol): New static helper class.
+ (getFunctionEntryAddress): Use Dwfl directly instead of
+ constructing Elf and Dwarf objects directly.
+
2007-10-02 Andrew Cagney <cagney@redhat.com>
* LinuxProc.java (sendrecISA()): Add.
Index: frysk-core/frysk/proc/dead/TestLinuxCore.java
===================================================================
RCS file: /cvs/frysk/frysk-core/frysk/proc/dead/TestLinuxCore.java,v
retrieving revision 1.16
diff -u -r1.16 TestLinuxCore.java
--- frysk-core/frysk/proc/dead/TestLinuxCore.java 10 Aug 2007 18:54:34 -0000 1.16
+++ frysk-core/frysk/proc/dead/TestLinuxCore.java 8 Oct 2007 10:44:52 -0000
@@ -45,7 +45,6 @@
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
-import java.util.ArrayList;
import frysk.proc.Action;
import frysk.proc.Isa;
@@ -67,6 +66,7 @@
import frysk.testbed.LegacyOffspring;
import lib.dwfl.*;
+import frysk.dwfl.*;
public class TestLinuxCore
extends TestLib
@@ -387,22 +387,66 @@
assertEquals(origb, coreb);
}
+
+ // Helper class since there there isn't a get symbol method in Dwfl,
+ // so we need to wrap it all in a builder pattern.
+ static class Symbol implements SymbolBuilder
+ {
+ private String name;
+ private long address;
+
+ private boolean found;
+
+ private Symbol()
+ {
+ // properties get set in public static get() method.
+ }
+
+ static Symbol get(Dwfl dwfl, String name)
+ {
+ Symbol sym = new Symbol();
+ sym.name = name;
+ DwflModule[] modules = dwfl.getModules();
+ for (int i = 0; i < modules.length && ! sym.found; i++)
+ modules[i].getSymbolByName(name, sym);
+
+ if (sym.found)
+ return sym;
+ else
+ return null;
+ }
+
+ String getName()
+ {
+ return name;
+ }
+
+ long getAddress()
+ {
+ return address;
+ }
+
+ public void symbol(String name, long value, long size,
+ int type, int bind, int visibility)
+ {
+ if (name.equals(this.name))
+ {
+ this.address = value;
+ this.found = true;
+ }
+ }
+ }
+
/**
- * Returns the address of the requested function through query the
- * Proc Elf and DwarfDie. Asserts that the function has only 1
- * entry point.
+ * Returns the address of the requested function through query Dwfl
+ * of the main Task of the given Proc.
*/
private static long getFunctionEntryAddress(Proc proc, String func)
- throws ElfException
{
- Elf elf = new Elf(proc.getExe(), ElfCommand.ELF_C_READ);
- Dwarf dwarf = new Dwarf(elf, DwarfCommand.READ, null);
- DwarfDie die = DwarfDie.getDecl(dwarf, func);
- ArrayList entryAddrs = die.getEntryBreakpoints();
- - // We really expect just one entry point.
- assertEquals(entryAddrs.size(), 1);
- return ((Long) entryAddrs.get(0)).longValue();
+ Task task = proc.getMainTask();
+ Dwfl dwfl = DwflCache.getDwfl(task);
+ Symbol sym = Symbol.get(dwfl, func);
+ return sym.getAddress();
}
/**


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