Date: Sun, 10 Nov 2019 02:42:47 +0000 From: bugzilla-noreply@freebsd.org To: bugs@FreeBSD.org Subject: [Bug 233405] sparc64: DWARF unwinder required for GCC 4.2.1 retirement Message-ID: <bug-233405-227-xFz5IBCmeH@https.bugs.freebsd.org/bugzilla/> In-Reply-To: <bug-233405-227@https.bugs.freebsd.org/bugzilla/>
index | next in thread | previous in thread | raw e-mail
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=233405 --- Comment #9 from Conrad Meyer <cem@freebsd.org> --- More "necessary but not sufficient" IAS support (needed to compile libc). --- contrib/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp (revision 354566) +++ contrib/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp (working copy) @@ -815,7 +815,7 @@ Parser.getTok().getLoc())); Parser.Lex(); // Eat the [ - if (Mnemonic == "cas" || Mnemonic == "casx" || Mnemonic == "casa") { + if (Mnemonic == "cas" || Mnemonic == "casx" || Mnemonic == "casa" || Mnemonic == "casxa") { SMLoc S = Parser.getTok().getLoc(); if (getLexer().getKind() != AsmToken::Percent) return MatchOperand_NoMatch; @@ -1014,7 +1014,22 @@ return true; } - // %fprs is an alias of %asr6. + // %asrN aliases. + if (name.equals("ccr")) { + RegNo = ASRRegs[2]; + RegKind = SparcOperand::rk_Special; + return true; + } + if (name.equals("asi")) { + RegNo = ASRRegs[3]; + RegKind = SparcOperand::rk_Special; + return true; + } + if (name.equals("pc")) { + RegNo = ASRRegs[5]; + RegKind = SparcOperand::rk_Special; + return true; + } if (name.equals("fprs")) { RegNo = ASRRegs[6]; RegKind = SparcOperand::rk_Special; --- contrib/llvm/lib/Target/Sparc/SparcInstr64Bit.td (revision 354566) +++ contrib/llvm/lib/Target/Sparc/SparcInstr64Bit.td (working copy) @@ -495,6 +495,15 @@ } // Predicates = [Is64Bit], Constraints = ... +// CASX with explicit ASI; ASM-only, LLVM doesn't grok ASIs, etc, etc. +let Predicates = [Is64Bit], Constraints = "$swap = $rd" in { + def CASXArr: F3_1_asi<3, 0b111110, + (outs I64Regs:$rd), (ins I64Regs:$rs1, i8imm:$asi, + I64Regs:$rs2, I64Regs:$swap), + "casxa [$rs1] $asi, $rs2, $rd", + []>; +} + let Predicates = [Is64Bit] in { def : Pat<(atomic_fence imm, imm), (MEMBARi 0xf)>; --- contrib/llvm/lib/Target/Sparc/SparcInstrAliases.td (revision 354566) +++ contrib/llvm/lib/Target/Sparc/SparcInstrAliases.td (working copy) @@ -477,6 +477,8 @@ // unimp -> unimp 0 def : InstAlias<"unimp", (UNIMP 0), 0>; +// illtrap -> unimp (same instruction, FreeBSD .S uses illtrap) +def : MnemonicAlias<"illtrap", "unimp">; def : MnemonicAlias<"iflush", "flush">; @@ -492,6 +494,9 @@ def : MnemonicAlias<"stuha", "stha">; def : MnemonicAlias<"stsha", "stha">; +// V8 ST renamed to STW in V9 (equivalent) (also: stuw, stsw, but we don't use those) +def : MnemonicAlias<"stw", "st">; + def : MnemonicAlias<"lduw", "ld">, Requires<[HasV9]>; def : MnemonicAlias<"lduwa", "lda">, Requires<[HasV9]>; Still runs into linking issues (using LLD) *very* early on (and ld.bfd segfaults). LLD.SPARC doesn't grok symbolic R_SPARC_64 relocations in shared libraries (used by self-referential __dso_handle pointer in CRT), doesn't grok GOT, and doesn't grok TLS relocations. This probably needs someone with an intimate knowledge of at least two out of three of: SPARCV9, LLD, and ELF loader/linker model. (Not to mention: time, and caring about 15-20 year old dead hardware.) -- You are receiving this mail because: You are the assignee for the bug.help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-233405-227-xFz5IBCmeH>
