QuakeForge  0.7.2.210-815cf
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
Relocation handling

Data Structures

struct  reloc_s
 Relocation record. More...
 

Typedefs

typedef struct reloc_s reloc_t
 Relocation record. More...
 

Enumerations

enum  reloc_type {
  rel_none, rel_op_a_def, rel_op_b_def, rel_op_c_def,
  rel_op_a_op, rel_op_b_op, rel_op_c_op, rel_def_op,
  rel_def_def, rel_def_func, rel_def_string, rel_def_field,
  rel_op_a_def_ofs, rel_op_b_def_ofs, rel_op_c_def_ofs, rel_def_def_ofs,
  rel_def_field_ofs
}
 Relocation record types. More...
 

Functions

reloc_tnew_reloc (struct defspace_s *space, int offset, reloc_type type)
 Create a relocation record of the specified type. More...
 
void reloc_attach_relocs (reloc_t *relocs, reloc_t **location)
 
void reloc_def_def (struct def_s *def, struct def_s *location)
 Create a relocation record for a data location referencing a def. More...
 
void reloc_def_def_ofs (struct def_s *def, struct def_s *location)
 Create a relocation record for a data location referencing a def. More...
 
void reloc_def_field (struct def_s *def, struct def_s *location)
 Create a relocation record for a data location referencing a field. More...
 
void reloc_def_field_ofs (struct def_s *def, struct def_s *location)
 Create a relocation record for a data location referencing a field. More...
 
void reloc_def_func (struct function_s *func, struct def_s *location)
 Create a relocation record for a data location referencing a function. More...
 
void reloc_def_op (struct ex_label_s *label, struct def_s *location)
 Create a relocation record for a data location referencing an instruction. More...
 
void reloc_def_string (struct def_s *location)
 Create a relocation record for a data location referencing a string. More...
 
void reloc_op_def (struct def_s *def, int offset, int field)
 Create a relocation record for an instruction referencing a def. More...
 
void reloc_op_def_ofs (struct def_s *def, int offset, int field)
 Create a relative relocation record for an instruction referencing a def. More...
 
void relocate_refs (reloc_t *refs, int offset)
 Perform all relocations in a relocation chain. More...
 

Detailed Description

Typedef Documentation

typedef struct reloc_s reloc_t

Relocation record.

One relocation record is created for each reference that needs to be updated.

Enumeration Type Documentation

enum reloc_type

Relocation record types.

Types marked with * are relative and fixed up before the qfo is written. Types marked with ! are handled by only the linker. Types marked with + use pr.relocs

Enumerator
rel_none 

no relocation

rel_op_a_def 

code[ref.offset].a = def offset

rel_op_b_def 

code[ref.offset].b = def offset

rel_op_c_def 

code[ref.offset].c = def offset

rel_op_a_op 
  • code[ref.offset].a = code offset - ref.offset
rel_op_b_op 
  • code[ref.offset].b = code offset - ref.offset
rel_op_c_op 
  • code[ref.offset].c = code offset - ref.offset
rel_def_op 
  • data[ref.offset] = code offset
rel_def_def 

data[ref.offset] = def offset

rel_def_func 

+(sometimes) data[ref.offset] = offset

rel_def_string 
  • ! data[ref.offset] = string index
rel_def_field 

! data[ref.offset] = field def offset

rel_op_a_def_ofs 

code[ref.offset].a += def offset

rel_op_b_def_ofs 

code[ref.offset].b += def offset

rel_op_c_def_ofs 

code[ref.offset].c += def offset

rel_def_def_ofs 

data[ref.offset] += def offset

rel_def_field_ofs 

data[ref.offset] += field def offset

Function Documentation

reloc_t* new_reloc ( struct defspace_s space,
int  offset,
reloc_type  type 
)

Create a relocation record of the specified type.

The current source file and line will be preserved in the relocation record.

