CVS commit: src/libexec/ld.elf_so/arch/aarch64

2024-07-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Jul 22 23:18:50 UTC 2024

Modified Files:
src/libexec/ld.elf_so/arch/aarch64: rtld_start.S

Log Message:
ld.elf_so aarch64/rtld_start.S: Sprinkle comments.

No functional change intended.

Prompted by PR lib/58154.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/libexec/ld.elf_so/arch/aarch64/rtld_start.S

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/arch/aarch64/rtld_start.S
diff -u src/libexec/ld.elf_so/arch/aarch64/rtld_start.S:1.5 src/libexec/ld.elf_so/arch/aarch64/rtld_start.S:1.6
--- src/libexec/ld.elf_so/arch/aarch64/rtld_start.S:1.5	Thu Mar 24 12:12:00 2022
+++ src/libexec/ld.elf_so/arch/aarch64/rtld_start.S	Mon Jul 22 23:18:50 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: rtld_start.S,v 1.5 2022/03/24 12:12:00 andvar Exp $ */
+/* $NetBSD: rtld_start.S,v 1.6 2024/07/22 23:18:50 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
 
 #include 
 
-RCSID("$NetBSD: rtld_start.S,v 1.5 2022/03/24 12:12:00 andvar Exp $")
+RCSID("$NetBSD: rtld_start.S,v 1.6 2024/07/22 23:18:50 riastradh Exp $")
 
 /*
  * void _rtld_start(void (*cleanup)(void), const Obj_Entry *obj,
@@ -146,87 +146,122 @@ ENTRY_NP(_rtld_bind_start)
 END(_rtld_bind_start)
 
 /*
- * struct rel_tlsdesc {
- *  uint64_t resolver_fnc;
- *  uint64_t resolver_arg;
+ * Entry points used by _rtld_tlsdesc_fill.  They will be passed in x0
+ * a pointer to:
  *
+ *	struct rel_tlsdesc {
+ *		uint64_t resolver_fnc;
+ *		uint64_t resolver_arg;
+ *	};
  *
- * uint64_t _rtld_tlsdesc_static(struct rel_tlsdesc *);
+ * They are called with nonstandard calling convention and must
+ * preserve all registers except x0.
+ */
+
+/*
+ * uint64_t@x0
+ * _rtld_tlsdesc_static(struct rel_tlsdesc *rel_tlsdesc@x0);
+ *
+ *	Resolver function for TLS symbols resolved at load time.
  *
- * Resolver function for TLS symbols resolved at load time
+ *	rel_tlsdesc->resolver_arg is the offset of the static
+ *	thread-local storage region, relative to the start of the TCB.
+ *
+ *	Nonstandard calling convention: Must preserve all registers
+ *	except x0.
  */
 ENTRY(_rtld_tlsdesc_static)
 	.cfi_startproc
