Page MenuHomeFreeBSD

D18330.diff
No OneTemporary

D18330.diff

Index: head/sys/powerpc/powerpc/exec_machdep.c
===================================================================
--- head/sys/powerpc/powerpc/exec_machdep.c
+++ head/sys/powerpc/powerpc/exec_machdep.c
@@ -124,6 +124,10 @@
static int grab_mcontext(struct thread *, mcontext_t *, int);
+#ifdef __powerpc64__
+extern struct sysentvec elf64_freebsd_sysvec_v2;
+#endif
+
void
sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
{
@@ -1014,11 +1018,18 @@
#endif
} else {
#ifdef __powerpc64__
- register_t entry_desc[3];
- (void)copyin((void *)entry, entry_desc, sizeof(entry_desc));
- tf->srr0 = entry_desc[0];
- tf->fixreg[2] = entry_desc[1];
- tf->fixreg[11] = entry_desc[2];
+ if (td->td_proc->p_sysent == &elf64_freebsd_sysvec_v2) {
+ tf->srr0 = (register_t)entry;
+ /* ELFv2 ABI requires that the global entry point be in r12. */
+ tf->fixreg[12] = (register_t)entry;
+ }
+ else {
+ register_t entry_desc[3];
+ (void)copyin((void *)entry, entry_desc, sizeof(entry_desc));
+ tf->srr0 = entry_desc[0];
+ tf->fixreg[2] = entry_desc[1];
+ tf->fixreg[11] = entry_desc[2];
+ }
tf->srr1 = psl_userset | PSL_FE_DFLT;
#endif
}

File Metadata

Mime Type
text/plain
Expires
Sun, Feb 1, 11:10 AM (15 h, 33 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28350548
Default Alt Text
D18330.diff (1 KB)

Event Timeline