Parameters
spaceThe defspace containting the location to be adjusted.
offsetThe address of the location to be adjusted.
typeThe type of relocation to be performed.
void reloc_attach_relocs ( reloc_t relocs,
reloc_t **  location 
)
void reloc_def_def ( struct def_s def,
struct def_s location 
)

Create a relocation record for a data location referencing a def.

The relocation record will be linked into the def's chain of relocation records.

When the relocation is performed, the target address will replace the value stored in the data location.

Parameters
defThe def being referenced.
locationDef describing the location of the reference to be adjusted. As the def's space and offset will be copied into the relocation record, a dummy def may be used.
void reloc_def_def_ofs ( struct def_s def,
struct def_s location 
)

Create a relocation record for a data location referencing a def.

The relocation record will be linked into the def's chain of relocation records.

When the relocation is performed, the target address will be added to the value stored in the data location.

Parameters
defThe def being referenced.
locationDef describing the location of the reference to be adjusted. As the def's space and offset will be copied into the relocation record, a dummy def may be used.
void reloc_def_field ( struct def_s def,
struct def_s location 
)

Create a relocation record for a data location referencing a field.

The relocation record will be linked into the def's chain of relocation records.

When the relocation is performed, the target address will replace the value stored in the data location.

Parameters
defThe def representing the field being referenced.
locationDef describing the location of the reference to be adjusted. As the def's space and offset will be copied into the relocation record, a dummy def may be used.
void reloc_def_field_ofs ( struct def_s def,
struct def_s location 
)

Create a relocation record for a data location referencing a field.

The relocation record will be linked into the def's chain of relocation records.

When the relocation is performed, the target address will be added to the value stored in the data location.

Parameters
defThe def representing the field being referenced.
locationDef describing the location of the reference to be adjusted. As the def's space and offset will be copied into the relocation record, a dummy def may be used.
void reloc_def_func ( struct function_s func,
struct def_s location 
)

Create a relocation record for a data location referencing a function.

The relocation record will be linked into the function's chain of relocation records.

When the relocation is performed, the function number will replace the value stored in the data location.

Parameters
funcThe function being referenced.
locationDef describing the location of the reference to be adjusted. As the def's space and offset will be copied into the relocation record, a dummy def may be used.
void reloc_def_op ( struct ex_label_s label,
struct def_s location 
)

Create a relocation record for a data location referencing an instruction.

The relocation record will be linked into the global chain of relocation records.

When the relocation is performed, the string index will replace the value stored in the data location.

Parameters
labelThe label representing the instruction being referenced.
locationDef describing the location of the reference to be adjusted. As the def's space and offset will be copied into the relocation record, a dummy def may be used.
void reloc_def_string ( struct def_s location)

Create a relocation record for a data location referencing a string.

The relocation record will be linked into the global chain of relocation records.

When the relocation is performed, the string index will replace the value stored in the data location.

Parameters
locationDef describing the location of the reference to be adjusted. As the def's space and offset will be copied into the relocation record, a dummy def may be used.
void reloc_op_def ( struct def_s def,
int  offset,
int  field 
)

Create a relocation record for an instruction referencing a def.

The relocation record will be linked into the def's chain of relocation records.

When the relocation is performed, the target address will replace the value stored in the instruction's operand field.

Parameters
defThe def being referenced.
offsetThe address of the instruction that will be adjusted.
fieldThe instruction field to be adjusted: 0 = opa, 1 = opb, 2 = opc.
void reloc_op_def_ofs ( struct def_s def,
int  offset,
int  field 
)

Create a relative relocation record for an instruction referencing a def.

The relocation record will be linked into the def's chain of relocation records.

When the relocation is performed, the target address will be added to the value stored in the instruction's operand field.

Parameters
defThe def being referenced.
offsetThe address of the instruction that will be adjusted.
fieldThe instruction field to be adjusted: 0 = opa, 1 = opb, 2 = opc.
void relocate_refs ( reloc_t refs,
int  offset 
)

Perform all relocations in a relocation chain.

Parameters
refsThe head of the relocation chain.
offsetThe value to be used in the relocations. This will either replace or be added to the value in the relocation target.