From d465318c6d6faff43885378bdd7fc2b938b3dcbb Mon Sep 17 00:00:00 2001 From: Simon Atanasyan Date: Tue, 9 Oct 2018 11:29:45 +0000 Subject: [PATCH] [mips] Set pointer size to 4 bytes for N32 ABI CodePointerSize and CalleeSaveStackSlotSize values are used in DWARF generation. In case of MIPS it's incorrect to check for Triple::isMIPS64() only this function returns true for N32 ABI too. Now we do not have a method to recognize N32 if it's specified by a command line option and is not a part of a target triple. So we check for Triple::GNUABIN32 only. It's better than nothing. Differential revision: https://reviews.llvm.org/D52874 llvm-svn: 344039 --- llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp | 3 +-- llvm/test/MC/Mips/ptr-size.s | 13 +++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 llvm/test/MC/Mips/ptr-size.s diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp index 0a8d567..7bcda12 100644 --- a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp +++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp @@ -21,9 +21,8 @@ void MipsMCAsmInfo::anchor() { } MipsMCAsmInfo::MipsMCAsmInfo(const Triple &TheTriple) { IsLittleEndian = TheTriple.isLittleEndian(); - if (TheTriple.isMIPS64()) { + if (TheTriple.isMIPS64() && TheTriple.getEnvironment() != Triple::GNUABIN32) CodePointerSize = CalleeSaveStackSlotSize = 8; - } // FIXME: This condition isn't quite right but it's the best we can do until // this object can identify the ABI. It will misbehave when using O32 diff --git a/llvm/test/MC/Mips/ptr-size.s b/llvm/test/MC/Mips/ptr-size.s new file mode 100644 index 0000000..807265b --- /dev/null +++ b/llvm/test/MC/Mips/ptr-size.s @@ -0,0 +1,13 @@ +# RUN: llvm-mc -filetype=obj -triple mips--gnu -g %s \ +# RUN: | llvm-dwarfdump -debug-info - | FileCheck --check-prefix=O32 %s +# RUN: llvm-mc -filetype=obj -triple mips64--gnuabin32 -g %s \ +# RUN: | llvm-dwarfdump -debug-info - | FileCheck --check-prefix=N32 %s +# RUN: llvm-mc -filetype=obj -triple mips64--gnuabi64 -g %s \ +# RUN: | llvm-dwarfdump -debug-info - | FileCheck --check-prefix=N64 %s + +# O32: addr_size = 0x04 +# N32: addr_size = 0x04 +# N64: addr_size = 0x08 + +foo: + nop -- 2.7.4