Index: test/MC/Sparc/sparc-tls-relocations.s =================================================================== --- test/MC/Sparc/sparc-tls-relocations.s +++ test/MC/Sparc/sparc-tls-relocations.s @@ -29,13 +29,13 @@ ! LE_HIX22/LE_LOX10 ! OBJDUMP: {{[0-9,a-f]+}}: 31 00 00 00 sethi 0, %i0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LE_HIX22 Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LE_HIX22 Local ! ASM: sethi %tle_hix22(Local), %i0 ! encoding: [0x31,0x00,0x00,0x00] ! ASM: ! fixup A - offset: 0, value: %tle_hix22(Local), kind: fixup_sparc_tls_le_hix22 sethi %tle_hix22(Local), %i0 ! OBJDUMP: {{[0-9,a-f]+}}: b0 1e 20 00 xor %i0, 0, %i0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LE_LOX10 Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LE_LOX10 Local ! ASM: xor %i0, %tle_lox10(Local), %i0 ! encoding: [0xb0,0x1e,0x20,0x00] ! ASM: ! fixup A - offset: 0, value: %tle_lox10(Local), kind: fixup_sparc_tls_le_lox10 xor %i0, %tle_lox10(Local), %i0 @@ -46,44 +46,44 @@ ! LDO_HIX22/LDO_LOX10/LDO_ADD/LDM_HI22/LDM_LO10/LDM_ADD/LDM_CALL ! OBJDUMP: {{[0-9,a-f]+}}: 33 00 00 00 sethi 0, %i1 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_HIX22 Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_HIX22 Local ! ASM: sethi %tldo_hix22(Local), %i1 ! encoding: [0x33,0b00AAAAAA,A,A] ! ASM: ! fixup A - offset: 0, value: %tldo_hix22(Local), kind: fixup_sparc_tls_ldo_hix22 sethi %tldo_hix22(Local), %i1 ! OBJDUMP: {{[0-9,a-f]+}}: 35 00 00 00 sethi 0, %i2 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_HI22 Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_HI22 Local ! ASM: sethi %tldm_hi22(Local), %i2 ! encoding: [0x35,0b00AAAAAA,A,A] ! ASM: ! fixup A - offset: 0, value: %tldm_hi22(Local), kind: fixup_sparc_tls_ldm_hi22 sethi %tldm_hi22(Local), %i2 ! OBJDUMP: {{[0-9,a-f]+}}: b4 06 a0 00 add %i2, 0, %i2 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_LO10 Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_LO10 Local ! ASM: add %i2, %tldm_lo10(Local), %i2 ! encoding: [0xb4,0x06,0b101000AA,A] ! ASM: ! fixup A - offset: 0, value: %tldm_lo10(Local), kind: fixup_sparc_tls_ldm_lo10 add %i2, %tldm_lo10(Local), %i2 ! OBJDUMP: {{[0-9,a-f]+}}: 90 06 00 1a add %i0, %i2, %o0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_ADD Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_ADD Local ! ASM: add %i0, %i2, %o0, %tldm_add(Local) ! encoding: [0x90,0x06,0x00,0x1a] ! ASM: ! fixup A - offset: 0, value: %tldm_add(Local), kind: fixup_sparc_tls_ldm_add add %i0, %i2, %o0, %tldm_add(Local) ! OBJDUMP: {{[0-9,a-f]+}}: b0 1e 60 00 xor %i1, 0, %i0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_LOX10 Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_LOX10 Local ! ASM: xor %i1, %tldo_lox10(Local), %i0 ! encoding: [0xb0,0x1e,0b011000AA,A] ! ASM: ! fixup A - offset: 0, value: %tldo_lox10(Local), kind: fixup_sparc_tls_ldo_lox10 xor %i1, %tldo_lox10(Local), %i0 ! OBJDUMP: {{[0-9,a-f]+}}: 40 00 00 00 call 0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_CALL Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDM_CALL Local ! ASM: call __tls_get_addr, %tldm_call(Local) ! encoding: [0x40,0x00,0x00,0x00] ! ASM: ! fixup A - offset: 0, value: %tldm_call(Local), kind: fixup_sparc_tls_ldm_call call __tls_get_addr, %tldm_call(Local) nop ! OBJDUMP: {{[0-9,a-f]+}}: 90 02 00 18 add %o0, %i0, %o0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_ADD Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_LDO_ADD Local ! ASM: add %o0, %i0, %o0, %tldo_add(Local) ! encoding: [0x90,0x02,0x00,0x18] ! ASM: ! fixup A - offset: 0, value: %tldo_add(Local), kind: fixup_sparc_tls_ldo_add add %o0, %i0, %o0, %tldo_add(Local) @@ -93,31 +93,31 @@ ! IE_HI22/IE_LO10/IE_LD (or IE_LDX)/IE_ADD ! OBJDUMP: {{[0-9,a-f]+}}: 33 00 00 00 sethi 0, %i1 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_IE_HI22 Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_IE_HI22 Extern ! ASM: sethi %tie_hi22(Extern), %i1 ! encoding: [0x33,0b00AAAAAA,A,A] ! ASM: ! fixup A - offset: 0, value: %tie_hi22(Extern), kind: fixup_sparc_tls_ie_hi22 sethi %tie_hi22(Extern), %i1 ! OBJDUMP: {{[0-9,a-f]+}}: b2 06 60 00 add %i1, 0, %i1 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_IE_LO10 Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_IE_LO10 Extern ! ASM: add %i1, %tie_lo10(Extern), %i1 ! encoding: [0xb2,0x06,0b011000AA,A] ! ASM: ! fixup A - offset: 0, value: %tie_lo10(Extern), kind: fixup_sparc_tls_ie_lo10 add %i1, %tie_lo10(Extern), %i1 ! OBJDUMP: {{[0-9,a-f]+}}: f0 06 00 19 ld [%i0+%i1], %i0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_IE_LD Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_IE_LD Extern ! ASM: ld [%i0+%i1], %i0, %tie_ld(Extern) ! encoding: [0xf0,0x06,0x00,0x19] ! ASM: ! fixup A - offset: 0, value: %tie_ld(Extern), kind: fixup_sparc_tls_ie_ld ld [%i0+%i1], %i0, %tie_ld(Extern) ! OBJDUMP: {{[0-9,a-f]+}}: f0 5e 00 19 ldx [%i0+%i1], %i0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_IE_LDX Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_IE_LDX Extern ! ASM: ldx [%i0+%i1], %i0, %tie_ldx(Extern) ! encoding: [0xf0,0x5e,0x00,0x19] ! ASM: ! fixup A - offset: 0, value: %tie_ldx(Extern), kind: fixup_sparc_tls_ie_ldx ldx [%i0+%i1], %i0, %tie_ldx(Extern) ! OBJDUMP: {{[0-9,a-f]+}}: 90 01 c0 18 add %g7, %i0, %o0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_IE_ADD Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_IE_ADD Extern ! ASM: add %g7, %i0, %o0, %tie_add(Extern) ! encoding: [0x90,0x01,0xc0,0x18] ! ASM: ! fixup A - offset: 0, value: %tie_add(Extern), kind: fixup_sparc_tls_ie_add add %g7, %i0, %o0, %tie_add(Extern) @@ -126,25 +126,25 @@ ! GD_HI22/GD_LO10/GD_ADD/GD_CALL ! OBJDUMP: {{[0-9,a-f]+}}: 33 00 00 00 sethi 0, %i1 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_GD_HI22 Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_GD_HI22 Extern ! ASM: sethi %tgd_hi22(Extern), %i1 ! encoding: [0x33,0b00AAAAAA,A,A] ! ASM: ! fixup A - offset: 0, value: %tgd_hi22(Extern), kind: fixup_sparc_tls_gd_hi22 sethi %tgd_hi22(Extern), %i1 ! OBJDUMP: {{[0-9,a-f]+}}: b2 06 60 00 add %i1, 0, %i1 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_GD_LO10 Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_GD_LO10 Extern ! ASM: add %i1, %tgd_lo10(Extern), %i1 ! encoding: [0xb2,0x06,0b011000AA,A] ! ASM: ! fixup A - offset: 0, value: %tgd_lo10(Extern), kind: fixup_sparc_tls_gd_lo10 add %i1, %tgd_lo10(Extern), %i1 ! OBJDUMP: {{[0-9,a-f]+}}: 90 06 00 19 add %i0, %i1, %o0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_GD_ADD Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_GD_ADD Extern ! ASM: add %i0, %i1, %o0, %tgd_add(Extern) ! encoding: [0x90,0x06,0x00,0x19] ! ASM: ! fixup A - offset: 0, value: %tgd_add(Extern), kind: fixup_sparc_tls_gd_add add %i0, %i1, %o0, %tgd_add(Extern) ! OBJDUMP: {{[0-9,a-f]+}}: 40 00 00 00 call 0 -! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_GD_CALL Unknown +! OBJDUMP: {{[0-9,a-f]+}}: R_SPARC_TLS_GD_CALL Extern ! ASM: call __tls_get_addr, %tgd_call(Extern) ! encoding: [0x40,0x00,0x00,0x00] ! ASM: ! fixup A - offset: 0, value: %tgd_call(Extern), kind: fixup_sparc_tls_gd_call call __tls_get_addr, %tgd_call(Extern) Index: tools/llvm-objdump/llvm-objdump.cpp =================================================================== --- tools/llvm-objdump/llvm-objdump.cpp +++ tools/llvm-objdump/llvm-objdump.cpp @@ -690,8 +690,7 @@ return errorToErrorCode(StrTabOrErr.takeError()); StringRef StrTab = *StrTabOrErr; uint8_t type = RelRef.getType(); - StringRef res; - int64_t addend = 0; + Optional addend = 0; switch (Sec->sh_type) { default: return object_error::parse_failed; @@ -723,45 +722,26 @@ return errorToErrorCode(SymName.takeError()); Target = *SymName; } + + StringRef suffix; switch (EF.getHeader()->e_machine) { + default: + // Default scheme is to print Target, as well as "+ " for nonzero + // addend. Should be acceptable for all normal purposes. + if (addend.hasValue() && addend.getValue() == 0) + addend = None; + break; case ELF::EM_X86_64: switch (type) { case ELF::R_X86_64_PC8: case ELF::R_X86_64_PC16: case ELF::R_X86_64_PC32: { - std::string fmtbuf; - raw_string_ostream fmt(fmtbuf); - fmt << Target << (addend < 0 ? "" : "+") << addend << "-P"; - fmt.flush(); - Result.append(fmtbuf.begin(), fmtbuf.end()); - } break; - case ELF::R_X86_64_8: - case ELF::R_X86_64_16: - case ELF::R_X86_64_32: - case ELF::R_X86_64_32S: - case ELF::R_X86_64_64: { - std::string fmtbuf; - raw_string_ostream fmt(fmtbuf); - fmt << Target << (addend < 0 ? "" : "+") << addend; - fmt.flush(); - Result.append(fmtbuf.begin(), fmtbuf.end()); + suffix = "-P"; } break; default: - res = "Unknown"; + break; } break; - case ELF::EM_LANAI: - case ELF::EM_AVR: - case ELF::EM_AARCH64: { - std::string fmtbuf; - raw_string_ostream fmt(fmtbuf); - fmt << Target; - if (addend != 0) - fmt << (addend < 0 ? "" : "+") << addend; - fmt.flush(); - Result.append(fmtbuf.begin(), fmtbuf.end()); - break; - } case ELF::EM_386: case ELF::EM_IAMCU: case ELF::EM_ARM: @@ -769,30 +749,27 @@ case ELF::EM_MIPS: case ELF::EM_BPF: case ELF::EM_RISCV: - res = Target; + addend = None; break; case ELF::EM_WEBASSEMBLY: switch (type) { - case ELF::R_WEBASSEMBLY_DATA: { - std::string fmtbuf; - raw_string_ostream fmt(fmtbuf); - fmt << Target << (addend < 0 ? "" : "+") << addend; - fmt.flush(); - Result.append(fmtbuf.begin(), fmtbuf.end()); - break; - } case ELF::R_WEBASSEMBLY_FUNCTION: - res = Target; + addend = None; break; default: - res = "Unknown"; + break; } break; - default: - res = "Unknown"; } - if (Result.empty()) - Result.append(res.begin(), res.end()); + + std::string fmtbuf; + raw_string_ostream fmt(fmtbuf); + fmt << Target; + if (addend.hasValue()) + fmt << (addend.getValue() < 0 ? "" : "+") << addend.getValue(); + fmt << suffix; + fmt.flush(); + Result.append(fmtbuf.begin(), fmtbuf.end()); return std::error_code(); }