-	ldr	x0, [x0, #8]
-	ret
+	ldr	x0, [x0, #8]		/* x0 := tcboffset */
+	ret/* return x0 = tcboffset */
 	.cfi_endproc
 END(_rtld_tlsdesc_static)
 
 /*
- * uint64_t _rtld_tlsdesc_undef(void);
+ * uint64_t@x0
+ * _rtld_tlsdesc_undef(struct rel_tlsdesc *rel_tlsdesc@x0);
+ *
+ *	Resolver function for weak and undefined TLS symbols.
  *
- * Resolver function for weak and undefined TLS symbols
+ *	rel_tlsdesc->resolver_arg is the Elf_Rela rela->r_addend.
+ *
+ *	Nonstandard calling convention: Must preserve all registers
+ *	except x0.
  */
 ENTRY(_rtld_tlsdesc_undef)
 	.cfi_startproc
-	str	x1, [sp, #-16]!
+	str	x1, [sp, #-16]!		/* save x1 on stack */
 	.cfi_adjust_cfa_offset	16
 
-	mrs	x1, tpidr_el0
-	ldr	x0, [x0, #8]
-	sub	x0, x0, x1
+	mrs	x1, tpidr_el0		/* x1 := current thread tcb */
+	ldr	x0, [x0, #8]		/* x0 := rela->r_addend */
+	sub	x0, x0, x1		/* x0 := rela->r_addend - tcb */
 
-	ldr	x1, [sp], #16
-	.cfi_adjust_cfa_offset 	-16
+	ldr	x1, [sp], #16		/* restore x1 from stack */
+	.cfi_adjust_cfa_offset	-16
 	.cfi_endproc
-	ret
+	ret/* return x0 = rela->r_addend - tcb */
 END(_rtld_tlsdesc_undef)
 
 /*
- * uint64_t _rtld_tlsdesc_dynamic(struct rel_tlsdesc *);
+ * uint64_t@x0
+ * _rtld_tlsdesc_dynamic(struct rel_tlsdesc *tlsdesc@x0);
+ *
+ *	Resolver function for TLS symbols from dlopen().
  *
- * Resolver function for TLS symbols from dlopen()
+ *	rel_tlsdesc->resolver_arg is a pointer to a struct tls_data
+ *	object allocated during relocation.
+ *
+ *	Nonstandard calling convention: Must preserve all registers
+ *	except x0.
  */
 ENTRY(_rtld_tlsdesc_dynamic)
 	.cfi_startproc
 
 	/* Save registers used in fast path */
-	stp	x1,  x2, [sp, #(-2 * 16)]!
-	stp	x3,  x4, [sp, #(1 * 16)]
+	stp	x1, x2, [sp, #(-2 * 16)]!
+	stp	x3, x4, [sp, #(1 * 16)]
 	.cfi_adjust_cfa_offset	2 * 16
 	.cfi_rel_offset		x1, 0
 	.cfi_rel_offset		x2, 8
 	.cfi_rel_offset		x3, 16
 	.cfi_rel_offset		x4, 24
 
-	/* Test fastpath - inlined version of __tls_get_addr. */
+	/* Try for the fast path -- inlined version of __tls_get_addr. */
 
-	ldr	x1, [x0, #8]		/* tlsdesc ptr */
-	mrs	x4, tpidr_el0
-	ldr	x0, [x4]		/* DTV pointer (tcb->tcb_dtv) */
+	ldr	x1, [x0, #8]		/* x1 := tlsdesc (struct tls_data *) */
+	mrs	x4, tpidr_el0		/* x4 := tcb */
+	ldr	x0, [x4]		/* x0 := dtv = tcb->tcb_dtv */
 
-	ldr	x3, [x0, #-8]		/* DTV_MAX_INDEX(dtv) */
-	ldr	x2, [x1, #0]		/* tlsdesc->td_tlsindex */
+	ldr	x3, [x0, #-8]		/* x3 := max = DTV_MAX_INDEX(dtv) */
+	ldr	x2, [x1, #0]		/* x2 := idx = tlsdesc->td_tlsindex */
 	cmp	x2, x3
-	b.lt	1f			/* Slow path */
+	b.lt	1f			/* Slow path if idx < max */
+	/* XXX PR lib/58154 */
+
+	ldr	x3, [x0, x2, lsl #3]	/* x3 := dtv[idx] */
+	cbz	x3, 1f			/* Slow path if 

CVS commit: src/libexec/ld.elf_so/arch/aarch64

2024-07-22 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Jul 22 23:18:50 UTC 2024

Modified Files:
src/libexec/ld.elf_so/arch/aarch64: rtld_start.S

Log Message:
ld.elf_so aarch64/rtld_start.S: Sprinkle comments.

No functional change intended.

Prompted by PR lib/58154.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/libexec/ld.elf_so/arch/aarch64/rtld_start.S

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



CVS commit: src/libexec/ld.elf_so/arch/aarch64

2022-12-03 Thread Nick Hudson
Module Name:src
Committed By:   skrll
Date:   Sat Dec  3 09:10:40 UTC 2022

Modified Files:
src/libexec/ld.elf_so/arch/aarch64: mdreloc.c

Log Message:
Whitespace. NFC.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/libexec/ld.elf_so/arch/aarch64/mdreloc.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/arch/aarch64/mdreloc.c
diff -u src/libexec/ld.elf_so/arch/aarch64/mdreloc.c:1.16 src/libexec/ld.elf_so/arch/aarch64/mdreloc.c:1.17
--- src/libexec/ld.elf_so/arch/aarch64/mdreloc.c:1.16	Tue Jun 21 06:52:17 2022
+++ src/libexec/ld.elf_so/arch/aarch64/mdreloc.c	Sat Dec  3 09:10:40 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: mdreloc.c,v 1.16 2022/06/21 06:52:17 skrll Exp $ */
+/* $NetBSD: mdreloc.c,v 1.17 2022/12/03 09:10:40 skrll Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
 
 #include 
 #ifndef lint
-__RCSID("$NetBSD: mdreloc.c,v 1.16 2022/06/21 06:52:17 skrll Exp $");
+__RCSID("$NetBSD: mdreloc.c,v 1.17 2022/12/03 09:10:40 skrll Exp $");
 #endif /* not lint */
 
 #include 
@@ -288,15 +288,14 @@ _rtld_relocate_nonplt_objects(Obj_Entry 
 			rdbg(("TLS_DTPREL %s in %s --> %p",
 			obj->strtab + obj->symtab[symnum].st_name,
 			obj->path, (void *)*where));
-
 			break;
+
 		case R_TLS_TYPE(TLS_DTPMOD):
 			*where = (Elf_Addr)(defobj->tlsindex);
 
 			rdbg(("TLS_DTPMOD %s in %s --> %p",
 			obj->strtab + obj->symtab[symnum].st_name,
 			obj->path, (void *)*where));
-
 			break;
 
 		case R_TLS_TYPE(TLS_TPREL):



CVS commit: src/libexec/ld.elf_so/arch/aarch64

2022-12-03 Thread Nick Hudson
Module Name:src
Committed By:   skrll
Date:   Sat Dec  3 09:10:40 UTC 2022

Modified Files:
src/libexec/ld.elf_so/arch/aarch64: mdreloc.c

Log Message:
Whitespace. NFC.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/libexec/ld.elf_so/arch/aarch64/mdreloc.c

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