aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/kernel/module.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ia64/kernel/module.c')
-rw-r--r--arch/ia64/kernel/module.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/arch/ia64/kernel/module.c b/arch/ia64/kernel/module.c
index aaa7d901521f..34fe4259a144 100644
--- a/arch/ia64/kernel/module.c
+++ b/arch/ia64/kernel/module.c
@@ -446,6 +446,14 @@ module_frob_arch_sections (Elf_Ehdr *ehdr, Elf_Shdr *sechdrs, char *secstrings,
446 mod->arch.opd = s; 446 mod->arch.opd = s;
447 else if (strcmp(".IA_64.unwind", secstrings + s->sh_name) == 0) 447 else if (strcmp(".IA_64.unwind", secstrings + s->sh_name) == 0)
448 mod->arch.unwind = s; 448 mod->arch.unwind = s;
449#ifdef CONFIG_PARAVIRT
450 else if (strcmp(".paravirt_bundles",
451 secstrings + s->sh_name) == 0)
452 mod->arch.paravirt_bundles = s;
453 else if (strcmp(".paravirt_insts",
454 secstrings + s->sh_name) == 0)
455 mod->arch.paravirt_insts = s;
456#endif
449 457
450 if (!mod->arch.core_plt || !mod->arch.init_plt || !mod->arch.got || !mod->arch.opd) { 458 if (!mod->arch.core_plt || !mod->arch.init_plt || !mod->arch.got || !mod->arch.opd) {
451 printk(KERN_ERR "%s: sections missing\n", mod->name); 459 printk(KERN_ERR "%s: sections missing\n", mod->name);
@@ -921,6 +929,30 @@ module_finalize (const Elf_Ehdr *hdr, const Elf_Shdr *sechdrs, struct module *mo
921 DEBUGP("%s: init: entry=%p\n", __func__, mod->init); 929 DEBUGP("%s: init: entry=%p\n", __func__, mod->init);
922 if (mod->arch.unwind) 930 if (mod->arch.unwind)
923 register_unwind_table(mod); 931 register_unwind_table(mod);
932#ifdef CONFIG_PARAVIRT
933 if (mod->arch.paravirt_bundles) {
934 struct paravirt_patch_site_bundle *start =
935 (struct paravirt_patch_site_bundle *)
936 mod->arch.paravirt_bundles->sh_addr;
937 struct paravirt_patch_site_bundle *end =
938 (struct paravirt_patch_site_bundle *)
939 (mod->arch.paravirt_bundles->sh_addr +
940 mod->arch.paravirt_bundles->sh_size);
941
942 paravirt_patch_apply_bundle(start, end);
943 }
944 if (mod->arch.paravirt_insts) {
945 struct paravirt_patch_site_inst *start =
946 (struct paravirt_patch_site_inst *)
947 mod->arch.paravirt_insts->sh_addr;
948 struct paravirt_patch_site_inst *end =
949 (struct paravirt_patch_site_inst *)
950 (mod->arch.paravirt_insts->sh_addr +
951 mod->arch.paravirt_insts->sh_size);
952
953 paravirt_patch_apply_inst(start, end);
954 }
955#endif
924 return 0; 956 return 0;
925} 957}
926 958