Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(731)

Side by Side Diff: tools/set_abi_version.py

Issue 4181005: Fixes some bugs with memory setup and halt-sled allocation and... (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: '' Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tools/nacl_elf_constants.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright 2008, Google Inc. 2 # Copyright 2008, Google Inc.
3 # All rights reserved. 3 # All rights reserved.
4 # 4 #
5 # Redistribution and use in source and binary forms, with or without 5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions are 6 # modification, are permitted provided that the following conditions are
7 # met: 7 # met:
8 # 8 #
9 # * Redistributions of source code must retain the above copyright 9 # * Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer. 10 # notice, this list of conditions and the following disclaimer.
(...skipping 14 matching lines...) Expand all
25 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 30
31 31
32 import getopt 32 import getopt
33 import sys 33 import sys
34 34
35 import nacl_elf_constants
36
35 37
36 """Changes the OS ABI number of Native Client executables. 38 """Changes the OS ABI number of Native Client executables.
37 39
38 This module contains code for updating the OS ABI version number of 40 This module contains code for updating the OS ABI version number of
39 Native Client executables. This is needed, for example, for changing 41 Native Client executables. This is needed, for example, for changing
40 the bad executables checked into the service runtime test data 42 the bad executables checked into the service runtime test data
41 directory -- those executables were the result of hand editing of ELF 43 directory -- those executables were the result of hand editing of ELF
42 headers, since such bad executables cannot be created with our 44 headers, since such bad executables cannot be created with our
43 toolchain. 45 toolchain.
44 46
45 """ 47 """
46 48
49 ELF_OSABI_OFFSET = 7
47 ELF_ABIVERSION_OFFSET = 8 50 ELF_ABIVERSION_OFFSET = 8
48 51
52 OS_NUMBER_NACL = 123
49 53
50 def SetOsAbiVersion(elf_file_data, version): 54
55 def SetOsAbiVersion(elf_file_data, os_number, abi_version):
51 """Change the OS ABI number of a string, interpreted as an NaCl executable. 56 """Change the OS ABI number of a string, interpreted as an NaCl executable.
52 57
53 Args: 58 Args:
54 elf_file_data: the ELF NaCl executable (as a string) 59 elf_file_data: the ELF NaCl executable (as a string)
55 version: the desired version number (as an integer) 60 version: the desired version number (as an integer)
56 61
57 Returns: 62 Returns:
58 Updated ELF NaCl executable. 63 Updated ELF NaCl executable.
59 """ 64 """
60 return (elf_file_data[:ELF_ABIVERSION_OFFSET] 65 data = elf_file_data
61 + chr(version) + elf_file_data[ELF_ABIVERSION_OFFSET + 1:]) 66
67 data = (data[:ELF_OSABI_OFFSET]
68 + chr(os_number) + data[ELF_OSABI_OFFSET + 1:])
69 data = (data[:ELF_ABIVERSION_OFFSET]
70 + chr(abi_version) + data[ELF_ABIVERSION_OFFSET + 1:])
71 return data
62 #enddef 72 #enddef
63 73
64 74
65 def ModifyFileOsAbiVersion(filename, version): 75 def ModifyFileOsAbiVersion(filename, os_number, abi_version):
66 """Changes the OS ABI number of the named file. 76 """Changes the OS ABI number of the named file.
67 77
68 No sanity checking is done on the file's contents to verify that it 78 No sanity checking is done on the file's contents to verify that it
69 indeed is an ELF NaCl executable. 79 indeed is an ELF NaCl executable.
70 80
71 Args: 81 Args:
72 filename: the file to be modified. 82 filename: the file to be modified.
73 version: the new OS ABI version number. 83 version: the new OS ABI version number.
74 84
75 Returns: nothing. 85 Returns: nothing.
76 86
77 Throws: IOError if file does not exist or cannot be written. 87 Throws: IOError if file does not exist or cannot be written.
78 88
79 """ 89 """
80 file_data = open(filename, 'rb').read() 90 file_data = open(filename, 'rb').read()
81 open(filename, 'wb').write(SetOsAbiVersion(file_data, version)) 91 open(filename, 'wb').write(SetOsAbiVersion(file_data,
92 os_number, abi_version))
82 # enddef 93 # enddef
83 94
84 95
85 def ReadFileOsAbiVersion(filename): 96 def ReadFileOsAbiVersion(filename):
86 """Read the named ELF NaCl executable and return its OS ABI version number. 97 """Read the named ELF NaCl executable and return its OS ABI version number.
87 98
88 Args: 99 Args:
89 filename: the file from which the OS ABI number is extracted. 100 filename: the file from which the OS ABI number is extracted.
90 101
91 Returns: 102 Returns:
92 The OS ABI version number (as an integer). 103 The OS ABI version number (as an integer).
93 """ 104 """
94 return ord(open(filename, 'rb').read()[ELF_ABIVERSION_OFFSET]) 105 return ord(open(filename, 'rb').read()[ELF_ABIVERSION_OFFSET])
95 #enddef 106 #enddef
96 107
97 108
98 def main(argv): 109 def main(argv):
99 abi_version = -1 110 abi_version = -1
100 try: 111 try:
101 (opts, args) = getopt.getopt(argv[1:], 'v:') 112 (opts, args) = getopt.getopt(argv[1:], 'c:v:')
102 except getopt.error, e: 113 except getopt.error, e:
103 print >>sys.stderr, str(e) 114 print >>sys.stderr, str(e)
104 print >>sys.stderr, 'Usage: set_abi_version [-v version_num] filename...' 115 print >>sys.stderr, 'Usage: set_abi_version [-v version_num] filename...'
105 return 1 116 return 1
106 # endtry 117 # endtry
118
119 os_number = OS_NUMBER_NACL # default
120
107 for opt, val in opts: 121 for opt, val in opts:
108 if opt == '-v': 122 if opt == '-c':
123 const_dict = nacl_elf_constants.GetNaClElfConstants(val)
124 os_number = const_dict['ELFOSABI_NACL']
125 abi_version = const_dict['EF_NACL_ABIVERSION']
126 elif opt == '-v':
109 abi_version = int(val) 127 abi_version = int(val)
110 # endif 128 # endif
111 # endfor 129 # endfor
112 130
113 for filename in args: 131 for filename in args:
114 if abi_version == -1: 132 if abi_version == -1:
115 new_abi = 1 + ReadFileOsAbiVersion(filename) 133 new_abi = 1 + ReadFileOsAbiVersion(filename)
116 else: 134 else:
117 new_abi = abi_version 135 new_abi = abi_version
118 # endif 136 # endif
119 137
120 ModifyFileOsAbiVersion(filename, new_abi) 138 ModifyFileOsAbiVersion(filename, os_number, new_abi)
121 # endfor 139 # endfor
122 140
123 return 0 141 return 0
124 # enddef 142 # enddef
125 143
126 if __name__ == '__main__': 144 if __name__ == '__main__':
127 sys.exit(main(sys.argv)) 145 sys.exit(main(sys.argv))
128 # endif 146 # endif
OLDNEW
« no previous file with comments | « tools/nacl_elf_constants.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698