improve PIC_STRING

This commit is contained in:
John Reiser
2010-11-18 08:23:08 -08:00
parent 92f7d16b5e
commit 6e8be0578c
+12 -14
View File
@@ -61,35 +61,33 @@ ssize_t write(int, void const *, size_t);
#if defined(__i386__) /*{*/ #if defined(__i386__) /*{*/
#define PIC_STRING(value, var) \ #define PIC_STRING(value, var) \
char const *var; \
__asm__ __volatile__ ( \ __asm__ __volatile__ ( \
"call 0f; .asciz \"" value "\"; \ "call 0f; .asciz \"" value "\"; \
0: pop %0;" : "=a"(var) : \ 0: pop %0;" : "=r"(var) : \
); \ )
return var;
#elif defined(__arm__) /*}{*/ #elif defined(__arm__) /*}{*/
#define PIC_STRING(value, var) \ #define PIC_STRING(value, var) \
char const *var; \
__asm__ __volatile__ ( \ __asm__ __volatile__ ( \
"mov r0,pc; ret; \ "mov %0,pc; b 0f; \
.asciz \"" value "\"; .balign 4" : "=a"(var) : \ .asciz \"" value "\"; .balign 4; \
); \ 0: " : "=r"(var) \
return var; )
#elif defined(__mips__) /*}{*/ #elif defined(__mips__) /*}{*/
#define PIC_STRING(value, var) \ #define PIC_STRING(value, var) \
register char const *var; \
__asm__ __volatile__ ( \ __asm__ __volatile__ ( \
".set noreorder; bal 0f; move %0,$31; .set reorder; \ ".set noreorder; bal 0f; move %0,$31; .set reorder; \
.asciz \"" value "\"; .balign 4; \ .asciz \"" value "\"; .balign 4; \
0: " \ 0: " \
: "=r"(var) : : "ra" \ : "=r"(var) : : "ra" \
); \ )
return var;
#endif /*}*/ #endif /*}*/
#define DEBUG_STRCON(name, value) \ #define DEBUG_STRCON(name, strcon) \
static char const *name(void) { PIC_STRING(value, rv); } static char const *name(void) { \
register char const *rv; PIC_STRING(strcon, rv); \
return rv; \
}
#ifdef __arm__ /*{*/ #ifdef __arm__ /*{*/