diff --git a/llvm/test/tools/llvm-readobj/ELF/ARM/unwind-non-relocatable.test b/llvm/test/tools/llvm-readobj/ELF/ARM/unwind-non-relocatable.test --- a/llvm/test/tools/llvm-readobj/ELF/ARM/unwind-non-relocatable.test +++ b/llvm/test/tools/llvm-readobj/ELF/ARM/unwind-non-relocatable.test @@ -48,6 +48,17 @@ # UNWIND-NEXT: FunctionAddress: 0x24C # UNWIND-NEXT: Model: CantUnwind # UNWIND-NEXT: } +# UNWIND-NEXT: Entry { +# UNWIND-NEXT: FunctionAddress: 0x4000026B +# UNWIND-NEXT: FunctionName: func4 +# UNWIND-NEXT: Model: Compact (Inline) +# UNWIND-NEXT: PersonalityIndex: 0 +# UNWIND-NEXT: Opcodes [ +# UNWIND-NEXT: 0xB0 ; finish +# UNWIND-NEXT: 0xB0 ; finish +# UNWIND-NEXT: 0xB0 ; finish +# UNWIND-NEXT: ] +# UNWIND-NEXT: } # UNWIND-NEXT: ] # UNWIND-NEXT: } # UNWIND-NEXT: } @@ -78,6 +89,9 @@ ## Address of .ARM.exidx (0x24C) + entry offset (24) + 0x7fffffe8 (31 bit) == 0x24C. - Offset: 0x7FFFFFE8 Value: EXIDX_CANTUNWIND +## Address of .ARM.exidx (0x24C) + entry offset (32) + 0x3FFFFFFF (31 bit) == 0x4000026b. + - Offset: 0x3FFFFFFF + Value: 0x80B0B0B0 ## arbitrary opcodes. Symbols: - Name: func1 Type: STT_FUNC @@ -91,3 +105,7 @@ Type: STT_FUNC Section: .text Value: 0x248 + - Name: func4 + Type: STT_FUNC + Section: .text + Value: 0x4000026b diff --git a/llvm/tools/llvm-readobj/ARMEHABIPrinter.h b/llvm/tools/llvm-readobj/ARMEHABIPrinter.h --- a/llvm/tools/llvm-readobj/ARMEHABIPrinter.h +++ b/llvm/tools/llvm-readobj/ARMEHABIPrinter.h @@ -336,7 +336,7 @@ static uint64_t PREL31(uint32_t Address, uint32_t Place) { uint64_t Location = Address & 0x7fffffff; - if (Location & 0x04000000) + if (Location & 0x40000000) Location |= (uint64_t) ~0x7fffffff; return Location + Place; }