-------- Original Message -------- Subject: [Tinyos-help] segmentation fault in msp430-gcc 3.2.3 compiler [fix] Date: Tue, 28 Aug 2007 13:28:52 +0200 From: Rene Mueller <[email protected]> To: [email protected] Hi, I stumbled upon an internal compiler bug of the msp430-gcc 3.2.3. I built the compiler using the build-mspgcc script (TinyOS-1.x). This bug is also present in the msp430-tools RPMs available for download. A single-line change should fix the bug. Not knowing to whom this issue might be of interest I post it to this list. The bug is triggered by the __nesc_hton_uint64 (conversion used for nx_uint64_t). However, it always occurs whenever a uint8 is zero-extended to an uint64. Example: -- unsigned long long foo(unsigned char *x) { return x[0]; } -- $ msp430-gcc -c gccbug.c gccbug.c: In function `foo': gccbug.c:20: internal error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions. Plugging cc1 into the debugger reveals a null pointer access in the 'zeroextendqidi' helper routine of the code generator. -- Program received signal SIGSEGV, Segmentation fault. zeroextendqidi (insn=0xb7f214e0, operands=0x8248a20, len=0x0) at /home/muellren/TinyOS/tinyos-1.x/tools/src/mspgcc/build/gcc-3.2.3/gcc/config/msp430/msp430.c:5421 5421 *len -= 3; -- The pointer is a NULL value passed to the function from output_154 (isns-output.c): -- static const char * output_154 (operands, insn) rtx *operands ATTRIBUTE_UNUSED; rtx insn ATTRIBUTE_UNUSED; { return zeroextendqidi(insn, operands,NULL); } -- Here is a trivial patch: --- gcc-3.2.3/gcc/config/msp430/msp430.c 2007-08-28 11:07:50.000000000 +0200 +++ gcc-3.2.3patched/gcc/config/msp430/msp430.c 2007-08-28 11:19:17.000000000 +0200 @@ -5414,11 +5414,11 @@ dummy += 6; OUT_INSN (len, "clr\t%B0", operands); OUT_INSN (len, "clr\t%C0", operands); OUT_INSN (len, "clr\t%D0", operands); - if (GET_CODE (operands[0]) == REG) + if ((GET_CODE (operands[0]) == REG) && len) *len -= 3; if (len) *len = dummy; The generated assembly code seems to be ok. The buggy code is present in the gcc-3.3 directory of the mspgcc.sourceforge.net CVS repository (note the numbering mismatch, the gcc-3.3 directory is known to work with 3.2.x). However, the bug is fixed in the gcc-3.4 tree. If one insists on gcc 3.2.3 one could just apply another patch in the build-mspgcc script. regards René _______________________________________________ Tinyos-help mailing list [email protected] https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
