RQS64(1)RQS64(1)NAMErqs64 - Modifies 64-bit executable or shared object to be quickstart-
ready
SYNOPSISrqs64 [options] object
DESCRIPTIONrqs64 takes an object, either an executable or a shared object, and
using its liblist redoes all the pre-relocations. For shared object
only, if -load_address is specified, then the specified address is
used as the lowest virtual address for that shared object, otherwise
options -check_registry and/or -update_registry is used to figure out
possible quickstart addresses for that shared object, as does the ld
command.
rqs64 creates a new version of the object and saves it back in place,
overwriting the previous version, so user may want to save a copy of
the object somewhere before re-quickstarting it.
For an object to be re-quickstartable, the bit RHF_REQUICKSTART must
be set in the DT_MIPS_FLAGS field of its .dynamic section. This bit
is normally set by ld. After an object has been re-quickstarted, the
bit RHF_REQUICKSTARTED is set in the DT_MIPS_FLAGS field of its
.dynamic section.
With the -m option, rqs moves an object to a requested address even if
the result will not quickstart.
The following options are available:
-f or -force_requickstart
Requickstart object even if RHF_REQUICKSTART is not set in
object.
-t timestamp_value_in_hex or -timestamp timestamp_value_in_hex
Specifies a timestamp value in hex to replace the one in
the DT_MIPS_TIME_STAMP field of the .dynamic section,
applicable to shared object only.
-l text_address_in_hex or -load_address text_address_in_hex
Specifies the lowest virtual address for the shared object
being rqs'd, when specified, options -check_registry and
-update_registry will be ignored.
-c so_locations_file or -check_registry so_locations_file
Check the location of this shared object's segments and
make sure they stay out of the way of others in the
so_locations_file. A single registry file is allowed when
either -c or -u is specified. Applicable to shared object
only.
-u so_locations_file or -update_registry so_locations_file
Register the location of this shared object's segments and
make sure they stay out of the way of others in the
so_locations_file. so_locations_file is updated if it is
writable. A single registry file, either with -c or -u
specified is allowed. Applicable to shared object only.
-L Change the algorithm of searching for libraries to never
look in the default directories, namely /usr/lib:/lib.
This option has the same semantics as the -L in the ld
command.
-Ldir Change the algorithm of searching for libraries to look in
dir before looking in the default directories. This
option has the same semantics as the -Ldir option in the
ld command. The environment variable LD_LIBRARY64_PATH
can also be used for this purpose.
-m Move the DSO even if address overlaps are detected
(without this option address overlaps cause rqs to exit
without doing anything). If an address overlap is
detected the RHF_QUICKSTART flag is reset (to 0) in the
dynamic section. Generally useful only if the -l option
is also specified on the command line.
-v Makes rqs more verbose. Generally intended for debugging,
but is useful if you want to know if whether the -m option
detected any address overlaps. This enables a message to
be issued about such overlaps.
-r root_path or -root root_path
Change the path of the default directories that rqs uses
for searching libraries by appending root_path to the
front of the default path, just like that in _RLD_ROOT.
It can also be a colon(:) separated list. The environment
variable _RLD_ROOT can also be used for this purpose.
(For a new 32-bit ABI object, use _RLDN32_ROOT instead of
_RLD_ROOT).
-chroot root_path
This causes the named directory root_path to become the
root directory, the starting point for path searches for
path names beginning with /e.
-log logfile
Pipes all error messages to logfile instead of standard
output.
-rld_addr address
Sets the dynamic section DT_MIPS_RLD_TEXT_RESOLVE_ADDR to
address.
-rld_addr_only
Restricts the changes to the dynamic section
DT_MIPS_RLD_TEXT_RESOLVE_ADDR (effective only if the
-rld_addr option is also specified on the command line).
-rld_unresolve_check_only
Restricts the changes to the dynamic section's
DT_MIPS_FLAGS to set or unset RHF_NO_UNRES_UNDEF depending
on whether there were any undefined variables.
-rld_force_noquickstart_only
Restricts the changes to be to the dynamic section's
DT_MIPS_FLAGS to be to reset the RHF_QUICKSTART flag.
The following options must be put into the environment variable
_RQS_ARGS to be understood; they cannot be specified on the command
line.
"-debug map"
Used for debugging rqs. Prints information about the mapping
(address) of the object.
"-debug symbol"
Used for debugging rqs. Prints information about the symbol
searches and symbol finding in the object (in symbol relocation).
"-debug MALLOC"
Used for debugging rqs. Prints a trace of some of the
malloc/realloc calls.
"-debug hash"
Used for debugging rqs. Prints a trace of the hashing function
used when searching a hash table for a symbol.
NOTES
Some options have long and short spellings. For example, -f and
-force_requickstart do the same thing. The short form is easier to
remember and spell. Because the long form is used in existing scripts
and programs, both forms are supported.
Where any option specifies that a value supplied on the command line
is to be in hexadecimal, the value is interpreted as hexadecimal
digits whether or not a leading "0x" is part of the option value.
EXAMPLES
You may want to use the following example if a set of DSOs used by an
application takes too much virtual address space to lay out
sequentially, and the set is too large to try to provide an
so_locations at link time. This moves a set of DSOs to a common base
address.
#!/bin/sh
for in dso1.so dso2.so dso3.so
do
rqs -l 0x300000 -m -f $i
done
FILES
/usr/etc/rqs64 /usr/lib64/so_locations
SEE ALSOld(1), rld(1), rqsall(1), rqs(1)