On 23/10/12 01:30, Michael Spencer wrote:> On Mon, Oct 22, 2012 at 7:53 AM, r4start <r4start at gmail.com> wrote: >> On 20/10/12 03:15, Michael Spencer wrote: >>> On Fri, Oct 19, 2012 at 2:55 AM, r4start <r4start at gmail.com> wrote: >>>> Hi all. >>>> >>>> While compiling next code >>>> @A = weak unnamed_addr constant { i32, i32, i32 } { i32 0, i32 0, i32 0 >>>> }, >>>> section ".data" >>>> was discovered that llc ignores weak linkage if we emit it in COFF >>>> object. >>>> Attached patch solves this problem, please review. >>>> >>>> I found some similar tests in test/Objects/Inputs. Should I do something >>>> like trivial.ll checking or there is a better way >>>> to check patch behaviour? >>>> >>>> - Dmitry Sokolov. >>>> >>>> _______________________________________________ >>>> LLVM Developers mailing list >>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>>> >>> test/Object is not the right place for the test. It should probably go >>> in test/MC/COFF as a .ll file, although technically it's codegen... >>> >>> Also, I'm pretty sure this is wrong for MinGW. What do msvc and >>> mingw-gcc produce for c code that generates this? >>> >>> - Michael Spencer >> For this c code(see attachments) cl, mingw and clang produce different >> coff's(was used dumpbin with option /ALL): >> 1) Cl generate separate COMDAT section with linkage selection "pick any" >> 2) Mingw place this value to regular section and place special auxilary >> record to symbol table >> 3) Clang without patch just ignore weakness of this value and place it to >> regular section. >> But for weak values without explicit section specification it use cl-like >> way. i.e. generate >> separate COMDAT section with a little difference in naming (unique suffix >> after $) >> 4) With this patch clang will generate correct COMDAT section for values >> with explicit section specification. >> >> The problem is in backend. When we have explicit section specification >> linkage type is ignored. > Looks fine with a test in CodeGen. > > - Michael SpencerWas added test. Please review. Patch was made by Dmitry Puzirev. -------------- next part -------------- A non-text attachment was scrubbed... Name: weak-section.diff Type: text/x-patch Size: 2587 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20121024/4e93028d/attachment.bin>
On 24/10/12 17:03, r4start wrote:> On 23/10/12 01:30, Michael Spencer wrote: >> On Mon, Oct 22, 2012 at 7:53 AM, r4start <r4start at gmail.com> wrote: >>> On 20/10/12 03:15, Michael Spencer wrote: >>>> On Fri, Oct 19, 2012 at 2:55 AM, r4start <r4start at gmail.com> wrote: >>>>> Hi all. >>>>> >>>>> While compiling next code >>>>> @A = weak unnamed_addr constant { i32, i32, i32 } { i32 0, i32 0, >>>>> i32 0 >>>>> }, >>>>> section ".data" >>>>> was discovered that llc ignores weak linkage if we emit it in COFF >>>>> object. >>>>> Attached patch solves this problem, please review. >>>>> >>>>> I found some similar tests in test/Objects/Inputs. Should I do >>>>> something >>>>> like trivial.ll checking or there is a better way >>>>> to check patch behaviour? >>>>> >>>>> - Dmitry Sokolov. >>>>> >>>>> _______________________________________________ >>>>> LLVM Developers mailing list >>>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>>>> >>>> test/Object is not the right place for the test. It should probably go >>>> in test/MC/COFF as a .ll file, although technically it's codegen... >>>> >>>> Also, I'm pretty sure this is wrong for MinGW. What do msvc and >>>> mingw-gcc produce for c code that generates this? >>>> >>>> - Michael Spencer >>> For this c code(see attachments) cl, mingw and clang produce different >>> coff's(was used dumpbin with option /ALL): >>> 1) Cl generate separate COMDAT section with linkage selection "pick >>> any" >>> 2) Mingw place this value to regular section and place special auxilary >>> record to symbol table >>> 3) Clang without patch just ignore weakness of this value and place >>> it to >>> regular section. >>> But for weak values without explicit section specification it >>> use cl-like >>> way. i.e. generate >>> separate COMDAT section with a little difference in naming >>> (unique suffix >>> after $) >>> 4) With this patch clang will generate correct COMDAT section for >>> values >>> with explicit section specification. >>> >>> The problem is in backend. When we have explicit section specification >>> linkage type is ignored. >> Looks fine with a test in CodeGen. >> >> - Michael Spencer > Was added test. > Please review. > Patch was made by Dmitry Puzirev.Ping?
On Wed, Oct 31, 2012 at 9:41 AM, r4start <r4start at gmail.com> wrote:> On 24/10/12 17:03, r4start wrote: >> >> On 23/10/12 01:30, Michael Spencer wrote: >>> >>> On Mon, Oct 22, 2012 at 7:53 AM, r4start <r4start at gmail.com> wrote: >>>> >>>> On 20/10/12 03:15, Michael Spencer wrote: >>>>> >>>>> On Fri, Oct 19, 2012 at 2:55 AM, r4start <r4start at gmail.com> wrote: >>>>>> >>>>>> Hi all. >>>>>> >>>>>> While compiling next code >>>>>> @A = weak unnamed_addr constant { i32, i32, i32 } { i32 0, i32 0, i32 >>>>>> 0 >>>>>> }, >>>>>> section ".data" >>>>>> was discovered that llc ignores weak linkage if we emit it in COFF >>>>>> object. >>>>>> Attached patch solves this problem, please review. >>>>>> >>>>>> I found some similar tests in test/Objects/Inputs. Should I do >>>>>> something >>>>>> like trivial.ll checking or there is a better way >>>>>> to check patch behaviour? >>>>>> >>>>>> - Dmitry Sokolov. >>>>>> >>>>>> _______________________________________________ >>>>>> LLVM Developers mailing list >>>>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>>>>> >>>>> test/Object is not the right place for the test. It should probably go >>>>> in test/MC/COFF as a .ll file, although technically it's codegen... >>>>> >>>>> Also, I'm pretty sure this is wrong for MinGW. What do msvc and >>>>> mingw-gcc produce for c code that generates this? >>>>> >>>>> - Michael Spencer >>>> >>>> For this c code(see attachments) cl, mingw and clang produce different >>>> coff's(was used dumpbin with option /ALL): >>>> 1) Cl generate separate COMDAT section with linkage selection "pick any" >>>> 2) Mingw place this value to regular section and place special auxilary >>>> record to symbol table >>>> 3) Clang without patch just ignore weakness of this value and place it >>>> to >>>> regular section. >>>> But for weak values without explicit section specification it use >>>> cl-like >>>> way. i.e. generate >>>> separate COMDAT section with a little difference in naming (unique >>>> suffix >>>> after $) >>>> 4) With this patch clang will generate correct COMDAT section for values >>>> with explicit section specification. >>>> >>>> The problem is in backend. When we have explicit section specification >>>> linkage type is ignored. >>> >>> Looks fine with a test in CodeGen. >>> >>> - Michael Spencer >> >> Was added test. >> Please review. >> Patch was made by Dmitry Puzirev. > > Ping?lgtm. - Michael Spencer