mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-24 22:24:54 +00:00
Fix the bug that was preventing the parser from working on all bytecode
files. It was reading non-initialized global vars when the flag said it was initialized and vice versa. Causes mis-alignment since initialized and non-initialized constants have different bytecode lengths. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14057 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -156,7 +156,8 @@ void AbstractBytecodeParser::ParseBasicBlock(BufPtr &Buf,
|
|||||||
/// ParseInstructionList - Parse all of the BasicBlock's & Instruction's in the
|
/// ParseInstructionList - Parse all of the BasicBlock's & Instruction's in the
|
||||||
/// body of a function. In post 1.0 bytecode files, we no longer emit basic
|
/// body of a function. In post 1.0 bytecode files, we no longer emit basic
|
||||||
/// block individually, in order to avoid per-basic-block overhead.
|
/// block individually, in order to avoid per-basic-block overhead.
|
||||||
unsigned AbstractBytecodeParser::ParseInstructionList( BufPtr &Buf, BufPtr EndBuf) {
|
unsigned AbstractBytecodeParser::ParseInstructionList( BufPtr &Buf,
|
||||||
|
BufPtr EndBuf) {
|
||||||
unsigned BlockNo = 0;
|
unsigned BlockNo = 0;
|
||||||
std::vector<unsigned> Args;
|
std::vector<unsigned> Args;
|
||||||
|
|
||||||
@@ -698,12 +699,11 @@ void AbstractBytecodeParser::ParseModuleGlobalInfo(BufPtr &Buf, BufPtr End) {
|
|||||||
const Type *ElTy = cast<PointerType>(Ty)->getElementType();
|
const Type *ElTy = cast<PointerType>(Ty)->getElementType();
|
||||||
|
|
||||||
// Create the global variable...
|
// Create the global variable...
|
||||||
if (hasInitializer)
|
if (hasInitializer) {
|
||||||
handler->handleGlobalVariable( ElTy, isConstant, Linkage );
|
|
||||||
else {
|
|
||||||
unsigned initSlot = read_vbr_uint(Buf,End);
|
unsigned initSlot = read_vbr_uint(Buf,End);
|
||||||
handler->handleInitializedGV( ElTy, isConstant, Linkage, initSlot );
|
handler->handleInitializedGV( ElTy, isConstant, Linkage, initSlot );
|
||||||
}
|
} else
|
||||||
|
handler->handleGlobalVariable( ElTy, isConstant, Linkage );
|
||||||
|
|
||||||
// Get next item
|
// Get next item
|
||||||
VarType = read_vbr_uint(Buf, End);
|
VarType = read_vbr_uint(Buf, End);
|
||||||
|
@@ -156,7 +156,8 @@ void AbstractBytecodeParser::ParseBasicBlock(BufPtr &Buf,
|
|||||||
/// ParseInstructionList - Parse all of the BasicBlock's & Instruction's in the
|
/// ParseInstructionList - Parse all of the BasicBlock's & Instruction's in the
|
||||||
/// body of a function. In post 1.0 bytecode files, we no longer emit basic
|
/// body of a function. In post 1.0 bytecode files, we no longer emit basic
|
||||||
/// block individually, in order to avoid per-basic-block overhead.
|
/// block individually, in order to avoid per-basic-block overhead.
|
||||||
unsigned AbstractBytecodeParser::ParseInstructionList( BufPtr &Buf, BufPtr EndBuf) {
|
unsigned AbstractBytecodeParser::ParseInstructionList( BufPtr &Buf,
|
||||||
|
BufPtr EndBuf) {
|
||||||
unsigned BlockNo = 0;
|
unsigned BlockNo = 0;
|
||||||
std::vector<unsigned> Args;
|
std::vector<unsigned> Args;
|
||||||
|
|
||||||
@@ -698,12 +699,11 @@ void AbstractBytecodeParser::ParseModuleGlobalInfo(BufPtr &Buf, BufPtr End) {
|
|||||||
const Type *ElTy = cast<PointerType>(Ty)->getElementType();
|
const Type *ElTy = cast<PointerType>(Ty)->getElementType();
|
||||||
|
|
||||||
// Create the global variable...
|
// Create the global variable...
|
||||||
if (hasInitializer)
|
if (hasInitializer) {
|
||||||
handler->handleGlobalVariable( ElTy, isConstant, Linkage );
|
|
||||||
else {
|
|
||||||
unsigned initSlot = read_vbr_uint(Buf,End);
|
unsigned initSlot = read_vbr_uint(Buf,End);
|
||||||
handler->handleInitializedGV( ElTy, isConstant, Linkage, initSlot );
|
handler->handleInitializedGV( ElTy, isConstant, Linkage, initSlot );
|
||||||
}
|
} else
|
||||||
|
handler->handleGlobalVariable( ElTy, isConstant, Linkage );
|
||||||
|
|
||||||
// Get next item
|
// Get next item
|
||||||
VarType = read_vbr_uint(Buf, End);
|
VarType = read_vbr_uint(Buf, End);
|
||||||
|
Reference in New Issue
Block a user