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