Module Name: src Committed By: christos Date: Thu Feb 17 19:38:49 UTC 2011
Modified Files: src/sys/lib/libsa: loadfile_elf32.c Log Message: fix -Wself-assign warning To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 src/sys/lib/libsa/loadfile_elf32.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/lib/libsa/loadfile_elf32.c diff -u src/sys/lib/libsa/loadfile_elf32.c:1.27 src/sys/lib/libsa/loadfile_elf32.c:1.28 --- src/sys/lib/libsa/loadfile_elf32.c:1.27 Wed Sep 15 20:26:49 2010 +++ src/sys/lib/libsa/loadfile_elf32.c Thu Feb 17 14:38:48 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: loadfile_elf32.c,v 1.27 2010/09/16 00:26:49 jym Exp $ */ +/* $NetBSD: loadfile_elf32.c,v 1.28 2011/02/17 19:38:48 christos Exp $ */ /*- * Copyright (c) 1997, 2008 The NetBSD Foundation, Inc. @@ -265,254 +265,254 @@ int first; Elf_Addr shpp; Elf_Addr minp = ~0, maxp = 0, pos = 0, elfp = 0; - u_long offset = marks[MARK_START]; - ssize_t nr; - struct __packed { - Elf_Nhdr nh; - uint8_t name[ELF_NOTE_NETBSD_NAMESZ + 1]; - uint8_t desc[ELF_NOTE_NETBSD_DESCSZ]; - } note; - char *shstr = NULL; - int boot_load_ctf=1; - - /* some ports dont use the offset */ - offset = offset; - - internalize_ehdr(elf->e_ident[EI_DATA], elf); - - sz = elf->e_phnum * sizeof(Elf_Phdr); - phdr = ALLOC(sz); - - if (lseek(fd, elf->e_phoff, SEEK_SET) == -1) { - WARN(("lseek phdr")); - goto freephdr; - } - nr = read(fd, phdr, sz); - if (nr == -1) { - WARN(("read program headers")); - goto freephdr; - } - if (nr != sz) { - errno = EIO; - WARN(("read program headers")); - goto freephdr; - } + u_long offset = marks[MARK_START]; + ssize_t nr; + struct __packed { + Elf_Nhdr nh; + uint8_t name[ELF_NOTE_NETBSD_NAMESZ + 1]; + uint8_t desc[ELF_NOTE_NETBSD_DESCSZ]; + } note; + char *shstr = NULL; + int boot_load_ctf=1; + + /* some ports dont use the offset */ + (void)&offset; + + internalize_ehdr(elf->e_ident[EI_DATA], elf); + + sz = elf->e_phnum * sizeof(Elf_Phdr); + phdr = ALLOC(sz); + + if (lseek(fd, elf->e_phoff, SEEK_SET) == -1) { + WARN(("lseek phdr")); + goto freephdr; + } + nr = read(fd, phdr, sz); + if (nr == -1) { + WARN(("read program headers")); + goto freephdr; + } + if (nr != sz) { + errno = EIO; + WARN(("read program headers")); + goto freephdr; + } - for (first = 1, i = 0; i < elf->e_phnum; i++) { - internalize_phdr(elf->e_ident[EI_DATA], &phdr[i]); + for (first = 1, i = 0; i < elf->e_phnum; i++) { + internalize_phdr(elf->e_ident[EI_DATA], &phdr[i]); #ifndef MD_LOADSEG /* Allow processor ABI specific segment loads */ #define MD_LOADSEG(a) /*CONSTCOND*/0 #endif - if (MD_LOADSEG(&phdr[i])) - goto loadseg; + if (MD_LOADSEG(&phdr[i])) + goto loadseg; - if (phdr[i].p_type != PT_LOAD || - (phdr[i].p_flags & (PF_W|PF_X)) == 0) - continue; + if (phdr[i].p_type != PT_LOAD || + (phdr[i].p_flags & (PF_W|PF_X)) == 0) + continue; #define IS_TEXT(p) (p.p_flags & PF_X) #define IS_DATA(p) (p.p_flags & PF_W) #define IS_BSS(p) (p.p_filesz < p.p_memsz) - /* - * XXX: Assume first address is lowest - */ - if ((IS_TEXT(phdr[i]) && (flags & LOAD_TEXT)) || - (IS_DATA(phdr[i]) && (flags & LOAD_DATA))) { - - loadseg: - if (marks[MARK_DATA] == 0 && IS_DATA(phdr[i])) - marks[MARK_DATA] = LOADADDR(phdr[i].p_vaddr); - - /* Read in segment. */ - PROGRESS(("%s%lu", first ? "" : "+", - (u_long)phdr[i].p_filesz)); - - if (lseek(fd, phdr[i].p_offset, SEEK_SET) == -1) { - WARN(("lseek text")); - goto freephdr; - } - nr = READ(fd, phdr[i].p_vaddr, phdr[i].p_filesz); - if (nr == -1) { - WARN(("read text error")); - goto freephdr; - } - if (nr != (ssize_t)phdr[i].p_filesz) { - errno = EIO; - WARN(("read text")); - goto freephdr; - } - first = 0; - - } - if ((IS_TEXT(phdr[i]) && (flags & (LOAD_TEXT|COUNT_TEXT))) || - (IS_DATA(phdr[i]) && (flags & (LOAD_DATA|COUNT_TEXT)))) { - pos = phdr[i].p_vaddr; - if (minp > pos) - minp = pos; - pos += phdr[i].p_filesz; - if (maxp < pos) - maxp = pos; - } - - /* Zero out bss. */ - if (IS_BSS(phdr[i]) && (flags & LOAD_BSS)) { - PROGRESS(("+%lu", - (u_long)(phdr[i].p_memsz - phdr[i].p_filesz))); - BZERO((phdr[i].p_vaddr + phdr[i].p_filesz), - phdr[i].p_memsz - phdr[i].p_filesz); - } - if (IS_BSS(phdr[i]) && (flags & (LOAD_BSS|COUNT_BSS))) { - pos += phdr[i].p_memsz - phdr[i].p_filesz; - if (maxp < pos) - maxp = pos; - } - } - DEALLOC(phdr, sz); + /* + * XXX: Assume first address is lowest + */ + if ((IS_TEXT(phdr[i]) && (flags & LOAD_TEXT)) || + (IS_DATA(phdr[i]) && (flags & LOAD_DATA))) { + + loadseg: + if (marks[MARK_DATA] == 0 && IS_DATA(phdr[i])) + marks[MARK_DATA] = LOADADDR(phdr[i].p_vaddr); + + /* Read in segment. */ + PROGRESS(("%s%lu", first ? "" : "+", + (u_long)phdr[i].p_filesz)); + + if (lseek(fd, phdr[i].p_offset, SEEK_SET) == -1) { + WARN(("lseek text")); + goto freephdr; + } + nr = READ(fd, phdr[i].p_vaddr, phdr[i].p_filesz); + if (nr == -1) { + WARN(("read text error")); + goto freephdr; + } + if (nr != (ssize_t)phdr[i].p_filesz) { + errno = EIO; + WARN(("read text")); + goto freephdr; + } + first = 0; + + } + if ((IS_TEXT(phdr[i]) && (flags & (LOAD_TEXT|COUNT_TEXT))) || + (IS_DATA(phdr[i]) && (flags & (LOAD_DATA|COUNT_TEXT)))) { + pos = phdr[i].p_vaddr; + if (minp > pos) + minp = pos; + pos += phdr[i].p_filesz; + if (maxp < pos) + maxp = pos; + } + + /* Zero out bss. */ + if (IS_BSS(phdr[i]) && (flags & LOAD_BSS)) { + PROGRESS(("+%lu", + (u_long)(phdr[i].p_memsz - phdr[i].p_filesz))); + BZERO((phdr[i].p_vaddr + phdr[i].p_filesz), + phdr[i].p_memsz - phdr[i].p_filesz); + } + if (IS_BSS(phdr[i]) && (flags & (LOAD_BSS|COUNT_BSS))) { + pos += phdr[i].p_memsz - phdr[i].p_filesz; + if (maxp < pos) + maxp = pos; + } + } + DEALLOC(phdr, sz); + + /* + * Copy the ELF and section headers. + */ + maxp = roundup(maxp, ELFROUND); + if (flags & (LOAD_HDR|COUNT_HDR)) { + elfp = maxp; + maxp += sizeof(Elf_Ehdr); + } + + if (flags & (LOAD_SYM|COUNT_SYM)) { + if (lseek(fd, elf->e_shoff, SEEK_SET) == -1) { + WARN(("lseek section headers")); + return 1; + } + sz = elf->e_shnum * sizeof(Elf_Shdr); + + shp = ALLOC(sz); + + nr = read(fd, shp, sz); + if (nr == -1) { + WARN(("read section headers")); + goto freeshp; + } + if (nr != sz) { + errno = EIO; + WARN(("read section headers")); + goto freeshp; + } - /* - * Copy the ELF and section headers. - */ - maxp = roundup(maxp, ELFROUND); - if (flags & (LOAD_HDR|COUNT_HDR)) { - elfp = maxp; - maxp += sizeof(Elf_Ehdr); - } - - if (flags & (LOAD_SYM|COUNT_SYM)) { - if (lseek(fd, elf->e_shoff, SEEK_SET) == -1) { - WARN(("lseek section headers")); - return 1; - } - sz = elf->e_shnum * sizeof(Elf_Shdr); - - shp = ALLOC(sz); - - nr = read(fd, shp, sz); - if (nr == -1) { - WARN(("read section headers")); - goto freeshp; - } - if (nr != sz) { - errno = EIO; - WARN(("read section headers")); - goto freeshp; - } - - shpp = maxp; - maxp += roundup(sz, ELFROUND); + shpp = maxp; + maxp += roundup(sz, ELFROUND); #ifndef _STANDALONE - /* Internalize the section headers. */ - for (i = 0; i < elf->e_shnum; i++) - internalize_shdr(elf->e_ident[EI_DATA], &shp[i]); + /* Internalize the section headers. */ + for (i = 0; i < elf->e_shnum; i++) + internalize_shdr(elf->e_ident[EI_DATA], &shp[i]); #endif /* ! _STANDALONE */ - /* - * First load the section names section. - */ - if (boot_load_ctf && (elf->e_shstrndx != 0)) { - if (flags & LOAD_SYM) { - if (lseek(fd, shp[elf->e_shstrndx].sh_offset, - SEEK_SET) == -1) { - WARN(("lseek symbols")); - goto freeshp; - } - nr = READ(fd, maxp, - shp[elf->e_shstrndx].sh_size); - if (nr == -1) { - WARN(("read symbols")); - goto freeshp; - } - if (nr != - (ssize_t)shp[elf->e_shstrndx].sh_size) { - errno = EIO; - WARN(("read symbols")); - goto freeshp; - } - - shstr = ALLOC(shp[elf->e_shstrndx].sh_size); - if (lseek(fd, shp[elf->e_shstrndx].sh_offset, - SEEK_SET) == -1) { - WARN(("lseek symbols")); - goto freeshp; - } - nr = read(fd, shstr, - shp[elf->e_shstrndx].sh_size); - if (nr == -1) { - WARN(("read symbols")); - goto freeshp; - } - } - shp[elf->e_shstrndx].sh_offset = maxp - elfp; - maxp += roundup(shp[elf->e_shstrndx].sh_size, ELFROUND); - } - - /* - * Now load the symbol sections themselves. Make sure - * the sections are aligned. Don't bother with any - * string table that isn't referenced by a symbol - * table. - */ - for (first = 1, i = 0; i < elf->e_shnum; i++) { - if (i == elf->e_shstrndx) { - /* already loaded this section */ - continue; - } - switch (shp[i].sh_type) { - case SHT_PROGBITS: - if (boot_load_ctf && shstr) { - /* got a CTF section? */ - if (strncmp(".SUNW_ctf", - &shstr[shp[i].sh_name], - 10) == 0) { - goto havesym; - } - } - - /* Not loading this, so zero out the offset. */ - shp[i].sh_offset = 0; - break; - case SHT_STRTAB: - for (j = 0; j < elf->e_shnum; j++) - if (shp[j].sh_type == SHT_SYMTAB && - shp[j].sh_link == (unsigned int)i) - goto havesym; - /* FALLTHROUGH */ - default: - /* Not loading this, so zero out the offset. */ - shp[i].sh_offset = 0; - break; - havesym: - case SHT_SYMTAB: - if (flags & LOAD_SYM) { - PROGRESS(("%s%ld", first ? " [" : "+", - (u_long)shp[i].sh_size)); - if (lseek(fd, shp[i].sh_offset, - SEEK_SET) == -1) { - WARN(("lseek symbols")); - goto freeshp; - } - nr = READ(fd, maxp, shp[i].sh_size); - if (nr == -1) { - WARN(("read symbols")); - goto freeshp; - } - if (nr != (ssize_t)shp[i].sh_size) { - errno = EIO; - WARN(("read symbols")); - goto freeshp; - } - } - shp[i].sh_offset = maxp - elfp; - maxp += roundup(shp[i].sh_size, ELFROUND); - first = 0; - break; - case SHT_NOTE: - if ((flags & LOAD_NOTE) == 0) - break; - if (shp[i].sh_size < sizeof(note)) { - shp[i].sh_offset = 0; + /* + * First load the section names section. + */ + if (boot_load_ctf && (elf->e_shstrndx != 0)) { + if (flags & LOAD_SYM) { + if (lseek(fd, shp[elf->e_shstrndx].sh_offset, + SEEK_SET) == -1) { + WARN(("lseek symbols")); + goto freeshp; + } + nr = READ(fd, maxp, + shp[elf->e_shstrndx].sh_size); + if (nr == -1) { + WARN(("read symbols")); + goto freeshp; + } + if (nr != + (ssize_t)shp[elf->e_shstrndx].sh_size) { + errno = EIO; + WARN(("read symbols")); + goto freeshp; + } + + shstr = ALLOC(shp[elf->e_shstrndx].sh_size); + if (lseek(fd, shp[elf->e_shstrndx].sh_offset, + SEEK_SET) == -1) { + WARN(("lseek symbols")); + goto freeshp; + } + nr = read(fd, shstr, + shp[elf->e_shstrndx].sh_size); + if (nr == -1) { + WARN(("read symbols")); + goto freeshp; + } + } + shp[elf->e_shstrndx].sh_offset = maxp - elfp; + maxp += roundup(shp[elf->e_shstrndx].sh_size, ELFROUND); + } + + /* + * Now load the symbol sections themselves. Make sure + * the sections are aligned. Don't bother with any + * string table that isn't referenced by a symbol + * table. + */ + for (first = 1, i = 0; i < elf->e_shnum; i++) { + if (i == elf->e_shstrndx) { + /* already loaded this section */ + continue; + } + switch (shp[i].sh_type) { + case SHT_PROGBITS: + if (boot_load_ctf && shstr) { + /* got a CTF section? */ + if (strncmp(".SUNW_ctf", + &shstr[shp[i].sh_name], + 10) == 0) { + goto havesym; + } + } + + /* Not loading this, so zero out the offset. */ + shp[i].sh_offset = 0; + break; + case SHT_STRTAB: + for (j = 0; j < elf->e_shnum; j++) + if (shp[j].sh_type == SHT_SYMTAB && + shp[j].sh_link == (unsigned int)i) + goto havesym; + /* FALLTHROUGH */ + default: + /* Not loading this, so zero out the offset. */ + shp[i].sh_offset = 0; + break; + havesym: + case SHT_SYMTAB: + if (flags & LOAD_SYM) { + PROGRESS(("%s%ld", first ? " [" : "+", + (u_long)shp[i].sh_size)); + if (lseek(fd, shp[i].sh_offset, + SEEK_SET) == -1) { + WARN(("lseek symbols")); + goto freeshp; + } + nr = READ(fd, maxp, shp[i].sh_size); + if (nr == -1) { + WARN(("read symbols")); + goto freeshp; + } + if (nr != (ssize_t)shp[i].sh_size) { + errno = EIO; + WARN(("read symbols")); + goto freeshp; + } + } + shp[i].sh_offset = maxp - elfp; + maxp += roundup(shp[i].sh_size, ELFROUND); + first = 0; + break; + case SHT_NOTE: + if ((flags & LOAD_NOTE) == 0) + break; + if (shp[i].sh_size < sizeof(note)) { + shp[i].sh_offset = 0; break; } if (lseek(fd, shp[i].sh_offset, SEEK_SET)