From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-la0-f48.google.com ([209.85.215.48]) by merlin.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1TtHcy-0004CI-Ql for barebox@lists.infradead.org; Thu, 10 Jan 2013 12:53:02 +0000 Received: by mail-la0-f48.google.com with SMTP id ej20so526652lab.35 for ; Thu, 10 Jan 2013 04:52:57 -0800 (PST) MIME-Version: 1.0 In-Reply-To: <20130110123634.GB22953@game.jcrosoft.org> References: <20130110123634.GB22953@game.jcrosoft.org> Date: Thu, 10 Jan 2013 13:52:57 +0100 Message-ID: From: Franck Jullien List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: barebox-bounces@lists.infradead.org Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: Re: GCC question To: Jean-Christophe PLAGNIOL-VILLARD Cc: barebox 2013/1/10 Jean-Christophe PLAGNIOL-VILLARD : > On 10:02 Wed 09 Jan , Franck Jullien wrote: >> Hi, >> >> I have a question not directly related to Barebox but I think I can >> find some answer here: ) >> >> I would like to use initcalls in a Linux user's land program on a x86 target. >> >> I'm doing something like this: >> >> #ifndef _INIT_H >> #define _INIT_H >> >> typedef int (*initcall_t)(void); >> >> extern initcall_t __start_target, __stop_target; >> >> #define target_initcall(fn) static initcall_t _##fn \ >> __attribute__((used)) \ >> __attribute__ ((section("target"))) = fn >> >> #endif >> >> then: >> >> initcall_t *initcall; >> >> for (initcall = &__start_target; >> initcall < &__stop_target; initcall++) { >> printf("initcall-> %p\n", *initcall); >> ret = (*initcall)(); >> if (ret) >> printf("initcall %p failed: %d\n", *initcall, ret); >> } >> >> Everything looks fine except the linker removes the function >> "initcalled" because it is not >> referenced anywhere and this is normal. >> >> I have not modified the linker script (I'm using the default one). I'm >> using auto generated >> __start_target and __stop_target symbols generated by the linker. >> >> My question is: why does it work in barebox ? For example, in >> nios2/generic.c we have only >> static function and initcalls. So why the linker does optimize out >> those functions ? Is it >> because we have initcall corresponding sections in the linker script ? > on userspace you can use directly the contructor > > Best Regards, > J. Thanks, I'll try it. I need to check if mingw32 and mingw64 also have this attribute. Franck. _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox