PERFORCE change 50211 for review
Peter Wemm
peter at FreeBSD.org
Fri Apr 2 12:35:34 PST 2004
http://perforce.freebsd.org/chv.cgi?CH=50211
Change 50211 by peter at 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");
}
}
More information about the p4-projects
mailing list