[U-Boot] [PATCH] at91: board specific lowlevel_init.S

Wolfgang Denk wd at denx.de
Tue Oct 21 21:08:31 CEST 2008


Dear Ilko Iliev,

In message <48FDFCA0.4090608 at ronetix.at> you wrote:
>
> > Maybe instead of adding mor #ifdef'ery here, we can turn
> > lowlevel_init() into a "weak" function that can be redefined by board
> > specific code?
> The lowlevel_init() is an assembler function called from another 
> assembler function and the attribute .weak doesn't work.

What do you mean by "attribute .weak doesn't work" ?

> There are no assembler file in the U-BOOT tree which use weak functions.
> Do you know how can I make an assembler function weak?

Well, if you don't know, then don't ask me, ask your compiler - he
knows how to do this.

For example, common/cmd_boot.c has this code snippet right at the
beginning:

 30
 31 /* Allow ports to override the default behavior */
 32 __attribute__((weak))
 33 unsigned long do_go_exec (ulong (*entry)(int, char *[]), int argc, char *argv[])
 34 {
 35         return entry (argc, argv);
 36 }

Compile this with -S option, and you get this:

 12 .Ltext0:
 13         .align 2
 14         .weak   do_go_exec
 15         .type   do_go_exec, @function
 16 do_go_exec:
 17 .LFB87:
 18         .file 1 "cmd_boot.c"
 19         .loc 1 34 0
 20 .LVL0:
 21         mflr 0
 22 .LCFI0:
 23         stwu 1,-16(1)
...


So to me it seems as if the attribute .weak is supposed to work just fine.

What exactly is not working for you?

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"You shouldn't make my toaster angry." - Household security explained
in "Johnny Quest"


More information about the U-Boot mailing list