Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 2 Apr 2004 09:45:58 -0800 (PST)
From:      Peter Wemm <peter@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 50199 for review
Message-ID:  <200404021745.i32Hjwre055582@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=50199

Change 50199 by peter@peter_hammer on 2004/04/02 09:45:28

	put the printf's on a diet

Affected files ...

.. //depot/projects/hammer/sys/amd64/amd64/elf_machdep.c#18 edit
.. //depot/projects/hammer/sys/kern/link_elf_obj.c#25 edit

Differences ...

==== //depot/projects/hammer/sys/amd64/amd64/elf_machdep.c#18 (text+ko) ====

@@ -106,7 +106,7 @@
 static int
 elf_reloc_internal(linker_file_t lf, Elf_Addr relocbase, const void *data, int type, int local, elf_lookup_fn lu)
 {
-	Elf64_Addr *where;
+	Elf64_Addr *where, val;
 	Elf32_Addr *where32, val32;
 	Elf_Addr addr;
 	Elf_Addr addend;
@@ -114,7 +114,6 @@
 	const Elf_Rel *rel;
 	const Elf_Rela *rela;
 
-printf("elf_reloc_internal: relocbase 0x%lx, data %p, local %d\n", relocbase, data, local);
 	switch (type) {
 	case ELF_RELOC_REL:
 		rel = (const Elf_Rel *)data;
@@ -122,7 +121,6 @@
 		addend = *where;
 		rtype = ELF_R_TYPE(rel->r_info);
 		symidx = ELF_R_SYM(rel->r_info);
-printf("rel %p\n", rel);
 		break;
 	case ELF_RELOC_RELA:
 		rela = (const Elf_Rela *)data;
@@ -130,75 +128,48 @@
 		addend = rela->r_addend;
 		rtype = ELF_R_TYPE(rela->r_info);
 		symidx = ELF_R_SYM(rela->r_info);
-printf("rela %p\n", rela);
 		break;
 	default:
 		panic("unknown reloc type %d\n", type);
 	}
-printf("where %p, addend 0x%lx, rtype %ld, symindx %ld\n", where, addend, rtype, symidx);
 
-#if 0
-	if (local) {
-		if (rtype == R_X86_64_RELATIVE) {	/* A + B */
-			addr = relocbase + addend;
-printf("R_X86_64_RELATIVE: addr 0x%lx\n", addr);
-			if (*where != addr)
-				*where = addr;
-printf("*where = 0x%lx\n", *where);
-		}
-		return (0);
-	}
-#endif
-
 	switch (rtype) {
 
-		case R_X86_64_RELATIVE:
-			addr = relocbase + addend;
-printf("R_X86_64_RELATIVE: addr 0x%lx\n", addr);
-			if (*where != addr)
-				*where = addr;
-			break;
 
 		case R_X86_64_NONE:	/* none */
 printf("R_X86_64_NONE\n");
 			break;
 
 		case R_X86_64_64:		/* S + A */
-printf("R_X86_64_64\n");
 			addr = lu(lf, symidx, 1);
-printf("addr 0x%lx, addend 0x%lx\n", addr, addend);
+			val = addr + addend;
+printf("R_X86_64_64 %p -> (addr 0x%lx + addend 0x%lx) = 0x%lx\n", where, addr, addend, val);
 			if (addr == 0)
 				return -1;
-			addr += addend;
-			if (*where != addr)
-				*where = addr;
-printf("*where = 0x%lx\n", *where);
+			if (*where != val)
+				*where = val;
 			break;
 
 		case R_X86_64_PC32:	/* S + A - P */
-printf("R_X86_64_PC32\n");
 			addr = lu(lf, symidx, 1);
-printf("addr 0x%lx, addend 0x%lx\n", addr, addend);
+			where32 = (Elf32_Addr *)where;
+			val32 = (Elf32_Addr)(addr + addend - (Elf_Addr)where);
+printf("R_X86_64_PC32: %p -> (addr 0x%lx, addend 0x%lx - where) = 0x%x\n", where, addr, addend, val32);
 			if (addr == 0)
 				return -1;
-			val32 = (Elf32_Addr)(addr + addend - (Elf_Addr)where);
-			where32 = (int32_t *)where;
 			if (*where32 != val32)
 				*where32 = val32;
-printf("*where32 = 0x%x\n", *where32);
 			break;
 
 		case R_X86_64_32S:	/* S + A sign extend */
-printf("R_X86_64_32\n");
 			addr = lu(lf, symidx, 1);
-printf("addr 0x%lx, addend 0x%lx\n", addr, addend);
+			val32 = (Elf32_Addr)(addr + addend);
+			where32 = (Elf32_Addr *)where;
+printf("R_X86_64_32: %p -> (addr 0x%lx + addend 0x%lx) = 0x%x\n", where, addr, addend, val32);
 			if (addr == 0)
 				return -1;
-			val32 = (Elf32_Addr)(addr + addend);
-			where32 = (Elf32_Addr *)where;
 			if (*where32 != val32)
 				*where32 = val32;
-printf("*where32 = 0x%x\n", *where32);
 			break;
 
 		case R_X86_64_COPY:	/* none */
@@ -211,20 +182,21 @@
 			break;
 
 		case R_X86_64_GLOB_DAT:	/* S */
-printf("R_X86_64_GLOB_DAT\n");
 			addr = lu(lf, symidx, 1);
-printf("addr 0x%lx\n", addr);
+printf("R_X86_64_GLOB_DAT: %p -> addr 0x%lx\n", where, addr);
 			if (addr == 0)
 				return -1;
 			if (*where != addr)
 				*where = addr;
-printf("*where = 0x%lx\n", *where);
 			break;
 
-#if 0
 		case R_X86_64_RELATIVE:	/* B + A */
+			addr = relocbase + addend;
+			val = addr;
+printf("R_X86_64_RELATIVE: %p -> 0x%lx\n", where, val);
+			if (*where != val)
+				*where = val;
 			break;
-#endif
 
 		default:
 			printf("kldload: unexpected relocation type %ld\n",

==== //depot/projects/hammer/sys/kern/link_elf_obj.c#25 (text+ko) ====

@@ -58,8 +58,6 @@
 
 #include "linker_if.h"
 
-int biteme = 0;
-
 typedef struct {
 	void		*addr;
 	Elf_Off		fileoff;
@@ -120,10 +118,6 @@
 	caddr_t		shstrtab;	/* Section name string table */
 	long		shstrcnt;	/* number of bytes in string table */
 
-#if 0
-	caddr_t		symbase;	/* malloc'ed symbol base */
-	caddr_t		strbase;	/* malloc'ed string base */
-#endif
 } *elf_file_t;
 
 static int	link_elf_link_preload(linker_class_t cls,
@@ -242,7 +236,7 @@
 	}
 #endif
 
-printf("link_elf_obj: malloc header\n");
+printf("link_elf_obj: begin!\n");
 	/* Read the elf header from the file. */
 	hdr = malloc(sizeof(*hdr), M_LINKER, M_WAITOK);
 	if (hdr == NULL) {
@@ -259,33 +253,28 @@
 		goto out;
 	}
 
-printf("link_elf_obj: is_elf?\n");
 	if (!IS_ELF(*hdr)) {
 		error = ENOEXEC;
 		goto out;
 	}
 
-printf("link_elf_obj: right class?\n");
 	if (hdr->e_ident[EI_CLASS] != ELF_TARG_CLASS
 	    || hdr->e_ident[EI_DATA] != ELF_TARG_DATA) {
 		link_elf_error("Unsupported file layout");
 		error = ENOEXEC;
 		goto out;
 	}
-printf("link_elf_obj: right version?\n");
 	if (hdr->e_ident[EI_VERSION] != EV_CURRENT
 	    || hdr->e_version != EV_CURRENT) {
 		link_elf_error("Unsupported file version");
 		error = ENOEXEC;
 		goto out;
 	}
-printf("link_elf_obj: relocatable?\n");
 	if (hdr->e_type != ET_REL) {
 		link_elf_error("Unsupported file type");
 		error = ENOEXEC;
 		goto out;
 	}
-printf("link_elf_obj: right machine?\n");
 	if (hdr->e_machine != ELF_TARG_MACH) {
 		link_elf_error("Unsupported machine");
 		error = ENOEXEC;
@@ -294,8 +283,6 @@
 
 printf("elf_load_obj: initial checks look ok!\n");
 
-biteme++;
-printf("section table read in ok\n");
 	lf = linker_make_file(filename, &link_elf_class);
 	if (!lf) {
 		error = ENOMEM;
@@ -330,8 +317,8 @@
 		error = ENOEXEC;
 		goto out;
 	}
+printf("section table read in ok\n");
 
-printf("scan header1\n");
 	/* Scan the section header for information and table sizing. */
 	nsym = 0;
 	symtabindex = -1;
@@ -339,28 +326,25 @@
 	for (i = 0; i < hdr->e_shnum; i++) {
 		switch (shdr[i].sh_type) {
 		case SHT_PROGBITS:
-printf("scan: progbits!\n");
 			ef->nprogtab++;
 			break;
 		case SHT_NOBITS:
-printf("scan: nobits!\n");
 			ef->nnobittab++;
 			break;
 		case SHT_SYMTAB:
-printf("scan: symtab!\n");
 			nsym++;
 			symtabindex = i;
 			symstrindex = shdr[i].sh_link;
-printf("[symtab peer is %d]\n", symstrindex);
+printf("[symtab %d peer is %d]\n", i, symstrindex);
 			break;
 		case SHT_REL:
-printf("scan: rel!\n");
 			ef->nrel++;
 			break;
 		case SHT_RELA:
-printf("scan: rela!\n");
 			ef->nrela++;
 			break;
+		case SHT_STRTAB:
+			break;
 		default:
 printf("scan: unknown section type %d\n", shdr[i].sh_type);
 			break;
@@ -436,7 +420,6 @@
 	rl = 0;
 	ra = 0;
 	alignmask = 0;
-printf("scan pass 2\n");
 	for (i = 0; i < hdr->e_shnum; i++) {
 		switch (shdr[i].sh_type) {
 		case SHT_PROGBITS:
@@ -557,7 +540,6 @@
 	if (error)
 		goto out;
 
-printf("reading progbits\n");
 	/* Read in the text/data/set/etc sections */
 	for (i = 0; i < ef->nprogtab; i++) {
 printf("reading progbits %d\n", i);
@@ -598,8 +580,6 @@
 			goto out;
 	}
 
-
-printf("now do post link stuff\n");
 	/* Inform the kld system about the situation */
 	lf->address = ef->address = mapbase;
 	lf->size = mapsize;
@@ -638,7 +618,6 @@
 	VOP_UNLOCK(nd.ni_vp, 0, td);
 	vn_close(nd.ni_vp, FREAD, td->td_ucred, td);
 
-biteme--;
 	return error;
 }
 
@@ -715,10 +694,10 @@
 	/* Perform relocations without addend if there are any: */
 	for (i = 0; i < ef->nrel; i++) {
 		rel = ef->reltab[i].rel;
+printf("==============================\n");
 printf("doing rel relocation block %d: %p, size %ld\n", i, rel, ef->reltab[i].filesz);
 		if (rel) {
 			rellim = (const Elf_Rel *)((const char *)rel + ef->reltab[i].filesz);
-printf("rellim is %p\n", rellim);
 			base = findbase(ef, ef->reltab[i].sec);
 			while (rel < rellim) {
 printf("rel doing: %p\n", rel);
@@ -736,15 +715,16 @@
 				rel++;
 			}
 		}
+printf("\n");
 	}
 
 	/* Perform relocations with addend if there are any: */
 	for (i = 0; i < ef->nrela; i++) {
 		rela = ef->relatab[i].rela;
+printf("\n==============================\n");
 printf("doing rela relocation block %d, %p, size %ld\n", i, rela, ef->relatab[i].filesz);
 		if (rela) {
 			relalim = (const Elf_Rela *)((const char *)rela + ef->relatab[i].filesz);
-printf("relalim is %p\n", relalim);
 			base = findbase(ef, ef->relatab[i].sec);
 			while (rela < relalim) {
 printf("rela doing: %p\n", rela);
@@ -762,9 +742,10 @@
 				rela++;
 			}
 		}
+printf("\n");
 	}
 
-printf("relocate_file done\n");
+printf("relocate_file finished\n");
 	return 0;
 }
 
@@ -938,14 +919,11 @@
 	Elf_Addr ret;
 	int i;
 
-printf("elf_obj_lookup: symidx %ld (< %ld?)\n", symidx, ef->ddbsymcnt);
-
 	/* Don't even try to lookup the symbol if the index is bogus. */
 	if (symidx >= ef->ddbsymcnt)
 		return (0);
 
 	sym = ef->ddbsymtab + symidx;
-printf("sym: %p (base %p)\n", sym, ef->ddbsymtab);
 
 	/* Theoretically we can avoid a lookup for some locals */
 	switch (ELF64_ST_BIND(sym->st_info)) {
@@ -957,18 +935,16 @@
 		/* Relative to section number */
 		for (i = 0; i < ef->nprogtab; i++) {
 			if (sym->st_shndx == ef->progtab[i].sec) {
-printf("FOUND PROGBITS SECTION RELOC, name %s\n", ef->progtab[i].name);
 				ret = (Elf_Addr)ef->progtab[i].addr;
-printf("returning base 0x%lx\n", ret);
+printf("STB_LOCAL: sym %p idx %lx -> progbits section '%s', base 0x%lx\n", sym, symidx, ef->progtab[i].name, ret);
 				break;
 			}
 		}
 		if (ret == 0) {
 			for (i = 0; i < ef->nnobittab; i++) {
 				if (sym->st_shndx == ef->nobittab[i].sec) {
-printf("FOUND NOBITS SECTION RELOC, name %s\n", ef->nobittab[i].name);
 					ret = (Elf_Addr)ef->nobittab[i].addr;
-printf("returning base 0x%lx\n", ret);
+printf("STB_LOCAL: sym %p idx %lx -> nobits section '%s', base 0x%lx\n", sym, symidx, ef->nobittab[i].name, ret);
 					break;
 				}
 			}
@@ -982,9 +958,8 @@
 		/* Force a lookup failure if the symbol name is bogus. */
 		if (*symbol == 0)
 			return (0);
-printf("calling linker_file_lookup_symbol, deps %d\n", deps);
 		ret = ((Elf_Addr)linker_file_lookup_symbol(lf, symbol, deps));
-printf("linker_file_lookup_symbol returns 0x%lx\n", ret);
+printf("STB_GLOBAL: sym %p idx %lx name '%s' -> 0x%lx\n", sym, symidx, symbol, ret);
 		return ret;
 	default:
 printf("UNKNOWN BINDING %d\n", ELF64_ST_BIND(sym->st_info));
@@ -1011,10 +986,10 @@
 	/* Perform relocations without addend if there are any: */
 	for (i = 0; i < ef->nrel; i++) {
 		rel = ef->reltab[i].rel;
+printf("==============================\n");
 printf("doing rel relocation block %d: %p, size %ld\n", i, rel, ef->relatab[i].filesz);
 		if (rel) {
 			rellim = (const Elf_Rel *)((const char *)rel + ef->reltab[i].filesz);
-printf("rellim is %p\n", rellim);
 			base = findbase(ef, ef->reltab[i].sec);
 			while (rel < rellim) {
 printf("rel doing: %p\n", rel);
@@ -1027,15 +1002,16 @@
 				rel++;
 			}
 		}
+printf("\n");
 	}
 
 	/* Perform relocations with addend if there are any: */
 	for (i = 0; i < ef->nrela; i++) {
 		rela = ef->relatab[i].rela;
+printf("==============================\n");
 printf("doing rela relocation block %d: %p, size %ld\n", i, rela, ef->relatab[i].filesz);
 		if (rela) {
 			relalim = (const Elf_Rela *)((const char *)rela + ef->relatab[i].filesz);
-printf("relalim is %p\n", relalim);
 			base = findbase(ef, ef->relatab[i].sec);
 			while (rela < relalim) {
 printf("rela doing: %p\n", rela);
@@ -1048,5 +1024,6 @@
 				rela++;
 			}
 		}
+printf("\n");
 	}
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200404021745.i32Hjwre055582>