diff options
Diffstat (limited to 'ldso/ldso/ld_string.h')
-rw-r--r-- | ldso/ldso/ld_string.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/ldso/ldso/ld_string.h b/ldso/ldso/ld_string.h index 46de5320f..caa47aa60 100644 --- a/ldso/ldso/ld_string.h +++ b/ldso/ldso/ld_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 |