SOURCES: uClibc-stdio-unhide.patch (NEW) - hidden visibility for _...

Jakub Bogusz qboosh w pld-linux.org
Nie, 3 Cze 2007, 23:16:26 CEST


On Sun, Jun 03, 2007 at 11:07:46PM +0200, qboosh wrote:
> Author: qboosh                       Date: Sun Jun  3 21:07:46 2007 GMT
> Module: SOURCES                       Tag: HEAD
> ---- Log message:
> - hidden visibility for _stdio_init causes non-NULL check to be optimized away on x86

> +-extern void weak_function _stdio_init(void) attribute_hidden;
> ++extern void weak_function _stdio_init(void);

visibility("hidden") ma prawo w ten sposób wpływać na optymalizację, czy
to problem z gcc (4.1.2 i 4.2.0)?

weak_function to __attribute__((weak))

sprawdzany warunek:

# define likely(x)      __builtin_expect((!!(x)),1)
    if (likely(_stdio_init != NULL))
        _stdio_init();

no i jak jest hidden, to porówanie znika.

W samodzielnym programie efektu nie zaobserwowałem (próbowałem -Os,
-O2):

#include <stdlib.h>

extern void __attribute__((weak)) func(void) __attribute__((visibility("hidden")));

# define likely(x)      __builtin_expect((!!(x)),1)

int main()
{
  if(likely(func != NULL))
    func();
}


-- 
Jakub Bogusz    http://qboosh.pl/


Więcej informacji o liście dyskusyjnej pld-devel-pl