Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Wed, 13 Aug 2014 11:49:10 +0200
From: Szabolcs Nagy <nsz@...t70.net>
To: musl@...ts.openwall.com
Subject: Re: compiling musl on x86_64 linux with ppc

* u-igbb@...ey.se <u-igbb@...ey.se> [2014-08-13 11:18:43 +0200]:
> pcc -std=c99 -nostdinc -ffreestanding -fexcess-precision=standard -frounding-math -D_XOPEN_SOURCE=700 -I./arch/x86_64 -I./src/internal -I./include  -Os -pipe -fomit-frame-pointer -fno-unwind-tables -fno-asynchronous-unwind-tables -Wa,--noexecstack -Werror=implicit-function-declaration -Werror=implicit-int -Werror=pointer-sign -Werror=pointer-arith -fno-stack-protector  -c -o src/aio/aio_readwrite.o src/aio/aio_readwrite.c
> ./arch/x86_64/syscall_arch.h, line 37: warning: no register assignment (yet)
> ./arch/x86_64/syscall_arch.h, line 46: warning: no register assignment (yet)
> ./arch/x86_64/syscall_arch.h, line 47: warning: no register assignment (yet)
> ./arch/x86_64/syscall_arch.h, line 56: warning: no register assignment (yet)
> ./arch/x86_64/syscall_arch.h, line 57: warning: no register assignment (yet)
> ./arch/x86_64/syscall_arch.h, line 58: warning: no register assignment (yet)
> src/aio/aio_readwrite.c, line 23: compiler error: unsupported xasm constraint r11
> error: XXXXX/libexec/ccom terminated with status 1
> make: *** [src/aio/aio_readwrite.o] Error 1
> -----------
> 
> Is there any way around this, short of adding the register assignment
> functionality to the compiler?
> 

there is a way around:

instead of the inline functions in syscall_arch.h use extern
asm implementations or just call the generic __syscall

(it will be less efficient than inline asm syscall, but
pcc is not very good at optimizations anyway)

eg. in syscall_arch.h change

static __inline long __syscall1(long n, long a1)
{
	unsigned long ret;
	__asm__ __volatile__ ("syscall" : "=a"(ret) : "a"(n), "D"(a1) : "rcx", "r11", "memory");
	return ret;
}

into

static __inline long __syscall1(long n, long a1)
{
	return (__syscall)(n, a1);
}

etc

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.