[PATCH] D34814: [ELF] - Fail the link if something happens on DWARF parsing stage of -gdb-index building

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 6 10:19:48 PDT 2017


Is anything else blocking this?

Cheers,
Rafael

Rafael Avila de Espindola <rafael.espindola at gmail.com> writes:

> LGTM
>
> George Rimar via Phabricator <reviews at reviews.llvm.org> writes:
>
>> grimar created this revision.
>> Herald added subscribers: aprantl, emaste.
>>
>> This is relative to PR33173,
>>
>> Previously if something wrong happened on DWARF parsers side during parsing
>> object for building gdb index (like was in PR: unsupported relocation) then LLD continued 
>> and finished the link. DWARF parsers sure showed error message on their side, but that is all.
>>
>> Patch changes behavior to fail the link in this case and show more detailed message.
>>
>>
>> https://reviews.llvm.org/D34814
>>
>> Files:
>>   ELF/SyntheticSections.cpp
>>   test/ELF/invalid/invalid-debug-relocations.test
>>
>>
>> Index: test/ELF/invalid/invalid-debug-relocations.test
>> ===================================================================
>> --- test/ELF/invalid/invalid-debug-relocations.test
>> +++ test/ELF/invalid/invalid-debug-relocations.test
>> @@ -0,0 +1,41 @@
>> +# REQUIRES: x86
>> +# RUN: yaml2obj %s -o %t.o
>> +# RUN: not ld.lld -gdb-index %t.o -o %t.exe 2>&1 | FileCheck %s
>> +
>> +# CHECK:      error: {{.*}}.o: error parsing DWARF data:
>> +# CHECK-NEXT: >>> failed to compute relocation: Unknown, Invalid data was encountered while parsing the file
>> +
>> +!ELF
>> +FileHeader:
>> +  Class:           ELFCLASS32
>> +  Data:            ELFDATA2LSB
>> +  Type:            ET_REL
>> +  Machine:         EM_386
>> +Sections:
>> +  - Type:            SHT_PROGBITS
>> +    Name:            .text
>> +    Flags:           [ ]
>> +    AddressAlign:    0x04
>> +    Content:         "0000"
>> +  - Type:            SHT_PROGBITS
>> +    Name:            .debug_info
>> +    Flags:           [ ]
>> +    AddressAlign:    0x04
>> +    Content:         "0000"
>> +  - Type:            SHT_REL
>> +    Name:            .rel.debug_info
>> +    Link:            .symtab
>> +    Info:            .debug_info
>> +    Relocations:
>> +      - Offset:          0
>> +        Symbol:          _start
>> +        Type:            0xFF
>> +      - Offset:          4
>> +        Symbol:          _start
>> +        Type:            0xFF
>> +Symbols:
>> +  Global:
>> +    - Name:     _start
>> +      Type:     STT_FUNC
>> +      Section:  .text
>> +      Value:    0x0
>> Index: ELF/SyntheticSections.cpp
>> ===================================================================
>> --- ELF/SyntheticSections.cpp
>> +++ ELF/SyntheticSections.cpp
>> @@ -1810,7 +1810,11 @@
>>      return {};
>>    }
>>  
>> -  DWARFContextInMemory Dwarf(*Obj.get());
>> +  DWARFContextInMemory Dwarf(*Obj.get(), nullptr, [&](Error E) {
>> +    error(toString(Sec->File) + ": error parsing DWARF data:\n>>> " +
>> +          toString(std::move(E)));
>> +    return ErrorPolicy::Continue;
>> +  });
>>  
>>    GdbIndexChunk Ret;
>>    Ret.CompilationUnits = readCuList(Dwarf, Sec);
>>
>>
>> Index: test/ELF/invalid/invalid-debug-relocations.test
>> ===================================================================
>> --- test/ELF/invalid/invalid-debug-relocations.test
>> +++ test/ELF/invalid/invalid-debug-relocations.test
>> @@ -0,0 +1,41 @@
>> +# REQUIRES: x86
>> +# RUN: yaml2obj %s -o %t.o
>> +# RUN: not ld.lld -gdb-index %t.o -o %t.exe 2>&1 | FileCheck %s
>> +
>> +# CHECK:      error: {{.*}}.o: error parsing DWARF data:
>> +# CHECK-NEXT: >>> failed to compute relocation: Unknown, Invalid data was encountered while parsing the file
>> +
>> +!ELF
>> +FileHeader:
>> +  Class:           ELFCLASS32
>> +  Data:            ELFDATA2LSB
>> +  Type:            ET_REL
>> +  Machine:         EM_386
>> +Sections:
>> +  - Type:            SHT_PROGBITS
>> +    Name:            .text
>> +    Flags:           [ ]
>> +    AddressAlign:    0x04
>> +    Content:         "0000"
>> +  - Type:            SHT_PROGBITS
>> +    Name:            .debug_info
>> +    Flags:           [ ]
>> +    AddressAlign:    0x04
>> +    Content:         "0000"
>> +  - Type:            SHT_REL
>> +    Name:            .rel.debug_info
>> +    Link:            .symtab
>> +    Info:            .debug_info
>> +    Relocations:
>> +      - Offset:          0
>> +        Symbol:          _start
>> +        Type:            0xFF
>> +      - Offset:          4
>> +        Symbol:          _start
>> +        Type:            0xFF
>> +Symbols:
>> +  Global:
>> +    - Name:     _start
>> +      Type:     STT_FUNC
>> +      Section:  .text
>> +      Value:    0x0
>> Index: ELF/SyntheticSections.cpp
>> ===================================================================
>> --- ELF/SyntheticSections.cpp
>> +++ ELF/SyntheticSections.cpp
>> @@ -1810,7 +1810,11 @@
>>      return {};
>>    }
>>  
>> -  DWARFContextInMemory Dwarf(*Obj.get());
>> +  DWARFContextInMemory Dwarf(*Obj.get(), nullptr, [&](Error E) {
>> +    error(toString(Sec->File) + ": error parsing DWARF data:\n>>> " +
>> +          toString(std::move(E)));
>> +    return ErrorPolicy::Continue;
>> +  });
>>  
>>    GdbIndexChunk Ret;
>>    Ret.CompilationUnits = readCuList(Dwarf, Sec);


More information about the llvm-commits mailing list