Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
DEBUGINFOD_FIND_*(3)	   Library Functions Manual	  DEBUGINFOD_FIND_*(3)

NAME
       debuginfod_find_debuginfo - request debuginfo from debuginfod

SYNOPSIS
       #include	<elfutils/debuginfod.h>

       Link with -ldebuginfod.

       CONNECTION HANDLE

       debuginfod_client *debuginfod_begin(void);
       void debuginfod_end(debuginfod_client *client);

       LOOKUP FUNCTIONS

       int debuginfod_find_debuginfo(debuginfod_client *client,
				     const unsigned char *build_id,
				     int build_id_len,
				     char ** path);
       int debuginfod_find_executable(debuginfod_client	*client,
				      const unsigned char *build_id,
				      int build_id_len,
				      char ** path);
       int debuginfod_find_source(debuginfod_client *client,
				  const	unsigned char *build_id,
				  int build_id_len,
				  const	char *filename,
				  char ** path);

       OPTIONAL	FUNCTIONS

       typedef int (*debuginfod_progressfn_t)(debuginfod_client	*client,
					      long a, long b);
       void debuginfod_set_progressfn(debuginfod_client	*client,
				      debuginfod_progressfn_t progressfn);
       void debuginfod_set_verbose_fd(debuginfod_client	*client,
				      int fd);
       void debuginfod_set_user_data(debuginfod_client *client,
				     void *data);
       void* debuginfod_get_user_data(debuginfod_client	*client);
       const char* debuginfod_get_url(debuginfod_client	*client);
       int debuginfod_add_http_header(debuginfod_client	*client,
				      const char* header);

DESCRIPTION
       debuginfod_begin()  creates  a debuginfod_client	connection handle that
       should be used with all other calls.  debuginfod_end() should be	called
       on the client handle to release all state and storage when done.

       debuginfod_find_debuginfo(), debuginfod_find_executable(), and debugin-
       fod_find_source() query the debuginfod server URLs contained in $DEBUG-
       INFOD_URLS (see below) for the debuginfo,  executable  or  source  file
       with the	given build_id.	build_id should	be a pointer to	either a null-
       terminated, lowercase hex string	or a binary blob. If build_id is given
       as  a  hex  string,  build_id_len  should  be 0.	Otherwise build_id_len
       should be the number of bytes in	the binary blob.

       debuginfod_find_source()	also requires a	filename in order to specify a
       particular source file. filename	should be an absolute  path  that  in-
       cludes  the  compilation	directory of the CU associated with the	source
       file.  Relative path names commonly appear in the DWARF	file's	source
       directory,  but these paths are relative	to individual compilation unit
       AT_comp_dir paths, and yet an executable	is made	up  of	multiple  CUs.
       Therefore, to disambiguate, debuginfod expects source queries to	prefix
       relative	 path  names  with the CU compilation-directory, followed by a
       mandatory "/".

       Note: the caller	may or may not elide ../  or  /./  or  extraneous  ///
       sorts  of  path	components in the directory names.  debuginfod accepts
       both forms.  Specifically, debuginfod canonicalizes path	names  accord-
       ing  to	RFC3986	section	5.2.4 (Remove Dot Segments), plus reducing any
       // to / in the path.

       If path is not NULL and the query is successful,	path  is  set  to  the
       path of the file	in the cache. The caller must free() this value.

       The  URLs  in $DEBUGINFOD_URLS may be queried in	parallel. As soon as a
       debuginfod server begins	transferring the target	file all of  the  con-
       nections	to the other servers are closed.

       A  client handle	should be used from only one thread at a time.	A han-
       dle may be reused for a series of lookups, which	 can  improve  perfor-
       mance due to retention of connections and caches.

RETURN VALUE
       debuginfod_begin	 returns  the debuginfod_client	handle to use with all
       other calls.  On	error NULL will	be returned and	errno will be set.

       If a find family	function is successful,	the resulting file is saved to
       the client cache	and a file descriptor to that file is  returned.   The
       caller  needs  to close() this descriptor.  Otherwise, a	negative error
       code is returned.

