svn commit: trunk/uClibc/libc/sysdeps/linux/i386
vda at uclibc.org
vda at uclibc.org
Fri Dec 12 23:34:42 UTC 2008
Author: vda
Date: 2008-12-12 15:34:42 -0800 (Fri, 12 Dec 2008)
New Revision: 24397
Log:
i386/brk.c: gcc can't figure out how to use %ebx in PIC mode,
help it. Code size is the same.
Modified:
trunk/uClibc/libc/sysdeps/linux/i386/brk.c
Changeset:
Modified: trunk/uClibc/libc/sysdeps/linux/i386/brk.c
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/i386/brk.c 2008-12-12 15:21:51 UTC (rev 24396)
+++ trunk/uClibc/libc/sysdeps/linux/i386/brk.c 2008-12-12 23:34:42 UTC (rev 24397)
@@ -25,14 +25,19 @@
void *__curbrk attribute_hidden = 0;
/* libc_hidden_proto(brk) */
-int brk (void *addr)
+int brk(void *addr)
{
- void *newbrk, *ebx;
+ void *newbrk;
- __asm__ (
- "int $0x80\n"
- : "=a" (newbrk), "=b" (ebx)
- : "0" (__NR_brk), "1" (addr)
+ /* %ebx is used in PIC code, need to save/restore it manually.
+ * gcc won't do it for us if we will request it in constraints
+ */
+ __asm__("pushl %%ebx\n"
+ "movl %2, %%ebx\n"
+ "int $0x80\n"
+ "popl %%ebx\n"
+ : "=a" (newbrk)
+ : "0" (__NR_brk), "g" (addr)
);
__curbrk = newbrk;
More information about the uClibc-cvs
mailing list