From 6e8be0578c61dc039d78261add128d9cbd1e40ba Mon Sep 17 00:00:00 2001 From: John Reiser Date: Thu, 18 Nov 2010 08:23:08 -0800 Subject: [PATCH] improve PIC_STRING --- src/stub/src/i386-linux.elf-main.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/stub/src/i386-linux.elf-main.c b/src/stub/src/i386-linux.elf-main.c index 33d80586..a3dc851c 100644 --- a/src/stub/src/i386-linux.elf-main.c +++ b/src/stub/src/i386-linux.elf-main.c @@ -61,35 +61,33 @@ ssize_t write(int, void const *, size_t); #if defined(__i386__) /*{*/ #define PIC_STRING(value, var) \ - char const *var; \ __asm__ __volatile__ ( \ "call 0f; .asciz \"" value "\"; \ - 0: pop %0;" : "=a"(var) : \ - ); \ - return var; + 0: pop %0;" : "=r"(var) : \ + ) #elif defined(__arm__) /*}{*/ #define PIC_STRING(value, var) \ - char const *var; \ __asm__ __volatile__ ( \ - "mov r0,pc; ret; \ - .asciz \"" value "\"; .balign 4" : "=a"(var) : \ - ); \ - return var; + "mov %0,pc; b 0f; \ + .asciz \"" value "\"; .balign 4; \ + 0: " : "=r"(var) \ + ) #elif defined(__mips__) /*}{*/ #define PIC_STRING(value, var) \ - register char const *var; \ __asm__ __volatile__ ( \ ".set noreorder; bal 0f; move %0,$31; .set reorder; \ .asciz \"" value "\"; .balign 4; \ 0: " \ : "=r"(var) : : "ra" \ - ); \ - return var; + ) #endif /*}*/ -#define DEBUG_STRCON(name, value) \ - static char const *name(void) { PIC_STRING(value, rv); } +#define DEBUG_STRCON(name, strcon) \ + static char const *name(void) { \ + register char const *rv; PIC_STRING(strcon, rv); \ + return rv; \ + } #ifdef __arm__ /*{*/