mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-28 06:20:30 +00:00
2010-03-23 Rafael Ávila de Espíndola <respindola@mozilla.com>
* plugin.cc (get_view): New. (Plugin::load): Pass get_view to the plugin. (Plugin_manager::get_view): New.
This commit is contained in:
parent
55406e102f
commit
9c793f143c
@ -1,3 +1,9 @@
|
||||
2010-03-23 Rafael Ávila de Espíndola <respindola@mozilla.com>
|
||||
|
||||
* plugin.cc (get_view): New.
|
||||
(Plugin::load): Pass get_view to the plugin.
|
||||
(Plugin_manager::get_view): New.
|
||||
|
||||
2011-03-21 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* testsuite/final_layout.sh: Rewrite to not use dc.
|
||||
|
@ -68,6 +68,9 @@ add_symbols(void *handle, int nsyms, const struct ld_plugin_symbol *syms);
|
||||
static enum ld_plugin_status
|
||||
get_input_file(const void *handle, struct ld_plugin_input_file *file);
|
||||
|
||||
static enum ld_plugin_status
|
||||
get_view(const void *handle, const void **viewp);
|
||||
|
||||
static enum ld_plugin_status
|
||||
release_input_file(const void *handle);
|
||||
|
||||
@ -130,7 +133,7 @@ Plugin::load()
|
||||
sscanf(ver, "%d.%d", &major, &minor);
|
||||
|
||||
// Allocate and populate a transfer vector.
|
||||
const int tv_fixed_size = 16;
|
||||
const int tv_fixed_size = 17;
|
||||
int tv_size = this->args_.size() + tv_fixed_size;
|
||||
ld_plugin_tv* tv = new ld_plugin_tv[tv_size];
|
||||
|
||||
@ -188,6 +191,10 @@ Plugin::load()
|
||||
tv[i].tv_tag = LDPT_GET_INPUT_FILE;
|
||||
tv[i].tv_u.tv_get_input_file = get_input_file;
|
||||
|
||||
++i;
|
||||
tv[i].tv_tag = LDPT_GET_VIEW;
|
||||
tv[i].tv_u.tv_get_view = get_view;
|
||||
|
||||
++i;
|
||||
tv[i].tv_tag = LDPT_RELEASE_INPUT_FILE;
|
||||
tv[i].tv_u.tv_release_input_file = release_input_file;
|
||||
@ -635,6 +642,35 @@ Plugin_manager::release_input_file(unsigned int handle)
|
||||
return LDPS_OK;
|
||||
}
|
||||
|
||||
ld_plugin_status
|
||||
Plugin_manager::get_view(unsigned int handle, const void **viewp)
|
||||
{
|
||||
off_t offset;
|
||||
size_t filesize;
|
||||
Input_file *input_file;
|
||||
if (this->objects_.size() == handle)
|
||||
{
|
||||
// We are being called from the claim_file hook.
|
||||
const struct ld_plugin_input_file &f = this->plugin_input_file_;
|
||||
offset = f.offset;
|
||||
filesize = f.filesize;
|
||||
input_file = this->input_file_;
|
||||
}
|
||||
else
|
||||
{
|
||||
// An already claimed file.
|
||||
Pluginobj* obj = this->object(handle);
|
||||
if (obj == NULL)
|
||||
return LDPS_BAD_HANDLE;
|
||||
offset = obj->offset();
|
||||
filesize = obj->filesize();
|
||||
input_file = obj->input_file();
|
||||
}
|
||||
*viewp = (void*) input_file->file().get_view(offset, 0, filesize, false,
|
||||
false);
|
||||
return LDPS_OK;
|
||||
}
|
||||
|
||||
// Add a new library path.
|
||||
|
||||
ld_plugin_status
|
||||
@ -1247,6 +1283,15 @@ release_input_file(const void* handle)
|
||||
return parameters->options().plugins()->release_input_file(obj_index);
|
||||
}
|
||||
|
||||
static enum ld_plugin_status
|
||||
get_view(const void *handle, const void **viewp)
|
||||
{
|
||||
gold_assert(parameters->options().has_plugins());
|
||||
unsigned int obj_index =
|
||||
static_cast<unsigned int>(reinterpret_cast<intptr_t>(handle));
|
||||
return parameters->options().plugins()->get_view(obj_index, viewp);
|
||||
}
|
||||
|
||||
// Get the symbol resolution info for a plugin-claimed input file.
|
||||
|
||||
static enum ld_plugin_status
|
||||
|
@ -245,6 +245,9 @@ class Plugin_manager
|
||||
ld_plugin_status
|
||||
get_input_file(unsigned int handle, struct ld_plugin_input_file* file);
|
||||
|
||||
ld_plugin_status
|
||||
get_view(unsigned int handle, const void **viewp);
|
||||
|
||||
// Release an input file.
|
||||
ld_plugin_status
|
||||
release_input_file(unsigned int handle);
|
||||
|
Loading…
Reference in New Issue
Block a user