Page MenuHomeFreeBSD

D40620.id123743.diff
No OneTemporary

D40620.id123743.diff

diff --git a/lib/libthr/arch/aarch64/Makefile.inc b/lib/libthr/arch/aarch64/Makefile.inc
--- a/lib/libthr/arch/aarch64/Makefile.inc
+++ b/lib/libthr/arch/aarch64/Makefile.inc
@@ -1,2 +1,3 @@
# $FreeBSD$
+SRCS+= _thread_start.S
diff --git a/lib/libthr/arch/aarch64/aarch64/_thread_start.S b/lib/libthr/arch/aarch64/aarch64/_thread_start.S
new file mode 100644
--- /dev/null
+++ b/lib/libthr/arch/aarch64/aarch64/_thread_start.S
@@ -0,0 +1,39 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2023 Dmitry Chagin <dchagin@FreeBSD.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <machine/asm.h>
+
+ .text
+
+ENTRY(_thread_start)
+ .cfi_undefined x30
+ mov x29, #0
+ mov x30, #0
+ bl thread_start
+END(_thread_start)
+
+ .section .note.GNU-stack,"",%progbits
diff --git a/lib/libthr/arch/amd64/Makefile.inc b/lib/libthr/arch/amd64/Makefile.inc
--- a/lib/libthr/arch/amd64/Makefile.inc
+++ b/lib/libthr/arch/amd64/Makefile.inc
@@ -1,6 +1,6 @@
#$FreeBSD$
-SRCS+= _umtx_op_err.S
+SRCS+= _umtx_op_err.S _thread_start.S
# With the current compiler and libthr code, using SSE in libthr
# does not provide enough performance improvement to outweigh
diff --git a/lib/libthr/arch/amd64/amd64/_thread_start.S b/lib/libthr/arch/amd64/amd64/_thread_start.S
new file mode 100644
--- /dev/null
+++ b/lib/libthr/arch/amd64/amd64/_thread_start.S
@@ -0,0 +1,40 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2023 Dmitry Chagin <dchagin@FreeBSD.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <machine/asm.h>
+
+ .text
+
+ENTRY(_thread_start)
+ .cfi_undefined %rip /* Terminate call stack. */
+ .cfi_def_cfa %rsp, 0
+ addq $8,%rsp /* Skip return address. */
+ .cfi_def_cfa %rsp, -8
+ callq thread_start
+END(_thread_start)
+
+ .section .note.GNU-stack,"",%progbits
diff --git a/lib/libthr/arch/arm/include/pthread_md.h b/lib/libthr/arch/arm/include/pthread_md.h
--- a/lib/libthr/arch/arm/include/pthread_md.h
+++ b/lib/libthr/arch/arm/include/pthread_md.h
@@ -50,4 +50,6 @@
return (NULL);
}
+__weak_reference(thread_start, _thread_start);
+
#endif /* _PTHREAD_MD_H_ */
diff --git a/lib/libthr/arch/i386/Makefile.inc b/lib/libthr/arch/i386/Makefile.inc
--- a/lib/libthr/arch/i386/Makefile.inc
+++ b/lib/libthr/arch/i386/Makefile.inc
@@ -1,6 +1,6 @@
# $FreeBSD$
-SRCS+= _umtx_op_err.S
+SRCS+= _umtx_op_err.S _thread_start.S
# With the current compiler and libthr code, using SSE in libthr
# does not provide enough performance improvement to outweigh
diff --git a/lib/libthr/arch/i386/i386/_thread_start.S b/lib/libthr/arch/i386/i386/_thread_start.S
new file mode 100644
--- /dev/null
+++ b/lib/libthr/arch/i386/i386/_thread_start.S
@@ -0,0 +1,40 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (C) 2023 Dmitry Chagin <dchagin@FreeBSD.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <machine/asm.h>
+
+ .text
+
+ENTRY(_thread_start)
+ .cfi_undefined %eip /* Terminate call stack. */
+ .cfi_def_cfa %esp, 0
+ addl $4,%esp /* Skip return address. */
+ .cfi_def_cfa %esp, -4
+ call thread_start
+END(_thread_start)
+
+ .section .note.GNU-stack,"",%progbits
diff --git a/lib/libthr/arch/powerpc/include/pthread_md.h b/lib/libthr/arch/powerpc/include/pthread_md.h
--- a/lib/libthr/arch/powerpc/include/pthread_md.h
+++ b/lib/libthr/arch/powerpc/include/pthread_md.h
@@ -53,4 +53,6 @@
#define HAS__UMTX_OP_ERR 1
+__weak_reference(thread_start, _thread_start);
+
#endif /* _PTHREAD_MD_H_ */
diff --git a/lib/libthr/arch/riscv/include/pthread_md.h b/lib/libthr/arch/riscv/include/pthread_md.h
--- a/lib/libthr/arch/riscv/include/pthread_md.h
+++ b/lib/libthr/arch/riscv/include/pthread_md.h
@@ -58,4 +58,6 @@
return (NULL);
}
+__weak_reference(thread_start, _thread_start);
+
#endif /* _PTHREAD_MD_H_ */
diff --git a/lib/libthr/thread/thr_create.c b/lib/libthr/thread/thr_create.c
--- a/lib/libthr/thread/thr_create.c
+++ b/lib/libthr/thread/thr_create.c
@@ -47,7 +47,7 @@
#include "thr_private.h"
static int create_stack(struct pthread_attr *pattr);
-static void thread_start(struct pthread *curthread);
+void thread_start(struct pthread *curthread) __hidden __dead2;
__weak_reference(_pthread_create, pthread_create);
@@ -155,7 +155,7 @@
locked = 1;
} else
locked = 0;
- param.start_func = (void (*)(void *)) thread_start;
+ param.start_func = (void (*)(void *))_thread_start;
param.arg = new_thread;
param.stack_base = new_thread->attr.stackaddr_attr;
param.stack_size = new_thread->attr.stacksize_attr;
@@ -250,7 +250,7 @@
return (ret);
}
-static void
+void
thread_start(struct pthread *curthread)
{
sigset_t set;
diff --git a/lib/libthr/thread/thr_private.h b/lib/libthr/thread/thr_private.h
--- a/lib/libthr/thread/thr_private.h
+++ b/lib/libthr/thread/thr_private.h
@@ -802,6 +802,7 @@
void _thread_exit(const char *, int, const char *) __hidden __dead2;
void _thread_exitf(const char *, int, const char *, ...) __hidden __dead2
__printflike(3, 4);
+void _thread_start(struct pthread *) __hidden __dead2;
int _thr_ref_add(struct pthread *, struct pthread *, int) __hidden;
void _thr_ref_delete(struct pthread *, struct pthread *) __hidden;
void _thr_ref_delete_unlocked(struct pthread *, struct pthread *) __hidden;

File Metadata

Mime Type
text/plain
Expires
Mon, Apr 28, 4:38 PM (30 m, 22 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17831738
Default Alt Text
D40620.id123743.diff (8 KB)

Event Timeline