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