[PATCH] D41552: [MC] - Teach llvm-mc to handle comdats whose names are numbers.
Rafael Avila de Espindola via llvm-commits
llvm-commits at lists.llvm.org
Sat Dec 23 09:12:46 PST 2017
LGTM
A nice followup would be to make sure we produce an error if we can't
parse to the end of the line.
Cheers,
Rafael
George Rimar via Phabricator <reviews at reviews.llvm.org> writes:
> grimar created this revision.
> grimar added a reviewer: rafael.
> Herald added a subscriber: emaste.
>
> Currently llvm-mc ignores COMDATs whose names are numbers,
> for example following code:
>
> .section .foo,"G", at progbits,123,comdat
>
> would produce no COMDATs at all.
>
> Fixes PR35718.
>
>
> https://reviews.llvm.org/D41552
>
> Files:
> lib/MC/MCParser/ELFAsmParser.cpp
> test/MC/ELF/comdat-name-number.s
>
>
> Index: test/MC/ELF/comdat-name-number.s
> ===================================================================
> --- test/MC/ELF/comdat-name-number.s
> +++ test/MC/ELF/comdat-name-number.s
> @@ -0,0 +1,28 @@
> +// RUN: llvm-mc -triple x86_64-pc-linux-gnu %s -filetype=obj -o %t.o
> +// RUN: llvm-readobj -elf-section-groups %t.o | FileCheck %s
> +
> +// Test that we can handle numeric COMDAT names.
> +
> +.section .foo,"G", at progbits,123,comdat
> +.section .bar,"G", at progbits,abc,comdat
> +
> +// CHECK: Groups {
> +// CHECK-NEXT: Group {
> +// CHECK-NEXT: Name: .group
> +// CHECK-NEXT: Index:
> +// CHECK-NEXT: Type: COMDAT
> +// CHECK-NEXT: Signature: 123
> +// CHECK-NEXT: Section(s) in group [
> +// CHECK-NEXT: .foo
> +// CHECK-NEXT: ]
> +// CHECK-NEXT: }
> +// CHECK-NEXT: Group {
> +// CHECK-NEXT: Name: .group
> +// CHECK-NEXT: Index:
> +// CHECK-NEXT: Type: COMDAT
> +// CHECK-NEXT: Signature: abc
> +// CHECK-NEXT: Section(s) in group [
> +// CHECK-NEXT: .bar
> +// CHECK-NEXT: ]
> +// CHECK-NEXT: }
> +// CHECK-NEXT: }
> Index: lib/MC/MCParser/ELFAsmParser.cpp
> ===================================================================
> --- lib/MC/MCParser/ELFAsmParser.cpp
> +++ lib/MC/MCParser/ELFAsmParser.cpp
> @@ -423,8 +423,12 @@
> if (L.isNot(AsmToken::Comma))
> return TokError("expected group name");
> Lex();
> - if (getParser().parseIdentifier(GroupName))
> + if (L.is(AsmToken::Integer)) {
> + GroupName = getTok().getString();
> + Lex();
> + } else if (getParser().parseIdentifier(GroupName)) {
> return true;
> + }
> if (L.is(AsmToken::Comma)) {
> Lex();
> StringRef Linkage;
>
>
> Index: test/MC/ELF/comdat-name-number.s
> ===================================================================
> --- test/MC/ELF/comdat-name-number.s
> +++ test/MC/ELF/comdat-name-number.s
> @@ -0,0 +1,28 @@
> +// RUN: llvm-mc -triple x86_64-pc-linux-gnu %s -filetype=obj -o %t.o
> +// RUN: llvm-readobj -elf-section-groups %t.o | FileCheck %s
> +
> +// Test that we can handle numeric COMDAT names.
> +
> +.section .foo,"G", at progbits,123,comdat
> +.section .bar,"G", at progbits,abc,comdat
> +
> +// CHECK: Groups {
> +// CHECK-NEXT: Group {
> +// CHECK-NEXT: Name: .group
> +// CHECK-NEXT: Index:
> +// CHECK-NEXT: Type: COMDAT
> +// CHECK-NEXT: Signature: 123
> +// CHECK-NEXT: Section(s) in group [
> +// CHECK-NEXT: .foo
> +// CHECK-NEXT: ]
> +// CHECK-NEXT: }
> +// CHECK-NEXT: Group {
> +// CHECK-NEXT: Name: .group
> +// CHECK-NEXT: Index:
> +// CHECK-NEXT: Type: COMDAT
> +// CHECK-NEXT: Signature: abc
> +// CHECK-NEXT: Section(s) in group [
> +// CHECK-NEXT: .bar
> +// CHECK-NEXT: ]
> +// CHECK-NEXT: }
> +// CHECK-NEXT: }
> Index: lib/MC/MCParser/ELFAsmParser.cpp
> ===================================================================
> --- lib/MC/MCParser/ELFAsmParser.cpp
> +++ lib/MC/MCParser/ELFAsmParser.cpp
> @@ -423,8 +423,12 @@
> if (L.isNot(AsmToken::Comma))
> return TokError("expected group name");
> Lex();
> - if (getParser().parseIdentifier(GroupName))
> + if (L.is(AsmToken::Integer)) {
> + GroupName = getTok().getString();
> + Lex();
> + } else if (getParser().parseIdentifier(GroupName)) {
> return true;
> + }
> if (L.is(AsmToken::Comma)) {
> Lex();
> StringRef Linkage;
More information about the llvm-commits
mailing list