This patch looks good to me. Please go ahead. 2012/2/17 Gang Yu <yugang...@gmail.com>: > Thanks for more suggestions, the more refined one: > > Index:osprey/be/cg/cgemit.cxx > =================================================================== > --- osprey/be/cg/cgemit.cxx (trunk) > +++ osprey/be/cg/cgemit.cxx (working copy) > @@ -3637,6 +3637,46 @@ Modify_Asm_String (char* asm_string, UINT32 position, > bool memory, > > asm_string = Replace_Substring(asm_string, x86pattern, suffix); > } > } > + > + // open64.net bug950. Handle any template modifers > + // %L,%W,%B,%Q,%S,%T. Referrence i386.c(gcc) print_operand. > + { > + char L_suffix[8] = {0}; > + char W_suffix[8] = {0}; > + char B_suffix[8] = {0}; > + char Q_suffix[8] = {0}; > + char S_suffix[8] = {0}; > + char T_suffix[8] = {0}; > + int rL,rW,rB,rQ,rS,rT; > + rL = snprintf(L_suffix, sizeof(L_suffix), "%%L%d", position); > + rW = snprintf(W_suffix, sizeof(W_suffix), "%%W%d", position); > + rB = snprintf(B_suffix, sizeof(B_suffix), "%%B%d", position); > + rQ = snprintf(Q_suffix, sizeof(Q_suffix), "%%Q%d", position); > + rS = snprintf(S_suffix, sizeof(S_suffix), "%%S%d", position); > + rT = snprintf(T_suffix, sizeof(T_suffix), "%%T%d", position); > + FmtAssert(( rL >= 0 && rL < sizeof(L_suffix)) && > + ( rW >= 0 && rW < sizeof(W_suffix)) && > + ( rB >= 0 && rB < sizeof(B_suffix)) && > + ( rQ >= 0 && rQ < sizeof(Q_suffix)) && > + ( rS >= 0 && rS < sizeof(S_suffix)) && > + ( rT >= 0 && rT < sizeof(T_suffix)), > > + ("Error, Unable to generate format string in > Modify_Asm_String!\n")); > + if (strstr(asm_string, L_suffix) != NULL) { > + asm_string = Replace_Substring(asm_string, L_suffix, "l"); > + } else if (strstr(asm_string, W_suffix) != NULL) { > + asm_string = Replace_Substring(asm_string, W_suffix, "w"); > + } else if (strstr(asm_string, B_suffix) != NULL) { > + asm_string = Replace_Substring(asm_string, B_suffix, "b"); > + } else if (strstr(asm_string, Q_suffix) != NULL) { > + asm_string = Replace_Substring(asm_string, Q_suffix, "l"); > + } else if (strstr(asm_string, S_suffix) != NULL) { > + asm_string = Replace_Substring(asm_string, S_suffix, "s"); > + } else if (strstr(asm_string, T_suffix) != NULL) { > + asm_string = Replace_Substring(asm_string, T_suffix, "t"); > + } > + } > + > + > #endif // TARG_X8664 > > return asm_string; > > > Regards > Gang > > > > On Fri, Feb 17, 2012 at 2:19 PM, Gang Yu <yugang...@gmail.com> wrote: >> >> Thanks for the security code suggestions. >> >> The updated patch below: >> >> --- a/osprey/be/cg/cgemit.cxx >> +++ b/osprey/be/cg/cgemit.cxx >> @@ -3637,6 +3637,39 @@ Modify_Asm_String (char* asm_string, UINT32 >> position, bool memory, >> >> asm_string = Replace_Substring(asm_string, x86pattern, suffix); >> } >> } >> + >> + // open64.net bug950. Handle any template modifers >> + // %L,%W,%B,%Q,%S,%T. Referrence i386.c(gcc) print_operand. >> + { >> + char L_suffix[5]={0}; >> + char W_suffix[5]={0}; >> + char B_suffix[5]={0}; >> + char Q_suffix[5]={0}; >> + char S_suffix[5]={0}; >> + char T_suffix[5]={0}; >> + FmtAssert((snprintf(L_suffix,sizeof(L_suffix),"%%L%d",position) >=0) >> && >> + (snprintf(W_suffix,sizeof(W_suffix),"%%W%d",position) >=0) >> && >> + (snprintf(B_suffix,sizeof(B_suffix),"%%B%d",position) >=0) >> && >> + (snprintf(Q_suffix,sizeof(Q_suffix),"%%Q%d",position) >=0) >> && >> + (snprintf(S_suffix,sizeof(S_suffix),"%%S%d",position) >=0) >> && >> + (snprintf(T_suffix,sizeof(T_suffix),"%%T%d",position) >=0), >> + ("Error, Unable to generate format string in >> Modify_Asm_String!\n")); >> >> + if (strstr(asm_string, L_suffix) != NULL) { >> + asm_string = Replace_Substring(asm_string, L_suffix, "l"); >> + } else if (strstr(asm_string, W_suffix) != NULL) { >> + asm_string = Replace_Substring(asm_string, W_suffix, "w"); >> + } else if (strstr(asm_string, B_suffix) != NULL) { >> + asm_string = Replace_Substring(asm_string, B_suffix, "b"); >> + } else if (strstr(asm_string, Q_suffix) != NULL) { >> + asm_string = Replace_Substring(asm_string, Q_suffix, "l"); >> + } else if (strstr(asm_string, S_suffix) != NULL) { >> + asm_string = Replace_Substring(asm_string, S_suffix, "s"); >> + } else if (strstr(asm_string, T_suffix) != NULL) { >> + asm_string = Replace_Substring(asm_string, T_suffix, "t"); >> + } >> + } >> + >> + >> #endif // TARG_X8664 >> >> >> Regards >> Gang >> >> >> >> On Thu, Feb 16, 2012 at 1:14 PM, Jian-Xin Lai <laij...@gmail.com> wrote: >>> >>> sprintf should be replace by snprintf and the return value must be >>> checked to make sure there is no buffer overflow. >>> >>> 2012/2/15 Gang Yu <yugang...@gmail.com>: >>> > Hi, >>> > >>> > Could a gatekeeper please help review the fix for bug950? >>> > >>> > a sample case: >>> > void >>> > outb(unsigned short port, unsigned char val) >>> > { >>> > __asm__ __volatile__("out%B0 (%1)" : :"a" (val), "d" (port)); >>> > } >>> > >>> > opencc compiles it with: >>> > /tmp/ccspin#.i28qhO.s: Assembler messages: >>> > /tmp/ccspin#.i28qhO.s:36: Error: invalid character '%' in mnemonic >>> > The assembler output: >>> > # 5 __asm__ __volatile__("out%B0 (%1)" : :"a" (val), "d" (port)); >>> > movl %edx,%edx # [1] >>> > movl %eax,%eax # [1] >>> > out%B0 (%dx) >>> > is undesired, we miss the handling of op suffix format in ASM template. >>> > >>> > Suggested patch: >>> > >>> > --- a/osprey/be/cg/cgemit.cxx >>> > +++ b/osprey/be/cg/cgemit.cxx >>> > @@ -3637,6 +3637,38 @@ Modify_Asm_String (char* asm_string, UINT32 >>> > position, >>> > bool memory, >>> > asm_string = Replace_Substring(asm_string, x86pattern, suffix); >>> > } >>> > } >>> > + >>> > + // open64.net bug950. Handle any template modifers >>> > + // %L,%W,%B,%Q,%S,%T. Referrence i386.c(gcc) print_operand. >>> > + { >>> > + char L_suffix[5]; >>> > + char W_suffix[5]; >>> > + char B_suffix[5]; >>> > + char Q_suffix[5]; >>> > + char S_suffix[5]; >>> > + char T_suffix[5]; >>> > + sprintf(L_suffix,"%%L%d",position); >>> > + sprintf(W_suffix,"%%W%d",position); >>> > + sprintf(B_suffix,"%%B%d",position); >>> > + sprintf(Q_suffix,"%%Q%d",position); >>> > + sprintf(S_suffix,"%%S%d",position); >>> > + sprintf(T_suffix,"%%T%d",position); >>> > + if (strstr(asm_string, L_suffix) != NULL) { >>> > + asm_string = Replace_Substring(asm_string, L_suffix, "l"); >>> > + } else if (strstr(asm_string, W_suffix) != NULL) { >>> > + asm_string = Replace_Substring(asm_string, W_suffix, "w"); >>> > + } else if (strstr(asm_string, B_suffix) != NULL) { >>> > + asm_string = Replace_Substring(asm_string, B_suffix, "b"); >>> > + } else if (strstr(asm_string, Q_suffix) != NULL) { >>> > + asm_string = Replace_Substring(asm_string, Q_suffix, "l"); >>> > + } else if (strstr(asm_string, S_suffix) != NULL) { >>> > + asm_string = Replace_Substring(asm_string, S_suffix, "s"); >>> > + } else if (strstr(asm_string, T_suffix) != NULL) { >>> > + asm_string = Replace_Substring(asm_string, T_suffix, "t"); >>> > + } >>> > + } >>> > + >>> > + >>> > #endif // TARG_X8664 >>> > >>> > TIA for the review >>> > >>> > >>> > Regards >>> > Gang >>> > >>> > >>> > ------------------------------------------------------------------------------ >>> > Virtualization & Cloud Management Using Capacity Planning >>> > Cloud computing makes use of virtualization - but cloud computing >>> > also focuses on allowing computing to be delivered as a service. >>> > http://www.accelacomm.com/jaw/sfnl/114/51521223/ >>> > _______________________________________________ >>> > Open64-devel mailing list >>> > Open64-devel@lists.sourceforge.net >>> > https://lists.sourceforge.net/lists/listinfo/open64-devel >>> > >>> >>> >>> >>> -- >>> Regards, >>> Lai Jian-Xin >> >> >
-- Regards, Lai Jian-Xin ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel