From 5dadff3de553b0dae46cca233c751ed8b6853da4 Mon Sep 17 00:00:00 2001 From: Shinichiro Hamaji Date: Sun, 19 Jul 2009 06:42:23 +0900 Subject: [PATCH] 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. --- arm-gen.c | 1 + c67-gen.c | 1 + i386-gen.c | 1 + tccgen.c | 4 ++-- x86_64-gen.c | 3 ++- 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/arm-gen.c b/arm-gen.c index 9370db54..e0866ffd 100644 --- a/arm-gen.c +++ b/arm-gen.c @@ -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 diff --git a/c67-gen.c b/c67-gen.c index a60b6bff..88224fd5 100644 --- a/c67-gen.c +++ b/c67-gen.c @@ -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 diff --git a/i386-gen.c b/i386-gen.c index 61f9e78f..ff5028ef 100644 --- a/i386-gen.c +++ b/i386-gen.c @@ -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 diff --git a/tccgen.c b/tccgen.c index 99ec723a..bb7c4e94 100644 --- a/tccgen.c +++ b/tccgen.c @@ -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 1739e957..e22de5c5 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 -- 2.11.4.GIT