← Back to Patent Explorer
US5850554A Expired / Lapsed US ⏱️ 0.0 years remaining

Compiler tool set for efficiently generating and easily managing multiple program versions of different types

Assignee: Intel Corp
•
Filing: 1995-12-29
•
Granted: 1998-12-15
•
Expires: 2015-12-29
📄 Original PDF 🌐 Google Patents 🔄 Sync Now

Abstract

Abstract A compiler tool set manages the complexity of efficiently maintaining multiple versions of a program. This tool set generates various version types of a program in a manner that is easy to use, that is compatible with existing program generation build scripts and makefiles, and that minimizes recompilation. When the compiler of the present invention is invoked by a programmer command, a build script, or a makefile, it produces an augmented object file that contains sufficient information to subsequently generate different versions of the program. Subsequently, the linker of the present invention is invoked specifying the augmented object files to be linked and the version type to be produced as an executable file. The linker maintains a program and object module database that can hold substitution object modules corresponding to each (augmented object file, version type) pair. If any substitution object modules required to satisfy the user's request are missing or are not current in the database, then the linker invokes the compiler to generate them from the augmented object file. Function-by-function equivalence detection and dependency analysis minimize the number of substitution object modules recompiled. Any change in either a module's semantics or in its optimization decisions invalidates all old versions of the module. Finally, the linker places any newly compiled substitution object modules in the database, and builds the specified executable file from the appropriate substitution object modules from the database.

Inventors

  • 👤 Timothy M. Carver

Bibliographic Details

Application Number —
Jurisdiction US
Data Source google_patents
Last Synchronized 2026-11-06 01:50
CPC Classifications
G; G06; G06F; G06F8/00; G06F8/70; G06F8/71

Claims Analysis

