Hello, I append another clue I found out: The problem is definitely not caused by "__ImageBase" the problem comes with the "OFFSET". I generated another object file which crashed. The commonality: mov edx, DWORD PTR ?normalPlanschbecken@@3HA ; normalPlanschbecken lea rcx, OFFSET FLAT :??_C at _0CC@LCMJAIPO at Reading?5?$CCnormalPlanschbecken?$CC?5?$CFi@ jmp printf From: via llvm-dev <llvm-dev at lists.llvm.org> To: llvm-dev at lists.llvm.org Date: 06.03.2018 10:45 Subject: [llvm-dev] Broken relocation for generating offsets? Sent by: "llvm-dev" <llvm-dev-bounces at lists.llvm.org> Hello LLVM-Mailing-List, I discovered a strange behavior when dealing with object files generated by the compiler of Visual Studio 2015. When jitting bc files I also add object files to look up functions. These object files are coming from visual studio. When using a switch case instruction that compiler often generates code based of __ImageBase. I show you a short snippet of the assembly output. mov eax, DWORD PTR ?myInt@@3HA ; myInt lea rdi, OFFSET FLAT:__ImageBase xor ebx, ebx Then these offset is used to jump to some labels like "$LL4 at execute:". When the object file gets added to the jitting process this offset generation seems to be broken. Executing the code coming from the object file will lead to a crash. The crash address will always be exactly the address I used to overload __ImageBase with. So it seems that the address relocation is wrong with generating offsets? Kind regards Björn Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, USt.ID-Nr. DE 114 165 789 Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, Heiko Lampert, Hiroshi Kawamura, Takashi Nagano, Takeshi Fukushima. _______________________________________________ LLVM Developers mailing list llvm-dev at lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, USt.ID-Nr. DE 114 165 789 Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, Heiko Lampert, Hiroshi Kawamura, Takashi Nagano, Takeshi Fukushima. Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, USt.ID-Nr. DE 114 165 789 Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, Heiko Lampert, Hiroshi Kawamura, Takashi Nagano, Takeshi Fukushima. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180322/e6a959b4/attachment-0001.html>
Reid Kleckner via llvm-dev
2018-Mar-22 17:43 UTC
[llvm-dev] Broken relocation for generating offsets?
I wouldn't be surprised if JITing COFF files on Windows doesn't work so well, since the object file format assumes most symbols are dllimport or within the local 2GB module address range. I'm not familiar with the current JIT state of the art, though. On Thu, Mar 22, 2018 at 1:45 AM via llvm-dev <llvm-dev at lists.llvm.org> wrote:> Hello, > > I append another clue I found out: The problem is definitely not caused by > "__ImageBase" the problem comes with the "OFFSET". I generated another > object file which crashed. The commonality: > mov edx, DWORD PTR ?normalPlanschbecken@@3HA ; normalPlanschbecken > lea rcx, *OFFSET FLAT*:??_C at _0CC@LCMJAIPO > @Reading?5?$CCnormalPlanschbecken?$CC?5?$CFi@ > jmp printf > > > > > From: via llvm-dev <llvm-dev at lists.llvm.org> > To: llvm-dev at lists.llvm.org > Date: 06.03.2018 10:45 > Subject: [llvm-dev] Broken relocation for generating offsets? > Sent by: "llvm-dev" <llvm-dev-bounces at lists.llvm.org> > ------------------------------ > > > > Hello LLVM-Mailing-List, > > I discovered a strange behavior when dealing with object files generated > by the compiler of Visual Studio 2015. > > When jitting bc files I also add object files to look up functions. These > object files are coming from visual studio. When using a switch case > instruction that compiler often generates code based of __ImageBase. I show > you a short snippet of the assembly output. > mov eax, DWORD PTR ?myInt@@3HA ; myInt > lea rdi,* OFFSET FLAT*:__ImageBase > xor ebx, ebx > > > > Then these offset is used to jump to some labels like "$LL4 at execute:". > > When the object file gets added to the jitting process this offset > generation seems to be broken. Executing the code coming from the object > file will lead to a crash. The crash address will always be exactly the > address I used to overload __ImageBase with. So it seems that the address > relocation is wrong with generating offsets? > > Kind regards > Björn > > Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, > USt.ID-Nr. DE 114 165 789 > Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, > Heiko Lampert, Hiroshi Kawamura, Takashi Nagano, Takeshi Fukushima. > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > *http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev* > <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev> > > > > Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, > USt.ID-Nr. DE 114 165 789 > Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, > Heiko Lampert, Hiroshi Kawamura, Takashi Nagano, Takeshi Fukushima. > > > > Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, > USt.ID-Nr. DE 114 165 789 > Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, > Heiko Lampert, Hiroshi Kawamura, Takashi Nagano, Takeshi Fukushima. > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180322/d28992c1/attachment.html>
In my case I wouldn't exceed the 2GB module address range... As I understood - but I'm still a cub with the LLVM and everything - the "OFFSET" thingy should calculate the offset from the instruction to the address of the symbol. But LLVM creates a jump to that symbol. From: Reid Kleckner <rnk at google.com> To: bjoern.gaier at horiba.com, Lang Hames <lhames at gmail.com> Cc: llvm-dev <llvm-dev at lists.llvm.org> Date: 22.03.2018 18:43 Subject: Re: [llvm-dev] Broken relocation for generating offsets? I wouldn't be surprised if JITing COFF files on Windows doesn't work so well, since the object file format assumes most symbols are dllimport or within the local 2GB module address range. I'm not familiar with the current JIT state of the art, though. On Thu, Mar 22, 2018 at 1:45 AM via llvm-dev <llvm-dev at lists.llvm.org> wrote: Hello, I append another clue I found out: The problem is definitely not caused by "__ImageBase" the problem comes with the "OFFSET". I generated another object file which crashed. The commonality: mov edx, DWORD PTR ?normalPlanschbecken@@3HA ; normalPlanschbecken lea rcx, OFFSET FLAT :??_C at _0CC@LCMJAIPO at Reading?5?$CCnormalPlanschbecken?$CC?5?$CFi@ jmp printf From: via llvm-dev <llvm-dev at lists.llvm.org> To: llvm-dev at lists.llvm.org Date: 06.03.2018 10:45 Subject: [llvm-dev] Broken relocation for generating offsets? Sent by: "llvm-dev" <llvm-dev-bounces at lists.llvm.org> Hello LLVM-Mailing-List, I discovered a strange behavior when dealing with object files generated by the compiler of Visual Studio 2015. When jitting bc files I also add object files to look up functions. These object files are coming from visual studio. When using a switch case instruction that compiler often generates code based of __ImageBase. I show you a short snippet of the assembly output. mov eax, DWORD PTR ?myInt@@3HA ; myInt lea rdi, OFFSET FLAT:__ImageBase xor ebx, ebx Then these offset is used to jump to some labels like "$LL4 at execute:". When the object file gets added to the jitting process this offset generation seems to be broken. Executing the code coming from the object file will lead to a crash. The crash address will always be exactly the address I used to overload __ImageBase with. So it seems that the address relocation is wrong with generating offsets? Kind regards Björn Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, USt.ID-Nr. DE 114 165 789 Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, Heiko Lampert, Hiroshi Kawamura, Takashi Nagano, Takeshi Fukushima. _______________________________________________ LLVM Developers mailing list llvm-dev at lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, USt.ID-Nr. DE 114 165 789 Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, Heiko Lampert, Hiroshi Kawamura, Takashi Nagano, Takeshi Fukushima. Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, USt.ID-Nr. DE 114 165 789 Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, Heiko Lampert, Hiroshi Kawamura, Takashi Nagano, Takeshi Fukushima. _______________________________________________ LLVM Developers mailing list llvm-dev at lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev Als GmbH eingetragen im Handelsregister Bad Homburg v.d.H. HRB 9816, USt.ID-Nr. DE 114 165 789 Geschäftsführer: Dr. Hiroshi Nakamura, Dr. Robert Plank, Markus Bode, Heiko Lampert, Hiroshi Kawamura, Takashi Nagano, Takeshi Fukushima. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180323/0739bc5f/attachment.html>