>
> This patch has been review by sun, fred and jianxin.
>
Sorry for missing review info in commit message.
> ------------------------------
>
> Message: 5
> Date: Mon, 19 Jul 2010 16:51:32 +0700
> From: "C. Bergstr?m" <cbergst...@pathscale.com>
> Subject: Re: [Open64-devel] r3286 - trunk/osprey/wgen
> To: Sun Chan <sun.c...@gmail.com>
> Cc: open64-devel@lists.sourceforge.net
> Message-ID: <4c442024.5040...@pathscale.com>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>
> Sun Chan wrote:
> > please state who reviewed the code
> >
> In git there's a feature to add a signed off by tag.. I don't know if
> SVN has something similar, but could make it easier to add annotations
> about who has reviewed the code.
>
>
>
> ------------------------------
>
> Message: 6
> Date: Mon, 19 Jul 2010 15:18:48 -0700 (PDT)
> From: Steve Ellcey <s...@cup.hp.com>
> Subject: [Open64-devel] Ping: Patch to fix some unaligned warnings on
> IA64
> To: open64-devel@lists.sourceforge.net
> Message-ID: <201007192218.o6jmimh13...@lucas.cup.hp.com>
> Content-Type: text/plain; charset=us-ascii
>
>
> I originally sent this patch out on July 1 but I have not gotten any
> reviews of it so I am resending it. Can a gatekeeper review this
> please?
>
> Steve Ellcey
> s...@cup.hp.com
>
> -----------
>
> When running the open64 compiler on IA64 it is fairly common to get
> kernel messages about accessing unaligned memory. I have looked at
> where these unaligned memory accesses are coming from and this patch
> fixes one of those areas. In this case we are doing integer or pointer
> assignments from memory locations that may not be aligned properly for
> those types. This patch changes the code to use strncpy's in these
> cases to avoid the unaligned accesses. I created some new
> routines while doing this to try and clean the code up a bit.
>
> Can a gatekeeper review this code and approve it for checkin?
>
> It was tested on x86 and IA64.
>
> Steve Ellcey
> s...@cup.hp.com
>
>
> Index: osprey/common/util/flags.c
> ===================================================================
> --- osprey/common/util/flags.c (revision 3261)
> +++ osprey/common/util/flags.c (working copy)
> @@ -233,6 +233,15 @@ typedef union optval {
> void *p;
> } OPTVAL;
>
> +typedef union optvaltypes {
> + BOOL b;
> + UINT32 ui32;
> + INT32 i32;
> + UINT64 ui64;
> + INT64 i64;
> + void *p;
> +} OPTVALTYPES;
> +
> typedef struct odesc_aux {
> INT16 flags; /* Various status flags */
> BOOL *specified; /* The option has been specified (user's) */
> @@ -306,7 +315,102 @@ typedef struct ogroup_aux {
> #define OGA_internal(o) (OGA_flags(o) & OGF_INTERNAL)
> #define Set_OGA_internal(o) (OGA_flags(o) |= OGF_INTERNAL)
> #define Reset_OGA_internal(o) (OGA_flags(o) &= ~OGF_INTERNAL)
> +
> +/* ====================================================================
> + * OVK_Scalar_Kind
> + * return TRUE if OPTION_KIND is a scalar.
> + * ====================================================================*/
> +static BOOL
> +OVK_Scalar_Kind(OPTION_KIND o)
> +{
> + return (o == OVK_NONE || o == OVK_BOOL || o == OVK_INT32
> + || o == OVK_UINT32 || o == OVK_INT64 || o == OVK_UINT64);
> +}
> +
> +/* ====================================================================
> + * OVK_Pointer_Kind
> + * return TRUE if OPTION_KIND is a pointer.
> + * ====================================================================*/
> +static BOOL
> +OVK_Pointer_Kind(OPTION_KIND o)
> +{
> + return (o == OVK_SELF || o == OVK_NAME || o == OVK_LIST);
> +}
> +
> +/* ====================================================================
> + * Get_OVK_Size
> + * return size of the different OPTION_KIND's.
> + * ====================================================================*/
> +static INT
> +Get_OVK_Size(OPTION_KIND o)
> +{
> + switch (o) {
> + case OVK_NONE:
> + case OVK_BOOL:
> + return sizeof(BOOL);
> + case OVK_INT32:
> + return sizeof(INT32);
> + case OVK_UINT32:
> + return sizeof(UINT32);
> + case OVK_INT64:
> + return sizeof(INT64);
> + case OVK_UINT64:
> + return sizeof(UINT64);
> + case OVK_NAME:
> + case OVK_SELF:
> + return sizeof(char *);
> + case OVK_LIST:
> + return sizeof(OPTION_LIST *);
> + default: /* INVALID, OBSOLETE, REPLACED, UNIMPLEMENTED */
> + return 0;
> + }
> +}
> +
> +/* ====================================================================
> + * Get_OVK_UINT64_Val
> + * return UINT64 value for pointer to OVK variable of type o.
> + * ====================================================================*/
> +static UINT64
> +Get_OVK_UINT64_Val(void *p, OPTION_KIND o)
> +{
> + char b[1024];
> + OPTVALTYPES v;
> +
> + if (Get_OVK_Size(o) > 0)
> + strncpy((void *) &v, p, Get_OVK_Size(o));
>
> + switch (o) {
> + case OVK_NONE:
> + case OVK_BOOL:
> + return (UINT64) v.b;
> + case OVK_INT32:
> + return (UINT64) v.i32;
> + case OVK_UINT32:
> + return (UINT64) v.ui32;
> + case OVK_INT64:
> + return (UINT64) v.i64;
> + case OVK_UINT64:
> + return v.ui64;
> + default: /* INVALID, OBSOLETE, REPLACED, UNIMPLEMENTED */
> + return 0;
> + }
> +}
> +
> +/* ====================================================================
> + * Get_OVK_Pointer_Val
> + * return pointer value for pointer to OVK variable of type o.
> + * ====================================================================*/
> +static void *
> +Get_OVK_Pointer_Val(void *p, OPTION_KIND o)
> +{
> + OPTVALTYPES v;
> + if (OVK_Pointer_Kind(o)) {
> + strncpy((void *) &v, p, Get_OVK_Size(o));
> + return (void *) v.p;
> + }
> + else
> + return NULL;
> +}
>
> /* ====================================================================
> * Copy_option
> @@ -317,66 +421,19 @@ static INT
> Copy_option(OPTION_DESC *odesc, char *container, BOOL save)
> {
> void *var = ODESC_variable(odesc);
> + INT size = Get_OVK_Size(ODESC_kind(odesc));
> +
> Is_True(ODESC_can_change_by_pragma(odesc),
> ("Copy_option, trying to copy option that cannot change"));
>
> - if (save) {
> - switch (ODESC_kind(odesc)) {
> - case OVK_NONE:
> - case OVK_BOOL:
> - *((BOOL *)container) = *((BOOL *)var);
> - return sizeof(BOOL);
> - case OVK_INT32:
> - *((INT32 *)container) = *((INT32 *)var);
> - return sizeof(INT32);
> - case OVK_UINT32:
> - *((UINT32 *)container) = *((UINT32 *)var);
> - return sizeof(UINT32);
> - case OVK_INT64:
> - *((INT64 *)container) = *((INT64 *)var);
> - return sizeof(INT64);
> - case OVK_UINT64:
> - *((UINT64 *)container) = *((UINT64 *)var);
> - return sizeof(UINT64);
> - case OVK_NAME:
> - case OVK_SELF:
> - *((char **)container) = *((char **)var);
> - return sizeof(char *);
> - case OVK_LIST:
> - *((OPTION_LIST **)container) = *((OPTION_LIST **)var);
> - return sizeof(OPTION_LIST *);
> - default: /* INVALID, OBSOLETE, REPLACED, UNIMPLEMENTED */
> - return 0;
> - }
> - } else { /* restore */
> - switch (ODESC_kind(odesc)) {
> - case OVK_NONE:
> - case OVK_BOOL:
> - *((BOOL *)var) = *((BOOL *)container);
> - return sizeof(BOOL);
> - case OVK_INT32:
> - *((INT32 *)var) = *((INT32 *)container);
> - return sizeof(INT32);
> - case OVK_UINT32:
> - *((UINT32 *)var) = *((UINT32 *)container);
> - return sizeof(UINT32);
> - case OVK_INT64:
> - *((INT64 *)var) = *((INT64 *)container);
> - return sizeof(INT64);
> - case OVK_UINT64:
> - *((UINT64 *)var) = *((UINT64 *)container);
> - return sizeof(UINT64);
> - case OVK_NAME:
> - case OVK_SELF:
> - *((char **)var) = *((char **)container);
> - return sizeof(char *);
> - case OVK_LIST:
> - *((OPTION_LIST **)var) = *((OPTION_LIST **)container);
> - return sizeof(OPTION_LIST *);
> - default: /* INVALID, OBSOLETE, REPLACED, UNIMPLEMENTED */
> - return 0;
> - }
> + if (size > 0) {
> + if (save)
> + strncpy(container, var, size);
> + else /* restore */
> + strncpy(var, container, size);
> }
> +
> + return size;
> }
>
>
> @@ -399,33 +456,10 @@ Duplicate_Value ( OPTION_DESC *odesc, OP
> {
> void *var = ODESC_variable(odesc);
>
> - switch ( ODESC_kind(odesc) ) {
> - case OVK_NONE:
> - case OVK_BOOL:
> - container->i = *((BOOL *)var);
> - break;
> - case OVK_INT32:
> - container->i = *((INT32 *)var);
> - break;
> - case OVK_UINT32:
> - container->i = *((UINT32 *)var);
> - break;
> - case OVK_INT64:
> - container->i = *((INT64 *)var);
> - break;
> - case OVK_UINT64:
> - container->i = *((UINT64 *)var);
> - break;
> - case OVK_NAME:
> - case OVK_SELF:
> - container->p = *((char **)var);
> - break;
> - case OVK_LIST:
> - container->p = *((OPTION_LIST **)var);
> - break;
> - default:
> - break;
> - }
> + if (OVK_Scalar_Kind(ODESC_kind(odesc)))
> + container->i = Get_OVK_UINT64_Val(var, ODESC_kind(odesc));
> + else if (OVK_Pointer_Kind(ODESC_kind(odesc)))
> + container->p = Get_OVK_Pointer_Val(var, ODESC_kind(odesc));
> }
>
>
> @@ -613,6 +647,7 @@ Update_Scalar_Value ( OPTION_DESC *odesc
> {
> void *var = ODESC_variable(odesc);
> ODESC_AUX *aux = ODESC_aux(odesc);
> + OPTVALTYPES v;
>
> if ( val != ODA_last_i(aux) ) {
> Set_ODA_mod(aux);
> @@ -623,23 +658,25 @@ Update_Scalar_Value ( OPTION_DESC *odesc
> switch ( ODESC_kind(odesc) ) {
> case OVK_NONE:
> case OVK_BOOL:
> - *((BOOL *)var) = (BOOL)val;
> + v.b = (BOOL)val;
> break;
> case OVK_INT32:
> - *((INT32 *)var) = (INT32)val;
> + v.i32 = (INT32)val;
> break;
> case OVK_UINT32:
> - *((UINT32 *)var) = (UINT32)val;
> + v.ui32 = (UINT32)val;
> break;
> case OVK_INT64:
> - *((INT64 *)var) = (UINT64)val;
> + v.i64 = (UINT64)val;
> break;
> case OVK_UINT64:
> - *((UINT64 *)var) = (UINT64)val;
> + v.ui64 = (UINT64)val;
> break;
> default:
> break;
> }
> + if (Get_OVK_Size(ODESC_kind(odesc)) > 0)
> + strncpy(var, (void *) &v, Get_OVK_Size(ODESC_kind(odesc)));
> }
>
> /* ====================================================================
> @@ -964,33 +1001,12 @@ Modified_Option ( OPTION_DESC *odesc )
> ODESC_AUX *aux = ODESC_aux(odesc);
> UINT64 cur;
>
> - switch ( ODESC_kind(odesc) ) {
> - case OVK_NONE:
> - case OVK_BOOL:
> - cur = (UINT64)*((BOOL*)var);
> - break;
> - case OVK_INT32:
> - cur = (UINT64)*((INT32*)var);
> - break;
> - case OVK_UINT32:
> - cur = (UINT64)*((UINT32*)var);
> - break;
> - case OVK_INT64:
> - cur = (UINT64)*((INT64*)var);
> - break;
> - case OVK_UINT64:
> - cur = (UINT64)*((UINT64*)var);
> - break;
> - case OVK_NAME:
> - case OVK_SELF:
> - case OVK_LIST:
> - return ( *((void**)var) != ODA_last_p(aux) );
> - default:
> - break;
> - }
> -
> - /* For the scalar cases, still need to check: */
> - return ( cur != ODA_last_i(aux) );
> + if (OVK_Scalar_Kind(ODESC_kind(odesc)))
> + return (Get_OVK_UINT64_Val(var, ODESC_kind(odesc)) !=
> ODA_last_i(aux));
> + else if (OVK_Pointer_Kind(ODESC_kind(odesc)))
> + return (Get_OVK_Pointer_Val(var, ODESC_kind(odesc)) !=
> ODA_last_p(aux));
> + else
> + return FALSE;
> }
>
> /* ====================================================================
>
>
>
>
> ------------------------------
>
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Sprint
> What will you do first with EVO, the first 4G phone?
> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
>
> ------------------------------
>
> _______________________________________________
> Open64-devel mailing list
> Open64-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/open64-devel
>
>
> End of Open64-devel Digest, Vol 44, Issue 16
> ********************************************
>
--
Best Regards.
Shen Ruifen
tel: 010-51266989-226
------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel