From owner-svn-src-all@FreeBSD.ORG Wed Mar 14 15:39:59 2012 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EF2331065672; Wed, 14 Mar 2012 15:39:59 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D47718FC0A; Wed, 14 Mar 2012 15:39:59 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q2EFdxma019944; Wed, 14 Mar 2012 15:39:59 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q2EFdxYw019939; Wed, 14 Mar 2012 15:39:59 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201203141539.q2EFdxYw019939@svn.freebsd.org> From: Konstantin Belousov Date: Wed, 14 Mar 2012 15:39:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r232974 - head/libexec/rtld-elf X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Mar 2012 15:40:00 -0000 Author: kib Date: Wed Mar 14 15:39:59 2012 New Revision: 232974 URL: http://svn.freebsd.org/changeset/base/232974 Log: Rtld on diet 3. Stop using strerror(3) in rtld, which brings in msgcat and stdio. Directly access sys_errlist array of errno messages with private rtld_strerror() function. Now, $ size /libexec/ld-elf.so.1 text data bss dec hex filename 96983 2480 8744 108207 1a6af /libexec/ld-elf.so.1 Reviewed by: dim, kan MFC after: 2 weeks Modified: head/libexec/rtld-elf/libmap.c head/libexec/rtld-elf/map_object.c head/libexec/rtld-elf/rtld.c head/libexec/rtld-elf/rtld.h Modified: head/libexec/rtld-elf/libmap.c ============================================================================== --- head/libexec/rtld-elf/libmap.c Wed Mar 14 15:30:59 2012 (r232973) +++ head/libexec/rtld-elf/libmap.c Wed Mar 14 15:39:59 2012 (r232974) @@ -71,20 +71,20 @@ lm_init(char *libmap_override) fd = open(_PATH_LIBMAP_CONF, O_RDONLY); if (fd == -1) { dbg("lm_init: open(\"%s\") failed, %s", _PATH_LIBMAP_CONF, - strerror(errno)); + rtld_strerror(errno)); goto override; } if (fstat(fd, &st) == -1) { close(fd); dbg("lm_init: fstat(\"%s\") failed, %s", _PATH_LIBMAP_CONF, - strerror(errno)); + rtld_strerror(errno)); goto override; } lm_map = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); if (lm_map == (const char *)MAP_FAILED) { close(fd); dbg("lm_init: mmap(\"%s\") failed, %s", _PATH_LIBMAP_CONF, - strerror(errno)); + rtld_strerror(errno)); goto override; } close(fd); Modified: head/libexec/rtld-elf/map_object.c ============================================================================== --- head/libexec/rtld-elf/map_object.c Wed Mar 14 15:30:59 2012 (r232973) +++ head/libexec/rtld-elf/map_object.c Wed Mar 14 15:39:59 2012 (r232974) @@ -184,7 +184,7 @@ map_object(int fd, const char *path, con MAP_NOCORE, -1, 0); if (mapbase == (caddr_t) -1) { _rtld_error("%s: mmap of entire address space failed: %s", - path, strerror(errno)); + path, rtld_strerror(errno)); return NULL; } if (base_addr != NULL && mapbase != base_addr) { @@ -204,7 +204,8 @@ map_object(int fd, const char *path, con data_flags = convert_flags(segs[i]->p_flags) | MAP_FIXED; if (mmap(data_addr, data_vlimit - data_vaddr, data_prot, data_flags, fd, data_offset) == (caddr_t) -1) { - _rtld_error("%s: mmap of data failed: %s", path, strerror(errno)); + _rtld_error("%s: mmap of data failed: %s", path, + rtld_strerror(errno)); return NULL; } @@ -221,7 +222,7 @@ map_object(int fd, const char *path, con if ((data_prot & PROT_WRITE) == 0 && -1 == mprotect(clear_page, PAGE_SIZE, data_prot|PROT_WRITE)) { _rtld_error("%s: mprotect failed: %s", path, - strerror(errno)); + rtld_strerror(errno)); return NULL; } @@ -240,7 +241,7 @@ map_object(int fd, const char *path, con if (mmap(bss_addr, bss_vlimit - bss_vaddr, data_prot, data_flags | MAP_ANON, -1, 0) == (caddr_t)-1) { _rtld_error("%s: mmap of bss failed: %s", path, - strerror(errno)); + rtld_strerror(errno)); return NULL; } } @@ -307,7 +308,7 @@ get_elf_header (int fd, const char *path ssize_t nbytes; if ((nbytes = pread(fd, u.buf, PAGE_SIZE, 0)) == -1) { - _rtld_error("%s: read error: %s", path, strerror(errno)); + _rtld_error("%s: read error: %s", path, rtld_strerror(errno)); return NULL; } Modified: head/libexec/rtld-elf/rtld.c ============================================================================== --- head/libexec/rtld-elf/rtld.c Wed Mar 14 15:30:59 2012 (r232973) +++ head/libexec/rtld-elf/rtld.c Wed Mar 14 15:39:59 2012 (r232974) @@ -2163,7 +2163,7 @@ relocate_objects(Obj_Entry *first, bool if (mprotect(obj->mapbase, obj->textsize, PROT_READ|PROT_WRITE|PROT_EXEC) == -1) { _rtld_error("%s: Cannot write-enable text segment: %s", - obj->path, strerror(errno)); + obj->path, rtld_strerror(errno)); return -1; } } @@ -2176,7 +2176,7 @@ relocate_objects(Obj_Entry *first, bool if (mprotect(obj->mapbase, obj->textsize, PROT_READ|PROT_EXEC) == -1) { _rtld_error("%s: Cannot write-protect text segment: %s", - obj->path, strerror(errno)); + obj->path, rtld_strerror(errno)); return -1; } } @@ -2196,7 +2196,7 @@ relocate_objects(Obj_Entry *first, bool if (obj->relro_size > 0) { if (mprotect(obj->relro_page, obj->relro_size, PROT_READ) == -1) { _rtld_error("%s: Cannot enforce relro protection: %s", - obj->path, strerror(errno)); + obj->path, rtld_strerror(errno)); return -1; } } @@ -4353,3 +4353,12 @@ __chk_fail(void) _rtld_error("buffer overflow detected; terminated"); die(); } + +const char * +rtld_strerror(int errnum) +{ + + if (errnum < 0 || errnum >= sys_nerr) + return ("Unknown error"); + return (sys_errlist[errnum]); +} Modified: head/libexec/rtld-elf/rtld.h ============================================================================== --- head/libexec/rtld-elf/rtld.h Wed Mar 14 15:30:59 2012 (r232973) +++ head/libexec/rtld-elf/rtld.h Wed Mar 14 15:39:59 2012 (r232974) @@ -313,6 +313,7 @@ typedef struct Struct_SymLook { } SymLook; extern void _rtld_error(const char *, ...) __printflike(1, 2); +extern const char *rtld_strerror(int); extern Obj_Entry *map_object(int, const char *, const struct stat *); extern void *xcalloc(size_t); extern void *xmalloc(size_t);