funkcje gcc w jądrze (__ucmpdi2 itp.)

Jakub Bogusz qboosh w pld-linux.org
Pon, 10 Maj 2004, 22:26:22 CEST


On Mon, May 10, 2004 at 09:26:18PM +0200, Michal Moskal wrote:
> On Mon, May 10, 2004 at 09:14:03PM +0200, Jakub Bogusz wrote:
> > Czy jest jakiś sposób obejścia używania przez gcc funkcji z libgcc do
> > niektórych operacji nie obsługiwanych bezpośrednio przez procesor, czy
> > trzeba zawsze dostarczać te funkcje jeśli gcc zapragnie ich użyć?
> > 
> > Konkretnie to w sterowniku cx88 z 2.4.26 jest użyty switch na typie
> > __u64 i na ppc gcc porównania chce wykonywać przez funkcję __ucmpdi2(),
> > której w arch/ppc/lib nie ma (jest tylko dla architektury arm), co
> > prowadzi oczywiście do unresolved symbols i nieużywalnego modułu.
> 
> Może to:
> 
> -ffreestanding    Assume that standard libraries & main might not exist

Nie, to dotyczy bibliotek standardowych języka (czyli np. libc), a nie
"compiler support library", którą jest libgcc.
Jak jest tak było:

[builder2 w trumna builder2]$ cat t.c
#include <stdint.h>

uint64_t x = 0;

int main(int argc)
{
        x=argc;
        switch(x) {
                case 1: return 0;
                case 2: return 1;
        }
}
[builder2 w trumna builder2]$ gcc -c t.c -ffreestanding
[builder2 w trumna builder2]$ objdump -t t.o  | grep ucmp
00000000         *UND*  00000000 __ucmpdi2

(tym razem na trumnie, żeby sprawdzić, że dotyczy gcc 2.95 jak i 3.3)


-- 
Jakub Bogusz    http://cyber.cs.net.pl/~qboosh/



Więcej informacji o liście dyskusyjnej pld-devel-pl