/* Pattern 4: Some symbols belong to init section but still it is ok to reference these from non-init sections as these symbols don't have any memory allocated for them and symbol address and value are same. So even if init section is freed, its ok to reference those symbols. For ex. symbols marking the init section boundaries. This pattern is identified by refsymname = __init_begin, _sinittext, _einittext  */
static int secref_whitelist(const char *fromsec, const char *fromsym, const char *tosec, const char *tosym)
/* Pattern 4: Some symbols belong to init section but still it is ok to reference these from non-init sections as these symbols don't have any memory allocated for them and symbol address and value are same. So even if init section is freed, its ok to reference those symbols. For ex. symbols marking the init section boundaries. This pattern is identified by refsymname = __init_begin, _sinittext, _einittext  */
static int secref_whitelist(const char *fromsec, const char *fromsym, const char *tosec, const char *tosym)
{
	if (match(tosec, init_data_sections) &&
	    match(fromsec, data_sections) &&
	    (strncmp(fromsym, "__param", strlen("__param")) == 0))
		return 0;
	if (match(tosec, init_exit_sections) &&
	    match(fromsec, data_sections) &&
	    match(fromsym, symbol_white_list))
		return 0;
	if (match(fromsec, head_sections) &&
	    match(tosec, init_sections))
		return 0;
	if (match(tosym, linker_symbols))
		return 0;
	return 1;
}