svn commit: r343564 - head/libexec/rtld-elf

Konstantin Belousov kib at FreeBSD.org
Tue Jan 29 22:40:44 UTC 2019


Author: kib
Date: Tue Jan 29 22:40:42 2019
New Revision: 343564
URL: https://svnweb.freebsd.org/changeset/base/343564

Log:
  Adjust posix symbols from rtld-elf/malloc.c with the __crt_ prefix.
  
  This allows to reuse the allocator in other environments that get
  malloc(3) and related functions from libc or interposer.
  
  MFC after:	2 weeks
  Sponsored by:	The FreeBSD Foundation
  Differential revision:	https://reviews.freebsd.org/D18988

Modified:
  head/libexec/rtld-elf/malloc.c
  head/libexec/rtld-elf/rtld.c
  head/libexec/rtld-elf/rtld.h
  head/libexec/rtld-elf/xmalloc.c

Modified: head/libexec/rtld-elf/malloc.c
==============================================================================
--- head/libexec/rtld-elf/malloc.c	Tue Jan 29 20:50:29 2019	(r343563)
+++ head/libexec/rtld-elf/malloc.c	Tue Jan 29 22:40:42 2019	(r343564)
@@ -153,7 +153,7 @@ botch(s)
  */
 
 void *
-malloc(size_t nbytes)
+__crt_malloc(size_t nbytes)
 {
 	union overhead *op;
 	int bucket;
@@ -236,7 +236,7 @@ malloc(size_t nbytes)
 }
 
 void *
-calloc(size_t num, size_t size)
+__crt_calloc(size_t num, size_t size)
 {
 	void *ret;
 
@@ -245,7 +245,7 @@ calloc(size_t num, size_t size)
 		return (NULL);
 	}
 
-	if ((ret = malloc(num * size)) != NULL)
+	if ((ret = __crt_malloc(num * size)) != NULL)
 		memset(ret, 0, num * size);
 
 	return (ret);
@@ -298,7 +298,7 @@ morecore(int bucket)
 }
 
 void
-free(void * cp)
+__crt_free(void *cp)
 {
 	int size;
 	union overhead *op;
@@ -339,7 +339,7 @@ free(void * cp)
 static int realloc_srchlen = 4;	/* 4 should be plenty, -1 =>'s whole list */
 
 void *
-realloc(void *cp, size_t nbytes)
+__crt_realloc(void *cp, size_t nbytes)
 {
 	u_int onb;
 	int i;
@@ -348,7 +348,7 @@ realloc(void *cp, size_t nbytes)
 	int was_alloced = 0;
 
   	if (cp == NULL)
-  		return (malloc(nbytes));
+		return (__crt_malloc(nbytes));
 	op = (union overhead *)((caddr_t)cp - sizeof (union overhead));
 	if (op->ov_magic == MAGIC) {
 		was_alloced++;
@@ -393,10 +393,10 @@ realloc(void *cp, size_t nbytes)
 #endif
 			return(cp);
 		} else
-			free(cp);
+			__crt_free(cp);
 	}
-  	if ((res = malloc(nbytes)) == NULL)
-  		return (NULL);
+  	if ((res = __crt_malloc(nbytes)) == NULL)
+		return (NULL);
   	if (cp != res)		/* common optimization if "compacting" */
 		bcopy(cp, res, (nbytes < onb) ? nbytes : onb);
   	return (res);
@@ -467,9 +467,11 @@ morepages(int n)
 		caddr_t	addr = (caddr_t)
 			(((long)pagepool_start + pagesz - 1) & ~(pagesz - 1));
 		if (munmap(addr, pagepool_end - addr) != 0) {
+#ifdef IN_RTLD
 			rtld_fdprintf(STDERR_FILENO, _BASENAME_RTLD ": "
 			    "morepages: cannot munmap %p: %s\n",
 			    addr, rtld_strerror(errno));
+#endif
 		}
 	}
 
