summaryrefslogtreecommitdiffstats
path: root/sys/boot/uboot/common
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2013-01-30 23:49:36 +0000
committerian <ian@FreeBSD.org>2013-01-30 23:49:36 +0000
commit2d2ebd5bc052ccae68bd5bc354de7f5946ee4b92 (patch)
tree4041ab1697381487bc0ef2acef2c3139480f0da0 /sys/boot/uboot/common
parent85fcf6286dd7a0721e5b300d232483d5bb13b1a8 (diff)
downloadFreeBSD-src-2d2ebd5bc052ccae68bd5bc354de7f5946ee4b92.zip
FreeBSD-src-2d2ebd5bc052ccae68bd5bc354de7f5946ee4b92.tar.gz
Do metadata relocation fixup on all loaded modules, not just the kernel.
Approved by: cognet (mentor)
Diffstat (limited to 'sys/boot/uboot/common')
-rw-r--r--sys/boot/uboot/common/metadata.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/sys/boot/uboot/common/metadata.c b/sys/boot/uboot/common/metadata.c
index 74497a9..bbc1893 100644
--- a/sys/boot/uboot/common/metadata.c
+++ b/sys/boot/uboot/common/metadata.c
@@ -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);
+ }
}
}
OpenPOWER on IntegriCloud