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