Changeset 960f8476 in mainline for boot/tools/pack.py
- Timestamp:
- 2008-05-30T14:22:58Z (17 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- afb1e35
- Parents:
- 136edca
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/tools/pack.py
r136edca r960f8476 37 37 def usage(prname): 38 38 "Print usage syntax" 39 print prname + " <OBJCOPY> <FORMAT> < OUTPUT_FORMAT> <ARCH> <ALIGNMENT>"39 print prname + " <OBJCOPY> <FORMAT> <ARCH> <ALIGNMENT> <UINTPTR>" 40 40 41 41 def main(): … … 44 44 return 45 45 46 if (not sys.argv[ 5].isdigit()):46 if (not sys.argv[4].isdigit()): 47 47 print "<ALIGNMENT> must be a number" 48 48 return 49 49 50 templatename = "_link.ld.in"51 workdir = os.getcwd()52 50 objcopy = sys.argv[1] 53 51 format = sys.argv[2] 54 output_format= sys.argv[3]55 a rch = sys.argv[4]56 align = int(sys.argv[5], 0)52 arch = sys.argv[3] 53 align = int(sys.argv[4], 0) 54 uintptr = sys.argv[5] 57 55 58 link = file("_link.ld", "w") 56 workdir = os.getcwd() 57 59 58 header = file("_components.h", "w") 60 59 data = file("_components.c", "w") 61 62 link.write("OUTPUT_FORMAT(\"" + output_format + "\")\n")63 link.write("OUTPUT_ARCH(" + arch + ")\n")64 link.write("ENTRY(start)\n\n")65 link.write("SECTIONS {\n")66 67 size = os.path.getsize(templatename)68 rd = 069 template = file(templatename, "r")70 71 while (rd < size):72 buf = template.read(4096)73 link.write(buf)74 rd += len(buf)75 76 template.close()77 78 link.write("\n")79 60 80 61 header.write("#ifndef ___COMPONENTS_H__\n") … … 86 67 87 68 cnt = 0 69 link = "" 88 70 for task in sys.argv[6:]: 89 71 basename = os.path.basename(task) … … 96 78 print task + " -> " + object 97 79 98 link.write("\t\t. = ALIGN(" + ("%d" % align) + ");\n") 99 link.write("\t\t*(." + plainname + "_image);\n\n") 80 if (align > 1): 81 link += "\t\t. = ALIGN(" + ("%d" % align) + ");\n" 82 83 link += "\t\t*(." + plainname + "_image);\n" 100 84 101 85 header.write("extern int " + symbol + "_start;\n") … … 103 87 header.write("#define " + macro + "_START ((void *) &" + symbol + "_start)\n") 104 88 header.write("#define " + macro + "_END ((void *) &" + symbol + "_end)\n") 105 header.write("#define " + macro + "_SIZE (( unsigned int) " + macro + "_END - (unsigned int) " + macro + "_START)\n\n")89 header.write("#define " + macro + "_SIZE ((" + uintptr + ") " + macro + "_END - (" + uintptr + ") " + macro + "_START)\n\n") 106 90 107 91 data.write("\tcomponents[" + ("%d" % cnt) + "].name = \"" + plainname + "\";\n") … … 119 103 os.chdir(workdir) 120 104 121 cnt = cnt +1105 cnt += 1 122 106 123 link.write("\t}\n")124 link.write("}\n")125 126 107 header.write("#define COMPONENTS " + ("%d" % cnt) + "\n\n") 127 108 header.write("typedef struct {\n") … … 129 110 header.write("\tvoid *start;\n") 130 111 header.write("\tvoid *end;\n") 131 header.write("\t unsigned intsize;\n")112 header.write("\t" + uintptr + " size;\n") 132 113 header.write("} component_t;\n\n") 133 114 header.write("extern void init_components(component_t *components);\n\n") … … 136 117 data.write("}\n") 137 118 138 link.close()139 119 header.close() 140 120 data.close() 121 122 linkname = "_link.ld" 123 link_in = file(linkname + ".in", "r") 124 template = link_in.read(os.path.getsize(linkname + ".in")) 125 link_in.close() 126 127 link_out = file(linkname, "w") 128 link_out.write(template.replace("[[COMPONENTS]]", link)) 129 link_out.close() 141 130 142 131 if __name__ == '__main__':
Note:
See TracChangeset
for help on using the changeset viewer.