This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
memcpy called with very large length (gcc 3.0)
- To: bug-gcc at gnu dot org
- Subject: memcpy called with very large length (gcc 3.0)
- From: Hideo Saito <saito at densan dot co dot jp>
- Date: Fri, 24 Aug 2001 15:12:57 +0900
To : bug-gcc@gnu.org
From: saito@densan.co.jp
Title: memcpy called with very large length (gcc 3.0)
Hello. I am H.Saito, from Japan. I use NetBSD, mips3 and ELF.
This sss.c program compiled with gcc-3.0 and gcc-3.0.1
can't execute at my system.
struct sss {
char buf[20];
};
xxx(int x, int y, struct sss s)
{
}
main()
{
struct sss s0;
xxx(0, 1, s0);
}
Please reference assembler source sss.s created by gcc-3.0 at appendix.
When gcc passes 3rd argumnt s0 to function xxx(),
why memcpy is called with negative length -12 that is very large number
for my system.
li $6,-12 # 0xfffffff4
la $25,memcpy
Thank you. Good bye.
---execution log----------------------------------------------------
% gcc -o sss sss.c <return>
% sss <return>
Segmentation fault (core dumped)
%
---compiler log-----------------------------------------------------
% gcc -S sss.c -v <return>
Reading specs from /usr/gcc3.0/lib/gcc-lib/mips64-elf/3.0/specs
Configured with: ../../gcc-3.0/configure --prefix=/usr/gcc3.0 --srcdir=../../gcc-3.0 --host=mips64-elf --target=mips64-elf --with-elf --with-stabs --with-gnu-as --with-gnu-ld
Thread model: single
gcc version 3.0
/usr/gcc3.0/lib/gcc-lib/mips64-elf/3.0/cc1 -lang-c -v -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=0 -D__ANSI_COMPAT -DSYSTYPE_BSD -D_SYSTYPE_BSD -D__NetBSD__ -D__ELF__ -D_ABIN32 -D__NO_LEADING_UNDERSCORES__ -D__GP_SUPPORT__ -D__IEEE_BIG_ENDIAN -Ddevos -Dmips -Dunix -DMIPSEB -D_devos -D_mips -D_unix -D_MIPSEB -D__ANSI_COMPAT -D__SYSTYPE_BSD__ -D_SYSTYPE_BSD -D__NetBSD__ -D__ELF__ -D_ABIN32 -D__NO_LEADING_UNDERSCORES__ -D__GP_SUPPORT__ -D__IEEE_BIG_ENDIAN -D__devos__ -D__mips__ -D__unix__ -D__MIPSEB__ -D__devos__ -D__mips__ -D__unix__ -D_MIPSEB -D__SYSTYPE_BSD -D__devos -D__mips -D__unix -D__MIPSEB -D__devos -D__mips -D__unix -Amachine(mips) -Asystem(unix) -Asystem(NetBSD) -Asystem(devos) -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D__LANGUAGE_C -D_LANGUAGE_C -DLANGUAGE_C -D__SIZE_TYPE__=unsigned int -D__PTRDIFF_TYPE__=int -U__mips -D__mips=3 -D__mips64 -DR4000 -D_R4000 -D__r4kdevos sss.c -mabicalls -G0 -quiet -dumpbase sss.c -version -o sss.s
GNU CPP version 3.0 (cpplib) [AL 1.1, MM 40] BSD Mips
GNU C version 3.0 (mips64-elf)
compiled by GNU C version 2.95.2 19991024 (release).
ignoring nonexistent directory "/usr/gcc3.0/mips64-elf/include"
ignoring duplicate directory "/usr/gcc3.0/include"
ignoring duplicate directory "/usr/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/gcc3.0/include
/user2/FreeSoft/locale/libxpg4-3.3/locale
/usr/kde/include
/usr/gnome/include
/usr/local/include/glib-1.2
/usr/local/include/gtk-1.2
/usr/local/BerkeleyDB.3.1/include
/usr/local/include
/usr/tetex/include
/usr/X11/include
/usr/gcc/include
/usr/include
/usr/gcc3.0/lib/gcc-lib/mips64-elf/3.0/include
End of search list.
---sss.s------------------------------------------------------------
.file 1 "sss.c"
.abicalls
.text
.align 2
.globl xxx
.ent xxx
xxx:
.frame $fp,24,$31 # vars= 0, regs= 2/0, args= 0, extra= 8
.mask 0x50000000,-8
.fmask 0x00000000,0
.set noreorder
.cpload $25
.set reorder
subu $sp,$sp,24
.cprestore 0
sd $fp,16($sp)
sd $28,8($sp)
move $fp,$sp
sw $4,28($fp)
sw $5,36($fp)
move $sp,$fp
ld $fp,16($sp)
addu $sp,$sp,24
j $31
.end xxx
.align 2
.globl main
.ent main
main:
.frame $fp,128,$31 # vars= 56, regs= 3/0, args= 40, extra= 8
.mask 0xd0000000,-8
.fmask 0x00000000,0
.set noreorder
.cpload $25
.set reorder
subu $sp,$sp,128
.cprestore 40
sd $31,120($sp)
sd $fp,112($sp)
sd $28,104($sp)
move $fp,$sp
addu $2,$sp,16
ldl $3,48($fp)
ldr $3,55($fp)
ldl $4,56($fp)
ldr $4,63($fp)
sdl $3,0($2)
sdr $3,7($2)
sdl $4,8($2)
sdr $4,15($2)
addu $3,$sp,16
ld $2,16($sp)
sd $2,72($fp)
ld $2,24($sp)
sd $2,80($fp)
move $4,$3
addu $5,$fp,48
li $6,-12 # 0xfffffff4
la $25,memcpy
jal $31,$25
ld $2,72($fp)
sd $2,16($sp)
ld $2,80($fp)
sd $2,24($sp)
move $4,$0
li $5,1 # 0x1
ld $6,16($sp)
ld $7,24($sp)
la $25,xxx
jal $31,$25
move $sp,$fp
ld $31,120($sp)
ld $fp,112($sp)
addu $sp,$sp,128
j $31
.end main