summaryrefslogtreecommitdiff
path: root/ldso
diff options
context:
space:
mode:
Diffstat (limited to 'ldso')
-rw-r--r--ldso/ldso/boot1.c2
-rw-r--r--ldso/ldso/hash.h4
-rw-r--r--ldso/ldso/ld-uClibc.c2
-rw-r--r--ldso/ldso/ld_hash.h4
-rw-r--r--ldso/ldso/ld_syscall.h8
-rw-r--r--ldso/ldso/ldso.c2
-rw-r--r--ldso/ldso/syscall.h8
-rw-r--r--ldso/ldso/vsprintf.c2
8 files changed, 28 insertions, 4 deletions
diff --git a/ldso/ldso/boot1.c b/ldso/ldso/boot1.c
index 9e11cee10..920779dcd 100644
--- a/ldso/ldso/boot1.c
+++ b/ldso/ldso/boot1.c
@@ -244,6 +244,8 @@ DL_BOOT(unsigned long args)
__asm__("\tmov %%l7,%0\n\t" : "=r" (got))
#elif defined(__arm__)
__asm__("\tmov %0, r10\n\t" : "=r"(got));
+#elif defined(__powerpc__)
+ __asm__("\tbl _GLOBAL_OFFSET_TABLE_-4@local\n\t" : "=l"(got));
#else
/* Do things the slow way in C */
{
diff --git a/ldso/ldso/hash.h b/ldso/ldso/hash.h
index f38361090..1ee32672b 100644
--- a/ldso/ldso/hash.h
+++ b/ldso/ldso/hash.h
@@ -86,7 +86,7 @@ extern int _dl_linux_dynamic_link(void);
#define SEND_ADDRESS_STDERR(X, add_a_newline) { \
char tmp[13], *tmp1; \
_dl_memset_inline(tmp, 0, sizeof(tmp)); \
- tmp1=_dl_simple_ltoahex( tmp, (unsigned long)(X)); \
+ tmp1=_dl_simple_ltoahex_inline( tmp, (unsigned long)(X)); \
_dl_write(2, tmp1, _dl_strlen_inline(tmp1)); \
if (add_a_newline) { \
tmp[0]='\n'; \
@@ -97,7 +97,7 @@ extern int _dl_linux_dynamic_link(void);
#define SEND_NUMBER_STDERR(X, add_a_newline) { \
char tmp[13], *tmp1; \
_dl_memset_inline(tmp, 0, sizeof(tmp)); \
- tmp1=_dl_simple_ltoahex( tmp, (unsigned long)(X)); \
+ tmp1=_dl_simple_ltoahex_inline( tmp, (unsigned long)(X)); \
_dl_write(2, tmp1, _dl_strlen_inline(tmp1)); \
if (add_a_newline) { \
tmp[0]='\n'; \
diff --git a/ldso/ldso/ld-uClibc.c b/ldso/ldso/ld-uClibc.c
index 9e11cee10..920779dcd 100644
--- a/ldso/ldso/ld-uClibc.c
+++ b/ldso/ldso/ld-uClibc.c
@@ -244,6 +244,8 @@ DL_BOOT(unsigned long args)
__asm__("\tmov %%l7,%0\n\t" : "=r" (got))
#elif defined(__arm__)
__asm__("\tmov %0, r10\n\t" : "=r"(got));
+#elif defined(__powerpc__)
+ __asm__("\tbl _GLOBAL_OFFSET_TABLE_-4@local\n\t" : "=l"(got));
#else
/* Do things the slow way in C */
{
diff --git a/ldso/ldso/ld_hash.h b/ldso/ldso/ld_hash.h
index f38361090..1ee32672b 100644
--- a/ldso/ldso/ld_hash.h
+++ b/ldso/ldso/ld_hash.h
@@ -86,7 +86,7 @@ extern int _dl_linux_dynamic_link(void);
#define SEND_ADDRESS_STDERR(X, add_a_newline) { \
char tmp[13], *tmp1; \
_dl_memset_inline(tmp, 0, sizeof(tmp)); \
- tmp1=_dl_simple_ltoahex( tmp, (unsigned long)(X)); \
+ tmp1=_dl_simple_ltoahex_inline( tmp, (unsigned long)(X)); \
_dl_write(2, tmp1, _dl_strlen_inline(tmp1)); \
if (add_a_newline) { \
tmp[0]='\n'; \
@@ -97,7 +97,7 @@ extern int _dl_linux_dynamic_link(void);
#define SEND_NUMBER_STDERR(X, add_a_newline) { \
char tmp[13], *tmp1; \
_dl_memset_inline(tmp, 0, sizeof(tmp)); \
- tmp1=_dl_simple_ltoahex( tmp, (unsigned long)(X)); \
+ tmp1=_dl_simple_ltoahex_inline( tmp, (unsigned long)(X)); \
_dl_write(2, tmp1, _dl_strlen_inline(tmp1)); \
if (add_a_newline) { \
tmp[0]='\n'; \
diff --git a/ldso/ldso/ld_syscall.h b/ldso/ldso/ld_syscall.h
index 013cc6fb7..322c618f6 100644
--- a/ldso/ldso/ld_syscall.h
+++ b/ldso/ldso/ld_syscall.h
@@ -17,6 +17,12 @@ static inline _syscall1(void, _dl_exit, int, status);
static inline _syscall1(int, _dl_close, int, fd);
+#ifdef __powerpc__
+/* PowerPC has a different calling convention for mmap(). */
+#define __NR__dl_mmap __NR_mmap
+static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length,
+ int, prot, int, flags, int, fd, off_t, offset);
+#else
#define __NR__dl_mmap_real __NR_mmap
static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer);
@@ -33,6 +39,8 @@ static inline void * _dl_mmap(void * addr, unsigned long size, int prot,
buffer[5] = (unsigned long) offset;
return (void *) _dl_mmap_real(buffer);
}
+#endif
+
#ifndef _dl_MAX_ERRNO
#define _dl_MAX_ERRNO 4096
#endif
diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c
index 9e11cee10..920779dcd 100644
--- a/ldso/ldso/ldso.c
+++ b/ldso/ldso/ldso.c
@@ -244,6 +244,8 @@ DL_BOOT(unsigned long args)
__asm__("\tmov %%l7,%0\n\t" : "=r" (got))
#elif defined(__arm__)
__asm__("\tmov %0, r10\n\t" : "=r"(got));
+#elif defined(__powerpc__)
+ __asm__("\tbl _GLOBAL_OFFSET_TABLE_-4@local\n\t" : "=l"(got));
#else
/* Do things the slow way in C */
{
diff --git a/ldso/ldso/syscall.h b/ldso/ldso/syscall.h
index 013cc6fb7..322c618f6 100644
--- a/ldso/ldso/syscall.h
+++ b/ldso/ldso/syscall.h
@@ -17,6 +17,12 @@ static inline _syscall1(void, _dl_exit, int, status);
static inline _syscall1(int, _dl_close, int, fd);
+#ifdef __powerpc__
+/* PowerPC has a different calling convention for mmap(). */
+#define __NR__dl_mmap __NR_mmap
+static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length,
+ int, prot, int, flags, int, fd, off_t, offset);
+#else
#define __NR__dl_mmap_real __NR_mmap
static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer);
@@ -33,6 +39,8 @@ static inline void * _dl_mmap(void * addr, unsigned long size, int prot,
buffer[5] = (unsigned long) offset;
return (void *) _dl_mmap_real(buffer);
}
+#endif
+
#ifndef _dl_MAX_ERRNO
#define _dl_MAX_ERRNO 4096
#endif
diff --git a/ldso/ldso/vsprintf.c b/ldso/ldso/vsprintf.c
index 4ca1acffc..959c24080 100644
--- a/ldso/ldso/vsprintf.c
+++ b/ldso/ldso/vsprintf.c
@@ -271,11 +271,13 @@ int _dl_fdprintf(int fd, const char *fmt, ...)
}
if (qualifier == 'l')
num = va_arg(args, unsigned long);
+#ifndef __powerpc__
else if (qualifier == 'h')
if (flags & SIGN)
num = va_arg(args, short);
else
num = va_arg(args, unsigned short);
+#endif
else if (flags & SIGN)
num = va_arg(args, int);
else