On Wed, 14 Apr 2004, Reid Spencer wrote:
> The only thing I can think of is that string.h is being #included and
> has different signatures for memcpy and strncpy. Possibly "char"
is not
> signed on your machine (very unusual) or some of the parameters are
> declared as "const".
The problem is that the code generated by the C backend cannot include any
system headers. If the system header were to have a #define (not a rare
occurance) the header could arbitrarily change the CBE code in BAAD ways.
:(
There is no reason for GCC to emit this warning. Basically it is
expecting slightly different, but compatible, types in the prototype. I
don't think there is any clean way to work around this, but I'm
certainly
open to suggestions. :)
-Chris
> Reid.
>
> On Wed, 2004-04-14 at 18:19, Eric Zimmerman wrote:
> > Chris,
> >
> > I'm fine with using JIT, but I'm trying to understand this
problem:
> > 1. My LLVM program does not produce correct results
> > 2. Using llvm-dis, I disassemble the bytecode to C
> > 3. I recompile using GCC and the program _works correctly_.
> >
> > The only odd thing is when I recompile with GCC, I see these messages:
> >
> > pal3.c:195: warning: conflicting types for built-in function
`strcmp'
> > pal3.c:200: warning: conflicting types for built-in function
`memcpy'
> > pal3.c:202: warning: conflicting types for built-in function
`strncpy'
> >
> > The lines referenced are:
> > int strcmp(signed char *, signed char *);
> > signed char *memcpy(signed char *, signed char *, unsigned );
> > signed char *strncpy(signed char *, signed char *, unsigned );
> >
> > Do you have any insight into what's happening? Thanks,
> > -Eric
> >
> > ----- Forwarded message from Chris Lattner <sabre at nondot.org>
-----
> >
> > Date: Wed, 14 Apr 2004 19:25:45 -0500 (CDT)
> > From: Chris Lattner <sabre at nondot.org>
> > To: llvmdev at cs.uiuc.edu
> > Subject: Re: [LLVMdev] Linking strncpy
> > Reply-To: llvmdev at cs.uiuc.edu
> >
> > On Wed, 14 Apr 2004, Eric Zimmerman wrote:
> > > I'm working on a CS326 compiler project, and I'm having
some problems
> > > using string functions. Some LLVM programs produced are either
> > > aborting or giving incorrect results; however, if I disassemble
the
> > > LLVM bytecode and recompile with GCC, everything works fine.
> > >
> > > I encountered the following error when running lli with
> > > '-force-interpreter' option:
> > > "Tried to execute an unknown external function: sbyte *
(sbyte
> > > *, sbyte *, uint) * strncpy"
> >
> > This is one of the "features" of the interpreter: it only
supports
> > external functions that it "knows" about. Why not use the
JIT, without
> > -force-interpreter? Are you on a machine that we don't support?
If so,
> > you can either add support for strncpy (to
> > lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp) or use the C
> > backend.
> >
> > -Chris
> >
> >
> > > Strncpy is used as part of my compiler's run-time library,
and it was
> > > compiled with the C-frontend for LLVM. Looking at the assembly,
the
> > > function is declared at the top of the file;
> > >
> > > declare sbyte* %strncpy(sbyte*,sbyte*,uint) ;; __builtin_strncpy
> > >
> > > And it is called like this:
> > > %tmp.12 = call sbyte* (sbyte*, sbyte*, uint)* %strncpy(sbyte*
> > > %tmp.15, sbyte* %tmp.23, uint %tmp.27)
> > >
> > > What am I forgetting to do? What is the right way to link to the
> > > string functions? Thanks,
> > >
> > > -Eric Zimmerman
> > >
> >
> > _______________________________________________
> > LLVM Developers mailing list
> > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> > http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
> _______________________
> Reid Spencer
> President & CTO
> eXtensible Systems, Inc.
> rspencer at x10sys.com
>
-Chris
--
http://llvm.cs.uiuc.edu/
http://www.nondot.org/~sabre/Projects/