Dear Jean-Christophe, Jean-Christophe PLAGNIOL-VILLARD wrote: > On 16:01 Wed 22 Oct , Ilko Iliev wrote: > >> Jean-Christophe PLAGNIOL-VILLARD wrote: >> >>> On 15:07 Wed 22 Oct , Ilko Iliev wrote: >>> >>> >>>> Jean-Christophe PLAGNIOL-VILLARD wrote: >>>> >>>> >>>>> On 13:12 Wed 22 Oct , Ilko Iliev wrote: >>>>> >>>>> >>>>> >>>>>> Dear Mr. Denk, >>>>>> >>>>>> >>>>>> >>>>>> >>>>>>> Dear Ilko Iliev, >>>>>>> >>>>>>> In message <[EMAIL PROTECTED]> 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? >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> With ".weak lowlevel_init" the function is marked as weak (I can see >>>>>> this in the ELF file) but it is not overwritten from the another >>>>>> lowlevel_init(). >>>>>> >>>>>> >>>>>> >>>>> try >>>>> >>>>> >>> >>> >>>>> >>>>> >>>>> >>>> I tried and the result is: >>>> lowlevel_init.S:32: Error: junk at end of line, first unrecognized >>>> character is `=' >>>> >>>> >>>> >>> sorry try this >>> >>> .global __default_lowlevel_init >>> ..... >>> .weak lowlevel_init >>> .set lowlevel_init,__default_lowlevel_init >>> >>> after in the other asm >>> .global lowlevel_init >>> ....... >>> >>> Best Regards, >>> J. >>> >>> >> Still doesn't work - the lowlevel_init is weak, but not overwritten. >> >> It works only if the second (strong) function is in the same archive. >> Maybe this is a bug of the linker. >> >> > Do you specify that the 2 is type "func" > > Best Regards, > J. >
I tried several variants to make the function lowlevel_init() weak but without success. If there is no other solution for the problem could you commit my patch. Without this patch I can't post the patch for our PM9261 and PM9263 boards. -- Mit freundlichen Grüßen/With best regards, Ilko Iliev Ronetix Development Tools GmbH CPU Modules, JTAG/BDM Emulators and Flash Programmers Waidhausenstrasse 13/5, 1140 Vienna, Austria E-Mail: [EMAIL PROTECTED]; Web: www.ronetix.at _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot