[llvm] r208228 - [yaml2obj] Support ELF x86 relocations.

NAKAMURA Takumi geek4civic at gmail.com
Fri May 9 04:32:33 PDT 2014


2014-05-08 2:06 GMT+09:00 Simon Atanasyan <simon at atanasyan.com>:
> Author: atanasyan
> Date: Wed May  7 12:06:38 2014
> New Revision: 208228
>
> URL: http://llvm.org/viewvc/llvm-project?rev=208228&view=rev
> Log:
> [yaml2obj] Support ELF x86 relocations.
>
> Added:
>     llvm/trunk/test/Object/X86/yaml2obj-elf-x86-rel.yaml
> Modified:
>     llvm/trunk/lib/Object/ELFYAML.cpp
>
> Modified: llvm/trunk/lib/Object/ELFYAML.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ELFYAML.cpp?rev=208228&r1=208227&r2=208228&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Object/ELFYAML.cpp (original)
> +++ llvm/trunk/lib/Object/ELFYAML.cpp Wed May  7 12:06:38 2014
> @@ -570,6 +570,49 @@ void ScalarEnumerationTraits<ELFYAML::EL
>      ECase(R_HEX_TPREL_16_X)
>      ECase(R_HEX_TPREL_11_X)
>      break;
> +  case ELF::EM_386:
> +    ECase(R_386_NONE)
> +    ECase(R_386_32)
> +    ECase(R_386_PC32)
> +    ECase(R_386_GOT32)
> +    ECase(R_386_PLT32)
> +    ECase(R_386_COPY)
> +    ECase(R_386_GLOB_DAT)
> +    ECase(R_386_JUMP_SLOT)
> +    ECase(R_386_RELATIVE)
> +    ECase(R_386_GOTOFF)
> +    ECase(R_386_GOTPC)
> +    ECase(R_386_32PLT)
> +    ECase(R_386_TLS_TPOFF)
> +    ECase(R_386_TLS_IE)
> +    ECase(R_386_TLS_GOTIE)
> +    ECase(R_386_TLS_LE)
> +    ECase(R_386_TLS_GD)
> +    ECase(R_386_TLS_LDM)
> +    ECase(R_386_16)
> +    ECase(R_386_PC16)
> +    ECase(R_386_8)
> +    ECase(R_386_PC8)
> +    ECase(R_386_TLS_GD_32)
> +    ECase(R_386_TLS_GD_PUSH)
> +    ECase(R_386_TLS_GD_CALL)
> +    ECase(R_386_TLS_GD_POP)
> +    ECase(R_386_TLS_LDM_32)
> +    ECase(R_386_TLS_LDM_PUSH)
> +    ECase(R_386_TLS_LDM_CALL)
> +    ECase(R_386_TLS_LDM_POP)
> +    ECase(R_386_TLS_LDO_32)
> +    ECase(R_386_TLS_IE_32)
> +    ECase(R_386_TLS_LE_32)
> +    ECase(R_386_TLS_DTPMOD32)
> +    ECase(R_386_TLS_DTPOFF32)
> +    ECase(R_386_TLS_TPOFF32)
> +    ECase(R_386_TLS_GOTDESC)
> +    ECase(R_386_TLS_DESC_CALL)
> +    ECase(R_386_TLS_DESC)
> +    ECase(R_386_IRELATIVE)
> +    ECase(R_386_NUM)
> +    break;
>    default:
>      llvm_unreachable("Unsupported architecture");
>    }
>
> Added: llvm/trunk/test/Object/X86/yaml2obj-elf-x86-rel.yaml
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/X86/yaml2obj-elf-x86-rel.yaml?rev=208228&view=auto
> ==============================================================================
> --- llvm/trunk/test/Object/X86/yaml2obj-elf-x86-rel.yaml (added)
> +++ llvm/trunk/test/Object/X86/yaml2obj-elf-x86-rel.yaml Wed May  7 12:06:38 2014
> @@ -0,0 +1,43 @@
> +# RUN: yaml2obj -format=elf %s > %t
> +# RUN: llvm-readobj -r %t | FileCheck %s
> +
> +# CHECK:      Relocations [
> +# CHECK-NEXT:   Section (2) .rel.text {
> +# CHECK-NEXT:     0x0 R_386_32 main 0x0
> +# CHECK-NEXT:   }
> +# CHECK-NEXT: ]
> +
> +FileHeader:
> +  Class:           ELFCLASS32
> +  Data:            ELFDATA2LSB
> +  Type:            ET_REL
> +  Machine:         EM_386
> +Sections:
> +  - Type:            SHT_PROGBITS
> +    Name:            .text
> +    Type:            SHT_PROGBITS

2nd hash "Type" causes memory leak.

YAMLTraits.cpp:343: mapHNode->Mapping[KeyStr] = ValueHNode;

Previous value of Mapping[KeyStr] lost.
Tweaked in r208406. Could you fix?

> +    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
> +    AddressAlign:    0x04
> +    Content:         0000000000000000
> +  - Type:            SHT_REL
> +    Name:            .rel.text
> +    Type:            SHT_REL

Same as above.

> +    Link:            .symtab
> +    Info:            .text
> +    AddressAlign:    0x04
> +    Relocations:
> +      - Offset:          0
> +        Symbol:          main
> +        Type:            R_386_32
> +
> +Symbols:
> +  Local:
> +    - Name:            .text
> +      Type:            STT_SECTION
> +      Section:         .text
> +
> +  Global:
> +    - Name:            main
> +      Type:            STT_FUNC
> +      Section:         .text
> +      Size:            0x08
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list