From 4d254312be9ef239022233c2076e60c731d7cf22 Mon Sep 17 00:00:00 2001
From: herman ten brugge <hermantenbrugge@home.nl>
Date: Tue, 12 Jan 2021 07:40:45 +0100
Subject: [PATCH] Remove gaps between RELX sections update

Update file_offset as well
---
 tccelf.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/tccelf.c b/tccelf.c
index 2aa106a6..3bff77e8 100644
--- a/tccelf.c
+++ b/tccelf.c
@@ -2247,6 +2247,7 @@ static int final_sections_reloc(TCCState *s1)
 static void update_reloc_sections(TCCState *s1, struct dyn_inf *dyninf)
 {
     int i;
+    unsigned long file_offset = 0;
     Section *s;
     Section *relocplt = s1->got ? s1->got->relocplt : NULL;
 
@@ -2255,11 +2256,15 @@ static void update_reloc_sections(TCCState *s1, struct dyn_inf *dyninf)
 
     for(i = 1; i < s1->nb_sections; i++) {
         s = s1->sections[i];
-	if (s->sh_type == SHT_RELX && s != relocplt) {
-	    if (dyninf->rel_size == 0)
+	if (s->sh_type == SHT_RELX && s->sh_size && s != relocplt) {
+	    if (dyninf->rel_size == 0) {
 		dyninf->rel_addr = s->sh_addr;
-	    else
+		file_offset = s->sh_offset;
+	    }
+	    else {
 		s->sh_addr = dyninf->rel_addr + dyninf->rel_size;
+		s->sh_offset = file_offset + dyninf->rel_size;
+	    }
 	    dyninf->rel_size += s->sh_size;
 	}
     }