[lld] r227711 - [test] Add test for section groups and deadstrip

Shankar Easwaran shankare at codeaurora.org
Thu Feb 5 16:12:58 PST 2015


You need to keep the group if you are referring to one function in the 
group. Its a bug with gold/gnu if its throwing away the whole group.

On 2/5/2015 4:53 PM, Rafael EspĂ­ndola wrote:
> I think this is testing for a gnu ld bug/limitation:
>
> With the attached testcase, gnu ld keeps zed and bar. Gold keeps only bar.
>
> lld keeps _start, bad, zed and produces wrong bindings :-(
>
>
> On 1 February 2015 at 00:47, Shankar Easwaran <shankare at codeaurora.org> wrote:
>> Author: shankare
>> Date: Sat Jan 31 23:47:02 2015
>> New Revision: 227711
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=227711&view=rev
>> Log:
>> [test] Add test for section groups and deadstrip
>>
>> This adds a test that deadstrip should preserve the section group even if there
>> is only one reference to a function in the group.
>>
>> Added:
>>      lld/trunk/test/core/sectiongroup-deadstrip.objtxt
>>
>> Added: lld/trunk/test/core/sectiongroup-deadstrip.objtxt
>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/core/sectiongroup-deadstrip.objtxt?rev=227711&view=auto
>> ==============================================================================
>> --- lld/trunk/test/core/sectiongroup-deadstrip.objtxt (added)
>> +++ lld/trunk/test/core/sectiongroup-deadstrip.objtxt Sat Jan 31 23:47:02 2015
>> @@ -0,0 +1,92 @@
>> +# Test for section group members be preserved even if there is a
>> +# reference to only one functions in the group.
>> +# RUN: lld -core --dead-strip %s | FileCheck %s
>> +
>> +#
>> +# Test that section groups are parsed properly when there is a reference to a
>> +# group atom from outside a group.
>> +#
>> +
>> +---
>> +defined-atoms:
>> +  - name:         entry
>> +    dead-strip:   never
>> +    references:
>> +    - offset:          1
>> +      kind:            pcrel32
>> +      target:          d1
>> +  - name:            f1
>> +    scope:           global
>> +    type:            code
>> +  - name:            f2
>> +    scope:           global
>> +    type:            code
>> +  - name:            g1
>> +    scope:           global
>> +    type:            code
>> +  - name:            d1
>> +    scope:           global
>> +    type:            data
>> +  - name:            g1
>> +    scope:           global
>> +    type:            group-comdat
>> +    references:
>> +      - kind:            group-child
>> +        target:          f1
>> +      - kind:            group-child
>> +        target:          f2
>> +      - kind:            group-child
>> +        target:          d1
>> +      - kind:            group-child
>> +        target:          g1
>> +  - name:            anotherfunction
>> +    scope:           global
>> +    type:            data
>> +    references:
>> +      - kind:            layout-before
>> +        target:          f1
>> +---
>> +undefined-atoms:
>> +    - name:              f1
>> +      can-be-null:       never
>> +...
>> +
>> +#CHECK: defined-atoms:
>> +#CHECK:   - name:            g1
>> +#CHECK:     ref-name:        [[PARENT:[a-zA-Z\.0-9_]+]]
>> +#CHECK:     scope:           global
>> +#CHECK:     type:            group-comdat
>> +#CHECK:     references:
>> +#CHECK:       - kind:            group-child
>> +#CHECK:         offset:          0
>> +#CHECK:         target:          [[GCHILDONE:[a-zA-Z\.0-9_]+]]
>> +#CHECK:       - kind:            group-child
>> +#CHECK:         offset:          0
>> +#CHECK:         target:          [[GCHILDTWO:[a-zA-Z\.0-9_]+]]
>> +#CHECK:       - kind:            group-child
>> +#CHECK:         offset:          0
>> +#CHECK:         target:          [[GCHILDTHREE:[a-zA-Z\.0-9_]+]]
>> +#CHECK:       - kind:            group-child
>> +#CHECK:         offset:          0
>> +#CHECK:         target:          [[GCHILDFOUR:[a-zA-Z\.0-9_]+]]
>> +#CHECK:   - name:            f1
>> +#CHECK:     ref-name:        [[GCHILDONE]]
>> +#CHECK:     scope:           global
>> +#CHECK:   - name:            f2
>> +#CHECK:     ref-name:        [[GCHILDTWO]]
>> +#CHECK:     scope:           global
>> +#CHECK:   - name:            d1
>> +#CHECK:     ref-name:        [[GCHILDTHREE]]
>> +#CHECK:     scope:           global
>> +#CHECK:     type:            data
>> +#CHECK:   - name:            g1
>> +#CHECK:     ref-name:        [[GCHILDFOUR]]
>> +#CHECK:     scope:           global
>> +#CHECK:   - name:            anotherfunction
>> +#CHECK:     scope:           global
>> +#CHECK:     type:            data
>> +#CHECK:     references:
>> +#CHECK:       - kind:            layout-before
>> +#CHECK:         offset:          0
>> +#CHECK:         target:          [[GCHILDONE]]
>> +#CHECK: ...
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits


-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation





More information about the llvm-commits mailing list