OPTIONAL FUNCTIONS
       A small number of optional functions are	available to tune or query the
       operation of the	debuginfod client.

   PROGRESS CALLBACK
       As the debuginfod_find_*() functions may	block for seconds or longer, a
       progress	callback function is called periodically, if  configured  with
       debuginfod_set_progressfn().   This  function sets a new	progress call-
       back function (or NULL) for the client handle.

       The given callback function is called from the context of  each	thread
       that  is	 invoking  any of the other lookup functions.  It is given two
       numeric parameters that,	if thought of as a numerator a and denominator
       b, together represent a completion fraction a/b.	 The  denominator  may
       be  zero	initially, until a quantity such as an exact download size be-
       comes known.

       The progress callback function is also the supported way	 to  interrupt
       the  download  operation.  (The library does not	modify or trigger sig-
       nals.)  The progress callback must return 0 to continue	the  work,  or
       any  other  value  to stop work as soon as possible.  Consequently, the
       debuginfod_find_*() function will likely	 return	 with  an  error,  but
       might still succeed.

   VERBOSE OUTPUT
       The  debuginfod_find_*()	 functions  may	 use several techniques	to re-
       trieve the requested files, through the cache or	through	one or	multi-
       ple  servers  or	file URLs. To show how a query is handled the debugin-
       fod_set_verbose_fd() can	be used	to set a particular file descriptor on
       which verbose output is given about the query steps and eventual	errors
       encountered.

   USER	DATA POINTER
       A single	void * pointer associated with the connection  handle  may  be
       set   any   time	 via  debuginfod_set_user_data(),  and	retrieved  via
       debuginfod_get_user_data().  The	value is undefined if unset.

   URL
       The URL of the current or most recent outgoing download,	if known,  may
       be  retrieved via debuginfod_get_url() from the progressfn callback, or
       afterwards.  It may be NULL.  The resulting string is owned by the  li-
       brary, and must not be modified or freed.  The caller should copy it if
       it is needed beyond the release of the client object.

   HTTP	HEADER
       Before  each lookup function is initiated, a client application may add
       HTTP request headers.  These are	 reset	after  each  lookup  function.
       debuginfod_add_http_header()  may  be  called  with strings of the form
       "Header:	value".	 These strings are copied by the library.  A zero  re-
       turn  value  indicates success, but out-of-memory conditions may	result
       in a non-zero -ENOMEM. If the string is in the wrong form -EINVAL  will
       be returned.

       Note  that  the	current	 debuginfod-client library implementation uses
       libcurl,	but you	shouldn't rely on that fact. Don't use	this  function
       for replacing any standard headers, except for the User-Agent mentioned
       below.  The  only supported usage of this function is for adding	an op-
       tional header which might or might not be passed	through	to the	server
       for logging purposes only.

       By default, the library adds a descriptive User-Agent: header to	outgo-
       ing  requests.	If  the	client application adds	a header with the same
       name, this default is suppressed.

MACROS
   DEBUGINFOD_SONAME
       Defined to the string that could	be passed to dlopen(3) if the  library
       is loaded at runtime, for example

	   void	*debuginfod_so = dlopen(DEBUGINFOD_SONAME, RTLD_LAZY);

SECURITY
       debuginfod_find_debuginfo(), debuginfod_find_executable(), and debugin-
       fod_find_source()  do  not  include  any	 particular security features.
       They trust that the binaries returned by	the  debuginfod(s)  are	 accu-
       rate.   Therefore,  the list of servers should include only trustworthy
       ones.  If accessed across HTTP rather than HTTPS, the network should be
       trustworthy.  Passing user authentication information through  the  in-
       ternal  libcurl	library	is not currently enabled, except for the basic
       plaintext http[s]://userid:password@hostname/ style.   (The  debuginfod
       server  does  not  perform authentication, but a	front-end proxy	server
       could.)

ERRORS
       The following list is not comprehensive.	Error codes may	also originate
       from calls to various C Library functions.

       EACCESS
	      Denied access to resource	located	at the URL.

       ECONNREFUSED
	      Unable to	connect	to remote host.	Also returned  when  an	 HTTPS
	      connection couldn't be verified (bad certificate).

       ECONNRESET
	      Unable to	either send or receive network data.

       EHOSTUNREACH
	      Unable to	resolve	remote host.

       EINVAL One or more arguments are	incorrectly formatted. build_id	may be
	      too  long	 (greater than 256 characters),	filename may not be an
	      absolute path or a debuginfod URL	is malformed.

       EIO    Unable to	write data received from server	to local file.

       EMLINK Too many HTTP redirects.

       ENETUNREACH
	      Unable to	initialize network connection.

       ENOENT Could not	find the resource located at  URL.  Often  this	 error
	      code  indicates  that  a debuginfod server was successfully con-
	      tacted but the server could not find the target file.

       ENOMEM System is	unable to allocate resources.

       ENOSYS $DEBUGINFOD_URLS is not defined.

       ETIME  Query failed due to timeout. $DEBUGINFOD_TIMEOUT	and  $DEBUGIN-
	      FOD_MAXTIME control this.

       EF2BIG Query aborted due	to the file requested being too	big.  The $DE-
	      BUGINFOD_MAXSIZE controls	this.

SEE ALSO
       debuginfod(8)

							  DEBUGINFOD_FIND_*(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=debuginfod_get_user_data&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>

home | help