Call function and not came back
You're overflowing your stack due to infinite recursion.

By explicitly calling loop() you are breaking the whole call stack system. You effectively have:

loop() -&gt;
  funca() -&gt;
    gsmtest() -&gt;
      loop() -&gt;
        funca() -&gt;
          gsmtest() -&gt;
            etc...


Instead of>

loop() -&gt;
    funca() -&gt;
        gsmtest()
    &lt;-
&lt;-


Instead of calling loop() you should use return; to "return" back to where the function was called from.   

For example:

void loop() {
    if (call == 1) {
        funca();
    }    
    print("waiting..");
}

void funca() {
    if (!gsmtest()) return;
    print("calling..")
}

bool gsmtest() {
    if (test == 1) {
        print("test ok");
    } else {
        print("error");
        return false;
    }
    return true;
}