Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F98288070
D34595.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D34595.diff
View Options
diff --git a/contrib/elftoolchain/readelf/readelf.c b/contrib/elftoolchain/readelf/readelf.c
--- a/contrib/elftoolchain/readelf/readelf.c
+++ b/contrib/elftoolchain/readelf/readelf.c
@@ -1197,6 +1197,7 @@
case 0x102: return "NT_PPC_VSX (ppc VSX registers)";
case 0x202: return "NT_X86_XSTATE (x86 XSAVE extended state)";
case 0x400: return "NT_ARM_VFP (arm VFP registers)";
+ case 0x401: return "NT_ARM_TLS (arm TLS register)";
case 0x406: return "NT_ARM_ADDR_MASK (arm address mask)";
default: return (note_type_unknown(nt));
}
diff --git a/sys/arm/arm/ptrace_machdep.c b/sys/arm/arm/ptrace_machdep.c
--- a/sys/arm/arm/ptrace_machdep.c
+++ b/sys/arm/arm/ptrace_machdep.c
@@ -67,6 +67,28 @@
ELF_REGSET(regset_arm_vfp);
#endif
+static bool
+get_arm_tls(struct regset *rs, struct thread *td, void *buf,
+ size_t *sizep)
+{
+ if (buf != NULL) {
+ KASSERT(*sizep == sizeof(td->td_pcb->pcb_regs.sf_tpidrurw),
+ ("%s: invalid size", __func__));
+ memcpy(buf, &td->td_pcb->pcb_regs.sf_tpidrurw,
+ sizeof(td->td_pcb->pcb_regs.sf_tpidrurw));
+ }
+ *sizep = sizeof(td->td_pcb->pcb_regs.sf_tpidrurw);
+
+ return (true);
+}
+
+static struct regset regset_arm_tls = {
+ .note = NT_ARM_TLS,
+ .size = sizeof(uint32_t),
+ .get = get_arm_tls,
+};
+ELF_REGSET(regset_arm_tls);
+
int
cpu_ptrace(struct thread *td, int req, void *addr, int data)
{
diff --git a/sys/arm64/arm64/ptrace_machdep.c b/sys/arm64/arm64/ptrace_machdep.c
--- a/sys/arm64/arm64/ptrace_machdep.c
+++ b/sys/arm64/arm64/ptrace_machdep.c
@@ -81,6 +81,54 @@
ELF32_REGSET(regset_arm_vfp);
#endif
+static bool
+get_arm64_tls(struct regset *rs, struct thread *td, void *buf,
+ size_t *sizep)
+{
+ if (buf != NULL) {
+ KASSERT(*sizep == sizeof(td->td_pcb->pcb_tpidr_el0),
+ ("%s: invalid size", __func__));
+ memcpy(buf, &td->td_pcb->pcb_tpidr_el0,
+ sizeof(td->td_pcb->pcb_tpidr_el0));
+ }
+ *sizep = sizeof(td->td_pcb->pcb_tpidr_el0);
+
+ return (true);
+}
+
+static struct regset regset_arm64_tls = {
+ .note = NT_ARM_TLS,
+ .size = sizeof(uint64_t),
+ .get = get_arm64_tls,
+};
+ELF_REGSET(regset_arm64_tls);
+
+#ifdef COMPAT_FREEBSD32
+static bool
+get_arm_tls(struct regset *rs, struct thread *td, void *buf,
+ size_t *sizep)
+{
+ if (buf != NULL) {
+ uint32_t tp;
+
+ KASSERT(*sizep == sizeof(uint32_t),
+ ("%s: invalid size", __func__));
+ tp = (uint32_t)td->td_pcb->pcb_tpidr_el0;
+ memcpy(buf, &tp, sizeof(tp));
+ }
+ *sizep = sizeof(uint32_t);
+
+ return (true);
+}
+
+static struct regset regset_arm_tls = {
+ .note = NT_ARM_TLS,
+ .size = sizeof(uint32_t),
+ .get = get_arm_tls,
+};
+ELF32_REGSET(regset_arm_tls);
+#endif
+
int
ptrace_set_pc(struct thread *td, u_long addr)
{
diff --git a/sys/sys/elf_common.h b/sys/sys/elf_common.h
--- a/sys/sys/elf_common.h
+++ b/sys/sys/elf_common.h
@@ -825,6 +825,7 @@
#define NT_PPC_VSX 0x102 /* PowerPC VSX registers */
#define NT_X86_XSTATE 0x202 /* x86 XSAVE extended state. */
#define NT_ARM_VFP 0x400 /* ARM VFP registers */
+#define NT_ARM_TLS 0x401 /* ARM TLS register */
#define NT_ARM_ADDR_MASK 0x406 /* arm64 address mask (e.g. for TBI) */
/* GNU note types. */
diff --git a/usr.bin/gcore/elfcore.c b/usr.bin/gcore/elfcore.c
--- a/usr.bin/gcore/elfcore.c
+++ b/usr.bin/gcore/elfcore.c
@@ -372,6 +372,9 @@
elf_putregnote(NT_FPREGSET, tids[i], sb);
elf_putnote(NT_THRMISC, elf_note_thrmisc, tids + i, sb);
elf_putnote(NT_PTLWPINFO, elf_note_ptlwpinfo, tids + i, sb);
+#if defined(__aarch64__) || defined(__arm__)
+ elf_putregnote(NT_ARM_TLS, tids[i], sb);
+#endif
#if (defined(ELFCORE_COMPAT_32) && defined(__aarch64__)) || defined(__arm__)
elf_putregnote(NT_ARM_VFP, tids[i], sb);
#endif
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Oct 3, 10:29 PM (21 h, 57 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
13492174
Default Alt Text
D34595.diff (3 KB)
Attached To
Mode
D34595: arm,arm64: Add a NT_ARM_TLS read-only register set.
Attached
Detach File
Event Timeline
Log In to Comment