This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/34013] New: callee-save register value sometimes corrupted when __stkchk called
- From: "acn1 at cam dot ac dot uk" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 7 Nov 2007 11:40:52 -0000
- Subject: [Bug c/34013] New: callee-save register value sometimes corrupted when __stkchk called
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
A subversion gcc, x86_64-pc-mingw32-gcc (GCC) 4.3.0 20071106
(experimental),
built with
$ ../configure --target=x86_64-pc-mingw32
built on cygwin running on Vista 64-bit.
I observe similar effects on a bunch of earlier versions too.
Then
x86_64-pc-mingw32-gcc -Wall -O2 cbug3.c -o cbug2 -DBAD=1 -save-temps
and NO warnings or other moans. The cbug3.i file follows.
My full script goes
x86_64-pc-mingw32-gcc -Wall -O0 cbug3.c -o cbug0
x86_64-pc-mingw32-gcc -Wall -O2 cbug3.c -o cbug2 -DBAD=1 -save-temps
./cbug0
1 2 3 4 5 6 000000000022FE68 0
1 2 3 4 5 6 000000000022FE68 0
./cbug2
1 2 3 4 5 6 000000000022FE58 0
1 401508 3 4 5 6 000000000022FE58 0
0: 0 0
...
and observe the difference made by -O2 rather than -O0 (-DBAD=1 does not
change that part of the effect). A variable4 has been corrupted, and checking
the .s file it lived in %r13.
An extract from said .s file shows
movl $8088, %eax
movq %rbx, -48(%rsp)
movq %rsi, -40(%rsp)
movq %rdi, -32(%rsp)
movq %rbp, -24(%rsp)
movq %r12, -16(%rsp)
movq %r13, -8(%rsp)
call ___chkstk
...
And I rather suspect that the "call" instruction there pushes a return
address onto the stack clobbering the %r13 values that gcc had been
attempting to save.
Here is the source code, NOT using any libraries (except __chkstk) and printf,
but printf is just to report the failure and I have no reason to believe it is
iomplicated. Soem messy code in the test stuff is to have procedures big enough
that they do not get incorporated in-line and try to ensure all potential
regiers usable for register variables are in active use.
==============
# 1 "cbug3.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "cbug3.c"
# 1
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/stdio.h"
1 3
# 9
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/stdio.h"
3
# 1
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/_mingw.h"
1 3
# 70
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/_mingw.h"
3
typedef int __int128 __attribute__ ((mode (TI)));
# 99
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/_mingw.h"
3
#pragma pack(push,_CRT_PACKING)
# 1
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/vadefs.h"
1 3
# 13
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/vadefs.h"
3
# 1
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/_mingw.h"
1 3
# 14
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/vadefs.h"
2 3
#pragma pack(push,_CRT_PACKING)
typedef unsigned long long uintptr_t;
# 34
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/vadefs.h"
3
typedef __builtin_va_list __gnuc_va_list;
typedef __gnuc_va_list va_list;
# 76
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/vadefs.h"
3
#pragma pack(pop)
# 102
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/_mingw.h"
2 3
# 188
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/_mingw.h"
3
typedef unsigned long long size_t;
# 197
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/_mingw.h"
3
typedef long long ssize_t;
# 206
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/_mingw.h"
3
typedef long long intptr_t;
# 225
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/_mingw.h"
3
typedef long long ptrdiff_t;
# 234
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/_mingw.h"
3
typedef unsigned short wchar_t;
typedef unsigned short wint_t;
typedef unsigned short wctype_t;
# 266
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/_mingw.h"
3
typedef int errcode;
typedef int errno_t;
typedef long __time32_t;
typedef long long __time64_t;
# 287
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/_mingw.h"
3
typedef __time64_t time_t;
# 328
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/_mingw.h"
3
struct threadlocaleinfostruct;
struct threadmbcinfostruct;
typedef struct threadlocaleinfostruct *pthreadlocinfo;
typedef struct threadmbcinfostruct *pthreadmbcinfo;
struct __lc_time_data;
typedef struct localeinfo_struct {
pthreadlocinfo locinfo;
pthreadmbcinfo mbcinfo;
} _locale_tstruct,*_locale_t;
typedef struct tagLC_ID {
unsigned short wLanguage;
unsigned short wCountry;
unsigned short wCodePage;
} LC_ID,*LPLC_ID;
typedef struct threadlocaleinfostruct {
int refcount;
unsigned int lc_codepage;
unsigned int lc_collate_cp;
unsigned long lc_handle[6];
LC_ID lc_id[6];
struct {
char *locale;
wchar_t *wlocale;
int *refcount;
int *wrefcount;
} lc_category[6];
int lc_clike;
int mb_cur_max;
int *lconv_intl_refcount;
int *lconv_num_refcount;
int *lconv_mon_refcount;
struct lconv *lconv;
int *ctype1_refcount;
unsigned short *ctype1;
const unsigned short *pctype;
const unsigned char *pclmap;
const unsigned char *pcumap;
struct __lc_time_data *lc_time_curr;
} threadlocinfo;
# 387
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/_mingw.h"
3
#pragma pack(pop)
# 10
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/stdio.h"
2 3
#pragma pack(push,_CRT_PACKING)
# 24
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/stdio.h"
3
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
# 76
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/stdio.h"
3
typedef long _off_t;
typedef long off_t;
typedef long long _off64_t;
typedef long long off64_t;
__attribute__ ((dllimport)) FILE *__attribute__((__cdecl__))
__iob_func(void);
typedef long long fpos_t;
# 136
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/stdio.h"
3
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _filbuf(FILE
*_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _flsbuf(int
_Ch,FILE *_File);
__attribute__ ((dllimport)) FILE *__attribute__((__cdecl__)) _fsopen(const
char *_Filename,const char *_Mode,int _ShFlag);
__attribute__ ((dllimport)) void __attribute__((__cdecl__)) clearerr(FILE
*_File);
__attribute__ ((dllimport)) errno_t __attribute__((__cdecl__))
clearerr_s(FILE *_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fclose(FILE
*_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fcloseall(void);
__attribute__ ((dllimport)) FILE *__attribute__((__cdecl__)) _fdopen(int
_FileHandle,const char *_Mode);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) feof(FILE *_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) ferror(FILE
*_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fflush(FILE
*_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fgetc(FILE
*_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fgetchar(void);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fgetpos(FILE
*_File ,fpos_t *_Pos);
__attribute__ ((dllimport)) char *__attribute__((__cdecl__)) fgets(char
*_Buf,int _MaxCount,FILE *_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fileno(FILE
*_File);
__attribute__ ((dllimport)) char *__attribute__((__cdecl__)) _tempnam(const
char *_DirName,const char *_FilePrefix);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _flushall(void);
__attribute__ ((dllimport)) FILE *__attribute__((__cdecl__)) fopen(const char
*_Filename,const char *_Mode);
FILE *fopen64(const char *filename,const char *mode);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fprintf(FILE
*_File,const char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fprintf_s(FILE
*_File,const char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fputc(int _Ch,FILE
*_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fputchar(int
_Ch);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fputs(const char
*_Str,FILE *_File);
__attribute__ ((dllimport)) size_t __attribute__((__cdecl__)) fread(void
*_DstBuf,size_t _ElementSize,size_t _Count,FILE *_File);
__attribute__ ((dllimport)) size_t __attribute__((__cdecl__)) fread_s(void
*_DstBuf,size_t _DstSize,size_t _ElementSize,size_t _Count,FILE *_File);
__attribute__ ((dllimport)) FILE *__attribute__((__cdecl__)) freopen(const
char *_Filename,const char *_Mode,FILE *_File);
int __attribute__((__cdecl__)) fscanf(FILE *_File,const char
*_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fscanf_l(FILE
*_File,const char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fscanf_s_l(FILE
*_File,const char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fsetpos(FILE
*_File,const fpos_t *_Pos);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fseek(FILE
*_File,long _Offset,int _Origin);
int fseeko64(FILE* stream, _off64_t offset, int whence);
__attribute__ ((dllimport)) long __attribute__((__cdecl__)) ftell(FILE
*_File);
_off64_t ftello64(FILE * stream);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fseeki64(FILE
*_File,long long _Offset,int _Origin);
__attribute__ ((dllimport)) long long __attribute__((__cdecl__))
_ftelli64(FILE *_File);
__attribute__ ((dllimport)) size_t __attribute__((__cdecl__)) fwrite(const
void *_Str,size_t _Size,size_t _Count,FILE *_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) getc(FILE *_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) getchar(void);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_getmaxstdio(void);
__attribute__ ((dllimport)) char *__attribute__((__cdecl__)) gets(char
*_Buffer);
int __attribute__((__cdecl__)) _getw(FILE *_File);
__attribute__ ((dllimport)) void __attribute__((__cdecl__)) perror(const char
*_ErrMsg);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _pclose(FILE
*_File);
__attribute__ ((dllimport)) FILE *__attribute__((__cdecl__)) _popen(const
char *_Command,const char *_Mode);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) printf(const char
*_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) printf_s(const
char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) putc(int _Ch,FILE
*_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) putchar(int _Ch);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) puts(const char
*_Str);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _putw(int
_Word,FILE *_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) remove(const char
*_Filename);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) rename(const char
*_OldFilename,const char *_NewFilename);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _unlink(const char
*_Filename);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) unlink(const char
*_Filename);
__attribute__ ((dllimport)) void __attribute__((__cdecl__)) rewind(FILE
*_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _rmtmp(void);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) scanf(const char
*_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _scanf_l(const
char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _scanf_s_l(const
char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) void __attribute__((__cdecl__)) setbuf(FILE
*_File,char *_Buffer);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _setmaxstdio(int
_Max);
__attribute__ ((dllimport)) unsigned int __attribute__((__cdecl__))
_set_output_format(unsigned int _Format);
__attribute__ ((dllimport)) unsigned int __attribute__((__cdecl__))
_get_output_format(void);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) setvbuf(FILE
*_File,char *_Buf,int _Mode,size_t _Size);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _snprintf_s(char
*_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) sprintf_s(char
*_DstBuf,size_t _DstSize,const char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _scprintf(const
char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) sscanf(const char
*_Src,const char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _sscanf_l(const
char *_Src,const char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _sscanf_s_l(const
char *_Src,const char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _snscanf(const
char *_Src,size_t _MaxCount,const char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _snscanf_l(const
char *_Src,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _snscanf_s(const
char *_Src,size_t _MaxCount,const char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _snscanf_s_l(const
char *_Src,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) FILE *__attribute__((__cdecl__)) tmpfile(void);
__attribute__ ((dllimport)) char *__attribute__((__cdecl__)) tmpnam(char
*_Buffer);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) ungetc(int
_Ch,FILE *_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) vfprintf(FILE
*_File,const char *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) vfprintf_s(FILE
*_File,const char *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) vprintf(const char
*_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) vprintf_s(const
char *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) vsnprintf(char
*_DstBuf,size_t _MaxCount,const char *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) vsnprintf_s(char
*_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,va_list
_ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vsnprintf_s(char
*_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,va_list
_ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _snprintf(char
*_Dest,size_t _Count,const char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vsnprintf(char
*_Dest,size_t _Count,const char *_Format,va_list _Args);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) vsprintf_s(char
*_DstBuf,size_t _Size,const char *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) sprintf(char
*_Dest,const char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) vsprintf(char
*_Dest,const char *_Format,va_list _Args);
int __attribute__((__cdecl__)) snprintf(char* s, size_t n, const char*
format, ...);
extern __inline__ int __attribute__((__cdecl__)) vsnprintf (char* s, size_t
n, const char* format,va_list arg) {
return _vsnprintf ( s, n, format, arg);
}
int __attribute__((__cdecl__)) vscanf(const char * Format, va_list argp);
int __attribute__((__cdecl__)) vfscanf (FILE * fp, const char *
Format,va_list argp);
int __attribute__((__cdecl__)) vsscanf (const char * _Str,const char *
Format,va_list argp);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vscprintf(const
char *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _snprintf_c(char
*_DstBuf,size_t _MaxCount,const char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vsnprintf_c(char
*_DstBuf,size_t _MaxCount,const char *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fprintf_p(FILE
*_File,const char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _printf_p(const
char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _sprintf_p(char
*_Dst,size_t _MaxCount,const char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vfprintf_p(FILE
*_File,const char *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vprintf_p(const
char *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vsprintf_p(char
*_Dst,size_t _MaxCount,const char *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _scprintf_p(const
char *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vscprintf_p(const
char *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_set_printf_count_output(int _Value);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_get_printf_count_output();
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _printf_l(const
char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _printf_p_l(const
char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _printf_s_l(const
char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vprintf_l(const
char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vprintf_p_l(const
char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vprintf_s_l(const
char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fprintf_l(FILE
*_File,const char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fprintf_p_l(FILE
*_File,const char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fprintf_s_l(FILE
*_File,const char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vfprintf_l(FILE
*_File,const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vfprintf_p_l(FILE
*_File,const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vfprintf_s_l(FILE
*_File,const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _sprintf_l(char
*_DstBuf,const char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _sprintf_p_l(char
*_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _sprintf_s_l(char
*_DstBuf,size_t _DstSize,const char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vsprintf_l(char
*_DstBuf,const char *_Format,_locale_t,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vsprintf_p_l(char
*_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,va_list
_ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vsprintf_s_l(char
*_DstBuf,size_t _DstSize,const char *_Format,_locale_t _Locale,va_list
_ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _scprintf_l(const
char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_scprintf_p_l(const char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vscprintf_l(const
char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vscprintf_p_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _snprintf_l(char
*_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _snprintf_c_l(char
*_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _snprintf_s_l(char
*_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,_locale_t
_Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vsnprintf_l(char
*_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,va_list
_ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vsnprintf_c_l(char *_DstBuf,size_t _MaxCount,const char *,_locale_t
_Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vsnprintf_s_l(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char
*_Format,_locale_t _Locale,va_list _ArgList);
# 312
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/stdio.h"
3
__attribute__ ((dllimport)) FILE *__attribute__((__cdecl__)) _wfsopen(const
wchar_t *_Filename,const wchar_t *_Mode,int _ShFlag);
__attribute__ ((dllimport)) wint_t __attribute__((__cdecl__)) fgetwc(FILE
*_File);
__attribute__ ((dllimport)) wint_t __attribute__((__cdecl__))
_fgetwchar(void);
__attribute__ ((dllimport)) wint_t __attribute__((__cdecl__)) fputwc(wchar_t
_Ch,FILE *_File);
__attribute__ ((dllimport)) wint_t __attribute__((__cdecl__))
_fputwchar(wchar_t _Ch);
__attribute__ ((dllimport)) wint_t __attribute__((__cdecl__)) getwc(FILE
*_File);
__attribute__ ((dllimport)) wint_t __attribute__((__cdecl__)) getwchar(void);
__attribute__ ((dllimport)) wint_t __attribute__((__cdecl__)) putwc(wchar_t
_Ch,FILE *_File);
__attribute__ ((dllimport)) wint_t __attribute__((__cdecl__))
putwchar(wchar_t _Ch);
__attribute__ ((dllimport)) wint_t __attribute__((__cdecl__)) ungetwc(wint_t
_Ch,FILE *_File);
__attribute__ ((dllimport)) wchar_t *__attribute__((__cdecl__))
fgetws(wchar_t *_Dst,int _SizeInWords,FILE *_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fputws(const
wchar_t *_Str,FILE *_File);
__attribute__ ((dllimport)) wchar_t *__attribute__((__cdecl__))
_getws_s(wchar_t *_Str,size_t _SizeInWords);
__attribute__ ((dllimport)) wchar_t *__attribute__((__cdecl__))
_getws(wchar_t *_String);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _putws(const
wchar_t *_Str);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fwprintf(FILE
*_File,const wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fwprintf_s(FILE
*_File,const wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) wprintf(const
wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) wprintf_s(const
wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _scwprintf(const
wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) vfwprintf(FILE
*_File,const wchar_t *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) vfwprintf_s(FILE
*_File,const wchar_t *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) vwprintf(const
wchar_t *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) vwprintf_s(const
wchar_t *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) swprintf_s(wchar_t
*_Dst,size_t _SizeInWords,const wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
vswprintf_s(wchar_t *_Dst,size_t _SizeInWords,const wchar_t *_Format,va_list
_ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_swprintf_c(wchar_t *_DstBuf,size_t _SizeInWords,const wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vswprintf_c(wchar_t *_DstBuf,size_t _SizeInWords,const wchar_t
*_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_snwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const
wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vsnwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const
wchar_t *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _snwprintf(wchar_t
*_Dest,size_t _Count,const wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vsnwprintf(wchar_t *_Dest,size_t _Count,const wchar_t *_Format,va_list _Args);
int __attribute__((__cdecl__)) snwprintf (wchar_t* s, size_t n, const
wchar_t* format, ...);
extern __inline__ int __attribute__((__cdecl__)) vsnwprintf (wchar_t* s,
size_t n, const wchar_t* format, va_list arg) { return
_vsnwprintf(s,n,format,arg); }
int __attribute__((__cdecl__)) vwscanf (const wchar_t *, va_list);
int __attribute__((__cdecl__)) vfwscanf (FILE *,const wchar_t *,va_list);
int __attribute__((__cdecl__)) vswscanf (const wchar_t *,const wchar_t
*,va_list);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fwprintf_p(FILE
*_File,const wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _wprintf_p(const
wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vfwprintf_p(FILE
*_File,const wchar_t *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vwprintf_p(const
wchar_t *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_swprintf_p(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vswprintf_p(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,va_list
_ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _scwprintf_p(const
wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vscwprintf_p(const wchar_t *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _wprintf_l(const
wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _wprintf_p_l(const
wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _wprintf_s_l(const
wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vwprintf_l(const
wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fwprintf_l(FILE
*_File,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fwprintf_p_l(FILE
*_File,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fwprintf_s_l(FILE
*_File,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vfwprintf_l(FILE
*_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vfwprintf_p_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list
_ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vfwprintf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list
_ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_swprintf_c_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t
*_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_swprintf_p_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t
*_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_swprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,const wchar_t *_Format,_locale_t
_Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vswprintf_c_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t
*_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vswprintf_p_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t
*_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vswprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,const wchar_t
*_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _scwprintf_l(const
wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_scwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vscwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_snwprintf_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t
_Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_snwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t
*_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vsnwprintf_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t
*_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vsnwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t
*_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _swprintf(wchar_t
*_Dest,const wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vswprintf(wchar_t
*_Dest,const wchar_t *_Format,va_list _Args);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
__swprintf_l(wchar_t *_Dest,const wchar_t *_Format,_locale_t _Plocinfo,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
__vswprintf_l(wchar_t *_Dest,const wchar_t *_Format,_locale_t _Plocinfo,va_list
_Args);
# 403
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/stdio.h"
3
__attribute__ ((dllimport)) wchar_t *__attribute__((__cdecl__))
_wtempnam(const wchar_t *_Directory,const wchar_t *_FilePrefix);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _vscwprintf(const
wchar_t *_Format,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_vscwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fwscanf(FILE
*_File,const wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fwscanf_l(FILE
*_File,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fwscanf_s_l(FILE
*_File,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) swscanf(const
wchar_t *_Src,const wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _swscanf_l(const
wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _swscanf_s_l(const
wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _snwscanf(const
wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _snwscanf_l(const
wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _snwscanf_s(const
wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_snwscanf_s_l(const wchar_t *_Src,size_t _MaxCount,const wchar_t
*_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) wscanf(const
wchar_t *_Format,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _wscanf_l(const
wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _wscanf_s_l(const
wchar_t *_Format,_locale_t _Locale,...);
__attribute__ ((dllimport)) FILE *__attribute__((__cdecl__)) _wfdopen(int
_FileHandle ,const wchar_t *_Mode);
__attribute__ ((dllimport)) FILE *__attribute__((__cdecl__)) _wfopen(const
wchar_t *_Filename,const wchar_t *_Mode);
__attribute__ ((dllimport)) errno_t __attribute__((__cdecl__)) _wfopen_s(FILE
**_File,const wchar_t *_Filename,const wchar_t *_Mode);
__attribute__ ((dllimport)) FILE *__attribute__((__cdecl__)) _wfreopen(const
wchar_t *_Filename,const wchar_t *_Mode,FILE *_OldFile);
__attribute__ ((dllimport)) errno_t __attribute__((__cdecl__))
_wfreopen_s(FILE **_File,const wchar_t *_Filename,const wchar_t *_Mode,FILE
*_OldFile);
__attribute__ ((dllimport)) void __attribute__((__cdecl__)) _wperror(const
wchar_t *_ErrMsg);
__attribute__ ((dllimport)) FILE *__attribute__((__cdecl__)) _wpopen(const
wchar_t *_Command,const wchar_t *_Mode);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _wremove(const
wchar_t *_Filename);
__attribute__ ((dllimport)) errno_t __attribute__((__cdecl__))
_wtmpnam_s(wchar_t *_DstBuf,size_t _SizeInWords);
__attribute__ ((dllimport)) wchar_t *__attribute__((__cdecl__))
_wtmpnam(wchar_t *_Buffer);
__attribute__ ((dllimport)) wint_t __attribute__((__cdecl__))
_fgetwc_nolock(FILE *_File);
__attribute__ ((dllimport)) wint_t __attribute__((__cdecl__))
_fputwc_nolock(wchar_t _Ch,FILE *_File);
__attribute__ ((dllimport)) wint_t __attribute__((__cdecl__))
_ungetwc_nolock(wint_t _Ch,FILE *_File);
# 469
"/usr/local/lib/gcc/x86_64-pc-mingw32/4.3.0/../../../../x86_64-pc-mingw32/include/stdio.h"
3
__attribute__ ((dllimport)) void __attribute__((__cdecl__)) _lock_file(FILE
*_File);
__attribute__ ((dllimport)) void __attribute__((__cdecl__)) _unlock_file(FILE
*_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_fclose_nolock(FILE *_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_fflush_nolock(FILE *_File);
__attribute__ ((dllimport)) size_t __attribute__((__cdecl__))
_fread_nolock(void *_DstBuf,size_t _ElementSize,size_t _Count,FILE *_File);
__attribute__ ((dllimport)) size_t __attribute__((__cdecl__))
_fread_nolock_s(void *_DstBuf,size_t _DstSize,size_t _ElementSize,size_t
_Count,FILE *_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _fseek_nolock(FILE
*_File,long _Offset,int _Origin);
__attribute__ ((dllimport)) long __attribute__((__cdecl__))
_ftell_nolock(FILE *_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__))
_fseeki64_nolock(FILE *_File,long long _Offset,int _Origin);
__attribute__ ((dllimport)) long long __attribute__((__cdecl__))
_ftelli64_nolock(FILE *_File);
__attribute__ ((dllimport)) size_t __attribute__((__cdecl__))
_fwrite_nolock(const void *_DstBuf,size_t _Size,size_t _Count,FILE *_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) _ungetc_nolock(int
_Ch,FILE *_File);
__attribute__ ((dllimport)) char *__attribute__((__cdecl__)) tempnam(const
char *_Directory,const char *_FilePrefix);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fcloseall(void);
__attribute__ ((dllimport)) FILE *__attribute__((__cdecl__)) fdopen(int
_FileHandle,const char *_Format);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fgetchar(void);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fileno(FILE
*_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) flushall(void);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) fputchar(int _Ch);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) getw(FILE *_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) putw(int _Ch,FILE
*_File);
__attribute__ ((dllimport)) int __attribute__((__cdecl__)) rmtmp(void);
#pragma pack(pop)
# 2 "cbug3.c" 2
long long int save[200];
long long int savesp[200];
static volatile long long int n = 0;
inline long long int mess()
{
long long int r = n*(n-1)*(n-1)*(n-3);
n++;
return r ^ 0x12345678;
}
void use_array(char *p)
{
long long int i;
for (i=0; i<8000; i++) *p++ = mess() & 0xff;
}
long long int may_mess_up(void)
{
char arr[8000];
register long long int a, b, c, d, e, f;
a = n++;
b = n++;
c = n++;
d = n++;
e = n++;
f = n++;
use_array(arr);
c = mess();
e = mess();
return a+b+c+d+e+f;
}
int main(int argc, char *argv[])
{
register long long int a, b, c, d, e, f;
long long int i = n++;
a = n++;
b = n++;
c = n++;
d = n++;
e = n++;
f = n++;
printf("%llx %llx %llx %llx %llx %llx %p %llx\n", a, b, c, d, e, f, &i, i);
fflush((&__iob_func()[1]));
may_mess_up();
printf("%llx %llx %llx %llx %llx %llx %p %llx\n", a, b, c, d, e, f, &i, i);
for (i=0; i<200; i++) printf("%2lld: %llx %llx\n", i, save[i], savesp[i]);
return 0;
}
============================================
--
Summary: callee-save register value sometimes corrupted when
__stkchk called
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: acn1 at cam dot ac dot uk
GCC build triplet: i686-pc-cygwin
GCC host triplet: i686-pc-cygwin
GCC target triplet: x86_64-pc-mingw32
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34013