On 09/02/2011 05:58 PM, Duncan Sands wrote:> Hi Yiannis, > >> I have been using llvm 2.8 (i know ancient history!) for a backend that i was >> implementing. I have been trying to port my patches to latest llvm (svn build) >> lately but i have one problem as far as the Exception Handling mechanism is >> concerned. It seems that there are no Exception Tables generated any more such >> as the one below: > > got some example bitcode for which you see this (or, rather, don't see this > since the problem is that you are not seeing exception tables)? > > Ciao, Duncan. > >> >> .section .gcc_except_table,"a", at progbits >> .align 4 >> GCC_except_table0: >> .Lexception0: >> .byte 255 # @LPStart Encoding = omit >> .byte 3 # @TType Encoding = udata4 >> .uleb128 41 # @TType base offset >> .byte 3 # Call site Encoding = udata4 >> .uleb128 39 # Call site table length >> .Lset0 = .Leh_func_begin0-.Leh_func_begin0 # Region start >> .long .Lset0 >> .Lset1 = .Ltmp0-.Leh_func_begin0 # Region length >> .long .Lset1 >> .long 0 # Landing pad >> .uleb128 0 # Action >> .Lset2 = .Ltmp0-.Leh_func_begin0 # Region start >> .long .Lset2 >> .Lset3 = .Ltmp1-.Ltmp0 # Region length >> .long .Lset3 >> .Lset4 = .Ltmp2-.Leh_func_begin0 # Landing pad >> .long .Lset4 >> .uleb128 0 # Action >> .Lset5 = .Ltmp1-.Leh_func_begin0 # Region start >> .long .Lset5 >> .Lset6 = .Leh_func_end0-.Ltmp1 # Region length >> .long .Lset6 >> .long 0 # Landing pad >> .uleb128 0 # Action >> .align 4 >> >> >> I've searched for this but i couldn't find some documentation about the changes >> in the EH staff and the documentation on the website is not complete... Is there >> any way i can force the generation of these tables in current LLVM? >> >> Thanks in advance, >> Yiannis >>Hi Duncan, Sorry for my omission! I attach an example (test_0.ll). I do: llvm-as < test_0.ll | llc and i get output-llvm28.txt with the 2.8 versions of the tools and i repeat with the latest versions from the svn repo and i get output-llvm30.txt. As you can see there is a: .section .gcc_except_table,"a", at progbits .... in the 2.8 output just below the code segment while there is no such section in the 3.0 case! Thanks again, Yiannis -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: test_0.ll URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110902/0538c8c5/attachment.ksh> -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: output-llvm30.txt URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110902/0538c8c5/attachment.txt> -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: output-llvm28.txt URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110902/0538c8c5/attachment-0001.txt>
Hi Yiannis,>>> I have been using llvm 2.8 (i know ancient history!) for a backend that i was >>> implementing. I have been trying to port my patches to latest llvm (svn build) >>> lately but i have one problem as far as the Exception Handling mechanism is >>> concerned. It seems that there are no Exception Tables generated any more such >>> as the one below:you need to add a landingpad instruction to the start of each basic block with is that unwind target of an invoke. Since you only seem to be interested in cleanups, something like this should do: declare i32 @__gcc_personality_v0(i32, i64, i8*, i8*) ... invoke void @foo() to label %cont unwind label %lp lp: %tmp = landingpad { i8*, i32 } personality i32 (i32, i64, i8*, i8*)* @__gcc_personality_v0 cleanup ... Ciao, Duncan.>> >> got some example bitcode for which you see this (or, rather, don't see this >> since the problem is that you are not seeing exception tables)? >> >> Ciao, Duncan. >> >>> >>> .section .gcc_except_table,"a", at progbits >>> .align 4 >>> GCC_except_table0: >>> .Lexception0: >>> .byte 255 # @LPStart Encoding = omit >>> .byte 3 # @TType Encoding = udata4 >>> .uleb128 41 # @TType base offset >>> .byte 3 # Call site Encoding = udata4 >>> .uleb128 39 # Call site table length >>> .Lset0 = .Leh_func_begin0-.Leh_func_begin0 # Region start >>> .long .Lset0 >>> .Lset1 = .Ltmp0-.Leh_func_begin0 # Region length >>> .long .Lset1 >>> .long 0 # Landing pad >>> .uleb128 0 # Action >>> .Lset2 = .Ltmp0-.Leh_func_begin0 # Region start >>> .long .Lset2 >>> .Lset3 = .Ltmp1-.Ltmp0 # Region length >>> .long .Lset3 >>> .Lset4 = .Ltmp2-.Leh_func_begin0 # Landing pad >>> .long .Lset4 >>> .uleb128 0 # Action >>> .Lset5 = .Ltmp1-.Leh_func_begin0 # Region start >>> .long .Lset5 >>> .Lset6 = .Leh_func_end0-.Ltmp1 # Region length >>> .long .Lset6 >>> .long 0 # Landing pad >>> .uleb128 0 # Action >>> .align 4 >>> >>> >>> I've searched for this but i couldn't find some documentation about the changes >>> in the EH staff and the documentation on the website is not complete... Is there >>> any way i can force the generation of these tables in current LLVM? >>> >>> Thanks in advance, >>> Yiannis >>> > Hi Duncan, > > Sorry for my omission! I attach an example (test_0.ll). I do: > llvm-as < test_0.ll | llc > and i get output-llvm28.txt with the 2.8 versions of the tools and i repeat with > the latest versions from the svn repo and i get output-llvm30.txt. > > As you can see there is a: > .section .gcc_except_table,"a", at progbits > .... > in the 2.8 output just below the code segment while there is no such section in > the 3.0 case! > > Thanks again, > Yiannis
On 09/02/2011 07:31 PM, Duncan Sands wrote:> Hi Yiannis, > > >>>> I have been using llvm 2.8 (i know ancient history!) for a backend that i was >>>> implementing. I have been trying to port my patches to latest llvm (svn build) >>>> lately but i have one problem as far as the Exception Handling mechanism is >>>> concerned. It seems that there are no Exception Tables generated any more such >>>> as the one below: >>>> > you need to add a landingpad instruction to the start of each basic block with > is that unwind target of an invoke. Since you only seem to be interested in > cleanups, something like this should do: > > declare i32 @__gcc_personality_v0(i32, i64, i8*, i8*) > > ... > invoke void @foo() to label %cont unwind label %lp > > lp: > %tmp = landingpad { i8*, i32 } personality i32 (i32, i64, i8*, i8*)* > @__gcc_personality_v0 cleanup > ... > > Ciao, Duncan. > >This seems to work fine! Thank you very much Duncan! Yiannis