symbol 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436
  1. .TH SYMBOL 2
  2. .SH NAME
  3. syminit, getsym, symbase, pc2sp, pc2line, textseg, line2addr, lookup, findlocal,
  4. getauto, findsym, localsym, globalsym, textsym, file2pc, fileelem, filesym,
  5. fileline, fnbound \- symbol table access functions
  6. .SH SYNOPSIS
  7. .B #include <u.h>
  8. .br
  9. .B #include <libc.h>
  10. .br
  11. .B #include <bio.h>
  12. .br
  13. .B #include <mach.h>
  14. .PP
  15. .ta \w'\fLmachines 'u
  16. .B
  17. int syminit(int fd, Fhdr *fp)
  18. .PP
  19. .B
  20. Sym *getsym(int index)
  21. .PP
  22. .B
  23. Sym *symbase(long *nsyms)
  24. .PP
  25. .B
  26. int fileelem(Sym **fp, uchar *encname, char *buf, int n)
  27. .PP
  28. .B
  29. int filesym(int index, char *buf, int n)
  30. .PP
  31. .B
  32. long pc2sp(ulong pc)
  33. .PP
  34. .B
  35. long pc2line(ulong pc)
  36. .PP
  37. .B
  38. void textseg(ulong base, Fhdr *fp)
  39. .PP
  40. .B
  41. long line2addr(ulong line, ulong basepc)
  42. .PP
  43. .B
  44. int lookup(char *fn, char *var, Symbol *s)
  45. .PP
  46. .B
  47. int findlocal(Symbol *s1, char *name, Symbol *s2)
  48. .PP
  49. .B
  50. int getauto(Symbol *s1, int off, int class, Symbol *s2)
  51. .PP
  52. .B
  53. int findsym(long addr, int class, Symbol *s)
  54. .PP
  55. .B
  56. int localsym(Symbol *s, int index)
  57. .PP
  58. .B
  59. int globalsym(Symbol *s, int index)
  60. .PP
  61. .B
  62. int textsym(Symbol *s, int index)
  63. .PP
  64. .B
  65. long file2pc(char *file, ulong line)
  66. .PP
  67. .B
  68. int fileline(char *str, int n, ulong addr)
  69. .PP
  70. .B
  71. int fnbound(long addr, ulong *bounds)
  72. .SH DESCRIPTION
  73. These functions provide machine-independent access to the
  74. symbol table of an executable file or executing process.
  75. The latter is accessible by opening the device
  76. .B /proc/\fIpid\fP/text
  77. as described in
  78. .IR proc (3).
  79. .IR Mach (2)
  80. and
  81. .IR object (2)
  82. describe additional library functions
  83. for processing executable and object files.
  84. .PP
  85. .IR Syminit ,
  86. .IR getsym ,
  87. .IR symbase ,
  88. .IR fileelem ,
  89. .IR pc2sp ,
  90. .IR pc2line ,
  91. and
  92. .I line2addr
  93. process the symbol table contained in an executable file
  94. or the
  95. .B text
  96. image of an executing program.
  97. The symbol table is stored internally as an array of
  98. .B Sym
  99. data structures as defined in
  100. .IR a.out (6).
  101. .PP
  102. .I Syminit
  103. uses the data in the
  104. .B Fhdr
  105. structure filled by
  106. .I crackhdr
  107. (see
  108. .IR mach (2))
  109. to read the raw symbol tables from the open file descriptor
  110. .IR fd .
  111. It returns the count of the number of symbols
  112. or \-1 if an error occurs.
  113. .PP
  114. .I Getsym
  115. returns the address of the
  116. .IR i th
  117. .B Sym
  118. structure or zero if
  119. .I index
  120. is out of range.
  121. .PP
  122. .I Symbase
  123. returns the address of the first
  124. .B Sym
  125. structure in the symbol table. The number of
  126. entries in the symbol table is returned in
  127. .IR nsyms .
  128. .PP
  129. .I Fileelem
  130. converts a file name, encoded as described in
  131. .IR a.out (6),
  132. to a character string.
  133. .I Fp
  134. is the base of
  135. an array of pointers to file path components ordered by path index.
  136. .I Encname
  137. is the address of an array of encoded
  138. file path components in the form of a
  139. .B z
  140. symbol table entry.
  141. .I Buf
  142. and
  143. .I n
  144. specify the
  145. address of a receiving character buffer and its length.
  146. .I Fileelem
  147. returns the length of the null-terminated string
  148. that is at most
  149. .IR n \-1
  150. bytes long.
  151. .PP
  152. .I Filesym
  153. is a higher-level interface to
  154. .IR fileelem .
  155. It fills
  156. .I buf
  157. with the name of the
  158. .IR i th
  159. file and returns the length of the null-terminated string
  160. that is at most
  161. .IR n \-1
  162. bytes long.
  163. File names are retrieved in no particular order, although
  164. the order of retrieval does not vary from one pass to the next.
  165. A zero is returned when
  166. .I index
  167. is too large or too small or an error occurs during file name
  168. conversion.
  169. .PP
  170. .I Pc2sp
  171. returns an offset associated with
  172. a given value of the program counter. Adding this offset
  173. to the current value of the stack pointer gives the address
  174. of the current stack frame. This approach only applies
  175. to the 68020 architecture; other architectures
  176. use a fixed stack frame offset by a constant contained
  177. in a dummy local variable (called
  178. .BR .frame )
  179. in the symbol table.
  180. .PP
  181. .I Pc2line
  182. returns the line number of the statement associated
  183. with the instruction address
  184. .IR pc .
  185. The
  186. line number is the absolute line number in the
  187. source file as seen by the compiler after pre-processing; the
  188. original line number in the source file may be derived from this
  189. value using the history stacks contained in the symbol table.
  190. .PP
  191. .I Pc2sp
  192. and
  193. .I pc2line
  194. must know the start and end addresses of the text segment
  195. for proper operation. These values are calculated from the
  196. file header by function
  197. .IR syminit .
  198. If the text segment address is changed, the application
  199. program must invoke
  200. .I textseg
  201. to recalculate the boundaries of the segment.
  202. .I Base
  203. is the new base address of the text segment and
  204. .I fp
  205. points to the
  206. .I Fhdr
  207. data structure filled by
  208. .IR crackhdr .
  209. .PP
  210. .I Line2addr
  211. converts a line number to an instruction address. The
  212. first argument is the absolute line number in
  213. a file. Since a line number does not uniquely identify
  214. an instruction location (e.g., every source file has line 1),
  215. a second argument specifies a text address
  216. from which the search begins. Usually this
  217. is the address of the first function in the file of interest.
  218. .PP
  219. .IR Pc2sp ,
  220. .IR pc2line ,
  221. and
  222. .I line2addr
  223. return \-1 in the case of an error.
  224. .PP
  225. .IR Lookup ,
  226. .IR findlocal ,
  227. .IR getauto ,
  228. .IR findsym ,
  229. .IR localsym ,
  230. .IR globalsym ,
  231. .IR textsym ,
  232. .IR file2pc ,
  233. and
  234. .I fileline
  235. operate on data structures riding above the raw symbol table.
  236. These data structures occupy memory
  237. and impose a startup penalty but speed retrievals
  238. and provide higher-level access to the basic symbol
  239. table data.
  240. .I Syminit
  241. must be called
  242. prior to using these functions.
  243. The
  244. .B Symbol
  245. data structure:
  246. .IP
  247. .EX
  248. typedef struct {
  249. void *handle; /* private */
  250. struct {
  251. char *name;
  252. long value;
  253. char type;
  254. char class;
  255. };
  256. } Symbol;
  257. .EE
  258. .LP
  259. describes a symbol table entry.
  260. The
  261. .B value
  262. field contains the offset of the symbol within its
  263. address space: global variables relative to the beginning
  264. of the data segment, text beyond the start of the text
  265. segment, and automatic variables and parameters relative
  266. to the stack frame. The
  267. .B type
  268. field contains the type of the symbol as defined in
  269. .IR a.out (6).
  270. The
  271. .B class
  272. field assigns the symbol to a general class;
  273. .BR CTEXT ,
  274. .BR CDATA ,
  275. .BR CAUTO ,
  276. and
  277. .B CPARAM
  278. are the most popular.
  279. .PP
  280. .I Lookup
  281. fills a
  282. .B Symbol
  283. structure with symbol table information. Global variables
  284. and functions are represented by a single name; local variables
  285. and parameters are uniquely specified by a function and
  286. variable name pair. Arguments
  287. .I fn
  288. and
  289. .I var
  290. contain the
  291. name of a function and variable, respectively.
  292. If both
  293. are non-zero, the symbol table is searched for a parameter
  294. or automatic variable. If only
  295. .I var
  296. is
  297. zero, the text symbol table is searched for function
  298. .IR fn .
  299. If only
  300. .I fn
  301. is zero, the global variable table
  302. is searched for
  303. .IR var .
  304. .PP
  305. .I Findlocal
  306. fills
  307. .I s2
  308. with the symbol table data of the automatic variable
  309. or parameter matching
  310. .IR name .
  311. .I S1
  312. is a
  313. .B Symbol
  314. data structure describing a function or a local variable;
  315. the latter resolves to its owning function.
  316. .PP
  317. .I Getauto
  318. searches the local symbols associated with function
  319. .I s1
  320. for an automatic variable or parameter located at stack
  321. offset
  322. .IR off .
  323. .I Class
  324. selects the class of
  325. variable:
  326. .B CAUTO
  327. or
  328. .BR CPARAM .
  329. .I S2
  330. is the address of a
  331. .B Symbol
  332. data structure to receive the symbol table information
  333. of the desired symbol.
  334. .PP
  335. .I Findsym
  336. returns the symbol table entry of type
  337. .I class
  338. stored near
  339. .IR addr .
  340. The selected symbol is a global variable or function
  341. with address nearest to and less than or equal to
  342. .IR addr .
  343. Class specification
  344. .B CDATA
  345. searches only the global variable symbol table; class
  346. .B CTEXT
  347. limits the search to the text symbol table.
  348. Class specification
  349. .B CANY
  350. searches the text table first, then the global table.
  351. .PP
  352. .I Localsym
  353. returns the
  354. .IR i th
  355. local variable in the function
  356. associated with
  357. .IR s .
  358. .I S
  359. may reference a function or a local variable; the latter
  360. resolves to its owning function.
  361. If the
  362. .IR i th
  363. local symbol exists,
  364. .I s
  365. is filled with the data describing it.
  366. .PP
  367. .I Globalsym
  368. loads
  369. .I s
  370. with the symbol table information of the
  371. .IR i th
  372. global variable.
  373. .PP
  374. .I Textsym
  375. loads
  376. .I s
  377. with the symbol table information of the
  378. .IR i th
  379. text symbol. The text symbols are ordered
  380. by increasing address.
  381. .PP
  382. .I File2pc
  383. returns a text address associated with
  384. .I line
  385. in file
  386. .IR file ,
  387. or -1 on an error.
  388. .PP
  389. .I Fileline
  390. converts text address
  391. .I addr
  392. to its equivalent
  393. line number in a source file. The result,
  394. a null terminated character string of
  395. the form
  396. .LR file:line ,
  397. is placed in buffer
  398. .I str
  399. of
  400. .I n
  401. bytes.
  402. .PP
  403. .I Fnbound
  404. returns the start and end addresses of the function containing
  405. the text address supplied as the first argument. The second
  406. argument is an array of two unsigned longs;
  407. .I fnbound
  408. places the bounding addresses of the function in the first
  409. and second elements of this array. The start address is the
  410. address of the first instruction of the function; the end
  411. address is the address of the start of the next function
  412. in memory, so it is beyond the end of the target function.
  413. .I Fnbound
  414. returns 1 if the address is within a text function, or zero
  415. if the address selects no function.
  416. .PP
  417. Functions
  418. .I file2pc
  419. and
  420. .I fileline
  421. may produce inaccurate results when applied to
  422. optimized code.
  423. .PP
  424. Unless otherwise specified, all functions return 1
  425. on success, or 0 on error. When an error occurs,
  426. a message describing it is stored in the system
  427. error buffer where it is available via
  428. .IR errstr .
  429. .SH SOURCE
  430. .B /sys/src/libmach
  431. .SH "SEE ALSO"
  432. .IR mach (2),
  433. .IR object (2),
  434. .IR errstr (2),
  435. .IR proc (3),
  436. .IR a.out (6)