* ISA checks for factories @ 2007-10-03 8:36 Phil Muldoon 2007-10-03 19:43 ` Andrew Cagney 0 siblings, 1 reply; 4+ messages in thread From: Phil Muldoon @ 2007-10-03 8:36 UTC (permalink / raw) To: Frysk Hackers I've written several factories to decide what class to instantiate depending on the ISA. These usually end up as hacks, probably because I do not understand something quite right, or there is no real decent "What ISA does this task/proc belong" discovery. I can instance check an ISA with: Isa isa = proc.getIsa(); if (isa instanceof IsaIA32) .... and so on, but that will not work for 32 on 64 ISAs. For example, on a 32 bit process on a 64 bit system, the instance returned would be LinuxIa32On64 And those cannot be instance checked as they are package private, while the "native" ISAs are public. So what is the solution here? Open the scope of the xxOnxx ISAs? I get the feeling that instanceof checks tell me that we need to work on a better solution anyway. Reverting to reflection screams hack to me. Regards Phil ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: ISA checks for factories 2007-10-03 8:36 ISA checks for factories Phil Muldoon @ 2007-10-03 19:43 ` Andrew Cagney 2007-10-09 7:53 ` Phil Muldoon 0 siblings, 1 reply; 4+ messages in thread From: Andrew Cagney @ 2007-10-03 19:43 UTC (permalink / raw) To: Phil Muldoon; +Cc: Frysk Hackers Phil, unfortunate timing, we crossed e-mails during the night, Phil Muldoon wrote: > I've written several factories to decide what class to instantiate > depending on the ISA. These usually end up as hacks, probably because > I do not understand something quite right, or there is no real decent > "What ISA does this task/proc belong" discovery. > > I can instance check an ISA with: > > Isa isa = proc.getIsa(); There is now also: ISA isa = task.getISA() which returns a frysk.isa.ISA, which looks smells and behaves like an ENUM. This new ISA just the following attributes: - family (i386, x8664, PPC) - word size (4, 8) - byte order (little, big) leading to the combinations: IA32, X8664, PPC32LE, PPC32BE, PPC64LE, PPC64BE. > if (isa instanceof IsaIA32) .... It can then be used as either: if (isa == ISA.IA32) .. else if (isa = ISA.X8664) .. or better?: ISAMap map = new ISAMap("why am I here") .put(ISA.IA32, new My(IA32)) .put(ISA.X8664, new My(X8664)) ; ... // Throws a RuntimeException if ISA missing My o = (My) map.get(task.getISA); which could easily be wrapped up in a factory. Andrew > > and so on, but that will not work for 32 on 64 ISAs. For example, on a > 32 bit process on a 64 bit system, the instance returned would be > > LinuxIa32On64 > > And those cannot be instance checked as they are package private, > while the "native" ISAs are public. > > So what is the solution here? Open the scope of the xxOnxx ISAs? I get > the feeling that instanceof checks tell me that we need to work on a > better solution anyway. Reverting to reflection screams hack to me. > > Regards > > Phil ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: ISA checks for factories 2007-10-03 19:43 ` Andrew Cagney @ 2007-10-09 7:53 ` Phil Muldoon 2007-10-09 9:16 ` Phil Muldoon 0 siblings, 1 reply; 4+ messages in thread From: Phil Muldoon @ 2007-10-09 7:53 UTC (permalink / raw) To: Andrew Cagney; +Cc: Frysk Hackers Andrew Cagney wrote: > Phil, > > There is now also: > ISA isa = task.getISA() > which returns a frysk.isa.ISA, which looks smells and behaves like an > ENUM. This new ISA just the following attributes: > - family (i386, x8664, PPC) > - word size (4, 8) > - byte order (little, big) > leading to the combinations: IA32, X8664, PPC32LE, PPC32BE, PPC64LE, > PPC64BE. > Ok that makes sense, I got that from the original email, but ... > or better?: > > ISAMap map = new ISAMap("why am I here") > .put(ISA.IA32, new My(IA32)) > .put(ISA.X8664, new My(X8664)) > ; > ... > // Throws a RuntimeException if ISA missing > My o = (My) map.get(task.getISA); > > I'm still a little fuzzy on how it can be used to detected IA 32 on 64, or PPC32 On 64? Regards Phil ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: ISA checks for factories 2007-10-09 7:53 ` Phil Muldoon @ 2007-10-09 9:16 ` Phil Muldoon 0 siblings, 0 replies; 4+ messages in thread From: Phil Muldoon @ 2007-10-09 9:16 UTC (permalink / raw) To: Andrew Cagney; +Cc: Frysk Hackers Phil Muldoon wrote: > I'm still a little fuzzy on how it can be used to detected IA 32 on > 64, or PPC32 On 64? > Answering my own question. I looked at the code, and it appears that Task.getISA() will return the contextually correct ISA for the situation in hand. So for a 32bit process on x8664 it will return the 32 bit ISA and so on. Previously one had to instance check the ISA as a 32On64 ISA was returned explicitly. I'll rewrite the LinuxCorefileFactory to use this new method now. Regards Phil ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2007-10-09 9:16 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2007-10-03 8:36 ISA checks for factories Phil Muldoon 2007-10-03 19:43 ` Andrew Cagney 2007-10-09 7:53 ` Phil Muldoon 2007-10-09 9:16 ` Phil Muldoon
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).