Do metadata relocation fixup on all loaded modules, not just the kernel.

Approved by:	cognet (mentor)
This commit is contained in:
Ian Lepore 2013-01-30 23:49:36 +00:00
parent 5dfc0f6c53
commit 33f9e1bd94
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=246135

View File

@ -369,12 +369,15 @@ md_load(char *args, vm_offset_t *modulep)
/* Convert addresses to the final VA */
*modulep -= __elfN(relocation_offset);
for (i = 0; i < sizeof mdt / sizeof mdt[0]; i++) {
md = file_findmetadata(kfp, mdt[i]);
if (md) {
bcopy(md->md_data, &vaddr, sizeof vaddr);
vaddr -= __elfN(relocation_offset);
bcopy(&vaddr, md->md_data, sizeof vaddr);
/* Do relocation fixup on metadata of each module. */
for (xp = file_findfile(NULL, NULL); xp != NULL; xp = xp->f_next) {
for (i = 0; i < sizeof mdt / sizeof mdt[0]; i++) {
md = file_findmetadata(xp, mdt[i]);
if (md) {
bcopy(md->md_data, &vaddr, sizeof vaddr);
vaddr -= __elfN(relocation_offset);
bcopy(&vaddr, md->md_data, sizeof vaddr);
}
}
}