From 75521904d7c3dbe11337904d9bead2518c94cc50 Mon Sep 17 00:00:00 2001 From: raf Date: Tue, 6 Dec 2005 16:40:08 -0800 Subject: 6309243 gcc and libproc don't get along on SPARC 6309410 gcc and SPARC-specific dtrace code don't get along 6309451 gcc and SPARC krtld don't get along 6309456 gcc and procfs don't get along on SPARC 6310667 gcc and sparc kernel don't get along 6358155 When compiled with gcc, the socal driver panic's the machine --- usr/src/uts/sparc/dtrace/dtrace_isa.c | 9 +++++---- usr/src/uts/sparc/dtrace/fasttrap_isa.c | 7 +++++-- usr/src/uts/sparc/fs/proc/prmachdep.c | 13 +++++++------ usr/src/uts/sparc/krtld/doreloc.c | 16 +++++++++------- usr/src/uts/sparc/krtld/kobj_alloc.c | 21 +++++++++++++-------- usr/src/uts/sparc/krtld/kobj_boot.c | 17 +++++++++-------- usr/src/uts/sparc/os/obpsym.c | 5 +++-- usr/src/uts/sparc/os/syscall.c | 16 +++++++++------- usr/src/uts/sparc/syscall/getcontext.c | 16 ++++++++-------- 9 files changed, 68 insertions(+), 52 deletions(-) (limited to 'usr/src/uts/sparc') diff --git a/usr/src/uts/sparc/dtrace/dtrace_isa.c b/usr/src/uts/sparc/dtrace/dtrace_isa.c index 537bf8fa5d..52e6a2fdaf 100644 --- a/usr/src/uts/sparc/dtrace/dtrace_isa.c +++ b/usr/src/uts/sparc/dtrace/dtrace_isa.c @@ -19,6 +19,7 @@ * * CDDL HEADER END */ + /* * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. @@ -141,7 +142,7 @@ dtrace_getpcstack(pc_t *pcstack, int pcstack_limit, int aframes, uint32_t *pc) int delay = 0, branches = 0, taken = 0; if (depth < pcstack_limit) - pcstack[depth++] = (pc_t)pc; + pcstack[depth++] = (pc_t)(uintptr_t)pc; /* * Our heuristic is exactly that -- a heuristic -- and there @@ -780,7 +781,7 @@ dtrace_getreg(struct regs *rp, uint_t reg) value = dtrace_fulword(&fr->fr_local[reg - 16]); DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT); } else { - struct frame32 *fr = (void *)(caddr32_t)rp->r_sp; + struct frame32 *fr = (void *)(uintptr_t)(caddr32_t)rp->r_sp; if (mpcb->mpcb_wbcnt > 0) { struct rwindow32 *rwin = (void *)mpcb->mpcb_wbuf; @@ -842,7 +843,7 @@ fake_restore: if (cpu_core[CPU->cpu_id].cpuc_dtrace_flags & CPU_DTRACE_FAULT) return (0); } else { - struct frame32 *fr = (void *)(caddr32_t)rp->r_sp; + struct frame32 *fr = (void *)(uintptr_t)(caddr32_t)rp->r_sp; if (mpcb->mpcb_wbcnt > 0) { struct rwindow32 *rwin = (void *)mpcb->mpcb_wbuf; @@ -881,7 +882,7 @@ got_fp: value = dtrace_fulword(&fr->fr_local[reg - 16]); DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT); } else { - struct frame32 *fr = (void *)(caddr32_t)fp; + struct frame32 *fr = (void *)(uintptr_t)(caddr32_t)fp; if (mpcb->mpcb_wbcnt > 0) { struct rwindow32 *rwin = (void *)mpcb->mpcb_wbuf; diff --git a/usr/src/uts/sparc/dtrace/fasttrap_isa.c b/usr/src/uts/sparc/dtrace/fasttrap_isa.c index 721804a6cb..d84b208650 100644 --- a/usr/src/uts/sparc/dtrace/fasttrap_isa.c +++ b/usr/src/uts/sparc/dtrace/fasttrap_isa.c @@ -19,6 +19,7 @@ * * CDDL HEADER END */ + /* * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. @@ -1387,7 +1388,8 @@ fasttrap_getreg(struct regs *rp, uint_t reg) if (fasttrap_fulword(&fr->fr_local[reg - 16], &value) != 0) goto err; } else { - struct frame32 *fr = (struct frame32 *)(caddr32_t)rp->r_sp; + struct frame32 *fr = + (struct frame32 *)(uintptr_t)(caddr32_t)rp->r_sp; uint32_t *v32 = (uint32_t *)&value; if (mpcb->mpcb_wbcnt > 0) { @@ -1494,7 +1496,8 @@ fasttrap_putreg(struct regs *rp, uint_t reg, ulong_t value) return; } } else { - struct frame32 *fr = (struct frame32 *)(caddr32_t)rp->r_sp; + struct frame32 *fr = + (struct frame32 *)(uintptr_t)(caddr32_t)rp->r_sp; struct rwindow32 *rwin = (struct rwindow32 *)mpcb->mpcb_wbuf; uint32_t v32 = (uint32_t)value; diff --git a/usr/src/uts/sparc/fs/proc/prmachdep.c b/usr/src/uts/sparc/fs/proc/prmachdep.c index b025b55a98..3d27ecff08 100644 --- a/usr/src/uts/sparc/fs/proc/prmachdep.c +++ b/usr/src/uts/sparc/fs/proc/prmachdep.c @@ -19,6 +19,7 @@ * * CDDL HEADER END */ + /* * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. @@ -746,8 +747,8 @@ prdostep(void) return; if (p->p_model == DATAMODEL_ILP32) { - pc = (caddr_t)(caddr32_t)r->r_pc; - npc = (caddr_t)(caddr32_t)r->r_npc; + pc = (caddr_t)(uintptr_t)(caddr32_t)r->r_pc; + npc = (caddr_t)(uintptr_t)(caddr32_t)r->r_npc; } else { pc = (caddr_t)r->r_pc; npc = (caddr_t)r->r_npc; @@ -834,8 +835,8 @@ prundostep(void) ASSERT(r != NULL); if (p->p_model == DATAMODEL_ILP32) { - pc = (caddr_t)(caddr32_t)r->r_pc; - npc = (caddr_t)(caddr32_t)r->r_npc; + pc = (caddr_t)(uintptr_t)(caddr32_t)r->r_pc; + npc = (caddr_t)(uintptr_t)(caddr32_t)r->r_npc; } else { pc = (caddr_t)r->r_pc; npc = (caddr_t)r->r_npc; @@ -903,7 +904,7 @@ prstop(int why, int what) if (mpcb->mpcb_wstate == WSTATE_USER32) { rw_size = sizeof (struct rwindow32); - sp = (caddr_t)(caddr32_t)r->r_sp; + sp = (caddr_t)(uintptr_t)(caddr32_t)r->r_sp; rwp = sp; is64 = 0; } else { @@ -954,7 +955,7 @@ prstop(int why, int what) fp_prsave(pfp); if (p->p_model == DATAMODEL_ILP32) - pc = (caddr_t)(caddr32_t)r->r_pc; + pc = (caddr_t)(uintptr_t)(caddr32_t)r->r_pc; else pc = (caddr_t)r->r_pc; diff --git a/usr/src/uts/sparc/krtld/doreloc.c b/usr/src/uts/sparc/krtld/doreloc.c index eb783f4d7c..74b3b660f7 100644 --- a/usr/src/uts/sparc/krtld/doreloc.c +++ b/usr/src/uts/sparc/krtld/doreloc.c @@ -19,10 +19,12 @@ * * CDDL HEADER END */ + /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ + #pragma ident "%Z%%M% %I% %E% SMI" #if defined(_KERNEL) @@ -139,7 +141,7 @@ const Rel_entry reloc_table[R_SPARC_NUM] = { 8, 0, 0}, /* R_SPARC_PLT64 */ {0x0, FLG_RE_PLTREL | FLG_RE_VERIFY | FLG_RE_ADDRELATIVE, 8, 0, 0}, -/* R_SPARC_HIX22 */ {0xffffffffffffffff, FLG_RE_NOTREL | FLG_RE_VERIFY, +/* R_SPARC_HIX22 */ {(Xword)(-1LL), FLG_RE_NOTREL | FLG_RE_VERIFY, 4, 10, 22}, /* V9 - HaL */ /* R_SPARC_LOX10 */ {0x3ff, FLG_RE_NOTREL | FLG_RE_SIGN, 4, 0, 13}, /* V9 - HaL */ @@ -179,7 +181,7 @@ const Rel_entry reloc_table[R_SPARC_NUM] = { /* R_SPARC_TLS_IE_LD */ {0x0, FLG_RE_TLSINS | FLG_RE_TLSIE, 0, 0, 0}, /* R_SPARC_TLS_IE_LDX */ {0x0, FLG_RE_TLSINS | FLG_RE_TLSIE, 0, 0, 0}, /* R_SPARC_TLS_IE_ADD */ {0x0, FLG_RE_TLSINS | FLG_RE_TLSIE, 0, 0, 0}, -/* R_SPARC_TLS_LE_HIX22 */ {(unsigned long)((long)-1), FLG_RE_VERIFY | +/* R_SPARC_TLS_LE_HIX22 */ {(Xword)(-1LL), FLG_RE_VERIFY | FLG_RE_TLSINS | FLG_RE_NOTREL | FLG_RE_TLSLE, 4, 10, 22}, /* R_SPARC_TLS_LE_LOX10 */ {0x3ff, FLG_RE_TLSINS | FLG_RE_SIGN | @@ -406,10 +408,10 @@ do_reloc(unsigned char rtype, unsigned char *off, Xword *value, for (i = field_size - 1; i >= 0; i--) dest[i] = off[i]; } else { - if (((field_size == 2) && ((long long)off & 0x1)) || - ((field_size == 4) && ((long long)off & 0x3)) || - ((field_size == 8) && ((long long)off & 0x7))) { - REL_ERR_NONALIGN(file, sym, rtype, off); + if (((field_size == 2) && ((uintptr_t)off & 0x1)) || + ((field_size == 4) && ((uintptr_t)off & 0x3)) || + ((field_size == 8) && ((uintptr_t)off & 0x7))) { + REL_ERR_NONALIGN(file, sym, rtype, (uintptr_t)off); return (0); } switch (field_size) { diff --git a/usr/src/uts/sparc/krtld/kobj_alloc.c b/usr/src/uts/sparc/krtld/kobj_alloc.c index d85c304824..ab179e267f 100644 --- a/usr/src/uts/sparc/krtld/kobj_alloc.c +++ b/usr/src/uts/sparc/krtld/kobj_alloc.c @@ -19,6 +19,7 @@ * * CDDL HEADER END */ + /* * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. @@ -122,7 +123,7 @@ kobj_tmp_verify(void) size_t resid = KOBJ_TMP_SMALL_PAGE_SIZE - 8; size_t sz, asz; - if (*(uint32_t *)pg != (uint32_t)lpg) { + if (*(uint32_t *)pg != (uint32_t)(uintptr_t)lpg) { _kobj_printf(ops, "krtld temp mem corrupt: "); _kobj_printf(ops, "page %p ", pg); _kobj_printf(ops, "prev pointer %8x ", *(uint32_t *)pg); @@ -198,7 +199,8 @@ kobj_tmp_verify(void) } lpg = pg; - pg = (caddr_t)*(uint32_t *)(pg + KOBJ_TMP_SMALL_PAGE_SIZE - 4); + pg = (caddr_t)(uintptr_t) + *(uint32_t *)(pg + KOBJ_TMP_SMALL_PAGE_SIZE - 4); } } @@ -248,7 +250,8 @@ kobj_tmp_bigalloc(size_t sz) } } - kobj_tmp.tmp_bigmap[kobj_tmp.tmp_bigmapidx].bm_addr = (uint32_t)buf; + kobj_tmp.tmp_bigmap[kobj_tmp.tmp_bigmapidx].bm_addr = + (uint32_t)(uintptr_t)buf; kobj_tmp.tmp_bigmap[kobj_tmp.tmp_bigmapidx].bm_size = sz; return (buf); @@ -295,11 +298,12 @@ kobj_tmp_alloc(size_t sz) bzero(new, KOBJ_TMP_SMALL_PAGE_SIZE); kobj_tmp.tmp_used += KOBJ_TMP_SMALL_PAGE_SIZE; - *(uint32_t *)new = (uint32_t)kobj_tmp.tmp_page; + *(uint32_t *)new = (uint32_t)(uintptr_t)kobj_tmp.tmp_page; if (kobj_tmp.tmp_page != NULL) { *(uint32_t *)(kobj_tmp.tmp_page + - KOBJ_TMP_SMALL_PAGE_SIZE - 4) = (uint32_t)new; + KOBJ_TMP_SMALL_PAGE_SIZE - 4) = + (uint32_t)(uintptr_t)new; } kobj_tmp.tmp_page = new; @@ -353,12 +357,13 @@ kobj_tmp_free(void) if (bm->bm_addr == NULL) break; - bzero((caddr_t)bm->bm_addr, bm->bm_size); - BOP_FREE(ops, (caddr_t)bm->bm_addr, bm->bm_size); + bzero((caddr_t)(uintptr_t)bm->bm_addr, bm->bm_size); + BOP_FREE(ops, (caddr_t)(uintptr_t)bm->bm_addr, bm->bm_size); } for (pg = kobj_tmp.tmp_base; pg != NULL; pg = npg) { - npg = (caddr_t)*(uint32_t *)(pg + KOBJ_TMP_SMALL_PAGE_SIZE - 4); + npg = (caddr_t)(uintptr_t) + *(uint32_t *)(pg + KOBJ_TMP_SMALL_PAGE_SIZE - 4); bzero(pg, KOBJ_TMP_SMALL_PAGE_SIZE); BOP_FREE(ops, pg, KOBJ_TMP_SMALL_PAGE_SIZE); diff --git a/usr/src/uts/sparc/krtld/kobj_boot.c b/usr/src/uts/sparc/krtld/kobj_boot.c index 1637a949b7..014e198efd 100644 --- a/usr/src/uts/sparc/krtld/kobj_boot.c +++ b/usr/src/uts/sparc/krtld/kobj_boot.c @@ -19,8 +19,9 @@ * * CDDL HEADER END */ + /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -135,14 +136,14 @@ _kobj_boot( } } - sh = (uint_t)bootaux[BA_LDSHDR].ba_ptr; + sh = (uint_t)(uintptr_t)bootaux[BA_LDSHDR].ba_ptr; sh_num = ((Ehdr *)bootaux[BA_LDELF].ba_ptr)->e_shnum; sh_size = ((Ehdr *)bootaux[BA_LDELF].ba_ptr)->e_shentsize; /* * Build cache table for section addresses. */ for (i = 0; i < sh_num; i++) { - section[i] = (Shdr *)sh; + section[i] = (Shdr *)(uintptr_t)sh; sh += sh_size; } /* @@ -354,7 +355,7 @@ _kobj_boot( } if (rtype != R_SPARC_UA32 && (off & 3) != 0) return; - offptr = (unsigned int *)off; + offptr = (unsigned int *)(uintptr_t)off; /* * insert value calculated at reference point * 3 cases - normal byte order aligned, normal byte @@ -453,10 +454,10 @@ _kobj_boot( symval.l = value + addend; - ((char *)off)[0] = symval.c[0]; - ((char *)off)[1] = symval.c[1]; - ((char *)off)[2] = symval.c[2]; - ((char *)off)[3] = symval.c[3]; + ((char *)(uintptr_t)off)[0] = symval.c[0]; + ((char *)(uintptr_t)off)[1] = symval.c[1]; + ((char *)(uintptr_t)off)[2] = symval.c[2]; + ((char *)(uintptr_t)off)[3] = symval.c[3]; break; } case R_SPARC_10: diff --git a/usr/src/uts/sparc/os/obpsym.c b/usr/src/uts/sparc/os/obpsym.c index e2064b26ef..63e715740d 100644 --- a/usr/src/uts/sparc/os/obpsym.c +++ b/usr/src/uts/sparc/os/obpsym.c @@ -19,8 +19,9 @@ * * CDDL HEADER END */ + /* - * Copyright 1991-2002 Sun Microsystems, Inc. All rights reserved. + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -131,7 +132,7 @@ value_to_name(uintptr_t value, char *symbol) ulong_t offset; char *name; - DPRINTF1("value_to_name: Looking for %p\n", value); + DPRINTF1("value_to_name: Looking for %p\n", (void *)value); do { if (modp->mod_mp && diff --git a/usr/src/uts/sparc/os/syscall.c b/usr/src/uts/sparc/os/syscall.c index 8f985e6a95..b9ccef63dd 100644 --- a/usr/src/uts/sparc/os/syscall.c +++ b/usr/src/uts/sparc/os/syscall.c @@ -19,6 +19,7 @@ * * CDDL HEADER END */ + /* * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. @@ -152,7 +153,7 @@ xregrestore(klwp_t *lwp, int shared) is64 = 1; } else { rwinsize = sizeof (struct rwindow32); - sp = (caddr_t)(caddr32_t)sp; + sp = (caddr_t)(uintptr_t)(caddr32_t)(uintptr_t)sp; rwp = sp; is64 = 0; } @@ -307,8 +308,8 @@ save_syscall_args() lwp->lwp_arg[3] = (uint32_t)rp->r_o4; lwp->lwp_arg[4] = (uint32_t)rp->r_o5; if (nargs > 5) { - ua = (caddr_t)(caddr32_t)(rp->r_sp + - MINFRAME32); + ua = (caddr_t)(uintptr_t)(caddr32_t)(uintptr_t) + (rp->r_sp + MINFRAME32); for (i = 5; i < nargs; i++) { uint32_t a; if (fuword32(ua, &a) != 0) @@ -325,8 +326,8 @@ save_syscall_args() lwp->lwp_arg[4] = (uint32_t)rp->r_o4; lwp->lwp_arg[5] = (uint32_t)rp->r_o5; if (nargs > 6) { - ua = (caddr_t)(caddr32_t)(rp->r_sp + - MINFRAME32); + ua = (caddr_t)(uintptr_t)(caddr32_t)(uintptr_t) + (rp->r_sp + MINFRAME32); for (i = 6; i < nargs; i++) { uint32_t a; if (fuword32(ua, &a) != 0) @@ -911,8 +912,9 @@ sig_check: if (copyin((stack32_t *)lwp->lwp_ustack, &stk32, sizeof (stack32_t)) == 0 && (stk32.ss_size == lwp->lwp_old_stk_ctl || - stk32.ss_size == 0) && - stk32.ss_sp == (caddr32_t)(top - stk32.ss_size)) { + stk32.ss_size == 0) && + stk32.ss_sp == + (caddr32_t)(uintptr_t)(top - stk32.ss_size)) { stk32.ss_sp += stk32.ss_size - new_size; stk32.ss_size = new_size; diff --git a/usr/src/uts/sparc/syscall/getcontext.c b/usr/src/uts/sparc/syscall/getcontext.c index f13ca7eab9..1f35c963f2 100644 --- a/usr/src/uts/sparc/syscall/getcontext.c +++ b/usr/src/uts/sparc/syscall/getcontext.c @@ -19,8 +19,9 @@ * * CDDL HEADER END */ + /* - * Copyright 2003 Sun Microsystems, Inc. All rights reserved. + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -394,13 +395,13 @@ savecontext32(ucontext32_t *ucp, k_sigset_t mask, struct fq32 *dfq) if (lwp->lwp_sigaltstack.ss_flags == SS_ONSTACK) { ucp->uc_stack.ss_sp = - (caddr32_t)lwp->lwp_sigaltstack.ss_sp; + (caddr32_t)(uintptr_t)lwp->lwp_sigaltstack.ss_sp; ucp->uc_stack.ss_size = (size32_t)lwp->lwp_sigaltstack.ss_size; ucp->uc_stack.ss_flags = SS_ONSTACK; } else { ucp->uc_stack.ss_sp = - (caddr32_t)p->p_usrstack - p->p_stksize; + (caddr32_t)(uintptr_t)p->p_usrstack - p->p_stksize; ucp->uc_stack.ss_size = (size32_t)p->p_stksize; ucp->uc_stack.ss_flags = 0; @@ -509,7 +510,7 @@ getsetcontext32(int flag, void *arg) fpp->fpu_q_entrysize <= 0 || fpp->fpu_q_entrysize > sizeof (struct fq32)) return (set_errno(EINVAL)); - if (copyin((void *)fpp->fpu_q, fpu_q, + if (copyin((void *)(uintptr_t)fpp->fpu_q, fpu_q, fpp->fpu_qcnt * fpp->fpu_q_entrysize)) return (set_errno(EFAULT)); } else { @@ -531,7 +532,7 @@ getsetcontext32(int flag, void *arg) */ gwin = kmem_zalloc(sizeof (gwindows32_t), KM_SLEEP); - if (copyin((void *)uc.uc_mcontext.gwins, + if (copyin((void *)(uintptr_t)uc.uc_mcontext.gwins, &gwin->wbcnt, sizeof (gwin->wbcnt))) { kmem_free(gwin, sizeof (gwindows32_t)); return (set_errno(EFAULT)); @@ -544,7 +545,7 @@ getsetcontext32(int flag, void *arg) SPARC_MAXREGWINDOW * sizeof (caddr32_t) + sizeof (int32_t); if (gwin_size > sizeof (gwindows32_t) || - copyin((void *)uc.uc_mcontext.gwins, + copyin((void *)(uintptr_t)uc.uc_mcontext.gwins, gwin, gwin_size)) { kmem_free(gwin, sizeof (gwindows32_t)); return (set_errno(EFAULT)); @@ -561,8 +562,7 @@ getsetcontext32(int flag, void *arg) if (xregs_hasptr32(lwp, &uc) && ((xregs_size = xregs_getsize(curproc)) > 0)) { xregs = kmem_zalloc(xregs_size, KM_SLEEP); - if (copyin((void *) - xregs_getptr32(lwp, &uc), + if (copyin((void *)(uintptr_t)xregs_getptr32(lwp, &uc), xregs, xregs_size)) { kmem_free(xregs, xregs_size); if (gwin) -- cgit v1.2.3