NMEDIT
Section: User Commands (1)
Updated: October 1, 2000
Index
Return to Main Contents
NAME
nmedit - change global symbols to local symbols
SYNOPSIS
nmedit
-s list_file [-R list_file] [-p] [-A] [-] [[-arch arch_type] ...] object_file ...
DESCRIPTION
Nmedit
changes the global symbols not listed in the
list_file
file of the
-s
list_file
option to static symbols. Undefined symbols and common symbols are not effected
and shouldn't be listed in
list_file.
For dynamic libraries symbols are turned into private extern symbols that are
no longer external (rather than static symbols). This is done so that the
references between modules of a dynamic library are resolved to the symbols in
the dynamic library.
Nmedit
differs from
strip(1)
in that it also changes the symbolic debugging information (produce by the
-g
option to
cc(1))
for the global symbols it changes to static symbols so that the resulting
object can still be used with the debugger.
Nmedit
like
strip(1)
is useful to limit the symbols for use with later linking.
This allows control of the interface that the executable wants to provide to the
objects that it will dynamiclly load, and it will not have to publish symbols
that are not part of it's interface. For example an executable that wishes to
allow only a subset of it's global symbols but all of the shared libraries
globals to be used would have it's symbol table edited with:
-
% nmedit -s interface_symbols -A executable
where the file
interface_symbols
would contain only those symbols from the executable
that it wishes the objects loaded with rld to have access to.
Another example is an object that is maded up of a number of other objects that
will be loaded into an executable would built and then have it's symbol table
edited with:
-
% ld -o relocatable.o -r a.o b.o c.o
% nmedit -s interface_symbols relocatable.o
which would leave only the symbols listed in the file
interface_symbols
(and the undefined and common symbols)
as global symbols in the object file.
The one or more of the following options is required to
nmedit(1)
is:
- -s filename
-
Leave the symbol table entries for the global symbols listed in
filename
global but turn all other global symbols (except undefined and common symbols)
into static symbols. The symbol names listed in
filename
must be one per line. Leading and trailing white space are not part of the
symbol name. Lines starting with # are ignored, as are lines with only
white space.
- -R filename
-
Change the symbol table entries for the global symbols listed in
filename
into static symbols. This file has the same format as the
-s
filename
option above.
If the
-R filename
option is specified without the
-s filename
option, then all symbols not listed in the
-R filename
option's filename are left as globals.
If both a
-R filename
and a
-s filename
are given the symbols listed in the
-R filename
are basicly ignored and only those symbols listed in the
-s filename
are saved.
- -p
-
Change symbols to private externs instead of static. This is allowed as the
only option to change all defined global symbols to private externs.
The options to
nmedit(1)
are:
- -A
-
Leave all global absolute symbols except those with a value of zero, and save
objective-C class symbols as globals. This is intended for use of programs
that use
rld(3)
and want the loaded code to use symbols from the shared libraries.
- -
-
Treat all remaining arguments as file names and not options.
- -arch arch_type
-
Specifies the architecture,
arch_type,
of the file for
nmedit(1)
to process when the file is a fat file (see
arch(3)
for the currently know
arch_types).
The
arch_type
can be
all
to process all architectures in the file.
The default is to process all architectures that are contained in
the file.
SEE ALSO
strip(1), ld(1), rld(3), arch(3)
BUGS
The changing of the symbolic debugging information by
nmedit
is not known to be totally correct and could cause the debugger to crash, get
confused or produce incorrect information.
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- SEE ALSO
-
- BUGS
-
This document was created by
man2html,
using the manual pages.
Time: 04:32:01 GMT, April 24, 2025