mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-30 03:56:06 +00:00

This reverts commit 9221f3af8f832d990be986c05d964ad37e5a2356. As reported <https://github.com/llvm/llvm-project/pull/84597#issuecomment-2079128332> and confirmed by me locally, adding these attributes causes current GNU ld to segfault when processing the input. Reverted so we can discuss the best next step.
67 lines
2.0 KiB
C++
67 lines
2.0 KiB
C++
//===-- RISCVAttributeParser.cpp - RISCV Attribute Parser -----------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Support/RISCVAttributeParser.h"
|
|
#include "llvm/ADT/StringExtras.h"
|
|
|
|
using namespace llvm;
|
|
|
|
const RISCVAttributeParser::DisplayHandler
|
|
RISCVAttributeParser::displayRoutines[] = {
|
|
{
|
|
RISCVAttrs::ARCH,
|
|
&ELFAttributeParser::stringAttribute,
|
|
},
|
|
{
|
|
RISCVAttrs::PRIV_SPEC,
|
|
&ELFAttributeParser::integerAttribute,
|
|
},
|
|
{
|
|
RISCVAttrs::PRIV_SPEC_MINOR,
|
|
&ELFAttributeParser::integerAttribute,
|
|
},
|
|
{
|
|
RISCVAttrs::PRIV_SPEC_REVISION,
|
|
&ELFAttributeParser::integerAttribute,
|
|
},
|
|
{
|
|
RISCVAttrs::STACK_ALIGN,
|
|
&RISCVAttributeParser::stackAlign,
|
|
},
|
|
{
|
|
RISCVAttrs::UNALIGNED_ACCESS,
|
|
&RISCVAttributeParser::unalignedAccess,
|
|
}};
|
|
|
|
Error RISCVAttributeParser::unalignedAccess(unsigned tag) {
|
|
static const char *strings[] = {"No unaligned access", "Unaligned access"};
|
|
return parseStringAttribute("Unaligned_access", tag, ArrayRef(strings));
|
|
}
|
|
|
|
Error RISCVAttributeParser::stackAlign(unsigned tag) {
|
|
uint64_t value = de.getULEB128(cursor);
|
|
std::string description =
|
|
"Stack alignment is " + utostr(value) + std::string("-bytes");
|
|
printAttribute(tag, value, description);
|
|
return Error::success();
|
|
}
|
|
|
|
Error RISCVAttributeParser::handler(uint64_t tag, bool &handled) {
|
|
handled = false;
|
|
for (const auto &AH : displayRoutines) {
|
|
if (uint64_t(AH.attribute) == tag) {
|
|
if (Error e = (this->*AH.routine)(tag))
|
|
return e;
|
|
handled = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return Error::success();
|
|
}
|