
Hello,
I've been playing with libgcc sources imported in U-Boot [1] and so far for some platforms it works but for some doesn't.
The problem I just discovered is how libgcc's assembly is composed. It has a couple of not very usual features: 1. The same labels used in different functions 2. A lot of functions are collected in the same source file [2] 3. Every function is wrapped in individual #ifdef 4. Very special target is used for compilation [3] which iterates through the list of all those per-function defines LIB1ASMFUNCS [4] and compiles the same one lib1funcs.S many times each time with just one define provided and creates similarly named .o file. Then all objects are easily collected in libgcc.s because all labels are already resolved into offsets.
And I'm wondering if something similar could be achieved in U-Boot?
Ideal solution is reproduction of libgcc's original approach but that requires implementation of my own build "script" which might deal with input and output of different names. Because obviously "obj-y += xxx" won't work.
That's what I want: Source file: lib1funcs.S Object files: _mulsi3.o, _umulsidi3.o, _umulsi3_highpart.o etc. [that I may achieve with creating of multiple symlinks to original lib1funcs.S]
And what's even more important important I need to set per-file ASFLAGS: ASFLAGS__mulsi3.o = -DL_mulsi3, ASFLAGS__umulsidi3.o = -DL_umulsidi3, ASFLAGS__umulsi3_highpart.o = -DL_umulsi3_highpart etc.
If that's not possible probably I'll need to split that combined lib1funcs.S into many files but this is: a) Pretty painful as we're talking about ~15 files b) Maintenance, i.e. the next import from future versions of GCC will be even more painful as lib1funcs.S might be restructured etc
Any ideas?
-Alexey
[1] https://patchwork.ozlabs.org/patch/926522/ [2] https://github.com/gcc-mirror/gcc/blob/master/libgcc/config/arc/lib1funcs.S [3] https://github.com/gcc-mirror/gcc/blob/master/libgcc/Makefile.in#L473 [4] https://github.com/gcc-mirror/gcc/blob/master/libgcc/config/arc/t-arc#L24