[PATCH] D43234: [ELF] - Fix case of using both --icf and --symbol-ordering-file together.

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 16 09:36:34 PST 2018


LGTM

George Rimar via Phabricator <reviews at reviews.llvm.org> writes:

> grimar updated this revision to Diff 134630.
> grimar added a comment.
>
> - Addressed comment.
>
>
> https://reviews.llvm.org/D43234
>
> Files:
>   ELF/Writer.cpp
>   test/ELF/symbol-ordering-file-icf.s
>
>
> Index: test/ELF/symbol-ordering-file-icf.s
> ===================================================================
> --- test/ELF/symbol-ordering-file-icf.s
> +++ test/ELF/symbol-ordering-file-icf.s
> @@ -0,0 +1,32 @@
> +# REQUIRES: x86
> +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
> +# RUN: echo "zed" > %t.order
> +# RUN: echo "bar" >> %t.order
> +# RUN: echo "foo" >> %t.order
> +# RUN: ld.lld --icf=all --symbol-ordering-file %t.order -shared %t.o -o %t.so
> +# RUN: llvm-nm %t.so | FileCheck %s
> +
> +## Check that after ICF merges 'foo' and 'zed' we still
> +## place them before 'bar', in according to ordering file.
> +# CHECK-DAG: 0000000000001000 T foo
> +# CHECK-DAG: 0000000000001000 T zed
> +# CHECK-DAG: 0000000000001004 T bar
> +
> +.section .text.foo,"ax", at progbits
> +.align 4
> +.global foo
> +foo:
> +  retq
> +
> +.section .text.bar,"ax", at progbits
> +.align 4
> +.global bar
> +bar:
> +  nop
> +  retq
> +
> +.section .text.zed,"ax", at progbits
> +.align 4
> +.global zed
> +zed:
> +  retq
> Index: ELF/Writer.cpp
> ===================================================================
> --- ELF/Writer.cpp
> +++ ELF/Writer.cpp
> @@ -1061,7 +1061,7 @@
>          continue;
>  
>        if (auto *Sec = dyn_cast_or_null<InputSectionBase>(D->Section)) {
> -        int &Priority = SectionOrder[Sec];
> +        int &Priority = SectionOrder[cast<InputSectionBase>(Sec->Repl)];
>          Priority = std::min(Priority, Ent.Priority);
>        }
>      }
>
>
> Index: test/ELF/symbol-ordering-file-icf.s
> ===================================================================
> --- test/ELF/symbol-ordering-file-icf.s
> +++ test/ELF/symbol-ordering-file-icf.s
> @@ -0,0 +1,32 @@
> +# REQUIRES: x86
> +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
> +# RUN: echo "zed" > %t.order
> +# RUN: echo "bar" >> %t.order
> +# RUN: echo "foo" >> %t.order
> +# RUN: ld.lld --icf=all --symbol-ordering-file %t.order -shared %t.o -o %t.so
> +# RUN: llvm-nm %t.so | FileCheck %s
> +
> +## Check that after ICF merges 'foo' and 'zed' we still
> +## place them before 'bar', in according to ordering file.
> +# CHECK-DAG: 0000000000001000 T foo
> +# CHECK-DAG: 0000000000001000 T zed
> +# CHECK-DAG: 0000000000001004 T bar
> +
> +.section .text.foo,"ax", at progbits
> +.align 4
> +.global foo
> +foo:
> +  retq
> +
> +.section .text.bar,"ax", at progbits
> +.align 4
> +.global bar
> +bar:
> +  nop
> +  retq
> +
> +.section .text.zed,"ax", at progbits
> +.align 4
> +.global zed
> +zed:
> +  retq
> Index: ELF/Writer.cpp
> ===================================================================
> --- ELF/Writer.cpp
> +++ ELF/Writer.cpp
> @@ -1061,7 +1061,7 @@
>          continue;
>  
>        if (auto *Sec = dyn_cast_or_null<InputSectionBase>(D->Section)) {
> -        int &Priority = SectionOrder[Sec];
> +        int &Priority = SectionOrder[cast<InputSectionBase>(Sec->Repl)];
>          Priority = std::min(Priority, Ent.Priority);
>        }
>      }


More information about the llvm-commits mailing list