[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Bizarre compile/link problem from minor change



Structure assignments (e.g., struct foo x = y) sometimes get turned
into calls to memcpy() by GCC. It doesn't run the emitted memcpy()
through CPP so our macro-based implementation in the header files
doesn't get used. We therefore *always* have the implementation in
common/string.c as a "fall back". 

I think some flag like '-ffreestanding' is supposed to avoid this
behaviour, but it's a pretty small issue and I don't know whether that
flag could have other unfortunate side effects.

 -- Keir

PS. If you really do want a non-macro implementation of memcpy() for
IA64 then we can add __HAVE_ARCH_MEMCPY for you. We just won't define
that for x86, and we cannot remove the #undef.

> Perhaps someone who is smarter (or at least has more
> compiler/linker knowledge than me :-) can solve this
> bizarre problem:
> 
> I have been annoyed for some time with a hack that's
> in xen/common/string.c... For the routine memcpy(),
> there is an #undef right before it.  Why not do
> this properly and use the #ifndef __HAVE_ARCH_MEMCPY
> around it, like all the other routines?  So I tried
> it.  And got an undefined reference reported by the
> linker from arch/x86/vmx.o.
> 
> Looking at arch/x86/vmx.c, there's no reference to
> memcpy.  And if you look at the output from cpp, there's
> no reference to memcpy.  If you add a #include
> for <xen/string.h> after <xen/lib.h>, it doesn't
> fix anything.
> 
> To try to force the compiler to tell me where the
> problem lay, AHA, I added a line at the beginning
> of the source:
> 
> void memcpy(void) {}
> 
> thinking that the compiler would surely report a
> mismatch.  It didn't and the compile/link succeeds!
> 
> Clearly adding this line is not a nice solution.
> Can anyone come up with a better one?   (Other than
> just leaving string.c as is...)  Please try your
> solution yourself... I tried a few and couldn't find
> one that worked.  If you find one, kindly reply to
> this post.
> 
> Maybe I'm just tired....
> 
> Dan
> 
> 
> -------------------------------------------------------
> The SF.Net email is sponsored by: Beat the post-holiday blues
> Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
> It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxxxx
> https://lists.sourceforge.net/lists/listinfo/xen-devel
 -=- MIME -=- 
Perhaps someone who is smarter (or at least has more
compiler/linker knowledge than me :-) can solve this
bizarre problem:

I have been annoyed for some time with a hack that's
in xen/common/string.c... For the routine memcpy(),
there is an #undef right before it.  Why not do
this properly and use the #ifndef __HAVE_ARCH_MEMCPY
around it, like all the other routines?  So I tried
it.  And got an undefined reference reported by the
linker from arch/x86/vmx.o.

Looking at arch/x86/vmx.c, there's no reference to
memcpy.  And if you look at the output from cpp, there's
no reference to memcpy.  If you add a #include
for <xen/string.h> after <xen/lib.h>, it doesn't
fix anything.

To try to force the compiler to tell me where the
problem lay, AHA, I added a line at the beginning
of the source:

void memcpy(void) {}

thinking that the compiler would surely report a
mismatch.  It didn't and the compile/link succeeds!

Clearly adding this line is not a nice solution.
Can anyone come up with a better one?   (Other than
just leaving string.c as is...)  Please try your
solution yourself... I tried a few and couldn't find
one that worked.  If you find one, kindly reply to
this post.

Maybe I'm just tired....

Dan


-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/xen-devel



-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.