Module Name:    src
Committed By:   hannken
Date:           Wed Mar 30 08:26:45 UTC 2022

Modified Files:
        src/libexec/ld.elf_so: map_object.c

Log Message:
_rtld_map_object(): no need to mmap an empty bss segment.


To generate a diff of this commit:
cvs rdiff -u -r1.61 -r1.62 src/libexec/ld.elf_so/map_object.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/libexec/ld.elf_so/map_object.c
diff -u src/libexec/ld.elf_so/map_object.c:1.61 src/libexec/ld.elf_so/map_object.c:1.62
--- src/libexec/ld.elf_so/map_object.c:1.61	Wed Mar  4 01:21:17 2020
+++ src/libexec/ld.elf_so/map_object.c	Wed Mar 30 08:26:45 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: map_object.c,v 1.61 2020/03/04 01:21:17 thorpej Exp $	 */
+/*	$NetBSD: map_object.c,v 1.62 2022/03/30 08:26:45 hannken Exp $	 */
 
 /*
  * Copyright 1996 John D. Polstra.
@@ -34,7 +34,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: map_object.c,v 1.61 2020/03/04 01:21:17 thorpej Exp $");
+__RCSID("$NetBSD: map_object.c,v 1.62 2022/03/30 08:26:45 hannken Exp $");
 #endif /* not lint */
 
 #include <errno.h>
@@ -371,11 +371,13 @@ _rtld_map_object(const char *path, int f
 	}
 
 	/* Overlay the bss segment onto the proper region. */
-	if (mmap(mapbase + data_vlimit - base_vaddr, base_vlimit - data_vlimit,
-	    data_flags, MAP_ANON | MAP_PRIVATE | MAP_FIXED, -1, 0) ==
-	    MAP_FAILED) {
-		_rtld_error("mmap of bss failed: %s", xstrerror(errno));
-		goto bad;
+	if (base_vlimit > data_vlimit) {
+		if (mmap(mapbase + data_vlimit - base_vaddr,
+		    base_vlimit - data_vlimit, data_flags,
+		    MAP_ANON | MAP_PRIVATE | MAP_FIXED, -1, 0) == MAP_FAILED) {
+			_rtld_error("mmap of bss failed: %s", xstrerror(errno));
+			goto bad;
+		}
 	}
 
 	/* Unmap the gap between the text and data. */

Reply via email to