Skip to content

Commit

Permalink
MC-COFF: Fix Simple and Complex type. Fixes PR8320.
Browse files Browse the repository at this point in the history
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116037 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
Bigcheese committed Oct 8, 2010
1 parent 290b316 commit 6ab219d
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 12 deletions.
2 changes: 1 addition & 1 deletion include/llvm/Support/COFF.h
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ namespace COFF {
IMAGE_SYM_DTYPE_ARRAY = 3, ///< An array of base type.

/// Type is formed as (base + (derived << SCT_COMPLEX_TYPE_SHIFT))
SCT_COMPLEX_TYPE_SHIFT = 8
SCT_COMPLEX_TYPE_SHIFT = 4
};

struct section {
Expand Down
35 changes: 24 additions & 11 deletions test/Scripts/coff-dump.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,8 @@ def symname(value):
('Name', ('scalar', '<8s', symname)),
('Value', ('scalar', '<L', '%d' )),
('SectionNumber', ('scalar', '<H', '%d' )),
('SimpleType', ('enum', '<B', '%d', {
('_Type', ('scalar', '<H', None )),
('SimpleType', ('enum', '& _Type 15', '%d', {
0: 'IMAGE_SYM_TYPE_NULL',
1: 'IMAGE_SYM_TYPE_VOID',
2: 'IMAGE_SYM_TYPE_CHAR',
Expand All @@ -184,8 +185,8 @@ def symname(value):
13: 'IMAGE_SYM_TYPE_WORD',
14: 'IMAGE_SYM_TYPE_UINT',
15: 'IMAGE_SYM_TYPE_DWORD',
})),
('ComplexType', ('enum', '<B', '%d', {
})), # (Type & 0xF0) >> 4
('ComplexType', ('enum', '>> & _Type 240 4', '%d', {
0: 'IMAGE_SYM_DTYPE_NULL',
1: 'IMAGE_SYM_DTYPE_POINTER',
2: 'IMAGE_SYM_DTYPE_FUNCTION',
Expand Down Expand Up @@ -317,7 +318,7 @@ def print_binary_data(size):
write("%s|%s|\n" % (bytes, text))
return value

idlit = re.compile("[a-zA-Z][a-zA-Z0-9_-]*")
idlit = re.compile("[a-zA-Z_][a-zA-Z0-9_-]*")
numlit = re.compile("[0-9]+")

def read_value(expr):
Expand All @@ -335,11 +336,6 @@ def eval():
if expr == 'false':
return False

if len(token) > 1 and token[0] in ('=', '@', '<', '!', '>'):
val = read(expr)
assert(len(val) == 1)
return val[0]

if token == '+':
return eval() + eval()
if token == '-':
Expand All @@ -348,6 +344,19 @@ def eval():
return eval() * eval()
if token == '/':
return eval() / eval()
if token == '&':
return eval() & eval()
if token == '|':
return eval() | eval()
if token == '>>':
return eval() >> eval()
if token == '<<':
return eval() << eval()

if len(token) > 1 and token[0] in ('=', '@', '<', '!', '>'):
val = read(expr)
assert(len(val) == 1)
return val[0]

if idlit.match(token):
return Fields[token]
Expand All @@ -373,6 +382,8 @@ def write_value(format,value):
elif format_type is types.TupleType:
Fields['this'] = value
handle_element(format)
elif format_type is types.NoneType:
pass
else:
raise RuntimeError("unexpected type: %s" % repr(format_type))

Expand Down Expand Up @@ -448,11 +459,13 @@ def handle_struct(entry):
name = member[0]
type = member[1]

write("%s = "%name.ljust(24))
if name[0] != "_":
write("%s = " % name.ljust(24))

value = handle_element(type)

write("\n")
if name[0] != "_":
write("\n")

Fields[name] = value
newFields[name] = value
Expand Down

0 comments on commit 6ab219d

Please sign in to comment.