118334Speter/* Copyright (C) 2021-2024 Free Software Foundation, Inc.
290075Sobrien   Contributed by Oracle.
390075Sobrien
418334Speter   This file is part of GNU Binutils.
590075Sobrien
618334Speter   This program is free software; you can redistribute it and/or modify
790075Sobrien   it under the terms of the GNU General Public License as published by
890075Sobrien   the Free Software Foundation; either version 3, or (at your option)
990075Sobrien   any later version.
1090075Sobrien
1118334Speter   This program is distributed in the hope that it will be useful,
1290075Sobrien   but WITHOUT ANY WARRANTY; without even the implied warranty of
1390075Sobrien   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1490075Sobrien   GNU General Public License for more details.
1590075Sobrien
1618334Speter   You should have received a copy of the GNU General Public License
1718334Speter   along with this program; if not, write to the Free Software
1890075Sobrien   Foundation, 51 Franklin Street - Fifth Floor, Boston,
1990075Sobrien   MA 02110-1301, USA.  */
2090075Sobrien
2118334Speter/* Lineage events for process fork, exec, etc. */
2218334Speter
2318334Speter#ifndef DESCENDANTS_H
2450397Sobrien#define DESCENDANTS_H
2518334Speter
2650397Sobrien#include <dlfcn.h>
2790075Sobrien#include <errno.h>
2818334Speter#include <fcntl.h>
2918334Speter#include <alloca.h>
3050397Sobrien#include <assert.h>
3150397Sobrien
3290075Sobrien#include "gp-defs.h"
3318334Speter#include "gp-experiment.h"
3490075Sobrien#include "collector.h"
3590075Sobrien#include "memmgr.h"
3618334Speter#include "cc_libcollector.h"
3790075Sobrien#include "tsd.h"
3890075Sobrien
3990075Sobrien/* configuration, not changed after init. */
4090075Sobrientypedef enum
4118334Speter{
4250397Sobrien  LM_DORMANT        = -2,   /* env vars preserved, not recording */
4390075Sobrien  LM_CLOSED         = -1,   /* env vars cleared, not recording */
4418334Speter  LM_TRACK_LINEAGE  = 1,    /* env vars preserved, recording */
4518334Speter} line_mode_t;
4618334Speter
4790075Sobrienextern line_mode_t line_mode;
4818334Speterextern int user_follow_mode;
4918334Speterextern int java_mode;
5018334Speterextern int dbg_current_mode; 	/* for debug only */
5190075Sobrienextern unsigned line_key;
5218334Speterextern char **sp_env_backup;
5390075Sobrien
5490075Sobrien#define INIT_REENTRANCE(x)  ((x) = __collector_tsd_get_by_key (line_key))
5590075Sobrien#define CHCK_REENTRANCE(x)  (((INIT_REENTRANCE(x)) == NULL) || (*(x) != 0))
5690075Sobrien#define PUSH_REENTRANCE(x)  ((*(x))++)
5790075Sobrien#define POP_REENTRANCE(x)   ((*(x))--)
5890075Sobrien
5990075Sobrien/* environment variables that must be forwarded to descendents */
6090075Sobrien#define SP_COLLECTOR_PARAMS         "SP_COLLECTOR_PARAMS"
6190075Sobrien#define SP_COLLECTOR_EXPNAME        "SP_COLLECTOR_EXPNAME"
6218334Speter#define SP_COLLECTOR_FOLLOW_SPEC    "SP_COLLECTOR_FOLLOW_SPEC"
6318334Speter#define SP_COLLECTOR_FOUNDER        "SP_COLLECTOR_FOUNDER"
6418334Speter#define SP_PRELOAD_STRINGS          "SP_COLLECTOR_PRELOAD"
6518334Speter#define LD_PRELOAD_STRINGS          "LD_PRELOAD"
6618334Speter#define SP_LIBPATH_STRINGS          "SP_COLLECTOR_LIBRARY_PATH"
6718334Speter#define LD_LIBPATH_STRINGS          "LD_LIBRARY_PATH"
6818334Speter#define JAVA_TOOL_OPTIONS          "JAVA_TOOL_OPTIONS"
6918334Speter#define COLLECTOR_JVMTI_OPTION     "-agentlib:gp-collector"
7018334Speter
7118334Speterextern int __collector_linetrace_shutdown_hwcs_6830763_XXXX;
7290075Sobrienextern void __collector_env_unset (char *envp[]);
7390075Sobrienextern void __collector_env_save_preloads ();
7490075Sobrienextern char ** __collector_env_backup ();
7590075Sobrienextern void __collector_env_backup_free ();
7690075Sobrienextern void __collector_env_update (char *envp[]);
7790075Sobrienextern void __collector_env_print (char *label);
7890075Sobrienextern void __collector_env_printall (char *label, char *envp[]);
7990075Sobrienextern char ** __collector_env_allocate (char *const old_env[], int allocate_env);
8090075Sobrien
8190075Sobrien#endif
8290075Sobrien