Changeset 960f8476 in mainline for boot/tools/pack.py


Ignore:
Timestamp:
2008-05-30T14:22:58Z (17 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
afb1e35
Parents:
136edca
Message:

finish unifying pack script

File:
1 edited

Legend:

Unmodified
Added
Removed
  • boot/tools/pack.py

    r136edca r960f8476  
    3737def usage(prname):
    3838        "Print usage syntax"
    39         print prname + " <OBJCOPY> <FORMAT> <OUTPUT_FORMAT> <ARCH> <ALIGNMENT>"
     39        print prname + " <OBJCOPY> <FORMAT> <ARCH> <ALIGNMENT> <UINTPTR>"
    4040
    4141def main():
     
    4444                return
    4545       
    46         if (not sys.argv[5].isdigit()):
     46        if (not sys.argv[4].isdigit()):
    4747                print "<ALIGNMENT> must be a number"
    4848                return
    4949       
    50         templatename = "_link.ld.in"
    51         workdir = os.getcwd()
    5250        objcopy = sys.argv[1]
    5351        format = sys.argv[2]
    54         output_format = sys.argv[3]
    55         arch = 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]
    5755       
    58         link = file("_link.ld", "w")
     56        workdir = os.getcwd()
     57       
    5958        header = file("_components.h", "w")
    6059        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 = 0
    69         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")
    7960       
    8061        header.write("#ifndef ___COMPONENTS_H__\n")
     
    8667       
    8768        cnt = 0
     69        link = ""
    8870        for task in sys.argv[6:]:
    8971                basename = os.path.basename(task)
     
    9678                print task + " -> " + object
    9779               
    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"
    10084               
    10185                header.write("extern int " + symbol + "_start;\n")
     
    10387                header.write("#define " + macro + "_START ((void *) &" + symbol + "_start)\n")
    10488                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")
    10690               
    10791                data.write("\tcomponents[" + ("%d" % cnt) + "].name = \"" + plainname + "\";\n")
     
    119103                os.chdir(workdir)
    120104               
    121                 cnt = cnt + 1
     105                cnt += 1
    122106               
    123         link.write("\t}\n")
    124         link.write("}\n")
    125        
    126107        header.write("#define COMPONENTS " + ("%d" % cnt) + "\n\n")
    127108        header.write("typedef struct {\n")
     
    129110        header.write("\tvoid *start;\n")
    130111        header.write("\tvoid *end;\n")
    131         header.write("\tunsigned int size;\n")
     112        header.write("\t" + uintptr + " size;\n")
    132113        header.write("} component_t;\n\n")
    133114        header.write("extern void init_components(component_t *components);\n\n")
     
    136117        data.write("}\n")
    137118       
    138         link.close()
    139119        header.close()
    140120        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()
    141130
    142131if __name__ == '__main__':
Note: See TracChangeset for help on using the changeset viewer.