1 /*-------------------------------------------------------------------------
2  * link-canary.c
3  *	  Detect whether src/common functions came from frontend or backend.
4  *
5  * Copyright (c) 2018-2020, PostgreSQL Global Development Group
6  *
7  * IDENTIFICATION
8  *	  src/common/link-canary.c
9  *
10  *-------------------------------------------------------------------------
11  */
12 #include "c.h"
13 
14 #include "common/link-canary.h"
15 
16 /*
17  * This function just reports whether this file was compiled for frontend
18  * or backend environment.  We need this because in some systems, mainly
19  * ELF-based platforms, it is possible for a shlib (such as libpq) loaded
20  * into the backend to call a backend function named XYZ in preference to
21  * the shlib's own function XYZ.  That's bad if the two functions don't
22  * act identically.  This exact situation comes up for many functions in
23  * src/common and src/port, where the same function names exist in both
24  * libpq and the backend but they don't act quite identically.  To verify
25  * that appropriate measures have been taken to prevent incorrect symbol
26  * resolution, libpq should test that this function returns true.
27  */
28 bool
pg_link_canary_is_frontend(void)29 pg_link_canary_is_frontend(void)
30 {
31 #ifdef FRONTEND
32 	return true;
33 #else
34 	return false;
35 #endif
36 }
37