mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-04 05:31:51 +00:00
DebugInfo: Improve IR annotation comments for GNU pubthings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191043 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
88fae0edcc
commit
18a6ade6cd
@ -17,6 +17,7 @@
|
||||
#define LLVM_SUPPORT_DWARF_H
|
||||
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
|
||||
namespace llvm {
|
||||
|
||||
@ -801,11 +802,15 @@ enum GDBIndexEntryKind {
|
||||
GIEK_UNUSED7,
|
||||
};
|
||||
|
||||
StringRef GDBIndexEntryKindString(GDBIndexEntryKind Kind);
|
||||
|
||||
enum GDBIndexEntryLinkage {
|
||||
GIEL_EXTERNAL,
|
||||
GIEL_STATIC
|
||||
};
|
||||
|
||||
StringRef GDBIndexEntryLinkageString(GDBIndexEntryLinkage Linkage);
|
||||
|
||||
/// The gnu_pub* kind looks like:
|
||||
///
|
||||
/// 0-3 reserved
|
||||
@ -816,24 +821,25 @@ enum GDBIndexEntryLinkage {
|
||||
/// offset of the cu within the debug_info section stored in those 24 bits.
|
||||
struct PubIndexEntryDescriptor {
|
||||
GDBIndexEntryKind Kind;
|
||||
bool Static;
|
||||
PubIndexEntryDescriptor(GDBIndexEntryKind Kind, bool Static)
|
||||
GDBIndexEntryLinkage Static;
|
||||
PubIndexEntryDescriptor(GDBIndexEntryKind Kind, GDBIndexEntryLinkage Static)
|
||||
: Kind(Kind), Static(Static) {}
|
||||
/* implicit */ PubIndexEntryDescriptor(GDBIndexEntryKind Kind)
|
||||
: Kind(Kind), Static(false) {}
|
||||
: Kind(Kind), Static(GIEL_EXTERNAL) {}
|
||||
explicit PubIndexEntryDescriptor(uint8_t Value)
|
||||
: Kind(static_cast<GDBIndexEntryKind>((Value & KIND_MASK) >>
|
||||
KIND_OFFSET)),
|
||||
Static(Value & STATIC_MASK) {}
|
||||
Static(static_cast<GDBIndexEntryLinkage>((Value & LINKAGE_MASK) >>
|
||||
LINKAGE_OFFSET)) {}
|
||||
uint8_t toBits() {
|
||||
return Kind << KIND_OFFSET | Static << STATIC_OFFSET;
|
||||
return Kind << KIND_OFFSET | Static << LINKAGE_OFFSET;
|
||||
}
|
||||
private:
|
||||
enum {
|
||||
KIND_OFFSET = 4,
|
||||
KIND_MASK = 7 << KIND_OFFSET,
|
||||
STATIC_OFFSET = 7,
|
||||
STATIC_MASK = 1 << STATIC_OFFSET
|
||||
LINKAGE_OFFSET = 7,
|
||||
LINKAGE_MASK = 1 << LINKAGE_OFFSET
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -2401,8 +2401,11 @@ void DwarfDebug::emitDebugPubNames(bool GnuStyle) {
|
||||
Asm->EmitInt32(Entity->getOffset());
|
||||
|
||||
if (GnuStyle) {
|
||||
Asm->OutStreamer.AddComment("Index value");
|
||||
Asm->EmitInt8(computeIndexValue(TheCU, Entity).toBits());
|
||||
dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheCU, Entity);
|
||||
Asm->OutStreamer.AddComment(
|
||||
"Kind: " + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
|
||||
dwarf::GDBIndexEntryLinkageString(Desc.Static));
|
||||
Asm->EmitInt8(Desc.toBits());
|
||||
}
|
||||
|
||||
if (Asm->isVerbose())
|
||||
@ -2460,8 +2463,11 @@ void DwarfDebug::emitDebugPubTypes(bool GnuStyle) {
|
||||
Asm->EmitInt32(Entity->getOffset());
|
||||
|
||||
if (GnuStyle) {
|
||||
Asm->OutStreamer.AddComment("Index value");
|
||||
Asm->EmitInt8(computeIndexValue(TheCU, Entity).toBits());
|
||||
dwarf::PubIndexEntryDescriptor Desc = computeIndexValue(TheCU, Entity);
|
||||
Asm->OutStreamer.AddComment(
|
||||
"Kind: " + dwarf::GDBIndexEntryKindString(Desc.Kind) + ", " +
|
||||
dwarf::GDBIndexEntryLinkageString(Desc.Static));
|
||||
Asm->EmitInt8(Desc.toBits());
|
||||
}
|
||||
|
||||
if (Asm->isVerbose())
|
||||
|
@ -12,6 +12,8 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Support/Dwarf.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
|
||||
using namespace llvm;
|
||||
using namespace dwarf;
|
||||
|
||||
@ -739,3 +741,35 @@ const char *llvm::dwarf::AtomTypeString(unsigned AT) {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
StringRef llvm::dwarf::GDBIndexEntryKindString(GDBIndexEntryKind Kind) {
|
||||
switch (Kind) {
|
||||
case GIEK_NONE:
|
||||
return "NONE";
|
||||
case GIEK_TYPE:
|
||||
return "TYPE";
|
||||
case GIEK_VARIABLE:
|
||||
return "VARIABLE";
|
||||
case GIEK_FUNCTION:
|
||||
return "FUNCTION";
|
||||
case GIEK_OTHER:
|
||||
return "OTHER";
|
||||
case GIEK_UNUSED5:
|
||||
return "UNUSED5";
|
||||
case GIEK_UNUSED6:
|
||||
return "UNUSED6";
|
||||
case GIEK_UNUSED7:
|
||||
return "UNUSED7";
|
||||
}
|
||||
llvm_unreachable("Unknown GDBIndexEntryKind value");
|
||||
}
|
||||
|
||||
StringRef llvm::dwarf::GDBIndexEntryLinkageString(GDBIndexEntryLinkage Linkage) {
|
||||
switch (Linkage) {
|
||||
case GIEL_EXTERNAL:
|
||||
return "EXTERNAL";
|
||||
case GIEL_STATIC:
|
||||
return "STATIC";
|
||||
}
|
||||
llvm_unreachable("Unknown GDBIndexEntryLinkage value");
|
||||
}
|
||||
|
@ -33,18 +33,18 @@
|
||||
; }
|
||||
|
||||
|
||||
; CHECK: .byte 32 # Index value
|
||||
; CHECK: .byte 32 # Kind: VARIABLE, EXTERNAL
|
||||
; CHECK-NEXT: .asciz "global_namespace_variable" # External Name
|
||||
; CHECK: .byte 48 # Index value
|
||||
; CHECK: .asciz "global_namespace_function" # External Name
|
||||
; CHECK: .byte 176 # Index value
|
||||
; CHECK: .asciz "static_member_function" # External Name
|
||||
; CHECK: .byte 32 # Index value
|
||||
; CHECK: .asciz "global_variable" # External Name
|
||||
; CHECK: .byte 48 # Index value
|
||||
; CHECK: .asciz "global_function" # External Name
|
||||
; CHECK: .byte 176 # Index value
|
||||
; CHECK: .asciz "member_function" # External Name
|
||||
; CHECK: .byte 48 # Kind: FUNCTION, EXTERNAL
|
||||
; CHECK-NEXT: .asciz "global_namespace_function" # External Name
|
||||
; CHECK: .byte 176 # Kind: FUNCTION, STATIC
|
||||
; CHECK-NEXT: .asciz "static_member_function" # External Name
|
||||
; CHECK: .byte 32 # Kind: VARIABLE, EXTERNAL
|
||||
; CHECK-NEXT: .asciz "global_variable" # External Name
|
||||
; CHECK: .byte 48 # Kind: FUNCTION, EXTERNAL
|
||||
; CHECK-NEXT: .asciz "global_function" # External Name
|
||||
; CHECK: .byte 176 # Kind: FUNCTION, STATIC
|
||||
; CHECK-NEXT: .asciz "member_function" # External Name
|
||||
|
||||
%struct.C = type { i8 }
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user