Date: Fri, 2 Apr 2004 12:35:33 -0800 (PST) From: Peter Wemm <peter@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 50211 for review Message-ID: <200404022035.i32KZXOY094423@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=50211 Change 50211 by peter@peter_hammer on 2004/04/02 12:34:52 de-printf. I'm pretty sure my bugs are elsewhere now. Affected files ... .. //depot/projects/hammer/sys/amd64/amd64/elf_machdep.c#19 edit .. //depot/projects/hammer/sys/kern/link_elf_obj.c#27 edit Differences ... ==== //depot/projects/hammer/sys/amd64/amd64/elf_machdep.c#19 (text+ko) ==== @@ -137,13 +137,11 @@ case R_X86_64_NONE: /* none */ -printf("R_X86_64_NONE\n"); break; case R_X86_64_64: /* S + A */ addr = lu(lf, symidx, 1); 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; if (*where != val) @@ -154,7 +152,6 @@ addr = lu(lf, symidx, 1); 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; if (*where32 != val32) @@ -165,7 +162,6 @@ addr = lu(lf, symidx, 1); 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; if (*where32 != val32) @@ -183,7 +179,6 @@ case R_X86_64_GLOB_DAT: /* S */ addr = lu(lf, symidx, 1); -printf("R_X86_64_GLOB_DAT: %p -> addr 0x%lx\n", where, addr); if (addr == 0) return -1; if (*where != addr) @@ -193,7 +188,6 @@ 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; ==== //depot/projects/hammer/sys/kern/link_elf_obj.c#27 (text+ko) ==== @@ -236,7 +236,6 @@ } #endif -printf("link_elf_obj: begin!\n"); /* Read the elf header from the file. */ hdr = malloc(sizeof(*hdr), M_LINKER, M_WAITOK); if (hdr == NULL) { @@ -281,8 +280,6 @@ goto out; } -printf("elf_load_obj: initial checks look ok!\n"); - lf = linker_make_file(filename, &link_elf_class); if (!lf) { error = ENOMEM; @@ -303,7 +300,6 @@ goto out; } shdr = malloc(nbytes, M_LINKER, M_WAITOK | M_ZERO); -printf("section table %d bytes allocated at %p\n", nbytes, shdr); if (shdr == NULL) { error = ENOMEM; goto out; @@ -317,7 +313,6 @@ error = ENOEXEC; goto out; } -printf("section table read in ok\n"); /* Scan the section header for information and table sizing. */ nsym = 0; @@ -335,7 +330,6 @@ nsym++; symtabindex = i; symstrindex = shdr[i].sh_link; -printf("[symtab %d peer is %d]\n", i, symstrindex); break; case SHT_REL: ef->nrel++; @@ -345,12 +339,8 @@ break; case SHT_STRTAB: break; - default: -printf("scan: unknown section type %d\n", shdr[i].sh_type); - break; } } -printf("finished scan 1\n"); if (ef->nprogtab == 0 && ef->nnobittab == 0) { link_elf_error("file has no contents"); error = ENOEXEC; @@ -384,11 +374,9 @@ /* Space for symbol table */ ef->ddbsymcnt = shdr[symtabindex].sh_size / sizeof(Elf_Sym); ef->ddbsymtab = malloc(shdr[symtabindex].sh_size, M_LINKER, M_WAITOK); -printf("symbol table at %p, size 0x%lx\n", ef->ddbsymtab, shdr[symtabindex].sh_size); ef->ddbstrcnt = shdr[symstrindex].sh_size; ef->ddbstrtab = malloc(shdr[symstrindex].sh_size, M_LINKER, M_WAITOK); -printf("string table at %p, size 0x%lx\n", ef->ddbstrtab, shdr[symstrindex].sh_size); if (ef->ddbsymtab == NULL || ef->ddbstrtab == NULL) { error = ENOMEM; @@ -405,7 +393,6 @@ error = ENOMEM; goto out; } -printf("reading shstrtab\n"); error = vn_rdwr(UIO_READ, nd.ni_vp, ef->shstrtab, shdr[shstrindex].sh_size, shdr[shstrindex].sh_offset, UIO_SYSSPACE, IO_NODELOCKED, td->td_ucred, NOCRED, @@ -425,10 +412,8 @@ case SHT_PROGBITS: case SHT_NOBITS: alignmask = shdr[i].sh_addralign - 1; -printf("addralign %ld mask %d\n", shdr[i].sh_addralign, alignmask); mapsize += alignmask; mapsize &= ~alignmask; -printf("mapsize now at %ld\n", mapsize); break; } @@ -443,7 +428,6 @@ ef->progtab[pb].name = ef->shstrtab + shdr[i].sh_name; else ef->progtab[pb].name = "<<PROGBITS>>"; -printf("progbits at %ld, sec %d, name %s\n", mapsize, ef->progtab[pb].sec, ef->progtab[pb].name); mapsize += shdr[i].sh_size; pb++; break; @@ -456,13 +440,11 @@ ef->nobittab[nb].name = ef->shstrtab + shdr[i].sh_name; else ef->nobittab[nb].name = "<<NOBITS>>"; -printf("nobits at %ld, sec %d name %s\n", mapsize, ef->nobittab[nb].sec, ef->nobittab[nb].name); mapsize += shdr[i].sh_size; nb++; break; case SHT_REL: ef->reltab[rl].rel = malloc(shdr[i].sh_size, M_LINKER, M_WAITOK); -printf("rel %ld allocated at %p\n", shdr[i].sh_size, ef->reltab[rl].rel); ef->reltab[rl].fileoff = shdr[i].sh_offset; ef->reltab[rl].filesz = shdr[i].sh_size; ef->reltab[rl].sec = shdr[i].sh_info; @@ -470,7 +452,6 @@ break; case SHT_RELA: ef->relatab[ra].rela = malloc(shdr[i].sh_size, M_LINKER, M_WAITOK); -printf("rela %ld allocated at %p\n", shdr[i].sh_size, ef->relatab[ra].rela); ef->relatab[ra].fileoff = shdr[i].sh_offset; ef->relatab[ra].filesz = shdr[i].sh_size; ef->relatab[ra].sec = shdr[i].sh_info; @@ -512,20 +493,14 @@ (vm_offset_t)mapbase + round_page(mapsize), VM_MAP_WIRE_SYSTEM|VM_MAP_WIRE_NOHOLES); -printf("final mapbase %p, final mapsize %ld\n", mapbase, mapsize); - /* Add the base address to the previously calculated/aligned offsets */ - for (i = 0; i < ef->nprogtab; i++) { + for (i = 0; i < ef->nprogtab; i++) ef->progtab[i].addr = mapbase + (uintptr_t)ef->progtab[i].addr; -printf("progtab[%d] at %p\n", i, ef->progtab[i].addr); - } - for (i = 0; i < ef->nnobittab; i++) { + + for (i = 0; i < ef->nnobittab; i++) ef->nobittab[i].addr = mapbase + (uintptr_t)ef->nobittab[i].addr; -printf("nobittab[%d] at %p\n", i, ef->nobittab[i].addr); - } -printf("reading symbols\n"); /* Load the symbol table. */ error = vn_rdwr(UIO_READ, nd.ni_vp, (void *)ef->ddbsymtab, shdr[symtabindex].sh_size, shdr[symtabindex].sh_offset, @@ -533,7 +508,6 @@ &resid, td); if (error) goto out; -printf("reading strings\n"); error = vn_rdwr(UIO_READ, nd.ni_vp, ef->ddbstrtab, shdr[symstrindex].sh_size, shdr[symstrindex].sh_offset, UIO_SYSSPACE, IO_NODELOCKED, td->td_ucred, NOCRED, @@ -543,7 +517,6 @@ /* Read in the text/data/set/etc sections */ for (i = 0; i < ef->nprogtab; i++) { -printf("reading progbits %d\n", i); error = vn_rdwr(UIO_READ, nd.ni_vp, ef->progtab[i].addr, ef->progtab[i].filesz, @@ -559,7 +532,6 @@ * usually not both. */ for (i = 0; i < ef->nrel; i++) { -printf("reading rel segment %d\n", i); error = vn_rdwr(UIO_READ, nd.ni_vp, (void *)ef->reltab[i].rel, ef->reltab[i].filesz, @@ -570,7 +542,6 @@ goto out; } for (i = 0; i < ef->nrela; i++) { -printf("reading rela segment %d\n", i); error = vn_rdwr(UIO_READ, nd.ni_vp, (void *)ef->relatab[i].rela, ef->relatab[i].filesz, @@ -585,33 +556,27 @@ lf->address = ef->address = mapbase; lf->size = mapsize; -printf("do intra-module relocs\n"); /* Local intra-module relocations */ link_elf_reloc_local(lf); -printf("load dependencies\n"); /* Pull in dependencies */ error = linker_load_dependencies(lf); if (error) goto out; -printf("do external relocs\n"); /* External relocations */ error = relocate_file(ef); if (error) goto out; -printf("notify MD code\n"); /* Notify MD code that a module is being loaded. */ error = elf_cpu_load_file(lf); if (error) goto out; -printf("HOLY SHIT! WE MADE IT!!!\n"); *result = lf; out: -printf("link_elf_obj: finishing up! error = %d\n", error); if (error && lf) linker_file_unload(lf); if (hdr) @@ -693,13 +658,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); base = findbase(ef, ef->reltab[i].sec); while (rel < rellim) { -printf("rel doing: %p\n", rel); symidx = ELF_R_SYM(rel->r_info); if (symidx < ef->ddbsymcnt) { sym = ef->ddbsymtab + symidx; @@ -714,19 +676,15 @@ 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); base = findbase(ef, ef->relatab[i].sec); while (rela < relalim) { -printf("rela doing: %p\n", rela); symidx = ELF_R_SYM(rela->r_info); if (symidx < ef->ddbsymcnt) { sym = ef->ddbsymtab + symidx; @@ -741,10 +699,8 @@ rela++; } } -printf("\n"); } -printf("relocate_file finished\n"); return 0; } @@ -836,8 +792,6 @@ void **start, **stop; int i, count; -printf("lookup_set: name %s\n", name); - /* Relative to section number */ for (i = 0; i < ef->nprogtab; i++) { if ((strncmp(ef->progtab[i].name, "set_", 4) == 0) && @@ -845,7 +799,6 @@ start = (void **)ef->progtab[i].addr; stop = (void **)((char *)ef->progtab[i].addr + ef->progtab[i].filesz); count = stop - start; -printf("FOUND: section %d start %p stop %p count %d\n", i, start, stop, count); if (startp) *startp = start; if (stopp) @@ -911,7 +864,6 @@ for (i = 0; i < ef->nprogtab; i++) { if (sym->st_shndx == ef->progtab[i].sec) { ret = (Elf_Addr)ef->progtab[i].addr; -printf("STB_LOCAL: sym %p idx %lx -> progbits section '%s', base 0x%lx\n", sym, symidx, ef->progtab[i].name, ret); break; } } @@ -919,7 +871,6 @@ for (i = 0; i < ef->nnobittab; i++) { if (sym->st_shndx == ef->nobittab[i].sec) { ret = (Elf_Addr)ef->nobittab[i].addr; -printf("STB_LOCAL: sym %p idx %lx -> nobits section '%s', base 0x%lx\n", sym, symidx, ef->nobittab[i].name, ret); break; } } @@ -934,7 +885,6 @@ if (*symbol == 0) return (0); ret = ((Elf_Addr)linker_file_lookup_symbol(lf, symbol, deps)); -printf("STB_GLOBAL: sym %p idx %lx name '%s' -> 0x%lx\n", sym, symidx, symbol, ret); return ret; case STB_WEAK: @@ -942,7 +892,6 @@ return (0); default: -printf("UNKNOWN BINDING %d\n", ELF64_ST_BIND(sym->st_info)); return (0); } } @@ -966,13 +915,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); base = findbase(ef, ef->reltab[i].sec); while (rel < rellim) { -printf("rel doing: %p\n", rel); symidx = ELF_R_SYM(rel->r_info); if (symidx < ef->ddbsymcnt) { sym = ef->ddbsymtab + symidx; @@ -982,19 +928,15 @@ 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); base = findbase(ef, ef->relatab[i].sec); while (rela < relalim) { -printf("rela doing: %p\n", rela); symidx = ELF_R_SYM(rela->r_info); if (symidx < ef->ddbsymcnt) { sym = ef->ddbsymtab + symidx; @@ -1004,6 +946,5 @@ rela++; } } -printf("\n"); } }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200404022035.i32KZXOY094423>