[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