Index: freebsd/sys/kern/uipc_syscalls.c
===================================================================
--- freebsd/sys/kern/uipc_syscalls.c	(revision e6f6b5e619ab741327db656fe16ca1765c43817d)
+++ freebsd/sys/kern/uipc_syscalls.c	(revision 94b5368388f51b535256b65d278998a48b0c4a3f)
@@ -88,4 +88,11 @@
 static int getpeername1(struct thread *td, struct getpeername_args *uap,
 			int compat);
+#else /* __rtems__ */
+struct getsockaddr_sockaddr {
+	struct sockaddr	header;
+	char		data[SOCK_MAXADDRLEN - sizeof(struct sockaddr)];
+};
+
+static int getsockaddr(struct sockaddr **namp, caddr_t uaddr, size_t len);
 #endif /* __rtems__ */
 static int sockargs(struct mbuf **, char *, socklen_t, int);
@@ -257,9 +264,15 @@
 	struct sockaddr *sa;
 	int error;
+#ifdef __rtems__
+	struct getsockaddr_sockaddr gsa;
+	sa = &gsa.header;
+#endif /* __rtems__ */
 
 	error = getsockaddr(&sa, uap->name, uap->namelen);
 	if (error == 0) {
 		error = kern_bindat(td, AT_FDCWD, uap->s, sa);
+#ifndef __rtems__
 		free(sa, M_SONAME);
+#endif /* __rtems__ */
 	}
 	return (error);
@@ -328,9 +341,15 @@
 	struct sockaddr *sa;
 	int error;
+#ifdef __rtems__
+	struct getsockaddr_sockaddr gsa;
+	sa = &gsa.header;
+#endif /* __rtems__ */
 
 	error = getsockaddr(&sa, uap->name, uap->namelen);
 	if (error == 0) {
 		error = kern_bindat(td, uap->fd, uap->s, sa);
+#ifndef __rtems__
 		free(sa, M_SONAME);
+#endif /* __rtems__ */
 	}
 	return (error);
@@ -675,9 +694,15 @@
 	struct sockaddr *sa;
 	int error;
+#ifdef __rtems__
+	struct getsockaddr_sockaddr gsa;
+	sa = &gsa.header;
+#endif /* __rtems__ */
 
 	error = getsockaddr(&sa, uap->name, uap->namelen);
 	if (error == 0) {
 		error = kern_connectat(td, AT_FDCWD, uap->s, sa);
+#ifndef __rtems__
 		free(sa, M_SONAME);
+#endif /* __rtems__ */
 	}
 	return (error);
@@ -774,9 +799,15 @@
 	struct sockaddr *sa;
 	int error;
+#ifdef __rtems__
+	struct getsockaddr_sockaddr gsa;
+	sa = &gsa.header;
+#endif /* __rtems__ */
 
 	error = getsockaddr(&sa, uap->name, uap->namelen);
 	if (error == 0) {
 		error = kern_connectat(td, uap->fd, uap->s, sa);
+#ifndef __rtems__
 		free(sa, M_SONAME);
+#endif /* __rtems__ */
 	}
 	return (error);
@@ -931,4 +962,8 @@
 	struct sockaddr *to;
 	int error;
+#ifdef __rtems__
+	struct getsockaddr_sockaddr gto;
+	to = &gto.header;
+#endif /* __rtems__ */
 
 #ifdef CAPABILITY_MODE
@@ -979,5 +1014,7 @@
 
 bad:
+#ifndef __rtems__
 	free(to, M_SONAME);
+#endif /* __rtems__ */
 	return (error);
 }
@@ -2112,5 +2149,7 @@
 {
 	struct sockaddr *sa;
-	int error;
+#ifndef __rtems__
+	int error;
+#endif /* __rtems__ */
 
 	if (len > SOCK_MAXADDRLEN)
@@ -2118,4 +2157,5 @@
 	if (len < offsetof(struct sockaddr, sa_data[0]))
 		return (EINVAL);
+#ifndef __rtems__
 	sa = malloc(len, M_SONAME, M_WAITOK);
 	error = copyin(uaddr, sa, len);
@@ -2131,3 +2171,8 @@
 	}
 	return (error);
-}
+#else /* __rtems__ */
+	sa = memcpy(*namp, uaddr, len);
+	sa->sa_len = len;
+	return (0);
+#endif /* __rtems__ */
+}
Index: freebsd/sys/sys/socketvar.h
===================================================================
--- freebsd/sys/sys/socketvar.h	(revision e6f6b5e619ab741327db656fe16ca1765c43817d)
+++ freebsd/sys/sys/socketvar.h	(revision 94b5368388f51b535256b65d278998a48b0c4a3f)
@@ -343,5 +343,7 @@
  * From uipc_socket and friends
  */
+#ifndef __rtems__
 int	getsockaddr(struct sockaddr **namp, caddr_t uaddr, size_t len);
+#endif /* __rtems__ */
 int	getsock_cap(struct thread *td, int fd, cap_rights_t *rightsp,
 	    struct file **fpp, u_int *fflagp, struct filecaps *havecaps);
Index: rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h
===================================================================
--- rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h	(revision e6f6b5e619ab741327db656fe16ca1765c43817d)
+++ rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h	(revision 94b5368388f51b535256b65d278998a48b0c4a3f)
@@ -1179,5 +1179,4 @@
 #define	GetProxyPort _bsd_GetProxyPort
 #define	get_random_bytes _bsd_get_random_bytes
-#define	getsockaddr _bsd_getsockaddr
 #define	GetStateIn _bsd_GetStateIn
 #define	GetStateOut _bsd_GetStateOut
