This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Miscompilation of glibc with CVS mainline


Jakub Jelinek <jakub@redhat.com> writes:

> On Thu, Jan 02, 2003 at 02:16:01PM +0100, Andreas Jaeger wrote:
>> I could reproduce this with a simple hello-world program and also with
>> some smaller program, it is indeed a bug in handling of weak extern
>> functions.
>> 
>> Here's a small testcase that has the same behaviour:
>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> extern void weak_func (void *arg);
>> asm (".weak weak_func");
>> 
>> void
>> test (void *arg)
>> {
>>   if (&weak_func != (void *)0)
>>     weak_func (arg);
>>   
>> }
>
> As GCC is not told in any way that weak_func is actually weak, I think
> it is glibc's fault.
> Does:
> #define weak_extern(x) extern __typeof (x) x __attribute__((weak));
> work ok?

I'm playing now with:
#    define __pragma_weak(expr) _Pragma(#expr)
#    define _weak_extern(symbol) __pragma_weak("weak " #symbol)

And this works with my small testcase and I've just started
recompiling glibc with it.

I'll try your definition also and let you know about the results,

Andreas
-- 
 Andreas Jaeger
  SuSE Labs aj@suse.de
   private aj@arthur.inka.de
    http://www.suse.de/~aj


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]