Where's ".div" implemented?
Doug Evans
dje@transmeta.com
Tue Jun 3 14:25:00 GMT 2003
.div is in gcc/config/sparc/lb1spc.asm in the gcc sources.
I'm guessing no one's tried running linux on an old v7 machine
because the linux configurations don't include lb1spc.asm in libgcc.a.
[not surprising]
If you configure for sparc-elf then you'll get a libgcc.a that has .div.
There's a few other configurations that will get you .div,
but sparc-elf is, I think, the canonical one for doing embedded
sparc programs with elf.
Nick Patavalis writes:
> I'm compiling the following program using GCC-3.2.3 configured as a
> cross-compiler targeting "sparc-linux" and hosted on ix86-linux.
>
> int main (void) { int i; i = i / 3; return 0; }
>
> My target system uses a sparc-v7 compliant processor without integet
> multiplication and division instructions, so I'm compiling with:
>
> sparc-linux-gcc -mcpu=v7 -fno-builtin -c tst.c -o tst.o
>
> but when I try to link the generated object, like this:
>
> sparc-linux-ld tst.o /path/to/gcc-lib/3.2.3/libgcc.a -o tst
>
> I get an error about the linker not been able to find the ".div"
> function. I was under the impression that the integer-math functions
> called by code generated from C integer expressions were implemented
> in "libgcc.a". Obviously they are not!
>
> Looking arround I found a ".div" function in *libc*, but for several
> reasons, I don't want to link my program with the glibc "monster". All
> I want is a library that supports the *compiler generated* function
> references. Isn't "libgcc" supposed to be exactly that???
>
> I finaly managed to get my program (performing integer math) link,
> using this round-about way:
>
> mkdir libintm; cd libintm
> ar x /path/to/glibc/libc.a \
> addmul_1.o sub_n.o submul_1.o dotmul.o \
> mul.o mul_1.o mul_n.o umul.o \
> div.o udiv.o udiv_qrnnd.o sdiv.o ldiv.o lldiv.o \
> divmod_1.o divrem.o rem.o urem.o
> ar cr libintm.a *.o
> ranlib libintm.a
>
> and then link my program with "-lintm".
>
> Are the above-mentioned functions *exactly* the ones required? That
> is, does the compiler implicitly produce refences *only* to these
> functions, and to *all* of these? Is there a nicer way to achieve the
> same result?
>
> /npat
>
> P.S. Obviously my intention is to compile a program that will run at
> "boot"-time without the services of an operation system, or of an
> extensive standard library.
------
Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com
More information about the crossgcc
mailing list