Date: Tue, 08 Mar 2011 08:47:53 -0800
From: Michael Eager <eager@eagerm.com>
Tom Tromey wrote:
"Michael" == Michael Eager <eager@eagerm.com> writes:
Michael> I'm working with a target which needs to translate
Michael> a virtual memory addresses to a physical address
Michael> before accessing the target's memory or the core file.
Michael> Core_ops is defined in corelow.c, and there doesn't appear
Michael> to be an obvious hook for the target code to modify it to
Michael> add the translation routine.
Michael> Any suggestions on the best way to add a hook or how to specify
Michael> a target routine to do address translations for core files?
I am not an expert in this area, but couldn't you make a new
arch_stratum target that does the translation?
With this approach maybe you don't even need a hook -- just do the
translation and call the target beneath.
Interesting idea. I didn't think of adding a stratum for translation.
I took a clue from the way that sol-thread.c prevents corelow.c
from calling add_target to install core_ops. I added the following
to corelow.c:
CORE_ADDR (*target_translate_address) (struct target_ops *, CORE_ADDR addr);
and in init_core_ops():
core_ops.to_translate_address = target_translate_address;
The target code contains a definition for target_translate_address
which is initialized to point to the translation routine. For other
targets, this will be zero.
It's inelegant, what can I say, but functional.