12ca6e576421e86e0128991b825c238f1d4221910Joseph Wen#!/usr/bin/env python 22ca6e576421e86e0128991b825c238f1d4221910Joseph Wen# 32ca6e576421e86e0128991b825c238f1d4221910Joseph Wen# Copyright (C) 2011 The Android Open Source Project 42ca6e576421e86e0128991b825c238f1d4221910Joseph Wen# 52ca6e576421e86e0128991b825c238f1d4221910Joseph Wen# Licensed under the Apache License, Version 2.0 (the "License"); 62ca6e576421e86e0128991b825c238f1d4221910Joseph Wen# you may not use this file except in compliance with the License. 72ca6e576421e86e0128991b825c238f1d4221910Joseph Wen# You may obtain a copy of the License at 82ca6e576421e86e0128991b825c238f1d4221910Joseph Wen# 92ca6e576421e86e0128991b825c238f1d4221910Joseph Wen# http://www.apache.org/licenses/LICENSE-2.0 102ca6e576421e86e0128991b825c238f1d4221910Joseph Wen# 112ca6e576421e86e0128991b825c238f1d4221910Joseph Wen# Unless required by applicable law or agreed to in writing, software 122ca6e576421e86e0128991b825c238f1d4221910Joseph Wen# distributed under the License is distributed on an "AS IS" BASIS, 132ca6e576421e86e0128991b825c238f1d4221910Joseph Wen# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 142ca6e576421e86e0128991b825c238f1d4221910Joseph Wen# See the License for the specific language governing permissions and 152ca6e576421e86e0128991b825c238f1d4221910Joseph Wen# limitations under the License. 162ca6e576421e86e0128991b825c238f1d4221910Joseph Wen# 172ca6e576421e86e0128991b825c238f1d4221910Joseph Wen 182ca6e576421e86e0128991b825c238f1d4221910Joseph Wen 192ca6e576421e86e0128991b825c238f1d4221910Joseph Wen"""Convert data files to assembly output.""" 202ca6e576421e86e0128991b825c238f1d4221910Joseph Wen 212ca6e576421e86e0128991b825c238f1d4221910Joseph Wenimport sys 222ca6e576421e86e0128991b825c238f1d4221910Joseph Wen 232ca6e576421e86e0128991b825c238f1d4221910Joseph Wen 242ca6e576421e86e0128991b825c238f1d4221910Joseph Wendef PrintHeader(var_name): 252ca6e576421e86e0128991b825c238f1d4221910Joseph Wen """Print out header for assembly file.""" 262ca6e576421e86e0128991b825c238f1d4221910Joseph Wen sys.stdout.write(""" 272ca6e576421e86e0128991b825c238f1d4221910Joseph Wen#ifdef __APPLE_CC__ 282ca6e576421e86e0128991b825c238f1d4221910Joseph Wen/*\n\ 292ca6e576421e86e0128991b825c238f1d4221910Joseph Wen * The mid-2007 version of gcc that ships with Macs requires a\n\ 302ca6e576421e86e0128991b825c238f1d4221910Joseph Wen * comma on the .section line, but the rest of the world thinks\n\ 312ca6e576421e86e0128991b825c238f1d4221910Joseph Wen * that's a syntax error. It also wants globals to be explicitly\n\ 322ca6e576421e86e0128991b825c238f1d4221910Joseph Wen * prefixed with \"_\" as opposed to modern gccs that do the\n\ 332ca6e576421e86e0128991b825c238f1d4221910Joseph Wen * prefixing for you.\n\ 342ca6e576421e86e0128991b825c238f1d4221910Joseph Wen */\n\ 352ca6e576421e86e0128991b825c238f1d4221910Joseph Wen.globl _%s\n\ 362ca6e576421e86e0128991b825c238f1d4221910Joseph Wen .section .rodata,\n\ 372ca6e576421e86e0128991b825c238f1d4221910Joseph Wen .align 8\n\ 382ca6e576421e86e0128991b825c238f1d4221910Joseph Wen_%s:\n\ 392ca6e576421e86e0128991b825c238f1d4221910Joseph Wen#else\n\ 402ca6e576421e86e0128991b825c238f1d4221910Joseph Wen.globl %s\n\ 412ca6e576421e86e0128991b825c238f1d4221910Joseph Wen .section .rodata\n\ 422ca6e576421e86e0128991b825c238f1d4221910Joseph Wen .align 8\n\ 432ca6e576421e86e0128991b825c238f1d4221910Joseph Wen%s:\n\ 442ca6e576421e86e0128991b825c238f1d4221910Joseph Wen#endif\n\ 452ca6e576421e86e0128991b825c238f1d4221910Joseph Wen""" % (var_name, var_name, var_name, var_name)) 462ca6e576421e86e0128991b825c238f1d4221910Joseph Wen 472ca6e576421e86e0128991b825c238f1d4221910Joseph Wen 482ca6e576421e86e0128991b825c238f1d4221910Joseph Wendef File2Asm(var_name): 492ca6e576421e86e0128991b825c238f1d4221910Joseph Wen """Convert file to assembly output.""" 502ca6e576421e86e0128991b825c238f1d4221910Joseph Wen PrintHeader(var_name) 512ca6e576421e86e0128991b825c238f1d4221910Joseph Wen 522ca6e576421e86e0128991b825c238f1d4221910Joseph Wen input_size = 0 532ca6e576421e86e0128991b825c238f1d4221910Joseph Wen col = 0 542ca6e576421e86e0128991b825c238f1d4221910Joseph Wen while True: 552ca6e576421e86e0128991b825c238f1d4221910Joseph Wen buf = sys.stdin.read(1024) 562ca6e576421e86e0128991b825c238f1d4221910Joseph Wen if len(buf) <= 0: 572ca6e576421e86e0128991b825c238f1d4221910Joseph Wen break 582ca6e576421e86e0128991b825c238f1d4221910Joseph Wen input_size += len(buf) 592ca6e576421e86e0128991b825c238f1d4221910Joseph Wen for c in buf: 602ca6e576421e86e0128991b825c238f1d4221910Joseph Wen if col == 0: 612ca6e576421e86e0128991b825c238f1d4221910Joseph Wen sys.stdout.write(".byte ") 622ca6e576421e86e0128991b825c238f1d4221910Joseph Wen sys.stdout.write("0x%02x" % ord(c)) 632ca6e576421e86e0128991b825c238f1d4221910Joseph Wen col += 1 642ca6e576421e86e0128991b825c238f1d4221910Joseph Wen if col == 8: 652ca6e576421e86e0128991b825c238f1d4221910Joseph Wen sys.stdout.write("\n") 662ca6e576421e86e0128991b825c238f1d4221910Joseph Wen col = 0 672ca6e576421e86e0128991b825c238f1d4221910Joseph Wen elif col % 4 == 0: 682ca6e576421e86e0128991b825c238f1d4221910Joseph Wen sys.stdout.write(", ") 692ca6e576421e86e0128991b825c238f1d4221910Joseph Wen else: 702ca6e576421e86e0128991b825c238f1d4221910Joseph Wen sys.stdout.write(",") 712ca6e576421e86e0128991b825c238f1d4221910Joseph Wen if col != 0: 722ca6e576421e86e0128991b825c238f1d4221910Joseph Wen sys.stdout.write("\n") 732ca6e576421e86e0128991b825c238f1d4221910Joseph Wen 742ca6e576421e86e0128991b825c238f1d4221910Joseph Wen # encode file size 752ca6e576421e86e0128991b825c238f1d4221910Joseph Wen PrintHeader(var_name + "_size") 762ca6e576421e86e0128991b825c238f1d4221910Joseph Wen sys.stdout.write(" .long %d\n" % input_size) 772ca6e576421e86e0128991b825c238f1d4221910Joseph Wen 782ca6e576421e86e0128991b825c238f1d4221910Joseph Wen 792ca6e576421e86e0128991b825c238f1d4221910Joseph Wendef main(argv): 802ca6e576421e86e0128991b825c238f1d4221910Joseph Wen if len(argv) < 2: 812ca6e576421e86e0128991b825c238f1d4221910Joseph Wen print "usage: %s <name>" % argv[0] 822ca6e576421e86e0128991b825c238f1d4221910Joseph Wen return 1 832ca6e576421e86e0128991b825c238f1d4221910Joseph Wen 842ca6e576421e86e0128991b825c238f1d4221910Joseph Wen File2Asm(argv[1]) 852ca6e576421e86e0128991b825c238f1d4221910Joseph Wen 862ca6e576421e86e0128991b825c238f1d4221910Joseph Wenif __name__ == "__main__": 872ca6e576421e86e0128991b825c238f1d4221910Joseph Wen main(sys.argv) 88