diff options
| author | Shinichiro Hamaji <shinichiro.hamaji _at_ gmail.com> | 2009-07-19 06:42:23 +0900 |
|---|---|---|
| committer | grischka <grischka> | 2009-08-24 13:30:03 +0200 |
| commit | 5dadff3de553b0dae46cca233c751ed8b6853da4 (patch) | |
| tree | 6bcd6792db49262514998895b6847ac0e0599948 | |
| parent | 3a1380120d8c952a34f6b5db0b3c42f794770f51 (diff) | |
| download | tinycc-5dadff3de553b0dae46cca233c751ed8b6853da4.tar.gz tinycc-5dadff3de553b0dae46cca233c751ed8b6853da4.tar.bz2 | |
x86-64: Fix stab debug information.
We need 32bit relocations for code and 64bit for debug info.
Introduce a new macro R_DATA_PTR to distinguish the two usages.
| -rw-r--r-- | arm-gen.c | 1 | ||||
| -rw-r--r-- | c67-gen.c | 1 | ||||
| -rw-r--r-- | i386-gen.c | 1 | ||||
| -rw-r--r-- | tccgen.c | 4 | ||||
| -rw-r--r-- | x86_64-gen.c | 3 |
5 files changed, 7 insertions, 3 deletions
@@ -163,6 +163,7 @@ static CType float_type, double_type, func_float_type, func_double_type; /* relocation type for 32 bit data relocation */ #define R_DATA_32 R_ARM_ABS32 +#define R_DATA_PTR R_ARM_ABS32 #define R_JMP_SLOT R_ARM_JUMP_SLOT #define R_COPY R_ARM_COPY @@ -163,6 +163,7 @@ int TotalBytesPushedOnStack; /* relocation type for 32 bit data relocation */ #define R_DATA_32 R_C60_32 +#define R_DATA_PTR R_C60_32 #define R_JMP_SLOT R_C60_JMP_SLOT #define R_COPY R_C60_COPY @@ -77,6 +77,7 @@ const int reg_classes[NB_REGS] = { /* relocation type for 32 bit data relocation */ #define R_DATA_32 R_386_32 +#define R_DATA_PTR R_386_32 #define R_JMP_SLOT R_386_JMP_SLOT #define R_COPY R_386_COPY @@ -4346,7 +4346,7 @@ static void init_putv(CType *type, Section *sec, unsigned long c, break; default: if (vtop->r & VT_SYM) { - greloc(sec, vtop->sym, c, R_DATA_32); + greloc(sec, vtop->sym, c, R_DATA_PTR); } *(int *)ptr |= (vtop->c.i & bit_mask) << bit_pos; break; @@ -4796,7 +4796,7 @@ static void decl_initializer_alloc(CType *type, AttributeDef *ad, int r, if (tcc_state->do_bounds_check) { unsigned long *bounds_ptr; - greloc(bounds_section, sym, bounds_section->data_offset, R_DATA_32); + greloc(bounds_section, sym, bounds_section->data_offset, R_DATA_PTR); /* then add global bound info */ bounds_ptr = section_ptr_add(bounds_section, 2 * sizeof(long)); bounds_ptr[0] = 0; /* relocated */ diff --git a/x86_64-gen.c b/x86_64-gen.c index 1739e95..e22de5c 100644 --- a/x86_64-gen.c +++ b/x86_64-gen.c @@ -91,7 +91,8 @@ const int reg_classes[NB_REGS] = { #define EM_TCC_TARGET EM_X86_64 /* relocation type for 32 bit data relocation */ -#define R_DATA_32 R_X86_64_64 +#define R_DATA_32 R_X86_64_32 +#define R_DATA_PTR R_X86_64_64 #define R_JMP_SLOT R_X86_64_JUMP_SLOT #define R_COPY R_X86_64_COPY |