Total Claims: 51
Claim 1
Independent Claim 187 words
A computer system comprising: a compiler to compile a user-specified source program into an augmented object module, and to compile said augmented object module into substitution object modules of a plurality of version types; a database to hold said substitution object modules; and a linker, coupled to said compiler and to said database, to link a user-specified augmented object module into an executable program of one of a plurality of user-specified version types, wherein if said version type is an ordinary version type, said user-specified augmented object module is linked into said executable program, else said linker to: i) determine whether or not said database holds a substitution object module that corresponds to said user-specified augmented object module, that is of said user-specified version type, and that is current; ii) if not, then invoke said compiler to further compile said user-specified augmented object module into said corresponding substitution object module of said user-specified version type and place the same into said database; and iii) link said corresponding substitution object module of said user-specified version type from said database into said executable program of said user-specified version type.
Claim 2
Dependent Claim 187 words
A computer system comprising: a compiler to compile a user-specified source program into an augmented object module, and to compile said augmented object module into substitution object modules of a plurality of version types; a database to hold said substitution object modules; and a linker, coupled to said compiler and to said database, to link a user-specified augmented object module into an executable program of one of a plurality of user-specified version types, wherein if said version type is an ordinary version type, said user-specified augmented object module is linked into said executable program, else said linker to: i) determine whether or not said database holds a substitution object module that corresponds to said user-specified augmented object module, that is of said user-specified version type, and that is current; ii) if not, then invoke said compiler to further compile said user-specified augmented object module into said corresponding substitution object module of said user-specified version type and place the same into said database; and iii) link said corresponding substitution object module of said user-specified version type from said database into said executable program of said user-specified version type.
Claim 3
Independent Claim 139 words
A method comprising: compiling a user-specified source program into an augmented object module; and linking said augmented object module into an executable program of a user-specified version type, wherein if said version type is an ordinary version type, said augmented object module is linked into said executable program, else said linking comprising: i) determining whether or not a database holds a substitution object module that corresponds to said user-specified augmented object module, that is of said user-specified version type, and that is current; ii) if not, then further compiling said user-specified augmented object module into said corresponding substitution object module of said user specified version type and placing the same into said database; and iii) linking said corresponding substitution object module of said user specified version type from said database into said executable program of said user-specified version type.
Claim 4
Independent Claim 139 words
A method comprising: compiling a user-specified source program into an augmented object module; and linking said augmented object module into an executable program of a user-specified version type, wherein if said version type is an ordinary version type, said augmented object module is linked into said executable program, else said linking comprising: i) determining whether or not a database holds a substitution object module that corresponds to said user-specified augmented object module, that is of said user-specified version type, and that is current; ii) if not, then further compiling said user-specified augmented object module into said corresponding substitution object module of said user specified version type and placing the same into said database; and iii) linking said corresponding substitution object module of said user specified version type from said database into said executable program of said user-specified version type.
Claim 5
Dependent Claim 162 words
A computer-readable storage medium having stored thereon a plurality of programming instructions for use by a processor, wherein execution of the plurality of programming instructions implements the method of: compiling a user-specified source program into an augmented object module; and linking said augmented object module into an executable program of a user-specified version type, wherein if said version type is an ordinary version type, said augmented object module it linked into said executable, else said linking comprising: i) determining whether or not a database holds a substitution object module that corresponds to said user-specified augmented object module, that is of said user-specified version type, and that is current; ii) if not, then further compiling said user-specified augmented object module into said corresponding substitution object module of said user-specified version type and placing the same into said database; and iii) linking said corresponding substitution object module of said user-specified version type from said database into said executable program of said user-specified version type.
Claim 6
Dependent Claim 162 words
A computer-readable storage medium having stored thereon a plurality of programming instructions for use by a processor, wherein execution of the plurality of programming instructions implements the method of: compiling a user-specified source program into an augmented object module; and linking said augmented object module into an executable program of a user-specified version type, wherein if said version type is an ordinary version type, said augmented object module it linked into said executable, else said linking comprising: i) determining whether or not a database holds a substitution object module that corresponds to said user-specified augmented object module, that is of said user-specified version type, and that is current; ii) if not, then further compiling said user-specified augmented object module into said corresponding substitution object module of said user-specified version type and placing the same into said database; and iii) linking said corresponding substitution object module of said user-specified version type from said database into said executable program of said user-specified version type.
Claim 7
Dependent Claim 215 words
A computer system comprising: a compiler to compile a user-specified plurality of source programs into a plurality of augmented object modules, and to compile each said augmented object module into substitution object modules of a plurality of version types; a database to hold program information and said substitution object modules; and a linker, coupled to said compiler and to said database, to link a user-specified plurality of augmented object modules into an executable program of a user-specified version type, wherein for each said user-specified augmented object module, if said user-specified version type is an ordinary version type, said user-specified augmented object module is linked into said executable programs, else said linker to: i) determine, based on said program information and said substitution object modules within said database, whether or not said database holds a substitution object module that corresponds thereto, that is of said user-specified version type, and that is current; ii) if not, then invoke said compiler to further compile said user-specified augmented object module into said corresponding substitution object module of said user-specified version type and to place the same into said database; iii) update said program information; and iv) link said corresponding substitution object module of said user-specified version type from said database into said executable program of said user-specified version type.
Claim 8
Dependent Claim 215 words
A computer system comprising: a compiler to compile a user-specified plurality of source programs into a plurality of augmented object modules, and to compile each said augmented object module into substitution object modules of a plurality of version types; a database to hold program information and said substitution object modules; and a linker, coupled to said compiler and to said database, to link a user-specified plurality of augmented object modules into an executable program of a user-specified version type, wherein for each said user-specified augmented object module, if said user-specified version type is an ordinary version type, said user-specified augmented object module is linked into said executable programs, else said linker to: i) determine, based on said program information and said substitution object modules within said database, whether or not said database holds a substitution object module that corresponds thereto, that is of said user-specified version type, and that is current; ii) if not, then invoke said compiler to further compile said user-specified augmented object module into said corresponding substitution object module of said user-specified version type and to place the same into said database; iii) update said program information; and iv) link said corresponding substitution object module of said user-specified version type from said database into said executable program of said user-specified version type.
Claim 9
Dependent Claim 15 words
The computer system of claim 4, wherein said specified version type is a debug version.
Claim 10
Dependent Claim 15 words
The computer system of claim 4, wherein said specified version type is an optimized version.
Claim 11
Dependent Claim 15 words
The computer system of claim 4, wherein said specified version type is an instrumented version.
Claim 12
Dependent Claim 21 words
The computer system of claim 4, wherein said augmented object module comprises a representation of said source program suitable for recompilation.
Claim 13
Dependent Claim 22 words
The computer system of claim 4, wherein said database is further to hold a representation of said source program suitable for recompilation.
Claim 14
Dependent Claim 31 words
The computer system of claim 4, wherein said augmented object module comprises a representation of said source program suitable for determining if different revisions of said source program are functionally equivalent.
Claim 15
Dependent Claim 32 words
The computer system of claim 4, wherein said database is further to hold a representation of said source program suitable for determining if different revisions of said source program are functionally equivalent.
Claim 16
Dependent Claim 29 words
The computer system of claim 4, wherein said augmented object module comprises a control-flow graph and an estimated run-time profile of each function held within said augmented object module.
Claim 17
Dependent Claim 33 words
The computer system of claim 4, wherein said database is further to hold a control-flow graph and an estimated run-time profile of each function held within said user-specified plurality of augmented object modules.
Claim 18
Dependent Claim 18 words
The computer system of claim 4, wherein said linker is further to determine what function-call sites are inlined.
Claim 19
Dependent Claim 21 words
The computer system of claim 4, wherein said linker is further to determine what data objects are placed in fast memory.
Claim 20
Dependent Claim 34 words
The computer system of claim 4, wherein said user-specified version type indicates at least two different version types of said plurality of augmented object modules and said corresponding substitution object modules to be linked.
Claim 21
Dependent Claim 274 words
The computer system of claim 4, wherein said linker to determine whether or not said database holds said substitution object modules is to: a) perform an initial link to determine what functions within said specified plurality of augmented object modules are to be included in said executable program; b) for each augmented object module whose compiler timestamp changed between the version in said augmented object module and the version in said database, said linker to mark each corresponding substitution object module within said database as not current; c) for each data object referenced in each function to be included, if the data object information of said data object has changed between the version in said augmented object module and the version in said database, said linker to mark all functions referencing that variable as having a propagating change; d) for each function to be included whose function equivalence representation changed between the version in said augmented object module and the version in said database, said linker to mark that function as having said propagating change; e) for each function to be included having an optimization decision that has changed between the version in said augmented object module and the version in said database, said linker to mark that function as having said propagating change; f) for each function having said propagating change, said linker to mark the functions that inline that function as having said propagating change, this step f) to continue until no more functions are marked; p1 g) for each substitution object module, said linker to mark it as not current if it contains any function marked as having said propagating change.
Claim 22
Independent Claim 155 words
A method comprising: compiling a user-specified plurality of source programs into a plurality of augmented object modules; and linking said plurality of augmented object modules into an executable program of a user-specified version type, wherein for each said augmented object module, if said version type is an ordinary version type, said augmented object module is linked into said executable program, else said linking comprising: i) determining, based on program information within a database, whether or not said database holds a substitution object module that corresponds thereto, that is of said user-specified version type, and that is current; ii) if not, then further compiling said augmented object module into said corresponding substitution object module of said user-specified version type and placing the same into said database; iii) updating said program information; and iv) linking said corresponding substitution object module of said user-specified version type from said database into said executable program of said user-specified version type.
Claim 23
Independent Claim 155 words
A method comprising: compiling a user-specified plurality of source programs into a plurality of augmented object modules; and linking said plurality of augmented object modules into an executable program of a user-specified version type, wherein for each said augmented object module, if said version type is an ordinary version type, said augmented object module is linked into said executable program, else said linking comprising: i) determining, based on program information within a database, whether or not said database holds a substitution object module that corresponds thereto, that is of said user-specified version type, and that is current; ii) if not, then further compiling said augmented object module into said corresponding substitution object module of said user-specified version type and placing the same into said database; iii) updating said program information; and iv) linking said corresponding substitution object module of said user-specified version type from said database into said executable program of said user-specified version type.
Claim 24
Dependent Claim 14 words
The method of claim 18, wherein said specified version type is a debug version.
Claim 25
Dependent Claim 14 words
The method of claim 18, wherein said specified version type is an optimized version.
Claim 26
Dependent Claim 14 words
The method of claim 18, wherein said specified version type is an instrumented version.
Claim 27
Dependent Claim 20 words
The method of claim 18, wherein said augmented object module comprises a representation of said source program suitable for recompilation.
Claim 28
Dependent Claim 21 words
The method of claim 18, wherein said database is further to hold a representation of said source program suitable for recompilation.
Claim 29
Dependent Claim 30 words
The method of claim 18, wherein said augmented object module comprises a representation of said source program suitable for determining if different revisions of said source program are functionally equivalent.
Claim 30
Dependent Claim 31 words
The method of claim 18, wherein said database is further to hold a representation of said source program suitable for determining if different revisions of said source program are functionally equivalent.
Claim 31
Dependent Claim 28 words
The method of claim 18, wherein said augmented object module comprises a control-flow graph and an estimated run-time profile of each function held within said augmented object module.
Claim 32
Dependent Claim 32 words
The method of claim 18, wherein said database is further to hold a control-flow graph and an estimated run-time profile of each function held within said user-specified plurality of augmented object module.
Claim 33
Dependent Claim 16 words
The method of claim 18, wherein said linking further comprises determining what function-call sites are inlined.
Claim 34
Dependent Claim 19 words
The method of claim 18, wherein said linking further comprises determining what data objects are placed in fast memory.
Claim 35
Dependent Claim 33 words
The method of claim 18, wherein said user-specified version type indicates at least two different version types of said plurality of augmented object modules and said corresponding substitution object modules to be linked.
Claim 36
Dependent Claim 246 words
The method of claim 18, wherein said determining whether or not said database holds said substitution object modules comprises: a) performing an initial link to determine what functions within said specified plurality of augmented object modules are to be included in said executable program; b) for each augmented object module whose compiler timestamp changed between the version in said augmented object module and the version in said database, marking each corresponding substitution object module as not current; c) for each data object referenced in each function to be included, if the data object information of said data object has changed between the version in said augmented object module and the version in said database, marking all functions that reference that variable as having a propagating change; d) for each function to be included whose function equivalence representation changed between the version in said augmented object module and the version in said database, marking that function as having said propagating change; e) for each function to be included whose optimization decision changed between the version in said augmented object module and the version in said database, marking that function as having said propagating change; f) for each function having said propagating change, marking the functions that inline that function as having said propagating change, and continuing this step f) until no more functions are marked; g) for each substitution object module, marking it as not current if it contains any function marked as having said propagating change.
Claim 37
Dependent Claim 180 words
A computer-readable storage medium having stored thereon a plurality of programming instructions for use by a processor, wherein execution of the plurality of programming instructions implement the method of: compiling a user-specified plurality of source programs into a plurality of augmented object modules; and linking said plurality of augmented object modules into an executable program of a user-specified version type, wherein for each said augmented object module, if said version type is an ordinary version type, said augmented object module is linked into said executable, else said linking comprising: i) determining, based on program information within a database, whether or not said database holds a substitution object module that corresponds thereto, that is of said user-specified version type, and that is current; ii) if not, then further compiling said augmented object module into said corresponding substitution object module of said user-specified version type and placing the same into said database; iii) updating said program information; and iv) linking said corresponding substitution object module of said user-specified version type from said database into said executable program of said user-specified version type.
Claim 38
Dependent Claim 180 words
A computer-readable storage medium having stored thereon a plurality of programming instructions for use by a processor, wherein execution of the plurality of programming instructions implement the method of: compiling a user-specified plurality of source programs into a plurality of augmented object modules; and linking said plurality of augmented object modules into an executable program of a user-specified version type, wherein for each said augmented object module, if said version type is an ordinary version type, said augmented object module is linked into said executable, else said linking comprising: i) determining, based on program information within a database, whether or not said database holds a substitution object module that corresponds thereto, that is of said user-specified version type, and that is current; ii) if not, then further compiling said augmented object module into said corresponding substitution object module of said user-specified version type and placing the same into said database; iii) updating said program information; and iv) linking said corresponding substitution object module of said user-specified version type from said database into said executable program of said user-specified version type.
Claim 39
Dependent Claim 16 words
The computer-readable storage medium of claim 32, wherein said specified version type is a debug version.
Claim 40
Dependent Claim 16 words
The computer-readable storage medium of claim 32, wherein said specified version type is an optimized version.
Claim 41
Dependent Claim 16 words
The computer-readable storage medium of claim 32, wherein said specified version type is an instrumented version.
Claim 42
Dependent Claim 22 words
The computer-readable storage medium of claim 32, wherein said augmented object module comprises a representation of said source program suitable for recompilation.
Claim 43
Dependent Claim 23 words
The computer-readable storage medium of claim 32, wherein said database is further to hold a representation of said source program suitable for recompilation.
Claim 44
Dependent Claim 32 words
The computer-readable storage medium of claim 32, wherein said augmented object module comprises a representation of said source program suitable for determining if different revisions of said source program are functionally equivalent.
Claim 45
Dependent Claim 33 words
The computer-readable storage medium of claim 32, wherein said database is further to hold a representation of said source program suitable for determining if different revisions of said source program are functionally equivalent.
Claim 46
Dependent Claim 30 words
The computer-readable storage medium of claim 32, wherein said augmented object module comprises a control-flow graph and an estimated run-time profile of each function held within said augmented object module.
Claim 47
Dependent Claim 34 words
The computer-readable storage medium of claim 32, wherein said database is further to hold a control-flow graph and an estimated run-time profile of each function held within said user-specified plurality of augmented object modules.
Claim 48
Dependent Claim 18 words
The computer-readable storage medium of claim 32, wherein said linking further comprises determining what function-call sites are inlined.
Claim 49
Dependent Claim 21 words
The computer-readable storage medium of claim 32, wherein said linking further comprises determining what data objects are placed in fast memory.
Claim 50
Dependent Claim 34 words
The computer-readable storage medium claim 32, wherein said user-specified version type indicates at least two different version types of said plurality of augmented object modules and said corresponding substitution object modules to be linked.
Claim 51
Dependent Claim 250 words
The computer software of claim 32, wherein said determining whether or not said database holds said substitution object modules comprises: a) performing an initial link to determine what functions within said specified plurality of augmented object modules are to be included in said executable program; b) for each augmented object module whose compiler timestamp changed between the version in said augmented object module and the version in said database, marking each corresponding substitution object module within said database as not current; c) for each data object referenced in each function to be included, if the data object information of said data object has changed between the version in said augmented object module and the version in said database, marking all functions that reference that variable as having a propagating change; d) for each function to be included whose function equivalence representation changed between the version in said augmented object module and the version in said database, marking that function as having said propagating change; e) for each function to be included whose optimization decision changed between the version in said augmented object module and the version in said database, marking that function as having said propagating change; f) for each function having said propagating change, marking the functions that inline that function as having said propagating change and continuing this step f) until no more functions are marked; g) for each substitution object module, marking it as not current if it contains any function marked as having said propagating change.

References Cited (Backward Citations)

US4558413A Cited
US5303376A Cited
US4809170A Cited
US5193191A Cited
US5175856A Cited
US5561803A Cited
US5561800A Cited

USPTO Annuity & Maintenance Windows

Annuity Stage Window Opens Payment Deadline Surcharge Period Until Estimated Fee Status
3.5 Years (Year 4) 2001-12-14 2002-06-15 2002-12-15 $2000.00 Window Closed / Lapsed
7.5 Years (Year 8) 2005-12-14 2006-06-15 2006-12-15 $3760.00 Window Closed / Lapsed
11.5 Years (Year 12) 2009-12-14 2010-06-15 2010-12-15 $7700.00 Window Closed / Lapsed

Assigned Categories & Tags

No categories assigned to this patent yet.

Assign Category Tag