aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji _at_ gmail.com>2009-07-19 06:42:23 +0900
committergrischka <grischka>2009-08-24 13:30:03 +0200
commit5dadff3de553b0dae46cca233c751ed8b6853da4 (patch)
tree6bcd6792db49262514998895b6847ac0e0599948
parent3a1380120d8c952a34f6b5db0b3c42f794770f51 (diff)
downloadtinycc-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.c1
-rw-r--r--c67-gen.c1
-rw-r--r--i386-gen.c1
-rw-r--r--tccgen.c4
-rw-r--r--x86_64-gen.c3
5 files changed, 7 insertions, 3 deletions
diff --git a/arm-gen.c b/arm-gen.c
index 9370db5..e0866ff 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 a60b6bf..88224fd 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 61f9e78..ff5028e 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 99ec723..bb7c4e9 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 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