summaryrefslogtreecommitdiff
path: root/ldso/ldso/string.h
diff options
context:
space:
mode:
Diffstat (limited to 'ldso/ldso/string.h')
-rw-r--r--ldso/ldso/string.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/ldso/ldso/string.h b/ldso/ldso/string.h
index 46de5320f..caa47aa60 100644
--- a/ldso/ldso/string.h
+++ b/ldso/ldso/string.h
@@ -17,6 +17,7 @@ extern char *_dl_strrchr(const char *str, int c);
extern void * _dl_memcpy(void * dst, const void * src, size_t len);
extern int _dl_memcmp(const void * s1,const void * s2,size_t len);
extern void * _dl_memset(void * str,int c,size_t len);
+extern void _dl_fprintf(int, const char *, ...);
#ifndef NULL
#define NULL ((void *) 0)
@@ -200,4 +201,40 @@ static inline char *_dl_simple_ltoahex_inline(char * local, unsigned long i)
return p + 1;
}
+
+#if defined mc68000 || defined __arm__
+/* On some arches constant strings are referenced through the GOT. */
+/* XXX Requires load_addr to be defined. */
+#define SEND_STDERR(X) \
+ { const char *__s = (X); \
+ if (__s < (const char *) load_addr) __s += load_addr; \
+ _dl_write (2, __s, _dl_strlen_inline (__s)); \
+ }
+#else
+#define SEND_STDERR(X) _dl_write(2, X, _dl_strlen_inline(X));
+#endif
+
+#define SEND_ADDRESS_STDERR(X, add_a_newline) { \
+ char tmp[13], *tmp1; \
+ _dl_memset_inline(tmp, 0, sizeof(tmp)); \
+ tmp1=_dl_simple_ltoahex_inline( tmp, (unsigned long)(X)); \
+ _dl_write(2, tmp1, _dl_strlen_inline(tmp1)); \
+ if (add_a_newline) { \
+ tmp[0]='\n'; \
+ _dl_write(2, tmp, 1); \
+ } \
+};
+
+#define SEND_NUMBER_STDERR(X, add_a_newline) { \
+ char tmp[13], *tmp1; \
+ _dl_memset_inline(tmp, 0, sizeof(tmp)); \
+ tmp1=_dl_simple_ltoahex_inline( tmp, (unsigned long)(X)); \
+ _dl_write(2, tmp1, _dl_strlen_inline(tmp1)); \
+ if (add_a_newline) { \
+ tmp[0]='\n'; \
+ _dl_write(2, tmp, 1); \
+ } \
+};
+
+
#endif