From e8e0f3d49f6c06e3c32341c91e5e077e46091eed Mon Sep 17 00:00:00 2001 From: inglorion Date: Sun, 17 Feb 2013 05:23:50 -0800 Subject: [PATCH] made variables in shared libraries work on AMD64 --- lib/voodoo/generators/nasm_generator.rb | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/voodoo/generators/nasm_generator.rb b/lib/voodoo/generators/nasm_generator.rb index 50a1833..bf46ed4 100644 --- a/lib/voodoo/generators/nasm_generator.rb +++ b/lib/voodoo/generators/nasm_generator.rb @@ -40,6 +40,7 @@ module Voodoo when ".text" symbols.each { |sym| emit "global #{sym}:function\n" } else + @relocated_symbols.merge symbols symbols.each { |sym| emit "global #{sym}:data #{sym}.end-#{sym}\n" } end end @@ -54,6 +55,9 @@ module Voodoo # Import labels into the current section def import *symbols + if real_section_name(section) != ".text" + @relocated_symbols.merge symbols + end emit "extern #{symbols.join ', '}\n" end @@ -329,7 +333,8 @@ module Voodoo # Load the value at the given address. # Invoking this code may clobber @BX. def load_at address, reg - if integer?(address) || global?(address) + if integer?(address) || (global?(address) && + !@relocated_symbols.include?(address)) "[#{address}]" else load_value_into_register address, @BX @@ -346,7 +351,11 @@ module Voodoo offset_reference x else # Assume global - symbol + if @relocated_symbols.include? symbol + "[rel #{symbol} wrt ..gotpc]" + else + symbol + end end end -- 2.11.4.GIT