@@ -478,9 +480,11 @@ morepages(int n)
 	if ((pagepool_start = mmap(0, n * pagesz,
 			PROT_READ|PROT_WRITE,
 			MAP_ANON|MAP_PRIVATE, fd, 0)) == (caddr_t)-1) {
+#ifdef IN_RTLD
 		rtld_fdprintf(STDERR_FILENO, _BASENAME_RTLD ": morepages: "
 		    "cannot mmap anonymous memory: %s\n",
 		    rtld_strerror(errno));
+#endif
 		return 0;
 	}
 	pagepool_end = pagepool_start + n * pagesz;

Modified: head/libexec/rtld-elf/rtld.c
==============================================================================
--- head/libexec/rtld-elf/rtld.c	Tue Jan 29 20:50:29 2019	(r343563)
+++ head/libexec/rtld-elf/rtld.c	Tue Jan 29 22:40:42 2019	(r343564)
@@ -66,6 +66,7 @@ __FBSDID("$FreeBSD$");
 #include "paths.h"
 #include "rtld_tls.h"
 #include "rtld_printf.h"
+#include "rtld_malloc.h"
 #include "rtld_utrace.h"
 #include "notes.h"
 
@@ -5636,4 +5637,33 @@ bzero(void *dest, size_t len)
 
 	for (i = 0; i < len; i++)
 		((char *)dest)[i] = 0;
+}
+
+/* malloc */
+void *
+malloc(size_t nbytes)
+{
+
+	return (__crt_malloc(nbytes));
+}
+
+void *
+calloc(size_t num, size_t size)
+{
+
+	return (__crt_calloc(num, size));
+}
+
+void
+free(void *cp)
+{
+
+	__crt_free(cp);
+}
+
+void *
+realloc(void *cp, size_t nbytes)
+{
+
+	return (__crt_realloc(cp, nbytes));
 }

Modified: head/libexec/rtld-elf/rtld.h
==============================================================================
--- head/libexec/rtld-elf/rtld.h	Tue Jan 29 20:50:29 2019	(r343563)
+++ head/libexec/rtld-elf/rtld.h	Tue Jan 29 22:40:42 2019	(r343564)
@@ -409,4 +409,9 @@ void pre_init(void);
 void init_pltgot(Obj_Entry *);
 void allocate_initial_tls(Obj_Entry *);
 
+void *__crt_calloc(size_t num, size_t size);
+void __crt_free(void *cp);
+void *__crt_malloc(size_t nbytes);
+void *__crt_realloc(void *cp, size_t nbytes);
+
 #endif /* } */

Modified: head/libexec/rtld-elf/xmalloc.c
==============================================================================
--- head/libexec/rtld-elf/xmalloc.c	Tue Jan 29 20:50:29 2019	(r343563)
+++ head/libexec/rtld-elf/xmalloc.c	Tue Jan 29 22:40:42 2019	(r343564)
@@ -33,13 +33,14 @@
 #include <unistd.h>
 #include "rtld.h"
 #include "rtld_printf.h"
+#include "rtld_malloc.h"
 
 void *
 xcalloc(size_t number, size_t size)
 {
 	void *p;
 
-	p = calloc(number, size);
+	p = __crt_calloc(number, size);
 	if (p == NULL) {
 		rtld_fdputstr(STDERR_FILENO, "Out of memory\n");
 		_exit(1);
@@ -50,12 +51,15 @@ xcalloc(size_t number, size_t size)
 void *
 xmalloc(size_t size)
 {
-    void *p = malloc(size);
-    if (p == NULL) {
-	rtld_fdputstr(STDERR_FILENO, "Out of memory\n");
-	_exit(1);
-    }
-    return p;
+
+	void *p;
+
+	p = __crt_malloc(size);
+	if (p == NULL) {
+		rtld_fdputstr(STDERR_FILENO, "Out of memory\n");
+		_exit(1);
+	}
+	return (p);
 }
 
 char *


More information about the svn-src-head mailing list