From 515594346f7ed8ae7815b2f84378433047fda637 Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Wed, 11 Dec 2019 00:27:04 -0500 Subject: [PATCH] sort relocation records fix value for external labels. --- link.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/link.cpp b/link.cpp index bf13be1..883fbc5 100644 --- a/link.cpp +++ b/link.cpp @@ -221,12 +221,10 @@ void process_reloc(byte_view &data, cookie &cookie) { if (size > 1) value -= 0x8000; - value += cookie.begin; } /* external resolutions are deferred for later */ - if (external) { /* x = local symbol # */ pending_reloc r; @@ -243,7 +241,7 @@ void process_reloc(byte_view &data, cookie &cookie) { omf::reloc r; r.size = size; r.offset = offset; - r.value = value; + r.value = value + cookie.begin; r.shift = shift; seg.relocs.emplace_back(r); @@ -362,6 +360,11 @@ void resolve(void) { seg.relocs.emplace_back(r); } relocations.clear(); + + /* sort them */ + std::sort(seg.relocs.begin(), seg.relocs.end(), [](const omf::reloc &a, const omf::reloc &b){ + return a.offset < b.offset; + }); } static void print_symbols2(void) {