[BusyBox] insmod discussion

Larry Doolittle ldoolitt at recycle.lbl.gov
Wed Apr 25 16:11:17 UTC 2001


--- /home/ldoolitt/cvs/busybox/insmod.c	Tue Apr 24 15:30:09 2001
+++ insmod.c	Wed Apr 25 09:09:59 2001
@@ -1807,7 +1807,6 @@
 
 	while (k->name[0] == '#' && k->name[1]) {
 		struct old_kernel_sym *k2;
-		struct new_module_symbol *s;
 
 		/* Find out how many symbols this module has.  */
 		for (k2 = k + 1; k2->name[0] != '#'; ++k2)
@@ -3022,6 +3021,12 @@
 	for (i = 0; i < shnum; ++i) {
 		struct obj_section *sec = f->sections[i];
 
+		/* .modinfo should be contents only but gcc has no attribute for that.
+		 * The kernel may have marked .modinfo as ALLOC, ignore this bit.
+		 */
+		if (strcmp(sec->name, ".modinfo") == 0)
+			sec->header.sh_flags &= ~SHF_ALLOC;
+
 		if (sec->header.sh_flags & SHF_ALLOC)
 			obj_insert_section_load_order(f, sec);
 
@@ -3045,22 +3050,20 @@
 
 				/* Allocate space for a table of local symbols.  */
 				j = f->local_symtab_size = sec->header.sh_info;
-				f->local_symtab = xmalloc(j *=
-										  sizeof(struct obj_symbol *));
-				memset(f->local_symtab, 0, j);
+				f->local_symtab = xcalloc(j, sizeof(struct obj_symbol *));
 
 				/* Insert all symbols into the hash table.  */
 				for (j = 1, ++sym; j < nsym; ++j, ++sym) {
 					const char *name;
 					if (sym->st_name)
 						name = strtab + sym->st_name;
-		else
+					else
 						name = f->sections[sym->st_shndx]->name;
 
 					obj_add_symbol(f, name, j, sym->st_info, sym->st_shndx,
 								   sym->st_value, sym->st_size);
-		}
-	}
+				}
+			}
 			break;
 
 		case SHT_RELM:
@@ -3071,6 +3074,10 @@
 				return NULL;
 			}
 			break;
+			/* XXX  Relocation code from modutils-2.3.19 is not here.
+			 * Why?  That's about 20 lines of code from obj/obj_load.c,
+			 * which gets done in a second pass through the sections.
+			 * This BusyBox insmod does similar work in obj_relocate(). */
 		}
 	}
 





More information about the busybox mailing list